📌 서론 — 왜 이 구조를 쓰는가

MSA를 설계하다 보면 항상 부딪히는 고민이 있다.

  • DB를 서비스마다 완전히 분리할 것인가?
  • 아니면 하나의 DB 인스턴스에서 스키마만 나눌 것인가?

특히 초기 스타트업이나 사내 시스템에서는 다음 이유로
PostgreSQL 단일 인스턴스 + 스키마 분리를 선택하는 경우가 많다.

  • 인프라 비용 절감
  • 운영 복잡도 감소
  • 빠른 개발 속도

하지만 이 구조는 “MSA처럼 보이지만 실제로는 강하게 결합된 구조”가 될 위험이 있다.


📌 구조 개요

PostgreSQL (Single Instance)
├── auth_schema
├── order_schema
├── payment_schema
└── user_schema
 
  • 하나의 DB 인스턴스
  • 서비스별 schema 분리
  • 물리적 분리는 없음 (논리적 분리)

📌 영향도 분석 (핵심)

1️⃣ 장애 전파 (Blast Radius 문제)

문제

  • DB 인스턴스 하나가 죽으면 전체 서비스 다운

예시

  • payment에서 lock 발생 → DB 전체 성능 저하 → auth까지 영향

👉 MSA의 핵심인 장애 격리 실패


2️⃣ 리소스 경쟁 (CPU / I/O / Connection Pool)

문제

  • 모든 서비스가 동일 리소스 공유

케이스

  • 배치 (정산) 작업 → 디스크 I/O 폭증
  • → 실시간 API latency 증가

👉 특히 르무엘님 하는 “정산 배치”에서 자주 터짐


3️⃣ 트랜잭션 결합 위험

문제

  • cross-schema join이 쉬움
 
SELECT *
FROM order_schema.orders o
JOIN payment_schema.payments p
ON o.id = p.order_id;
 

👉 이 순간 MSA 깨짐

  • 서비스 간 DB 의존 발생
  • 나중에 분리 불가능한 구조 됨

4️⃣ 배포 독립성 저하

문제

  • DB migration 충돌

예시

  • auth 서비스 migration 실행
  • payment 서비스와 lock 충돌

👉 Flyway/Liquibase 운영 난이도 상승


5️⃣ 보안/권한 관리 복잡도

문제

  • schema level 권한 관리 필요
 
GRANT USAGE ON SCHEMA auth_schema TO auth_user;
 

👉 잘못 설정하면:

  • 다른 서비스 데이터 접근 가능
  • 데이터 격리 실패

6️⃣ 스케일링 한계

문제

  • 특정 서비스만 확장 불가

예:

  • search 서비스만 트래픽 폭증
  • → DB 전체 스케일 필요

👉 비용 비효율 발생

 

 

📌 언제 써도 되는가 (현실적인 기준)

✅ 적합한 상황

  • 초기 스타트업 / PoC
  • 트래픽 낮음
  • 팀 규모 작음
  • 빠른 개발이 중요한 경우

👉 “MSA 흉내 + 빠른 실행” 단계


❌ 피해야 하는 상황

  • 금융 / 결제 / 정산 시스템
  • 트래픽 높은 서비스
  • 서비스 간 완전한 독립 필요

👉 르무엘님 구조는 사실 여기 해당됨


📌 실무 대응 전략 (중요)

1️⃣ 강제 격리 룰 설정

  • cross-schema join 금지
  • DB 접근은 서비스 내부에서만

👉 코드 리뷰로 강제


2️⃣ 커넥션 풀 분리

  • 서비스별 datasource 분리
 
maxPoolSize: 10 (service별 제한)
 

👉 특정 서비스가 DB 독점 못하게


3️⃣ 점진적 분리 전략

초기:

  • single instance + schema

중기:

  • read replica 분리

후기:

  • DB per service

👉 “탈출 전략” 반드시 설계해야 함


4️⃣ 이벤트 기반으로 전환

  • DB join 대신
  • Kafka / 이벤트 사용
OrderCreated → PaymentService consume
 

👉 DB 의존 제거


5️⃣ 배치 분리

  • 정산 / 통계는 별도 DB or replica

👉 운영 안정성 핵심 포인트


📌 결론

PostgreSQL 단일 인스턴스 + 스키마 분리 전략은
**“MSA의 입문 단계에서만 유효한 타협안”**이다.

하지만 다음을 명확히 인지해야 한다.

  • 장애는 공유된다
  • 성능은 경쟁한다
  • 구조는 쉽게 무너진다

👉 결국 중요한 건 하나다

“나중에 분리할 수 있는 구조인가?”


📌 한줄 정리

👉 스키마 분리는 시작일 뿐, 끝이 아니다 — 탈출 전략 없는 MSA는 모놀리식이다

LIST

+ Recent posts