- 오늘 한 것
- 팀 프로젝트
오늘 내가 맡은 역할 ( 예외 응답 공통 포맷, 회원 API, 인증 인가 처리 (Jwt)를 구현하였다.. 구현하면서 팀원들의 질문도 해소하는 시간을 가지다, 게시글 API 를 맡던 팀원의 질문에 답을하면서 생기던 고민이 있어 글에 정리하고자 합니다.
고민
고민이 되었던 부분은 다음과 같습니다.
게시글(Post)를 저장할 때, Post가 참조하는 Member(회원) 엔티티를 넣어주어야합니다.
ex
Post post = new Post(postRequest, member)
postRepository.save(post)
여기서 Member 엔티티가 문제입니다.
현재 구조상 인증객체가 가지고있는 회원 정보는 Dto로 구성하야 만들었는데,
이 DTO로 임시 Entity를 만들어야 하는지, findById로 엔티티를 select 해서 사용해야하는 지 고민이 되었습니다.
왜 고민이 되었냐면 dto로 member에 대한 정보를 다채우지 못한 entity를 만들어 post에 넣어 저장할 때,
참조관계가 DB에 반영이 되는지 확실치가 않았기 때문입니다.
그래서 테스트도 해보고, 다른 방법이 있는지 찾아보았습니다.
방법
1. DTO로 임시 Entity를 만들어 사용하기
MemberDTO에 있는 데이터들로 임시 Entity로 만들고 사용하는 방법은 테스트하니 작동했습니다.
연관관계 Entity가 DB에서 참조관계를 형성할 때, 해당 Entity의 id값만 있으면 가능합니다.
다만 이 방법은 한 가지 단점이 있습니다.
만약 Post를 저장하고 해당 Post의 member 정보를 가져오면 처음 임시Entity 정보 그대로라 데이터가 없습니다.
결국 실제 DB에서 저장한 Post를 가져오는 데이터와 일치하지 않는 정보를 가지고있는 상태입니다.
2. getReferenceBy 사용하기
JpaRepository에서 제공하는 getReferenceById를 사용하여 가짜 (프록시) Entity를 만들어 사용합니다.
해당 메서드는 id만 가지고있는 가짜 엔티티를 프록시를 통해 만들어 엔티티에 대해 참조를 만들 수 있게 합니다.
그리고 id를 제외한, 다른 데이터를 호출하는 시점에 select 쿼리를 날려 해당 엔티티의 정보를 조회합니다.
결론
테스트를 해보고 관련 자료도 검색해보며 알아본 결과로는
두 방법 중 하나를 택하기 보다는 케이스에 따라 사용하는 것으로 결론이 났습니다.
혹시 다른 의견이 있으시면 조언을 부탁드립니다..
'TIL' 카테고리의 다른 글
2023.11.28 TIL - OAuth란? (0) | 2023.11.28 |
---|---|
2023.11.23 TIL - JPA 복합키 사용하기 (Feat. 팔로우 API) (1) | 2023.11.23 |
2023.11.21 TIL (0) | 2023.11.21 |
2023.11.17 TIL (0) | 2023.11.17 |
2023.11.16 TIL (0) | 2023.11.17 |