본문 바로가기
개발자 일지/JPA

[강의 후기] 인프런 김영한님 스프랑부트와 JPA 활용1 강의 후기

by 네빌링 2024. 10. 8.
반응형

인프런 스프링 강의로 유명한 김영한님의 실전! 스프링 부트와 JPA 활용1편을 공부하고 간단히 후기를 남겨보려고 합니다.

 

인프런-김영한님-JPA활용1-강의-후기-썸네일

 

[목차]

  1. 강의 느낀점
  2. 강의에서 기억할 것
  3. 앞으로 공부 방향

 

[관련 포스팅]

Entity와 EntityManager 개념, 관계

Swagger와 Spring Data JPA를 활용한 예제 학습

Java ORM 표준 JPA 프로그래밍 정리1(김영한 강사님)

Java ORM 표준 JPA 프로그래밍 정리2(김영한 강사님)


 

1. 강의 느낀점

 

오랜만에 인프런에서 JPA 공부를 해봤습니다!

 

김영한님의 JPA 강의 예전에 한 번 들었는데 그당시에 어설프게 이해하고 몇 년 지나니 다 까먹었네요.

오랜만에 인프런 강의를 들으니 재밌습니다. 특히 언젠간 다시 시작해봐야지..라고 했던 JPA로 시작하니 더 재밌게 봤네요.

 

제가 들은 강의는 실전! 스프링 부트와 JPA 활용1편입니다.

그래도 시간이 좀 지난 강의라 스프링부트 버전이나 일부 버전 미스로 돌아가지 않는 부분들이 있습니다.

그러나 예제파일에 버전별 구동방법이나 오류 해결방법들을 업데이트 해두셔서 진행에 큰 무리는 없었네요.

 

JPA 시리즈 중 첫번째 강의는 아니기 때문에 JPA에 대한 아주 기본적인 내용은 생략하는 강의입니다.

그래도 중간중간 어려운 개념을 다시 리마인드 해주셔서 꽤 잘 따라갈 수 있었습니다.

 

그리고 김영한님은 오히려 첫계단부터 하나하나 밟아가는 방식(학자형 스타일)보다 실전(일단 만들어보거나..)부터 해보고 이론으로 돌아와서 필요한 것을 공부하는 야생항 스타일이 더 빠르게 실력 향상이 된다고 말씀 주셨습니다.

 

저는 기초강의를 몇년 전에 듣긴했으나 까먹은 상태였는데 다시 거꾸로 돌아가서 첫번째 JPA 기초 강의를 들으면 더 이해가 잘 될 것 같긴하네요.

 

강의 구성도 잘 되어있고 라이브 코딩과 이론의 밸런스도 잘 맞아서 지루하지 않게 잘 들을 수 있었습니다.

 

2. 강의에서 기억할 것

 

예전에 제가 강의를 듣고 공부했던 방식은 강의를 한 챕터 들으면 해당 내용을 요약하고 생각을 조금 담는 방식으로 진행했는데요.

해당 방식은 당시에는 기억이 잘 나지만 시간이 지나면 생각보다 휘발성이 강하더라구요.

 

그래서 시간투자대비 효율성이 떨어진다고 느껴서 이번에는 본질에 충실해봤습니다.

강의만 듣고 정말 기억해야할 것들은 주석등으로만 메모해두고 간단히 강의를 다 들은 후 일부만 리마인드 하는 방식으로 해보려고 합니다.

 

아래에 들은 내용들 중 기억해야할 내용, 생각해볼 내용들을 써봤습니다.

 

  • 도메인 모델 > 테이블 설계 > 엔티티 설계 > 코딩은 기본 흐름이다. 
  • 하나의 트랜잭션 안에서 엔티티의 ID가 같으면 같은 엔티티다. @Transactional을 설정해야 JPA를 제대로 활용할 수 있다.
  • 엔티티 설계시 연관관계 주인을 정하는 것이 중요하며 보통 다대일 관계에서는 다(FK가 있는 곳)가 연관관계의 주인이 됨.
  • @ManyToMany는 실무에서 쓰기 어려움. 매핑테이블 컬럼 값 추가 등을 못함
  • CascadeType.ALL 옵션을 설정하면 부모엔티티의 변경 발생시 자식도 변경이 전이됨. 부모엔티티를 persist()하면 자식들도 persist()된다.
  • 검색시 사용하는 JPQL은 동적쿼리 작성이 어렵다. 그래서 실무에서 거의 쓰지 않는다. 이후 이를 보완한 JPA Criteria API가 나왔으나 이것도 쓰기 어렵고 queryDSL, Spring Data JPA를 보통 많이 쓴다.
  • 화면단에 데이터를 담아 넘기거나, 데이터를 받을 때 가능하면 엔티티를 사용하지 않는다.
  • 비지니스 로직 등은 엔티티에서 객체지향적으로 관리하는 게 좋다.
  • 연간관계 편의 메서드를 작성해서 깔끔하게 구성하자.
  • 데이터 수정이 필요하면 merge보다 변경감지(dirty checking) 방식으로 하자. merge는 파라미터로 전달한 엔티티값만 반영하기 때문에 영속성 엔티티로 갈아치우는 과정에서 set하지 않는 데이터를 null로 덮어쓰는 문제가 발생할 수 있다.
  • 즉시로딩(Eager Loading)은 모든 관련된 엔티티를 한 번에 가져온다. Order 조회시 OrderItem도 같이 가져온다.
  • 지연로딩(Lazy Loading)은 연관엔티티를 조회할 시점에 가져온다. getOrderItem()을 호출해야 가져올 것이다.
  • 기본적으로 다대일관계(@ManyToOne)은 즉시로딩(Eager Loading)이 디폴트 값이다. 그러나 실무에서는 지연로딩(Lazy Loading)으로 바꾸는 것이 좋다.

 

3. 앞으로 공부 방향

 

JPA 기초강의도 빠르게 들은 후 간단하게 토이프로젝트를 만들어서 적용을 체득해야겠습니다.

실제로 사용 안 하면 휘발되기 때문에 꼭 토이프로젝트를 만들어야겠습니다.

 

그리고 JPA 활용1 이후 활용2도 있는데 이것은 프로젝트를 진행을 하면서 들어보면 좋겠네요.

 

감사합니다!

반응형