참조 사이트 - http://hgh73.blog.me/90071375211


안녕하세요 저는 길당 이라 합니다...

자카르타 톰캣의 설치에 이어 환경설정에  관한 글을 올립니다...

=================================================================================

 

 

[환경 설정]

 

[아파치 웹 서버와 톰캣 연결]

 

일반적으로 J2EE 컨테이너는 독립적으로 사용되기보다는 웹 서버와 연동해서 사용되는 경우가 더 많다. 물론 톰캣 자체에도 웹 서버 기능이 내장되어 있지만 톰캣만으로 서비스를 구성하지 않고 아파치 웹 서버 혹은 IIS와 같은 외부 웹 서버를 이용하는 것이 바람직하다.

 

그 이유로는 톰캣에 포함되어 있는 웹 서버 기능은 다른 상용 혹은 웹 서버에 비해서 성능 상으로 많이 떨어진다. 구축하고자 하는 시스템이 서블릿/JSP 뿐만 아니라 펄, PHP, ASP 등 다양한 기술을 이용해서 서비스를 이용해야 하는 경우 톰캣만으로는 불가능하기 때문이다.

 

그 외에 하나의 서버에 웹 서버와 웹 컨테이너를 모두 설치하여 사용하는 경우 시스템에 많은 부하를 주게 되며 하나의 시스템 장애로 인해 모든 서비스가 정지되는 문제가 있어 각각 다른 서버에서 서비스를 하는 것이 여러모로 유리하다.

이렇게 웹 서버와 웹 컨테이너를 분리하기 위해서는 웹 서버를 시작점으로 해서 웹 컨테이너로 요청을 보내도록 시스템 구성을 하여야 한다. 어쨌든 이 책에서는 하나의 시스템에 웹 서버와 웹 컨테이너를 모두 설치해서 진행하지만 분리 방안에 대해서도 한번 생각해 보는 것이 바람직하다.

 

톰캣과 아파치 웹 서버와 연결하는 방법은 크게 두 가지가 있다.

 

첫 번째로 가장 범용적으로 쓸 수 있는 커넥터가 APJ이다. 현재 1.3 버전까지 나와 있는데 이 버전의 장점은 톰캣의 버전과 아파치 웹 서버의 버전에 관계없이 사용할 수 있다는 점이다. 특히 톰캣 3.x 대 버전을 사용하거나 아파치 웹 서버 2.x 대 버전을 사용한다면 현재는 APJ가 유일한 연결 방법이며 IIS와도 연결이 가능하다.

 

두 번째 방법은 WARP 커넥터를 이용하는 것으로 WARP는 APJ에 비해서 설정하기 편리하며 좀더 좋은 성능을 발휘한다. 이러한 이유로 일반적으로 톰캣 4.0 버전에서는 WARP를 이용한 연결을 사용하며 이 책에서는 WARP 방식을 이용한 연결을 소개하도록 하겠다.

WARP를 이용해서 아파치 웹 서버와 톰캣을 연결하는 작업은 다음 절차를 따른다.

 

① WARP 모듈을 다운로드
② 아파치 웹 서버에 WARP 모듈 인식시키는 작업
③ 아파치 웹 서버에 톰캣의 정보 설정
④ 서비스하고자 하는 톰캣의 웹 어플리케이션 지정

그럼 위의 4가지 절차에 따라 하나 하나 알아보도록 하자.

 

이 글을 쓰는 현재에 
http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/linux/i386/에서 mod_webapp.so에서 WARP 커넥터를 다운로드 받을 수 있다.


이 파일의 위치는 톰캣 버전이 변경되거나 WARP 버전이 업그레이드 될 때마다 다운로드 받은 위치가 변경되곤 한다.

 

다운로드한 mod_webapp.so를 $(APACHE_HOME)/libexec로 복사하자.

 Libexec 디렉토리는 아파치 웹 서버에 추가 모듈을 설치할 때 해당 모듈을 저장하는 곳이다. 특히 아파치 웹 서버를 소스 코드 상태에서 컴파일해서 설치하였을 경우 반드시 DSO를 설정해서 설치해야 한다.


그래야만 추가 모듈을 인식시킬 수 있다. 저장을 했으면 아파치 웹 서버에 해당 모듈을 인식시키는 작업을 해야 한다. $(APACHE_HOME)/conf/httpd.conf 파일에 다음 내용을 추가하도록 하자.

 


 

 

 

LoadModule webapp_module libexec/mod_webapp.so

 

AddModule mod_webapp.c

 

