[JDBC] JDBC가 등장한 이유
목차
1. JDBC 등장 배경
2. JDBC란
3. 표준화의 한계
4. JDBC와 최신 기술
👨💻 JDBC 등장 배경
애플리케이션을 개발할 때 중요한 데이터는 대부분 DB에 저장된다.
클라이언트가 DB를 호출하려면 아래와 같은 과정을 거친다.
여기서 Application Server에서 DB까지의 과정을 좀 더 살펴보자.
- 커넥션 연결: 주로 TCP/IP 사용
- SQL 전달: 커넥션을 통해 DB에 SQL 전달
- 결과 응답: DB가 SQL 수행 후 결과 응답. application server는 응답 결과 활용
과거에는 DB마다 커넥션을 연결하는 방법, SQL 전달하는 방법, 결과를 응답 받는 방법이 모두 달랐다. 게다가 MySQL, Oracle DB, h2 등등등 DB의 종류는 정말 정말 많다. DB 종류에 따라 코드도 변경해야 하고 개발자가 연결 방법을 매번 배워야 했다. 이때 등장한 것이 ✨JDBC 표준 인터페이스✨이다.
🔻 TCP/IP란?
- = Transmission Control Protocol/Internet Protocol
- 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰는 통신 규약 중 하나
- 전송 조절 프로토콜인 TCP + 패킷 통신 방식의 인터넷 프로토콜 IP
✨ JDBC; Java DataBase Connectivity
: Java에서 데이터베이스에 접속할 수 있도록 하는 Java API
JDBC는 크게 3가지 기능을 인터페이스로 정의해서 제공한다.
- java.sql.Connection: 연결
- java.sql.Statement: SQL을 담은 내용
- java.sql.ResultSet: SQL 요청 응답
이제 개발자는 위 표준 인터페이스만 사용해서 개발하면 된다. 알다시피 코드는 인터페이스만 존재한다고 동작하지 않고 '구현체'를 필요로 한다. 요 JDBC 인터페이스를 각각의 DB 회사에서 구현해 라이브러리로 제공하는데 이것이 JDBC 드라이버다. MySQL JDBC 드라이버는 MySQL DB에 접근할 수 있게 하고 Oracle JDBC 드라이버는 Oracle DB에 접근할 수 있게 해준다.
🤔 표준화의 한계
JDBC의 등장으로 많은 것이 편리해졌다. 하지만 일반적인 부분만 공통화했기 때문에 DB마다 다른 특성들을 모두 표준화하기에는 한계가 있다. 예제로 MySQL과 Oracle DB에서의 페이징 쿼리를 짜봤다. 같은 로직인데 쿼리 생긴게 다르다는 것만 봐두자. (페이징이란? 게시판에서 글을 1, 2, 3, ... 페이지 번호를 통해 글을 10개 단위로 조회하던 경험이 있을 것이다. 이를 페이징이라 부른다.)
MySQL
SELECT *
FROM boards
ORDER BY board_id
LIMIT 0, 10;
Oracle DB
SELECT *
FROM (
SELECT rownum AS rnum
, b.*
FROM boards b
WHERE rownum < 10
)
WHERE 0 >= rnum;
🚀 JDBC와 최신 기술
이제 DB 변경 시 JDBC 코드는 변경하지 않아도 되지만 SQL은 다 수정해야한다.
이를 좀 더 편리하게 하기 위해 SQL Mapper와 ORM이라는 기술이 등장하게 되었다.
JDBC
SQL Mapper
- 👍: SQL 응답 결과를 객체로 편리하게 변환
- 👍: JDBC 반복되는 코드 제거
- 👎: 개발자가 SQL 직접 작성
- ex: Spring - JdbcTemplate, MyBatis
ORM 기술
- ORM이란? 객체를 관계형 DB와 매핑해주는 기술
- 👍: 반복적인 SQL을 직접 작성하지 않고 ORM 기술이 개발자 대신 동적으로 SQL 생성
(DB마다 다른 SQL을 사용하는 문제도 JPA가 해결해줌) - 👎: 러닝 커브가 높음
- ex: Hibernate, EclipseLink
(JPA = 자바 진영의 ORM 표준 인터페이스. Hibernate와 EclipseLink는 이를 구현한 기술.)
참고
- inflearn - 김영한님의 Spring DB1
- IBM 문서 - TCP/IP
김영한 님의 Spring DB1 강의를 듣고 정리하고 있습니다