오늘의 공부 정리

22. Microservice Architecture

justkod 2022. 8. 17. 22:34

 

Microservice

https://aws.amazon.com/ko/microservices/

 마이크로 서비스란 쉽게 설명하면 Nestjs 폴더를 여러개로 나누는 것을 의미한다. 이때 해당하는 DB도 함께 나눠주어야 하는데 나누는 기준을 아주 세세하게 micro 하게 나눈다고 해서 microservice 라고 부른다. 예를들어 Nestjs에서 Auth, Board, Product 각각 들어있는 폴더를 하나씩 쪼개고 실행할 때에도 따로따로 실행한다. 그리고 각각에 해당하는 DB도 따로 분리를 해서 연결시켜준다. 이렇게 각각 나눠준 폴더들과 DB들은 모두 서로분리된 컴퓨터에 저장이 되어야 하는데 위의 세가지 폴더를 분리한 예시를 들어보면 사실상 6대의 컴퓨터가 필요한 것이다. 사실 이 컴퓨터 외에도 하나의 컴퓨터가 더 필요한데 'API-게이트웨이' 라는 폴더를 거기에 넣어주어야 한다. 이 폴더를 통해 브라우저에서 받은 내용을 어느 폴더로 넘겨주어야 할지 경로를 생성해주는데 그 과정을 proxy 라고 하고 이를 통해 트래픽을 넘겨받은 폴더에서 실제처리를 진행한다. 사실 이는 서비스별로 하나씩 나눈 예시를 든 것이고 더 세세하게 나눌지는 회사마다 다르다. 

 

Why Microservice?

 

  • 소스코드 전체를 빌드/배포하면 시간이 매우 오래걸림

  도커를 빌드하고 compose up 할 때 파일과 api들이 많아질수록 그 시간이 점점 길어지는 것을 체감했을 것이다. 고작 내가 만든 조그만한 프로젝트도 build하는데 슬슬 힘들어하는데 회사에서 만드는 서비스들은 오죽할까? 그렇기 때문에 각각 서비스들을 잘게 쪼개서 서비스를 유지 보수하고 build 하기 위해서 이를 나누어준다. 그렇게 따로따로 나눠준 API들을 각각 따로 배포하고 인터넷 상에서만 연결해주는 것이다. 따라서 하나의 서비스만 수정할 때에는 하나의 폴더만 다시 배포하면 된다.

 

  • 서버가 다운되면 모든 API가 사용 불가

 하나의 소스코드에 모든 API가 묶여있다면 통일된 하나의 서버가 죽는순간 그냥 그 서비스 자체가 모두 중단되어버리는 일이 발생할 것이다. 즉, 결제만 오류가 나고 있는데 로그인도 안되고 장바구니도 안담기고 그냥 모든 기능이 죽어버리는 셈이다. 따라서 하나의 서비스가 중단되더라도 다른 서비스는 그대로 사용할 수 있도록 유지하기 위해서 이를 분리해준다. 게시판에 글 못올린다고 홈페이지가 다운되면 이상하니까...

 

  • 한 언어 개발자만 뽑아야함

 회사입장에서 생각해보자. 모든 API를 하나의 언어만 사용하는 개발자만 뽑아야 하면 다른 유능한 개발자들을 채용하는데 제약이 생길 수 밖에 없다. 하지만 API별로 세분화해서 개발하게 된다면 각 서비스별로 다양한 언어로 API를 개발해서 나중에 합치기만 하면 된다. 사실 나도 어떻게 다양한 언어를 가진 사람들이 한 회사에서 일할 수 있는지 궁금했는데 세분화하는 개념을 알고나서 그렇구나 하고 이해했다.

 

참고로 위의 모든 이점들은 대부분 큰 서비스를 다루는 회사에 해당할 수 있음. 규모가 작은 회사에서는 오히려 오버엔지니어링 문제를 야기할 수 있다. 따라서 단점으로는 전체적인 기술 복잡도가 증가할 수 있기 때문에 어느정도 규모가 좀 잡힌 서비스에서부터 microservice를 적용한다.