본문 바로가기
PROGRAM/JAVA / JSP

[자바 웹 개발 워크북] 서블릿 프로그래밍 (1)

by ojava 2016. 2. 11.
반응형

[열혈강의 : 자바 웹 개발 워크북] 을 보고 요약 및 공부한 내용을 적는 글임을 알립니다.


Chaper 03. 서블릿 프로그래밍 (1)


 

 

서블릿 (Servlet) 은 자바에서 제공하는 서버 애플리케이션 개발을 위한 기술로,

웹 브라우저와 웹 서버를 이용해서 웹 애플리케이션을 개발하는 것을 '서블릿 프로그래밍'이라 한다.


해당 챕터에서는 서블릿 프로그래밍에 대해 알고, 서블릿 인터페이스 이해를 위한 내용이 담겨져있다.

이러한 내용을 이해한 뒤에 HttpServlet을 사용하는 방법을 배운다.

내용이 너무 길어져서 실제 서블릿 사용법 이전에 서블릿에 대한 개요를 설명하는 부분을 1번으로

실제 서블릿 사용과 관련한 부분을 2로 나누어서 작성하겠다.

 


 

해당 챕터에서 기본적인 개념과 웹 애플리케이션 세팅과 관련한 내용을 다루므로

내용이 길어도 중요한 내용이 많으므로 꼼꼼히 확인하시길!

 


 

 

1) CGI 프로그램과 서블릿


- CGI 프로그램

: 웹 애플리케이션은 사용자가 웹 브라우저를 통해 보낸 요청이 웹 서버로 전달되어 간접적으로 실행시키는 프로그램이다.

: 웹 서버가 클라이언트가 요청한 프로그램을 찾아 실행시키고, 그 작업의 결과값을 전달받는 과정에서

 데이터를 주고받는 규칙을 CGI (Common Gateway Interface) 라고 한다.

: 웹 서버에 의해 실행되며 CGI 규칙에 따라 웹 서버와 데이터를 주고받는 프로그램을 CGI 프로그램이라 한다.


 

 


: C, C++, Java와 같은 컴파일 언어로 작성 가능, VBScript, PHP, Python, Perl 등 스크립트 언어로도 작성 가능

: 컴파일 방식의 언어는 실행 속도가 빠르나, 수정 시 컴파일하여 재배포해야 하는 단점이 있으며,

 스크립트 방식의 언어는 인터프리터 방식으로 읽어들이므로 속도는 느리나 변경 사항 발생 시 즉시 반영이 가능함


- 서블릿

: 자바 CGI 프로그램은 C, C++ 처럼 컴파일 방식이며, 자바 기반의 CGI 프로그램을 '서블릿'이라 한다.

: 서블릿이 여타 CGI 프로그램과 다른점은 웹 서버와 직접 데이터를 주고받지 않고 서블릿 컨테이너를 통해 관리된다.

: '서블릿 컨테이너' 는 서블릿의 생성/실행/소멸 등 생명주기를 관리하는 프로그램으로

 서블릿을 대신하여 CGI 규칙에 따라 웹 서버와 데이터를 주고받는다. 

: 따라서 CGI 규칙을 알 필요는 없으나, JavaEE 기술 사양에 포함된 Servlet 규칙을 알고 개발해야 한다.

 

 

 

 


 

2) 서블릿, JSP, JAVA EE 그리고 WAS


- Java EE (Java Platform, Enterprise Edition)


Java에는 EE, SE가 존재하는데 EE는 Enterprise Edition, SE는 Standard Edition이다.


우리가 다루게 될 Java EE는 기능 확장이 쉽고, 이기종 간의 인식이 쉬우며 신뢰성과 보안성이 높고

트랜잭션 관리와 분산 기능을 쉽게 구현할 수 있다. Java EE는 애플리케이션 개발에 필요한 복합적인 기술을

정의하고 모아둔 것으로, 버전이 갱신될 때마다 신규 기술이 추가되고 각 기술의 버전도 갱신되고 있다.


이러한 Java EE가 지원하는 기술 목록 안에 Java Servlet과 JavaServer Pages (JSP)가 포함되어있다.

이 두 기술은 웹을 기반으로 한 클라이언트-서버 기술을 정의하고 있으므로,

자바로 웹 어플리케이션을 개발한다는 것은 서블릿과 JSP를 이용하여 개발한다는 말로 이해할 수 있다.



- WAS (Web Application Server)


C/S 구조에서 서버 쪽 애플리케이션의 생성, 실행, 소멸을 관리하는 프로그램을 '애플리케이션 서버'라고 한다.

그 중 서블릿 컨테이너와 같이 웹 기술을 기반으로 동작되는 애플리케이션 서버를 'WAS' (Web Application Server) 라 한다.


Java에서 말하는 WAS란, Java EE 사양을 준수하여 만든 서버를 의미하며

Oracle의 WebLogic, GlassFish, 레드햇의 JBoss Enterprise, JBoss AS, Apache의 Geronimo 등이 있다. 


그렇다면 우리가 익히 아는 Apache Tomcat은 WAS가 아니고 뭘까?


Java EE가 구현하고 있는 Servlet, JSP 등의 웹 관련 부분만 구현한 서버인 

'서블릿 컨테이너' 또는 '웹 컨테이너'에 해당되는 것이 바로 Apache Tomcat이다.