이상으로 톰캣의 설치와 실행 및 종료 방법에 대해서 알아보았다. 다음은 아파치 웹 서버와 톰캣을 연결해서 서비스를 제공하는 방법에 대해서 알아보도록 하겠다.

 

위의 두 가지 내용은 httpd.conf의 적당한 위치에 각각 추가하도록 하자. 한가지 주의할 점은 반드시 LoadModule이 AddModule 보다 먼저 나와야 한다.

 

그럼 정상적으로 httpd.conf 파일이 작성되었는지 테스트하기 위해 다음 명령을 수행하자.

 

$(APACHE_HOME)/bin/apachectl configtest

 

위의 명령을 수행하면 httpd.conf의 문법에 이상이 없는지를 확인한다. 이상이 없으면 'Syntax OK' 메시지가, 이상이 있으면 문제가 있는 줄의 번호와 간단한 이유를 보여준다.

 

 

[그림 6]과 같은 결과를 얻었다면 일단 환경 설정 상으로는 문제가 없는 것이며 해당 모듈을 아파치 웹 서버가 인식할 수 있다는 것을 의미한다. 그 다음으로 할 일은 아파치 웹 서버에게 톰캣과 관련된 정보를 인식시켜 주는 것이다.


가장 일반적인 예로 톰캣에서 샘플로 제공되는 웹 애플리케이션과 아파치 웹 서버를 연결하는 것으로 다음 내용을 $(APACHE_HOME)/conf/httpd.conf에 추가하자.

 

 

<IfModule mod_webapp.c>

WebAppConnection conn warp localhost:8008

WebAppDeploy ROOT conn /

WebAppDeploy examples conn /examples

WebAppinfo /webapp-info

</IfModule>

 

위의 내용이 전형적으로 WARP를 이용한 연결 예이다. 대부분의 아파치 웹 서버와 톰캣 연결에 대한 설명에서 이 예를 사용하는데 각각의 내용에 대해서 하나 하나 짚고 넘어가보자.


우선 해야 할 것은 자카르타 톰캣이 위치한 서버의 IP 주소 혹은 도메인 네임과 서비스되고 있는 포트를 지정하는 것이다. 이 역할이 WebAppConnection이다. 먼저 첫 번째 줄에 위치한 다음 내용을 분석해 보자.

 

 

여기서 conn은 톰캣에 연결할 연결 명을 의미하며 warp는 WARP 방식으로 하겠다는 의미이다. 여기에서 현재 사용 가능한 연결 방식은 WARP 밖에 존재하지 않으므로 반드시 warp라고 기록해 주어야 한다.


그 다음에 톰캣의 주소를 입력하면 된다. 아파치 웹 서버와 톰캣이 동일한 서버에 위치해 있다면 localhost로 입력하고, 다른 서버에 위치한다면 해당 서버의 위치를 지정해 주면 된다. 그 다음에 나오는 8008은 WARP 서비스 포트이다.

 

일반적으로 톰캣의 서비스 포트는 8080을 이용한다. 그러한 이유로 이곳에 8080을 기입하는 경우가 종종 있는데 그것은 잘못된 설정이다. 톰캣의 서비스 포트와 WARP의 접속 포트는 항상 별개로 동작한다.

 

그러므로 반드시 WARP 서비스 포트를 기입해야 하며 기본값이 8008이다. 이 포트 번호를 수정하고자 한다면 $(CATALINA_HOME)/conf/server.xml에 다음과 같은 환경 설정 내용이 있는데 여기서 port 값은 변경해 주면 된다.

 


톰캣 뿐만 아니라 J2EE에 규정된 모든 서블릿 컨테이너들은 웹 환경의 서비스를 제공하기 위해서는 최소한 하나의 웹 애플리케이션이 존재해야 한다.

 

여기서 말하는 웹 애플리케이션이란 웹 서비스를 제공하기 위한 자원들 즉 서블릿, JSP, 자바 빈즈, 이미지, HTML 들을 모아 놓은 그룹이다. 서블릿 컨테이너들은 여러 개의 웹 애플리케이션이 모여서 하나의 도메인을 구성한다. 톰캣의 경우는 기본적으로 ROOT, sample, manager 웹 애플리케이션을 제공하고 있다.

 

ROOT는 가장 기본이 되는 웹 애플리케이션으로 아파치 웹 서버에서 DocumentRoot에 해당하는 부분이다.

 

Sample은 톰캣을 설치하고 간단히 테스트해 볼 수 있는 서블릿과 JSP 예제들을 모아 놓은 부분이며 manager는 톰캣에 웹 애플리케이션을 정의하고 제거하며 기타 여러 가지 관리 기능을 제공하지만 그 기능이 아주 미약하고 사용하기 불편해서 거의 사용하지는 않는다.

 

