Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BLOOM-107] 기상청 API 배치 시스템 구현 #132

Merged
merged 11 commits into from
Sep 26, 2024

Conversation

stophwan
Copy link
Member

Close #107

How

  • 기존 날씨 케어 메시지 API 호출은 기상청 API의 느린 응답속도로 인해 평균 1초, 최악의 경우 3~5초까지 늦어지는 경우가 발생했습니다.
    스크린샷 2024-09-25 오전 3 00 28
  • 한번 API가 호출하면 그 이후에 메시지를 캐시에 저장해, 이후부터 캐시를 조회하는 방식을 생각했으나 홈화면에 있는 특성상 최악의 경우 3~5초가 걸린다면 사용자에게 부정적인 경험을 제공할 것이라고 생각해 배치로 미리 캐시에 넣어놓는 방식을 생각하였습니다.
    스크린샷 2024-09-25 오전 3 00 57
  • 배치에서 기상청 API 호출을 동기적으로 호출시, Network I/O로 인해 배치 시간이 1시간 이상 소요되었습니다. 기존 ItemProcessor는 하나의 Item을 단건으로 처리하도록 디자인 되어있어 지역 -> 기상청 API 호출 -> 메시지 변환 을 단건으로 처리하는 것이 문제였습니다.
  • ItemWriter로 해당 코드를 옮기고, coroutines를 사용해 비동기로 API를 호출 및 Dispatcher를 통해 여러개의 스레드가 병렬적으로 처리하게 변경함으로서 HTTP로 인한 대기 시간을 최소화했습니다. Job 이후에 있는데 소요시간으로 2m 17s가 걸린것을 확인할 수 있습니다.
    스크린샷 2024-09-25 오전 1 53 22
  • 기상청 API를 통해 지역별 메시지 리스트를 만들고, Redis Pipeline을 열어 한번에 insert가 되게 진행했습니다. 위의 사진 주어진 로그 두번째 줄인 482ms가 기존 실행시간이라면
    Pipeline적용 이후에는 250ms 정도로 감소하였습니다. 200ms 차이지만 명령어가 싱글스레드로 처리되는 Redis 특성상 유의미한 성능 개선이 이루어졌다고 생각합니다.
    스크린샷 2024-09-25 오전 3 07 14

Result

  • Spring Batch와 coroutines에 대한 이해도를 높일 수 있었습니다.
  • 날씨 케어메시지 API 응답속도를 개선하고, 배치 성능을 최적화 할 수 있었습니다.

@stophwan stophwan added 🌱 feat Suggest a new feature or enhancement 💊 refactor Suggest code improvements or refactoring labels Sep 25, 2024
@stophwan stophwan self-assigned this Sep 25, 2024
Copy link
Collaborator

@Dompoo Dompoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

성능이 엄청 좋아졌네요..!! 고생하셨습니다!

@stophwan stophwan merged commit f692c44 into main Sep 26, 2024
1 check passed
@stophwan stophwan deleted the refactor/batch-weather branch September 26, 2024 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌱 feat Suggest a new feature or enhancement 💊 refactor Suggest code improvements or refactoring
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 기상청 API 배치 처리 구현
2 participants