JavaEE WAS와 톰캣의 차이

Q&A·2023년 12월 22일

이슈

원래 WAS는 톰캣밖에 몰랐는데 고객사에서는 JBoss, WebLogic 같은 처음 들어보는 WAS를 사용했다. 톰캣에서는 제대로 적용되는 소스들도 고객사에 배포한 뒤에 문제가 생기는 일이 일상이었다. 기본적인 컨셉은 알아둬야겠다고 생각하여 고객사 WAS에 대해 검색하다보니 톰캣은 JBoss나 WebLogic과는 다른 종류의 서버였다. 호기심이 생겨서 JBoss와 WebLogic, 즉 JavaEE에 대해 알아보았다.

JavaEE

JavaEE란 기업용 애플리케이션을 개발 및 실행하는데 필요한 사양들을 정의한 명세서이다. 빈의 생명주기, 보안, 트랜잭션을 관리할 수 있다. 이 JavaEE를 제품으로 구현한 것을 WAS라고 한다.

JavaEE 컨테이너 구성

Application Client Container

JVM에서 실행할 자바 클라이언트 프로그램/자바클래스/라이브러리 등 자바 클라이언트 프로그램을 실행할 수 있는 시스템 서비스를 제공한다.

Web Container

서블릿 컨테이너, 서블릿 엔진이라고도 불린다.
서블릿과 jsp 페이지를 관리하며 http 요청이 들어오면 처리해서 클라이언트에 전달하는 역할을 한다.

EJB Container

EJB(Enterprise Java Beans)의 실행을 관리한다. 빈의 생명주기를 관리하고 비즈니스 로직을 처리하는 역할을 한다.
EJB의 종류는 다음과 같다. EJB의 모듈들이 JPA나 JMS처럼 독립 api로 나뉘었다고 들어 간단한 정의만 알아봤다.

  • Session Bean: 비즈니스 로직 처리
    • Stateless Session Bean: 클라이언트 요청 상태 유지X
    • Stateful Session Bean: 클라이언트 요청 상태 유지
    • Singleton Session Bean: 하나의 세션 빈에서 요청 모두 처리
  • Entity Bean: 데이터베이스 정보 - 오브젝트 매핑
    • CMP(Component Managed Persistence)
    • CMP(Container Managed Persistence)
    • JPA(Java Persistence API): 데이터베이스의 밀집도 좋아짐, 개발 효율성/성능 보장
  • MDB (Message Driven Bean)
    • JMS(Java Message Service) API: 클라이언트 요청 비동기로 처리 가능, 큐 자료구조 사용

톰캣은 WAS가 아닌가?

위의 정의에 따르면 톰캣은 WAS가 아니다. 그렇지만 JavaEE는 사용하기 불편한 점이 많아 최근에 많이 쓰이지 않게 되었다. 스프링의 등장으로 EJB Container가 대체되고, Web Container는 톰캣으로 대체되면서 Web Container를 포함하면 일반적으로 WAS라고 부르게 되었다고 한다.
톰캣은 원래 서블릿과 JSP 기술을 참조하여 구현하는 목적으로 만들어졌기 때문에 웹 컨테이너를 대체하기에 적합했던 것 같다.

참고 링크

profile
스스로에게 질문을 던지고, 대답하는 블로그

0개의 댓글