JDBC

이준영·2023년 1월 17일
0

자바 프로그램내에서 SQL문을 실행하기 위한 자바 API.
자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 Interface이다

  • JDBC Driver : 각 DBMS에 알맞는 클라이언트
    자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리한다.

JDBC 코드 예시

1. 드라이버 로드

2. 데이터 베이스 연결

3. SQL문 실행을 위한 객체를 생성

  • 파라미터에 따라 동적인 쿼리인 경우 “?”를 넣어줌


  • 그냥 정적인 쿼리인 경우

4. SQL문 실행

  • executeQuery()
    Select등 리턴 값이 필요한 쿼리문일때 사용


  • executeUpdate()
    insert, update, delete등 리턴 값이 필요 없는 쿼리문일때 사용
  • 만약 쿼리문이 select절일 때 ResultSet으로 출력
    next()를 통해 DB의 table 안의 row한 줄을 불러온다.
    getString(), getDouble() 같은 함수를 통해 한 행의 특정 Column값을 가져 온다.

5. 리소스 close()

생성 역순으로 close를 해준다.

JDBC는 초기 설정이 간단하고 학습 비용이 낮은 장점이 있다.

그러나 connection연결과 예외처리 등 수많은 반복적인 코드를 개발자가 직접 작성하고 관리해야 하는 불편함이 있고,

SQL문도 같이 포함해서 짜기 때문에 가독성이 좋지 않다.

심지어 그 SQL문 마저도 중간 중간에 +string을 합치게 되는 하드 코딩 형식이기 때문에 소스 분석과 관리 면에서도 좋지 않다.

그래서 JDBC만 독자적으로 사용하지 않고 이러한 단점들을 라이브러리를 통해 최소화 하려는 움직임이 생기고 있다.

추가 라이브러리들

1. DBCP 사용

데이터베이스와 Connection을 맺는 작업은 매우 느리며 자원을 많이 소모하는 작업이다.
Driver를 로드하고 데이터베이스에 연결하는 부분을 효율적으로 처리하는 것이 DBCP이다.

Connection Pool을 만들어서 미리 생성한 여러 Connection 객체를 담아두고 클라이언트가 요청할 때 마다 하나씩 빌려준다.


클라이언트가 사용을 마친 후에는 Pool에 다시 Connection 객체를 반환하기 때문에 데이터베이스 접근 요청이 존재하더라도
새로운 Connection 객체를 생성할 필요가 없다.


물론 Pool에서 Connection 객체를 다 사용하고 있을 때는 잠시 대기를 하고 자리가 생기면
Connection을 사용할 수 있게 된다.

DBCP 옵션들

  • maxActive : 동시에 사용할 수 있는 최대 커넥션 개수
  • maxIdle : Connection Pool에 반납할 때 최대로 유지될 수 있는 커넥션 개수
  • minIdle : 최소한으로 유지할 커넥션 개수
  • initialSize : 최소로 getConnection() Method를 통해 커넥션 풀에 채워 넣을 커넥션 개수

2. Mybatis 사용

자바 13 부터는 멀티 라인 문자열을 제공한다.
긴 문자열을 +를 사용하여 이어 붙이지 않아도 되고 가독성도 높아질 것이다.


하지만 LTS버전인 java11, java8 버전에서는 사용을 하지 못하는 문제가 있다.


그래서 ibatis/mybatis를 사용해서 xml에 query문을 작성하고 Mapping해서 사용할 수 있다.
query문을 따로 관리할 수 있다는 점에서 장점이 있다.
이 외에도 데이터 캐싱이 가능하기 때문에 성능 개선에서도 탁월하다.

JDBC의 단점을 보완하기 위해
Connection 부분은 DBCP를 사용하고

query문은 Mybatis를 사용해서

JDBC의 가독성 문제를 해결하고 관리, 유지보수 면에서도 수월해 질 것이다.

0개의 댓글

관련 채용 정보