2020-11-23 TIL
Web Application Server Architecture(WAS)

- 클라이언트 -> 웹 브라우저 -> (http) -> 웹 서버 -> (실행) -> 서버 앱 -> DBMS
- 서버앱은 멀티스레딩, 네트워킹, UI를 하지 않아도 된다.
- 다만 규칙에 따라 구현되어야 하며 웹 브라우저를 사용하기 때문에 HTML, CSS, JavaScript를 도구로 사용한다.
WAS 서버 구성 요소

- 웹 브라우저 <-(HTTP)-> 웹 서버 -(위임)-> 어플리케이션 서버 -(실행)-> App
웹 서버와 어플리케이션 서버와의 관계

- Web 서버 + Application 서버
- 웹서버는 교체가 가능하다.
- NginX, Apache, IIS 등
- 어플리케이션 서버는 어플리케이션을 실행시키는 역할을 한다.
Application Server와 Application

- Web Server <-(통신)-> 어플리케이션 서버 -(실행)-> 어플리케이션
- Application 서버는 어플리케이션 생성, 실행, 소멸을 관리하는 일을 한다.
- 웹서버와 통신을 한다.
Java 의 web Application Server 기술

- Application Server -(call)-> Application
- Servlet API를 사용해서 call 할 때의 사용 규칙을 정의
- Servlet API를 구현해서 Java Class로 Application을 만든다.
- 개발자는 Servlet 규칙에 따라 서버를 구현한다.
servlet api

- 사용 규칙을 정의 -> 이 규칙에 따라 Java class로 application과 application server를 만든다.
- Server + let 의 줄임말
- 어플리케이션 서버 = 서블릿 컨테이너(생성, 실행, 소멸) = 톰캣
서블릿 API와 서블릿 컨테이너

서블릿 API와 자바EE 기술

서블릿 컨테이너와 자바EE 구현체

자바EE 버전과 서버 버전

의존 라이브러리

WAS와 .war 파일

개발과 배포1 (예전)

- 개발자가 해킹 코드를 넣으면 언제 넣었는지 확인할 수 없다.
개발과 배포2(실무)

- 서버에 바로 올리지 못하도록 한다.
서블릿 컨테이너가 관리하는 주요 컴포넌트

서블릿 컴포넌트 만들기

- 서블릿 인터페이스 메소드가 1개 있는게 아니라 5개 있다.
- Init, service, destroy, getServletInfo, getServletConfig
Servlet의 LifeCycle 메서드

- Init()는 최초 요청이 들어왔을 때 한번 실행된다.
- 서버를 시작했을 때가 아니라 서블릿 컨테이너로부터 요청이 있을 때 실행
- 이후 요청은 service() 호출
- 서버 종료 또는 애플리케이션 종료 직전에 destroy() 호출
web-project
- build.eclipse
의존 라이브러리 옵션
- compileOnly : 컴파일한 후 생성되는 빌드 파일에 포함되지 않는다.
- 예) 컵
- implementation : 컴파일한 후 생성되는 빌드 파일에 포함된다.
- 예) 텀블러
- testImplementaion : 단위 테스트를 실행할 때만 사용하는 라이브러리이다.
- 예) 소주잔
- 배포 파일에 포함되는 것은 implementaion이 붙은 의존 라이브러리 뿐이다.
Servlet-API
- 컴파일 할 때만 사용한다.
- 배치할 때는 포함하지 않는다.
- 왜? 서버에 이미 이 라이브러리가 있기 때문이다.
WAS와 .war 파일*
- 프로젝트(*.java, *.properties, *.xml) -(컴파일)(배포파일)-> .war -(배포)-> (톰캣서버)/webapps(servlet-api 라이브러리가 이미 존재한다.)
톰캣 설치 및 설정
- http://localhost:8080/ 화면이 뜨면 서버는 정상적으로 실행 중
톰캣 서버 설치
- tomcat.apache.org 사이트에서 zip 파일을 내려 받는다.
- 특정 폴더에 압축을 푼다.
- 설치형이 아니다.
- Java로 만들었기 때문에 JRE 또는 JDK가 설치되어 있어야 한다.
톰캣 서버 설정
서버 포트 번호 변경
- $TOMCAT_HOME/conf/server.xml 변경
- Connector 태그의 port 값을 8080에서 원하는 값으로 변경한다.
- 예) Connector port=”9999”…
tomcat 관리자 아이디 등록하기
- $TOMCAT_HOME/conf/tomcat-users.xml 파일에 role 및 user 추가
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="1111" roles="tomcat,manager-gui,admin-gui"/>
- $TOMCAT_HOME/conf/Catalina/localhost 폴더에 manager.xml 파일 추가하고 다음과 같이 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" />
</Context>
톰캣 서버 실행
- $TOMCAT_HOME/bin/startup.bat 실행(Windows)
- $TOMCAT_HOME/bin/startup.sh 실행(Unix/Linux)
이클립스와 톰캣 서버 연동하기
- 이클립스에 톰캣 서버 경로 등록하기
- 이클립스에 웹 프로젝트 실행을 위한 테스트 서버 환경 구축하기
- 웹 프로젝트를 배포하기
이클립스에 ! 가 떴을 때
- 해당 폴더로 가서 그레이들 클린이클립스, 그레이들 이클립스
- 이래도 ! 가 있으면 해당 폴더로 직접 가서 .settings 등 그레이들 이클립스를 했을 때 자동으로 생성되는 파일을 휴지통에 버림
- 그리고 그레이들 이클립스
- 이래도 ! 가 있으면 jdk를 재설치
배포했을 때 배포가 안되면
- add and remove를 눌러서 remove를 실행
- 이후 다시 add
이클립스로 톰캣서버 실행 시
- 예제 어플리케이션이 로딩되지 않는다.
- 오직 배포한 것들만 서버에 올라간다.
dd file = web.xml
- 어떻게 리소스를 배치할 지 결정한 파일