Web
처음에는 인터넷 서비스의 종류로 SMTP(전자우편), FTP(파일전송), Telnet(원격접속) 등 다양하게 있었습니다.
하지만 팀 버너스리가 SMTP, FTP 를 통해 정보를 주고 받는 것을 비효율적이라고 생각해 www(world wide web) 을 고안하였습니다.
즉 웹이란, 사전적 의미는 거미집 모양의 망이며 인터넷 망 안에서 정보를 공유, 검색할 수 있게 하는 시스템이며, 아까 말한 www 인 world wide web 의 줄임말 입니다.
Web Application
웹 어플리케이션은 웹에서 실행되는 응용프로그램을 뜻하며, 인터넷을 통한 여러가지의 서비스를 일컫습니다.
사용자는 필요한 데이터를 Request(요청) 하고 서버에서는 사용자의 Request 를 수행하며, 요청한 데이터를 Response(응답)하게 되는 형식입니다.
웹 브라우저 (Web Browser)
클라이언트에서 요청을 하고 전달받은 페이지를 볼수있는 환경
Web Server
사전적 의미
웹브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램
웹 서버란 클라이언트(사용자) 가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버입니다. 여기서 정적 컨텐츠란 단순 HTML 문서, CSS, Javascript, 이미지, 파일 등 즉시 응답가능한 컨텐츠를 말합니다.
웹 서버 종류
아파치(Apache), Microsoft IIS, Ngnix
클라이언트입장 : 웹 서버에게 주소(URL) 을 가지고 통신 규칙(HTTP) 에 맞게 요청하면, 알맞은 내용(HTML) 을 응답 받습니다.
서버 입장 : 클라이언트의 요청을 기다리고, 웹 요청(HTTP) 에 대한 데이터를 만들어서 응답합니다. 이때 데이터는 웹에서 처리할 수 있는 HTML,CSS, 이미지 등 정적인 데이터로 한정됩니다.
하지만 웹 서버만 이용하면 한가지 문제가 발생합니다.
웹 서버에서는 HTML, CSS, 이미지 등 정적인 자료만 제공할 수 있다는 것입니다.
웹 서버에서 브라우저에게 HTML 을 주기 전에 애플리케이션을 돌려서 데이터를 만들고 그 만든 데이터를 넣어 주면 간단하겠지만 HTML 은 프로그래밍 언어가 아니기 때문에 위의 문제를 해결할 수 없습니다.
결국 요청에 따른 비즈니스 로직 처리나 DB 연동 등의 문제를 해결하기 위해 등장한 개념이 WAS 입니다.
WAS - 웹 어플리케이션 서버 (Web Application Server)
사전적 의미
인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로써, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행됩니다.
WAS 는 웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공합니다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있습니다.
WAS 는 JSP, Servlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너 라고도 불립니다.
컨테이너 : JSP, Servlet 을 실행시킬 수 있는 소프트웨어
자바 계열에서는 웹 애플리케이션을 컨테이너 라고 부릅니다.
WAS 의 종류
톰캣, JEUS, IBM WebSphere
웹 서버와 WAS 의 차이
웹 서버는 정적인 컨텐츠만 줄 수 있습니다.
하지만 WAS 는 어떤 애플리케이션을 돌리고, DB 를 연결하고, 어떤 로직을 수행해서 만든 데이터를 웹 서버에 전송해 줍니다. 따라서 상황에 따라 변하는 정보를 제공할 수 있는가? 의 차이점이 있습니다.
Web Service Architecture
웹 애플리케이션은 요청 방식에 따라 다양한 구조를 가질 수 있습니다.
- 클라이언트(사용자) -> Web Server -> DB
- 클라이언트(사용자) -> WAS -> DB
- 클라이언트(사용자) -> Web Server -> WAS -> DB
동작 방식
1. Web Server 은 웹 브라우저 클라이언트(사용자) 로부터 HTTP 요청을 받습니다.
2. Web Server 은 클라이언트의 요청(Request) 을 WAS 로 보냅니다.
3. WAS 는 관련된 Servlet 을 메모리에 올립니다.
4. WAS 는 Web.xml 을 참조하여 해당 Servlet 에 대한 Thread 를 생성합니다.
5. HttpServletRequest 와 HttpServletResponse 객체를 생성하여 Servlet 에 전달합니다.
6. Thread 는 Servlet 메서드를 호출하고 요청에 맞게 doGet(), doPost() 메서드를 호출한 뒤 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS 에 전달합니다.
7. WAS 는 Response 객체를 HttpResponse 형태롤 바꾸어 Web Server 에 전달합니다.
8. 생성된 Thread 를 종료하고, HttpServletRequest 와 HttpServletResponse 객체를 제거합니다.
WAS 만 써도 되는거 아닌가?
정답은 아닙니다. WAS 는 DB 조회 및 다양한 로직을 처리하는 데 집중해야 합니다.
따라서 단순한 정적 컨텐츠는 웹 서버에게 맡기며 기능을 분리시켜 서버 부하를 방지합니다.
만약 WAS 가 정적 컨텐츠 요청까지 처리하면, 부하가 커지고 동적 컨텐츠 처리가 지연되면서 수행 속도가 느려지고 이로 인해 페이지 노출 시간이 늘어나는 문제가 발생하여 효율성이 크게 떨어집니다. 나중에 간략하게 구분하는 이유가 밑에 있습니다.
왜 Tomcat 이 아닌 Apache Tomcat 일까?
정적 컨텐츠를 처리하는 웹 서버에는 Apache 가 있고, 동적 컨텐츠를 처리하는 WAS 서버는 Tomcat 이 있는데 Tomcat 은 Apache Tomcat 이라는 이름으로 많이 사용되어 혼란스러울 수 있습니다. 붙여서 쓰는 이유는 2008 년에 릴리즈 된 Tomcat 5.5 version 부터 정적 컨텐츠를 처리하는 기능이 추가되었는데, 이 기능이 순수 Apache 를 사용하는 것에 비해 성능적 차이가 전혀 없으며 Tomcat 이 Apache 의 기능을 포함하고 있기 때문에 Apache Tomcat 이라고 부르고 있습니다.
웹 서버와 WAS 를 따로 사용하는 이유
서로의 기능을 분리하여 서버 부하를 방지할 수 있습니다.
WAS 는 DB 조회 등 페이지를 만들기 위한 다양한 로직을 처리하는데, 단순한 정적 컨텐츠까지도 WAS 에서 제공하면 다른 작업에 사용하는 리소스로 인해 지연이 생겨날 수 있습니다. 하지만 Tomcat 5.5 이상부터는 성능이 크게 떨어지지 않습니다.
물리적으로 분리하여 보안을 강화할 수 있습니다.
웹 서버를 앞단에 두어, 공격이 있을 때 중요한 정보가 담긴 DB 나 로직까지 전파되지 못하게 합니다.
여러 대의 WAS 를 연결할 수도 있습니다.
대용량 웹 애플리케이션의 경우(여러 개의 서버 사용) Web Server 와 WAS 를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있습니다. 또한 하나의 서버에서 PHP Aplication, Java Application 을 함께 사용 할 수 있습니다.
'Java' 카테고리의 다른 글
제어자 (0) | 2024.12.04 |
---|---|
로깅(Logging) (0) | 2024.11.30 |
해시맵(HashMap) (1) | 2024.11.29 |
MyBatis (0) | 2024.11.21 |
MVC구조 & Controller, Service, DAO, VO (1) | 2024.11.18 |