우즈교민

JSP2.0 웹프로그래밍 1장


웹프로그래밍?

CGI , ASP , PHP , JSP 등을 일컬음

기본적으로 클라이언트 / 서버 방식 : 클라리언트(웹 브라우저)가 특정 페이지를 웹 서버에 요청(Request) 하게되면 웹 서버가 이를 처리한 후 결과를 클라이언트에게 응답(Response)을 하게되는

구조를 띈다.

웹 프로그래밍언어 ?

CGI (Common Gateway Interface) : 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약들을 말함 . 브라우저가 서버를 경유하여 데이터 베이스 서버에 질의를 요구하는 작업을 처리하는 대화형(동적)웹 페이지를 작성할 때 이용한다.

CGI는 웹 서버와 동적 콘텐츠 생성을 맡은 프로그램 사이에서 정보를 주고받는 인터페이스이다.

어떠한 언어라도 CGI의 규약을 준수한다면 사용가능하다는 장점을 띈다.

개발언어 - Perl , Windows Platform , Visual Basic 등이 사용되는 경우가 많다

ASP ( Active Server Page) : Microsoft사에서 만들어짐 . 비주얼베이직 언어에서 사용되는 문법들을 사용하여 동적 콘텐츠를 만들어 내기 위한 기술 . ActiveX란 컴포넌트를 직접 사용.

하지만 특정 웹 서버와 OS에서만 동작한다는 단점이있다.Windows Platform에서는 웹 서버로 IIS(Internet Information Server)를 사용한다.

PHP ( Personal HomePage tools, Professional Hypertext Preprocessor ) : ASP와 달리 특정 영역에서만 동작하지않고 C언어 문법과 유사하기때문에 기존 개발자들이 보다 쉽게 접근할수있음 . 적은 명령어들로서 프로그래밍이 가능하도록 되어 있기 때문에 편리성 측면에선 많은 이점이있으나 , 많은 요구들에 대한 PHP가 지원해 주는 기능들이 미약한 단점이 있다.(컴포넌트의 문제 등.)

Servlet (Server + Applet) : Sun사에서 개발 . 자바언어 기반하여 동적인 콘텐츠를 생성하는 기술을 제공한다. 자바형석과 거의 흡사하므로 자바를 미리 학습하지않으면 작성하기 어려움 . 또한 HTML 태그가 혼재되어 작업에 분리적인 측면에서 볼 때 그 효율성이 떨어진다.

JSP ( Java Server Page ) : SUN사에서 개발 . JAVA언어를 기반으로 하고 있으나 동적 콘텐츠를 생성하기 위해 스크립트 언어 형식으로 프로그램을 작성할 수 있어 개발자에게 쉬운 개발을 할 수 있게 한다. 또한 JSP는 사용자가 직접 태그를 정의해서 사용할 수 있는 사용자 정의 태그를 지정할 수 있는 기능을 갖고 있어서 보다 효율적인 웹 사이트를 구성할 수 있다.

 

웹 어플리케이션이란? 웹을 기반으로 실행되는 프로그램을 의미.

웹 브라우저 - ①요청 -> 웹서버 - ②처리를 요청 -> 웹 어플리케이션 서버 - ③처리를 수행 -> 데이터베이스  - ③처리를 수행 -> 웹 어플리케이션 - ④서버(처리결과 웹서버로 돌려보낸다.) -> 웹서버- ⑤응답 ->  웹 브라우저

 

대표적인 웹 서버 종류 - 아파치 , IIS(IIS는 윈도우즈 플랫폼에서만 사용한다는 단점이있다.)

 

대표적인 웹 어플리케이 서버(WAS: Web Application Server) 종류 - BEA사의 웹로직 , IBM의 웹스피어 , SUN사의 iPlanet , Oracle 9iAS, 국산으로는 제우스등이있다.

CGI 방식 vs 웹 어플리케이션 서버방식 : 기본적인 구조는 같으나 단 차이점은 웹 서버가 웹 어플리케이션 프로그램을 어떤 방식으로 사용하는가의 차이이다.

