Skip to content

Conversation

@jher235
Copy link
Member

@jher235 jher235 commented Dec 25, 2025

🔊 Summaries

  • Song & ArtistSong 데이터 정합성을 위한 배치 작업 구현

  • 기본적인 흐름은

    1. Artist Id 들을 reader 에서 읽어온 후
    2. writer 에서 아래 작업들을 수행
      a. rate limiter 로 Artist 별 TopSong 데이터를 전부 가져옴. (단순 ArtistSong 을 가져오는 API 는 limit 이 20으로 너무 적기 때문에 TopSong 조회로 모든 노래 목록을 조회함)
      b. DB에서 해당 Artist의 모든 Song을 가져와서 a 에서 새로 가져온 Song 정보들과 비교.
      c. 새롭게 추가된 노래들과 업데이트된 노래들을 upsert. 이때 artist_song 생성도 별도로 쿼리를 사용하여 처리. (이미 있는 경우 무시하도록 해뒀지만, uk_artist_song 과 같은 유니크 인덱스를 걸어두기)
  • MusicAPIHandler 추가. 기존에 그냥 feignClient를 사용해도 괜찮겠다는 생각이었는데 (대부분 단순 호출일 예정이어서..) 조회 시 로직이 필요한 부분들이 생겨서 추가했습니다.

  • MusicSyncFacade 추가. 이것도 Service만 있어도 충분할거라 생각했는데 병렬 처리를 할 때나 트랜잭션을 관리할 때 레이어가 하나 더 존재하면 편할 것 같아서 추가했습니다.

✨ Notification

  • 로컬에서 테스트해본 결과.. 시간은 이 정도 걸리는 것 같아요. 물론 실 서버와 컴퓨팅 리소스 차이가 많이 나므로 참고용입니다..
    • Data: artist 146개, song 15263 개
    • Total Time: 28165ms
  • 이거 작성하다가 생각난건데 AppleMusicAPI에서 Song을 가져오는 부분과 DB 에서 Song을 가져오는 부분을 병렬로 처리하는 것도 가능하긴 하겠네요. 물론 어짜피 저희 DB CPU가 그렇게 좋진 않아서 당장 큰 차이는 없을 것 같으므로 일단 패스하겠습니다... ㅎㅎ
  • Song의 TrackName하고 ArtistName의 길이를 우선 1000으로 뒀습니다. 제 로컬 DB에 가수가 그렇게 많진 않음에도 가장 길이가 긴게 각각 606, 659 더라구요.. 어짜피 255는 넘어버린거 varchar니까 좀 더 넉넉하게 둘 생각도 있습니다..

- 병렬 처리를 이곳에서 위임
- facade를 병렬로 호출하는 책임만 가짐
- StepInfo 로 name을 사용하도록 로직 변경
- StepInfo 에서 Job을 알고 있으므로 레코드에선 삭제
- ARTIST_SYNC_JOB 네이밍을 ARTIST_SONG_SYNC_JOB 으로 변경
- DTO를 사용하는 경우 패키지 경로를 작성해야하므로 변경에 취약하다고 판단하여 변경. 패키지 경로가 잘못되어도 컴파일 오류로 못잡으므로..
- 현재 파라미터는 SongProjection 이지만 다른 파라미터 필요 시 오버로딩으로 작성할 예정
@jher235 jher235 self-assigned this Dec 25, 2025
@github-actions github-actions bot requested a review from ch1hyun December 25, 2025 16:49
@jher235 jher235 marked this pull request as draft December 25, 2025 16:50
@jher235 jher235 marked this pull request as ready for review December 25, 2025 16:56
@ch1hyun
Copy link
Member

ch1hyun commented Dec 26, 2025

605...? 다 같이 합창을 했나...

- reader, writer, query 라는 하위 패키지 생성
- job 내부 패키지 명칭 구체화
- 기존 JDBC Template을 사용하던 코드를 NamedParameterJdbcTemplate 를 사용하도록 변경. 타입을 더 명확히 지정할 수 있음
- SqlParameterSource 를 도입해서 필드 매핑을 자동화
@jher235 jher235 merged commit 29e5bc8 into develop Dec 28, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants