📍개요
여러 프로젝트를 경험하면서 JPA로만 구현했었다. 구현하면서 듣는 말인 JPA와 Spring Data JPA의 차이점, 로그에는 뜨지만 무엇인지 정확히 모르는 Hibernate 등등.. 확실히 깊게 이해하고 있지는 않는 느낌이 들었다.
이번 기회에 Spring Boot에서 DB에 접근하기 위해 사용하는 JPA 기술을 톺아보려고 한다.
📍JPA란?
JPA는 Java Persistence API의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
여기서 중요히 봐야할 부분은 JPA는 인터페이스라는 것이다.
스프링의 PSA에 의해서(POJO를 사용하면서 특정 기술을 사용하기 위해서)표준 인터페이스를 정해두었는데, 그중 orm을 사용하기 위해 만든 인터페이스가 바로 jpa이다.
JPA나 Hibernate 등이 가장 대표적인 ORM 기술이라고 하던데 이게 무슨 뜻일까?
📍JDBC (Java Database Connectivity) - 가장 기본적인 DB 접근 방식
ORM 기술을 알기 전에 먼저 처음으로 등장한 JDBC 기술을 이해해보자.
JDBC(Java Database Connectivity)는 자바에서 데이터베이스(DB)에 연결하고, SQL을 실행할 수 있도록 제공하는 API이다.
Connection → Statement → ResultSet → Close 흐름으로 사용하게 된다.
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
stmt.setInt(1, 1);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
- Connection 객체를 사용하여 SQL을 직접 작성해야 하며, 연결(Connection), 실행(Statement), 결과(ResultSet) 관리를 모두 개발자가 직접 하게된다.
- 반복적인 코드가 많고 유지보수가 어렵다.
- 모든 데이터 접근 기술(ORM, SQL Mapper 등)은 내부적으로 바로 이 JDBC를 사용하여 DB와 통신합니다.
📍SQL Mapper (SQL 매핑 방식 - MyBatis, JdbcTemplate)
SQL Mapper는 SQL과 객체 필드를 매핑해주는 기술이다.
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
- SQL을 XML 또는 어노테이션으로 분리해서 작성
- MyBatis가 SQL 실행 결과를 객체(User)에 자동으로 매핑
- SQL을 직접 관리할 수 있어 세밀한 튜닝이 가능하지만, SQL을 일일이 작성해야 함
즉 JDBC보다 좋은 점으로는
✅ SQL과 자바 코드를 분리 (XML 또는 어노테이션 사용)
✅ 객체 매핑 자동화 (ResultSet → 객체 변환 자동 처리)
✅ JDBC의 반복 코드 제거
📍ORM (Object-Relational Mapping)
ORM은 데이터베이스 테이블을 자바 객체(Entity)로 매핑하여, SQL을 직접 작성하지 않고도 데이터를 조작할 수 있도록 하는 기술로, 대표적인 ORM 프레임워크로 JPA, Hibernate가 있다.
JPA는 표준 API, Hibernate는 JPA의 구현체로 JPA는 Hibernate 없이 단독으로 사용할 수 없지만, Hibernate는 JPA 없이 단독으로 사용 가능하다.
JPA 인터페이스는 아래와 같다. 이 인터페이스를 사용해서 Hibernate를 구현하는 것.
public interface EntityManager {
void persist(Object entity);
<T> T find(Class<T> entityClass, Object primaryKey);
void remove(Object entity);
void merge(Object entity);
}
그렇다면 Spring Data JPA는?
JPA은 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임워크이다.
즉 JPA + Hibernate를 쉽게 사용할 수 있도록 Spring에서 추가적인 기능을 제공해주는 것이다.
⚙️장점으로는
- Spring Data JPA를 사용하면 Hibernate의 Session을 직접 다루지 않아도 되고, 기본적인 CRUD 기능을 자동으로 제공.
- Hibernate는 쿼리를 직접 실행해야 하지만, Spring Data JPA는 자동 쿼리 생성 기능 제공.
- Hibernate는 트랜잭션 관리가 필요하지만, Spring Data JPA는 자동으로 관리.
하지만 성능 최적화가 중요한 경우 Hibernate의 2차 캐시, 배치 처리 등을 사용하는 것이 유리할 수도 있다.
'springboot' 카테고리의 다른 글
[SpringBoot] Google Places API 사용해보기 (0) | 2025.03.06 |
---|---|
[SpringBoot] Discord WebHook 연동해보기 (0) | 2025.03.04 |
[SpringBoot] @Transactional을 정확하게 알아보자 (1) | 2025.01.15 |
[SpringBoot] N+1 문제와 해결 방법 (0) | 2025.01.10 |
[SpringBoot] 영속성 컨텍스트, 그리고 EntityManager (0) | 2025.01.09 |