본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
JDBC 프로그래밍
JDBC(Java DataBase Connectivity)
- 자바 애플리케이션에서 DB 프로그래밍을 할 수 있도록 도와주는 표준 인터페이스
- JDBC 인터페이스들을 구현한 구현체들은 각 데이터베이스 벤더 사들이 제공
- 통역자의 역할: 응용프로그램과 DBMS 간의 통신을 중간에서 번역해주는 역할을 한다
DBCP(DataBase Connection Pool)
- 미리 일정량의 DB 커넥션을 생성해서 풀에 저장해 두고 있다가 HTTP 요청에 따라 필요할 때 풀에서 커넥션을 가져다 사용하는 기법
- 참고로 스프링 부트 2.0부터는 디폴트 커넥션 풀로 HikariCP 사용
커넥션 풀 사용시 유의 사항
- 커넥션의 사용 주체는 WAS스레드이므로 커넥션 개수는 WAS 스레드 수와 함께 고려해야 함
- 커넥션 수를 크게 설정하면 메모리 소모가 큰 대신 동시 접속자 수가 많아지더라도 사용자 대기 시간이 상대적으로 줄어들게 되고, 반대로 커넥션 개수를 작게 설정하면 메모리 소모는 적은 대신 그만큼 대기시간이 길어질 수 있음. 따라서 적정량의 커넥션 객체를 생성해 두어야 함
DataSource
- 커넥션을 획득하기 위한 표준 인터페이스
- HikariCP의 DataSource 사용
java.sql Package
- java.sql.Driver
- DB와 연결하는 Driver class를 만들 때 반드시 implements 해야 하는 interface로 JDBC 드라이버의 중심이 되는 Interface이다
- java.sql.Connection
- 특정 데이터베이스와 연결정보를 가지는 Interface이다
- DriverManager로부터 Connection 객체를 가져온다
- java.sql.Statement
- SQL query문을 DB에 전송하는 방법을 정의한 Interface이다
- Connection을 통해 가져온다
- java.sql.ResultSet
- SELECT 구문 실행 결과를 조회할 수 있는 방법을 정의한 Interface이다
- java.sql.PreparedStatement
- Statement의 하위 Interface이다
- SQL문을 미리 컴파일 하여 실행 속도를 높인다
- java.sql.CallableStatement
- PreparedStatement의 하위 Interface이다
- DBMS의 Stored procedure을 호출한다
JDBC 개발 단계
- JDBC Driver loading
- 데이터베이스 벤더에 맞는 드라이버를 호출한다
- 데이터베이스와의 연결을 위해 드라이버를 로딩한다
- Connection
- DB와 연결을 위해 URL과 계정정보가 필요
- 연결 메소드로는 DriverManager.getConnection(url,id,pwd):Connection 이다
- Statement/PreparedStatement
- SQL 구문을 정의하고 변경 될 값을 치환문자(?)를 이용해 쿼리 전송 전에 값을 setting한다
- executeUpdate() or executeQuery()
- executeUpdate()는 SQL query문이 INSERT, DELETE, UPDATE의 경우에 사용한다. 반환값의 타입은 int형이다
- executeQuery()는 SQL query문이 SELECT의 경우에 사용한다. 반환값의 타입은 ResultSet이다
- ResultSet(SELECT의 경우)
- 데이터베이스 조회 결과집합에 대한 표준
- next()를 통해 DB의 table 안의 row 한 줄을 불러온다
- getString(), getInt()를 통해 한 행의 특정 Column값을 가져온다
- close(Connection, Statement, ResultSet)
- Connection, Statement, ResultSet에 대해 close를 해준다
'패스트캠퍼스 강의' 카테고리의 다른 글
[8일차] 50일 포트폴리오 챌린지 (0) | 2023.08.15 |
---|---|
[7일차] 50일 포트폴리오 챌린지 (0) | 2023.08.14 |
[5일차] 50일 포트폴리오 챌린지 (0) | 2023.08.12 |
[4일차] 50일 포트폴리오 챌린지 (0) | 2023.08.11 |
[3일차] 50일 포트폴리오 챌린지 (0) | 2023.08.10 |