JPA나 QueryDsl을 공부하고 이를 적용하여 프로젝트를 해나가면서, 문득 데이터 베이스와 관련된 응용 기술들은 알지만 기초적인 지식이 부족하다는 것을 느꼈다.
그래서 기초적인 JDBC에서 Mybastis 그리고 Jpa에 이르기 까지 DB에 접근하는 기술이 발전된 과정을 상세하게 공부하려고 한다.
JDBC
JDBC란, 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때
사용되는 표준 SQL 인터페이스 API이다.
JDBC에 관한 정의는 위와 같다.
좀 더 와닿게 설명하자면, 어플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관이 되는데
어플리케이션 서버가 데이터베이스를 그냥 사용할 수 있는것이 아니라 일련의 과정들이 필요로 한다.
1. 커넥션 연결 - TCP/IP를 사용하여 커넥션을 연결한다.
2. SQL 전달 - DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 전달한다.
3. 결과 응답 - DB는 전달된 SQL을 바탕으로 작업을 수행하고 그 결과를 전달한다.
그런데 여기서 문제가 발생한다.
DB의 종류는 다양하기 때문에(My SQL, Maria Db, Oracle Db... 등) 각각의 데이터베이스마다 커넥션을 연결하는 방법과 SQL전달 방법, 결과를 응답 받는 방법이 다 달라지게 된다!!
이런 문제를 해결하기 위해 JDBC가 등장하게 되었다!
JDBC는 위의 3가지 기능을 아래와 같이 표준 인터페이스로 정의해서 제공한다.
1. 커넥션 연결 - java.sql.Connection
2. SQL 전달 - java.sql.Statement
3. 결과 응답 - java.sql.ResutSet
이런 표준 인터페이스 기능들을 통하여 개발자는 DB에 관계없이 효율적으로 DB에 접근할 수 있게 되었다!
하지만 인터페이스 만으로는 기능이 동작하지 않기 때문에 구현체가 필요한데, DB의 종류마다 이것의 구현체인 JDBC 드라이버를 라이브러리로 제공한다.
DB 라이브러리 안에 있는 JDBC 드라이버를 찾아 커넥션을 획득하려면,
먼저 JDBC가 제공하는 DriverManger.getConnection(..)을 사용해야 한다.
관련 된 코드는 다음과 같다.
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
매게 변수로 해당 db에 해당하는 URL과 USERNAME, PASSWORD을 입력하면 라이브러리에 있는 DB를 찾아서 해당 커넥션을 반환해주는 구조이다.
해당 과정을 조금 더 자세히 살펴보자면, DriverManger가 매게변수로 입력된 URL을 라이브러리에 등록된 드라이버들에게 순차적으로 넘기면서 해당 드라이버가 처리 할 수 있는 요청인지 확인한다. 만약에 URL이 jdbc:h2:tcp://localhost/~/test와 같다면 H2 드라이버는 처리가 가능하므로 H2 DB에 연결하여 커넥션을 획득하고 이 커넥션을 클라이언트에 반환하게 된다.
< 본 포스팅은 인프런 김영한 강사님의 스프링 DB 1편 - 데이터 접근 핵심 원리 강의를 바탕으로 작성되었습니다. >
'DB' 카테고리의 다른 글
DB 쿼리 성능을 개선해보자 (0) | 2023.04.05 |
---|---|
식별관계와 비식별관계 (0) | 2023.03.28 |
DB Index에 대하여 (0) | 2023.03.10 |
Transaction(트랜잭션)이란 (0) | 2023.01.01 |
DB 커넥션을 반드시 close 해야하는 이유 (0) | 2022.08.01 |