JPA 탄생 배경
SQL 중심적인 개발의 문제점
코드의 반복, SQL에 의존적인 개발
SQL 확인 전까지는 엔티티를 신뢰하기 어려움 (객체들을 서로 join을 통해 계속 묶어줘야 함, NULL값 발생 가능)
- ORM으로 그 문제를 해결하자! (MyBatis, JPA 등)
- MyBatis의 한계
- 결국 쿼리를 만드는 건 개발자
- Oracle을 쓰다가 MySQL을 쓰는 상황 등의 발생 시 쿼리 수정해야 함
JPA 장점
- SQL 중심적인 개발에서 객체 중심으로의 개발
- 생산성, 유지보수
- 필드 추가 시 SQL은 JPA가 알아서 처리
- 패러다임의 불일치 해결
- 데이터 접근 추상화와 벤더 독립성
- vendor: 여기서는 DB 제품 등을 의미 (Oracle, MySQL 등)
- 일관성 유지 (표준화)
JPA 기초
객체 매핑하기
- @Entity: JPA가 관리할 객체
- @Id: DB PK와 매핑할 필드
persistence.xml
- JPA 설정 파일
- 위치: /META-INF/persistence.xml
- javax.persistence로 시작: JPA 표준 속성
- hibernate로 시작: hibernate 전용 속성
Database dialect
- JPA는 특정 DB에 종속적이지 않은 기술
- 각각의 데이터베이스가 제공하는 SQL 문법과 함수 조금씩 다름
- dialect: SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능
JPQL: 객체 지향 쿼리
- JPA 사용하면 엔티티 객체 중심으로 개발 → 검색 시에도 테이블이 아닌 엔티티 객체 대상 검색
- 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
- 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL 필요
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
- SQL과 유사한 문법: SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원
- JPQL: 엔티티 객체 대상 쿼리 / SQL: 데이터베이스 테이블 대상 쿼리
Mapping Annotations
- @Column
- 가장 많이 사용
'TIL > BackEnd' 카테고리의 다른 글
스프링 조금 (0) | 2025.02.06 |
---|---|
JPA - Oracle 데이터베이스 생성 (0) | 2023.05.08 |
Transaction (0) | 2023.05.04 |
[Spring] 예외처리: @ExceptionHandler, SimpleMappingExceptionResolver (0) | 2023.04.27 |
@Autowired와 @Value를 통한 주입의 차이 (0) | 2023.04.26 |