[DB] JDBC에 대한 정리

DyungE_100·2022년 4월 15일
0

DB

목록 보기
2/5
post-thumbnail

1. JDBC란 무엇인가?

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC를 통해서 DBMS의 종류에 상관없이 데이터베이스를 연결하고 작업을 처리할 수 있다.

JDBC의 특징과 역할은 다음과 같다.

  • Java 코드에서 DB서버에 접속할 수 있다.

  • SQL문을 구성하고 DB서버에서 실행할 수 있다. 이 때, SQL문은 Java 코드 안에 포함된다.

  • DB의 정보나 DB서버에서 처리한 결과를 가져올 수 있다.

데이터를 메모리(램)에만 저장하면 애플리케이션이 종료되었을 때 데이터가 다 날라가버린다.
따라서 데이터의 영속성(Persistence)를 보장해줘야 하는데, 이를 보장하는 것이 데이터베이스(DB)같은 저장소다.

Java는 Persistence Layer를 이러한 JDBC로 구현한다. JDBC를 통해 영속성이 보장되는 데이터베이스에 접근할 수 있는 것이다.


2. JDBC 프로그래밍 흐름과 관련 인터페이스

2.1 JDBC 프로그래밍의 대략적인 흐름

1) JDBC Driver 로드

2) DB 연결 생성

3) DB에 있는 데이터를 읽거나 쓰기 (SQL문)

4) DB 연결 종료

2.2 JDBC 프로그래밍의 구체적인 흐름(코드 레벨)

  • 1) import java.sql.*;

  • 2) 각 DBMS별에 알맞는 Driver를 로드한다. 예를 들면, PostgreSQL의 경우

Class.forName("org.postgresql.Driver");

을 이용하여 드라이버를 로드한다.

cf) Class 클래스는 클래스들의 정보를 담는 메타 클래스로, JVM은 Class 클래스를 통해 클래스들에 대한 정보를 Class Loader에 로드(Load)한다.
JDBC Driver와 같이 인스턴스를 별도로 관리하지 않는 대부분의 클래스의 경우, 그 클래스가 스스로의 인스턴스를 정적 블록을 통해 생성하고 관리한다. forName() 메서드를 호출하면 Driver 자기 자신을 초기화하여 DriverManager에 등록한다. 즉, 개발자가 따로 관리하지 않는 Static 객체들이 알아서 DriverManager에 등록된다.

  • 3) DriverManagergetConnection메소드를 이용하여 Connection 인스턴스를 얻는다.

  • 4) Connection 인스턴스를 통해 PreparedStatement 객체를 생성하고 쿼리문을 생성하여 보낸다.

  • 5) SQL문을 실행하고 결과물이 있다면, ResultSet 객체를 생성하고 반환한다.

  • 6) 생성했던 객체들을 close() 메소드로 닫아 없앤다.

2.3 관련 인터페이스와 클래스에 대한 설명

  • JDBC Driver API(java.sql.Driver)

DB와 연결하는 DriverManager 클래스를 만들 때 반드시 들어가야 하는 인터페이스.
JDBC DriverManager와 각 DBMS의 벤더에서 제공하는 JDBC Driver가 서로 접속하기 위해 필요하다.(properties 정보와 매치하여 접속)

  • JDBC DriverManager 클래스 (java.sql.DriverManager)

DBMS의 벤더에서 제공하는 JDBC Driver에 직접적으로 접속하게 만들어주는 클래스. getConnection() 메소드를 통해 Connection 인스턴스를 생성한다.

  • Connection 인터페이스 (java.sql.Connection)

특정 DB와의 연결 정보를 가지는 인터페이스.

  • Statement 인터페이스 (java.sql.Statement)

SQL문을 DB에 전송하는 방법을 정의한 인터페이스.

  • PreparedStatement 클래스 (java.sql.PreparedStatement)

Statement의 하위 인터페이스. SQL문을 미리 컴파일 하여 실행 속도를 높이는 데 도움을 준다.
execute 메소드를 사용해서 쿼리문을 실행하라는 명령을 내린다.

  • ResultSet 인터페이스 (java.sql.ResultSet)

SELECT문의 실행 결과를 조회할 수 있는 방법을 정의한 인터페이스.
ResultSet 객체에 대한 참조하여 next() 메소드로 각 요소들을 setter로 VO나 DTO에 넣어 객체를 반환할 수 있다.


3. JDBC, SQLMapper, ORM 등에 대하여

JDBC API는 영속성을 보장해주는 편리한 API이긴 하지만 SQL문을 작성하는 것에 있어 중복 코드가 많아질 우려가 있고, Connection 관리를 계속해서 해줘야 하는 단점이 있다. 이러한 단점을 극복하기 위해 발전된 것이 SQLMapper와 ORM이다.

3.1 SQLMapper

1) Spring JDBC

Connection에 대한 Configuration을 JdbcTemplate이라는 클래스에 담아 Spring을 통해 주입 받는 형식의 Mapper다. 추상화가 많이 이뤄져 편하게 사용할 수 있다.

2) Mybatis

Mybatis는 Java 코드에서 SQL을 쓰는 것 자체를 XML파일로 이동시켜 분리시켜버린다.
SQL문을 XML파일로 따로 지정하고 Java 메소드와 매핑시킴으로써 반복되는 코드를 줄이고 개발하는 단계에서 SQL문을 한 번 작성하면 나머진 Java코드로 해결할 수 있도록 만들어준다.

3.2 ORM (Object-Relational Mapping)

JPA (Java Persistence API) / Hibernate

객체지향적으로 구현되어 있는 구조에서 RDB와 연결하는 것을 간편하게 하기 위해 등장한 기술이다. JPA는 표준 인터페이스이고, 이를 구현하는 실제 여러 서비스 중 하나가 Hibernate이다.





https://sh77113.tistory.com/185,
https://dyjung.tistory.com/50,
https://jaehoney.tistory.com/29,
https://velog.io/@doforme/JDBC%EB%9E%80,
https://velog.io/@jungnoeun/JDBC%EB%9E%80,
https://shs2810.tistory.com/18,
https://sdesigner.tistory.com/101,
https://sorjfkrh5078.tistory.com/296,

https://pjh3749.tistory.com/250,
https://kyun2.tistory.com/23,

0개의 댓글