내배캠 최종 프로젝트 T.I.L

2023-08-22 MSA 작업 설계

김민커 2023. 8. 22. 21:31

MSA는 작은 독립적인 서비스들로 분리하고 개발하여 운영하는 아키텍쳐다.

MSA의 구조를 설계함에 있어서 각각의 서비스가 어떤 식으로 연동이 되는지를 먼저 설정하는 것이 중요하다.

MSA는 각 서비스가 최소한의 연결을 제외하고는 독립적인 설계가 되어있다.

그렇기 때문에 특정 서비스가 담당하는 DB에 접근을 하기 위해서는 import / require가 아닌 서비스간의 통신을 통해서 

데이터를 주고 받고 해야한다.

이 점에 대해서는 원하는 데이터를 특정서비스에서 요청을 할 때 만약 그 서비스가 현재 보수 및 수정이 진행 중이라 서버가 잠시 종료되어 있는 상태라면 그 서비스의 요청이 제대로 이뤄지지 않을 수도 있다.

 

DB를 하나만 사용하고 각 서비스 마다 하나의 포트를 배정해서 구조만 MSA를 차용한다면 코드적인 독립성을 위해서 import 등의 직접적인 DB의 접근을 통해서 MSA를 사용 할 수 있지만 특정 서비스의 코드 특히 DB쪽에서 수정 사항이 생겼을 경우 import등으로 코드를 짠 부분에서 각종 에러가 발생할 가능성이 있다.

 

MSA의 가장 큰 장점은 각 서비스가 독립적인 형태이기 때문에 특정 서비스의 수정 삭제 등의 이슈에 영향을 받지않고 계속해서 서비스를 제공할 수 있다는 점이다.

서비스간의 통신을 통해서가 아닌 직접적인 DB의 접근은 MSA의 특성과는 거리가 있다고 할 수 있다.

 

MSA의 서버간의 통신을 예시로 들면 회원관리 서비스와 게시판 서비스가 독립적으로 운영이 되고 있을 때

게시판 서비스에서 유저의 정보를 얻고 싶다면 게시판 서비스에서 직접 가져오는 것이 아니라 회원관리 서비스와 통신을 해서 특정 데이터를 받아와야 한다는 의미다.

 

다만 직접적인 DB의 접근을 통해서 데이터를 받아오는 것이 아닌 서비스 간의 통신을 통해서 데이터를 받아오는 것이기 때문에 받아온 데이터에 대한 신뢰성은 DB에서 직접 받아오는 것 보다 낮다. 만약 서버간의 통신을 통해서 데이터를 주고받는 방식을 선택했을 때 받아온 데이터에 대한 신뢰성을 보장 할 수 있는 방안을 마련해두는 것이 좋다.

 

MSA의 방식으로 작업을 할 때 우선적으로 각 서비스의 독립성을 어떤 식으로 보장할 지 먼저 생각을 해야한다.

데이터베이스를 한 개만 사용할지 여러개를 사용할지 서비스 간에 최소한의 연결만 남겨두고 독립적으로 배치할지 코드적인 독립성을 위해서 DB에 대한 접근성을 열어둘지에 대한 방향성을 고려해야한다.

 

다만 MSA의 방식으로 작업을 한다고 가정했을 때 각 서비스 마다 모든 DB에 접근하게 하는 방법은 MSA의 특성과는 어울리지 않는다.