강의

멘토링

커뮤니티

Inflearn Community Q&A

choing's profile image
choing

asked

Learning Large-Scale System Design by Building Directly with Spring Boot - Bulletin Board

Self code review

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

Resolved

Written on

·

39

0

좋은강의 너무 감사드리며 많이 배워가는것같습니다.

강의를 들으면서 질문이 있어 드립니다.

  1. 포트 번호로 분리된 MSA 서버를 프론트엔드에서 쉽게 사용하도록 통합하는 방법이 궁금합니다.

     

    • 일단 단순히 생각했었을때 ngnix 로 리버스프록시 적용해서 /article 이면 localhost:9000 이런식으로 리버스프록시로 구성해도 될것같은데

    • 현업에서 nginx 를 이용해서 구성을 하는지 또다른 많이 쓰는 방법이 있는지 궁금합니다.

  1. CQRS 환경에서 서버끼리 http 통신

    • article-read 에서 cqrs 를 적용하여 각 서비스에서 필요한 정보를 http 통신으로 가져오는데 클라이언트와 서버가 아닌 서버와 서버끼리면 굳이 웹과관련된 정보가 전송되는 http가 비효율적(?)이지 않나? 라고 생각을했는데 데이터 통신을 할때 카프카로 필요한 데이터만 통신하는것은 어떤가요?

     

    • 실제 msa 환경에서 서버끼리 통신할때 어떤방식으로 사용하는지도 궁금합니다.

     

javamysqlspring-bootkafkaredis

Answer 2

0

kuke님의 프로필 이미지
kuke
Instructor

쵸잉님, 안녕하세요!

 

요즘 본업으로 정신이 없어서 질문이 올라온지도 모르고 있었네요;; 일단 답변이 늦어서 죄송합니다.

 

  1. 포트 번호로 분리되었다는 것이, 단일 서버에서 여러개의 애플리케이션을 띄우는 상황을 말씀하신 것으로 이해했습니다. 말씀하신대로 path 기반으로 라우팅하는 것이 무난하고 일반적인 방법일 것 같습니다! (꼭 nginx가 아니어도 게이트웨이 역할을 하는 서버를 의미합니다.) 중간 게이트웨이에서 별도 도메인을 발급해서 관리하고 있다면, 도메인 단위로 분리할 수도 있는 것이고요.

  2. CQRS는 서버 통신 방식에 대한 관점 보단, Command와 Query의 분리 관점에서 봐주시면 좋을 것 같습니다. 말씀하신 http 통신과 카프카 방식의 차이에 대해서는, 동기와 비동기의 관점으로 바라보는 것이 좋을 것 같고요! 현재 article-read에서는 http와 kafka 두 방식을 모두 취하고 있습니다. 조회 트래픽 전파를 막기 위해 비동기로 데이터를 받아서 쿼리 모델을 만들어주고 있지만, 네트워크 또는 장비 이슈 등 항상 장애 없이 이상적으로 동작하진 않기 때문에, 쿼리 모델의 동기화 지연에 대한 대비책으로 http 통신 전략도 겸할 수 있는 것입니다. 두 방식은 목적이 다르기 때문에 각기 적용될 수 있는 것입니다. 또, 클라이언트와 서버는 상대적인 개념인데요(물론, 클라이언트가 사용자 기기를 말씀하신 부분은 이해하고 있습니다). 서버 간 통신이더라도 요청을 보내는 쪽은 클라이언트, 요청을 받는 쪽은 서버가 됩니다. 그리고 클라이언트와 서버 통신을 위한 프로토콜은 다양하지만, 강의에서는 http 1.1을 활용할 뿐이고요. 동기식, 범용적, 자주 사용되기 때문에 이해가 쉽고 구현이 간단하다는 장점은 있지만, 꼭 http 1.1을 활용할 필요는 없습니다. 성능이나 비용 측면에서 grpc(http 2.0 위에서 동작)도 자주 사용되는 선택지입니다!

     

0

안녕하세요, 인프런 AI 인턴입니다. 쵸잉님.

강의를 통해 많은 것을 배우고 계시다니 기쁘네요. 아래 질문에 대한 답변을 드리겠습니다:

  1. MSA 서버 통합 방법:

    • Nginx를 리버스 프록시로 사용하는 것은 일반적인 방법 중 하나입니다. /article 같은 경로로 요청을 받아 특정 포트로 전달하는 방식은 잘 활용되고 있습니다.
    • 현업에서는 Nginx 외에도 API Gateway를 사용하는 경우가 많습니다. Spring Cloud Gateway나 Kong 같은 API Gateway를 사용하면 다양한 라우팅, 인증, SSL 종료 등의 기능을 손쉽게 사용할 수 있습니다.
  2. 서버 간 통신 방식:

    • MSA 환경에서 서버 간 통신을 HTTP로 할 때의 비효율성에 대해 언급하셨습니다. 서버 간 통신을 비동기 메시징 시스템, 예를 들어 Apache Kafka 같은 것을 사용하여 필요한 데이터만 전달할 수 있습니다. Kafka의 경우, 대량의 데이터 전송과 비동기 처리가 용이해서 CQRS 패턴에서 많이 사용됩니다.
    • 실제 MSA 환경에서는 REST API, gRPC, 메시지 큐 시스템(Kafka, RabbitMQ 등) 등을 사용하여 서버 간의 통신을 처리합니다. 각 방법에는 장단점이 있으며, 시스템의 요구사항에 따라 적합한 방식을 선택하게 됩니다.

보다 자세한 내용을 원하시면, Spring Boot 및 Messaging 관련된 참조 문서를 확인하시는 것도 도움이 될 것입니다.

참고 링크:
- Spring Boot Messaging

추가적인 질문이 있으시면 언제든지 문의해 주세요. 감사합니다!

choing's profile image
choing

asked

Ask a question