• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

코루틴과 스레드로컬 동시 사용은 실무에서 지양되나요?

23.10.03 15:46 작성 23.10.03 16:03 수정 조회수 390

1

공식문서에서 asContextElement 메소드 등을 통해 서로 다른 스레드에 할당되는 코루틴들이 동일한 스레드 로컬을 바라볼 수 있는 기능이 제공된다는 것은 확인했습니다

 

그런데 웹상에서나 사내 코드상에서나 사용되는 케이스가 별로 없네요.. 혹시 강사님은 많이 사용하시나요? 🙋🏿‍♂️

(전 코루틴 컨텍스트를 통해 부모 자식간에 데이터를 공유할줄 알았는데 아닌가보네요..)

답변 1

답변을 작성해보세요.

1

안녕하세요, 목동 개발자님! 정말 좋은 질문 감사드립니다! 😊

결론부터 빠르게 말씀드려보면, 저 역시도 코루틴을 사용하면서 하나의 코루틴에서 스레드가 변경되더라도 특정 변수를 계속해서 유지해 나가도록 하는 기능(= 스레드의 ThreadLocal)을 직접적으로 제어해본적은 없습니다!!

사실 ThreadLocal 역시 프레임워크나 라이브러리를 만들 때는 사용하지만, 프레임워크를 사용하는 입장에서는 직접적으로 잘 쓰지 않는 것과 같은 느낌인 것 같아요!

 

Non-blocking 서버 프레임워크인 webflux에서 context를 유지하기 위해 내부적으로 말씀해주신 방법을 쓰지 않을까 추측하는 정도입니다! MVC에서 Thread 기반으로 유지되던 정보를 webflux에서는 context 기반으로 바꿨던 것처럼요!

 

추가로 부모 자식 간에 데이터를 전달할 때는 단순히 부모 코루틴에서 갖고 있는 변수를 자식 코루틴에 넘기면서 실행할 수 있다보니, coroutine context를 통해 직접적으로는 잘 넘기지 않는 것 같아요!

launch {
  val num = 3 // 부모 코루틴의 변수
  launch {
    num + 5 // 부모 코루틴의 변수를 바로 활용한다!
 }
}

 

답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙇🙇