#[LG CNS AM Inspire Camp 6기] Day 31 TIL : MSA | microservice, spring cloud

SUN A·2026년 10월 1일

MSA

목록 보기
1/5

작성일: 2026.10.01 (목) | 과목:AM(Application Modernization)기반의 MSA 기술

📌 오늘 배운 내용

1. Software Architecture

  • SW를 구성하는 요소(모듈·서비스·함수)와 요소 간의 관계를 정의한 것
  • 설계자, 개발자, 사용자 같은 이해관계자들의 커뮤니케이션 도구
  • 기능 자체보다 안정적인 운영을 위한 전체 구조를 설계 → 오케스트라 지휘자 같은 역할
  • 이해관계자마다 시스템을 이해하는 수준이 달라서 관점(View)을 나눠 표현한다
    • 4+1 View: Usecase(+1) / Logical / Implementation / Process / Deployment

2. Antifragile

  • 충격이나 장애를 받으면 깨지는 게 아니라 오히려 더 강해지는 시스템
  • 4가지 요소
    • Auto Scaling: 부하에 따라 서버 수를 자동으로 조절 (Minimum ≤ Desired ≤ Maximum)
    • Microservices: 작게 나눠서 장애 격리
    • Chaos Engineering: 운영 환경에 일부러 장애를 일으켜 회복력 검증 (넷플릭스 Chaos Monkey)
    • Continuous Deployments: 작은 변경을 자주, 자동으로 배포

3. Cloud Native Architecture

  • 확장 가능: 수평 확장(Scale-out), 부하 분산, 컨테이너 기반 패키지, 모니터링
  • 탄력적: 빠른 배포 주기, 분할된 서비스, 무상태(Stateless) 통신, 서비스 추가·삭제 자동 감지
  • 장애 격리: 한 서비스에 오류가 나도 다른 서비스에 영향을 주지 않음

4. Cloud Native Application

  • Microservices → 어떻게 나눌까
  • Containers → 어떻게 담을까
  • CI/CD → 어떻게 배포할까
  • DevOps → 어떻게 일할까

5. 12-Factor App

클라우드 네이티브 애플리케이션을 만들기 위한 12가지 원칙

  • 구성과 코드를 분리하라 → Config
  • 외부 의존성은 격리하고 선언하라 → Dependencies, Backing Services
  • 상태 없는 프로세스, 빠른 시작과 종료 → Processes, Disposability
  • 환경 간 차이를 최소화하라 → Dev/Prod Parity, Build·Release·Run
  • 로그와 관리 작업은 외부에서 → Logs, Admin Processes

6. Monolithic vs MSA

구분MonolithicMSA
구조모든 기능이 하나의 앱기능별 독립된 작은 서비스
배포전체를 한 번에서비스별 독립 배포
확장앱 전체를 통째로필요한 서비스만
DB하나를 공유서비스별 분리
기술 스택단일서비스별 자유 (폴리글랏)
장애전체로 번짐장애 격리

7. Microservice 장단점

장점단점
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%

8. Spring Cloud

  • MSA를 Spring으로 쉽게 구축할 수 있게 도와주는 도구 모음
역할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 → Spring Cloud 대체 기술

강의 그림에 나온 넷플릭스 도구 중 일부는 개발이 멈춰서 지금은 다른 기술을 쓴다.

역할예전 (Netflix OSS)현재
API GatewayZuulSpring Cloud Gateway
Service DiscoveryEurekaEureka (그대로)
Load BalancerRibbonSpring Cloud LoadBalancer
Circuit BreakerHystrixResilience4j

MSA 요청 흐름

사용자 → API Gateway → Service Discovery(위치 확인)
      → Load Balancer → Circuit Breaker → 각 마이크로서비스

💻 실습/적용

Spring Cloud 실습을 위한 Maven 환경 설정

  1. Maven 압축 해제 후 C:\work로 이동
  2. 시스템 변수 MAVEN_HOME 등록
  3. 시스템 변수 Path에 %MAVEN_HOME%\bin 추가
  4. 새 cmd에서 확인
C:\Users\user>mvn -v
Apache Maven 3.9.16
Java version: 17.0.20, vendor: Eclipse Adoptium

🚨 압축을 풀 때 폴더가 한 겹 더 생겨서 경로가 강의와 달랐다.
폴더를 옮기지 않고 MAVEN_HOME 값을 실제 경로에 맞춰 해결!

내 프로젝트에 적용해 본다면?

쇼핑몰을 MSA로 나눈다면 이렇게 쪼갤 수 있다.

  • 회원 서비스 (Users) - 회원 DB
  • 상품 서비스 (Catalogs) - 상품 DB
  • 주문 서비스 (Orders) - 주문 DB
  • 앞단에 Gateway, 서비스 위치는 Eureka가 관리

사이트

jetbrains
postman
git
maven


🪄 오늘의 한마디

모놀리식은 "시작하기 쉽고 키우기 어렵다", MSA는 "시작하기 어렵고 키우기 쉽다".

MSA가 무조건 좋은 게 아니라 규모와 상황에 맞게 선택하는 구조라는 게 인상 깊었다.
결국 핵심은 "어떻게 나누고, 어떻게 연결하고, 어떻게 안 무너지게 할까"

profile
시각적 감각 • • • 기술적 논리 교차점

0개의 댓글