Learning
토픽 210 / 214·비교표

마이크로서비스와 API

MSA vs 모놀리식

항목MSA(마이크로서비스)모놀리식
구조분산/독립 서비스단일/통합
배포서비스별 독립 배포전체 일괄 배포
확장서비스별 개별 확장전체 수직 확장
장애격리(서비스 단위)전파(전체 영향)
복잡도분산 시스템 복잡단순(단일 프로세스)
적합대규모/독립 팀소규모/단순 서비스

REST vs GraphQL vs gRPC

항목RESTGraphQLgRPC
프로토콜HTTP/JSONHTTP/JSONHTTP/2, Protocol Buffer
설계자원 중심(URI)쿼리 언어(클라이언트 주도)RPC/타입 안전
데이터Over/Under Fetching필요한 데이터만바이너리(고성능)
실시간제한적Subscription양방향 스트리밍
적합범용 API복잡한 데이터 조합내부 서비스 간

GraphQL vs REST

항목GraphQLREST
엔드포인트단일 (/graphql)자원별 다수 (/users, /orders)
데이터 선택클라이언트가 필드 선택서버가 응답 구조 결정
Over-fetching없음발생 가능
Under-fetching없음 (단일 쿼리)발생 가능 (다수 호출)
버전 관리불필요 (스키마 진화)URI/헤더 버전 필요
캐싱복잡 (POST 기반/별도 전략)용이 (HTTP 캐싱/GET)
학습 곡선높음낮음
실시간Subscription (내장)WebSocket (별도)
적합 환경복잡한 데이터 관계, 모바일단순 CRUD, 공개 API

API Gateway vs Load Balancer vs Reverse Proxy

항목API GatewayLoad BalancerReverse Proxy
계층L7(Application)L4/L7L7
기능인증+라우팅+변환+제한트래픽 분산요청 전달+캐싱
적용MSA 진입점서버 부하 분산보안/캐싱

서킷브레이커 vs 재시도 vs 벌크헤드

항목서킷 브레이커재시도(Retry)벌크헤드(Bulkhead)
목적장애 전파 차단일시적 오류 복구자원 격리
동작실패 시 차단실패 시 재요청호출별 자원 분리
적합지속적 장애일시적 장애서비스 간 격리

DDD: 전략적 vs 전술적 설계

항목전략적 설계전술적 설계
수준거시적/시스템 경계미시적/도메인 모델
핵심Bounded Context, Context MapEntity, VO, Aggregate
목적도메인 경계 정의도메인 로직 구현
패턴Shared Kernel, ACL, OHSRepository, Domain Event

Context Map: Shared Kernel vs ACL vs OHS

항목Shared KernelACL(Anti-Corruption)OHS(Open Host Service)
결합도밀결합(공유)느슨결합(변환)표준화(공개)
방식공통 모델 공유외부→내부 모델 번역공개 API 제공
합의양쪽 합의 필요단방향 보호다수 소비자 대응

Monorepo vs Polyrepo

항목MonorepoPolyrepo
코드 공유쉬움어려움(패키지 발행 필요)
원자적 커밋가능불가능
저장소 크기커짐작음
팀 독립성낮음높음
빌드 시간Incremental Build 필요짧음
도구 의존높음(Nx, Turborepo)낮음

조합형 vs 모놀리식 아키텍처

항목조합형(Composable)모놀리식
구조PBC/API 조합단일 통합
유연성높음낮음
변경 대응빠름느림
통합 복잡성높음낮음

Event Storming vs Event Modeling vs User Story Mapping

항목Event StormingEvent ModelingUser Story Mapping
중심도메인 이벤트이벤트 흐름사용자 활동
방법포스트잇 워크숍시간축 흐름도스토리 계층화
산출물BC/Aggregate 식별이벤트 흐름도릴리스 계획

OpenAPI(REST) vs AsyncAPI vs GraphQL Schema

항목OpenAPIAsyncAPIGraphQL Schema
대상REST API이벤트/메시징GraphQL
형식YAML/JSONYAML/JSONSDL
통신동기/HTTP비동기/이벤트HTTP/쿼리
적합 패턴요청-응답Pub/Sub, 스트리밍유연한 데이터 조회

API 버전관리: URL Path vs Header vs Query

항목URL PathHeaderQuery Parameter
명시성가장 명시적URL 깔끔선택적
캐싱용이어려움보통
예시/api/v1/usersX-API-Version: 1/users?version=1

Design-First vs Code-First (API 개발)

항목Design-FirstCode-First
순서명세 작성→코드 생성코드 작성→명세 자동 생성
장점계약 명확, 병렬 개발빠른 시작, 유연
단점초기 시간 투자명세 불일치 위험
적합팀 간 협업/공개 API소규모/빠른 개발