부트캠프 29일차 후기
오늘부터 새로운 팀 프로젝트가 시작되었다. 아침부터 발제가 시작되어서, 오늘 CodeKata는 푼 문제가 없다.
대신 새로운 팀원분들과 함께, 앞으로의 프로젝트에 관해 논의하였다. 일단 팀장은 나로 정해졌다. 사다리타기를 해서 결정되었는데, 이전 팀에서도 비슷한 경험이 있어서, 내가 운이 안 좋나 진지하게 생각을 해봐야겠다.
그래도 바지팀장은 아니라서, 주제와 API 명세, ERD를 내 쪽에서 주도해서 구상했다. 주제는 노래 뉴스피드이다. 한 작성자가 앨범과 곡 목록을 작성하면, 그 앨범과 곡들에 대해 댓글을 달며 이야기 할 수 있는 주제를 선정하였다. 이 주제는 사실 개인 프로젝트를 구상하면서 떠올랐던 아이디어였는데, 다른 좋은 아이디어가 없는 것 같아서, 결국 꺼내게 되었다.
그리고, API 명세와 ERD를 구상하면서 역할분담을 고민하게 되었는데, 초기엔 노래와 앨범, 그리고 댓글 엔티티까지만 구상했지만, 팀원이 4명이고, 각자 엔티티를 맡으면 좋을 것 같아서, 보안에 신경쓰지 않고, Member까지 구현을 해보는 것으로 의논이 끝났다.
그리고, 대강의 와이어프레임을 만들고, 각 팀원이 브랜치를 만들고 각자 작업을 하기로 결정한다.
나는 Album 엔티티 파트를 맡게 되었다. 여기에 다른 팀원 분들의 엔티티 작업을 마치는 대로, 합치는 작업을 할 예정이다.
어느정도 시간이 흐른 뒤, Album의 CRUD 기능을 완성하였다. 사실 이전에 했던 과제의 연장선상이라 생각하면 큰 어려움없이 작업이 가능했다.
@Service
class AlbumServiceImpl(
private val albumRepository: AlbumRepository
): AlbumService {
private fun getValidateAlbum(albumId: Long): Album
{
return albumRepository.findByIdOrNull(albumId) ?: throw ModelNotFoundException("Album", albumId)
}
private fun checkTitleIsAlreadyExist(title: String)
{
if(albumRepository.existsByTitle(title))
throw UniqueAttributeAlreadyExistException("album", "title", title)
}
override fun getAlbum(albumId: Long): AlbumDTO {
return AlbumDTO.from(getValidateAlbum(albumId));
}
@Transactional
override fun createAlbum(albumCreateDTO: AlbumCreateDTO): AlbumDTO {
checkTitleIsAlreadyExist(albumCreateDTO.title)
return AlbumDTO.from(albumRepository.save(
Album(title = albumCreateDTO.title,
artist = albumCreateDTO.artist,
releasedDate = albumCreateDTO.releasedDate)
))
}
@Transactional
override fun modifyAlbum(albumId: Long, albumModifyDTO: AlbumModifyDTO): AlbumDTO {
checkTitleIsAlreadyExist(albumModifyDTO.title)
getValidateAlbum(albumId)
return AlbumDTO.from(albumRepository.save(Album(albumId, albumModifyDTO.title,
albumModifyDTO.artist, albumModifyDTO.releasedDate)))
}
@Transactional
override fun deleteAlbum(albumId: Long) {
println(getValidateAlbum(albumId).title)
return albumRepository.delete(getValidateAlbum(albumId))
}
}
하지만, 문제가 있는데 내가 Git 사용에 익숙하지 않아서 코드가 꼬일 걱정이 있다는 점이다. 일례로 내가 공통된 브랜치인 dev 브랜치에 깜빡잊고 두지 않는 코드가 있었는데, 이것을 어떻게 다른 팀원들에게 전달할 지가 고민된다. 그 코드를 안 넣으면 에러가 발생하고 짧은 코드기도 해서, 급하게 챗방에 올렸지만, 만약 비슷한 상황에서 긴 코드라면 어떻게 해결할 지 고민을 많이 해봐야할 것 같다.
일단 오늘은 여기까지이고, 내일은 Git에 대해 더 알아봐야겠다.