Connection Pool

mandarinduk·2021년 3월 17일

Connection Pool

데이터베이스와 연결된 커넥션을 미리 만들어서 풀(Pool) 속에 저장해두고 있다가,
필요할 때 커넥션을 가져다 쓰고 다시 풀에 반환하는 기능을 의미

사용 순서

  1. 풀에서 커넥션을 가져온다
  2. 커넥션 사용
  3. 풀에 커넥션 반납

특징

  • 미리 만들어져 있기 때문에 커넥션 생성하는 시간 소비 X
  • 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 많지 않다
  • 커넥션을 생성하고 닫는 시간을 단축할 수 있기 때문에, 그 만큼 어플리케이션의 실행속도가 빨라지는 장점이 있다
  • 한 번에 생성할 수 있는 커넥션의 수를 정할 수 있기 때문에 동시 접속자 수가 몰려도 웹 어플리케이션이 쉽게 다운되지 않는다

동시 접속자 처리 방법

  • 커넥션 풀에 생성되어 있는 커넥션 갯수는 한정적
  • 동시에 접속자 수가 많아지면 남아있는 커넥션이 없기 때문에 클라이언트는 대기 상태로 전환
  • 커넥션이 반환 되면 대기하고 있는 순서대로 커넥션 제공

커넥션 풀 속성

커넥션 풀은 여러 속성을 이용하여 설정할 수 있다

  • maxActive: 커넥션 풀이 제공할 수 있는 커넥션의 갯수
  • whenExhaustedAction: 커넥션 풀에서 가져올 수 있는 커넥션이 없을 때 어떻게 동작할 지를 설정하는 속성, 0일 경우 에러발생, 1일 경우 maxWait 속성에서 지정한 시간만큼 커넥션을 얻을 때까지 기다림, 2일 경우 일시적으로 커넥션을 생성해서 사용
  • maxWait whenExhaustedAction 속성의 값이 1일 때 사용되는 대가시간을 지정, 단위 1/1000초, 0보다 작을 경우 무한대기
  • maxIdle: 사용되지 않고 풀에 저장될 수 있는 최대 커넥션의 갯수(음수일 경우 제한 없음)
  • minIdle: 사용되지 않고 풀에 저장될 수 있는 최소 커넥션의 갯수
  • testOnBorrow: true일 경우 커넥션 풀에서 커넥션을 가져올 때 커넥션의 유효성 여부를 검사

커넥션 풀을 사용하기 위한 톰캣 컨테이너 설정 방법

  • context.xml 파일에 코드 추가
<Context>
  <Resource
    auth = "Container"
    driverClassName = "oracle.jdbc.driver.OracleDriver"
    url = "jdbc:oracle:thin:@localhost:1521:xe"
    username = "test"
    password = "1234"
    name = "jdbc/Oracle11g"
    type = "javax.sql.DataSource"
    maxActive = "50"
    maxWait = "1000"
  />
</Context>

Java에서 DB 접속하는 방법

1. JDBC 이용 (ConnectionPoolBean 사용)

  • 데이터베이스 제공하는 DBConnection 클래스를 이용해서 DB에 접속
  • 직접 코드에 id, pw, ip등을 입력해서 커넥션 객체를 생성하고, 그 커넥션을 이용해서 DB 제어

2. WAS에서 제공하는 Connection Pool 사용

  • 직접 코드로 DB에 연결하는 것이 아니라 WAS에서 연결 하고, WAS가 연결한 커넥션을 이용
  • WAS가 스타트하면서 동시에 DBConnection 객체를 미리 생성하고, 그 객체를 가져다 쓰면 된다
  • DataSource 사용(Oracle)
  • WAS가 만들어 놓은 커넥션은 각각 커넥션마다 이름이 있다
    Context 객체 생성
    lookup 메서드를 이용해서 매칭되는 커넥션을 찾는다
    DataSource.getConnection()을 이용해서 커넥션 확보
profile
front-end 신입 개발자

0개의 댓글