2020-11-23 TIL

2 minute read

Web Application Server Architecture(WAS)

image-20201124095314363.png

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

WAS 서버 구성 요소

image-20201124101012392.png

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

웹 서버와 어플리케이션 서버와의 관계

image-20201124101027585.png

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

Application Server와 Application

image-20201124101043757.png

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

Java 의 web Application Server 기술

image-20201124101101453.png

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

servlet api

image-20201124101115926.png

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

서블릿 API와 서블릿 컨테이너

image-20201124101147998.png

서블릿 API와 자바EE 기술

image-20201124101304089.png

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

image-20201124101347226.png

자바EE 버전과 서버 버전

image-20201124101420584.png

의존 라이브러리

image-20201124101453904.png

WAS와 .war 파일

image-20201124101527722.png

개발과 배포1 (예전)

image-20201124101559970.png

  • 개발자가 해킹 코드를 넣으면 언제 넣었는지 확인할 수 없다.

개발과 배포2(실무)

image-20201124101641749.png

  • 서버에 바로 올리지 못하도록 한다.

서블릿 컨테이너가 관리하는 주요 컴포넌트

image-20201124101721286.png

서블릿 컴포넌트 만들기

image-20201124101755165.png

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

Servlet의 LifeCycle 메서드

image-20201124101934106.png

  • 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
  • 어떻게 리소스를 배치할 지 결정한 파일

Categories:

Updated: