Java로 웹 애플리케이션을 개발하게 되면서 여러 가지 용어들을 많이 접하게 되었습니다. 당장 눈앞에 놓인 문제들만 풀어가면서 공부를 하다가 보니 기본적인 용어들에 대한 이해가 너무 부족하다는 생각이 들었습니다. 그래서 당장 떠오른 용어들을 몇 가지 공부하면서 정리해 봤습니다.
여기서는 웹서버, WAS, CGI 프로그래밍, 웹 컨테이너, 그리고 Java SE, Java EE, Jakarta EE에 대해서 기본적인 개념만 정리하였습니다.
1. Web Serveer 와 WAS
1.1 WEB Server
클라이언트의 request(요청)을 받아 정적인 콘텐츠(html, css, js 등)를 response(응답)하는 서버
예) Apache, Nginx, WebtoB 등
1.2 WAS (Web Application Server)
클라이언트의 request(요청)을 받아, DB 조회나 어떤 로직을 처리해서 결과를 반환하는, 동적인 콘텐츠 response(응답)하는 서버
예) Tomcat, WebLogic, WebSphere, Jeus, JBoss 등
1.3 WEB Server와 WAS의 차이점
- 어떤 타입의 콘텐츠(동적, 정적)를 제공하는가?
- Web Server와 WAS는 각각 독립적으로 존재할 수 있다.
- 대부분의 WAS는 정적인 콘텐츠를 제공해주는 기능이 있기 때문에, WEB Server 없이 WAS만 사용할 수 있다. 즉 WAS는 Web Server를 포함한다고 할 수 있다.
1.4 WEB Server를 사용하는 이유
- WAS가 해야 할 일의 부담을 줄이기 위해서 WEB Server가 모든 요청을 받아 정적인 콘텐츠는 직접 처리하고, 동적인 콘텐츠는 WAS에 요청을 넘겨서 처리하도록 기능을 분담하여 WAS 서버의 부담을 줄여준다.
- WAS를 방화벽 안에 포함시켜 운영하여 보안을 강화할 수 있다. WAS의 경우 DB Server와 접속하여 요청을 처리하게 되므로 WAS가 인터넷망에 직접 노출이 되면 보안이 조금 더 취약하다. WEB Server만 인터넷 망에 노출시키고 WAS를 인트라넷에 두어 보안을 강화시킬 수 있다.
2. CGI (Common Gateway Interface)
웹 서버에서 동적인 페이지를 보여주기 위해 임의의 프로그램을 실행할 수 있도록 하는 기술 중 하나입니다.
원래 웹 서버는 서버에 저장되어 있는 정적인 콘텐츠를 보여주는 역할을 합니다. 그러나 웹 서버에서 동적인 페이지를 보여주기 위한 방법을 구현하기 위해 웹 서버가 특정한 URL로 들어가면 요청을 원하는 프로그램에 제어를 넘겨주는 기술이 CGI입니다.
특정 URL이 CGI 프로그램이 대응되도록 설정하고 요청이 들어오면 그 프로그램을 실행해서 결과를 표준 출력으로 응답합니다. 즉 C, Perl, Python 등 다양한 프로그램 언어를 사용하여 프로그램을 만들고 이 프로그램은 사용자 요청에 대한 결과를 동적으로 생성하여 HTML을 만든 후 웹 서버에게 응답하도록 합니다. WAS가 나오기 전에는 CGI를 이용하여 웹 서버에서 동적인 콘텐츠를 관리할 수 있었습니다.
그러나 Java는 CGI를 적용할 수 없었고 대안으로 컨테이너를 만들었습니다.
3. WAS 와 Web Container
3.1 Web Container (Servlet Container)
Web Container는 Servlet Container라고도 합니다.
간단히 말하면 Servlet, JSP를 실행할 수 있는 소프트웨어를 Web Container라고 합니다.
Web Continaer의 역할은 웹 서버에서 JSP를 요청하면 Web Container에서는 JSP파일을 서블릿 파일로 변환하고 컴파일하여 이것을 실행한 결과를 웹 서버에 전달합니다.
3.2 WAS (Web Application Server)
Web Server와 Web Container가 합쳐진 것이라 할 수 있습니다.
해외에서는 Application Server라고 부르기도 합니다.
웹 애플리케이션 서버는 J2EE의 스펙을 구현하여, 서블릿(Servlet)이나 JSP로 작성된 애플리케이션을 실행하는 소프트웨어입니다. J2EE는 버전이 업그레이 되면서 2006년 5월에 5.0 버전을 발표하면서 Java EE(Java Platform, Enterprise Edition)로 명칭이 변경되었습니다.
4. Java SE, Java EE & Jakarata EE
4.1 Java SE (Java Platform, Standard Edition)
Java SE는 데스크톱 및 서버 환경을 위한 이식 가능한 코드의 개발 및 배포를 위한 플랫폼입니다. Java SE는 프로그래밍 언어로 Java를 사용합니다. Java에서 애플리케이션 개발을 지원하기 위한 JCL(Java Class Library)과 자바 가상 머신(JVM : Java Virtual Machine) 규격을 포함합니다.
4.2 Java EE (Java Platform, Enterprise Edition)
Java EE는 분산 엔터프라이즈 애플리케이션을 개발하기 위한 산업 표준 플랫폼입니다. Java EE의 주요 목적은 특정 운영체제와 미들웨어에 종속되지 않고 정보 교환 및 애플리케이션 호환이 가능한 플랫폼을 제공하는 것입니다.
Java의 기본적인 기능을 정의한 Java SE(Java Platform, Standard Edition)에 다양한 요구 사항을 반영하여 만들어진 API와 표준들 가운데, JCP(Java Community Process)의 후원 아래 SUN(SUN Microsystems)와 기업들이 엔터프라이즈 관련 표준화 과정을 거친 여러 가지 API를 통합하여 만든 것이 최초의 J2EE(Java 2 Enterprise Edition)입니다. 이후 버전을 업그레이드하여 5.0 버전부터는 Java EE로 명칭이 변경되었습니다.
아래는 Java EE 8의 스펙을 도식화한 것입니다.
익히 알고 있는 JSP, Servlet, EL 등은 Java EE의 일부분입니다.
4.3 Jakarta EE (Jakarta, Enterprise Edition)
Java EE는 초창기에는 큰 인기를 누렸지만 현재는 상업용 플랫폼의 한계와 스프링 프레임워크 등의 오픈소스 소프트웨어의 발전으로 인기가 하락하였습니다. 2010년 1월 SUN에서 Oracle에 인수된 Java EE는 2017년 Java EE 8을 마지막으로 이클립스 재단에 Java EE 프로젝트를 이관했습니다. 덕분에 지금은 Java EE 대신 Jakarta EE(Jakarta, Enterprise Edition)으로 이름을 변경하고 새롭게 프로젝트를 진행 중입니다.
중요한 점은 Jakarta EE는 기존 Java EE와 호환되지 않습니다. Java EE는 계속 유지되고 있지만 8 버전을 마지막으로 더 이상의 릴리즈와 추가 기능은 제공하고 있지 않습니다. 지금은 Java EE에서 Jakarta EE로 마이그레이션을 지원하는 도구가 제공되고 있고, Java EE도 주요한 패치는 계속 유지될 것이기 때문에 큰 문제는 없습니다. 그러나 시간이 점점 흐르면 나중에는 Jakarta EE를 주로 사용하게 될 시기가 올 것 같습니다.
참고
https://doozi316.github.io/web/2020/09/13/WEB26/
https://www.oracle.com/java/technologies/javaee-faq.html
https://en.wikipedia.org/wiki/Jakarta_EE
https://www.oracle.com/java/technologies/platform-glance.html
https://linux.systemv.pe.kr/jee-7-jee-8-and-jakarta-ee-8/
https://m.post.naver.com/viewer/postView.naver?volumeNo=32283437
'Dev. Handbook > Tech, Trend' 카테고리의 다른 글
[Design Pattern] 디자인 패턴 개요, 역사 및 종류 알아보기 (0) | 2022.06.02 |
---|---|
Declarative,선언형 vs Imperative,명령형 프로그래밍 (0) | 2022.05.01 |
댓글