[JPA] Java Persistence API 를 사용하는 이유
2024. 3. 21. 15:58ㆍWeb/JAVA
1. JPA
- 자바 진영에서 ORM(Object - Relation Mapping) 기술 표준으로 사용되는 인터페이스 모음
- 구현된 클래스와 맵핑 해주기 위해서 사용되는 프레임워크
- JPA를 구현한 대표적인 오픈소스로는 Hibernate 가 있다.
- ORM(Object - Relation Mapping)
- 객체와 관계형 데이터베이스의 데이터를 자동으로 Mapping( 연결 ) 해주는 것을 의미한다.
- 객체지향 프로그래밍 - 클래스 사용 / 관계형 데이터베이스 - 테이블 사용
- 객체모델과 관계형 모델간의 존재하는 불일치를 ORM을 통해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성
2. JPA 사용이유
- 기존의 개발 방식(Mybatis)은 SQL 중심적인 개발이었지만, JPA를 사용하면서 객체 중심으로 개발이 가능하다.
- 생산성 (CRUD)
- JPA를 사용하면 기본적으로 생산성이 증가한다.
- JDBC의 경우 SQL 쿼리문을 직접 작성하여 데이터베이스에 접근할 수 있지만 JPA는 쿼리문을 별도록 작성할 필요가없다.
- 저장 : persist()
- 조회 : find()
- 수정 : setName() or this.name = name
- 삭제 : remove()
- SQL을 작성하고 JDBC API를 사용하는 반복적인 작업을 대신 처리해준다.
- 유지보수가 쉽다.
- 기존에는 엔티티 클래스의 필드가 변경되면 모든 SQL을 수정하여만 했다.
- JPA의 경우 필드만 추가하면 SQL은 JPA가 처리한다.
- 엔티디(Entity)라는 개념을 통해 데이터베이스 스키마와 애플리케이션 객체 모델을 연결
- 성능 최적화 기회를 제공한다.
- 같은 트랜잭션 안에서 같은 엔티티를 반환하기 때문에 데이터베이스와의 통신 횟수를 줄일 수 있다.
- 또한, 트랜잭션을 commit하기 전까지 메모리에 쌓고 한번에 SQL을 전송한다.
- 데이터 접근 추상화와 벤더 독립성
- JPA는 어플리케이션과 데이터베이스 사이에서 추상화 데이터 접근을 제공하기 때문에 RDB벤더에 종속되지 않는다.
- 만약 DB가 변경되더라도 JPA에게 알려주면 간단하게 변경이 가능하다. (유연)
- 패러다임의 불일치 문제 해결
- 객체 상속시 SQL은 JPA가 알아서 처리
- JAVA의 존재하는 상속관계를 객체의 상속 관계를 지원하지 않는 데이터베이스에서 JPA는 아래방식으로 해결
3. JPA 장단점
- 장점
- SQL문이 아닌 메서드를 통해서 DB조작이 가능하기 때문에, 개발자는 객체모델을 이용하여 비즈니스 로직을 구성하는데만 집중하여 개발을 할 수가 있다.
- 유지보수 및 리팩토링이 용이하다.
- 단점
- 프로젝트 규모가 크고 복잡하여 설계가 잘못된 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 발생할 수 있다.
- 개발자가 의도하지 않은 Query로 인해 성능이 저하
- 복잡한 Query의 경우 속도를 위해 별도의 튜닝이 필요할 수 있다.
- 학습비용이 어느정도 존재하고 시간이 오래 걸린다.
'Web > JAVA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 (0) | 2024.03.20 |
---|---|
[JAVA] GC에 대하여 (1) | 2024.03.15 |
[JAVA] 에러(Error) 와 예외 클래스(Exception) (0) | 2024.03.13 |
[JAVA] 추상클래스(Abstracat) (0) | 2024.03.07 |
[JAVA] 멀티스레드 환경에서 문제와 대책 (0) | 2024.02.26 |