|
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 01:38 아~ 무슨 말인가 했네요. ㅋㅋ 아마 20일.. by -A2- at 09/06 네... 쪼금;; by -A2- at 09/06 회사 워크샵 다녀오느라 3일간 인터넷을.. by -A2- at 09/06 생일 축하드려요. ^^ 저 위에 Dr.지.. by -A2- at 09/06 안녕하세요. 워크샵 갖다오느라 무척 늦.. by -A2- at 09/06 A2님 있잖아...! by 봄날 at 09/05 이런 효과를 누리려고 포스팅을 안하시.. by 명이 at 09/05 새 포스팅을 자제 하는 이유는 댓글 수 .. by Dr.지존 at 09/05 오늘은 퓨이 생일이에요 축하해주세요 .. by 퓨이 at 09/04 어제밤 앞자리에 아저씨랍니다. 어제는.. by tellmegame at 09/04 앗! 그런 생각은 못했어요. ㅡㅡa by -A2- at 09/04 에잉~ 요리 포스팅 자제한다니까요. ㅋㅋ by -A2- at 09/04 사랑빼고 다 아는 프로그래머.. 근데 여.. by 산골소년 at 09/03 A2님-------- 멋진! 포스팅이에요 .. by 퓨이 at 09/03 댓글이 일정수준 달릴때까지 새로운 포.. by -A2- at 09/03 어떻게 하면 댓글 46개 달리는거지? 사랑.. by Dr.지존 at 09/03 기연인가요? ^^; 제 블로그는 좀 잡다해.. by -A2- at 09/02 사랑빼고 다 아는 프로그래머;; by -A2- at 09/02 토닥토닥... by -A2- at 09/02 최근 등록된 트랙백
.:.*.:.경 축.:.*.:. 올블로그 다독왕 ..
by 오늘도 감사의 이유는 86,400가지. 저도... by 900gle.info 숙취에 좋은 보리차에 밥말아 먹기. by 감성 일기 [맛] 오븐만 있으면 하는 통닭 바베큐 by 900gle.info 블로그 다독왕..... by wAck 전남 영광 시골 돼지고기로 뭉친 한 블.. by 서명덕기자의 人터넷 세상 ▶모든 블로.. 우사인 볼트.. 그가 100미터에서 마지막.. by monolog kz의 생각 by keizie's me2DAY 뭔가 나왔네요. - 올블로그 놀이터? by 블로그스터디 [아이모리 2.0 리뷰] 디카북이 도착.. by -kyoe- 하루세번 。。 와 닿는 글.. by For Dr.Zizone 올블의 소외된 블로거 일병 구하기 프.. by 마음의 안정을 찾기 위하여 베이컨 초밥 by 컴속의 나, 꽁트를 쓰다 A2의 알림 by ani2life's me2DAY A2의 알림 by ani2life's me2DAY 돈"많"아서 공부하는것이.. by keya.wo.tc :: 본진 메타푸의 생각 by metafoo's me2DAY 차명진왈, 노 대통령이 운영체제 개발 by 도아의 세상사는 이야기 택배회사를 고발합니다! 도와주세요!!!!! by 마음의 안정을 찾기 위하여 A2의 느낌 by ani2life's me2DAY 이전 블로그
라이프 로그
|