[내일배움캠프] 주특기 입문 MSA 요약본

2026. 4. 15. 14:49·내일배움캠프/TIL

**수정 중

 

MSA(Microservice Architecture)

MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍쳐 스타일로, 각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 배포되고 확장될 수 있다.

 

쉽게 말하자면 하나의 서버에서 모든 걸 관리하던 것을 기능별로 서버를 나누어서 관리하게 된 것이라고 보면 된다.

  • 장점 : 확장성, 독립적 배포, 유연성
  • 단점 : 복잡성 및 운영비용 증가

 

 

Spring Cloud

Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장으로, 마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도와준다.

 

주요 기능

  • 서비스 등록 및 디스커버리
  • 로드 밸런싱
  • 서킷 브레이커
  • API 게이트웨이
  • 구성 관리
  • 분산 추적
  • 메시징

 

1. 서비스 등록 및 디스커버리

서비스 디스커버리는 MSA에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능을 말한다.

주요 모듈로 Eureka를 사용한다. Eureka는 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로 서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리한다.

 

Eureka server 하나에 같은 기능을 하는 인스턴스 2개를 연결해보는 실습을 해봤다.

Eureka server는 19090 포트에서, Instance A는 19091, B는 19092 포트에서 실행되도록 한다.

작성한 코드는 아래 깃허브 링크에서 확인할 수 있다.

 

MSA/실습 1-4 서비스 디스커버리 at master · seola12e/MSA

[JAVA단기심화] MSA(Microservice Architecture) 실습. Contribute to seola12e/MSA development by creating an account on GitHub.

github.com

 

Eureka 서버를 먼저 실행한 후 localhost:19090 으로 접속하면 아래와 같이 서버가 뜬다.

 

이후 A(first), B(second) 서버도 실행하게 되면 아래와 같이 2개의 Instance가 있는 것을 확인할 수 있다.

 

2. 로드 밸런싱

로드 밸런싱은 네트워크 그래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 시스템의 성능과 가용성을 높이는 기술로, 종류로는 클라이언트 사이드 로드 밸런싱, 서버 사이드 로드 밸런싱이 있다.

이중 클라이언트 사이드 로드 밸런싱이란 클라이언트가 직접 여러 서버 중 하나를 선택하여 요청을 보내는 방식이다.이때 FeignClient를 사용하는데, 이는 Spring Cloud에서 제공하는 HTTP 클라이언트로, 선언적으로 RESTful 웹 서비스를 호출할 수 있다.

추가적으로 Ribbon이라는 모듈을 사용하는데, 이는 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로, 서비스 인스턴스 간의 부하를 분산시켜주는 역할을 한다.

로드 밸런싱 알고리즘으로는 라운드 로빈을 사용하는데, 이는 각 서버에 순차적으로 요청을 분배하는 방식이다.

 

이번에는 Eureka server 하나에 Order 인스턴스 1개와, 같은 기능을 하는 포트만 다른 Product 인스턴스 3개를 연결해보았다.

Eureka server는 19090 포트에서, Order 인스턴스는 19091, Product 인스턴스들은 각각 19092, 19093, 19094번 포트에서 실행되도록 한다.

작성한 코드는 아래 깃허브 링크에서 확인할 수 있다.

 

MSA/실습 1-5 로드밸런싱 at master · seola12e/MSA

[JAVA단기심화] MSA(Microservice Architecture) 실습. Contribute to seola12e/MSA development by creating an account on GitHub.

github.com

 

Eureka 서버를 먼저 실행한 후 Order 서버와 Product 서버 3개를 실행했다.

localhost:19090 으로 접속해서 아래와 같이 총 4개의 Instance가 있는 것을 확인할 수 있다.

 

이후 localhost:19091/order/1 로 접속해서 여러 번 요청을 보내면 본문 텍스트의 port 가 19092 → 19093 → 19094 이후 다시 19092로 돌아오는 것처럼 한번씩 라운드로빈 형식으로 동작함을 확인할 수 있었다.

 

3. 서킷 브레이커

서킷 브레이커는 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다.

주요 모듈로는 Hystrix와 Resilience4j가 있는데, 강의에서는 Resilience4j를 다뤘다. Resilience4j는 서킷 브레이커 라이브러리로, 다양한 기능을 제공하며 장애 격리 및 빠른 실패를 통해 복원력을 높인다.

서킷 브레이커는 closed, open, half-open 상태를 통해 호출 실패를 관리한다.

  • Closed
    • 기본 상태로, 모든 요청을 통과시킴
    • 이 상태에서 호출에 실패하면 실패 카운터가 증가하며, 실패율이 설정된 임계값을 초과하면 Open 상태로 전환됨
  • Open
    • 모든 요청을 즉시 실패로 처리함
    • 설정된 대기 시간이 지나면 Half-Open 상태로 전환됨
  • Half-Open
    • 제한된 수의 요청을 허용하여 시스템이 정상 상태로 복구되었는지 확인함
    • 요청이 성공하면 Closed 상태로 전환되며, 실패 시 다시 Open 상태로 전환됨

 

이번 실습에서는 상품 아이디 111을 호출하면 에러를 발생시켜서 fallbackMethod를 실행하는 것을 확인했다.

작성된 코드는 아래 깃허브 링크에서 확인할 수 있다.

 

MSA/실습 1-6 서킷브레이커/com.spring-cloud.resilience4j.sample at master · seola12e/MSA

[JAVA단기심화] MSA(Microservice Architecture) 실습. Contribute to seola12e/MSA development by creating an account on GitHub.

github.com

 

먼저 localhost:19090/products/11을 3번 호출해봤다.

 

이후 localhost:19090/products/111을 여러번 호출하면서 에러를 발생시켰다.

