WAS
2024. 4. 17. 16:54
Static vs Dynamic
- Static Pages : 데베에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지
- 어떠한 사용자가 오던간에 동일한 페이지를 보여준다.
- ex) image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들
- Dynamic Pages
- 서버에서 데베에서 정보를 가져와서 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 해당 결과가 포함된 파일을 보여주는 페이지
- 사용자들마다 다른 페이지가 보여질 수 있다.
Web Server vs WAS(Web Application Server)
- Web Server
- 웹 서버는 클라이언트가 요청한 정적인 콘텐츠를 HTTP 프로토콜을 통하여 제공해주는 서버. 위에서 언급한 정적 페이지를 보내준다. = 정적인 콘텐츠 제공
- 다른 역할로는 동적인 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 웹 서버에서 처리할 수 없기 때문에 컨테이너로 보내주는 역할을 한다.
- ex) Nginx, Appach HTTP Server, IIS
- 기능 1)
- 정적인 컨텐츠 제공
- WAS를 거치지 않고 바로 자원을 제공
- 기능 2)
- 동적인 컨텐츠 제공을 위한 요청 전달
- 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
- Web Container
- 컨테이너는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈
- Apache는 CGI라는 개념을 지원한다.
- CGI란? Common Gateway Interface
- 인터페이스로서, 웹 서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램.
- 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약.
- 쉽게 말하면 두 개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램. 또는 주고 받는 것 자체를 의미.
- PHP, Perl, Python 등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 불가능.
- JAVA는 따로 CGI와 같은 기능을 위해 컨테이너라는 것이 필요한데, 그것이 서블릿이다.
- CGI란? Common Gateway Interface
- 웹 컨테이너의 작동
- 클라이언트는 웹서버로 request를 보낸다.
- 서블릿을 포함하는 WAS는 컨테이너로 요청을 보낸다.
- 컨테이너가 요청을 각 서블릿에게 전달한다.
- 서블릿 메서드가 로드된다.
- 서블릿은 컨테이너에 관련 response를 넘겨준다.
- 컨테이너는 이를 서버에 전달한다. 서버는 응답을 클라이언트에게 전달한다.
WAS(Web Application Server)
- 웹 서버로부터 오는 동적인 요청을 처리하는 서버. 웹 서버와 컨테이너를 붙여놓은 서버.
- ex) Tomcat, JBoss, Jeus, Web Sphere 등
Web Server가 필요한 이유
- 클라이언트에 정적 컨텐츠를 보내는 과정
- 이미지 파일과 같은 정적 컨텐츠들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.
- 클라이언트는 HTML 문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일을 받아온다.
- Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
- 따라서 Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
WAS가 필요한 이유
- Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다.
- 하지만 이렇게 수행하기에는 자원이 절대적으로 부족하다.
- 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.
Web Server + WAS 조합
- 기능을 분리하여 서버 부하 방지
- WAS는 DB 조회나 다양한 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 WS에서 빠르게 클라이언트에게 제공하는 것이 좋다.
- WAS는 기본적으로 동적 컨텐츠를 제공하기 위해 존재하는 서버.
- 만약 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려진다.
- 물리적으로 분리하여 보안 강화
- SSL에 대한 암복호화 처리에 WS를 사용
- 더 자세히 조사
- 여러 대의 WAS를 연결 가능
- fail over(장애 극복), fail back 처리에 유리
- 특히 대용량 웹 어플리케이션의 경우 (여러 개의 서버 사용) WS와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
- 예를 들어 앞 단의 WS에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
- 여러 웹 애플리케이션 서비스 가능
- 예를 들어, 하나의 서버에서 PHP와 JAVA 애플리케이션을 함께 사용하는 경우
- 기타
- 접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 WS에서 처리하면 효율적이다.
- 즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 WS와 WAS를 분리한다.
- WS를 WAS 앞에 두고 필요한 WAS들을 WS에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.
==================================================
Apache vs Tomcat
장점 | 단점 | |
Apache(static) | 처리 속도가 빠르다. 구조가 단순하여 비용 절감. 트래픽 과부하에 강하다. |
정적인 데이터만 처리가 가능. 다른 서비스와 상호작용 불가 |
Tomcat(dynamic) | 데이터 흐름이 유동적이다. DB 등 여러 서비스가 가능. |
Apache에 비해 속도가 느리다. 부가적인 비용이 발생한다. 트래픽 과부하에 약하다. |
Apache
- 아파치 소프트웨어 재단에서 만든 웹 서버(Web Server)를 일컫는다.
- 리눅스에서는 httpd로 명명지어져 배포된다.
- 정적인 데이터들(html, css, 이미지, 파일 등)에 대한 클라이언트의 요청을 데이터로 만들어서 응답한다.
- 80 포트를 사용.
- Web Server란?
- HTTP 프로토콜 기반으로 web client(browser)로부터의 요청을 서비스하는 기능을 담당하는 프로그램.
- 80번 포트로 클라이언트의 요청(POST, GET, DELETE)이 왔을 때만 응답한다.
- 정적인 데이터에 대한 처리를 담당한다.
Tomcat
- 웹 서버와 웹 컨테이너(=컨테이너, 서블릿 컨테이너)의 결합
- 현재 가장 일반적이고 많이 사용되는 WAS
- 톰캣은 JSP와 서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등을 처리해준다.
- 8080 포트를 사용
- WAS란?
- 여러 클라이언트의 요구를 웹서버가 감당할 수 없는 기능을 구조적으로 웹 서버와 분리하기 위해 만들어진 것.
- 동적인 데이터를 처리하는 서버, DB 연결, 데이터 조작 등의 처리를 담당한다.
- WS역할도 할 수 있지만 WS에 비해 처리 속도가 느리다. 그래서 서로 강점만 사용하기 위해 WS와 WAS를 연동하여 서비스를 하는 것이 대부분이다.
Apache Tomcat
- WAS에서 편의를 위해 Apache의 기능(웹서비스 데몬, HTTPD)을 포함하고 있기 때문에 아파치 톰캣이라 부른다.
- 즉, 톰캣이 아파치의 기능을 일부를 가져와서 제공해주는 형태.
Apache 서버와 Tomcat 서버의 분업
- 톰캣이 아파치의 기능을 지원하지만 아파치의 모든 기능을 제공하는 것은 아니다.
- 특수한 상황에선 아파치 톰캣만으로는 구현이 어려워, 따로 아파치 서버를 설치하고 톰캣과 연결하여 사용한다.
- 예를 들어 하나의 서버에서 PHP 애플리케이션과 JAVA 애플리케이션을 함께 사용하거나, HTTPD(아파치) 서버를 간단한 로드밸런싱을 위해서 사용해야 하는 경우라면 HTTPD를 앞에 두고 톰캣을 연결해서 사용하는 편이다.
[WEB] 🌐 웹 서비스 구조 (Web서버 / 웹컨테이너 / WAS) 정리
Static vs Dynamic 페이지 Static Pages 정적 페이지 데이터베이스에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지. 어떠한 사용자가 오던간에 동일한
inpa.tistory.com
'Spring' 카테고리의 다른 글
IoC / DI (0) | 2024.05.09 |
---|---|
트랜잭션 관리 (0) | 2024.04.10 |
REST API, 라이브러리 vs API vs 프레임워크 vs 컴포넌트 vs 모듈 vs 패키지 (0) | 2024.03.13 |
JPA(Java Persistence API) (0) | 2024.03.06 |