java/jsp & sevlet

[jsp, servlet] Apache Tomcat의 사용 이유 & 서버 설정(WS, WAS)

tea-tea 2024. 4. 23. 07:27

배경 지식


jsp는 servlet과 함께 동적 웹 페이지를 제작할 때 사용되는 자바 템플릿 엔진이다. jsp는 컴파일될 시 servlet파일로 변경되는데, 파일 내에 삽입했던 java 코드는 servlet의 service 메소드로 삽입된다.

MVC 패턴에서 servlet은 컨트롤러를 담당하고 jsp는 뷰를 담당하는 것이 일반적이다.(모델은 servlet 중에서 DAO나 DTO등이 담당하는 것 같다.)

 

정적 웹 페이지

클라이언트의 요청에 미리 빌드된 웹 리소스를 제공하는 것이다. 이는 동일한 요청에 항상 동일한 파일을 db에서 가져와 전송할 뿐이다. 이는 서버에서 별다른 처리를 안해주므로 빠르게 응답가능하지만 정해진 페이지만 제공하므로 서비스의 다양성에 한계가 있다.

 

동적 웹 페이지

클라이언트의 요청을 받으면 미리 빌드된 파일을 가져오는 것이 아니라 서버스크립트 언어로 동적으로 웹 리소스를 구성하여 응답한다. 추가적 로직으로 인해 정적 웹 페이지보다 느리지만, 다양한 서비스를 제공하기 적합하다.

 

웹 서버(WS)

브라우저를 통한 클라이언트의 http 요청을 받고 db를 조회하여 웹 리소스를 response 하는 서버 프로그램이다.

 

웹 어플리케이션 서버(WAS)

동적 웹 페이지를 보여줄 수 있는 서버의 한 종류로 웹 서버에 웹 컨테이너를 결합한 형태다.

웹 컨테이너는 웹 서버가 받은 request, response를  컨테이너 내 서버스크립트 파일인 jsp, servlet에 적합하게 변환하여 전달한다. 그리고 서버스크립트의 환경을 구성하고 생명주기와 메모리 관리를 자동으로 한다.

 

일반적으로는 wswas를 분리해서 관리한다. 즉, 클라이언트 요청 => ws => was => db 의 순서로 작동한다.

분리의 이유는 개발 단계에서 정적 로직과 동적 로직을 분리하여 유지 보수를 하기 위함이고 성능적으로 정적인 처리만으로 가능한건 ws에서 처리하기 위함이다.

(그 외에도 ssl에 대한 암호화 복호화 처리도 있다는데, 이 부분은 아직 잘 모르겠다.)

 

대규모 어플리케이션은 무거운 작업을 돌리는 was를 여러 대 돌리며 ws에 연결한다고 한다.

 

ws, was를 위한 소프트웨어

  • 아파치 서버 | http 요청 기반의 웹 서버를 구축할 수 있게 해준다.
  • 톰캣 | 아파치 재단에서 만든 was 소프트웨어. jsp,servlet을 실행할 수 있는 환경 구축, ws의 요청을 스크립트 파일에 매핑하는 역할 등 동적 기능에 필요한 것을 제공한다. 아파치와 묶어서 아파치 톰캣이라 한다.

 

관련 심화 지식: WAS를 WS와 같이 쓰는 이유

 

실무 프로젝트에서는 WAS와 WS를 함께 사용하는게 일반적인데 이유가 뭘까.

예전에는 WAS의 정적 리소스 제공 기능이 느려서였지만 요즘은 유의미한 차이는 없다. 

대신, WS의 다양한 기능을 사용하기 위해서이거나 양 측을 분리하는 것의 이점 때문이다.

 

1. 다수의 WAS 운영 및 중계