CGI방식은 웹 서버가 어플리케이션 프로그램을 직접 호출하는 구조이나 어플리케이션 프로그램은 프로세스를 생성하여 처리하게되는데, 한 요청에 대해 한 프로세스가 생성되어서 그 요청을 처리한 뒤 종료한다.CGI프로그램은 많은 사용자가 몰리는 웹 사이트에 요청되는 수많은 요청에 대해서 하나의 요청마다 새로운 프로세스가 생성이 되고 , 처리를 하고 , 종료를 하는 식의 운영방식을 갖는데 이것은 시스템에 많은 부하를 자겨오기 때문에 중대한 단점이 된다.

웹 어플리케이션방식은 웹 어플리케이션 서버에게 처리를 넘겨주고 어플리케이션 서버가 어플리케이션 프로그램을 처리한다. 여러명의 사용자가 동일한 페이지를 요청하여 같은 어플리케이션프로그램을 처리할 때 오직 한 개의 프로세스만을 할당하고 사용자의 요청을 쓰레드방식으로 처리한다.

사용자의 요청을 쓰레드 방식으로 처리한다는 것은 메모리를 절약할 수 있기 때문에 CGI 방식에 비해 동시에 더 많은 사용자에게 서비스를 할 수 있어 전체적인 성능의 향상을 가져와서 보다 안정적인 웹 서비스를 제공하는 것이 가능하다.

※ Thread? 프로세스 내의 명령어 블록으로 쓰레드는 프로세스 내에 있는것.프로세스가 이미 메모리를 할당받았으므로 쓰레드는 메모리를 할당 받지 않는다. 하나의 프로세스를 여러개의 쓰레드로 나누어 동시에 처리하는 것을 다중 쓰레딩이라 한다. 메모리를 점유하지 않으므로 프로그램 수행속도를 향상시킨다.

-------------------------------------------------------------------------------------

JSP ( Java Server Page ) : SUN사에서 개발 . JAVA언어를 기반으로 하고 있으나 동적 콘텐츠를 생성하기 위해 스크립트 언어 형식으로 프로그램을 작성할 수 있어 개발자에게 쉬운 개발을 할 수 있게 한다. 또한 JSP는 사용자가 직접 태그를 정의해서 사용할 수 있는 사용자 정의 태그를 지정할 수 있는 기능을 갖고 있어서 보다 효율적인 웹 사이트를 구성할 수 있다.

Container : 거의모든 프로그래밍 프레임 워크에서 가장 중요한 요소느느 잘 정의되고 재 사용 가능한 비즈니스 로직을 작성할 수 있도록 도와주는 컴포넌트이다.

웹 컨테이너는 서블릿과 JSP에 대한 실행 환결을 제공 / EJB컨테이너는 Enterprise JavaBean에 대한 실행 환경을 제공한다.

컨테이너를 구성하는 3가지 기술

1. Servlet , 2. JSP ( Java Server Page ) , 3. EJB ( Enterprise Java Beans )

Service API 종류 : JDBC 2.0 API , XML( eXtensible Markup Language ) , JavaMail , JTA( Java Transaction API ) , JMS( Java Massaging System ) , JNDI( Java Naming and Directiory Interface )

-------------------------------------------------------------------------------------

Servlet의 개요

클라이언트를 쓰레드로 처리한다. 많은 클라이언트의 요구를 효과적으로 처리할 수 있다.

메소드들은 반드시 멀티쓰레드에 대한 고려를 해야한다. JSP는 페이지의 요청이 있을 시에 최초에 한번 자바 코드로 변환된 후 서블릿 클래스로 컴파일된다. 결론적으로 JSP는 실행시 서블릿으로 변환된다. 단 한번만 서블릿으로 변경되며 코드를 수정하기 전까지 재 변환 작업이 일어나지 않기 ‹š문에 JSP나 서블릿간에 별차리가 없다. JSP에서 정적인 부분을 담당하고 , 서블릿은 보다 동적인 처리를 위한 부분으로 사용된다. JSP는 주로 사용자 View의 구현에 사용되고 서블릿은 사용자용 뷰와 프로그램 로직 사이를 제어해 주는 역할에 주로 사용된다.