실패 카운터가 증가되면서 결국 OPEN 상태로 변환되었고, 상태가 변한 이후로는 111번을 호출하면 즉시 error가 발생했다.

 

Open 상태에서는 localhost:19090/products/11 로 호출해도 error 를 터뜨리다가, 일정 대기 시간이 지나니 HALF-OPEN 상태로 변환된 것을 확인할 수 있었다.

Half-Open 상태로 시스템이 정상적으로 복구됐는지 확인 후에 CLOSED 상태로 다시 돌아왔다.

 

4. API 게이트웨이

API 게이트웨이는 클라이언트의 요청을 받아 백엔드 서비스로 라우팅하고, 다양한 부가 기능을 제공하는 중간 서버이다.

Spring Cloud에서도 Gateway 서비스를 지원한다. 이는 Spring 프로젝트의 일환으로 개발된 API 게이트웨이로, 클라이언트 요청을 적절한 서비스로 라우팅하고 다양한 필터링 기능을 제공한다.

Spring Cloud Gateway의 주요 특징으로는 동적 라우팅, 필터링, 모니터링, 보안 등이 있다.

 

이번에는 서비스 제일 앞단에 Gateway를 두어서 User는 항상 요청을 Gateway로 보내도록 하고, 여기에서 적절한 서비스를 라우팅해서 호출하는 방식으로 연결해보았다.

 

Eureka server는 19090포트에서, Gateway는 19091, Order 인스턴스는 19092, Product 인스턴스들은 각각 19093, 19094번 포트에서 실행되도록 한다.

작성한 코드는 아래 깃허브 링크에서 확인할 수 있다.

 

MSA/실습 1-7~9 API GW at master · seola12e/MSA

[JAVA단기심화] MSA(Microservice Architecture) 실습. Contribute to seola12e/MSA development by creating an account on GitHub.

github.com

 

Eureka 서버를 먼저 실행한 후 Gateway와 Order, Product 순으로 어플리케이션을 실행했다.

localhost:19090 으로 접속해서 아래와 같이 총 3개의 Instance가 있는 것을 확인할 수 있다.

 

이후 localhost:19091/{instance} 로 호출하면 요청한 instance에 맞는 서비스가 호출됨을 확인할 수 있었다.

 

5. Spring Cloud Config

Spring Cloud Config는 분산 시스템 환경에서 중앙 집중식 구성 관리를 제공하는 프레임워크로, 모든 마이크로서비스의 설정을 중앙에서 관리하게 한다. 따라서 개발, 테스트, 운영 등 환경별로 구성을 분리하여 관리할 수 있으며, 설정 변경 시 애플리케이션을 재시작하지 않고도 실시간으로 반영할 수 있다.

 

이번에는 Config 서버를 생성한 후 product-local 인스턴스가 해당 Config를 통해 실행되도록 구현했다.

 

Eureka server는 19090포트에서, Config는 18080, Product 인스턴스는 19083번 포트에서 실행되도록 한다.

작성한 코드는 아래 깃허브 링크에서 확인할 수 있다.

 

MSA/실습 1-7~9 API GW at master · seola12e/MSA

[JAVA단기심화] MSA(Microservice Architecture) 실습. Contribute to seola12e/MSA development by creating an account on GitHub.

github.com

 

Eureka 서버를 먼저 실행한 후 Config, Product 순으로 어플리케이션을 실행했다.

localhost:19090으로 접속해서 아래와 같이 총 2개의 인스턴스가 있는 것을 확인할 수 있다.

 

Product 인스턴스가 실행될 때의 로그를 확인하면 19083번 포트로 할당되어 있다.

 

localhost:19083/product 를 호출하여 포트와 메시지를 확인했다.

 

Config 서버의 product-service-local.yml 의 message 내용을 "product-service-local message updated" 라고 변경하고 재시작했다. localhost:19083/actuator/refresh 로 응답 메시지를 업데이트 한 후 다시 product를 호출하면 아래와 같이 메시지가 변경된 것 을 확인할 수 있었다.

 

6. 분산 추적

  • 분산 추적: Spring Cloud Sleuth, Zipkin

 

7. 메시징

  • 메시징: Spring Cloud Stream

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프] 260417 TIL #10 CRUD Code Shadowing 2차  (0) 2026.04.17
[내일배움캠프] 260416 TIL #9 입문 프로젝트 시작  (0) 2026.04.16
[내일배움캠프] 260415 TIL #8 CRUD Code Shadowing  (0) 2026.04.15
[내일배움캠프] 260414 TIL #7 MSA  (0) 2026.04.14
[내일배움캠프] 260413 TIL #6 MSA  (0) 2026.04.13
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프] 260417 TIL #10 CRUD Code Shadowing 2차
  • [내일배움캠프] 260416 TIL #9 입문 프로젝트 시작
  • [내일배움캠프] 260415 TIL #8 CRUD Code Shadowing
  • [내일배움캠프] 260414 TIL #7 MSA
이서라다
이서라다
  • 이서라다
    개발일지
    이서라다
  • 전체
    오늘
    어제
    • 전체 보기 (79)
      • 내일배움캠프 (21)
        • TIL (21)
      • 프로그래머스 (23)
      • Algorithm (2)
      • BackEnd (0)
        • Spring (0)
      • Language (4)
        • JAVA (4)
      • Git (2)
      • 백준 - Java (25)
        • 입출력과 사칙연산 (6)
        • 반복문 (8)
        • 1차원 배열 (1)
        • 문자열 (7)
        • 2차원 배열 (1)
        • 조합론 (1)
        • 정렬 (1)
      • IDE (1)
        • IntelliJ (1)
      • 티스토리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    내일배움캠프
    til
    jdk삭제
    티스토리스킨
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이서라다
[내일배움캠프] 주특기 입문 MSA 요약본
상단으로

티스토리툴바