Code 52

[마이크로서비스 아키텍처 구축] 1. 마이크로서비스란?

샘 뉴먼 님의 "마이크로서비스 아키텍처 구축" 책을 정리한 포스팅 입니다. 1. 마이크로서비스 살펴보기마이크로서비스란?도메인과 관련된 모든 요소를 하나의 모듈로 캡슐화한 아키텍쳐 스타일적용 범위설명주의사항도메인비즈니스 도메인별로 기능을 나누어 서비스 경계 설정 네트워크REST API, gRPC, 메시지 큐 등을 통한 통신만 허용내부 로직·DB 직접 접근 ❌데이터베이스각 서비스가 자체 데이터베이스를 소유공유 데이터베이스 사용 ❌ 효과효과설명특징정보 은닉외부 인터페이스를 통해 최소한만 노출가능한 많은 내부 정보를 구성요소에 감춤변경 격리내부 변경이 외부에 전파되지 않도록 하여 영향 범위를 최소화 경계 명확화변경이 쉬운 부분과 어려운 부분을 명확히 구분- 변경이 쉬운 부분: 내부 구현- 변경이 어려운 부분: ..

Code/MSA 2025.08.08

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 12. 채팅 시스템 설계

알렉스 쉬 님의 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 책을 정리한 포스팅 입니다. 1. 요구 사항핵심 기능항목설명1:1 채팅빠른 메시지 송수신그룹 채팅최대 100명사용자 접속 상태 표시상태 표시 (온라인 여부 등)다양한 단말 지원하나의 계정으로 여러 기기 동시 접속 가능푸시 알림실시간 알림 지원메시지 형태텍스트 메시지만 지원메시지 최대 길이최대 100,000자채팅 이력 보존영구 보관종단 간 암호화 (E2EE)불필요 (시간 여유 시 고려 가능) 플랫폼 및 접근 방식항목설명플랫폼모바일 및 웹 모두 지원접속 유형하나의 계정으로 여러 단말에서 동시 접속 허용 시스템 규모 및 성능 요건항목설명일일 능동 사용자 수 (DAU)약 5천만 명응답 지연 (latency)낮아야 함 (실시간 응답 수준 추정)..

Code 2025.08.03

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 10. 알림 시스템 설계

