inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 3기 - 백엔드 프로젝트] 3주차 발자국

김보민
0

워밍업 클럽도 벌써 3주차가 되었다.

 

강의

3주차에는 어드민 개발을 마무리 짓는 내용이었다.

 

미션

3주차는 [미션5] 삽입, 수정, 삭제 REST API 만들기가 메인이었다.

미션의 조건은 플레이리스트 삽입, 수정, 삭제로 잡았지만,

초기에 계획했던 API는 아래와 같아서 미션3에서 완성했던 음원 목록 조회쪽 제외 나머지 기능을 완성하는 것을 목표로 했다.

image

구현하면서 조금 헤맸던 포인트는 두가지 정도가 있었다. 그 포인트들에 대해 기록하면서 진행했는데 발자국에도 조금 소개해보려고 한다. (강의에서 나왔던 내용이기도 하다..😅)

 

플레이리스트 생성 시 연관관계 생기지 않는 문제

    fun createPlaylist(request: CreatePlaylistRequest): Playlist {
        val host = memberRepository.findById(request.hostId)
            .orElseThrow { IllegalArgumentException("해당 멤버가 존재하지 않습니다.") }

        val playlist = Playlist(
            member = host,
            title = request.title,
            playlistImage = request.playlistImage
        )

        return playlistRepository.save(playlist)
    }

처음에 만든 플레이리스트 생성 코드이다. Playlist를 생성할 때, TrackPlaylist 데이터를 생성해주는 로직 자체가 없다.

JPA의 연관관계 설정은 엔티티 간 관계만 정의할 뿐, 연관된 데이터를 자동으로 생성해 주진 않는다. 반드시 직접 TrackPlaylist 객체를 생성하고 저장해 줘야 한다.

    @Transactional
    fun createPlaylist(request: CreatePlaylistRequest): Playlist {
        val host = memberRepository.findById(request.hostId)
            .orElseThrow { IllegalArgumentException("해당 멤버가 존재하지 않습니다.") }

        val playlist = Playlist(
            member = host,
            title = request.title,
            playlistImage = request.playlistImage

        )
        playlistRepository.save(playlist)

        request.trackIds.forEach { trackId ->
            val track = trackRepository.findById(trackId)
                .orElseThrow { throw BadRequestCustomException("해당 음원 트랙이 존재하지 않습니다.") }

            val trackPlaylist = TrackPlaylist(
                track = track,
                playlist = playlist
            )

            playlist.addTrackPlaylist(trackPlaylist)
        }

        return playlist
    }

 

플레이리스트 상세 조회시 오류

playlist를 id기반으로 가져오려고 했는데 오류가 발생했다. JPA lazy 로딩 이슈였다.

 

🍀 마무리

미니 프로젝트도 거의 마무리가 되었다. 사실 기능 구현보다 테스트 코드 작성이 생각보다 훨씬 어렵게 느껴진다. 익숙치 않아서 그런가....뭔가 따로 테스트 코드에 대해서 학습이 필요할 것 같다. 그래도 미니 프로젝트를 통해 어떤 방식으로 구현하고 테스트를 작성해야할지 아주 조금...감이 오기 시작했다. 이제 다음주면 마지막 주차이다. 마지막 주도 잘 마무리해서 유종의 미를 거뒀으면 좋겠다. 화이팅!!!

 


답변 0