goroutine 에서의 context 종료 이슈 (23.12.22)

YoungHyo Choi·2024년 1월 11일
0

고루틴 사용시 context 종료를 잘 신경쓰자

발생 이슈

  • 내부 공통 패키지를 변경하면서 go-redis 버전이 변경됨
  • 해당 패키지를 적용한 뒤에 소켓이 발생하지 않는 이슈

이슈 발생 원인

  1. go-redis v7 -> v9 로 버전이 변경되면서 ctx 를 인자로 받게 됨.
  2. 메인 로직을 goroutine 으로 처리하고 있었는데 해당 로직의 내부에서 추가 goroutine 을 통해 소켓을 발송하고 있음
  3. 소켓 로직이 비동기로 처리되다보니 메인 로직의 goroutine 이 종료되면서 해당 context 를 종료. 이로 인해 소켓 로직이 종료

해결

  • goroutine 사용 로직을 internal 에 정의해서 사용하고 있었기 때문에 goroutine 누수는 발생하지 않을 것이라고 판단, context.Background() 로 새로운 컨텍스트를 통해 소켓 발송
profile
golang과 elasticsearch를 좋아하는 3년차 백엔드 엔지니어입니다.

0개의 댓글