막상 백엔드를 시작하려고 하니 주변에서 많은 도움을 주었다.
로드벨런싱이니 프록시니 MSA니 다양한 CS 지식을 심어주었는데 솔직히 하나도 모르겠다.
그래서 내가 들은 내용을 따로 정리하기로 했다.
MSA? 그게 뭐시여
맞다. MSA 들어보기만 했지 진짜 제대로 알아보거나 한적은 없었고, 트래픽을 분산하기위해 사용하다는거밖에 못들어봤다.
이게 좀 대부분 길게 설명이 되어있던데 간략하게 정리를 해보면
애플리케이션을 설계하고 구축하는 데 사용하는 패턴과 기술
이라고 정의를 내릴 수 있을것 같다.
흔히 단일서버라고 이야기를 하기도 하는데 한 서버에서 여러개의 서비스를 구동하는거라고 생각하면 편하다.
다시 말하면 한 가지의 코드베이스로 구성된 아키텍처로, 어떠한 언어의 프레임워크를 사용해도 문제가 없다.
NodeJS + ExpressJS
Python + Django
Java + Spring
등등 이런것들 하나로만 이루어진 서버이다.
End to End 테스트가 용이하지만, 단점도 여럿 존재해 요즘 MSA로 넘어가는 추세라고 한다.
단점
빌드 테스트 배포
순서를 거쳐야 한다.Micro Service Architecture
의 약어로 앞글자를 따서 MSA라고 한다.
의미에서 보이듯, 작은 서비스 패턴 뭐 이런뜻이다.
각각의 서비스는 모놀리틱 아키텍처와 유사한 구조를 가지고,
각각의 서비스는 Gateway로 배포가 되며, REST와같이 가벼운 방식으로 통신이 된다.
내가 정리한 MSA 에 대한 짧은 정의는 이렇게 된다.
위에서 말했듯 모놀리틱한 서버는 서비스가 커질수록 코드가 너무 방대해진다.
그리고, 여러 서비스가 한 곳에 다 모이기 때문에 서비스가 커지고 복잡해지면 장기적으로 바라보았을 때 유지보수가 힘들어진다. 즉 이것들을 커버해주는게 MSA 의 장점이라고 볼 수 있을것같다.
여기서부터 좀 많이 헷갈리고 여러 지식들이 많이 필요해지는 부분인데, 이거는 나도 공부를 좀 더 해봐야겠다.
일단, 내가 여태까지 조사하고 공부한 내용들을 토대로 정의를 내려보자면,
API Gateway를 통해 서버 앞단에서 모든 API서버들의 엔드포인트를 단일화 해주는 또 다른서버
메세지의 내용에 따라서 내부에 있는 마이크로 서비스로 라우팅을 해주는 역할.
딱 이렇게 정의가 된다고 본다.
그림으로보면 살짝 이런 느낌인데 이 API Gateway를 제작할땐 Spring이 좋다고 한다.
단순 CRUD 수준이면 다른 언어들이 코드레벨 생산성은 빠를지 몰라도
여러 서비스들이나 플랫폼/툴들 이어붙이고 연동하고 새로운 컴퍼넌트 이어붙이기 시작하면 스프링은 모든 요소가 엔터프라이즈급으로 다 제공되고 있어 유리하다.
다른 언어면 필연적으로 사내에서 자체적으로 대응하는 라이브러리나 래퍼들을 개발해서 공수가 폭증하기 시작하는데 스프링은 그냥 비즈니스 로직에만 집중하고 블럭처럼 끼워넣기만해도 무한 시스템확장이 가능하다
API Gateway는 아래와 같은 다양한 기능을 제공한다.
MSA 는 실제로 구현을 해보면서 느끼는게 가장 중요할 것 같다