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

김영빈님의 프로필 이미지
김영빈

작성한 질문수

코틀린 코루틴 완전 정복

spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.

작성

·

6

0

안녕하세요 강사님, 강의 잘 들었습니다

개인적으로 코루틴에 관해서 정말 많이 배웠습니다. 모든 걸 다 소화하지는 못했지만, 필요할 때마다 돌아와서 정독하면 충분히 필요한 부분을 얻어갈 수 있다는 생각이 드네요. 좋은 강의 감사드립니다.


몇가지 궁금한 부분이 있어 질문드립니다.

  1. 사내에서 사용하는 기술스택이 spring web mvc + JPA + feignClient인데 혹시 이와 유사한 환경에서 코루틴을 적용해보신 경험이 있으실까요?

    특히 제가 기대했던 부분은 IO작업에 관해 요청을 보내고 스레드를 점유하지 않음으로써 리소스를 효율적으로 사용하는 것(즉 처리량을 증가시키는 것)을 기대했었는데 아무래도 JPA나 feignClient나 응답이 올때까지 대기하는 구조로 되어 있더라구요ㅠㅠ.. 드라마틱한 성과를 기대하기는 조금 힘들어보이긴하네요 혹시 관련해서 유사한 경험이 있으신지 싶어서 의견을 묻고자 여쭤봅니다.

  1. 코루틴을 사용중인 환경에서 rps가 급증하면 어떤식으로 흘러갈지 궁금합니다. 스레드가 고갈될 것 같은데, 자연스럽게 dispatcherIO등의 스레드가 새로 생성되나요?
    - 그렇다고 하면 메모리가 고갈될 것 같은데, 코루틴을 사용할때는 결과적으로 메모리 기준으로 스케일아웃을 걸어야할지? 등이 궁금하네요.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 김영빈님.

여러 부분에 걸쳐 좋은 질문 주셔서 감사합니다. 특히 Spring Web MVC 환경에서의 코루틴 활용에 대한 관심과 고민이 느껴집니다. 아래 질문에 대해 차례로 답변 드리겠습니다.

1. Spring Web MVC + JPA + FeignClient 환경에서의 코루틴 적용

Spring Web MVC 환경에서 코루틴을 적용하는 것은 현재 전통적인 블록킹 방식의 스프링 프레임워크와는 자연스럽지 않을 수 있습니다. Spring WebFlux와 같은 리액티브 프로그래밍을 지향하는 프레임워크에서는 코루틴 사용이 보다 일반적입니다. JPA나 FeignClient는 기본적으로 블록킹 방식으로 설계되어 있어, 코루틴의 비동기 작업의 이점을 끌어내기가 어렵습니다.

  • JPA 문제: JPA는 기본적으로 블록킹 IO 성격을 가지고 있습니다. Hibernate Reactive나 Spring Data R2DBC 같은 리액티브 데이터 애플리케이션을 사용하는 것이 코루틴 사용에 더 어울립니다.
  • Feign Client 문제: FeignClient 또한 API 호출이 응답을 대기하는 블록킹 방식이라, 이를 비동기로 사용하기 위해서는 리액티브 확장을 사용하거나 CompletableFuture와 같은 비동기 콜을 사용할 수 있습니다.

저는 이와 같은 이유로 유사한 기술 스택에서는 특정 구성 요소를 리액티브 방식으로 교체하거나 적절한 라이브러리를 사용해야 코루틴의 이점을 살릴 수 있다고 생각합니다.

2. RPS 급증 시의 코루틴 동작

코루틴은 비동기 작업을 효율적으로 처리하지만, RPS가 급증하면 결국 스레드에 부담이 가며 자원이 고갈될 수 있습니다. 특히 Dispatcher.IO와 같은 스레드는 자동으로 더 많은 스레드를 사용할 수 있게 확장될 수 있지만, 이것이 무작정 좋지는 않습니다.

  • 메모리 관리: 동시에 많은 작업이 발생하면 메모리가 고갈될 수 있습니다. 이러한 문제를 방지하기 위해 서비스는 코루틴과 같은 비동기 처리뿐만 아니라, 적절한 수준의 throttling, circuit breaker, rate limiting 등을 설정하여 자원 소모를 제어하는 것이 중요합니다.
  • 스케일링 전략: 비동기 연산이 많아질 때 메모리 기반의 스케일 아웃을 고려할 수 있지만, 결국 중요한 건 전체적인 아키텍처의 효율성입니다. 따라서 JVM 튜닝, 적절한 인스턴스 증가 등 다각도로 접근해야 합니다.

더 자세한 정보가 필요하시다면 아래 링크들도 참고해 보시길 바랍니다:

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

김영빈님의 프로필 이미지
김영빈

작성한 질문수

질문하기