HTTP 프로토콜 동작원리

HTTP는 비연결(Connectionless : 클라이언트의 요청에 응답한 후 바로 연결을 끊음)

비상태(Stateless : 서버의 상태가 어떤지 간에 상관없이 요청 함)의 특징을 갖는다.

HTTP메소드 종류

1. Get : HTTP header에 정보를 실어 보냄 , default , Start-line의 URL뒤에 붙음,전달속도빠름

           256byte가 한계 , 적은 양의 데이터 전송 시 좋다

2. Post : HTTP의 body에 정보를 실어 보냄 , 데이터 사이즈의 제한이 없다 , 보안에 좋다

3. Head : Header(서버)에 정보만 온다.

4. Put : Resource를 저장할 때 사용

5. Delete : Resource를 제거할 ‹š 사용 , Put과 Delete를 허용하며 서버의 안정성이 떨어진다.

6. Trace : 클라이언트에서 서버까지 가는 경로를 추적

7. Options : 서버의 성능 등 ...

Servlet 동작원리

Servlet은 두 패키지인 javax.servlet과 javax.servlet.http의 클래스와 인터페이스를 이용해 만든다.

javax.servlet패키지는 프로토콜에 독립적인 서블릿을 만들기 위한 클래스를 제공한다.

javax.servlet.http패키지는 HTTP프로토콜의 고유한 기능(GET , POST)을 제공하는 서블릿을 만드는

클래스를 제공한다.웹 브라우저에 의해 실행되어 자바 애플릿처럼 서블릿은 main() 메소드를 갖지 않는다. 대신 서블릿의 특정한 메소드는 서버가 호출한다. 서버가 서블릿에 요청을 전달할 때마다 서블릿의 service() 메소드가 호출된다.

Generic서블릿은 요청을 처리하기 위해 자신의 service() 메소드를 오버라이드해야한다. service()메소드는 두 개의 파라미터(request , response)를 받아들인다. request - 클라이언트 요청을 처리

response - 클라이언트 요청의 처리결과를 클라리언트에 반환하기 위해 사용된다.

HTTP서블릿은 일반적으로 service() 메소드를 오버라이드하지 않는다. 대신에 GET요청을 다루기 위해 doGet()을 오버라이드 하며, POST요청을 다루기 위해 doPost()를 오버라이드 한다.

javax.servlet.http 패키지 안에 있는 HttpServletRequest , HttpServletResponse는 HTTP요청에 대한 기능을 제공한다.

doGet(HttpServletReqeust req , HttpServletResponse res)메소드는 반드시

throws ServletException, IOException처리를 해주어야 한다.

※ 서블릿의 요청과 응답의 과정

1. 클라이언트의 서비스 요청 -> 객체 생성의 유무 체크 : Only one

2. Yes면 생성 안 함. No면 객체 생성(메모리에 올린다.)

3. Invoker를 실행한다. Thread를 하나 만들어 준다 -> 작업용 Request당 1개씩

4. Invoker에서 생성된 Thread에서 service 메소드(response 의 내용이 담김)를 호출. Thread의 run 메소드와 유사 , 클라이언트당 1개씩 생성

5. 결과를 클라이언트에게 보낸다. 이때 결과를 mime type으로 보내는데 웹 브라우저의 mime type은 text/html이다.

컨테이너는 생성 유.무를 체크해서 객체가 생성되어 있지 않으면 생성한다. tomcat ,resine등은 웹 컨테이너이다.

※ 서블릿의 요청과 응답의 과정에서 Container가 하는 일

1. 객체가 있는지 유무 판단 , 없으면 생성

2. Thread 생성

3. Service() 호출

4. Service() (HttpServlet class의 메소드)가 doGet() 자동 호출

