MSA

fireFox·2022년 5월 31일
0

개요

하나의 큰 어플리케이션을 작은 어플리케이션 단위로 나누어 변경, 확장이 용이하게 만든 구조

MSA(MicroService Architecture)은 하나의 큰 어플리케이션을 작고 독립적으로 각자의 기능을 수행하는 어플리케이션으로 나누는것이다.

예를들어 배달 어플리케이션을 만든다면 배달, 회원관리, 음식점 관리 모듈로 나누어서 개발하는 것이다. 각 모듈을 나누는 기준은 DDD와 관련이 깊다. 도메인별로 구분하여 모듈을 나눠야하는데 도메인들 간에는 약한 결합도를 가져야하고 도메인 내부에서는 강한 응집도를 가지는것을 목표로 해야한다.

각 모듈들은 API를 통해 서로 통신하게된다.

아마존 닷컴의 CEO인 제프 베이조스는 어느날 전 직원에게 메일을 전송했다고 한다. 메일 보낸 시기가 2002년임을 감안하면 엄청난 혜안이다..

  1. 모든 팀들은 데이터와 기능들을 서비스 인터페이스로 연결시켜라.
  2. 팀들은 이 인터페이스를 통해서 연락해야 한다.
  3. 다른 어떤 커뮤니케이션 방법도 허용되지 않는다. 직접 링크를 보내거나 다른 팀의 스토리지에 직접 액세스 해서도 안 되며, 공유 메모리나 백도어 같은 것도 안 된다. 모든 커뮤니케이션은 네트워크를 통한 서비스 인터페이스로 이루어져야 한다.
  4. 어떤 기술을 쓰든 상관없다. HTTP, Corba, Pubsub, 독자 프로토콜...그건 상관없다. 베조스는 그런 데 관심 없다.
  5. 모든 서비스 인터페이스는 예외 없이 외부에서 이용 가능하게 만들어져야 한다. 그 말은 팀들은 외부 개발자들이 인터페이스를 이용할 수 있게 해야 한다는 것이다. 예외는 없다.
  6. 이를 실천하지 않는 사람은 누구든 해고될 것이다.

MSA가 흥행하게 된 배경

1) 업무조직 성격의 변화
예전에는 DB팀, 개발팀, 인프라팀 등등 이렇게 팀을 구성했지만 최근에는 목적별로 작은팀을 만드는게 트렌드이다. 작은팀에 개발자, DBA, 디자이너 등을 한 팀으로 구성하므로 각 서비스별로 모듈이 나눠져 있는 방식이 유리하다.

2) 클라우드 서버의 등장
클라우드 서버의 등장으로 scale-out, scale-up이 간편해졌다. 특정 서비스에 많은 트래픽이 몰리면 그 서버의 자원을 늘려서 대응할 수 있게 되었다.

3) 빠르게 변화하는 시장환경
개발 생명주기가 빨라져서 신규기능은 빠르게 추가되기도 하고 빠르게 폐기되기도 한다. 이런 환경에선 조그만 기능추가가 있어도 전체 시스템을 빌드, 배포해야하는 모놀리틱보다는 MSA이 더 유리하다.

MSA VS Monolithic

- Monolithic

모놀리틱은 하나의 큰 어플리케이션이 모든 기능을 담당하도록 통합되어 있는 구조를 말한다. 하나의 어플리케이션에 모든 기능이 다 들어가 있으므로 유지보수가 편리하고 전체 구조파악이 쉽다는 장점이 있다.
하지만 덩치가 크기때문에 빌드, 배포시간이 오래걸려 기능추가가 쉽지않고 TDD(테스트 주도 개발)가 각광받는 시대에 잘 맞지 않는다. 소규모 프로젝트나 복잡도가 낮은 시스템에서는 좋은 방법이 될 수 있다.

장점

  • 구조가 간단하여 유지보수에 용이하다
  • 서비스가 하나라서 내부통신에 신경쓰지 않아도된다
  • DB가 하나라서 트랜잭션 관리에 용이하고 데이터 조회가 쉽다

단점

  • 서비스가 커지면 구조가 복잡해져 구조파악이 힘들다
  • 부분적인 장애가 서비스 전체 장애로 전파될 수 있다
  • 배포, 빌드가 오래걸린다.
  • 특정 기능의 추가, 확장이 어렵다.
  • 하나의 프레임워크와 언어에 종속된다

- MSA

장점

  • 각 개별 서비스로 분리되어있기 때문에 기능추가가 용이하다
  • 분리되어 있는 모듈이라 부분적인 장애가 서비스 전체 장애로 전파되지 않는다
  • 특정 서비스에 트래픽이 몰리면 그 특정 서비스만 scale-out 으로 부하를 분산하기 용이하다. (클라우드 서버 환경에서 가능한 장점)

단점

  • 장애발생시 DB가 분리되어 있으므로 어떻게 트랜잭션 처리를 해야할지 구현해야한다
  • 개별 서비스끼리 API로 통신해야 하므로 서비스 복잡도가 높아진다
  • 개별 서비스 서버끼리 통신량증가

MSA를 도입하지 말아야 하는 경우

모든 아키텍처가 그렇겠지만 MSA도 모노리틱에 비해서 항상 유리하진 않다.
위 그래프는 아키텍쳐와 시스템 복잡도에 관한 그래프이다. 복잡도가 낮을땐 모노리틱이 생산성 측면에서 오히려 MSA보다 유리하다.
MSA가 유리한 시점은 일정 수준의 복잡도가 존재하는 구간부터이다. 이 구간부터는 MSA의 도입을 고려해 볼만 하다.

참고자료

https://helloworld.kurly.com/blog/ddd-msa-service-development/
https://mydream72.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%B3%B4%EB%8B%88-MSA%EB%9E%80
http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/

profile
기억날때 기록하자

0개의 댓글