서버 프로그램 Tomcat/server.xml/context.xml

HanSamDul·2022년 9월 29일
0

Apache Tomcat

서블릿 컨테이너가 있는 웹 애플리케이션 서버(WAS), 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공.
(자바 서버 페이지(JSP)와 자바 서블릿텍스트이 실행할 수 있는 환경을 제공)


▲ Tomcat은 다음과 같은 폴더 구조를 가진다.


▲ 실제 사용 중인 Tomcat 서버 폴더 구조를 보면 같은 것을 확인할 수 있다.


▲ conf 폴더는 Tomcat 서버 전체 설정 폴더이다. server.xml, context.xml, web.xml ... 확인할 수 있다.


▲ webapps는 웹 어플리케이션 루트 폴더이다.


▲ work는 jsp파일을 서블릿형태로 변환한 .java파일과 .class파일을 저장한 폴더이다.

▣ server.xml 파일이란?

server에 대한 설정 파일이다.

<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxIdle="15" maxTotal="15" maxWaitMillis="-1" minIdle="0" name="jdbc/DB1_SYS" password="1q2w3e4r" type="javax.sql.DataSource" url="jdbc:oracle:thin:@***.**.***.***:****:orcl" username="DB1_SYS"/>    
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxIdle="15" maxTotal="15" maxWaitMillis="-1" minIdle="0" name="jdbc/DB2" password="1q2w3e4r" type="javax.sql.DataSource" url="jdbc:oracle:thin:@111.111.11.111:1111:orcl" username="DB2"/>
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxIdle="15" maxTotal="15" maxWaitMillis="-1" minIdle="0" name="jdbc/DB3" password="1q2w3e4r" type="javax.sql.DataSource" url="jdbc:oracle:thin:@222.222.22.222:2222:orcl" username="DB3"/>
  • auth : Resource 관리자를 지정. 톰캣컨테이너가 관리자이다.
  • driverClassName : DB와 접속하기 위한 driver 클래스를 지정. ( orcle )
  • maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자
  • name : Resource명칭(JNDI Lookup 시 사용할 명칭)
  • username : DB접속 계정
  • password : DB접속 암호
  • type : Resource의 형태 지정. 데이타소스 형태를 지정
  • url : 접속한 DB가 위치한 서버명, 포트명, 사용할 데이타베이스명을 지정
  • maxActive : 최대 연결 가능한 Connection 숫자를 지정
  • maxWait : Connection 재 사용을 위해 대기해야 하는 최대 시간(단위:ms)
  • removeAbandoned : 사용하지 않는 connection에 대한 반환 여부를 결정하는 속성 사용을 위해서는 true로 설정
  • removeAbandonedTimeout : connection을 반환이 일어나는 시간을 설정 하는 부분 기본값은 300초 value의 단위는 초
  • logAbandoned : connection반환시 로그를 남길지 여부를 설정하는 속성
  • connectionProperties : oracle 10g인경우 사용 clob을 String으로 입력 하기 위해서 추가 하는 속성

  <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

가상의 호스트를 정의한다. 톰켓의 기본 Document Root는 webapps/ROOT

  • appBase : $CATALINA_HOME 디렉토리와 상대경로를 받는다.
    ( 이때 루트는 $CATALINA_HOME/webapps/ROOT )
  • unpackWARs : 기동시 war 파일을 압축해제한다.
  • autoDeploy : class 파일, JSP, XML 등이 갱신되었을 때 자동으로 배포한다.
    <Context docBase="C:/users/xlsx" path="/xlsx" reloadable="true"/> 
	<Context docBase="C:\users\ROOT" path="/" reloadable="true"/>
    <Context docBase="D:/testadmin/drugadmin/WebContent" path="/test" reloadable="true" >
    <Context docBase="qcm"path="/qcm" reloadable="true"source="org.eclipse.jst.jee.server:qcm"/>

가상호스트에 동작하는 하나의 웹 어플리케이션

  • docBase : 디렉토리를 절대경로로 지정을 하면 원하는 디렉토리를 Document Root로 사용 할 수 있다. Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있다
  • path : docBase의 할당위치 주소창에 http://localhost:8080/test - 호스트명+포트+path
    => D:/workspace/testadmin/WebContent
  • reloadable : true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안 클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹어플리케이션을 자동으로 재적재(reload)한다
