WAS A toZ

바퀴달린 개발자·2022년 5월 17일
0

바퀴달린 개발자

목록 보기
3/4

Web Application Server(WAS)

  • 여러 web client 요구를 web 서버가 감당할수 없는 기능을 구조적으로 web 서버와 분리하기 위해 만들어진 것
  • servlet, jsp 등 비즈니스 로직을 수행하는데 적합하다.

tomcat

  • WAS
  • JSP와 서블릿 처리, 서블릿의 수명 주기 고나리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등

톰캣 설치

톰캣 구조

bin 폴더

startup.sh: 톰캣을 실행
shutdown.sh: 톰캣을 정지

conf 폴더

server.xml : 서버 설정과 관련한 내용
web.xml : 서버가 올라갈 때 가장 먼저 읽는 파일로 중요한 xml 파일

webapps 폴터

  • 톰캣이 제공하는 웹애플리케이션의 기본 위치
  • Root 디렉토리는 최상위 폴더.

EX)
webapps 폴더 안에 'test'라는 새폴더를 만들고 그 폴더 안에 'index.html'파일을 넣었을 때 해당 파일을 접근하기 위해서는
http://localhost:8080/start/index.html로 접속하면 된다.

톰캣 실행

./bin/startup.sh
./bin/shutdown.sh

톰캣 설정

cd $CATALINA_BASE/conf/ server.xml
vi server.xml

server.xml

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
  <Service name="Catalina">
    <Connector port="9001" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" enableLookups="false" maxThreads="2048" />
    <Engine> 
      <Host>  </Host>
      <Context> </Context>
    </Engine>
</Service>
</Server>

Server(org.apache.catalina.Server)

<Server port="8005" shutdown="SHUTDOWN">
  • 최상위 element, shutdown 요청 처리를 위한 address와 port 속성을 가지고 있다.
  • 지정된 포트로 shutdown 커맨드를 listen 한다.

Listener 지정

<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

EX.AprLifecycleListener는 Tomcat Native(APR)는 외부에서의 메시지 유입을 연결하는 Listener이다.
예를 들면 "Apache 와의 연동 시 사용한다" 정도로 이해하면 된다.

Service(org.apache.catalina.Servie)

<Service name="Catalina">
  <Connector port="9001" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" enableLookups="false" maxThreads="2048" />
  <Engine> </Engine>
</Service>
  • 하나의 Container를 공유하는 한 개 이상의 Connectors의 모임이다.
  • Connector는 요청을 받고 응답을 리턴하는 endpoint이다.
  • 각 Connector는 요청을 처리하기 위해 연관된 Container에게 요청을 넘긴다.

endpoint란?
API가 서버에서 자원에 접근할 수 있도록 하는 URL

Engine(org.apache.catalina.Engine)

<Engine name="Catalina" defaultHost="localhost">
  <Host>  </Host>
  <Context> </Context>
</Engine>
  • 적절한 Host(virtual host)로 처리를 넘기는 entry point이다.

Host(org.apache.catalin.Hst)

<Host name="localHost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  • 가상 호스트 기능 제공
  • 톰캣의 기본 Document Root는 webapps/ROOT
  • name: <Host>의 이름은 name 속성을 통해 설정한다.
  • appBase: $CATALINA_HOME 디렉토리와 상대경로를 받는다. 이 때 루트는 $CATALINA_HOME/webapps/ROOT
  • unpackWARS: true일 때 WAR파일의 압축을 풀어서 배치함.
  • autoDeploy: true일 경우 WAR파일을 appBase 디렉토리에 위치시키면 톰캣 구동시 WAR파일을 자동으로 읽어서 배포한다.

Context

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
	<Context docBase="/deploy/test.war" path="/application1" reloadable="true">
    </Context> ...
  • 가상호스트에 동작하는 하나의 웹 애플리케이션
  • 이렇게 설정하게 되면 localhost/application1로 접근시, dockBase에 정의된 특정 경로의 파일을 찾게 된다.

EX)

<Host name="localhost" appBase="/home/test_web" unpackWARs="true" autoDeploy="true" />
  <Context path="/" reloadable="true" docBase="./test_web" allowLinking="true"/>
  <Context path="/manager" debug="0" privileged="true" docBase="../tomcat/apache-tomcat/webapps/manager" />
</Host>

appBase에서 설정한 /home/test_web 경로에 war 파일이 생성된다. 그리고 unPackWARs 옵션이 true이므로 test_web 폴더가 생긴다.

localhost:8080/로 들어가게 되면 /home/test_wet/test_web에 있는 파일을 기동한다.

그래서 서버 배포는 어떻게 해?

  1. build
git pull origin
./mvnw clean package // war파일 생성
  1. prepare
mv {projectName}*.war {projectName}.war
  1. shutdown
apache/bin/apachectl stop
tomcat/bin/shutdown.sh
  1. deploy
rm ~/deploy/{projectName}.war // 기존 배포물 삭제
cp {projectName}.war ~/deploy/ // 신규 배포물 복사
  1. startup
tomcat/bin/startup.sh // 톰캣 실행
apache/bin/apachetl start // 아파치 실행

다음시간엔..
Servlet

0개의 댓글