티스토리 뷰
1. JPA 는 무엇인가?!
JPA는 자바 ORM 기술에 대한 API 표준 명세를 의미한다.
- ORM : 객체와 관계형 데이터베이스를 매핑하는 방법
ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 해결 (자바의 객체와 RDB의 엔티티에서 발생하는 차이)
- API : 웹 애플리케이션에서 다른 서비스에 요청을 보내고, 응답을 받기 위해 정의된 명세
결국은 JPA는 객체와 관계형 데이터베이스를 매핑하는 표준 기술을 이용해서 데이터베이스에 요청을 보내고 응답을 받기 위한 방법을 의미
(1) 생산성 : CRUD용 SQL을 개발자가 직접 작성하지 않아도 추상화된 메소드를 통해 확인 가능
(2) 패러다임 불일치 해결 : 객체가 가지고 있는 특성을 엔티티와 호환을 맞추는 것에서 미묘한 차이가 발생했었는데 이를 해결 가능
(3) 성능 : 1차 캐시를 이용해서 한번 접근했던 데이터에 대해 데이터베이스에 추가적으로 접근하는 것이 아닌, 1차 캐시에서 데이터 확인 가능
(4) 표준 : ORM 표준을 준수했기 때문에 다른 구현 기술로 쉽게 변경 가능
2. 영속성 컨텍스트?!
영속성 컨텍스트는 엔티티를 영구 저장하는 환경 (영속성 컨텍스트가 존재하는 한(엔티티 매니저가 존재하는 한), 1차 캐시를 통해 해당 엔티티를 계속해서 보관하여, 사용할 수 있음)
- 영속성 컨텍스트의 특성 : https://lkhlkh23.tistory.com/79
3. 트랜잭션, 트랜잭션을 사용하는 이유
트랜잭션은 작업의 완전성을 보장하는 것으로 논리적인 작업의 단위를 의미한다.
- 원자성 : 트랜잭션 작업 중에 문제가 발생했을 때, 어떤 작업 내역도 데이터베이스에 반영하지 않아야 하며, 트랜잭션이 성공적으로 끝냈을 때만 데이터베이스에 반영하는 성질
- 일광성 : 트랜잭션 전, 후에도 동일하게 무결성 조건을 만족해야 하는 성질 (무결성 조건 : a는 양수이다)
- 고립성 : 각 트랜잭션은 독립적으로 수행해야 하는 성질
- 지속성 : 트랜잭션이 정상적으로 종료된 다음에는 데이터베이스에 데이터를 저장함으로써 영구적으로 데이터를 저장해야 하는 성질
4. 트랜잭션을 사용할 때 주의할 점
(1) 트랜잭션의 범위는 최소화
트랜잭션의 범위를 최소화 하는 것이 중요하다. 데이터베이스의 커넥션의 수는 한정적이기 때문에 커넥션을 보유하는 시간을 최소화해야할 필요가 있다.
그렇지 않으면, 다른 서비스들은 해당 커넥션 사용을 위해 대기해야할 상황 발생 가능하다.
(2) 교착상태 회피
두개 이상의 트랜잭션이 해당 자원에 대한 잠금을 보유한 채, 서로의 자원에 대해 접근을 했을 때 교착상태 발생 가능하다.
- 트랜잭션은 자주 커밋한다. (잠금을 오래 보관하지 않기 위해)
-
5. @Transactional
JPA 에서 트랜잭션을 지원할 수 있는 어노테이션.
Runtime Exception(Unchecked Exception, 예 : NullPointerException) 경우에만 롤백을 수행
- Checked Exception은 예외발생 가능성을 알고 있고 해당 예외에 대한 처리가 있고, UnChecked Exception은 예외 발생 가능성을 알지 못하고 예외 처리가 존재하지
않을 수 있기 때문에 기본 전략으로서 Runtime Exception은 롤백
6. Join 전략
@ManyToOne, @OneToOne (즉시로딩)
- (optional = false) : 내부 조인
- (optional = true) : 외부조인
@ManyToOne, @ManyToMany (지연로딩)
- (optional = false) : 외부 조인
- (optional = true) : 외부조인
7. 즉시 로딩과 지연 로딩
엔티티를 조회할 때, JOIN으로 연관된 엔티티를 Join 쿼리를 통해 함께 가져오는 방식은 즉시로딩, 연관 엔티티가 필요한 시점에 가져오는 방식은 지연로딩이라고 한다.
JPA 기본 패치 전략으로, 연관된 엔티티가 하나일 경우에는 (OneToOne, ManyToOne) 즉시로딩, 컬렉션일 경우에는 (OneToMany, ManyToMany) 지연로딩이다.
엔티티 하나를 조인으로 가져오는 것이, 데이터베이스 한번더 접근하는 것보다 성능상의 이점이 좋기 때문에 즉시로딩이다.
'면접 질문' 카테고리의 다른 글
[면접준비] 함수형 프로그래밍 (0) | 2019.03.10 |
---|---|
[면접준비] HTTP, HTTPS, SSL (0) | 2019.03.09 |
[면접준비] IOC / DI (0) | 2019.03.08 |
[면접준비] 스프링 정의 (0) | 2019.03.08 |
[면접 준비] AOP (0) | 2019.03.08 |