반응형
JDBC란
자바 언어를 이용해서 데이터베이스에 접근할 수 있도록 도와주는 자바 표준 API이다. 자바 언어를 사용해서 데이터베이스에 접근할 수도 있고 SQL 쿼리를 실행할 수도 있다.
DB 접근 기술들 중 하나인 SQL Mapper, ORM 기술들 모두 로우 레벨단에서는 JDBC API가 동작하고 있다. 즉, 자바를 이용해서 접근하는 DB 접근 기술들은 JDBC API가 가히 필수적이다.
JDBC(표준)가 왜 필요했을까 - 표준의 부재로 인한 문제점
1. 새로운 데이터베이스의 사용법을 배워야 한다.
- 각 데이터베이스마다 사용법이 다르다.
- 학습의 몫은 개발자에게 있다.
2. 프로덕션 코드의 변경 범위가 커질 수 있다.
- DIP(의존 역전 원칙) 위배
- 기대하는 기능은 같아도, 코드 변경 범위가 클 수 있다.
JDBC의 DB 접근 기능을 위한 기능
1. Driver
- 데이터베이스와 연결할 때 사용
- 드라이버 객체를 통해 커넥트 메서드를 실행시켜서 데이터베이스와 연결한다.
- 클라이언트가 직접적으로 드라이버 API를 사용하지 않는다.
- DriverManager라는 API를 통해 드라이버 API를 간접적으로 호출하게 된다.
DriverManager
- 다양한 JDBC Driver들을 한 곳에서 관리하는 유틸성 정적 클래스
- Driver 클래스 로딩 시점에 static 블록에 있는 메서드를 통해 JDBC 드라이버들이 드라이버 매니저에 등록된다.
static {
DriverManager.registerDriver();
}
- 내부 ArrayList로 다양한 구체 클래스들을 관리할 수 있다.
2. Connection
- 데이터베이스와의 연결 정보를 가진다.
- 클라이언트가 드라이브 매니저 API를 통해 conenction 요청을 하게 된다.
- 드라이브 매니저 내부적으로 이 커넥션 요청을 처리할 수 있는 드라이버를 찾는다.
- 해당 드라이버의 커넥트 메서드를 통해 데이터베이스가 연결된다.
- 데이터베이스 연결에 대한 정보를 가지고 커넥션 객체를 생성한다.
- 클라이언트에게 커넥션 객체를 반환한다.
3. Statement
- SQL 쿼리 관리, 실행을 담당한다.
- 클라이언트가 확장되지 않은 SQL 쿼리문을 하나 준비한다.
- 확장X : 오른쪽 끝에 물음표가 들어가 있는 SQL 쿼리문을 의미한다.
- SQL 쿼리문을 커넥션 스테이트먼트 메서드를 통해 전달하게 되면 내부적으로 이 쿼리를 관리하는 statement 객체가 생성된다.
- 생성된 statement 객체를 클라이언트에게 반환한다.
- SQL 바인딩을 한다.
- SQL 쿼리의 물음표에 원하는 값을 지정해주는 행위
- statement 객체의 세터 메서드를 통해 바인딩할 수 있다.
4. ResultSet
- 실행한 SQL 쿼리 결과를 가져올 때 사용한다.
클라이언트가 방금 확정했던 바인딩되는 SQL 쿼리문을 하나 준비하고 이 쿼리문을 statement execute 쿼리 메서드를 통해 실어서 주면 내부적으로 데이터베이스에서 쿼리를 실행하게 된다.
데이터베이스에서 쿼리를 실행하면 이에 대한 쿼리 결과를 반환하게 되는데 이 반환한 결과를 가지고 ResultSet 객체로 포장을 시켜서 그것을 클라이언트에게 반환해주는 형식이다.
해결된 문제들
1. 새로운 데이터베이스를 더 이상 배우지 않아도 된다.
추상화된 JDBC API의 사용법만 숙지하고 있다면 어떤 데이터베이스가 와도 동일한 기능을 할 것이다.
2. 프로덕션 코드의 변경 범위를 최소화할 수 있다.
- 더 이상 구체 클래스에 의존X
- 추상화된 JDBC에만 의존한다.
→ 구체 클래스가 바뀌더라도 프로덕션 코드는 바뀌지 않는다.
반응형
'Spring' 카테고리의 다른 글
RESTful API (0) | 2024.07.09 |
---|---|
[Spring] JdbcTemplate (0) | 2024.07.09 |
[Spring] Spring vs Spring Boot (0) | 2024.07.09 |
[Spring] Maven과 Gradle (0) | 2024.07.08 |
[Spring] Exception Handling (0) | 2024.07.05 |