WS와 WAS를 분리하면, WS가 복수의 WAS와 클라이언트 사이에서 트래픽의 목적지를 정하는 로드 밸런싱 기능을 할 수 있다. 이 때, WAS를 여럿 운영하는 이유는 다음과 같다.

  • 지속적인 서비스 운영
    • 서비스를 운영하다보면 에러나 과부하로 서버가 마비될 수 있다. 이 때 WAS를 여럿 돌리면 문제가 생긴 서버 대신 다른 서버로 트래픽을 이동시켜 서비스를 유지할 수 있다.
  • 트래픽 분산, 로드 밸런싱
    • 한번에 많은 트래픽이 하나의 서버로 몰리는 경우 성능이 악화되는 걸 방지하기 위해 여러 WAS를 두고 WS로 트래픽을 분산시키는 것이 유리하다.
    • 또한, 작업에 따라 분산 작업이 성능 면에서 유리한 경우도 있다.

 

2. 보안 향상

동작 구조 은닉 |  WS가 없으면 클라이언트의 요청을 WAS가 직접 받고 응답하므로, 동작 구조를 파악당하기 쉽다. 하지만, 둘 사이에 WS가 있으면 WAS의 요청 처리 및 동작 구조를 숨길 수 있어서 보안에 유리하다.


리버스 프록시 | 클라이언트와 서버 사이에 중계지인 프록시는 포워드 프록시와 리버스 프록시로 구분된다.

포워드 프록시는 사용자가 서버에게 자기 ip 및 정보를 감추는 기능이라면, 리버스 프록시는 서버가 사용자에게 WAS서버의 정보를 감추는 것이다. 이 리버스 프록시 기능을 WS가 수행할 수 있다.


그 외에도 WS는 다양한 보안 기능을 제공한다.

3. 캐싱 및 성능 향상

캐싱이란 네트워크로 받아와야할 정보를 미리 저장해두었다가 요청 시 바로 제공하는 걸 의미하며 포워드 캐싱과 리버스 프록시 캐싱과 으로 구분된다. 양자는 캐싱을 위한 프록시 서버가 프론트단에 가까이 있느냐 아니면 인터넷을 거쳐서 백 서버단에 가까이 있느냐의 차이는 있으나 클라이언트가 자주 요청하는 파일을 프록시에서 미리 캐싱하고 있다가 바로 보내주므로 성능이 향상된다는 공통점이 있다.

이 중에서 WS는 리버스 프록시 캐싱의 역할을 할 수 있다

 

서버 설정


서버 설정(개발용 로컬 서버)

 이클립스를 기준으로 설명한다.

 

이클립스에 서버 연결을 위해 서버 콘솔 열기

상단 메뉴 window view- server

새 서버로 apache Tomcat 8.5 버전을 선택한 후 미리 다운받아놓은 파일을 연결하거나 설치하면 된다.

(참고로 jsp 2.3, servlet 3.1을 사용했음)

 

웹 컨테이너 설치 URL

https://tomcat.apache.org/download-80.cgi

 

웹 컨테이너 설정

서버 콘솔에서 서버 더블 클릭

  • server location | 톰켓 서버 설치 위치로 설정
  • 서버 옵션 | publish module context to separate xml files 체크(이클립스에서의 환경 설정이나 xml 수정을 톰켓의 설정에 동기화)
  • port | http/1.1은 8090으로 설정
    • 8080은 나중에 db 연결 예정
  • 저장 | ctrl k s

 

서버 콘솔의 우측 상단에 published 서버 클릭

- 서버 설정이 서버에 동기화

 

서버 시작

- 서버 콘솔의 우측 상단에서 서버 시작 클릭

 

 

확인

http://localhost:8090/ 검색해서 접속가능하면 성공

 

참고 자료

유튜브 - 아파치, NginX, 톰캣이 뭔가요? (+ 웹서버, WAS, 로드밸런싱, 프록시)  | 얄팍한 코딩사전

https://www.youtube.com/watch?v=Zimhvf2B7Es

 

티스토리 - Forward Proxy(포워드 프록시)와 Reverse Proxy(리버스 프록시) 정리 | JaeWon's Devlog

https://dev-jwblog.tistory.com/161