Java EE
더 많은 작업
Java EE(Java Platform, Enterprise Edition, 옛 이름 J2EE, 지금 이름 Jakarta EE)는 자바로 여러 계층에 나뉜 대규모 업무 시스템을 만들 수 있도록, 웹 처리·업무 컴포넌트·트랜잭션·데이터베이스 연결 같은 서버 쪽 기능을 표준 규격(API)과 그것을 실행하는 컨테이너로 정해 둔 엔터프라이즈 자바 플랫폼이다.
일반 자바(Java SE)가 한 컴퓨터에서 도는 프로그램을 만드는 기반이라면, Java EE 는 그 위에 서버에서 많은 사용자의 요청을 동시에 받아 처리하는 데 필요한 규격을 더한 것이다. 개발자는 업무 논리만 컴포넌트로 만들고, 스레드·트랜잭션·보안·자원 풀 같은 공통 기능은 웹 애플리케이션 서버(WAS)의 컨테이너가 맡는다.
이름은 여러 번 바뀌었다. 1999년 J2EE(Java 2 Platform, Enterprise Edition)로 시작해 2006년 Java EE 5 부터 Java EE 로 불렸고, 2017년 규격 관리가 오라클에서 이클립스 재단으로 넘어가면서 Jakarta EE 가 되었다. 패키지 이름도 javax.* 에서 jakarta.* 로 바뀌었다. 시험 문제에서는 지금도 J2EE 라는 이름이 많이 쓰인다.
Java EE 는 애플리케이션을 네 계층(tier)으로 나누어 본다. 계층마다 놓이는 컴포넌트가 정해져 있다.
| 계층 | 어디서 도는가 | 놓이는 것 |
|---|---|---|
| 클라이언트 계층(Client Tier) | 사용자 컴퓨터 | 웹 브라우저(HTML 화면), 애플릿, 독립 실행 자바 응용 프로그램 |
| 웹 계층(Web Tier) | Java EE 서버의 웹 컨테이너 | 서블릿, JSP, JSF. 요청을 받아 화면을 만들고 비즈니스 계층을 부른다 |
| 비즈니스 계층(Business Tier) | Java EE 서버의 EJB 컨테이너 | 엔터프라이즈 빈(EJB): 세션 빈, 메시지 구동 빈. 옛 규격의 엔티티 빈(지금은 JPA 엔티티가 맡는다). 업무 규칙과 트랜잭션을 처리한다 |
| EIS 계층(Enterprise Information System Tier) | 별도 서버 | 기업이 이미 가진 정보 시스템. 데이터베이스 관리 시스템, ERP, CRM, 메인프레임 트랜잭션 처리 시스템, 레거시 시스템 |
- 웹 계층과 비즈니스 계층을 하나로 묶어 중간 계층(middle tier)이라고도 하며, 이 둘이 Java EE 서버 안에서 돈다. 그래서 클라이언트·Java EE 서버·EIS 를 나누어 '3계층' 으로 설명하기도 한다
- 세션 빈(session bean)은 비즈니스 계층의 컴포넌트다. EJB 컨테이너가 실행하므로 EIS 계층에 놓이지 않는다. EIS 계층에는 Java EE 가 새로 만드는 컴포넌트가 아니라, 비즈니스 계층이 연결해 쓰는 기존 시스템(DBMS·ERP·CRM·레거시)이 온다
- 비즈니스 계층이 EIS 와 이어지는 방법도 규격으로 정해져 있다. 데이터베이스는 JDBC·JPA 로, ERP·메인프레임 같은 시스템은 JCA(Java EE Connector Architecture)의 리소스 어댑터로 잇는다
| 종류 | 하는 일 |
|---|---|
| 세션 빈 | 클라이언트 하나가 요청한 업무 처리를 맡는다. 대화 상태를 기억하는 상태 유지(stateful) 빈과, 요청마다 독립적인 무상태(stateless) 빈, 애플리케이션에 하나만 있는 싱글턴(singleton) 빈이 있다 |
| 메시지 구동 빈(message-driven bean) | JMS 같은 메시지 큐의 메시지를 받아 비동기로 처리한다 |
| 엔티티 빈 | 데이터베이스 테이블의 행을 객체로 나타내던 옛 규격. EJB 3 이후 JPA 엔티티로 대체되었다 |
EJB 는 컨테이너가 트랜잭션·보안·원격 호출을 대신 처리해 주지만 설정이 무겁고 테스트가 어려워, 2000년대 중반 이후에는 같은 일을 더 가볍게 하는 스프링 프레임워크가 널리 쓰였다.
| API | 내용 |
|---|---|
| 서블릿(Servlet) | HTTP 요청을 받아 응답을 만드는 자바 클래스 |
| JSP(JavaServer Pages) | HTML 안에 자바 코드를 넣어 화면을 만든다. 실행 때 서블릿으로 바뀐다 |
| JSF(JavaServer Faces) | 컴포넌트 기반 화면 프레임워크 |
| EJB(Enterprise JavaBeans) | 비즈니스 계층의 업무 컴포넌트 규격 |
| JPA(Java Persistence API) | 객체와 관계형 데이터베이스를 잇는 ORM 규격 |
| JTA(Java Transaction API) | 여러 자원에 걸친 분산 트랜잭션 처리 |
| JMS(Java Message Service) | 메시지 큐를 이용한 비동기 통신 |
| JNDI | 이름으로 자원(데이터 소스, EJB)을 찾는 디렉터리 서비스 |
| JCA(Connector Architecture) | ERP·메인프레임 같은 EIS 를 잇는 리소스 어댑터 규격 |