본문 바로가기

Server-DB/Spring Boot

JDBC, JPA, MyBatis? | Java와 DB 간 API 정리

결국 JDBC가 기본이다. 다만 여기서 어떻게 발전했냐의 차이일 뿐

Java에서 DB를 다룰 때 다양한 방식들이 있어서 이를 정리해보고자 한다.

 

 

1. JDBC

가장 기본적인 방식 - JDBC

가장 기본적인 방식은 JDBC(Java Database Connectivity)이다. 사실 모든 DB를 다루는 기술은 여기서 시작되었다. DAO로 DB와의 연결을 관리하고, DB 간 통신 할 때 객체를 다루어주는 DTO, VO가 존재한다.

 

헌데 이 방식은 문제점이 존재했는데, 바로 Java 코드 내에 SQL쿼리문이 직접적으로 작성되었다는 것이다. 그래서 이를 타파하기 위해 2가지 방식이 생겨났다. 하나는 자주 쓰이는 SQL 쿼리문을 미리 정해놓고 사용하는 방식, 또 다른 하나는 SQL문이 아니라 DB 자체를 맵핑해놓고 사용하는 방식이다. 전자는 쿼리문, 후자는 DB를 맵핑하는 것으로 이해하면 된다.

 

 

 

2. SQL Mapper

쿼리문을 맵핑하는 방식 - SQL Mapper

먼저 쿼리문을 맵핑한다는 것은, 자주 사용할 쿼리문을 XML파일로 등록해놓는 것이다. 여기서는 JDBC Template에 쿼리문을 등록해놓는다. 그리고 DAO에서 XML파일을 호출하면, 거기에 등록된 쿼리문이 작동해서 실제 DB를 조작하게 된다. DataSource는 DB와 서버간 연결을 담당하는 부분이다.

 

SQL Mapper에는 JDBC Template 이외에도 Mybatis와 같은 것들이 존재한다.

 

 

 

3. ORM

DB를 맵핑하는 방식 - ORM

앞선 방식이 쿼리문을 맵핑하는 것이라면 여기서는 DB를 맵핑한다. SQL DB가 어떠한 Key와 Value를 가져야 하는지 Java로 맵핑해준다. ORM은 두 가지 부분으로 이루어지는데, 하나는 RDBMS를 맵핑해주는 부분, 또 하나는 이러한 RDBMS를 조작해주는 부분으로 나뉜다. 

 

Repository가 RDBMS를 조작해주고, Entity가 RDBMS를 Mapping한다.

도표를 보면 Repository라고 적힌 부분이 DB를 조작하는 부분이고, JPA/Hibernate라고 적힌 부분이 DB를 맵핑해주는 부분이다. 이 때 DB를 맵핑해주는 것을 Entity를 정의한다라고 한다.

 

어찌되었든 가장 기본은 JDBC 였고, 여기서 어떠한 방식으로 발전해왔느냐의 차이가 있는 것이다.