- 커넥션 풀(Connection Pool)
- 데이터베이스와 연결된 커넥션을 미리 만들어서 풀(Pool) 속에 저장해두고 필요할 때 커넥션을 가져다 쓰고 다시 풀에 반환하는 기능을 의미한다.
- 사용 순서
- 풀에서 커넥션을 가져온다.
- 커넥션을 사용한다.
- 풀에 커넥션을 반납한다.
- 장점
- 미리 만들어져 있기 때문에 커넥션을 생성하는 시간이 소비 되지 않는다.
- 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 많지 않다.
- 커넥션을 생성하고 닫는 시간을 줄일 수 있기 때문에 그만큼 어플리케이션 실행속도가 빨라진다.
- 한번에 생성할 수 있는 커넥션의 수를 정할 수 있기 때문에 동시에 접속자 수가 몰려도 웹 어플리케이션이 쉽게 다운되지 않는다.
- 동시 접속자 처리 방법
- 커넥션 풀에서 생성되어 있는 커넥션의 개수는 한정적이므로 동시에 접속자 수가 많아지면 남아있는 커넥션이 없기 때문에 클라이언트는 대기 상태로 전환된다.
- 커넥션이 반환되면 대기하고 있는 순서대로 커넥션이 제공된다.
- 커넥션 풀의 속성
- 커넥션 풀은 여러 속성을 이용하여 설정할 수 있다.
- maxActive
- 커넥션 풀이 제공할 수 있는 커넥션의 개수
- whenExhaustedAction
- 커넥션 풀에서 가져올 수 있는 커넥션이 없는 때 어떻게 동작할지 설정하는 속성
- 0일 경우 에러발생
- 1일 경우 maxWait 속성에서 지정한 시간만큼 커넥션을 얻을 때까지 기다림
- 2일 경우 일시적으로 커넥션을 생성해서 사용
- 커넥션 풀에서 가져올 수 있는 커넥션이 없는 때 어떻게 동작할지 설정하는 속성
- maxWait
- whenExhaustedAction 속성 값이 1일 때 사용되는 대기시간을 지정
- 단위 1/1000초, 0보다 작을 경우 무한대기
- maxIdle
- 사용되지 않고 저장될 수 있는 커넥션의 최대 개수
- 음수일 경우 제한이 없다.
- minIdle
- 사용되지 않고 풀에 저장될 수 있는 커넥션의 최소 개수
- testOnBorrow
- true일 경우 커넥션 풀에서 커넥션을 가져올 때 커넥션의 유효성 여부를 검사한다.
- testOnReturn
- true일 경우 커넥션 풀에 커넥션을 반환 할 때 커넥션의 유효성 여부를 검사한다.
- maxActive
- 커넥션 풀은 여러 속성을 이용하여 설정할 수 있다.
- 커넥션 풀을 사용하기 위한 톰캣 컨테이너 설정 방법
- 톰캣 Context.xml 파일에 코드를 추가한다.
- Java 프로그램에서 DB 접속하는 방법
- JDBC를 이용하는 방법 (ConnectionPoolBean을 이용)
- 데이터베이스에서 제공하는 DB커넥션 클래스를 이용해서 DB에 접속하는 방법
- 개발자가 직접 코드에 아이디와 비밀번호, IP등을 입력해서 커넥션 객체를 생성하고 그 커넥션을 이용해서 DB를 제어하는 방법
- WAS에서 제공하는 Connection Pool을 사용하는 방법
- 개발자가 코드에서 직접 DB에 연결하는 것이 아닌 연결을 WAS(톰캣, 제우스, Weblogic)가 하고, 사용자는 WAS가 연결한 커넥션을 이용하는 방법
- WAS가 시작하면서 동시에 데이터베이스 커넥션 객체를 미리 생성하고 개발자는 그 객체를 그냥 가져다 사용하며 DataSource를 이용하는 방법이다.
- 당연히 아이디와 비밀번호는 필요없다. (WAS가 알아서 접속한다.)
- WAS가 만들어 놓은 커넥션은 각각 커넥션마다 이름이 있다.
- 톰캣에서 제공하는 커넥션풀 사용 순서
- Context 객체를 생성한다.
- lookup()을 이용해서 매칭되는 커넥션을 찾는다.
- DataSource.getConnection()를 이용해서 커넥션을 확보한다.
- JDBC를 이용하는 방법 (ConnectionPoolBean을 이용)
old posting/JSP