클라이언트가 데이터를 저장하거나 조회할 때, 애플리케이션 서버는 데이터베이스와 커넥션을 연결하고, SQL을 전달해서 결과를 응답 받는데 데이터베이스마다 이러한 방법이 모두 다르기 때문에 JDBC 라는 자바 표준이 등장했다.
JDBC는 자바에서 DB에 접속할 수 있도록 하는 자바 API로 연결(Connection), SQL 전달(Statement), 응답(ResultSet)의 인터페이스를 제공하는데 이 JDBC 인터페이스를 각각의 DB에 맞도록 구현한 라이브러리를 JDBC 드라이버라고 한다.
애플리케이션 로직이 JDBC 표준 인터페이스에 의존하게 되면서 데이터베이스를 변경해도 JDBC 구현 라이브러리만 변경하면 되는 등의 편의점이 생겼지만 JDBC 인터페이스로 공통화하는데 한계가 있어서 SQL은 각각의 데이터베이스에 맞게 변경을 해야하는 단점이 있다. (페이징 처리 SQL 등)
JDBC를 직접 사용하기 보다는 JDBC를 편리하게 사용하는 SQL Mapper와 ORM 기술이 있는데 이런 기술들도 내부적으로 JDBC를 사용하기 때문에 JDBC의 기본 동작 원리는 알고 있는 것이 좋다.
Connection
- DriverManager : 라이브러리에 등록된 DB 드라이버를 관리하고, 커넥션을 획득하는 역할
- getConnection(url, username, password) : 라이브러리에 있는 DB 드라이버를 찾아서 DB에 맞는 커넥션을 반환
Statement
- connection.prepareStatement(sql) : 커넥션을 통해 DB에 전달할 SQL과 파라미터를 바인딩 (SQL Injection 방지)
- statement.executeUpdate() : Statement를 통해 준비된 SQL을 실제 데이터베이스에 전달
ResultSet
- statement.executeQuery() : 데이터를 조회하여 결과를 ResultSet에 담아서 반환한다.
- resultSet.next() : resultSet은 반환받은 데이터를 커서로 가르키는데 next()로 커서를 이동할 수 있다.
- resultSet.getXxx() : 현재 커서가 가르키는 데이터를 원하는 타입으로 변환해서 가져온다.
Connection을 생성하고 Statement를 통해 SQL을 실행하고 나면 리소스를 정리해야 되는데 역순으로 종료를 하면 된다. 리소스 정리를 하지 않으면 커넥션이 끊어지지 않고 계속 유지되어 리소스 누수가 발생하고 커넥션 부족으로 장애가 발생할 수 있다.
'데이터베이스' 카테고리의 다른 글
[DB 접근 기술2] MyBatis 기본 문법 (0) | 2022.06.22 |
---|---|
[DB 접근 기술1] 스프링 데이터베이스 예외 추상화 (0) | 2022.06.19 |
[DB 접근 기술1] 스프링 트랜잭션 (0) | 2022.06.19 |
[DB 접근 기술1] 트랜젝션(Transaction) 기초 (0) | 2022.06.19 |
[DB 접근 기술1] 커넥션풀과 DataSource (0) | 2022.06.19 |