알렉스 쉬 님의 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 책을 정리한 포스팅 입니다. 1. 요구 사항항목내용알림 종류모바일 푸시, SMS, 이메일전송 대상 기기iOS, Android, PC/Laptop전송 타이밍- 실시간 (Soft real-time)- 지연 허용: 수 초~수십 초알림 생성 주체클라이언트 앱 or 서버 스케줄러Opt-out 지원개별 사용자 알림 수신 설정 가능일일 전송량 규모 - Push: 1천만 - SMS: 100만 - Email: 500만 확장성 수준고부하 지원 필요 (스케일 아웃 가능 구조 요구됨) 2. 개략적 설계안알림 유형별 지원 방안알림 유형주요 구성 요소동작 과정 / 설명iOS 푸시 알림- 알림 제공자- APNS (Apple Push Notification Se..

Code 2025.08.02

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 6. 키-값 저장소 설계

알렉스 쉬 님의 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 책을 정리한 포스팅 입니다. 1. 문제 이해요구 조건항목요구 사항 내용값 크기 제한1쌍(Key-Value) ≤ 10KBHigh Availability장애 상황에서도 빠르게 응답해야 함Low Latency빠른 응답 속도 보장 필요Scalability트래픽 변화에 따라 서버 자동 증설/축소 가능Consistency 조정 가능사용자가 요구하는 대로 일관성 수준 선택 가능 2. 분산 키-값 저장소키-값 쌍을 여러 서버에 분산시킴 CAP 정리분산 시스템에서는 Consistency - Availability - Patition Tolerance 모두를 만족하지 못함개념설명Consistency (일관성)모든 노드에서 항상 같은 데이터를 반환해야 함..

Code 2025.08.02

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 추정

알렉스 쉬 님의 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 책을 정리한 포스팅 입니다. 0. 개략적인 규모 추정설계가 요구사항에 대략적으로 부합하는지 판단시스템 설계자는 추정 능력 및 단위 감각이 필수 1. 2의 제곱수축약형지수 (2^x)설명1KB2¹⁰1,024 바이트1MB2²⁰1,024KB = 약 10⁶ 바이트 (100만)1GB2³⁰1,024MB = 약 10⁹ 바이트 (10억)1TB2⁴⁰1,024GB = 약 10¹² 바이트 (1조)1PB2⁵⁰1,024TB = 약 10¹⁵ 바이트 (1000조)1바이트: 일반적으로 ASCII 문자 하나를 저장할 수 있음 2. 응답지연 값연산 항목설명응답 지연 시간L1 캐시 참조CPU에 매우 가까운 저장소0.5ns분기 예측 오류 (Branch Mispredict)..

Code 2025.08.01

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성

알렉스 쉬 님의 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 책을 정리한 포스팅 입니다.1. 단일 서버가장 단순한 구조서버 한 대에 모두 탑재→ 웹 서버, 애플리케이션 서버, 데이터베이스, 캐시 요청 처리 흐름접속 시도사용자는 도메인 이름으로 사이트 접속.DNS를 통해 도메인을 IP 주소로 변환 (컴퓨터는 도메인 이름을 인식하지 못함)HTTP 요청 전송변환된 IP 주소로 HTTP 요청 전송서버 응답서버는 HTML 또는 JSON 형태로 응답함. 2. 데이터베이스서버 확장의 필요성사용자 수가 늘어나면서 서버 한대로는 감당이 불가해짐서버의 역할을 분리하여 독립적으로 확장애플리케이션 서버: 트래픽 처리데이터베이스 서버: 데이터 관리 데이터베이스 종류항목관계형 데이터베이스 (RDBMS)비관계형 데이터베이..

Code 2025.07.31

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 10. 이벤트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 시스템 간 강결합 문제바운디드 컨텍스트들 간의 강결합✅ 외부 시스템을 호출하는 서비스가 도메인 로직에 결합하는 경우를 말함 문제점문제점설명트랜잭션 처리 애매함외부 서비스 실패 시 롤백 or 상태 변경 여부가 불명확함성능 병목외부 API 지연이 전체 시스템 응답 시간에 영향도메인-외부 로직 혼합도메인 객체가 외부 호출을 직접 다루면 유지보수 어려움 해결 방법비동기 이벤트 기반 처리로 결합도 낮추기 2. 이벤트과거에 일어난 일✅ 상태 변화의 후속 처리를 트리거하는 역할➡️ 도메인의 상태 변경과 관련된 요구사항을 이벤트를 이용해서 구현할 수 있음 구성종류: 클래스 이름으로 표현발생 시간추가 데이터..

Code 2025.06.20

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 9. 도메인 모델과 바운디드 컨텍스트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 도메인 모델과 경계같은 엔티티라도 각각 다른 상위 도메인에 속하게 되면, 의미가 달라짐✅ 각 도메인에서 역할과 책임, 속성, 용어가 달라짐. 예) 상품더보기카탈로그: 보여주기용 정보 (상품명, 이미지, 옵션 등)창고: 실물 재고 추적용 정보 (SKU, 수량 등) 예) 회원더보기주문: 주문자배송: 보내는 사람 2. 바운디드 컨텍스트하나의 도메인 모델에 일관되게 적용되는 경계✅ 모델은 특정한 컨텍스트 하에서 완전한 의미를 가짐➡️ 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 함내용설명필요성하위 도메인마다 요구사항/규칙/용어가 다름구분 기준사용하는 용어가 다른지, 조직의 팀 구..

Code 2025.06.20

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 8. 애그리거트 트랜잭션 관리

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 애그리거트와 트랜잭션서로 다른 스레드/트랜잭션이 같은 애그리거트의 DB를 동시에 수정하면 충돌이 일어날 수 있음‼️ 두 스레드가 동시에 커밋하면 일관성 깨짐➡️ 해당 테이블의 행에 잠금을 걸어 동시 커밋을 막음 예시) 배송 정보 변경더보기시스템: 배송 상태를 배송으로 변경할 때사용자: 배송지 주소를 변경할 경우➡️ 시스템의 애그리거트 객체와 사용자의 애그리거트 객체는 서로 독립적 (개념적으로는 같지만 물리적으로는 서로 다름) 2. 선점 잠금먼저 들어온 트랜잭션이 커밋될 때까지 같은 행을 접근하는 다른 트랜잭션은 잠시 blocking됨 (대기)먼저 들어온 트랜잭션이 커밋되면 잠금이 해제됨➡️ ..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 7. 도메인 서비스

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 여러 애그리거트가 필요한 기능도메인 영역의 코드를 작성하다 보면, 한 애그리거트로 기능을 구현할 수 없을 때가 있음✅ 도메인 / 애플리케이션 서비스에서 처리하기❌ 여러 애그리거트의 데이터/규칙을 한 번에 써야하는 유스케이스는, 한 애그리거트에 집어넣지 말기 예) Order - 결제 금액 계산더보기주문을 확정하려면 주문 애그리거트는 외부 애그리거트 정보를 읽어와서 계산하고, 결과 스냅샷만 자기 내부에 기록함애그리거트주문 시 필요한 정보(읽기)소유/책임비고Product상품 가격, 판매 가능 여부, 카테고리상품 카탈로그/정책가격은 주문 시점 스냅샷으로 Order에 저장Coupon/Promotion..

Code 2025.06.19