-
Notifications
You must be signed in to change notification settings - Fork 4
[JPA study 1주차 주아정]
아정 edited this page Mar 27, 2024
·
2 revisions
Written By Ajeong Joo
Entity를 정의할 때 사용하는 @Id, @GeneratedValue가 언제 사용하는/무슨 기능을 하는 annotation인지 조사해오기
- 객체의 Primary Key
- jpa는 이 id를 통해 객체를 구분한다.
- 기본 키 생성을 DB에 위임하는 것
- 데이터베이스가 생성될 때 id 값이 자동으로 생성된다
- 테이블 생성 시 @Id와 함께 거의 필수로 사용된다고 생각하면 된다.
- 여러 속성이 존재함. 대부분 실무에서는 IDENTITY를 사용하는 편.
- 자동 생성이라 Id값이 1부터 증가하지 않을 수도 있음 (예시, 41부터 시작)
- GenerationType : IDENTITY, SEQUENCE, TABLE, AUTO
PersistenceContext 와 EntitiyManager 에 대해 공부해보고 각자 이해한 내용 정리해오기
- Spring Data Jpa 기술의 기반이 되는 것들. Spring Data Jpa를 사용하다 보면 거의 사용하지 않긴 하다. (실무에서는...)
- 영속성 관리를 위해 사용한다.
- 스프링 컨테이너에서 애플리케이션이 동작할 때 EntityManager을 만들어 빈으로 등록해둠.
- EntityManager을 빈으로 주입할 때 사용하는 애노테이션
- 여러 스레드가 동시에 접근하면
동시성 문제
가 발생해 스레드 간 Entity 매니저를 공유해서는 안 된다. 그러나 PersistenceContext를 사용하면 이러한 문제를 보완할 수 있다.
Transactional annotation 에 대해 공부해보고 각자 이해한 내용 정리해오기
- 이 개념은 데이터베이스에서 나온 개념으로, DB 개념 중 하나인 트랜잭션과 긴밀한 관계가 있다.
- 데이터베이스 트랜잭션은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다.
- 단위 : 더 이상 쪼개질 수 없는 최소의 연산 (쉽게 말해 하나의 기능이라고 생각하면 된다)
- 예시로는 상품 구매가 있다. 구매 창에 들어가 구매 버튼을 누르고 결제를 마치는 것까지를 하나의 단위라고 생각하면 된다.
- 쉽게 말하면 DB 트랜잭션 개념처럼, 하나의 기능이 끝나기 전에 무언가 실패하면 (저장이 안 됐다거나 데이터를 불러오는데 실패하면) 그 기능이 수행되기 이전으로
롤백
하는 것. 기능을 안 수행했던 것처럼 중간에 저장되었던 데이터 등이 전부 취소되는 것. - 이 애노테이션을 붙이게 되면 기능이 끝나야 저장이 되든 함.
- 강의에서는 Test에서 사용했다.
-> 테스트에
@Transactional
을 사용한다면 쉽게 롤백이 되어 테스트 코드에서 사용한 데이터를 관리하기 쉽다 (껐다 다시 켜면 데이터가 사라짐) - Transaction 개념이 없다면 결제를 마치기 전 창을 끔 -> 구매 버튼은 눌린 상태인데 롤백이 되지 않으면... 구매 안 했는데도 구매했다고 나올 수 있음.
- 그러나 실무에서는 Service 코드에서 사용하는 편.
- @Transactional(readOnly = true) 로 모든 서비스를 잠가 두고 데이터 변경이 필요할 때만 @Transactional을 붙여 놓는다. (나중에 강의에서 나오는 걸로 알고 있음)
- 통합 테스트에서는 모르겠는데 단위 테스트에서는 @Transactional을 안 쓰고 ddl-auto를 create-drop으로 해둠 (껐다 다시 켜면 데이터가 사라짐 == Transactional을 붙인 것 같은 효과를 얻을 수 있음.)
Welcome to the 2024-1-JPA-Study wiki!