본문 바로가기

카테고리 없음

JSP #00 개론적 개념

웹 프로그래밍 개요


#웹 프로그래밍 언어

www에서 사용되는 프로그래밍 언어를 통틀어서 말한다.


#개요적 이야기

우리가 익스플로러나 크롬, 파이어폭스 브라우저를 이용해서 웹서핑을 한다. 이러한 것들이 어떻게 구성이 되어있고 어떤 방식으로 동작을 하는지 알아보고자 한다.

웹 프로그래밍 언어로 제일 먼저 개발 된 것은 HTML_HyperText Markup Language이다. HTML은 텍스트 기반의 웹 문서 작성이나 정적인 데이터를 처리하는데 편하지만 동적인 데이터를 처리 할 수는 없다. 예를 들어 x+y=z 라는 것에 우리가 x와 y에 각각 1과 2를 집어넣어 z에 3이라는 결과를 원하지만 HTML에서는 미리 정의 (되어있다고 가정)있는 6이라는 값을 반환하는 것이다. 이러한 단점을 극복하고자 개발된 언어들이 CGI, ASP, PHP, JSP 등의 언어이다.


#사이트 동작 방식

웹 프로그래밍은 클라이언트와 서버로 구축을 한다. 클라이언트 즉 사용자가 브라우저를 통해 어떤 결과를 보여달라고 하는 요청_Request를 서버로 보내면 서버는 그 요청을 받고 데이터를 처리한 후 결과를 브라우저를 통해 응답_Response 형태로 클라이언트에게 보낸다.


#JSP

Sun Microsystems 사에서 서블릿_Servlet이라는 동적 웹 구현 기술을 발표 하였다. 이는 자바를 기반으로 개발되었으며 자바를 기반으로 만들었기 때문에 객체 지향적이며 자바의 특성인 플랫폼 독립성을 웹에서도 가능하며 쓰레드_Thread 기반의 요청 처리 방식을 채택하여 다중 처리에 효율적인 기술이다. 그러나 단점 또한 존재 하였고 Sun Microsystems 사는 웹프로그래밍언어 중 하나인 ASP의 장점을 수용하여 JSP라는 언어를 만들었다. JSP는 스크립트 기반으로 개발되어 서버 페이지를 훨씬 쉡게 만들 수 있으며 서블릿과 함께 구동함으로써 서블릿의 기능을 사용할 수 있으며, 자바빈즈_JavaBeans,EJB와 같은 기술로 보다 강력하게 객체 지향적 지원이 가능하게 되었다. 또한 JSTL을 지원하게 되면서 웹 프로그램의 가독성이 좋아지고 유지 및 보수가 간편해졌다.


#웹 애플리케이션 구조

웹 애플리케이션을 개발한다는 것은 웹을 통해 정보를 주고 받는 프로그램을 개발한다는 것이다.
일반적으로 웹 애플리케이션은 클라이언트와 서버 형식으로 구성이 된다. 서버는 웹서버와 애플리케이션 서버로 분리가 된다 웹서버는 사용자의 요청을 받아들이고 결과 페이지를 전송하고 애플리케이션 서버는 클라이언트의 요청을 실질적으로 처리할 수 있는 비즈니스 로직이 구현되어 있다. 여기에 추가로 데이터베이스가 붙고 이러한 웹 애플리케이션 구조를 3-tier 구조라 부른다







#JSP

JSP 페이지는 HTML의 기본 형식과 JAVA의 문법이 혼합되어 있다. 클라이언트가 JSP로 작성된 페이지를 요청하면 웹 서버(실질적으로 JSP 컨테이너) 는 HTML코드가 아닌 부분을 해석해서 JVM_Java Virtual Machine을 통해서 자바 코드를 실행하고 그 결과를 브라우저가 인식할 수 있는 HTML 코드 형식으로 변환해서 웹 페이지를 만들어 사용자 측으로 전송한다. 최종적으로 사용자는 HTML로만 구성된 페이지를 응답받게 되는 것이다.

#JSP 특징

JSP의 여러 특징 중에 뛰어난 것은 MVC_Model-View-Controller라는 것이다 그 구성 요소는 3가지인데 View, Model, Controller 로 구성되어 있다. 각각을 보자면 View는 사용자에게 보여지는 화면 , Model은 실제 비즈니스 로직 , Controller는 View와 Model을 연결시켜 준다.
이는 웹 프로젝트 개발에서 각광받는 디자인 패턴이며 다시 재해석 해보자면 JSP가 View의 역할, 자바빈즈가 Model, 서블릿이 Controller 라 생각하면 되겠다.




#서블릿

서블릿은 단적으로 웹 서버 상에서 실행되는 자바의 클래스 파일이라 할 수 있으며 자바의 모든 API를 그대로 사용할 수 있으며 자바의 장점을 가지고 있다. 그러나 기존의 자바 클래스와 비교 할 때 서블릿은 반드시 javax.servlet.servlet 인터페이스를 구현해서 작성해야만 하고 입력과 출력을 HTTP 프로토콜의 요청과 응답의 형태로 다룬다는 점이 다르다.

