1. JUnit5 테스트 에러


이걸 보지않고, JUnit5으로 테스트하다가 1시간동안 테스트 오류 잡아내느라 힘들었다는...
Tip. Build.gradle에 라이브러리 추가하자.
(vscode의 live-server 같은?)

2. JPA와 DB 설정, 동작확인

1) spring.jpa.hibernate.ddl-auto: create
- 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성한다.
2) show_sql: true
- System.out에 하이버네이트 실행 SQL을 남긴다.
3) org.hibernate.SQL
- logger를 통해 하이버네이트 실행 SQL을 남긴다.
4) org.hibernate.orm.jdbc.bind: trace
- SQL 실행 파라미터를 로그로 남긴다. (쿼리 파라미터를 DB에 접속해 확인하지 않고, 로그로 보고 싶을 때)
- 외부 라이브러리 사용
→ https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
cf. 개발 단계에서는 편하게 사용해도 된다. 하지만 운영 단계에서는 시스템 자원을 사용하므로(병목), 꼭 성능테스트를 하고 사용하자
+. lombok 사용 시 dependency에 아래 코드 추가

+. @PersistenceContext

: 스프링이 만들어둔 EntityManager를 주입시켜 준다.
*사용해야 하는 이유
https://batory.tistory.com/497
1) EntityManager를 사용할 때 주의해야 할 점은 여러 쓰레드가 동시에 접근하면 동시성 문제가 발생하여 쓰레드 간에는 EntityManager를 공유해서는 안된다.
- 일반적으로 스프링은 싱글톤 기반으로 동작하기에 빈은 모든 쓰레드가 공유한다.
- 그러나 @PersistenceContext으로 EntityManager를 주입받아도 동시성 문제가 발생하지 않는다.
2) 동시성 문제가 발생하지 않는 이유는
- 스프링 컨테이너가 초기화되면서 @PersistenceContext으로 주입받은 EntityManager를 Proxy로 감싼다.
- 그리고 EntityManager 호출 시마다 Proxy를 통해 EntityManager를 생성하여 Thread-Safe를 보장한다.
'Spring > JPA 1' 카테고리의 다른 글
6. 주문 도메인 개발 (0) | 2023.11.07 |
---|---|
5. 상품 도메인 개발 (0) | 2023.11.06 |
4. 회원 도메인 개발 (0) | 2023.11.06 |
3. 애플리케이션 구현 준비 (0) | 2023.11.06 |
2. 도메인 분석 설계 (0) | 2023.08.16 |