DB/데이터 관리

JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis)

dddzr 2024. 9. 25. 23:22

📌 JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis) 정리

📌 1. 개요

JDBC, SQL Mapper, ORM은 모두 Java 애플리케이션과 데이터베이스 간의 상호작용을 위한 기술이다.
차이는 “SQL을 얼마나 직접 작성하느냐”, “객체-테이블 매핑 수준이 어느 정도인가”에 따라 구분된다.

구분 추상화 수준 SQL 작성 매핑 자동화 대표 기술
JDBC 낮음 ✅ 직접 작성 ❌ 없음 JDBC API
SQL Mapper 중간 ✅ 직접 작성 ✅ 결과 매핑 지원 MyBatis
ORM 높음 ❌ 자동 생성 (필요 시 직접 가능) ✅ 완전 자동 매핑 JPA, Hibernate

📌 2. JDBC (Java Database Connectivity)

🔍 개념

Java에서 DB에 직접 SQL을 작성해 실행하는 표준 API이다.
Connection, PreparedStatement, ResultSet 등을 이용해 데이터베이스와 통신한다.

 

✔ 특징

  • 가장 로우레벨의 접근 방식 (ORM/JPA, MyBatis 같은 기술들도 내부적으로 JDBC를 사용해서 DB에 접속한다!)
  • SQL, 커넥션, 자원 해제를 모두 개발자가 직접 제어해야 함
  • 제어력과 유연성이 높지만, 코드 반복이 많고 유지보수가 어려움

📖 예시

Connection conn = DriverManager.getConnection(url, user, password); // DB 연결
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); // 쿼리 작성
ps.setInt(1, 1); // 첫 번째 '?'에 1이라는 값을 설정
ResultSet rs = ps.executeQuery(); // 쿼리 실행 및 결과 저장

while (rs.next()) { //결과 출력
    System.out.println("User: " + rs.getString("name"));
}

📌 3. SQL Mapper (예: MyBatis)

🔍 개념

SQL을 직접 작성하면서도, 그 결과를 Java 객체로 자동 매핑해주는 SQL 매퍼 프레임워크이다.
즉, JDBC보다 편리하지만 완전한 ORM은 아님.

 

✔ 특징

  • SQL은 직접 작성, 하지만 결과를 자동으로 객체에 매핑
  • XML 또는 Annotation 기반으로 SQL 정의
  • JDBC보다 간결, ORM보다 제어력 높음

📖 예시 (MyBatis)

<!-- UserMapper.xml -->
<select id="getUser" resultType="User">
  SELECT id, name FROM users WHERE id = #{id}
</select>

User user = userMapper.getUser(1);
System.out.println(user.getName());

📌 4. ORM (Object-Relational Mapping)

🔍 개념

객체(Object)관계형 데이터베이스(Relational DB) 간의 매핑을 자동으로 처리하는 기술이다.
SQL을 직접 작성하지 않아도, 객체 조작만으로 DB 조작이 가능하다.

 

✔ 특징

  • 객체와 테이블을 자동 매핑 (@Entity, @Id, @Column 등)
  • SQL 자동 생성 (INSERT, SELECT, UPDATE, DELETE)
  • 캐시(1차, 2차) 및 트랜잭션 관리 자동
  • 대표 구현체: Hibernate, EclipseLink, 표준 인터페이스: JPA

✅4-1. JPA (Java Persistence API)

🔍 개념

ORM을 구현하기 위한 **Java 표준 인터페이스(명세)**이다.
직접 동작하지 않으며, HibernateEclipseLink 같은 구현체를 통해 실행된다.

 

✔ 특징

  • “이런 방식으로 ORM을 구현해야 한다”는 표준 규칙 정의
  • 구현체 교체 용이 → JPA 코드는 Hibernate로, 또는 EclipseLink로 쉽게 대체 가능

📖 예시

@Entity
public class User {
    @Id
    private Long id;
    private String name;

}

EntityManager em = emf.createEntityManager();
User user = em.find(User.class, 1L);
System.out.println(user.getName());

 

✅4-2. Hibernate

🔍 개념

JPA의 대표 구현체이자 가장 널리 쓰이는 ORM 프레임워크
(즉, Hibernate는 “ORM 프레임워크”이자 “JPA 구현체”)

 

✔ 특징

  • SQL 자동 생성
  • 캐싱(1차, 2차 캐시)으로 성능 향상
  • 다양한 DB 지원 (Oracle, MySQL, PostgreSQL 등)
  • JPA 기반 API 완전 지원


🚀 5. 결론

상황 추천 기술 이유
SQL 제어와 성능이 중요 JDBC 세밀한 제어 가능
SQL을 직접 쓰되 객체 매핑 편의도 원함 MyBatis SQL + 객체 매핑 절충형
SQL 없이 객체 중심 개발 원함 JPA/Hibernate ORM 기반, 생산성 높음

 

정리 한 줄 요약

JDBC는 “직접 SQL을 다루는 기본 API”,
MyBatis는 “SQL 중심 + 객체 매핑 지원 프레임워크”,
JPA/Hibernate는 “SQL을 숨기고 객체 중심으로 자동 매핑하는 ORM 기술”이다. 🚀

 

'DB > 데이터 관리' 카테고리의 다른 글

Elasticsearch > analyzer  (0) 2026.01.25
개인 식별 정보 암호화 방법  (0) 2026.01.25
CTE(Common Table Expression)란?  (0) 2025.11.29
Elasticsearch란?  (0) 2025.04.10