1️⃣ Web Server
Web Server의 기능
클라이언트가 서버에 페이지 요청을 하면 요청을 받아서 정적 컨텐츠(.html, .png, .css 등)를 제공하는 역할을 합니다.
클라이언트에서 요청이 올 때 가장 앞에서 요청에 대한 처리를 하게 되고, 클라이언트의 요청을 기다리고 요청에 대한 데이터를 만들어서 응답하는 역할을 합니다.
동적 컨텐츠를 요청할 경우는?
.html, .png 등과 같은 정적 컨텐츠가 아닌 서블릿이나 로직 처리를 요구하는 동적 컨텐츠를 요청받게 되면 웹서버에서 처리를 할 수 없기 때문에 Was에게 처리를 넘기게됩니다. Was에서 응답을 만들어서 웹서버에게 돌려주면 클라이언트에 전달을 합니다.
2️⃣ WAS(Web Application Server)
WAS의 기능
- Web Server와 Web Container의 기능을 가지고 있습니다.
- Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야합니다. 이것은 불가능하기 때문에, 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있습니다.
Web Container
- Jsp나 Servlet을 구동시킬 수 있는 소프트웨어를 말합니다.
3️⃣ 동작 프로세스
- 웹 서버로부터 요청이 오면 정적 컨텐츠인지 동적 컨텐츠인지 판단
- 정적 컨텐츠라면 웹 서버에서 처리해서 응답한다
- 동적 컨텐츠라면 Was에게 처리를 넘긴다
- Was는 해당 서블릿에 대한 쓰레드를 생성하고 HttpServletRequest와 HttpServletResponse 객체를 생성해서 전달한다
- service() 메소드를 통해 응답을 생성해서 웹 서버에 전달한다
- 웹 서버는 클라이언트에게 전달 받은 HttpResponse로 응답한다
4️⃣ WAS만 사용해도 되지 않을까?
WAS에는 웹 서버 기능 또한 포함되어 있습니다. 그렇다면 굳이 웹 서버와 WAS를 같이 써야하나 하는 의문이 들었습니다. WAS에서 정적 컨텐츠와 동적 컨텐츠를 모두 처리할 수 있으니까요.
웹 서버와 WAS를 함께 사용할 때의 장점
- 여러 대의 WAS를 로드밸런싱할 수 있습니다
여러 대의 WAS를 연결하여 사용함으로써 자원 이용의 효율성을 높이고, 하나의 was에서 오류가 생기더라도 다른 was에서 처리하게 함으로써 장애에 대응할 수 있습니다.
- 보안을 강화할 수 있습니다
리버스 프록시를 통해 DB같은 자원들을 직접 사용하는 WAS를 노출되지 않게 함으로써 보안을 강화할 수 있습니다
Reference
https://jeong-pro.tistory.com/84?category=793347
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://www.youtube.com/watch?v=mcnJcjbfjrs&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=22
Uploaded by Notion2Tistory v1.1.0