'tomcat'에 해당되는 글 3건
- 2007/08/20 Tomcat DBCP 설정(Oracle 10g) (1)
- 2007/06/26 Tomcat 기반 JSP 개발 환경설정
- 2007/05/05 Tomcat 에서 invoker 사용하기
대부분의 어플리캐이션에서 가장 부하가 많이 걸리는 부분은 DB 에 접속 하는 부분이라고 합니다. 그에따라 대부분의 상용 사이트 혹은 동시접속자가 생기는 솔루션의 경우에는 DataBase Pool 이라는 기법을 이용하여 Connection 되어있는 객체를 생성하고, 요구사항이 있을때 임대해 주는 방식을 많이 사용합니다. 이 부분을 직접 작성해 보는것 또한 많은 것을 학습할 수 있는 기회가 되지만, 실제 서비스되는 곳에 실험적으로 만들어진 코드를 사용하기는 현실적으로 많이 어려운것 같습니다.
따라서 apache 재단의 Java 서브 프로젝트인 jakarta 에서 DBCP 라는 프레임워크(?) 많이들 이용하고 있습니다. 물론, 학습시에 말이죠. :-)
자바를 배워 나아간다는것은, 영업직들의 화려한 활약으로 인해서 EJB 가 필수적인 스킬이 되어 가고 있는 상황이고 EJB 라는 녀석 자체가 초기 투자비용이 워낙 큰 녀석이다보니 WAS 에서 학습시에 세팅에 열을 올리는 대부분의 것들을 자체적으로 지원해 주기 마련입니다. 그래서 DBCP(DB Connection Pool) 에 대한 전반적인 지식이 없이 EJB 로 넘어가는 사례를 많이 보곤 합니다. 하지만 제가 항상 강조하듯이 지식을 끌어안지 못하고 과정을 학습하는것은, 차후에 그것을 기반으로 한 상위의 무언가를 배울때 걸림돌이 될 것이 확실하다고 생각합니다.
그래서 결론은, 'DBCP 에 대한 전반적인 지식을 끌어안고 상위로 나아가자' 가 되겠죠. :-)
항상 포스팅을 할 때마다 느끼는것이지만, 사설이 너무 길어지는거 같습니다.
1> 라이브러리 복사.
2> server.xml ==> <Resource /> 추가
3> context.xml 혹은 server.xml ==> <ResourceLink /> 추가
4> web.xml ==> <resource-ref> ... </resource-ref> 추가
5> TEST!!
1-1> DBCP 라이브러리 복사.
common-collections-3.2.jar
common-dbcp-1.2.1.jar
common-pool-1.3
위의 3개 파일을 <context>/WEB-INF/lib 디렉토리에 복사.
1-2> oracle JDBC 드라이버 파일 복사.
ojdbc14.jar
위 파일을 <context>/WEB-INF/lib 디렉토리에 복사.
[<TOMCAT_HOME>/common/lib 디렉토리에 복사]
2> server.xml 파일의 <GlobalNamingResources> 의 내부태그로 <Resource /> 추가
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/project" password="tiger" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username="scott" />
3> context.xml 혹은 server.xml 파일의 <Context> 의 내부태그로 <ResourceLink /> 추가
<ResourceLink global="jdbc/project" name="jdbc/project" type="javax.sql.DataSource" />
4> web.xml 파일에 <resource-ref> 추가.
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/project</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
5> TEST!!
<%@ page contentType="text/html" pageEncoding="UTF-8"
import="java.sql.*"
import="javax.sql.*"
import="javax.naming.*"
%>
<html>
<head>
<title></title>
</head>
<body>
<%
try {
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:/comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/project");Connection conn = ds.getConnection();
out.write("DB Connection..");
conn.close();
}
catch(Exception e) {
e.printStackTrace();
}
%>
</body></html>
5번 과정을 마친 후 톰캣을 가동하고 웹브라우저에서 실행시 "DB Connection.." 이라는 메시지가 브라우저에 출력이 된다면 연결이 성공한 것입니다. :-)
자바 설치 후 PATH, JAVA_HOME, CLASSPATH 설정.
JAVA_HOME = C:\java\j2sdk
PATH = %PATH%; %JAVA_HOME%\bin;
CLASSPATH = .;
Tomcat 설치 후 CATALINA_HOME 설정.
CATALINA_HOME = C:\tomcat
Java 컴파일러에서 서블릿의 클래스 파일을 인식시키기 위해서 대부분의 서적에서 CLASSPATH 를 설정해 주는 방식을 사용하는것 같습니다. 하지만 매번 새로운 모듈이 필요할 경우마다 설정을 바꾸어 주어야 하는 수고스러움(?)이 발생하는 문제점이 있습니다. 따라서 저는 JAVA_HOME\jre\lib\ext 디렉토리에 해당 모듈을 넣어주는 방식을 선호합니다. :-)
(이 방식은 개발시에 용이하지만, 실제 서비스를 해야 하는 경우라면 CLASSPATH 를 설정해 주는것이 올바른것 같습니다.)
servlet-api.jar, jsp-api.jar 파일을 JAVA_HOME\jre\lib\ext 디렉토리에 복사.
mysql-connector-java-5.0.5-bin.jar 파일을 JAVA_HOME\jre\lib\ext 디렉토리에 복사.
(mysql 버전에 따라 차이가 있습니다.)
여기까지의 설정만을 이용하면 Servlet 및 JSP 에서 MySQL Database 에 접근할 수 있었습니다. 굳이 MySQL 이 아닌 Oracle 이나 MS-SQL 역시 JDBC 드라이버만 JAVA_HOME\jre\lib\ext 디렉토리에 복사해 주면 정해진 API 를 통해 접근이 가능해 지는것을 확인하였습니다.
아직까지 마음에 들진 않지만.. 역시나 배우는 입장이니 시키는 대로 따라가 보아야 겠습니다. :-)
책을 구입하고 느닷없이 시작하는 첫번째 Servlet 예제.
마치 당연하다는 듯이 invoker 를 사용하는데, 문제는 이에관한 주변설명이 전혀 없다는 것입니다. 책이 조금 예전에 발행되었기에 최근에 Tomcat 에서 정책이 변한것인가 싶어서 여기저기 한참 기웃거리다가 알아낸것은, 책이 발행되는 시점에서는 이미 보안상의 이유로 인해서 Tomcat 에서 invoker 는 기본적으로 "주석" 처리가 되어있었다는 것을 알게 되었습니다.
시작부터 책에 실망을 조금 하게 되는군요. :-)
[Tomcat_Home]/webapps/project/WEB-INF/web.xml 파일
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
</servlet>
invoker 을 설정해 주는 부분과
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
invoker 을 매핑해 주는 부분을 작성해 줍니다.
([Tomcat_Home]/conf/web.xml 을 수정하는 경우에는 각각에 해당하는 주석을 제거해 줍니다.)
[Tomcat_Home]/conf/context.xml 파일
<Context reloadable="true" privileged="true">
옵션을 준다.
보안상의 이유와, 하나의 서버에 여러개의 Web Application 이 동시에 작동하는 경우에 이런식으로 컨테이너 전체의 설정을 변경해야 하는 방식은 옳지 않다는 생각이 들었습니다. 아직은 첫발을 내딛는 입장이기 때문에 일단은 시키는 대로 따라가 봐야 겠습니다.
[2007.6.26] 각각의 독립 Application 에 invoker 설정하는 법을 알아내어(?) 수정하였습니다. :-)

Prev

