-
[TIL] 인프런 JPA 프로그래밍 기본 강의내용 요약TIL(Today I Learned) 2023. 1. 17. 23:52
*20230117의 회고
인프런 갓영한님의 <JPA 프로그래밍 기본편> 강의를 들으면서 노트에 적으며 요약한 내용을 블로그에 옮겨 적으려 한다.
- 지금 시대는 객체를 관계형 DB에 관리! -> 그러려면 수많은 쿼리를 날려야 함 => SQL 에 의존적인 개발을 피하기 힘들다.
- SQL 중심적인 개발의 문제점
- 무한 반복되고 지루한 코드들 (CRUD)
- 객체 vs 관계형 DB 의 패러다임의 불일치
- 객체는 참조할 수 있는 반면, RDB 는 외래키를 사용함 (ex) member.getTeam() vs JOIN ON M.TEAM)
- 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성을 제공 but! RDB 는 이러한 기능 없음
- 객체 -> 그래프를 탐색하듯 자유롭게 참조하면서 데이터를 가져올 수 있다.
- RDB -> 처음 쿼리를 어떻게 작성하느냐에 따라 가져올 수 있는 데이터가 한정적이다. => 엔티티 신뢰성 문제 발생 ! ( Member랑 Team이랑 Join 했는데, Member.order를 믿을 수 있는가...? 그렇다고 모든 연관된 데이터를 로딩해올 수 는 없는 노릇...)
- 따라서 진정한 의미의 계층 분할이 어렵다. (물리적으로는 분리되어 있지만, 논리적으로는 엮여 있다.)
- JDBC (Java DataBase Conectivity) : 자바에서 DB에 접속할 수 있도록 하는 자바 API
- JPA는 마치 자바의 컬렉션(List, ArrayList, Map ...)을 사용하듯이 한줄만 코드를 작성하면 됨.
- JPA는 애플리케이션과 JDBC 사이에서 동작!
- 중간에 기술이 하나 끼게 되면서 얻게되는 이점
- 한번에 SQL 쿼리를 모아서 보낼 수 있음(Buffer Writing, 쓰기 지연)
- 캐시 기능 (이미 하넌 조회된 것을 중간에 가지고 있다가 다시 반환해 줄 수 있음 -> 성능 향상)
- 중간에 기술이 하나 끼게 되면서 얻게되는 이점
- 지연 로딩 : 객체가 실제 사용될 때 로딩
- Member만 필요한데 Member 부를 때 Join 되어 있는 Team 까지 가져올 필요는 X -> 따라서 Member 만 가져오는게 지연로딩
- 즉시 로딩 : JOIN SQL 로 한번에 연관된 객체까지 미리 조회
- 조회할 때 마다 Member와 연관된 Team 까지 싹 다 조회
- 보통 지연로딩으로 사용하다가 성능적으로 개선하려면 즉시로딩으로 설정 바꿔주면 됨.
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 엔티티와 테이블의 차이 (0) 2023.01.26 [TIL] DTO에 왜 @Getter 어노테이션이 필요할까...? (0) 2023.01.18 [TIL] 에라토스테네스의 체(소수 찾기) (0) 2023.01.13 [TIL] Deque 자료구조 (0) 2023.01.11 [TIL] Spring Security 기본 개념 익히기 (0) 2023.01.09