페이지에서 DB를 연결해야 하는 작업 시, 페이지를 요청할 때마다 커넥션 객체를 생성하게 되면, 프로세스가 늘어나 메모리의 소모가 커진다. 그래서 커넥션 정보를 미리 풀 속에 저장했다가 요청한 페이지에 빌려주고, 끝나면 돌려받는 것이 커넥션 풀(Connection Pool)을 사용한 작업이다. 매번 커넥션 객체를 생성하지 않아도 되고 재사용도 가능하기 때문에 속도도 빠르며 부하를 줄일 수 있다.
커넥션 풀과 함께 JNDI(Java Naming and Directory Interface)라는 것이 필요하다. JNDI는 명명 서비스 및 디렉토리에 접근하기 위한 API로, 파일 외부에 존재하는 특정 자원을 가져와야 할 때 사용하며 따로 다운로드가 필요하기 때문에 가장 보편적인 Apache Commons의 JNDI를 받을 것이다.
JNDI 다운로드
먼저 Apache Commons 홈페이지에 들어가서 아래쪽으로 좀 내려가면 여러 가지 컴포넌트들 중 COLLECTIONS, DBCP, POOL을 받아야 한다.

각각을 눌러서 들어가면 아래에 보이는 것처럼 Releases에 download now 또는 downloads가 있다.

클릭했을 때 COLLECTIONS와 DBCP는 Binaries에 바로 보이는 bin.zip 파일을 다운로드한다.

POOL은 Releases 화면을 한번 더 거쳐야 한다. Apache Commons Pool Downloads page 를 클릭하고 똑같이 Binaies에 bin.zip 파일을 다운로드하면 된다.
모두 받고 나서 압축파일을 각각 풀면서 이클립스를 켜 준다. 아래와 같이 버전 뒤에 아무것도 적히지 않은 jar 파일을 복사한 후, 이클립스 내 프로젝트의 WEB-INF 의 하위인 lib 폴더 안에 3가지를 다 붙여 넣는다.

컬렉션 풀과 JNDI 사용
그럼 이제 META-INF 폴더에 xml 파일을 만들어서 DB 연결 시 필요한 정보들을 모두 DataSource 형태로 저장한다. auth는 컨테이너 자원 관리자를 Application, Container 중 설정하는 것이고, maxActive는 커넥션 회수 대기시간(ms)이다. 참고로 xml 파일 코드에는 주석문을 작성하지 않는 것이 좋다.

그리고 memberDAO 객체의 DB 연결 메서드를 기존의 방식에서 JNDI 사용 방식으로 바꿔준다. DataSource 타입으로 저장된 정보를 찾아(lookup) 커넥션 객체(con)에 저장시키고 예외 처리를 하면 끝이다.

커넥션 풀 방식은 먼저 JSP 페이지 실행 시 DB 연결 요청마다 커넥션을 1개씩 할당한다. 커넥션의 개수는 제한적이기 때문에, 객체 관리자(Container 또는 Application)의 커넥션 사용이 끝나면 다시 회수한다. 여기서 일반적인 커넥션 객체는 자원을 해제할 때까지 유지되지만, 임시 커넥션 객체는 사용 후 바로 사라진다.
커넥션 풀 사용 방식
1. 웹 브라우저의 커넥션 요청
2. 커넥션 객체가 있으면 할당하여 pool에 저장된 정보 전달
2-1. 없을 경우 객체가 반환될 때까지 기다림 (대기시간 초과 시 임시 커넥션 객체 생성)
3. 객체 사용 후 반환
회원정보 조회 및 수정/삭제
저번 로그인/회원가입에 이어서 회원정보를 조회하고, 수정/삭제하는 동작을 해볼 것이다. DB에 연결하는 커넥션만 달라졌을 뿐, 나머지 코드는 별로 다르지 않다. CRUD 동작 중 회원가입은 insert, 정보 수정은 update, 회원탈퇴는 delete, 조회 등은 select로 이루어진다.
1. 회원정보 조회 (select)


2. 회원정보 수정 (update)
update 작업의 경우 보안을 위해 먼저 select로 비밀번호 확인 후 update를 실행한다.



3. 회원정보 삭제 (delete)
delete 작업도 update 작업과 비슷하기 때문에, 선 select 후 delete 한다.



이렇게 하면 JDBC, 자바빈 객체(memberBean/memberDAO), 커넥션 풀, JNDI를 모두 사용하여 DB(MySQL)에 연결을 해본 것이다. 이것은 비즈니스 로직과 디자인을 분리하는 방법들 중 Model1 방식이다. 구현하기 쉽지만 이후 유지보수가 어려워서 잘 쓰이지 않고, 후에 배울 Model2나 MVC 패턴이 대부분의 웹상에서 쓰이고 있다.
'Study > JSP' 카테고리의 다른 글
| [JSP]서블릿(Servlet)과 EL표현식 (0) | 2022.03.10 |
|---|---|
| [JSP]JSTL (core/formatting) (0) | 2022.03.04 |
| [JSP]자바빈(JavaBean) - 이클립스와 MySQL 연결 (0) | 2022.02.20 |
| [JSP]JDBC - 이클립스와 MySQL 연결 (0) | 2022.02.17 |
| [JSP]세션(Session)과 쿠키(Cookie) (0) | 2022.02.10 |