위의 예에서 WebAppDeploy 항목이 톰캣에 존재하는 웹 애플리케이션을 아파치 웹 서버에게 알리는 역할을 한다. 만일 톰캣에 웹 애플리케이션이 존재하더라도 WebAppDeploy에 기입하지 않았을 경우에는 아파치 웹 서버에서는 이 내용에 대해서 인식하지 못한다. 다음 내용을 분석해 보자.

 

 

처음 WebAppDeploy는 웹 애플리케이션을 배포하겠다는 의미이며 examples는 해당 웹 애플리케이션의 이름이다.

 

이 이름은 톰캣에 정의되어 있어야만 한다. 그 다음을 해당 웹 애플리케이션이 어떠한 WARP 연결을 통해 서비스를 제공하겠냐는 의미이다. 앞서 우리는 conn이 하는 WARP 커넥터를 정의하였다.

 

그 다음에 나오는 것이 중요한데 /examples가 나타내는 의미는 해당 웹 애플리케이션에 웹 브라우저를 이용해 접속할 때에 필요한 URL 이름이 된다. 이렇게 정의된 웹 애플리케이션은 웹 브라우저에서 다음과 같은 형태로 접근하게 된다.

 

http://<domain-name>/examples

 

이 내용들을 자신의 환경에 맞게 적절히 적용시킨 후에 다시 아파치 웹 서버의 환경 설정을 검증해 보자. [그림 7]과 같은 결과가 나오면 성공적으로 환경 설정이 이루어졌음을 의미한다.

 

 

 

 

환경 설정이 완료되었으니 다음 두 개의 URL로 접속해 보자.

 

http://<domain-name>/examples/j네/index.html


http://<domain-name>:8080/examples/j네/index.html

 

첫 번째 URL은 아파치 웹 서버를 통해 톰캣에 접속한 것이고 두 번째 URL은 톰캣에 직접 접속한 것이다. 위의 내용이 동일하게 보인다면 WARP 설정은 완성된 것이다.

 

 

 

 

[JDBC 환경 설정]

 

JDBC란 뒤에 자세히 설명하겠지만 자바에서 데이터베이스 처리를 하기 위한 기술이다.

 

JDBC 연결을 하는 것은 상당히 쉬우며 DBMS에 맞는 JDBC 드라이버를 다운로드 받아서 클래스패스에 해당 드라이버를 추가해 주는 것으로 끝난다. 현재 나오는 대부분의 DBMS들은 JDBC를 지원하고 있다. 하지만 애석하게도 MySQL은 공식적으로 JDBC를 지원하지 않고 있으며 그러한 이유로 공식적인 JDBC 드라이버도 없다. 

다만 여러 서드 파티에서 드라이버를 제공한다. 다음 제품들이 MySQL에서 JDBC를 사용할 수 있는 드라이버이다.

·

mm JDBC 1.2 드라이버 · mm JDBC 2.0 드라이버
· 상업용 Resin JDBC 드라이버 · TWZ 드라이버

 

이 중에서 가장 많이 사용되는 드라이버는 mm 드라이버로 1.2 버전은 
http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-1.2c.tar.gz 에서 받을 수 있으며 2.0 버전은 http://www.mysql.com/Downloads/Contrib/mm.mysql-2.0.4-bin.jar 에서 받을 수 있다.

