개발자

nestjs msa구조설계

2023년 09월 20일조회 563

안녕하세요. 신입 node 개발자로 일을 하게 되었는데, nestjs msa 아키텍처를 구성해야하여 질문드립니다. 우선 nestjs는 모놀로그 전용 프레임워크로 설계되어 msa 구조를 채택하려면 개별의 프로젝트를 두고 @nestjs/microservices 라이브러리를 사용하여 메시지 큐를 연동하는 형식으로 공부했는데, 게이트웨이 엔드포인트 관리부분에서 어떤식으로 구성해야할까요? 1. gateway에 모든 서비스가 연결되어 모든 비즈니스로직이 gateway를 거쳐가는 방식 - (gateway 서비스 메모리 부담이 크다고 생각합니다.) 2. 개별의 서비스끼리 연결되는 방식 - (Transport 관리비용이 커진다고 생각합니다.) 그 외 방법이 있다면 알려주시면 감사하겠습니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

김형준님의 프로필 사진

현재 구상하고 있는 방식에 대한 설명을 추가로 남겨주시면 더 도움을 드릴 수 있을 것 같은데 아쉽네요. 그래도 일단 메시지 큐를 연동하는 방식으로 정리 중이라고 하니 적절한 방향으로 좋은 방향으로 가고 있다고 생각됩니다. 엔드포인트 부분은 1번을 추천합니다. 여기서 메모리 문제는 gateway를 stateless 하게 관리해서 해결하는 건 어떨까요? 여러 gateway를 배포했을 때 어떤 gateway를 거치더라도 동일한 결과가 나오게 만들고, 여러 gateway를 로드벨런서로 묶어서 관리하는 방법은 어떨까 합니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 20일

NestJS를 사용한 MSA(Microservices Architecture) 구조를 설계할 때는 여러 방식이 있을 수 있지만, 일반적으로 아래 두 가지 방법을 고려해볼 수 있습니다. 1. API Gateway 패턴: 이 경우에는 모든 클라이언트 요청이 게이트웨이를 통과하게 되며, 게이트웨이가 각 서비스로 해당 요청을 라우팅합니다. 이 방식은 직관적이고 구현하기 쉬울 뿐만 아니라, 모든 요청 및 응답 로직을 한 곳에서 처리할 수 있기 때문에 관리하기도 용이합니다. 다만, 게이트웨이가 병목 지점(bottleneck)이 될 수 있다는 단점도 있습니다. 2. 직접 서비스간 통신: 하나의 서비스가 다른 서비스를 직접 호출하는 방식입니다. 이 방법은 각 서비스가 자신의 업무에만 집중하므로 응집력(cohesion)을 높일 수 있는 장점이 있습니다. 하지만 이 경우에는 서비스 간의 연결(composition)과 오케스트레이션(orchestration) 문제를 해결해야 합니다. 사용할 방법은 시나리오와 특정 요구 사항에 따라 결정해야 합니다. 일부 시스템에서는 게이트웨이 패턴이 더 적합할 수 있습니다. 다른 시스템에서는 서비스 간 직접 통신이 더 적합할 수 있습니다. NestJS의 경우, `@nestjs/microservices` 모듈을 이용하면 각 서비스 간에 메시지를 교환하는 것도 가능합니다. 이 방식은 Event-driven 아키텍처와도 잘 연결되므로, MSA 구조를 설계할 때 고려해볼 수 있는 옵션 중 하나입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!