티스토리 뷰
1. Spring Boot datasource 설정 검색
spring.datasource.initialization-mode= always
어플리케이션이 시작될 때 직접 데이터 초기화 하는 것. import.sql
커넥션풀보다 요청량이 많으면 클라이언트들이 대기해야 한다. 커넥션
JPA를 사용하는 이유
- 패러다임의 불일치 해결 : 객체지향과 SQL의 불일치
- 성능 : 이건 확실하지 않다.
- 데이터 접근 추상화와 벤더 독립성 : JPA를 사용하면 SQL이 각 DBMS(MySQL, Oracle)에 따라 만들어져서 독립적이다.
영속성 컨텍스트
트랜잭션
- PlatformTransactionManager가 트랜잭션을 관리해 주는 역할을 한다.
- 최초에 SELECT을 할 때는 엔티티 매니저가 SQL문을 만들어서 DB에서 객체를 가져온다.
2번째 조회할 때는 엔티티 매니저가 가지고 있는 객체가 반환된다.
- 동일 트랜잭션 내에서는 1차 캐시가 적용된다.
- 트랜잭션 내에서 같은 아이디에 해당하는 쿼리가 2번 실행되면 최초 1번만 실행되는 것이고 2번쨰에는 기존에 엔티티 매니저가 가지고 있는 객체를 반환.
- 영속성이 부여가 될 때 그 객체의 복사본이 하나 만들어진다.
- 트랜잭션이 커밋될 때, 엔티티 매니저는 복사본과 변경된 객체를 비교한다. 바뀐 것이 있다면 자동으로 Update 문을 만들어서 트랜잭션이 끝날 때 업데이트가 일어나게 된다.
일대다 다다대
- 레이지 로딩.
1+N 쿼리 문제
목록을 가져오는 쿼리 + 레이지 로딩으로 하는 쿼리 1번
레파지토리 Repository
- CRUD를 한다.
- Service는 Repository와 관계를 맺고 호출한다. Service는 트랜잭션이 있는 곳이다.
- Repository에 메서드를 생성하는데 Fetch Join하는 것을 만든다.
- Fetch Join은 레이지 로딩하는게 아니고
** 레이지 로딩과 Fetch Join을 적절히 사용해야 한다
- 테이블 내에서 편하게 가져오려면 레이지 로딩을 가져오고
- 그 select 된 리스트 내에서도 가져오려면 Fetch Join을 사용한다
실습
Category에 보드가 속해 있는 상황이다.
보통 category.getBoard() 모든 게시물을 가져오는 경우가 없다. 보통 보드를 가져올 때는 일정 개수만 가져온다.
1:N 관계에서 너무 많은 데이터를 가져올 수 없을 때는 Repository로 가져와야 한다.
1:N 관계에서 개념적으로는 일대다 관계이지만, 모든 데이터를 다 불러오지는 않는다.
데이터가 적을 때는 레이지 로딩으로 사용할 수 있지만
너무 많을 때는 Repository로 가져온다.
BoardRepository
쿼리 메서드 : 메서드 이름을 보고 자동으로 쿼리가 만들어진다.
레포지토리는 기본적으로
EntityManager는 빈으로 등록 가능하다
BoardRepositoryImpl 구현방법 3가지
1. EntityManager를 주입 받는다
JPQL 문자열을 조작해서 where 절을 넣다 뺐다 해서.
--> JPA를 공부한 사람에게 익숙하다.
2. Criteria JPQL : 동적 SQL. 좀 어렵다
3. QueryDSL : 자동으로 소스코드를 생성해서 이용하는 것
--> 다음시간에는 1번, 3번을 실습할 예쩡
도커 예습해오면 좋다.
1교시에는 DBMS, JDBC에 대해 배움
2교시 트랜잭션 - 이해할만한데 프록시, 호출 부분이 어렵
3교시 JPA. 1대1, 1대다, 다대1, 다대다 - 레이지 로딩, 페치 조인 개념이 어렵다
4교시 실습
5교시 테스트 코드 작성
'Back-end' 카테고리의 다른 글
[Spring Boot] 엔티티 맵핑과 테스트 코드 작성 (0) | 2018.10.21 |
---|---|
[Spring Boot] JPA (0) | 2018.10.20 |
[Spring Boot] 트랜잭션 (0) | 2018.10.20 |
[Spring Framework] DispatcherServlet (0) | 2018.10.19 |
[Spring Framework] HandlerInterceptorAdapter (0) | 2018.10.16 |
- Total
- Today
- Yesterday
- 월급쟁이부자들
- 항해솔직후기
- 파라메터
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 2023년
- 항해플러스후기
- Spring boot
- github
- pop_back
- 인셉션
- docker
- 월부닷컴
- Use case
- front
- 깃
- 항해플러스백엔드
- 개발자 회고
- 내년은 빡세게!!
- 깃허브
- Inception
- 폭포수
- 도커
- 부동산공부
- 열반스쿨기초반
- 재테크공부
- GIT
- resize
- 유즈케이스
- 관계대수
- push_back
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |