작성일: 2026.10.01 (목) | 과목:AM(Application Modernization)기반의 MSA 기술
클라우드 네이티브 애플리케이션을 만들기 위한 12가지 원칙
| 구분 | Monolithic | MSA |
|---|---|---|
| 구조 | 모든 기능이 하나의 앱 | 기능별 독립된 작은 서비스 |
| 배포 | 전체를 한 번에 | 서비스별 독립 배포 |
| 확장 | 앱 전체를 통째로 | 필요한 서비스만 |
| DB | 하나를 공유 | 서비스별 분리 |
| 기술 스택 | 단일 | 서비스별 자유 (폴리글랏) |
| 장애 | 전체로 번짐 | 장애 격리 |
| 장점 | 단점 |
|---|---|
| Loose coupling (느슨한 결합) | Network latency (네트워크 지연) |
| Knowledge maintenance (유지보수 쉬움) | Reduced availability (가용성 감소) |
| Less undesirable change (부작용 적음) | Data consistency (데이터 일관성) |
| Unlimited tech stack (기술 자유) | Object design complexity (설계 복잡성) |
| Easy to scale (확장 쉬움) |
가용성 감소?
요청 하나가 여러 서비스를 연달아 거치면, 그중 하나만 죽어도 실패한다.
가용성 99%인 서비스 3개를 거치면 0.99 × 0.99 × 0.99 ≈ 97%
| 역할 | Spring Cloud 구성요소 |
|---|---|
| 서비스 등록·위치 찾기 | Eureka (Service Discovery) |
| 단일 진입점, 라우팅 | Spring Cloud Gateway |
| 설정 중앙 관리 | Spring Cloud Config |
| 설정 변경 일괄 전파 | Spring Cloud Bus |
| 서비스 간 HTTP 호출 | OpenFeign |
| 로드밸런싱 | Spring Cloud LoadBalancer |
| 장애 차단 | Resilience4j (Circuit Breaker) |
| 용어 | 뜻 |
|---|---|
| 레거시(Legacy) | 낡았지만 아직 쓰고 있어서 버릴 수 없는 시스템 |
| 모놀리식(Monolithic) | 모든 기능이 하나로 뭉친 애플리케이션 구조 |
| MSA | 애플리케이션을 작고 독립적인 서비스들로 나눈 구조 |
| 폴리글랏(Polyglot) | 서비스마다 다른 언어·DB를 쓰는 것 |
| 기능적 요구사항 | 시스템이 무엇을 하는가 (회원가입, 주문) |
| 비기능적 요구사항 | 시스템이 얼마나 잘 하는가 (성능, 가용성, 보안) |
| Scale-up / Scale-out | 서버 성능 올리기 / 서버 개수 늘리기 |
| Stateless | 서버가 클라이언트 상태를 기억하지 않음 → 아무 서버나 추가·제거 가능 |
| Loose coupling | 서비스끼리 API로만 연결돼서 서로 영향이 적은 상태 |
| CNCF | 클라우드 네이티브 기술 표준을 주도하는 재단 (Kubernetes 관리) |
강의 그림에 나온 넷플릭스 도구 중 일부는 개발이 멈춰서 지금은 다른 기술을 쓴다.
| 역할 | 예전 (Netflix OSS) | 현재 |
|---|---|---|
| API Gateway | Zuul | Spring Cloud Gateway |
| Service Discovery | Eureka | Eureka (그대로) |
| Load Balancer | Ribbon | Spring Cloud LoadBalancer |
| Circuit Breaker | Hystrix | Resilience4j |
사용자 → API Gateway → Service Discovery(위치 확인)
→ Load Balancer → Circuit Breaker → 각 마이크로서비스
C:\work로 이동MAVEN_HOME 등록Path에 %MAVEN_HOME%\bin 추가C:\Users\user>mvn -v
Apache Maven 3.9.16
Java version: 17.0.20, vendor: Eclipse Adoptium
🚨 압축을 풀 때 폴더가 한 겹 더 생겨서 경로가 강의와 달랐다.
폴더를 옮기지 않고MAVEN_HOME값을 실제 경로에 맞춰 해결!
쇼핑몰을 MSA로 나눈다면 이렇게 쪼갤 수 있다.
모놀리식은 "시작하기 쉽고 키우기 어렵다", MSA는 "시작하기 어렵고 키우기 쉽다".
MSA가 무조건 좋은 게 아니라 규모와 상황에 맞게 선택하는 구조라는 게 인상 깊었다.
결국 핵심은 "어떻게 나누고, 어떻게 연결하고, 어떻게 안 무너지게 할까"