MSA 환경에서 pnpm은 프로덕션 Docker 런타임 최적화를 위해서라기보다는, 모노레포 기반 개발 생산성과 공통 패키지 관리 측면에서 의미가 있습니다. 배포 단계에서는 멀티 스테이지 빌드로 서비스별 의존성을 독립적으로 가져가는 것이 표준입니다.
일반적으로 MSA + pnpm은 ‘개발을 위한 선택’이지 운영 효율을 위한 선택’은 아니라고 생각했습니다.
다만, 서비스별 Dockerfile을 배포할 때에는 filter 혹은 멀티 스테이지 빌드 를 활용해서 최대한 각 이미지에 필요한 node_modules만 포함하도록 할 예정입니다.
ticketing-system/
├── pnpm-workspace.yaml
├── package.json
├── pnpm-lock.yaml
├── frontend/ # 서버 2 (WS)
│ ├── src/
│ ├── Dockerfile
│ ├── package.json
│ └── docker-compose.yml # 보류
│
├── backend/ # 서버 1
│ ├── api-server/ # 일반 백엔드
│ │ ├── src/
│ │ ├── Dockerfile
│ │ └── package.json
│ │
│ ├── ticket-server/ # 티켓 예매 WAS
│ │ ├── src/
│ │ ├── Dockerfile
│ │ └── package.json
│ │
│ └── *docker-compose.yml # 서버 1 배포 단위 # 보류*
│
├── queue-server/ # 서버 3
│ ├── src/
│ ├── Dockerfile
│ ├── package.json
│ └── docker-compose.yml
│
├── packages/ # 공유 코드
│ ├── shared-types/ # DTO, 이벤트 타입
│ ├── shared-constants/ # Redis key, topic 이름
│ ├── shared-utils/ # 공통 유틸
│ └── shared-config/ # env schema, 공통 설정
│
├── infra/ # 인프라 (역할 기준 분리)
│ │
│ ├── redis-queue/ # Queue Redis (대기열 서버 소유)
│ │ └── docker-compose.yml
│ │
│ ├── redis-ticket/ # Ticket Redis (티켓 서버 전용)
│ │ └── docker-compose.yml
│ │
│ ├── mysql/ # Core RDB ( 일반 서버 전용 )
│ │ └── docker-compose.yml
│ │
│ └── nginx/
│ └── nginx.conf