<Context docBase="D:/testadmin/drugadmin/WebContent" path="/test" reloadable="true" >
<Context docBase="testadmin" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test">
<Context docBase="실제 프로젝트 폴더명" path="" reloadable="true" source="org.eclipse.jst.j2ee.server:실제 소스가 있는 위치의 이름"/>
  • docBase : 위와 같이 프로젝트명(testadmin)만 입력해도 상관없다.
    (위의 경우는 jsp파일에서 include되는 js파일 버전을 수정시, 경로를 찾지 못하는 오류가 있어서 하위까지 입력)
docBase를 프로젝트명(상대경로)로 한다면, 뒤에 source(처음 톰캣 연결시 생기는)부분을 그대로 두어야 한다.  
톰캣에 디플로이하면 workspace\.metadata\.plugins에 서버에 올라갈 프로젝트 구조가 생성되는데
서버가 파일들을 찾아가는 경로가된다. 
  또는  
<Context docBase="testadmin"  path="/test" reloadable="true" source="D:/workspace/testadmin/WebContent">
Source에 workspace상 디렉토리를 적어준다.

▣ context-datasource.xml


① context-datasource.xml 파일은 DB연결에 대한 설정을 위해 활용한다.

② 전자정부프레임워크 샘플 프로젝트 같은 경우 메모리 DB를 사용하고 있다.

③ ORACLE DBMS와 연동 시 설정 방법이다.

▣ context.xml 파일이란?

DBCP 정보 설정

톰캣에서 구동되는 하나의 웹 어플리케이션 자체의 설정을 의미한다. 주요 설정으로 컨텍스트패스, 어플리케이션 디렉토리 설정이 있다. 톰캣이 요청을 받으면 Catalina가 요청에 맞는 Context 를 찾고, Context 는 자신이 설정된 어플리케이션의 deployment descriptor file(web.xml) 을 기반으로 전달받은 요청을 서블릿에게 전달하여 처리되도록 한다.
( 어떤 객체를 핸들링하기 위한 접근 수단 )

클라이언트 HTTP request -> Catalina -> Context -> servlet -> 클라이언트 response

설정이 안에 없을 경우 기본적으로 webapps 하위의 ROOT 디렉토리(or ROOT.war)을 기본경로(http://localhost:8080/)로 설정한다.

■ JNDI(Java Naming and Directory Interface) 란?
디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API. 외부에 있는 객체를 가져오기 위한 기술이다. Tomcat와 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)가 있는데 그것을 우리가 사용하기 위해 JNDI를 이용해서 가져오는 것이다.

■ DBCP(Database Connection Pool, 커넥션 풀) 란?
데이터베이스와 연결된 커넥션을 미리 만들어서 저장해두고 있다가 필요할 때 저장된 공간(pool)에서 가져다 쓰고 반환하는 기법을 말한다. 커넥션 풀을 이용하면 커넥션을 미리 만들어두고 사용하기 때문에 매번 사용자가 요청할 경우 드라이버를 로드하고, 커넥션 객체를 생성해 연결하고 종료하는 비효율적인 작업을 하지 않아도 된다.  즉 데이터베이스의 부하를 줄일 수 있고 자원을 효율적으로 관리할 수 있다.


①. 사용자가 요청을 한다.
②. 요청은 Control을 거쳐 Molel로 전달된다.
③. Molel로 넘어간 요청은 JNDI에 등록된 데이터베이스 객체(Type:DataSource)를 검색한다.
④. JNDI를 통해 찾은 객체로부터 커넥션을 획득한다.
⑤. 데이터베이스 작업이 끝난 후 획득한 커넥션을 반납한다.
[출처] https://all-record.tistory.com/104 [세상의 모든 기록:티스토리]

    <ResourceLink name="jdbc/DB1_SYS" global="jdbc/DB1_SYS" auth="Container" type="javax.sql.DataSource" />
	<ResourceLink name="jdbc/DB2" global="jdbc/DB2" auth="Container" type="javax.sql.DataSource" />
	<ResourceLink name="jdbc/DB3" global="jdbc/DB3" auth="Container" type="javax.sql.DataSource" />
  • name : JDBC이름, 변경 가능 ( server.xml의 에 있는 name 부분과 똑같이 적어주어야 한다. )   
  • auth : 컨테이너를 자원 관리자로 기술    
  • type : 웹에서 이 리소스를 사용할 때 DataSource로 리턴됨    

Maven 설정 참고자료
Tomcat8.5 세팅

0개의 댓글