프로그래밍/Java

[Servlet] 웹서버 vs 애플리케이션 서버 vs 서블릿 컨테이너 - Tomcat 은 서블릿 컨테이너일까?

Jay Tech 2019. 10. 9. 16:17
반응형

다음의 포스팅을 번역 정리한 내용인데, 조금 예전 글이라 EJB에 대한 언급이 많지만 개념을 확립하는데 도움이 되기 때문에 정리해보았다.

 

https://www.java67.com/2016/06/3-difference-between-web-server-vs-application-server-vs-servlet-container.html

 

웹 서버 vs 애플리케이션 서버 vs 서블릿 컨테이너

웹 서버, 애플리케이션 서버, 웹 컨테이너 라는 3가지 용어를 혼용해서 사용하는데 사실은 제각기 다른 것이다. 웹 서버는 정적인 페이지(HTML, CSS)를 제공하는 서버를 의미한다. 애플리케이션 서버는 서버 사이드 코드를 이용하여 동적인 컨텐츠를 만드는 서버를 의미한다. 톰캣은 정확히 말하면 애플리케이션 서버가 아니라 서블릿 엔진 혹은 웹 컨테이너 (서블릿 컨테이너로 잘 알려진) 쪽에 가깝다. 왜냐하면 서블릿과 JSP를 위한 런타임 환경을 제공하지만 애플리케이션 서버의 필수적이라고 할 수 있는 EJB 같은 기술이 적용되어 있지 않기 때문이다.

 

참고: J2EE의 핵심인 EJB(Enterprise Java Bean)는 트랜잭션 등 엔터프라이즈 (기업) 환경에서 사용하는 컴포넌트 기술이다. 즉 개발자가 비지니스 로직에만 집중할 수 있게 해준다. 현재는 Spring 이 EJB를 대신하고 있다. EJB가 대부분의 애플리케이션에서 잘 쓰이지 않는 분산 트랜잭션을 위해 사용되는데, 그것을 쓰지 않는 애플리케이션도 EJB를 쓰느라 복잡도가 증가하고 생산성을 떨어뜨리고 객체지향적이지 못하게 된다는 단점이 있었다. 

 

차이를 잘 이해하기 위해서 웹 서버, 애플리케이션 서버, 웹 컨테이너의 예시를 보자. 아파치와 IIS는 두 가지의 유명한 웹 서버이다. 아파치는 Java 세계에서 어디든 쓰이지만 IIS 는 MS 의 ASP 닷넷 세계에서 쓰인다. 자바 EE 세상에서는 애플리케이션 서버로 유명한 것들은 IBM WebSphere, Oracle WebLogic, Glassfish, JBoss 이다. 웹 컨테이너와 서블릿 엔진으로는 아파치 톰캣과 제티가 유명하다.

 

웹 서비스는 HTTP 프로토콜 레벨의 서비스를 제공하고 애플리케이션 서버는 더 강력한 동적 웹 서비스를 제공하고 비지니스 레벨의 서비스를 EJB 를 통해서 제공한다. 데이터베이스 연결 같은 필수 서비스들은 애플리케이션 서버 뿐만 아니라 톰캣과 같은 웹 컨테이너에서도 가능하다.

 

애플리케이션 서버 와 서블릿 컨테이너 집중 비교

https://stackoverflow.com/questions/5039354/difference-between-an-application-server-and-a-servlet-container

다음은 스택 오버 플로우에서 application server 와 servlet container 의 차이점에 대해서 답변이 달린 내용에 대한 번역이다.

 

서블릿 컨테이너는 오직 서블릿 API 만 지원하는 것을 말한다 (JSP, JSTL 까지 포함해서)

애플리케이션 서버는 Java EE (EJB, JMS, CDI, JTA, 서블릿 API) 의 전체를 지원한다.

JBoss 같은 애플리케이션 서버는 웹 컨테이너보다 더 많은 기술들을 다룰 수 있다.

 

톰캣이나 제티 같은 서버를 서블릿 컨테이너라고 부르는 것은 약간 제한적이다. 왜냐하면 톰캣은 서블릿 뿐만 아니라 JSP 같은 것도 실행할 수 있기 때문이다.

 

여러 글들을 참고하여 정리해보았는데 사실은 의견이 제각각이라고 생각될 수 있다. 하지만 어떻게 보면 restrict 한 관점의 차이라고 생각된다.

 

톰캣을 그냥 서블릿 컨테이너라고 부르는 것에 대해 그 정도면 허용할 수 있다 라는 관점과 톰캣이 서블릿 관리 이외의 기능을 수행하기 때문에 서블릿 컨테이너를 포함하는 개념이다라는 관점으로 정리할 수 있다. (즉 WAS가 서블릿 컨테이너를 포함한다라는 개념)

 

필자의 생각은 후자에 가깝다. 용어에 대한 경계를 조금 씩 봐주게 된다면 오히려 개념정리가 어렵기 때문에 확실히 선을 긋는게 좋다고 본다.

다음에는 서블릿 스펙에 대해 정리해보려고 한다.

 

참고)

http://wiki.hash.kr/index.php/%EC%8A%A4%ED%94%84%EB%A7%81

반응형