전체 글 (62) 썸네일형 리스트형 CDN 이란? 글로벌 서비스 캐싱 전략 CDN(Content Delivery Network)는 사용자와 서버가 물리적으로 멀리 떨어진 경우 발생하는 응답 속도의 한계를 극복하기 위해 고안된 서비스입니다. 왜 CDN이 필요한가?만약 한국의 사용자가 미국에 위치한 서버에서 동영상 스트리밍 서비스나 고화질 이미지를 요청할 경우, 아무리 서버에서 고성능의 캐싱 전략을 사용하여 즉시 응답하더라도 물리적인 거리로 인해 필연적으로 지연이 발생합니다. 이러한 지연 문제를 해결하기 위해 등장한 서비스가 바로 CDN이며, CDN은 사용자의 요청을 빠르게 처리할 수 있도록 사용자 가까이에 위치한 Edge 서버를 활용합니다. CDN의 동작 방식사용자의 요청은 가장 가까운 Edge 서버로 전달됩니다.Edge 서버가 정적 리소스(js, css, 이미지 등)를 캐싱하고.. Spring Security 없이 OAuth2 클라이언트 직접 구현 OAuth2 인증 절차OAuth2 클라이언트를 Spring Boot 만 사용하여 구현해보겠습니다.Spring Security 없이, 순수 HTTP 통신과 세션 기반으로 인증 흐름을 직접 설계함으로써OAuth2의 내부 동작을 보다 깊이 있게 이해해보는 것이 목적입니다. 매우 간단합니다. 깃허브에서 전체 코드 확인하기:https://github.com/youseonghyeon/oauth2-client GitHub - youseonghyeon/oauth2-client: oauth2-client 구현을 위한 리포지토리oauth2-client 구현을 위한 리포지토리. Contribute to youseonghyeon/oauth2-client development by creating an account on Gi.. OAuth2 인증 Flow OAuth2는 서버에서는 사용자의 ID/PW 없이, 인증 서버를 통해 인증을 수행하는 프로토콜입니다.즉, 사용자가 직접 로그인 정보를 입력하지 않고도 Google, GitHub 등 외부 인증 서비스를 통해 로그인할 수 있게 해줍니다. 사용자와 클라이언트 모두 보안에 대한 부담을 낮춰줄 수 있습니다. 용어 정리OAuth2 에서는 의미가 비슷한 용어가 있어서 글에서 아래 용어는 다음과 같은 의미로 사용하겠습니다.사용자 : 사용자 + 프론트엔드(브라우저) 를 통합한 개념클라이언트 : OAuth2 인증을 연동하는 애플리케이션 서버 (예: my-service)인증 서버 : OAuth2 인증을 제공하는 서버 (예: Google, GitHub)여기서는 흔히 사용되는 구조인 (사용자 - 웹서버 - API서버) 구조로써.. Fleet 단축키 모음 기본 탐색 & 이동기능단축키커맨드 팔레트 열기⌘ ⇧ P파일 탐색기 열기 / 닫기⌘ \특정 파일 열기 (Go to File)⌘ P심볼 검색 (함수/변수 찾기)⌘ ⇧ O최근 열었던 파일⌘ E정의로 이동 (Go to Definition)⌘ 클릭 or F12파일 내 검색⌘ F전체 프로젝트에서 검색⌘ ⇧ F 코딩 & 다중 커서 편집기능단축키다음 일치 항목 선택 (다중 편집)⌘ D마지막 선택 제거⌘ ⇧ D같은 단어 전체 선택⌘ ⇧ L위/아래에 커서 추가⌥ ⌘ ↑ / ↓행 복사⌘ ⇧ D행 삭제⌘ ⌫행 이동⌥ ⇧ ↑ / ↓코드 포맷팅⌥ ⌘ L 코드 리팩토링 & 자동완성기능단축키자동완성⌃ Space빠른 수정 (Quick Fix)⌘ .변수명 리네임⇧ F6코드 템플릿 삽입 (Live Template)⌘ J 디버깅.. 소프트웨어 복잡성 소프트웨어 복잡성개발을 시작한 지 2년이 넘어가고 개발 팀장이 되면서 소프트웨어 복잡성이라는 벽을 실감하기 시작했습니다. 작은 애플리케이션을 만들 때는 모든 게 단순해 보였지만, 시스템이 커져갈수록 보이지 않던 복잡성이 곳곳에서 드러났습니다.재미있게도 이 복잡성은 단순히 코드 구조나 아키텍처 문제만이 아니였습니다. 조직 구조, 커뮤니케이션, 일정 압박, 우선순위 결정 등 비기술적인 요소들과 복잡하게 얽혀 있다는 것입니다. 한가지 예를 들어보겠습니다. 어떤 서비스가 Web 서비스와 API 서비스를 모두 제공한다고 가정할 때, 사용자의 요청으로 ‘A’라는 기능을 개발하게 되었습니다. 처음엔 Web 서비스에만 우선적으로 기능을 추가하고, API 서비스는 나중에 개발하기로 계획했습니다. 그러나 시간이 흐르면서 .. [JPA] fetchJoin 과 Paging 처리의 한계 및 해결 방안 EntityGraph를 사용하여 fetch join을 할 경우, 쿼리에서 직접적으로 페이징 처리가 어려워집니다. 이유는 다음과 같습니다: 1. 복잡한 조인 구조예를 들어, A, B, C 세 테이블을 조인하는 경우를 생각해 봅시다. A와 B는 1:N 관계이고, B와 C도 1:N 관계라면, 예를 들어 N이 3이라 가정할 때페이지 크기가 10이면, 실제로 10개의 A 엔티티를 가져오더라도 조인 결과로는 최대 10 × 3 × 3 = 90개의 행(row)이 반환될 수 있습니다. 2. RDBMS와 객체지향의 차이관계형 데이터베이스에서는 위와 같이 다중 조인된 결과에 대해 LIMIT을 적용할 때, 원래의 A 엔티티 기준으로 제한하지 않고 전체 행에 대해 제한을 걸게 됩니다.그래서 결과적으로 full scan을 하고,.. 실전 문제와 해결 전략 이번 글에서는 백엔드 실전 문제들을 살펴보고, 각각의 문제를 해결하는 방법에 대해 정리해보겠습니다.1. CS - CAS(Compare-and-Swap) 활용 문제: synchronized 없이 다중 스레드 환경에서 동시성 제어하기 멀티스레드 환경에서 하나의 변수를 여러 스레드가 동시에 수정하는 경우 경합 상태(Race Condition)가 발생할 수 있습니다. 기존에는 synchronized 키워드를 사용하여 동기화했지만, 이는 성능 저하의 원인이 될 수 있습니다. 이를 해결하기 위해 CAS(Compare-and-Swap) 연산을 활용한 AtomicInteger 사용을 고려해야 합니다. 해결 방법: AtomicInteger를 활용한 CAS 동기화import java.util.concurrent.atom.. Socket 통신 1. Socket 통신이란 무엇인가?Socket은 네트워크 프로그래밍에서 가장 기본적이고 중요한 개념 중 하나입니다. 다양한 네트워크 애플리케이션(채팅, 실시간 게임, 파일 전송 등)을 개발하려면 클라이언트-서버 간 통신이 필수적입니다. 이때 Socket은 데이터를 주고받는 양 끝단의 연결점을 의미합니다. 2. Socket 통신의 기본 개념2.1. Socket이란?Socket은 네트워크 상의 두 호스트 간 통신을 위한 인터페이스입니다.주로 TCP/IP 또는 UDP 프로토콜 위에서 데이터를 주고받을 때 사용됩니다. 2.2. TCP와 UDP의 차이구분TCPUDP프로토콜 타입연결형(Connection-oriented)비연결형(Connectionless)신뢰성데이터 무결성 및 순서 보장신뢰성 보장 안 함속도느림.. 이전 1 2 3 4 ··· 8 다음