3. ConnectionPool을 이용한 데이터베이스 연결
웹 어플리케이션에 있어서 다중 사용자에 대한 서비스의 중요성은 더 이상 말하지 않아도 실감할 것이다. ConnectionPool을 통해서 기존에 연결되어 있는 커넥션 객체를 사용하는 것은 직접 데이터베이스와 연결했을 때보다 효율적이게 된다. jsp 페이지에서 직접 데이터베이스에 연결하는 것이 아니고 DBConnectionMgr에 있는 미리 생성되어 있는 커넥션 객체를 사용한다. 그리고 사용 후 커넥션 객체를 다시 DBConnectionMgr에 반환하면 다른 페이지에서도 커넥션을 새로 생성시키지 않고 회수된 커넥션들을 재사용할 수 있어 자원 운용이 효율적이게 된다.
■ ConnectionPool 사용에 있어서..
서버는 웹서버, 데이터베이스 서버 등으로 구성되어 있다. 많은 사용자로부터 들어온 요청을 서버 측에서는 처리할 수 있어야 한다. 서버 측에서는 요청에 맞는 정적인 페이지, 이미지, jsp 페이지 등을 처리하면서 데이터베이스에 있는 자료가 필요한 경우, 데이터베이스에 연결을 해서 필요한 자료를 데이터베이스 서버로부터 가져와서 그 정보를 포함한 페이지를 다시 응답으로 제공한다. 이때 사용자가 한꺼번에 많이 몰릴 경우(트래픽이 많이 걸릴 경우) 요청이 많을 때 서버 측은 요청에 맞는 파일을 생성하고, 필요하면 데이터베이스에 연결해서 자료를 찾고, 필요한 자료를 찾은 뒤 데이터베이스에 연결을 해제하고, 다시 필요하면 연결하고 연결을 해제하고, 끊었다, 닫았다를 수없이 되풀이하게 된다. 게다가 데이터베이스에 연결하는 부분은 서버에 많은 부하를 준다. 이러한 부하를 줄이기 위해 데이터베이스에 연결하는 커넥션을 관리하기 위해 커넥션 풀을 사용한다.
◆ ConnectionPool을 통한 데이터베이스 연결방법
DBConnectionMgr pool = DBConnectionMgr.getInstance(); // 데이터베이스 연결 풀 객체를 얻는다.
conn = pool.getConnection(); // 얻어진 풀로 Connection을 얻는다. 주어진 Connection을 통해서 데이터베이스에 필요한 질의를 던지고 받는 등의 업무를 처리한다.
pool.freeConnection(conn); // 마지막으로 사용된 Connection을 반환한다. 이는 얻어진 풀 객체를 재사용하기 위해 닫지 않고 풀에 반환한다.
※ 주의 - 데이터베이스 연동 프로그램시 단계
드라이버 로딩, 커넥션 연결, 질의 전송, 결과 처리의 단계가 있다. 하지만 커넥션 풀을 사용하면 커넥션 풀에서 드라이버 로딩과 커넥션에 대한 관리를 해주기 때문에 커넥션 풀을 통해 커넥션을 얻어 오기만 한다. 그리고 나중에 얻어진 커넥션을 다시 풀에 반환한다. 우선 풀로부터 커넥션을 얻고 나서 질의를 전송하고, 결과를 받아서 처리하는 작업이 행해져야 한다.
3-1. ConnectionPool과 Bean을 이용한 데이터베이스 연결
jsp 페이지에서 데이터베이스 관련 코드를 RegisterMgrPool에 분리해서 데이터베이스 관련 코드를 이용한 질의를 수행하는 등의 작업을 한다. 이때 RegisterMgrPool은 데이터베이스에 연결할 때 미리 생성되어 있는 커넥션 객체를 하나 빌려 사용하고, 사용 후에는 반환을 하는 식의 효율적인 구성이 된다. 그리고 RegisterMgrPool에서 수행된 질의에 대한 결과는 자바 빈즈에 담겨서 JSP파일에서 이용할 수 있다. (굵게)이 빈즈를 사용하는 jsp페이지는 JSP 전용 태그로서 빈즈 값을 얻어올 수 있으므로 데이터베이스 관련 코드가 없고 전용 태그가 사용된다. 그래서 태그 중심의 간략한 페이지를 작성할 수 있게 된다. 추후 페이지 디자인 변경 등의 작업이 요구될 때에도 데이터베이스 관련 로직이 변하지 않는다면 jsp 페이지를 쉽게 변경할 수 있다.
'IT || 개발공부' 카테고리의 다른 글
[JDBC] ConnectionPool을 사용한 데이터베이스 연결 기능 향상 (0) | 2023.02.27 |
---|---|
[JDBC] JDBC 드라이버 타입 / JDBC API (0) | 2023.02.19 |
[JDBC] JDBC (0) | 2023.02.19 |
[JSP] 자바 빈즈에 대한 궁금증 (자바빈즈) (0) | 2023.02.18 |
[Java/JSP] 빈을 이용한 JSP 파일 예제 (자바 빈즈 / 자바 빈즈 id, name) (0) | 2023.02.16 |
댓글