클라이언트가 요청을 보내면 웹 서버는 요청에 해당하는 서블릿 클래스 파일을 실행하고, 서블릿 클래스에서는 요청을 처리해 결과물을 만든다. 웹서버는 서블릿이 만든 결과물을 클라이언트에ㅔ 전송하는 것이다

Servlet_Server side Applet 서버 사이드의 자바 응용 프로그램


#HTTP 프로토콜

HTTP 프로토콜은 요청_Request와 응답_Response의 형태로 구성되어 있다. 예를 들어 사용자가 웹페이지의 링크를 클릭하면 브라우저는 HTTP 프로토콜 요청 형태로 HTTP 메시지를 작성하여 웹 서버에 전송을 하고 웹서버는 HTTP 메시지가 요청 메시지임을 판단하고 그 데이터를 분석해서(처리까지) HTTP 프로토콜의 응답 형태로 메시지를 작성하여 브라우저로 보낸다 브라우저는 메시지를 받아서 사용자의 화면에 표시를 한다 HTTP 메시지는 시작 라인, Header와 Body로 구성되어 있으며 시작라인에는 요청인지 응답인지와 요청 URL 등 기본적인 정보가 담겨 이쓰며 헤더에는 수행 날짜, 서버 정보, 브라우저 버전 등 부가적인 정보를 담고 있고 본문에는 요청이나 응답에 필요한 내용을 담고 있는 본문으로 구성된다.

#HTTP 요청과 응답 메시지

HTTP 요청 메시지는 기본적으로 HTTP 메소드와 URL 정보 서버에 전달할 폼파라미터로 구성된다. HTTP 메소드는 여러가지가 있지만 GET 메소드와 POST 메소드가 대표적이다 각 장단점은 구글링을 통해서 알아보자.....
HTTP 응답 메시지는 요청에 대한 서버의 처리 성공 여부를 표시하는 상태 코드와 웹 서버가 응답해주는 콘텐츠의 타입 정보(text/html/이미지 등) , 콘텐츠의 내용으로 구성 된다

#웹 컨테이너

JSP 와 서블릿을 사용한 웹서버는 크게 URL 주소의 해석을 맡아주는 HTTP 서버와 서블릿 클래스 또는 JSP 파일의 실행 요청을 처리해주는 웹 컨테이너_Web Container로 구성된다. HTTP 서버는 어떤 주소(URL) 요청이 오면 그에 맞는 콘텐츠를 사용자의 브라우저에 응답 형태로 전송하는 역할을 한다. 이때 URL이 서블릿 클래스 또는 JSP 파일일 경우 HTTP서버는 처리하지 않고 웹 컨테이너에게 요청을 넘겨준다. 웹 컨테이너는 URL 에 맞는 서블릿 클래스 또는 JSP 파일을 실행하여 그 결과를 HTTP 서버로 넘겨주고 HTTP 서버는 사용자 브러우저에 전송을 한다 대표적인 웹 컨테이너로는 자카르타, 톰캣, 웹로직, Resin 등이 있다. 정확하지는 않지만 제목 웹 어플리케이션 구조에서 연관지어서 생각을 하면 HTTP 서버는 웹 서버이며 웹 컨테이너는 애플리케이션 서버이라 생각할 수 있다.


#서블릿의 동작 원리

1.사용자의 URL 요청
사용자의 URL 요청이 서블릿 요청이라는 것을 웹서버가 알기 위해서는 배포 서술자가 필요하다. 배포 서술자를 통해 서블릿 요청임을 알게 되면 웹 컨테이너로 요청을 전송한다.

2.request, response 객체 생성
요청을 처리하기 위해서 웹컨테이너는 request 객체와 response 객체를 생성한다 

3.서블릿 인스턴스와 스레드 생성
객체 생성 후 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아내고 그 클래스가 한 번도 실행된 적이 없거나 현재 메모리에 생성된 인스턴스가 없다면 인스턴스를 생성한다. 이미 인스턴스가 존재할 시 기존의 인스턴스에 스레드만 하나 새로 생성한다

4.service() 메소드 호출과 서블릿 클래스 실행
스레드가 생성되면 각 스레드에서 service() 메소드가 호출되며 HTTP 요청 방식이 GET 방식이면 서블릿 클래스의 doGet() 메소드가, POST 방식일 경우에는 doPost()메소드가 resquest, response 객체를 인자로 자동으로 호출된다. 따라서 개발자가 실제로 동적인 웹페이지 생성을 할 수 있는 코드를 만들어야 하는 부분이 바로 doGet()과 doPost() 메소드 부분이라고 할 수 있다.

5.응답과 스레드의 소멸
doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 우베 페이지를 생성하면 그 결과물이 담긴 response 객체를 웹컨테이너가 HTTP 응답 형태로 바꾸어 웹 서버로 전송하고 사용이 끝난 request와 response객체를 소멸시키고 스레드를 종료하게 된다.


#웹 어플리케이션의 JSP 그림적용

#MVC의 JSP 적용