일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DesignPattern
- Spring multimodule
- jwttoken
- 커스텀 헤더
- jwt
- Python
- 디자인 패턴
- 1주일회고
- 프로그래머스 이중우선순위큐
- spring batch 5.0
- 코딩테스트 준비
- infcon 2024
- KPT회고
- 프로그래머스
- 전략패턴 #StrategyPattern #디자인패턴
- 디자인패턴
- 빈 조회 2개 이상
- 99클럽
- 취업리부트코스
- 빈 충돌
- 항해99
- JavaScript
- TiL
- @FeignClient
- 개발자부트캠프추천
- 단기개발자코스
- 개발자 취업
- 인프콘 2024
- 구글 OAuth login
- 파이썬
- Today
- Total
m1ndy5's coding blog
JPA 도입 시 고려해 볼 사항 본문
JPA(Java Persistence API)
자바 언어를 위한 객체-관계 매핑(ORM) 표준이다.
ORM(Object Relational Mapping)?
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것
- 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간의 불일치가 존재해 이를 개발자가 바꿔줘야하지만 JPA를 사용하면 JPA가 바꿔준다.
JPA의 장점
1. 객체-관계 매핑의 간소화
- 개발자가 객체지향 모델과 데이터베이스 스키마 간의 매핑을 해야하지만 이를 JPA가 해주기 때문에 생산성이 향상된다.
2. 쿼리 언어
- JPQL(Java Persistence Query Language)을 제공하여 객체 지향적인 쿼리를 사용할 수 있게 한다.
-> 데이터베이스 종속성을 줄이고 유지보수성을 향상시킨다.
TypedQuery<String> query = entityManager.createQuery("SELECT e.name FROM Employee e", String.class);
List<String> employeeNames = query.getResultList();
3. 트랜잭션 관리
- 트랜잭션 관리를 자동으로 처리해주어 개발자가 별도로 관리하지 않아도 된다.
JPA의 단점
1. 성능 문제
- 대량의 데이터를 다루는 경우에 주의가 필요하다.
- N+1 문제와 같은 성능 문제가 있을 수 있다.
2. 커스텀 쿼리의 복잡성
- 몇몇 복잡한 쿼리나 성능 최적화를 위해서는 Native Query 등을 사용해야 할 수 있다.
JPA가 필요한 경우
1. 객체-관계 매핑이 필요한 경우
- 객체지향 모델과 데이터베이스 간의 매핑이 필요한 경우
2. 빠른 개발과 생산성이 요구되는 경우
- 개발 생산성을 향상시키기 위해 여러 가지 편의 기능을 제공
JPA가 불필요한 경우
1. 성능이 중요한 경우
- 대용량 데이터를 다루거나 성능이 매우 중요한 경우에는 JPA를 사용하는 것보다 직접 SQL를 작성하는 것이 나을 수도 있다.
2. 필요한 최적화를 JPA로 처리하기 어려운 경우
- 특정 데이터베이스의 최적화나 특정한 쿼리 성능 튜닝이 필요한 경우에는 JPA를 사용하지 않고 네이티브 쿼리 등을 고려할 수 있다.
3. 작은 규모의 프로젝트
- 단순한 데이터 접근만 있거나 작은 규모의 프로젝트에는 JPA를 도입하는 것이 불필요할 수 있다.
결론
사실 내가 느끼기엔 JPA는 거의 필수적이라고 생각한다.
개발자가 해줘야하는 수동적인 일들을 많이 처리해주기 때문이다.
그렇지만 위에서 나와있듯 대용량 데이터를 다루거나 성능이 매우 중요한 경우에는 JPA를 사용하는 것보다 직접 쿼리를 작성해야한다.
JPA를 사용하면서 성능이 중요한 부분에는 직접 쿼리를 작성하면 된다. 가 결론이다!
'CS Study' 카테고리의 다른 글
Garbage Collector (1) | 2024.03.07 |
---|---|
Java의 메모리 영역 (0) | 2024.03.07 |
JVM, JRE, JDK & 자바 프로그램의 실행 과정 (0) | 2024.03.07 |
영속성 컨텍스트 (0) | 2024.03.06 |
Call by Value / Call by Reference in Java (1) | 2024.03.06 |