인프런 - JPA 활용 1 완강

jihunnit·2022년 6월 18일
0

spring-inflean

목록 보기
2/5
post-thumbnail

완강!

일단은 JPA 활용 1편을 완강했습니다.
급하게 완강하기도 했고, 처음 잡았다가 아무래도 너무 내가
JPA에 대해 모른다는 생각이 들어
기본편을 어느정도 듣다가 다시 들어봤는데
그게 확실히 도움이 된 것 같습니다.

저는 학자형 인간이었던것 같습니다.
활용에 대해서는 세세한 부분 부분의 개념들을 알려주기보단 어느정도 이미 아는 개념 바탕으로 개발의 흐름을 따라가는게
중요한 부분인 것 같아서..

따로 블로그에 글을 나눠서 쓰기보다는
한번에 좀 정리해서 소감과 내용들을 분류하는게 좋을지도..
하는 귀차니즘 및 편의주의적 생각으로 글을 남깁니다.

  • 엔티티에는 가급적 Setter를 사용하지 말자. Setter가 열려있으면 변경 포인트가 너무 많아서 유지 보수가 어렵다.

  • 모든 연관관계는 지연로딩으로 설정! -> 즉시로딩(EAGER)은 JPQL 실행시 N+1 문제가 발생할 수 있다. (LAZY)로 설정해야 한다. ManyToOne, OneToOne에 대해서 기본이 즉시로 딩이니까 직접 지연로딩을 설정하자 -> 1개 조회해야 하는데 단방쿼리가 N개 나감.

  • 컬렉션은 필드에서 초기화하자 -> null pointer 문제서 안전, hibernate가 entity를 persist를 하는 순간 hibernate의 내장 컬렉션으로 변경되어 버림.

  • 스프링부트가 테이블 이름을 정하는 방식 @Table(name = “ “)로 정해줬다면 그렇게 되겠지
    if 없다면
    1. 카멜케이스 ->언더스코어 (orderItem -> order_item)
    2. .(점) -> 언더스코어
    3. 대문자 -> 소문자

  • CASCADE -> persist를 전파함.. 연관관계 주인이 cascade 가지고 있으면 편할지도 CASCADE의 범위 -> 관리의 주체가 private order( 나 말고 얘를 딴 애가 아무도 안씀) 일 때만 쓰자!! 이거 막 쓰면 안됨 진짜!!

  • 코드를 제약하는 스타일로 짜자

  • Spring project 할 때 – 엔티티를 순수하게 유지. 엔티티는 핵심 비즈니스만
    화면을 위한 로직은 따로 짜자. Dto 라던지, form 이라던지

  • API를 만들 때는 절대 엔티티를 그냥 넘기면 안됨. 엔티티 외부 반환 금지!
    엔티티는 스펙. 스펙을 반환해?? 안돼

  • 상품 수정에 대해서 -> JPA에서는 변경감지를 써야 한다! em.merge 말고 (이유 -> merge는 모든 필드를 변경시키니까 오류 발생 확률 높음)

  • Setter를 통한 변경 하지 말고 change 등 의미있는 메소드를 이용해야 한다. 바꾸는 지점을 명확하게 설정해야만 한다. 그래야 나중에 역추적이 가능함! Method 를 잘 이용하자!

완강 소감

2편 얼른 완강하고 Spring Data JPA도 완강하고 싶다.
진짜 강의가 너무 재밌습니다.
신난다.

profile
인간은 노력하는 한 방황한다

0개의 댓글