[나는 현재 여기에서 받았다. http://mmmysql.sourceforge.net/oldDist.html ]

 

 

이 책에서는 mm JDBC 2.0 드라이버를 이용하도록 하겠다. 이 드라이버가 현재 JDBC 2.0을 지원한다고는 하나 아직 완벽한 지원을 하는 것은 아니고 일부 기능만을 제공한다.

 

드라이버를 다운로드 받았다면 이제 JDK와 톰캣에 인식을 시켜야 한다. 한 가지 주의할 점은 JDK의 클래스패스와 톰캣의 클래스패스는 동일하지 않다는 점이다. 그러므로 두 곳 모두 인식을 시켜야 하는데 톰캣의 경우 간단하게 다음 디렉토리에 저장하면 자동으로 인식한다.

 

$(CATALINA_HOME)/common/lib

 

위의 디렉토리는 MySQL 드라이버뿐만 아니라 톰캣과 관련된 다양한 자바 라이브러리를 저장하는 곳으로 활용하면 좋다.
이제 JDK에 인식을 시켜야 하는데 JDK는 다음과 같이 CLASSPATH를 수정함으로써 해결하도록 하자.

 

CLASSPATH=.:$CATALINA_HOME/common/lib/servlet.jar:$CATALINA_HOME/common/lib/mm.mysql-2.0.4-bin.jar

 

 

설정이 완료되었으면 MySQL에 접속하는 자바 애플리케이션을 만들어 보자. JSP에서도 마찬가지로 JDBC로 MySQL에 접근하므로 다음 예제와 겅의 동일한 형태로 이루어진다.

[<리스트1> DriverManageExample.java]

 

 

 

<리스트 1>은 단지 데이터베이스에 연결 가능 여부를 판단하는 예이다.

 

특별히 SQL을 이용한 데이터베이스 처리 내용은 담겨 있지 않지만 JDBC를 처음 접하는 개발자들의 대부분이 데이터베이스에 연결하는 방버으로 고민하고 있는 것을 보면 위의 예제는 나름대로 큰 의미가 있다고 할 수 있다.


<리스트 1>을 수행하면 Access denied 에러가 날것이다. JDBC를 연결할 때에는 사용자와 비밀번호를 입력해야 하기 때문이다. <리스트 1>의 내용 중 user 부분과 password 부분을 Mysql의 mysql 데이터베이스의 user 테이블에 등록된 사용자로 변경해 주자.

 

Connection con = DriverManager.getConnection(dbURL, "user", "password");

 

만일 MySQL이 다른 리눅스 서버에 설치되어 있다면 해당 서버의 도메인 네임 혹은 IP를 이용해야 하며 다음 내용을 적절히 수정해서 사용하기 바란다.

 

String dbURL = "jdbc:mysql://localhost:3306/test";

 

위의 문자열을 흔히 JDBC URL이라고 한다. 여기서 'jdbc:mysql://'은 MySQL에 JDBC를 사용하기 위해 필요한 것이며 그 이후에 MySQL의 위치와 포트 번호 그리고 최종적으로 접근하고자 하는 DB의 이름이다.

 

자바에서 데이터베이스를 활용하기 위해서는 java.sql 패키지를 이용해야 한다. 이 외에도 J2EE API에는 javax.sql 패키지도 있지만 이 책에서는 이용하지 않겠다.

 

Java.sql 패키지에는 DB와 관련된 많은 클래스와 인터페이스가 있지만 그 중에서 데이터베이스 연결과 관련된 것은 Driver, DriverManager, Connection 클래스이다. 이 중에서 Driver의 경우 잘 사용되지 않으며 대부분 DriverManager와 Connection을 이용해 연결을 수행한다.

 

DriverManager는 메모리에 로드된 드라이버를 관리해 주는 역할을 한다. 특히 중요한 역할은 해당 애플리케이션이 여러 종류의 데이터베이스를 처리해야 하거나 다양한 종류의 드라이버를 사용할 필요가 있을 경우에 DriverManager를 이용한 처리가 반드시 필요하다.

 

여러 종류의 드라이버가 DriverManager에 등록되면 DriverManager에게 원하는 데이터베이스 연결을 요청하게 된다. 이 때 DriverManager에서는 요청한 JDBC URL을 분석해서 적절한 드라이버를 이용해 Connection 객체를 리턴한다.

 

그 이후에 데이터베이스 처리와 관련된 모든것들은 Connection 객체를 통해서 이루어지며 Connection 객체가 종료가 되면 다른 모든 처리 역시 종료된다. 이 때 한 가지 주의할 것이 있다.

 

자바는 C++과는 다르게 객체의 해제를 가비기 컬렉션을 이용해서 자동으로 제거해 주는데 예외적으로 몇몇 객체들은 가비지 컬렉션 대상에서 제외된다. 대표적인 것이 데이터베이스 연결 객체인 Connection과 소켓 객체인 Socket 등이 있다.

 

이 객체들은 close 메소드를 호출해서 종료하지 않는 한 계속해서 시스템에 남아 있게 되며 그 만큼 시스템에 많은 부담을 주게 되는 것이다. 그럼 이제 JSP를 사용하기 위한 환경 설정이 완료되었다. 본격적으로 JSP에 대해서 알아보도록 하자.

 

[tip] mysql 설정하기

 

 

 

 

 

'Web > WAS' 카테고리의 다른 글

context 생성 및 Class, jar 파일 배포 위치  (0) 2012.01.20
WAR 파일  (0) 2012.01.20
tomcat - 성능 튜닝 및 JVM 옵션  (1) 2012.01.18
톰캣디렉토리 구조  (0) 2011.12.27
오라클, 클라우드 위한 ‘웹로직 서버12c’ 발표  (0) 2011.12.13
Posted by linuxism
,