주니어 개발자를 위한 이커머스 MSA 프로젝트 시작하기 - 1편. MSA와 Docker 개념 이해
주니어 개발자를 위한 이커머스 MSA 프로젝트 시작하기 - 1편. MSA와 Docker 개념 이해
들어가며
이커머스 플랫폼을 MSA(Microservices Architecture)로 구축하는 여정을 시작한다. 모놀리식 아키텍처만 경험한 주니어 개발자 입장에서, MSA는 생소하고 복잡해 보인다. 하지만 차근차근 개념을 이해하고 실습하면서 배워나가려고 한다.
왜 MSA인가?
대형 쇼핑몰을 하나의 거대한 프로그램으로 만든다고 가정해보자.
1
2
3
4
5
6
7
8
하나의 거대한 쇼핑몰 프로그램
├─ 회원 가입/로그인
├─ 상품 검색
├─ 장바구니
├─ 주문/결제
├─ 배송 추적
├─ 고객센터 챗봇
└─ 정산
이런 모놀리식 구조의 문제점:
- 상품 검색 하나 수정하려면 전체를 다시 배포해야 함
- 블랙프라이데이 때 주문이 폭주하면 전체 시스템이 다운될 수 있음
- 개발자 100명이 같은 코드를 동시에 수정하면 충돌 발생
- 결제 부분만 다른 언어로 바꾸고 싶어도 불가능
반면 MSA로 나누면:
1
2
3
회원서비스(Java) | 상품서비스(Java) | 주문서비스(Java) | 결제서비스(Python)
↓ ↓ ↓ ↓
각자 독립적으로 개발/배포/확장 가능
장점:
- 상품 서비스만 수정하고 배포 가능
- 주문 서비스만 서버 10대로 늘려서 부하 분산
- 팀별로 독립적으로 개발 가능
- 서비스마다 다른 기술 스택 사용 가능
쇼핑몰을 건물로 비유하면
MSA를 이해하기 쉽게 실제 쇼핑몰 건물로 비유해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
쇼핑몰 건물 (전체 시스템)
├─ 1층: 회원 서비스 (고객 등록소)
├─ 2층: 상품 서비스 (상품 전시장)
├─ 3층: 주문 서비스 (주문 접수대)
├─ 4층: 결제 서비스 (계산대)
├─ 5층: 배송 서비스 (택배 발송실)
├─ 6층: 정산 서비스 (회계실)
└─ 7층: 챗봇 서비스 (고객센터)
정문 = API Gateway
→ 모든 고객이 반드시 여기로 들어옴
→ "몇 층으로 갈까요?"를 안내
안내 데스크 = Eureka Server
→ "결제 서비스는 4층이에요"
→ 각 서비스의 위치를 알려줌
창고 = 데이터베이스
├─ MySQL: 중요한 장부 (주문서, 회원명부)
├─ MongoDB: 고객 의견함 (리뷰, 채팅 기록)
├─ Redis: 임시 보관함 (장바구니, 최근 본 상품)
└─ Elasticsearch: 검색 대장 (상품 카탈로그)
전달 시스템 = Kafka
→ 층간 메시지 전달 (택배 컨베이어 벨트)
→ "3층에서 주문 들어왔어요!" → 4층, 5층에 자동 전달
각 층이 각 서비스이고, 정문은 API Gateway, 안내 데스크는 Eureka Server, 창고는 데이터베이스, 전달 시스템은 Kafka가 담당한다.
Docker가 필요한 이유
Docker 없이 개발한다면 이런 문제가 발생한다:
1
2
3
4
5
6
7
8
개발자 A의 컴퓨터:
- macOS, MySQL 8.0, Redis 7.0, Java 17
개발자 B의 컴퓨터:
- Windows, MySQL 5.7, Redis 6.0, Java 11
개발자 A: "제 컴퓨터에서는 되는데요?"
개발자 B: "저는 안 되는데요?"
Docker는 이사할 때 쓰는 컨테이너 박스와 같다:
1
2
3
4
5
6
7
8
9
10
MySQL 컨테이너 (독립된 방)
├─ MySQL 8.0
└─ 필요한 설정 모두 포함
Redis 컨테이너 (독립된 방)
├─ Redis 7.0
└─ 필요한 설정 모두 포함
→ 어떤 컴퓨터에서든 똑같이 동작
→ Mac이든 Windows든 상관없음
전체 시스템 구조
우리가 만들 시스템의 전체 구조는 다음과 같다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
고객 (브라우저)
↓
Next.js (프론트엔드) - 고객이 보는 쇼핑몰 화면
↓
FastAPI (백엔드 API 서버) - 프론트엔드와 MSA를 연결하는 다리
↓
Spring Cloud Gateway - 모든 요청의 출입구
↓
┌─────────┬─────────┬─────────┬─────────┐
│회원서비스│상품서비스│주문서비스│결제서비스│ ... (8개 서비스)
└─────────┴─────────┴─────────┴─────────┘
↓
Kafka (메시지 버스) - 서비스들이 대화하는 통로
↓
┌─────────┬─────────┬─────────┬──────────────┐
│ MySQL │ MongoDB │ Redis │ Elasticsearch│
│ (장부) │(의견함) │(임시저장)│ (검색대장) │
└─────────┴─────────┴─────────┴──────────────┘
학습 로드맵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PHASE 1: 기초 개념 이해 (1주차)
- MSA 개념
- Docker 개념
- 기술 스택 선택 이유
PHASE 2: 개발 환경 구축 (2주차)
- Docker 기본 실습
- MySQL, Redis, MongoDB, Kafka, Elasticsearch 컨테이너 띄우기
- docker-compose로 통합 관리
PHASE 3: Spring Cloud MSA 구축 (3-4주차)
- Eureka Server (서비스 등록/발견)
- API Gateway (진입점)
- Config Server (설정 중앙화)
- 첫 번째 마이크로서비스 개발
PHASE 4: 업무 서비스 개발 (5-8주차)
- 8개 서비스 개발 (회원, 상품, 전시, 주문, 결제, 배송, 정산, 챗봇/RAG)
PHASE 5: 프론트엔드 연동 (9주차)
- Next.js 프로젝트 구성
- FastAPI 연동
PHASE 6: 운영 환경 준비 (10주차)
- 모니터링, 로깅, 배포 자동화
다음 단계
다음 글에서는 Docker를 설치하고 기본 사용법을 익힌 후, MySQL 컨테이너를 직접 띄워보는 실습을 진행할 예정이다.
This post is licensed under CC BY 4.0 by the author.