<스프링레거시> 커넥션 풀 설정

ACAI BERRY DEVELOVER·2023년 2월 19일
0

나는 JDBC api를 이용하여 MySQL에 연결하여 커넥션을 얻는 것 까지 성공했다.

하지만 여러명의 사용자의 접근이 있는 웹 에플리케이션의 경우 데이터베이스 연결시에는 커넥션 풀(Connection Pool)을 이용하는 게 비용적 측면에서 훨씬 좋다고 한다.

  • 일단 웹 앱은 클라이언트의 HTTP 요청(DB접근이 필요한)이 들어오면 스레드를 생성한다.
  • 대부분의 비즈니스 로직에선 DB서버로부터 데이터를 얻어서 그 요청을 처리한다.
  • DB서버로부터 데이터를 얻기 위해서는 물리적으로 DB 서버에 접근하는 작업이 필요하다.
try {
 Class.forName(driverPath);
 Connection con = DriverManager.getConnection(address, userName, password); // [1]
 PreparedStatement ps = con.prepareStatement(query);
 ps.setString(1, id);
 ResultSet rs = get.executeQuery();
 // ....
} catch (Exception e) { }
} finally {
 rs.close();
 ps.close();
}

위의 코드처럼 DB서버 접속하는 과정을 HTTP요청이 있을때마다 반복해야 한다는 이야기이다.

이렇게 물리적으로 DB에 최초로 접속하는 과정은 성능저하가 크다.

즉 클라이언트가 요청을 보낼때마다 커넥션을 얻는 작업은 비효율적이라는 얘기이다.

다음은 커넥션 풀의 정의이다.

위키백과

커넥션 풀은 WAS 실행 시 일정량의 Connection 객체를 미리 생성한다.

-> Pool이라는 공간(Cache)에 저장한다. -> DB연결 요청이 있을 때마다 Pool에서 Connection 객체를 꺼내서 사용하고 사용이 끝나면 다시 Pool에 반납한다.

reference

profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글