김영한님의 실전! 스프링 부트와 JPA활용 - 웹 어플리케이션 개발 1,2 강의중 공부하면서 배운 부분을 요약했습니다.
: 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 줍니다. 주로 의존성 주입 편의성을 위하여 사용한다.
: 모든 필드에 대한 생성자를 생성합니다. 또한 의존성 주입 할 대상이 많아졌을 때 훨씬 깔끔합니다.
https://elfinlas.github.io/2018/02/18/spring-parameter/
@Valid
: 유효한 객체인지 검사함.
@NotNull : Null 불가
@Null : Null만 입력 가능
@NotEmpty : Null, 빈 문자열 불가
: 롬복 내에서 클래스안의 모든 private 필드에 대해 @Getter와 @Setter를 적용하여 세터/게터를 만들어주고 클래스내에 @ToString 과 @EqualsAndHashCode를 적용시켜 메소드를 오버라이드 해주며 @RequiredArgsConstructor를 지정해 준다.
: 클래스에 트랜잭션 기능을 적용한 프록시 객체를 생성한다.
: JPA가 Entity를 조회할 때 연관관계의 객체들을 가져오는 설정 값이다.
Eager : Entity를 모두 가져온다.
Lazy : Entity를 가져오지 않고 getter로 접근할 때 가져온다.
자세한 내용은 아래의 블로그를 참조하면 좋을 것 같다.
: 제일 중요한 부분
준영속 엔티티
:
변경 감지와 병합
: 변경감지 기능읗 사용하면
: 항상 엔티티와 API 스펙을 명확하게 분리해야함을 유념하자.
: API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 받는다
/**
* 등록 V2: 요청 값으로 Member 엔티티 대신에 별도의 DTO를 받는다.
*/
@PostMapping("/api/v2/members")
public CreateMemberResponse saveMemberV2(@RequestBody @Valid
CreateMemberRequest request) {
Member member = new Member();
member.setName(request.getName());
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
: @Controller + @ResponseBody 두개의 어노테이션을 포함한다.
: 데이터 자체를 JSON이나 XML로 바로 보내자
@JsonIgnore
프록시 초기화?
N+1의 문제 떄문에 fetch는 lazy사용한다.
fetch join