모놀리식 아키텍처와 MSA

nGyu·2022년 1월 22일
0

백엔드 CS

목록 보기
1/10

막상 백엔드를 시작하려고 하니 주변에서 많은 도움을 주었다.
로드벨런싱이니 프록시니 MSA니 다양한 CS 지식을 심어주었는데 솔직히 하나도 모르겠다.

그래서 내가 들은 내용을 따로 정리하기로 했다.


MSA? 그게 뭐시여

맞다. MSA 들어보기만 했지 진짜 제대로 알아보거나 한적은 없었고, 트래픽을 분산하기위해 사용하다는거밖에 못들어봤다.

아키텍처

아키텍처가 뭔데

이게 좀 대부분 길게 설명이 되어있던데 간략하게 정리를 해보면
애플리케이션을 설계하고 구축하는 데 사용하는 패턴과 기술
이라고 정의를 내릴 수 있을것 같다.


Monolithic

흔히 단일서버라고 이야기를 하기도 하는데 한 서버에서 여러개의 서비스를 구동하는거라고 생각하면 편하다.

다시 말하면 한 가지의 코드베이스로 구성된 아키텍처로, 어떠한 언어의 프레임워크를 사용해도 문제가 없다.
NodeJS + ExpressJS
Python + Django
Java + Spring

등등 이런것들 하나로만 이루어진 서버이다.

End to End 테스트가 용이하지만, 단점도 여럿 존재해 요즘 MSA로 넘어가는 추세라고 한다.

단점

  • 프로젝트가 커지면 구동 시간과 빌드 시간이 늘어난다
  • 작은 수정사항에도 프로젝트 전체를 빌드 테스트 배포 순서를 거쳐야 한다.
  • 한 서버에 코드가 너무 방대해 다른 개발자들이 보기 어렵고, 유지보수또한 상당한 공수가 들어간다.

MSA

Micro Service Architecture
의 약어로 앞글자를 따서 MSA라고 한다.

의미에서 보이듯, 작은 서비스 패턴 뭐 이런뜻이다.

각각의 서비스는 모놀리틱 아키텍처와 유사한 구조를 가지고,
각각의 서비스는 Gateway로 배포가 되며, REST와같이 가벼운 방식으로 통신이 된다.

내가 정리한 MSA 에 대한 짧은 정의는 이렇게 된다.

MSA 왜 필요한데?

위에서 말했듯 모놀리틱한 서버는 서비스가 커질수록 코드가 너무 방대해진다.
그리고, 여러 서비스가 한 곳에 다 모이기 때문에 서비스가 커지고 복잡해지면 장기적으로 바라보았을 때 유지보수가 힘들어진다. 즉 이것들을 커버해주는게 MSA 의 장점이라고 볼 수 있을것같다.

API Gateway

여기서부터 좀 많이 헷갈리고 여러 지식들이 많이 필요해지는 부분인데, 이거는 나도 공부를 좀 더 해봐야겠다.
일단, 내가 여태까지 조사하고 공부한 내용들을 토대로 정의를 내려보자면,

API Gateway를 통해 서버 앞단에서 모든 API서버들의 엔드포인트를 단일화 해주는 또 다른서버
메세지의 내용에 따라서 내부에 있는 마이크로 서비스로 라우팅을 해주는 역할.

딱 이렇게 정의가 된다고 본다.

그림으로보면 살짝 이런 느낌인데 이 API Gateway를 제작할땐 Spring이 좋다고 한다.

단순 CRUD 수준이면 다른 언어들이 코드레벨 생산성은 빠를지 몰라도
여러 서비스들이나 플랫폼/툴들 이어붙이고 연동하고 새로운 컴퍼넌트 이어붙이기 시작하면 스프링은 모든 요소가 엔터프라이즈급으로 다 제공되고 있어 유리하다.
다른 언어면 필연적으로 사내에서 자체적으로 대응하는 라이브러리나 래퍼들을 개발해서 공수가 폭증하기 시작하는데 스프링은 그냥 비즈니스 로직에만 집중하고 블럭처럼 끼워넣기만해도 무한 시스템확장이 가능하다

기능

API Gateway는 아래와 같은 다양한 기능을 제공한다.

  • 인증 및 인가
    • SSL, 인증서관리, Auth 인증 등 다양한 인증 및 인가 기능을 API Gateway에서 제공한다.
  • 요청 절차의 단순화
    • 여러 클라이언트가 접속을 할 시 API Gateway를 통해 요청을 하므로, 서비스들의 입장에서는 한 클라이언트에서 요청하는것으로 받아드릴 수 있다.
  • 라우팅 및 로드벨런싱
    • 접수된 메세지에 따라 API 호출을 적절한 서비스에 라우팅할 수 있다.
    • 서비스 인스턴스들에 대한 부하를 분산할 수 있다.
  • 서비스 오케스트레이션
    • 마이크로 서비스를 묶어 새로운 서비스를 만드는 개념 ( 서비스 + 서비스 = 새로운서비스 )
    • 과도한 사용 시 API Gateway의 부담 상승
      • MSA와 API Gateway에 대한 높은 수준의 기술적 이해를 바탕으로 이루어져야함.
  • 서비스 디스커버리
    • 서비스의 위치를 찾는것을 서비스 디스커버리( Service Discovery ) 라고 한다.
      • API Gateway는 각 서비스 호출을 위해 서비스의 IP주소+ 포트번호를 알고 있어야함. legacy 환경에서는 상관 없지만 클라우드 환경에서는 동적인 환경에서 배포되기에 서비스의 위치를 찾는게 힘듬.
    • API Gateway에서는 서버사이드나 클라이언트 사이드를 기준으로 하여 서비스 디스커버리 구현 가능

MSA 는 실제로 구현을 해보면서 느끼는게 가장 중요할 것 같다

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글