Inflearn brand logo image

인프런 커뮤니티 질문&답변

김아무개_본계정님의 프로필 이미지
김아무개_본계정

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

API Gateway 란?

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

작성

·

77

·

수정됨

0

인사말

안녕하세요. 질 높은 강의를 제공해주셔서 너무 감사하다는 말씀드립니다.

아직 강의를 모두 본 것은 아니어서, 제가 질문드리고자 하는 내용이 강의에 포함이 되어있을지 모르겠습니다만.. 궁금한 내용을 질문드립니다.

 

질문

많은 모놀리식 프로젝트에서는 Spring Web + Spring Data JPA를 의존성을 주입하고 개발을 하고 저 또한 이러한 방식의 개발을 경험해왔습니다. Spring Data JPA와 Spring Web은 동기방식으로 동작하게 되는데, MSA의 독립 모듈을 만들 때 해당 의존성들을 사용하는 것이 바람직한지 모르겠습니다.

강의의 내용처럼 하나의 서비스는 독립적으로 구성된 수십개에서 수백개의 독립된 애플리케이션으로 동작을 하게 될 것인데요. 상황에 따라 다르기는 하겠지만 Spring Web과 Spring Data JPA를 사용하는 독립된 애플리케이션이 있게 된다면 이쪽에서 병목이 일어나 엄청난 성능 이슈가 발생할 것으로 생각이듭니다.

이와 같은 고민을 갖고 GPT한테 물어보니 WebFlux와 R2DBC를 사용하여 모두 비동기적으로 만드는 것이 권장되는 사항이라고 하는데 이 답변이 맞을까요?

MSA를 구성한다고 한들, 모놀리식보다 성능상 좋지가 않으면 MSA로 구축할 필요성이 없을 것인데, 제가 우려하는 성능상의 심각한 문제 / 병목현상을 예방하기 위한 설계를 어떻게 해야하는지 너무 궁금합니다.

 추가적으로는 Speing web이나 Spring Data Jpa가 MSA에거 어느 점에 필요하게 됭까요? 성능 관점에서 도무지 필요성을 느끼지 못하고있습니다.

질문이 너무 두서가 없는데... 질문 내용이 강사님께 잘 전달되었길 바랍니다..!

답변 2

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

모놀리스 방식과 MSA 방식의 선택은 둘 중 어떤 것이 더 좋다 나쁘다라고 구분짓기 어렵다고 생각됩니다. 실제로도 모놀리스 방식은 여전히 좋은 개발방식 중 하나이고, 빠르게 실행할 수 있고, 말씀하신 내용처럼 어떤 면에서는 MSA 대비해서 성능도 좋습니다. 서비스를 위한 애플리케이션을 개발할 때, 전체 프로젝트의 구성을 MSA 또는 모놀리스 방식으로 선택한다기 보다는, 크게는 도메인 -> 서브 도메인 -> 모듈 -> 기능 등으로 어떤 DB, 데이터처리 방식, 일관성 방식, 기술 등을 선택해야합니다. 간단하게 예를 들어, 데이터의 일관성이 강력하게 요구되는지, 최종적으로 일관성을 맞추면 되는지에 따라서, 데이터 처리 방식과 통신 방식이 선택될 수 있습니다.

말씀하신 내용처럼 MSA는 다수의 작은 모듈(서비스)로 분리되어 개발, 운영되기 때문에, 어떠한 부분에서는 통신 비용이 더 발생하고, 병목현상이 생기게 됩니다. 따라서, 내부적인 통신에서는 REST 방식 보다는 gRPC를 선택하거나, 더 나아가서, 성능이 중요한 부분이라면 서비스의 경계를 다시 나누거나, 모놀리스의 모듈로 구분하여 개발하는 것이 필요할 수도 있습니다.

개발방법과 프레임워크, DB, 기술의 선택이 하나로 결정되지 않는다는 전제로, 서비스의 상황과 데이터 처리의 특성에 따라 선택해야 합니다. 그렇다고, 여러 개발방법과 기술이 섞여있는 형태로 유지할 수도 없다고 생각됩니다.
질문하신 내용에 대한 답변이 되었는지 모르겠네요. 추가 질문사항 있으시면 언제든지 글 남겨 주세요.

감사합니다.

강사님의 내공과 경험이 느껴지는 답변이었습니다. 자세하게 말씀해주셔서 감사합니다. 현재는 잘 이해가 되지 않는 부분이 있지만, 충분히 답변이 되었고 또 다른 질문사항이 생기면 요청드리겠습니다. 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김아무개_본계정님, Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 수강 중에 깊이 있는 질문을 남겨주셨군요.

우선, 모놀리식 아키텍처에서는 Spring Web과 Spring Data JPA를 활용한 동기 프로세싱이 일반적이지만, MSA에서는 이러한 접근이 항상 적절하지 않을 수 있습니다. 이유는 MSA는 각 서비스가 독립적으로 동작해야 하고, 확장 가능해야 하며, 각각의 서비스가 서로 다른 기술 스택과 동작 방식을 가져갈 수 있다는 점입니다.

Spring Web과 Spring Data JPA의 MSA 적용 여부

  1. 동기 vs 비동기:

    • 동기 방식(Spring Web, Spring Data JPA)의 사용은 여전히 적절한 경우가 많습니다. 특히, 강한 데이터 일관성이 필요한 부분에서는 JPA를 사용하는 것이 여전히 가치가 있습니다.
    • 그러나 많은 트래픽을 처리해야 하는 경우나, 대기 시간(latency)이 중요한 경우에는 비동기 처리가 필요할 수 있습니다. 그런 상황에서 Spring WebFlux와 R2DBC와 같은 비동기 기술 스택이 좋은 대안이 될 수 있습니다.
  2. MSA의 독립성:

    • Spring Web과 JPA를 사용하는 서비스가 많은 동기 호출로 인해 병목이 발생할 수 있습니다. 이를 해결하기 위해 비동기 아키텍처를 도입하거나 적절한 캐싱, 부하 분산 전략을 고려할 수 있습니다.

병목 예방을 위한 설계

  • 비동기 메시징 시스템 사용: Kafka와 같은 메시징 시스템을 도입하여 서비스 간 비동기 처리를 강화할 수 있습니다.
  • 요구사항에 맞는 기술 스택 선택: 성능 요구사항에 따라 비동기 기술 선택 여부를 결정합니다.
  • 캐싱 전략 적용: 데이터베이스 호출을 줄이고, 응답 시간을 개선하기 위해 캐싱을 활용할 수 있습니다.

관련된 질문이 몇 가지 있어 함께 참고하시면 도움될 것 같습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김아무개_본계정님의 프로필 이미지
김아무개_본계정

작성한 질문수

질문하기