늦은 프로그래밍 이야기
230118 TIL (팀프로젝트) 본문
팀프로젝트
판매자 프로필 목록 조회
판매자 프로필 목록을 조회하는 기능을 구현해야 하는데 Profile 엔티티에는 UserRoleEnum 값을 가지고 있지 않아서 profileRepository에서 role을 사용하여 role 값이 Seller인 프로필만 가져올 수 없는 상황이 발생하였다.
방법은 세가지가 있었다.
- Profile 엔티티에 UserRoleEnum의 role 값을 필드로 생성하기
- User 와 Profile 을 연관관계를 설정하기
- UserRepository에서 role 값이 Seller인 유저만 가져온 후 UserId 리스트로 만들어 ProfileRepository에서 UserId로 프로필 리스트를 가져오기
처음에는 두가지 방법 밖에 떠오르지 않아서 연관관계를 맺어주려고 했으나 세번째 방법이 떠올라서 세번째 방법으로 진행해 보았다.
UserRepository와 ProfileRepository에 각각 role과 userId에 해당하는 데이터들을 가져오는 쿼리 메소드를 작성해주었다.
UserRepository
List<User> findAllByRole(UserRoleEnum role);
ProfileRepository
List<Profile> findAllByUserIdIn(List<String> userIdList);
UserService에서 UserRepository로부터 데이터를 받아와서 UserId만 추출하여 리스트로 가공해준 뒤 해당 리스트로 ProfileRepository로 요청을 보내고 저번에 Delete 쿼리를 작성하면서 고민해 보았던 In절 쿼리 메소드를 사용하여 해당 userId 리스트에 있는 userId에 해당하는 데이터들을 모두 받아온다.
public List<ProfileResponseDto> getAllSellerList() {
List<String> userIdList = userRepository.findAllByRole(UserRoleEnum.SELLER).stream()
.map(User::gerUserId)
.collect(Collectors.toList());
List<ProfileResponseDto> responseDtos = profileRepository.findAllByUserIdIn(userIdList).stream()
.map(profile -> new ProfileResponseDto(profile.getUserId(), profile))
.collec(Collectors.toList());
return responseDtos;
해당 기능을 구현하면서 문제는 발생하지 않았는데 한가지 의문이 들었다. 데이터베이스에 2번을 접근하는 것이 합리적인지 User와 Profile을 연관관계를 설정하거나 Profile에 role 컬럼을 추가하여 UserRepository 혹은ProfileRepository에서 role 값을 조건으로 Profile을 검색하는 것이 합리적인지에 대한 의문이 생겼다.
연관관계를 설정하지 않고 위의 방식으로 진행하였을 경우 쿼리는 두개가 날아가지만 리스트 형식의 데이터를 두번이나 접촉해서 받아오기 때문에 리소스를 꽤나 많이 사용할 것 같았다. 그래서 다른 방식의 연관관계를 맺어주는 방식을 시도해 보았는데, User에 Profile을 붙이기에는 User가 먼저 생성이 되고 Profile은 존재하지 않기 때문에 User에 붙여주는 것은 다른 방식을 사용하여야 했다.
@Embedded 어노테이션을 사용해 보았는데 역시나 User가 먼저 생성되고 Profile이 나중에 생성되기 때문에 User의 테이블에 Profile의 컬럼들이 나타나긴 하는데 null 값으로 보여지고 실제로 Profile 테이블의 데이터들은 잘 들어가 있는 것이 확인 되었다. 아직 해결하지 못했기 때문에 일단은 처음 방식대로 진행하고 조금 더 해보고 완성한 뒤에 질문을 통해서 어떤 방식이 나을지 결정해야 할 것 같다.
'내일배움캠프 > TIL, WIL' 카테고리의 다른 글
| 230120 TIL (팀프로젝트) (0) | 2023.01.22 |
|---|---|
| 230119 TIL (팀프로젝트) (0) | 2023.01.19 |
| 230117 TIL (팀프로젝트) (0) | 2023.01.18 |
| 230116 TIL (팀프로젝트) (0) | 2023.01.16 |
| 11주차 WIL (0) | 2023.01.15 |