[우아한명지코스] 이성은 Spring Data JPA 4, 5, 6단계 미션 제출합니다.#226
Conversation
jhan0121
left a comment
There was a problem hiding this comment.
안녕하세요 성은님! 이번 JPA 미션 리뷰어를 맡은 이주환입니다! 😄
JPA 미션 고생 많으셨어요! 잘 구현해주셨네요.👍 리뷰하다보니 코멘트 수가 조금 많아졌네요 😅 하나씩 차근차근히 확인해보시고 궁금한 점이 있으시면 사소한 것이어도 괜찮으니 언제든 질문해주세요!
추가로 JpaTest를 제외하고 나머지 테스트가 모두 실패하는데 확인해주세요!
|
|
||
| @Id | ||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| private Long id; |
There was a problem hiding this comment.
identity를 사용하셨군요! @GeneratedValue의 옵션으로 무엇이 있나요? 그 중 identity를 사용하신 이유가 궁금해요!
| private final MemberRepository memberRepository; | ||
|
|
||
| public MemberService(MemberDao memberDao) { | ||
| this.memberDao = memberDao; | ||
| public MemberService(MemberRepository memberRepository) { | ||
| this.memberRepository = memberRepository; | ||
| } |
There was a problem hiding this comment.
dao 명칭을 repository로 변경한 이유가 궁금해요! dao와 repository의 차이점은 무엇이 있나요?
| @JsonIgnore | ||
| public Long getId() { | ||
| return reservationId; | ||
| } | ||
|
|
||
| public String getStatus() { | ||
| return status; | ||
| } |
There was a problem hiding this comment.
record는 전용 getter 포맷이 있어서 선언하실 필요가 없어요! record는 어떤 보일러플레이트를 자동화해주는지 알아볼까요?
- 사용 예시
MyReservationResponse res = new MyReservationResponse(...);
res.reservationId(); // getId()와 같은 역할
res.status() // getStatus()와 같은 역할| private final MemberService memberService; | ||
| private final JwtTokenProvider jwtTokenProvider; |
| public ReservationService(ReservationRepository reservationRepository, MemberService memberService, JwtTokenProvider jwtTokenProvider, | ||
| TimeRepository timeRepository, ThemeRepository themeRepository, WaitingRepository waitingRepository) { |
There was a problem hiding this comment.
| public ReservationService(ReservationRepository reservationRepository, MemberService memberService, JwtTokenProvider jwtTokenProvider, | |
| TimeRepository timeRepository, ThemeRepository themeRepository, WaitingRepository waitingRepository) { | |
| public ReservationService( | |
| ReservationRepository reservationRepository, | |
| MemberService memberService, | |
| JwtTokenProvider jwtTokenProvider, | |
| TimeRepository timeRepository, | |
| ThemeRepository themeRepository, | |
| WaitingRepository waitingRepository | |
| ) { |
의존성이 많아지면 한 눈에 보기 쉽게 정리하는 것도 좋아요!
| @Column(name = "time_value") | ||
| private String time; |
There was a problem hiding this comment.
여기에만 @Column을 적용하신 이유가 궁금해요! 해당 column만 이름을 다르게 저장하는 이유가 있으실까요?
| @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| private Long id; | ||
|
|
||
| private Long memberId; |
There was a problem hiding this comment.
Reservation 엔티티에서는 member를 직접 참조했는데 Waiting에서는 id만 가지는 간접 참조를 구성하신 이유가 궁금해요! 각 방법의 장단점은 어떻게 될까요?
| public Long getId() { | ||
| return id; | ||
| } |
| CREATE TABLE reservation | ||
| ( | ||
| id BIGINT NOT NULL AUTO_INCREMENT, | ||
| date VARCHAR(255) NOT NULL, | ||
| name VARCHAR(255) NOT NULL, | ||
| time_id BIGINT, | ||
| theme_id BIGINT, | ||
| id BIGINT NOT NULL AUTO_INCREMENT, | ||
| date VARCHAR(255) NOT NULL, | ||
| name VARCHAR(255), | ||
| member_id BIGINT, | ||
| time_id BIGINT, | ||
| theme_id BIGINT, | ||
| PRIMARY KEY (id), | ||
| FOREIGN KEY (member_id) REFERENCES member (id), | ||
| FOREIGN KEY (time_id) REFERENCES time (id), | ||
| FOREIGN KEY (theme_id) REFERENCES theme (id) | ||
| ); |
There was a problem hiding this comment.
jpa를 사용하면 application.yml에서 자동으로 ddl을 생성해주는 기능이 있다는 사실을 알고 계신가요? ddl-auto 기능에 대해 알아보고 적용해볼까요?
| } | ||
|
|
||
| @Test | ||
| void 오단계() { |
안녕하세요 우아한명지코스 이성은입니다.
먼저 늦게 리뷰 요청을 보내드리게 되어 죄송합니다
배우고 고민해 본 부분들 작성해 보았습니다.
배운 부분 & 앞으로 공부할 부분
고민한 부분
응답 DTO를 record로 만들면서 메서드가 늘어나는 것에 대해 고민이 있었습니다. 하지만 일반 클래스에 비해 큰 단점이 없는 것 같고(getter 이름이 겹쳐 신경 쓸 부분이 생기는 정도?), 코드가 확실히 간단해져서 record를 유지하기로 했습니다.