관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스를 이용한 회원 관리 시스템 구축하기 1 - 데이터베이스 커넥션 풀 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스를 이용한 회원 관리 시스템 구축하기 1 - 데이터베이스 커넥션 풀

huenuri 2024. 12. 15. 14:27

여기서부터는 새로운 단원 학습을 진행하게 된다. 데이터베이스를 사용해 회원관리 시스템을 구축하는 것이다.


 

 

 

 

데이터베이스 커넥션 풀

자바에서 오라클로 쿼리문을 실행하기 위해서 첫 번째로 해야 할 작업은 오라클 접속 권한을 얻기 위한 환경 설정이다. 오라클을 사용하기 위해서는 접속 요청을 하여 연결된 상태가 되어야 한다. 이를 커넥션이라고 한다. 커넥션을 얻는 작업은 오라클을 사용하기 위해 반드시 선행되어야 한다.

하지만 웹 페이지에 접속자의 수가 많게 되면 커넥션을 그만큼 걸어주어야 하기 때문에 서버에 부하가 발생하여 서버가 다운되는 현상까지도 발생할 수 있다. 이러한 문제점을 해결하기 위해서 존재하는 것이 커넥션 풀이다.

 

DBCP DataBase Connection Pool(데이터베이스 커넥션 풀)는 접속 인원이 많은 웹 페이지에서 데이터베이스의 효율성과 속도를 높이기 위해 사용한다. DBCP는 DBCP 매니저가 어느 정도의 연결을 확보해 놓고 있다가 클래이언트의 요청이 들어오면 연결해 주고, 클래이언트 작업이 다 끝나면 연결을 다시 DBCP 매니저에게 반환하게 만드는 것이다.

 

 

위 그림은 데이터베이스 풀 기법의 대략적인 개념을 설명한 그림이다. 일단 데이터베이스에 연결되는 부분은 A 부분인데, 5개가 항상 데이터베이스와 접속한 상태이다. 이런 경우에 DB POOL 부분에 항상 5개의 인스턴스(데이터베이스 연결)가 준비되어 있기 때문에 외부에서 클라이언트가 5명이 항상 동시 접속해서 사용할 수 있다.

만약에 연결을 시도하는 클라이언트가 6명이라면, 5명은 DB POOL에 접속해서 서비스를 받을 수 있지만, 1명의 클라이언트는 접속이 허용될 때까지 기다려야 한다. DB POOL에 열어놓은 풀 개수는 옵션을 이용해 수정할 수 있도록 되어 있다.

이러한 데이터베이스 풀 기법은 직접 만들어서 사용할 수 있지만 여기서는 아파치 서버에서 제공해주는 소스를 사용하도록 할 것이다.


 

 

 

 

[직접 해보기] DBCP 설치하기

 

1. 새로 만든 프로젝트에 오라클 드라이버와 JSTL을 위한 jar 파일 복사하기

 

 

 

 

2. JSP 파일 만들고 실행하기

Context Path는 여러 개의 웹 애플리케이션이 WAS에서 동작할 경우 이를 구분하기 위한 것으로 톰캣 서버의 환경 설정을 위한 serve.xl 파일에 <Context> 태그를 추가해야 컨텍스트 패스가 설정된다.

하지만 이클립스를 사용하여 웹 프로젝트를 개발할 경우에는 이 태그가 자동으로 추가된다. 우선 새 페이지를 추가하고 이를 실행한 후 <Context> 태그가 추가되었는지 확인해보겠다.

 

 

 

 

하지만 오류가 뜬다. 오류 메시지와 코드를 보면, InitialContext 클래스의 생성자에서 잘못된 매개변수를 사용하여 문제가 발생한 것으로 보인다. InitialContext의 생성자는 매개변수가 없거나 Hashtable을 매개변수로 받는다. 하지만 현재 코드에서는 new InitialContext(1);로 작성되어 있어 오류가 발생한다.


 

 

 

 

3. 코드 수정하기

 

 

 

 

JAR를 라이브러리에 추가하지 않아서 생긴 문제인 줄 알았는데 그건 아니었다. 이 오류 메시지는 jdbc/myoracle이라는 JNDI 리소스가 현재 컨텍스트에 바인딩되지 않았음을 나타냄으로, JAR 파일 문제라기보다는 JNDI 설정과 관련이 있을 가능성이 높다. 이제부터 하나하나 해결해 보겠다.


 

 

 

4. context.xml 설정 확인

Tomcat의 META-INF/context.xml 파일에 JNDI 리소스가 설정되어 있는지 확인해야 한다. 리소스 설정이 되어 있지 않아 다음과 같은 코드를 추가했다.

 

 

  • 위 코드에서 name="jdbc/myoracle" 부분이 JSP 코드의 lookup("jdbc/myoracle")과 매칭돼야 함
  • username과 password 값은 데이터베이스 계정과 일치해야 함

 

 

주석이 많이 달려있었는데 그 부분을 삭제하고 이렇게 JDBC DataSource와 관련된 설정을 추가했다.


 

 

 

 

5. 톰캣 홈페이지에서 코드 가져오기

톰캣 홈페이지에 접속하여 톰캣 서버 9.0에 들어간다.

 

 

 

아파치 홈페이지에 들어가서 자신의 버전에 맞는 톰캣을 선택한 후 10번에 들어간다.

 

 

JDBC DataSorece 항목

 

Apache Tomcat 9 (9.0.98) - JNDI Datasource How-To

JNDI Datasource configuration is covered extensively in the JNDI-Resources-HOWTO. However, feedback from tomcat-user has shown that specifics for individual configurations can be rather tricky. Here then are some example configurations that have been poste

tomcat.apache.org

 

 

 

찾아볼 것

 

여기서 Context 태그의 내용을 붙여 넣으면 된다.

 

 

 

 

 

아래에 조금 내려가면 샘플 코드가 있는데 이걸 조금 전 프로젝트에 붙여 넣어서 사용할 수 있다. 이제 프로젝트를 실행해 보겠다. 난 조금 전에 코드를 수정하며 이 코드를 붙여 넣었기에 따로 작성할 필요는 없었다.


 

 

 

 

6. 코드 다시 실행하기

 

DBCP 연동에 성공했다. 사실 정말 어려워서 1시간도 넘게 걸려 드디어 완성했다. 코드를 분석하면 다음과 같다.

 

 

 

 

 

커넥션이 성공적으로 된 것은 마치 우리가 웹사이트를 사용하기 위해 로그인 과정을 가친 것처럼 JSP에서 오라클을 사용하기 위해 오라클에 접속한 것이다. 


 

 

 

 

학습을 마치고

정말 어려운 내용이었지만 그래도 코드를 잘 수정하여 마침내 프로젝트가 완성되어 얼마나 기쁜지 모른다.  이제 다음 장부터 본격적으로 오라클에 저장된 테이블을 사용해 볼 것이다.

어려움이 많지만 분명 배우는 것도 클 테니까 공부를 멈추지 않겠다.