System Design
-
URL Shortener (URL 단축 서비스) 예시Tech Career/System designs 2025. 9. 4. 17:57
단순함 뒤에 숨겨진 복잡성https://www.google.com/search?q=system+design 같은 긴 URL을 https://tinyurl.com/a1b2c3d4(임의의 주소입니다 클릭해도 뭐 없을겁니다ㅎㅎ) 와 같이 짧게 줄여주는 서비스, 바로 URL Shortener입니다. 겉보기에는 매우 간단한 서비스처럼 보이지만, 전 세계 수많은 사용자의 요청을 처리하고 방대한 양의 데이터를 안정적으로 저장하며 빠르게 응답해야 하는 시스템입니다.URL Shortener를 설계하는 과정은 지금까지 우리가 배운 분산 시스템의 모든 핵심 개념들(Key-Value Store, Consistent Hashing, Rate Limiter 등)을 모두 동원해야하는 적당한 실전 연습 문제입니다. (물론 면접에선 ..
-
Rate Limiter (API 요청 제한) 설계: 시스템을 보호하는 방어막Tech Career/System designs 2025. 8. 10. 16:49
들어가며: 무분별한 요청으로부터 시스템을 지켜라대규모 서비스를 운영하다 보면, 예상치 못한 트래픽 폭증이나 악의적인 요청으로 인해 시스템이 마비되는 상황을 마주할 수 있습니다. 특정 사용자가 API를 과도하게 호출하거나, 봇이 무차별적으로 데이터를 긁어가는 경우 등이 대표적입니다. 이러한 상황은 시스템의 안정성을 위협하고, 모든 사용자에게 피해를 줄 수 있습니다.특히, 분산 서비스 거부(DDoS, Distributed Denial of Service) 공격은 수많은 IP 주소에서 대량의 요청을 보내 시스템을 마비시키는 것을 목표로 합니다. Rate Limiter(요청 제한기)는 이러한 문제를 해결하기 위한 필수적인 컴포넌트입니다. 이는 특정 단위 시간 동안 API에 접근할 수 있는 요청의 수를 제한하여,..
-
메시지 큐(Message Queue) 시스템 설계: 비동기 처리와 느슨한 결합Tech Career/System designs 2025. 8. 10. 16:29
들어가며: 시스템 간의 '대화', 더 똑똑하게 할 수는 없을까?웹 애플리케이션을 개발하다 보면, 사용자의 요청 하나가 여러 백엔드 서비스에 영향을 미치는 경우가 흔히 있습니다. 예를 들어, 사용자가 상품을 구매하면, 주문 처리, 결제 완료 알림, 재고 관리, 배송 정보 등록 등 여러 작업이 순차적으로 발생하죠. 이 모든 작업을 동기적으로(Synchronously) 처리하면 하나의 작업이 실패했을 때 전체 트랜잭션이 실패하고, 시스템의 응답 시간이 길어지는 문제가 발생합니다.이러한 문제를 해결하기 위해 등장한 것이 바로 메시지 큐(Message Queue)입니다. 메시지 큐는 시스템 간의 통신을 비동기적으로 처리하고, 느슨한 결합(Loose Coupling)을 가능하게 하는 핵심적인 분산 시스템 컴포넌트입..
-
고성능 Key-Value Store 설계: DynamoDB, RedisTech Career/System designs 2025. 8. 1. 22:19
들어가며: Key-Value Store, 단순하지만 강력한 저장소의 비밀애플리케이션 개발자라면 한 번쯤은 Key-Value Store를 사용해봤을 것입니다. Redis를 캐시로 사용하거나, Amazon DynamoDB에 데이터를 저장하는 등 다양한 형태로 말이죠. Key-Value Store는 복잡한 스키마 없이 고유한 'Key'로 'Value'를 저장하고 검색하는 단순한 인터페이스를 제공하지만, 그 단순함 덕분에 엄청난 성능과 확장성을 자랑합니다.하지만 이 간단한 구조가 어떻게 초당 수백만 건의 요청을 처리하는 대규모 분산 시스템으로 진화하는 걸까요? 이번 포스팅에서는 Key-Value Store를 직접 설계하는 과정을 통해, 단순히 사용하는 것을 넘어 그 내부 원리와 핵심 설계 철학을 깊이 있게 이해..
-
Consistent Hashing (일관된 해싱): 데이터 분산의 핵심Tech Career/System designs 2025. 7. 31. 23:01
들어가며: 분산 시스템에서 데이터는 어떻게 '골고루' 분배될까?대규모 분산 시스템을 설계할 때 가장 중요한 과제 중 하나는 데이터나 요청을 여러 서버(노드)에 어떻게 효율적으로 분배할 것인가입니다. 단순히 hash(key) % N (N은 서버 개수)과 같은 모듈러 연산을 사용하면 되지 않을까 생각할 수 있습니다. 하지만 이 방식은 서버가 추가되거나 제거될 때 치명적인 문제점을 발생시킵니다. 서버 개수 N이 변하면 대부분의 키-서버 매핑이 바뀌어 대규모 데이터 재분배가 일어나고, 이는 곧 시스템 성능 저하와 장애로 이어질 수 있습니다.이러한 문제를 해결하기 위해 등장한 개념이 바로 Consistent Hashing (일관된 해싱)입니다. Consistent Hashing은 분산 시스템에서 노드가 추가되거나..
-
Distributed Counter (분산 카운터): 분산 시스템 첫걸음Tech Career/System designs 2025. 7. 17. 23:49
들어가며: 숫자를 세는 일, 왜 분산 환경에서 어려울까?게시글 '좋아요' 수, 웹사이트 방문자 수, 특정 이벤트 발생 횟수… 개발자라면 카운터 기능을 구현해본 경험이 많을 것입니다. 단일 서버 환경에서는 간단한 변수 증가나 데이터베이스의 숫자 필드 업데이트만으로 충분하죠. 하지만 이러한 카운터가 수많은 서버에 분산되어 동작하고, 초당 수천, 수만 건의 요청을 처리해야 한다면 어떨까요? 갑자기 문제가 복잡해집니다.분산 카운터는 언뜻 쉬워 보이지만, 분산 시스템에서 발생하는 데이터 일관성, 동시성, 성능 등의 핵심적인 문제들을 이해하는 데 아주 좋은 예시가 됩니다. 복잡한 서비스도 아니기 때문에 주니어 개발자를 대상으로 질문하기에도 좋은 주제고요. 이번 포스팅에서는 분산 카운터를 설계하는 과정을 통해, 분산..