(이 외에 Caucho의 Resin, 오픈 프로젝트인 Jetty가 서블릿 컨테이너에 해당된다.)



Java EE를 이용하여 웹 애플리케이션 개발을 할 때에는 WAS 또는 서블릿 컨테이너의

버전을 확인하여 그 버전에 맞는 API를 사용해야 할 필요가 있다. (Java EE 버전별로 구현하는 기술이 다르므로)




3) 웹 프로젝트 준비


 

 

 

1. 웹 프로젝트를 신규로 생성한다.

"Dynamic Web Project" 를 이용하여 생성.

 

Navigation 또는 Project Explorer에서 오른쪽 클릭

> New > Dynamic Web Project를 선택하거나

 

왼쪽같은 화면을 보기 위해서는 New > Other를 선택하면

모든 종류의 신규 파일 또는 프로젝트 확인이 가능하다.

 

 

 

 

 

 

 

2. Dynamic Web Project의 세부내역을 작성한다.

 

Project name 부분에 프로젝트 이름이 될 내용을 쓴다.

영역을 알려주기 위해서 한글로 적어두었지만 실제로 만들 때는

ServletProject 라는 이름으로 생성하였다.

 

Target runtime 부분에 해당 프로젝트가 실행될 서버를 배치한다.
만약 서버 설정이 되어 있지 않다면 옆 부분의 New Runtime 버튼으로

Tomcat을 추가하여 신규 서버를 세팅하면 된다.

(물론 Tomcat이 아니라 WebLogic 이든 뭐든 원하는 것으로)

 

Dynamic Web Module version 부분은 서블릿 개발의 목표 버전이다.

해당 버전에 따라 JSP, Servlet API 구현 방식이 달라질 수 있다.

 

 

 

 

 

3. build path (빌드될 java 파일이 있는 경로) 는 소스 폴더 위치이고

build path에서 compile 된 결과물 (.class 파일) 이 나올

output 폴더 위치를 지정한다.

 

기본적으로 지정되어 있는 내용을 써도 좋고 src를 java로 변경하거나

output 폴더를 WEB-INF\bin 등으로 변경하는 경우도 종종 있다.

 

물론 그대로 쓰는 경우가 더 많은 듯.

 

4. Web Module 정보를 입력한다.

- Context root : 웹 애플리케이션 이름, 기본값으로 프로젝트명을 사용하며 이 이름을 이용해서 배치한다. (서버에 올라간다)

 

- Content directory : 웹 콘텐츠 파일을 저장할 작업 폴더의 이름.

서버에 자동 배치 하는경우 이 폴더를 복사하게 된다.
기본적으로 사용하는 WebContent 폴더명을 사용하길 권장한다.

 

- Generate web.xml deployment description
: 웹 애플리케이션 배치 설명서 파일인 web.xml을 자동 생성하는 옵션이다. 선택하면 WEB-INF 밑에 web.xml이 생긴다.

 

 

 

 

 

 

 

 

 

위의 순서를 따라 만든 ServletProject (프로젝트명) 의 구조이다.

설정이야 바꾸기 나름이므로, 기본적인 세팅값을 이용했다는 가정하에 웹 프로젝트 폴더 구조와 특징에 대해 설명한다.

 

 

 

 

src

- java 소스 파일을 두는 폴더. build path 부분에 해당되며, 서블릿 클래스나 필터, 리스너 등 향후 개발하는

  모든 java 파일을 두는 곳이다. 프로퍼티 파일 (.properties)도 이 폴더에 위치한다.


build/classes

- 컴파일 된 자바 클래스 파일 (.class) 이 속하는 폴더. output folder에서 지정한 값이 해당된다.


WebContent

- Web Module 정보 입력 시에 Content directory로 설정한 값이 해당된다. 기본적으로 WebContent를 사용한다.

  HTML, CSS, JavaScript, JSP, 이미지 등 웹 콘텐츠를 두는 폴더로 서버에 올릴 때 이 폴더 그대로 복사된다.

 

 


 

WebContent / WEB-INF

- 웹 애플리케이션의 설정과 관련된 파일이 모여있는 곳으로, 해당 폴더에 있는 파일은 클라이언트에서 열 수 없다.

  HTML, CSS, JS 등이 이 폴더에 있으면 클라이언트에서는 사용할 수 없다.


WebContent / WEB-INF / web.xml

- 웹 애플리케이션의 배치 설명서 (Deployment Description) 파일, DD 파일이라고도 부르며

  서블릿이나 필터, 리스너, 매개변수, 기본 웹 페이지 (welcome page) 등의 정보를 여기에 작성한다.

  서블릿 컨테이너는 클라이언트 요청을 처리할 때 이 파일을 참고하여 서블릿 클래스를 찾고 필터를 실행하는 등 작업 수행의 기반이 된다.


WebContent / WEB-INF / lib

- 자바 아카이브 파일 (Java ARchive = jar) 을 두는 폴더로,

  jar 파일은 특정한 기능을 구현한 class 파일과 properties 파일을 모아둔 파일로

  Java에서는 기 구현내용을 import 하기 위해 jar 파일을 추가한다.


 


 

여기까지를 기본적인 서블릿 프로그래밍 진행하기 위한 개념과정으로 생각하고

다음 서블릿 프로그래밍 (2), 에서 실제 서블릿 프로그래밍과 web.xml 파일에 대해 설명하겠다.


 


반응형