Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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 27 28
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

MSA(Micro Service Architecture) 본문

Computer Science

MSA(Micro Service Architecture)

ultra_dev 2023. 3. 29. 13:16

마이크로 서비스 아키텍쳐

 

독립적으로 배포 가능한, 각각의 기능을 수행하는 서비스로 구성된 아키텍쳐라고 할 수 있다. 

서비스마다 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능하다.

 


기존의 방식은 모놀리식 아키텍쳐 방식이다.

 

개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.

 

웹의 경우 WAR파일로 빌드되어 WAS에 배포하는 형태를 말한다. 주로 소규모 프로젝트에서 사용된다.

 

모닐리식 아키텍쳐 방식의 장점

  • 전체 애플리케이션이 하나로 되어 있으니, 보통 동일한 개발 툴 사용
  • 따라서 배포 및 테스트 등의 개발, 환경설정이 간단
  • 각 컴포넌트들이 함수로 호출 되기 때문에 성능에 제약이 덜하고 운영 관리 용이
  • 결론 : 작은 볼륨의 시스템에는 매우 유용하지만 시스템이 커지면 문제 발생

모닐리식 아키텍쳐 방식의 단점

 

  • 부분 장애가 서비스 전체 장애로 확대 ex) 잘못된 코드 배포, 트래픽 장애가 다른 곳에도 영향 미침(특정 서비스에 트래픽 몰려서 서버가 멈추면 다른 서비스도 멈추게 되니) 
  • 부분적인 Scale out이 어렵다. 사용하지 않은 서비스에 대한 부분에도 Scale out 필요
  • 서비스 변경이 어렵고, 수정 시 장애 영향도 파악 힘들다
    • 여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문
  • 배포 시간이 오래 걸린다
    • 최근 추세는 CI/CD를 통한 개발부터 배포까지 빠르게 반영하는 추세이다.
    • 규모가 커지면 작은 변경에도 높은 수준의 테스트 비용이 발생한다.
  • 하나의 프레임 워크에 종속적이다.
    • Spring framework를 사용하다가 추후 blockchain 연동 모듈을 추가할 때 node.js를 사용할 수 없고, java를 이용하여 해당 모듈을 작성할 수 밖에 없다. 선정했던 framework가 Spring이기 때문이다.

MSA 방식은 이런 모놀리식 방식의 단점을 보완한다.

 

서비스를 각 컴포넌트 별로 나눠서 조합하기 때문이다. 

 

각 컴포넌트는 서비스 형태로 구현, API 이용해서 타 서비스와 통신하게 된다.

 

따라서 마이크로서비스 기반의 어플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다. 

 

 

MSA 방식의 장점

 

  • 각각 개별 서비스 개발 및 배포가 가능하고, 유지 보수가 쉽다. -> CI/CD가 가벼워진다.
  • 개별 서비스 별로 기술 스택을 다르게 가져갈 수 있다. 회사가 Spring 기반이라도 블록체인 개발 모듈은 node.js를 활용할 수 있다.
  • 각각 서비스 부하에 따라 개별적인 scale-out이 가능해서 메모리,cpu적으로 이득이 된다.

MSA 방식의 단점

  • 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야한다.
  • 모놀리식에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는게 어렵다. 
  • 통합 테스트가 어렵다. 
  • 실제 운영환경에 대해서 배포하는 것이 쉽지 않다. 마이크로서비스의 경우 서비스 1개를 재배포 한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지도 확인해야한다. 
  • 서비스간 호출이 API 통신을 통해 이루어지기 때문에 속도가 느리다.

MSA 문제점

 

각 서비스가 다른 서버에 분리 배포되어 있어서 서버 URL이 다르다.

 

따라서 API Gateway와 로드밸런서를 활용해야 한다.

 

만약 로드밸런서만 활용하면 모든 마이크로서비스의 보안 및 권한부여와 같은 보안적용을 하기 위해서는 상당한 개발노력이 필요하다. 따라서  API Gateway를 사용해야 한다.

API Gateway는 API 서버 앞 단에서 모든 API 서버들의 End-Point를 묶어주는 역할을 한다. 또한 거미줄처럼 복잡한 서비스간의 API호출 구조도 단순화 시켜준다. 즉  API의 Endpoint를 받아서 내부의 마이크로서비스로 라우팅해주는 역할을 한다

 

 

API Gateway

 

장점 :

  • 요청에 대한 공통 관심사를 중앙에서 처리할 수 있다. (Security, Routing, Rate Limiting, Monitoring etc)
  • 클라이언트에서 어느 마이크로서비스 인스턴스로 요청을 보낼지 고민하지 않아도 된다.
  • 백엔드 마이크로서비스의 복잡도를 숨길 수 있다.

 

단점 :

  • 모든 요청이 게이트웨이를 거치기 때문에 응답시간이 늘어날 수 있다.

'Computer Science' 카테고리의 다른 글

B-Tree  (0) 2023.03.29
제네릭이란  (0) 2023.03.29
인덱스(INDEX)에 대해  (0) 2023.03.28
DI(Dependency Injection) 의존 관계 주입  (0) 2023.03.28
REST API  (0) 2023.03.27
Comments