※ 서블릿의 요청과 응답의 과정에서 Service()가 하는 일

1. Request가 올 때 마다 doGet() 를 호출한다.

2. doGet()는 HttpServlet에 의해 지원 받는 몇몇 Servlet() 중 하나이다.

---------------------------------------------------------------------------------------

서블릿 라이프 사이클

서블릿이 처음에 로드되면 init() 메소드가 실행된다. init() 메소드에서는 서블릿이 서비스 하기 위해 필요한 초기화 작업을 수행하고 init() 메소드가 service() 메소드를 호출한다.

초기화된 서블릿은 클라이언트의 요청이 있을‹š 마다 쓰레드가 생성이 되어서 병행적으로 service() 메소드를 실행한다.

서블릿은 더 이상 서비스를 하지 않을 경우에는 서블릿 엔진에 의해 메모리에서 언로드 된다. 이 때 언로드 되기 전에 destroy() 메소드가 실행된다.

service() 메소드는 0회 이상 실행되고, init() 메소드는 여러 번 실행될 수 있지만 그전에 destroy() 메소드가 실행되어야 한다.

ㅇ init() : 단 1번만 호출된다(Container 당 1개)

ㅇ service() : request 당 1개씩 호출된다. reload도 해당.

ㅇ destroy : 1번만 호출된다. 관리 container가 종료될 때, timeout이 되었을 때, class의 내용이 변경되었을 때(재 컴파일시에도 해당) 호출된다.

동적 웹 콘텐츠 제공 기술 중 가정 전통적인 방법으로 CGI라는 기술이 탄생되었지만 프로세스 기반의 CGI 기술은 시스템에 많은 부하를 가져오는 단점이 있다. 이에 따라 전통적인 CGI 방식의 단점을 해소하기 위한 웹 어플리케이션 서버 방식의 기술이 탄생하게 되었다.

웹 어플리케이션 서버 방식을 사용하는 웹 프로그래밍 언어에는 ASP , PHP , Servlet/JSP 등이 있는데 이들은 기존의 CGI 프로그램의 단점을 해소한 기술들이다. 서블릿과 JSP는 Sun사에서 출시한 기술로 자바를 기반으로 하고 있어 자바가 가지는 특성과 장점을 수용하여 플랫폼 독립 , 객체지향적 , 멀티쓰레딩 등의 장점을 가지고 있다.

서블릿은 완전한 자바 프로그램으로 프로그램 코드 안에 HTML태그가 삽입된 형태이다. 그리고 컴파일 과정을 거친 후에 실행 가능한 상태로 된다. 한 웹페이지에 표시될 내용 중에 정적으로 생성되어야 할 HTML 부분들과 동적으로 생성되어야 할 부분들이 한 프로그램 안에 섞여 있기 때문에 디자인과 프로그램 독단적으로 작업하기에는 어려움이 있다. 또한 프로그램 개발에도 자바 언어에 대한 보다 전문적인 지식이 요구되므로 개발이 어려운 점이 있다.

JSP는 ASP,PHP 등 스크립트 언어 형식으로 정적의 HTML부분에 동적인 JSP명령어가 삽입된 형태로 서블릿보다 좀 더 쉽게 동적인 웹페이지 개발에 접근 할 수 있다. 또한 JavaBeans컴포넌트 지원과 사용자 정의 태그로 정적인 부분과 동적인 부분에 대한 분리를 보다 확실히 할 수 있는 큰 장점이 있다. JSP는 서블릿으로 자동 변환이 된 후 컴파일 과정을 거쳐서 실행 가능한 상태로 된다.

서블릿과 JSP는 상호 연계되어 JSP에서 정적인 부분을 담당하고 서블릿에서 동적인 처리를 위한 부분으로 사용되어 보다 효율적인 웹 사이트 구성을 할 수 있다.


2011/03/18 10:24 2011/03/18 10:24
top

TRACKBACK ADDRESS :: 이 글에는 트랙백을 보낼 수 없습니다

Leave a comment..