Skip to content

juneyr.dev

웹서버, 웹 어플리케이션 서버 + tomcat 이란

Devops, Server1 min read

이런 현대미술전시같은 이름의 블로그 포스트라니. 매번 찾아놓고 기억하지 못하는 주제를 가볍게 정리합니다.

서블릿이란 (Servlet) 😗

서블릿은 웹서비스를 위한 자바 인터페이스입니다. 서블릿을 쓴다는 건 웹 서비스를 제공한다는게 되겠지요. 웹 상에서 들어오는 요청 (request)를 가공하여 로직을 수행하고, 응답(response)을 보내는 게 웹 서비스의 기본 동작 원리인데요. 이를 위해 만들어진 인터페이스인 만큼, 서블릿은 java 의 main 메소드가 존재하지 않습니다. java를 처음 배우면 우리는 main 메소드에서 실행을 하고, 직접 IDE에서 버튼을 눌러서 실행하는데요. 서블릿의 경우, 서블릿 컨테이너에 등록만 하면 생성주기를 서블릿 컨테이너가 관리해줍니다.

서블릿 컨테이너란

위에 나온 서블릿을 관리해야하는게 서블릿 컨테이너인데요. 매번 필요한 네트워크 통신, 서블릿의 생명 주기 관리, 스레드 기반의 병렬 처리를 대신 해줍니다. 실제로 요청이 오면, 컨테이너가 딱 알맞은 서블릿의 서비스 메소드를 호출해서 요청을 처리하게 해줍니다. 대표적인 서블릿 컨테이너에 아래서 이야기할 tomcat이 있습니다.

웹 서버, 그리고 웹 어플리케이션 서버란 👀

웹서버는 '클라이언트로부터 요청을 받아 정적인 컨텐츠를 제공하는' 프로그램을 의미합니다. 하지만 요것은 과거만의 의미이고, 최근의 웹 서버는 두 가지 기능을 제공해줍니다.

1) 정말 정적 컨텐츠(html, css, js) 를 내려주는 역할

2) 웹 어플리케이션 서버 앞에서 요청을 받아서, 웹 어플리케이션 서버로 전달하고 받아오는 역할

그러면 웹 어플리케이션 서버는 무엇인가요? 주로 동적인 컨텐츠를 주는 역할을 하는 서버입니다. 동적인 컨텐츠를 주기위해서 주로 DB에 연결되어 있고요.

그럼 기능이 다르니 웹 서버, 그리고 웹 어플리케이션 서버(WAS)는 따로 써도 되는 것 아니냐구요? 맞습니다. 🙆‍♀️ 자신의 서비스가 정적인 컨텐츠만 내려주는 서비스라면 웹 서버로 충분합니다. (옛날 홈페이지를 생각해봐주세요!) 그리고 웹 어플리케이션 서버 역시 단독으로 동작하여 클라이언트에서 직접 요청을 받을 수도 있습니다.

고럼 왜 웹 서버를 웹 어플리케이션 서버 앞에 두어야할까요? 🤔

1) 정적 & 동적 컨텐츠를 함께 내려줄 경우, 정적 컨텐츠는 웹서버가 직접 내려주고, 동적인 컨텐츠는 WAS 가 담당해서 부하를 줄일 수 있다.

2) 클라이언트가 직접 WAS와 연결되지 않음 → WAS는 직접 DB와 연결되어있는 경우가 많은데, 따라서 보안에서 이점이 있음

그럼 tomcat 은 뭐야

웹 어플리케이션 서버이자, 서블릿 컨테이너의 하나입니다. tomcat은 자바 파일을 컴파일해서 .class 파일로 만들고, 서블릿 객체를 만들어서 메모리에 올립니다. ****

spring boot에서는 따로 tomcat을 설치하지 않아도 된다.

spring 과 다르게 spring boot에서는 내장 tomcat이 있습니다. 따라서 따로 tomcat 서버를 설치해서 띄우지 않아도 애플리케이션을 동작시킬 수 있습니다. 물론 대부분의 경우 따로 외부 tomcat을 설치하는 것을 권장하는 것 같긴합니다.

참고


http://guruble.com/about-servlet/

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

https://jojoldu.tistory.com/267?category=635883

https://minwan1.github.io/2017/10/08/2017-10-08-Spring-Container,Servlet-Container/