본문 바로가기
Spring

MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (1) - MSA(MicroServiceArchitecture) 개념 정리

by devLog by Ronnie's 2022. 4. 11.

들어가며


이 글은 제목에서도 알 수 있듯이 MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J)  순으로 개념과 설정방법 그리고 테스트 등의 결과와 해당 기술들을 테스트하며 겪었던 에러 해결 방법 등을 차례대로 정리하고 공유하기 위해 작성되었다. 원래부터 이렇게 차례대로 정리하려고 한것은 아니었고 FeignClient 통신을 테스트하다보니 꼬리에 꼬리를 물어 여기까지 오게 되었다. 나름 이 시간들을 통해 많은 것을 알게 되었고 삽질도 하였다. 이 글을 보고 도움이 되었으면 한다.

 

먼저 첫번째 MSA에 대하여 정리한다. 

 

SpringBoot Cloud Framework


MSA에 대하여 정리를 하기 전 먼저 보고 가면 좋은 그림이 있어 소개한다. 이 그림을 보면 앞으로의 시리즈들의 흐름을 파악할 수 있다. 그리고 기본적으로 springboot cloud란 마이크로서비스의 개발, 배포, 운영에 필요한 아키텍처를 쉽게 구성할 있도록 도와주는 프레임워크이다. 즉, MSA 구성을 지원하는 스프링부트 기반 프레임워크라고 이해하면 된다.

 

MSA (마이크로서비스아키텍처)


  • 마이크로서비스란, 하나의 큰 어플리케이션을 여러 개의 다른 역할을 수행하는 어플리케이션으로 분리하였을 때 각 어플리케이션을 의미
  • 이렇게 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처를 마이크로서비스 아키텍처라고 한다.
  • 어플리케이션을 특화된 기능별로 나누게 되면 자연스럽게 어플리케이션의 추상화가 가능해짐 (ex - 인증서비스가 있다면 구체적인 구현 내용을 모르더라도 다른 서비스에서 약속된 인터페이스를 이용해 인증 과정을 수행할 있음)

MSA는 언제 쓰는가?


MSA에 반대되는 개념으로는 MONOLITHIC ARCHITECTURE(모놀리틱 아키텍처)가 존재한다. 모놀리틱 아키텍처는 하나의 프로젝트 안에 여러 서비스들을 존재하는 경우를 말하며 하나의 단일 패키지로 배포되게 된다. MSA와 모놀리틱아키텍처 둘 다 장단점이 존재하며 어느 것이 더 우월하다라고 말할 수는 없다. 개발 환경 또는 개발 목적 등에 따라서 이점이 더 많은 아키텍처 방식을 채택하면 된다. 보통 초기 프로젝트 시작시에는 모놀리틱 아키텍처 구성으로 진행을 하다가 특정 시점에 도달했을때 MSA로의 전환을 고려하게 되며 이때 고려사항으로는 다음과 같다

  1. 어플리케이션의 배포에 시간 이상 소요된다.
  2. 단순한 기능 하나를 수정해도 전체 기능에 대한 QA 필요하다
  3. 단순한 버그 수정이 중대한 버그를 생산하는 일이 많아졌다.
  4. 현재의 어플리케이션을 기능별로 나눈다고 가정했을 수십개의 마이크로 서비스가 가능하다.

 

MSA 장점


  • 마이크로서비스 아키텍처는 서비스의 규모가 커지고 복잡도가 증가할 수록 여러가지 장점을 갖는다.
  • 서비스가 개별적이기 때문에 변경이 용이하고 그 변경으로 인한 다른 서비스로의 영향이 적다
  • 개별 서비스 단위의 배포가 가능하기 때문에 하루에도 필요에 따라 여러번 배포 가능
  • 부하가 집중되는 특정 서비스를 위해 전체 어플리케이션을 스케일 아웃할 필요가 없어져 불필요한 자원 낭비를 줄일 수 있다.
  • 더불어 서비스의 특성의 따라 CPU 사용량 또는 메모리 사용량 등의 따라서 특성에 맞게 스케일 아웃을 할 수 있으므로 효율적 자원 사용이 가능
  • 이런 성능적 이슈 뿐만아니라 개발 조직과 회사의 조직 문화에도 큰 영향을 미칠 수 있다. (조직의 의사 결정 프로세스와 테스트 및 배포 프로세스 등에 영향을 미치므로)

 

MSA 단점


  • 모놀리틱 아키텍처에 비해 서비스 간의 통신에 대한 처리가 추가적으로 필요하게 됨 (개발해야 될 코드의 양 뿐만 아니라 요청을 처리하기 위한 응답속도에도 영향을 미침)
  • 분산된 데이터베이스로 인하여 트랜잭션 관리가 용이하지 않기 때문에 데이터의 정합성을 맞추기 위한 노력이 추가적으로 필요
  • 서비스들이 수십 수백개로 증가하게 되면 관리포인트가 증가하게 되고 통합해서 모니터링하고 운영하는 것이 모놀리틱 아키텍처에 비해 매우 어려워짐
  • 정교한 배포 자동화를 필요하게 되며 도커와 같은 컨이테너 기술을 활용하여 도움을 받게

 

마치며


다음으로는 Eureka 에 대한 개념 설명과 설정 방법 및 테스트 내용에 대하여 정리한다.

댓글