|
2007년 08월 08일
JSP 프로그래밍에서 쉽게 볼 수 있는 DB를 사용하는 방법대신 왜 DBCP, JNDI Datasource 같은 복잡한 것들을 왜 해야할까요?
DBCP, JNDI에 대한 자세한 정의는 따로 위키등에서 참고하세요. - DBCP는 데이터베이스 커넥션풀링으로 접속객체를 풀에 넣어두고 필요할때 꺼내서 사용하여 성능을 향상시키기 위함입니다. - JNDI(Java Naming and Directory Interface)는 분산된 자원을 디렉토리 형태로 이름지어 검색할 수 있게 하는 것입니다. - 톰캣의 JNDI Datasource 라는 것은 데이터소스를 JNDI를 이용, 찾아서 연결해 사용하자는 것입니다. JNDI Datasource를 이용하면 웹어플리케이션 자체에 DB접속을 위한 잡다한 코드를 넣지 않아도 되므로 환경변화에 유연합니다. 우선 컨텍스트(Context)에 데이터소스를 적어줘야 합니다. 컨텍스트 파일의 작성에 대해서는 Tomcat 5.5에서의 <Context>를 참고하시기 바랍니다. 컨텍스트에 아래와 같이 Resource를 자신의 환경에 맞게 적어줍니다. <?xml version="1.0"?>위에서 driverClassName은 로드할 드라이버를 설정하는 부분입니다. driverClassName와 url의 값은 Java에서 일반적인 DB 접속시 많이 쓰던 것임을 알 수 있습니다. name은 프로그램 코드에서 이 데이터소스를 참조하기 위한 이름입니다. 위에서 com.mysql.jdbc.Driver를 사용하였는데 이런 jdbc 드라이버는 톰캣의 기본 라이브러리가 아니므로 $CATALINA_HOME/common/lib 디렉토리에 mysql-connector-java-버전-bin.jar 파일을 넣어줘야 합니다. DBCP를 위해 필요한 라이브러리는 톰캣에 기본으로 존재하며 naming-factory-dbcp.jar 입니다. DB 드라이버를 로드하고 DBCP에 대한 복잡한 설정을 하는 프로그램 코딩 없이 설정파일에 기술하는 것만으로 JNDI Datasource로 DBCP를 이용하는데 필요한 준비는 끝났습니다. 이제 간단한 소스를 실행하여 문제없이 동작하는지 테스트 해보겠습니다. import javax.naming.InitialContext; import javax.sql.DataSource; try { InitialContext initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB"); //위에서 설정한 데이터소스의 name Connection conn = ds.getConnection(); System.out.println(conn); conn.close(); } catch(Exception e) { e.printStackTrace(); } 위의 코드에 문제가 없다면 org.apache.tomcat.dbcp.dbcp.PoolableConnection@15d4de6 와 같은 결과가 출력됩니다. 이제 Connection 객체를 이용해서 기존과 똑같이 데이터베이스 관련 코딩을 하면 됩니다. JNDI를 이용하여 DataSource를 가져오는 방법은 톰캣만이 가능한것이 아니라 다른 WAS들도 가능합니다. 참조하는 name을 일치시켜주면 기존 프로그램의 코드수정 없이 WAS의 설정파일만 수정하면 됩니다. * Name [jdbc/TestDB] is not bound in this Context 에러가 발생하면 jdbc/TestDB(해당이름)를 JNDI가 찾을 수 없다는 것으로써 * web.xml의 <resource-ref> 설정에 대한 자료도 봤는데 설정하지 않더라도 동작에 문제가 없었습니다. |
ABOUT
이글루 파인더
카테고리
그냥 잡담
※방명록은 따로 없고 무조건 최신글에 댓글 남기시면 됩니다. ^^ 최근 등록된 덧글
아.. 그랬군요.. 지적해주신대로 무지..
by 주책소동 at 11:29 new r(ed l)ight 일까요? ;; by -A2- at 11/08 설치방법을 참고해보세요. http://cod.. by -A2- at 11/08 뉴라이트 = 뉴빨갱이 일지도... ㅠㅠ by rince at 11/08 워프로 이전준비 중에 있습니다. 미리 .. by 주책소동 at 11/08 혹시 노트북이 터치패드 대신 빨콩인가요? ;; by -A2- at 11/08 저도 그렇습니다. ㅎㅎ by -A2- at 11/08 와우! 이거 신기하네요 ㅎㅎ 음 하드웨어.. by 온새미 at 11/08 오오... 저도 쓰고싶지만 그렇게 메이.. by 온새미 at 11/08 저도 한때는 퍼주기라고 생각을 했었는.. by -A2- at 11/08 현 정책에 대한 의견 모두 지극히 옳은.. by 허접 at 11/07 그러니까 저도 깜놀했어요. by -A2- at 11/07 엥 하드웨어적으로 멀티터치를 지원하지.. by 떠돌이 at 11/07 이거 하드웨어적 멀티터치와는 다른거 .. by -A2- at 11/07 오오... 하면서 저는 적용을 하러 가.. by 온새미 at 11/07 저 예비군 훈련 받고나니 신종플루 때문.. by -A2- at 11/05 공감 감사합니다. ^^ by -A2- at 11/05 하긴 정말 그러내요. 저도 칼빈과 M16을.. by 드자이너김군 at 11/05 옳으신 말씀입니다! 저도 이제 곧 군대.. by 온새미 at 11/05 추가 내용 감사드립니다. ^^ by -A2- at 11/04 최근 등록된 트랙백
위드블로그에 블로그관련 리뷰도쓰고 ..
by LovedWeb 위드블로그 초보자 광렙 가이드 by A2공간 - 도움되는 글을 쓰자 '이명박가카' 그만하시죠? : 일제고사.... by 창틀에 걸린 꿈들 올블로그 5주년 기념 고기파티 by √ MIRiyA's AstraLog 올블로그 5주년행사 후기입니다. by 김Su다. 올블로그 5주년 생일파티 다녀왔습니다 by bamboo forest 재수생의 올블로그 5주년 파'뤼' 참석기~! by JANUARYfaceNET 올블로그 5주년 축하합니다! by 시리니 올블로그 5주년 행사에 다녀왔습니다 by Through the Migojarad 올블로그 5주년 생일, 청계산에서 즐겁.. by 새우깡소년, Day of Blog 이전블로그
라이프로그
|