오 정리 잘된다.
출처 - http://seoeun25.tistory.com/276
웹어플리케이션은 어떻게 데이터를 제공할까.
다시 말하면, 웹클라이언트와 웹서버는 어떻게 서로 커뮤니케이션 하는 것일까.
웹클라이언트(사용자라는 사람을 의미하기도 하지만 브라우저를 뜻하기도 한다)가 서버에 있는 자원을 요청하면 웹서버는 그 자원을 넘겨준다. 이 자원은 HTML 페이지가 될 수도 있고, 그림, 소리 또는 PDF 등의 파일이 될 수도 있다. 브라우저는 서버로부터 받은 HTML을 읽어서(파싱하여) 화면에 보여준다. 이렇게 웹서버와 클라이언트가 "자원을 달라", "이거 받아라" 하고 대화하기 위해서 사용되는 언어가 HTTP 이다. HTTP 말고 다른 프로토콜로 말해봤자 서로 못알아 듣는다. HTTP 프로토콜은 요청과 응답으로 이루어진 간단한 protocol이다. 웹클라이언트는 HTTP로 웹서버에게 자원을 요청하는 것이고 웹서버는 HTTP로 클라이언트에게 응답하는데, 이때 응답 내용이 HTML 페이지인 것이다. (사실, 응답의 일부로 HTML 이 포함된 것이다)
Request 주요 구성
=> HTTP 메서드 (실행할 액션) : 주로 GET, POST, DELETE, PUT
=> 접근하고자 하는 페이지(URL)
=> 폼 파라미터
Response 주요 구성
=> 상태 코드(요청이 성공했는지 아닌지 등)
=> content type (HTML, text, 그림 등)
=> content (HTML 코드, 이미지 등)
그럼 HTTP Request 의 예를 보도록 하자.
** GET : Request Line, Request Header 로 구성.
Host: www.wickedlysmart.com
User-Agent: Mozila/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.2,*/*;a=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*,q=0.7
Keep-Alive: 300
Connection: keep-alive
Request Header: Host, User, Accept 정보 등.
** POST : Request Line, Request Header, Message Body.
Host: www.wickedlysmart.com
User-Agent: Mozila/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.2,*/*;a=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*,q=0.7
Keep-Alive: 300
Connection: keep-alive
color=dark&taste=malty
그럼, 위의 Request에 대한 HTTP Response를 보도록 하자.
Reponse : Response Header, Content Body
Set-Cookie: JSESSIONID=0AAB6C8DEFSGGSSAAACF24CAF; Path=/testEL
Content-Type: text/html
Content-Length: 397
Date: Wed, 19 Nov 2003 03:25:40 GMT
Server: Apache-Coyote/1.1
Connection: close
<html>
.....
.....
</html>
# 웹서버가 사용한 프로토콜 버전.(HTTP/ 1.1), HTTP 상태코드(200), 상태코드에 대한 text(OK)
# content-type : content-type 의 값을 mimetype 이라고 부른다. mimetype 이란 브라우저에게 "지금 서버가 이러 이러한 데이터를 보내려고 하니, 화면에 보여줄 준비를 하시오" 라는 정보이다. 이 mimetype 은 Request 정보의 Accept 란에 기술된 내용과 관련이 있다. (Accept에 적혀있지 않은 타입을 보내주면 브라우져에서 보여줄 수 없겠지?)
CGI 프로그램 : Common Gateway Interface
웹서버는 정적인 페이지 서비스만 가능하다. 다시 말하면 요청이 왔을 때 디렉토리에서 단지 파일을 찾아서 넘겨주는 역할을 한다. 하지만 동적인 데이터를 원한다면 어떻게 해야 할까.(예를 들면 현재 시간을 나타내는 HTML 페이지를 보내주고 싶다). 이렇게 사용자의 요청이 있을 때 마다 HTML을 생성해야 하거나(요청할 때마다 HTML내용이 다르니까) FORM으로 서버에 데이터를 전송하는 일은 정적인 페이지만 찾아서 보내주는 웹서버는 할 수 없다. 따라서 이를 전담으로 할 Helper application이 필요한데, 이러한 Helper application을 CGI 프로그램이라고 부른다. CGI 프로그램은 Perl, 파이썬, PHP, 서블릿 같은 언어로 작성한다.
<body>
The current time is [insertTimeOnServer]
</body>
</html>
InsertTimeOnServer 를 변수 처리 해서 현재시간을 보여주도록 하면 되는데,
HTML에 위와 같이 변수를 넣을 수 있나.
그럼, CGI를 통해서 현재 시간을 보여주는 동적 페이지를 어떻게 생성하여 클라이언트에게 제공하는 지 알아보자.
1. 클라이언트가 URL를 클릭하면
2. 웹서버는 들어온 request 가 Helper Application을 호출하는 것임을 간파하고
3. request로 들어온 파라미터와 메서드방식 등의 정보를 Helper Application에 넘긴다.
4. Helper Application은 현재 시간이 들어간 페이지를 만들어서 HTML 형식으로 웹서버에게 넘겨준다.
5. 이때 웹서버가 받은 HTML 을 정적인 페이지이다.
6. 웹서버는 이 HTML 을 Response로 클라이언트에게 보낸다.
그럼, Helper Application(서블릿)으로 위의 HTML 을 만드는 법은 다음에.(과연 다음이 있을까)
참조 : Head First Servlet & JSP
'네트워크' 카테고리의 다른 글
URL이란? (0) | 2012.12.07 |
---|---|
DNS 서버란 (0) | 2012.12.06 |
squid 프록시 서버 (0) | 2012.10.31 |