DB 연결 해제하기

WHY?

MYSQL에서는 일정 시간 대기한 후, 더이상의 요청이 없으면 연결을 해제한다.
만일 개발자가 명시적으로 연결을 해제해준다면 대기시간없이 바로 자원을 해제할 수 있으므로 성능을 낭비하지 않을 수 있다.

WHAT?

DB는 다음과 같이 동작한다.
1. DB 서버 접속을 위해 JDBC 드라이버를 로드한다.
2. DB 접속 정보와 DriverManager.getConnection() Method를 통해 DB Connection 객체를 얻는다.
3. Connection 객체로 부터 쿼리를 수행하기 위한 PreparedStatement 객체를 받는다.
4. executeQuery를 수행하여 그 결과로 ResultSet 객체를 받아서 데이터를 처리한다.
5. 처리가 완료되면 처리에 사용된 리소스들을 close하여 반환한다.

이로써 우리가 해제해야 할 자원은 다음과 같다.

  • Connection(DB와의 연결고리)
  • Statement(질의문 객체)
  • ResultSet(결과 객체)

HOW?

java 7 이전버전에서는 try-catch-finally로 일일이 해제해주어야 했다.
7 이후버전부턴 try-with-resource로 더 간단하게 해제할 수 있는데, 방법은 다음과 같다.

 try (
         Connection conn = DriverManager.getConnection(dburl, dbuser, dbpasswd);
         PreparedStatement ps = conn.prepareStatement(sql)
         ResultSet rs = ps.executeQuery()
   ){
   ...

버전 9부터는 꼭 try 괄호문이 아니라 try블럭 바깥에서 선언된 것도 자동으로 해제시켜준다.

Connection conn = DriverManager.getConnection(dburl, dbuser, dbpasswd);
   PreparedStatement ps = conn.prepareStatement(sql);

try{
...
}

좋은 웹페이지 즐겨찾기