JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다.
모든 Java의 Data Access 기술(MyBatis, JPA 등)의 근간이 되는 기술이다.
JDBC 역할
JDBC Driver는 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 클라이언트 사이드 어댑터이다.
DB마다 Driver가 존재하므로, 자신이 사용하는 DB에 맞는 JDBC Driver를 사용한다.
MyBatis는 JDBC의 반복적이고 번거로운 코드를 줄이기 위해 만들어진 SQL 매퍼 기반 데이터 접근 프레임워크이다.
개발자가 작성한 SQL 문을 Java 객체로 자동으로 매핑 시켜준다.
특징
JPA는 자바 진영의 표준 ORM(Object Relational Mapping) 기술로, 객체(Entity)와 데이터베이스 테이블 간 매핑을 자동으로 처리해 개발자가 SQL을 직접 작성하지 않고도 데이터를 관리할 수 있게 해준다.
특징
| 구분 | MyBatis | JPA |
|---|---|---|
| 개념 | SQL Mapper 기반 프레임워크 | ORM (Object Relational Mapping) 기반 표준 프레임워크 |
| 동작 방식 | SQL을 직접 작성하고 XML 또는 어노테이션으로 매핑 | 엔티티 객체를 통해 테이블과 매핑, SQL은 내부적으로 자동 생성 |
| 개발 중심 | SQL 중심 개발 (쿼리 제어 중점) | 객체 중심 개발 (엔티티 중심 도메인 설계) |
| 자동화 수준 | JDBC의 반복 코드 제거 정도 (반자동) | SQL 생성, 매핑, 트랜잭션 관리까지 자동 (완전 자동화) |
| SQL 작성 여부 | 개발자가 직접 작성 | 직접 작성 필요 없음 (단, 복잡한 경우 @Query 가능) |
| 동적 SQL 지원 | <if>, <where>, <foreach> 등으로 동적 쿼리 작성 가능 | Criteria API 또는 QueryDSL 등 별도 도구 필요 |
| 성능 튜닝 | 세밀한 쿼리 제어 가능 → 튜닝 용이 | 내부 SQL 자동 생성 → 튜닝 어려움 (쿼리 최적화 필요) |
| DB 독립성 | 낮음 (DB별 SQL 수정 필요) | 높음 (DBMS 변경에도 코드 영향 적음) |
| 학습 난이도 | 낮음 (SQL 친숙한 개발자에게 쉬움) | 높음 (ORM 개념과 영속성 이해 필요) |
| 대표 어노테이션 | @Mapper, @Select, @Insert | @Entity, @Id, @GeneratedValue, @OneToMany 등 |
| 사용 목적 | SQL 제어와 튜닝이 중요한 서비스 | 객체지향적인 설계와 생산성이 중요한 서비스 |
| 장점 | SQL 자유도 높음, 직관적인 로직 제어 | 생산성 높음, 반복 코드 최소화, DB 독립성 |
| 단점 | SQL 관리 부담, 유지보수 어려움 | 성능 예측 어려움, 학습 비용 높음 |
| 대표 사용 예시 | 고성능 대형 트래픽 서비스, 복잡한 쿼리 다루는 시스템 | CRUD 중심 웹 서비스, 객체지향 설계 기반 시스템 |