Internet Applications
인터넷 응용
- WEB 환경에서의 DB Application에 관한 내용들 다룬다.
URI (Uniform Resource Identifiers; 균등 자원 식별자)
- 인터넷 상의 자원들을 유일하게 식별하기 위한 Naming Scheme이고, String 형태로 표현된다.
- URL 보다 더 일반적인 개념이다. (URI는 URL의 Superset이다.)
- 여기서 Resource란, 식별 가능한 정보의 일종으로 웹페이지, 영상, 파일 등이 이에 속한다.
* Structure of URI
- URI는 아래와 같이, 3개의 부분으로 구성된다.
1) Protocol Name
ex) http
2) Host Computer Name
ex) www.cs.ucf.edu
3) Path Name of Resource
ex) ~kienhua/classes/COP4710/Ch7_internetapp.ppt
* WEB Data Format
1) HTML : Hyper Text Mark-up Language, Presentation Language for the Internet (No Structure)
2) XML : Extensible Mark-up Language, Self-Describin Hierarchical Data Model (Semi Structure)
3) DTDs : XML에 대한 표준 Schema 정보
4) XSLT
* Mark-up
- Language 혹은 Data를 표현하는데 Tag(Meta Data)를 사용하는 방식을 의미한다.
* 3-Tier Architecture for Internet Environment
- The Presentation Layer (Web Browser
- The Middle Tier (Web Server)
- The DB Server
HTTP (Hypertext Transfer Protocol)
- 인터넷 상에서 사용되는 가장 일반적인 Communication Protocol이다.
- Communication Protocol 이란, 주고받는 메시지의 구조를 정의한 표준을 의미한다.
- 클라이언트는 서버에 HTTP Request를 전송하고, 서버는 클라이언트에 HTTP Response를 전송한다.
* Stateless
- HTTP는 상태정보를 포함하지 않으므로, Session이 없다.
(즉, 모든 메시지는 저장될 수 없으며, 한 번 사용되고 사라진다.)
- 즉, HTTP에는 이전에 이루어진 Interaction에 대한 정보가 없다.
- HTTP에서 상태 정보를 유지하기 위한 방법으로는 아래와 같은 방법이 있다.
1) Cookies
2) Dynamically Generate Unique URL's at the Server Level
HTTP Request
- HTTP Request는 몇 줄의 ASCII Text로 구성되어 있으며, 마지막 줄은 Empry Line이다.
HTTP Request Field | Description |
1) HTTP Method Field | - HTTP Request를 전송하는 방식을 설정하는 필드이다. - GET 혹은 POST 중 하나를 선택할 수 있다. |
2) URI Field | |
3) HTTP Version Field | |
4) Type of the Client | - 클라이언트의 Web Browser 타입을 설정하는 필드이다. |
5) Type of Files | - 클라이언트가 받아들일 파일 타입을 설정하는 필드이다. |
HTTP Response
- HTTP Request에 대한 응답으로, 아래와 같이 Status Line, Several Header Lines, Body of the Message으로 구성된다.
1) Status Line
Status Code | Associated Server Message | Description |
200 | OK | HTTP Request에 문제가 없고, Response가 Body of the Message에 정상적으로 첨부되었음을 의미한다. |
400 | Bad Request | HTTP Request가 충족되지 않았음을 의미한다. |
404 | Not Found | 요청한 Object가 존재하지 않는 경우를 의미한다. |
505 | HTTP Version Not Supported | Client가 사용한 HTTP 버전이 해당 Server에서 지원하지 못함을 의미한다. |
2) Several Header Lines
3) Body of the Message
- 요청한 내용에 대한 실질적인 결과로, HTML 혹은 XML로 전달받는다.
- HTML의 Tag들은 System-Defined되어 모든 기능이 미리 정해져있다.
HTML
- 모든 HTML Tag들은 Start Tag와 End Tag로 구성된다.
- Tag들의 개수와 역할이 이미 확정되어 있다.
(System Defined Tag)
- Web Structure를 완전히 구현하기에는 Tag의 수가 충분치 않다.
<html>
<head>
...
</head>
<body>
...
</body>
</html>
Header 정보: 페이지의 전체적인 정보 (페이지 제목, 작성자 정보 등)
Body 정보: Web Browser가 Display할 실질적인 정보 (Text, Image, Link 등)
Header Tag
<h1> Section </h1>
- h1에서 h6까지 지원되며, 주로 대제목, 소제목을 구성할 때 사용한다.
Unordered List Tage
<ul>
<li> This is the <b>first</b> item </li>
</ul>
- 순서가 없는 리스트를 구성할 때 사용한다.
- 리스트 내부는 List Item으로 구성되며, <li>는 List Item을 의미한다.
- <b>는 Bold체를 의미한다.
Ordered List Tag
<ol>
<li> Coffee </li>
<li> Tee </li>
</ol>
- List Item들에 순서대로 Sequence를 부여하여 출력시키는 Tag이다.
Definition List Tag
<dl>
<dt> Coffee </dt>
<dd> ... </dd>
<dt> Tee </dt>
<dd> ... </dd>
</dl>
Example. HTML File
<html>
<head></head>
<body>
<h1>Barns and Nobble Internet Bookstore</h1>
<h3>Science</h3>
<b>The Character of Physical Law</b>
<ul>
<li>Author: Richard Feynman</li>
<li>Published 1980</li>
<li>Hardcover</li>
</ul>
<h3>Fiction</h3>
<b>Oliver Twist</b>
<ul>
<li>Author: Charles Dickens</li>
<li>Published 2002</li>
</ul>
<b>Pride and Prejudice</b>
<ul>
<li>Author: Jane Austen</li>
<li>Published 1983</li>
<li>Paperback</li>
</ul>
</body>
</html>
Output:
※ HTML은 No Structure이기 때문에, 내용을 통한 검색이 불가능하다.
ex) 2002년에 출판된 책 이름 혹은 작가 이름 등과 같은 질의가 불가능하다.
XML (The Extensible Mark-up Language)
- 사용자가 새로운 Tag를 정의할 수 있다.
(User-Defined Tag)
- Data Model은 Tree구조로 구현되어 있다. (Semi Structure)
- XML은 DB System과 결합되기에 용이하다.
- HTML에서의 Tag는 XML에서 Element라 부른다.
- 각각의 Element의 이름은 사용자가 정의할 수 있다.
(XML에서는 대소문자가 구분된다. = Case Sensitive)
- HTML에서와 마찬가지로, Start Element와 End Element로 구성된다.
- Hierarchical Structre를 표현하는데 있어서, Indentation이 중요하다.
Example. User-Defined Element
<BOOK>
<AUTHOR>
<FIRSTNAME>Charles</FIRSTNAME>
<LASTNAME>Dickens</LASTNAME>
<AUTHOR>
</BOOK>
- 즉, XML에서는 Element의 이름으로 데이터에 관한 내용을 부여할 수 있다.
* XML Element Attribute
- Attribute의 값은 Start Element에서 정의된다.
- Attribute의 값들은 Quotes(")로 둘러싸여서 선언된다.
Example. XML Element Attribute
<BOOK GENRE=“Fiction” FORMAT=“Hardcover”>
<AUTHOR>
<FIRSTNAME>Charles</FIRSTNAME>
<LASTNAME>Dickens</LASTNAME>
<AUTHOR>
</BOOK>
* XML Entity Reference
- XML 문서에서, Entity Reference가 있으면, 해당 부분이 대응되는 Content로 대체된다.
- XML Data에는 Reserved Character가 정의될 수 없기 때문에, Entity Reference가 필요하다.
Example. Entity Reference
' 1 < 5 '
- 위 XML은 '1 < 5' 로 치환된다.
* XML Comment
<!- comment_content ->
- Comment로는 --(두 개의 하이픈)만 제외하고 모든 내용이 들어올 수 있다.
Example. XML Code
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BOOKLIST>
<BOOK genre="Science" format="Hardcover">
<AUTHOR>
<FIRSTNAME>Richard</FIRSTNAME><LASTNAME>Feynman</LASTNAME>
</AUTHOR>
<TITLE>The Character of Physical Law</TITLE>
<PUBLISHED>1980</PUBLISHED>
</BOOK>
<BOOK genre="Fiction">
<AUTHOR>
<FIRSTNAME>Charles</FIRSTNAME><LASTNAME>Dickens</LASTNAME>
</AUTHOR>
<TITLE>Oliver Twist</TITLE>
<PUBLISHED>2002</PUBLISHED>
</BOOK>
<BOOK genre="Fiction">
<AUTHOR>
<FIRSTNAME>Jane</FIRSTNAME><LASTNAME>Austen</LASTNAME>
</AUTHOR>
<TITLE>Pride and Prejudice</TITLE>
<PUBLISHED>1983</PUBLISHED>
</BOOK>
</BOOKLIST>
* XML Model
- XML은 N-Ary Tree구조로 구성된다. (Hierarchical Structure)
- Element들은 Non-Terminal Node이고, Element사이에 위치한 Data들은 Leaf Node가 된다.
- 즉, XML에서는 DFS 혹은 BFS를 통해 Data를 검색할 수 있다.
(Semi-Structure이기에 가능한 것이며, HTML은 구조가 없기 때문에 데이터 검색이 불가능하다.)
DTD (Document Type Definition)
- XML Data에 대한 Schema이다.
- DTD는 XML Document의 User-Defined Element에 대한 Rule이다.
- DTD로 정의된 Rule을 따르는 Document는 "Vaild하다."라 표현한다.
DTD Structure
<!DOCTYPE name [DTDdeclaration]>
Example. DTD
<!DOCTYPE BOOKLIST [
<!ELEMENT BOOKLIST (BOOK)*> ; BOOKLIST에 BOOK Element는 0개 이상이 Nested될 수 있다.
<!ELEMENT BOOK (AUTHOR,TITLE,PUBLISHED?)> ; BOOK Element내부의 AUTHOR, TITLE Element는 필수적이고, PUBLISHED는 선택적이다.
<!ELEMENT AUTHOR (FIRSTNAME,LASTNAME)>
<!ELEMENT FIRSTNAME (#PCDATA)>
<!ELEMENT LASTNAME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT PUBLISHED (#PCDATA)>
<!ATTLIST BOOK GENRE (Science|Fiction) #REQUIRED> ; BOOK Elemet의 GENRE Attribute에는 필수적으로 값이 설정되어야 한다.
<!ATTLIST BOOK FORMAT (Paperback|Hardcover) “Paperback”> ; "Paperback"이 Default이다.
]>
* Regular Expression
* | zero or more |
+ | one or more |
? | zero or one (Optional mark) |
exp1 | exp2 | exp1 OR exp2 |
exp1, exp2, exp3 | Ordered List of Regular Expression |
* Special Symbol
#PCDATA (Packed Character Data) |
문자 데이터를 의미한다. |
EMPTY | 해당 Element에 내용이 없음을 의미한다. |
ANY | 해당 Element에 어떠한 내용도 허용됨을 의미한다. |
#REQUIRED 옵션은 Default이므로, 따로 명시하지 않아도 된다.
Example. DTD
<?xml version='1.0'?>
<!ELEMENT Basket (Cherry+, (Apple | Orange)*) >
<!ELEMENT Cherry EMPTY>
<!ATTLIST Cherry flavor CDATA #REQUIRED>
<!ELEMENT Apple EMPTY>
<!ATTLIST Apple color CDATA #REQUIRED>
<!ELEMENT Orange EMPTY>
<!ATTLIST Orange location ‘Florida’>
<!-- Valid XML Document -->
<Basket>
<Cherry flavor=‘good’/>
<Apple color=‘red’/>
<Apple color=‘green’/>
</Basket>
<!-- Invalid XML Document -->
<Basket>
<Apple/> <!-- Cherry Element가 먼저 수반되어야 한다. -->
<Cherry flavor=‘good’/>
<Orange/>
</Basket>
Example. DTD
<?xml version='1.0'?>
<!ELEMENT Basket (Cherry+)>
<!ELEMENT Cherry EMPTY>
<!ATTLIST Cherry flavor CDATA #REQUIRED>
<!-- XML Document 1 -->
<basket> <!-- Not Well-Formed; XML은 Case Sensitive하다. -->
<Cherry flavor=good>
</Basket>
<!-- XML Document 2 -->
<Job> <!-- Job Element는 정의되어 있지 않다. -->
<Location>Home</Location>
</Job>
<!-- Well-Formed But, Invalid -->
<!-- XML Document 3 -->
<Basket>
<Cherry flavor=‘good’/>
</Basket>
<!-- Well-Formed and Valid -->
* XML에서는 데이터들이 구조화되어 있으므로, Query Language를 이용할 수 있다.
- XML을 위한 Query Language는 Xquery, XPath 등이 있다.
* Single Tier Architecture
- 주로, Mainframe에서 채택한 아키텍처로, User는 Dumb Terminal을 통해 접근한다.
- 유지보수가 쉽지만, GUI 환경을 구현할 수 없고, Load가 매우 심하다.
* Two Tier Architecture
- 일반적인 Client-Server 환경이 이에 해당된다.
- Application Logic과 DB가 한 Server Host에 위치한 형태이다.
- Client Host가 분리되어 있는 형태이므로, GUI를 이용할 수 있다.
Thin Client
- 프로그램과 데이터가 모두 Server에 위치한 형태이다.
- Two Tier Architecture에서 가장 흔히 사용되는 모델이다.
Thick Client
- Server에는 DB Server만 위치해있고, Client에 Application Logic이 위치해 있는 경우이다.
- Client가 Heavy하다.
- 각각의 Client들에 대한 Security 관리를 할 수 없다.
- Application Logic을 재사용할 수 없다.
- Data를 Client로 옮겨야하므로 확장성이 좋지 못하다.
* 3-Tier Architecture
1) Data Management Tier (DB Server)
- DBMS가 Application Logic으로부터의 Query를 처리한다.
2) Middle Tier (Application Logic; Web Server)
- SQL 혹은 JDBC를 통해 DB Server에서 Data를 Fetch하고,
Client에게 HTML 혹은 XML Document를 Display한다.
- 여러가지 복잡한 연산이 수행되고, 다양한 DB Management System에 접근할 수 있어야 한다.
(주로, JDBC, ODBC를 통해 접근한다.)
3) Presentation Tier (Web Browser of Client)
- User에게 제공되는 Primary Interface이다.
- 다양한 Display Device를 지원할 수 있어야 한다.
- HTML Forms를 통해 Middle Tier로 Data를 전송한다.
- Javascript를 통해 간단한 Functinality를 구현한다.
* 3-Tier Architecture Technology
Example. Airline Reservations
1) DB System
- Airline Info, Available Seats, Customer Info, etc.
2) Application Server
- Logic to Make Reservations, Cancel Reservations, Add New Airlines, etc.
3) Client Program
- Log in Different Users, Display Forms and Human Readable Output
Example. Course Enrollment
1) DB System
- Student info, course info, instructor info, course availability, pre-requisites, etc.
2) Application Server
- Logic to add a course, drop a course, create a new course, etc.
3) Client Program
- Log in different users (students, staff, faculty), display forms and human-readable output
HTML Tag: FORM
- Client와 Middle Tier간에 Data를 주고받는 방식 중 하나이다.
- HTML Form내부에는 정보를 삽입할 수 있는 Element(Tag)들이 지원된다.
<FORM ACTION="page.jsp" METHOD="GET" NAME="LoginForm">
...
</FORM>
Attribute: ACTION
- Form으로부터의 Input을 처리할 Web Server의 프로그램을 지정하는 속성이다.
Attribute: METHOD
- Web Server로 Form을 전송할 방법을 지정하는 속성이다.
- GET Method와 POST Method가 있다.
Attribute: NAME
- Client-Side Script언어에서 참조 가능한 Form의 이름이다.
Example. Form
<FORM>
First name:
<INPUT TYPE=“text” NAME=“firstname”>
<br>
Last name:
<INPUT TYPE=“text” NAME=“lastname”>
</FORM>
Output:
Example. Form (Radio Button)
<FORM>
<INPUT TYPE=“radio” NAME=“under”> Undergraduate
<br>
<INPUT TYPE=“radio” NAME=“grad”> Graduate
</FORM>
Example. Form (Submit Button)
<FORM ACTION=“phone.jsp” METHOD=“GET” NAME=“Phone”>
Phone number:
<INPUT TYPE=“text” NAME=“phonenum”>
<INPUT TYPE=“submit” VALUE=“Submit”>
</FORM>
HTML Tag: INPUT
<INPUT TYPE=“text” NAME=“username” VALUE=“Joe”>
1) TYPE Attribute
- "text"
- "password"
- "reset"
- "submit"
- "radio"
2) NAME Attribute
- Web Server에서 INPUT Field를 식별하기 위한 이름이다.
3) VALUE Attribute
- Default 값을 받는 속성이다.
- submit TYPE 혹은 reset TYPE의 경우, 버튼의 Label이다.
3-Ways of Specifying User Input
1) INPUT Tag
2) TEXTAREA Tag
<textarea name=“comments” cols=“45” row=“10”>
...
</textarea>
- text를 입력할 Box를 그린다.
3) SELECT Tag
- User가 선택할 수 있는 값들을 리스트로 제공한다.
Passing Argument
1) GET Method
- Form의 내용을 URI에 덧붙여서 전송하는 방식이다.
- 이렇게 입력이 덧붙여진 URI를 Constructed URI라 한다.
- White Space는 입력으로 인정될 수 없어(URI에 공백이 표현될 수 없어)
공백문자는 +로 대체된다.
2) POST Method
- Form의 내용을 독립적인 Data Block에 저장하여 전송하는 방식이다.
- 사용자가 입력을 볼 수 없으며, URI에 덧붙여지지도 않는다.
Encoded URI
Java Script
- 자바스크립트 코드는 HTML Document내에서 SCRIPT Tag 사이에 위치한다.
- SCRIPT Tag의 src Attribute를 통해 외부 자바스크립트 파일을 불러올 수 있고,
HTML Document의 SCRIPT Tag 내에 직접 기술할 수도 있다.
- 데이터형: numbers, boolean, strings등이 존재한다.
- Java Script를 통해 Browser Detection, Form Validation, Browser Control를 수행할 수 있다.
Example. Javascript in HTML Document
<HTML> <BODY>
<SCRIPT LANGUAGE=“JavaScript”>
function testLoginEmpty()
{
loginForm = document.LoginForm
if ((loginForm.userid.value == “”) || (loginForm.password.value == “”)) {
alert(‘Please enter userid and password.’);
return false;
}
else
return true;
}
</SCRIPT>
<H1 ALIGN = “CENTER”>Barns and Nobble Internet Bookstore</H1>
<H3 ALIGN = “CENTER”>Please enter your userid and password:</H3>
<FORM NAME=“LoginForm” METHOD=“POST”
ACTION=“TableOfContents.jsp”
onSubmit=“return testLoginEmpty()”>
Userid: <INPUT TYPE=“TEXT” NAME=“userid”><P>
Password: <INPUT TYPE=“PASSWORD” NAME=“password”><P>
<INPUT TYPE=“SUBMIT” VALUE=“Login” NAME=“SUBMIT”>
<INPUT TYPE=“RESET” VALUE=“Clear Input” NAME=“RESET”>
</FORM>
</BODY> </HTML>
Event Handler
- Function의 일종으로, Webpage의 Obejct에 대해 Event가 발생했을 때, 호출되는 함수이다.
ex) Submit Button이 클릭될 때 호출되는 함수는 Event Handler이다.
Style Sheet
- 같은 정보를 다르게 Display할 때 Style Sheet를 이용하여 적합하게 조정할 수 있다.
Example. CSS
BODY {BACKGROUND-COLOR: yellow}
H1 {FONT-SIZE: 36pt}
H3 {COLOR: blue}
P {MARGIN-LEFT: 50px; COLOR: red}
Middle Tier (Web Server Site)
- Business Logic을 Encode하는 프로그램이 구동되는 티어이다.
- DBS와 연결되는 티어이다.
- Presentation Tier로부터 Form Input을 전달받는다.
- Presentation으로 출력할 Output을 생성한다.
CGI (Common Gateway Interface)
- HTML Form으로부터의 Data를 Argument형태로 Middle Tier에서 구동중인 Application Program에게 전송할 때
CGI Protocol을 사용한다.
- 즉, Web Server가 Client로부터 전달받은 Form Tag 내의 Data를 ACTION Attribute에 명시된 프로그램으로 넘길 때 따르는 프로토콜이 CGI Protocol이다.
* CGI Issues
1) 매 호출마다, CGI는 새로 생성되고, 하나의 프로세스를 차지하기 때문에 Overhead가 크고, 확장성을 저해한다.
2) Application Program간의 Resource Sharing이 불가능하다.
- 위 문제점들을 극복하기 위해, Multi-Thread가 탑재된 Application Server를 운용하는 방법이 있다.
Example. CGI for HTML Form
<form action=“findbooks.cgi” method=POST>
Type an author name:
<input type=“text” name=“authorName”>
<input type=“submit” value=“Send it”>
<input type=“reset” value=“Clear form”>
</form>
Example. CGI for Perl Code
use CGI;
$dataIn=new CGI;
$dataIn->header();
$authorName=$dataIn->param(‘authorName’);
print(“<HTML><TITLE>Argument passing test</TITLE>”);
print(“The author name is “, $authorName);
print(“</HTML>”);
exit;
Application Server
- 다수의 Process/Thread로 구성된 Process Pool/Thread Pool을 운용하여 Request를 처리하는 Server Model이다.
- 추가적으로, Application Server는 JDBC, ODBC Driver를 지원하여 이질적인 DBMS와도 연결될 수 있다.
Process Structure in Application Server
* Servlet
- Server의 Capability를 확장하기 위해 구현된 Java Class의 일종이다.
- 일반적으로, Servlet은 HTTP SErvlet이 HTTP를 통해 Client와 통신하는 Web Server를 위해 확장된 형태로 구현된다.
- HTTP Servlet은 HTTP GET을 위한 doGet() Method와 HTTP POST를 위한 doPost() Method를 제공한다.
Example. Servlet
import java.io.*;
import java.servlet.*;
import java.servlet.http.*;
public class ServetTemplate extends HttpServlet {
public void doGet(HTTPServletRequest request, HTTPServletResponse response)
throws SerletException, IOException {
PrintWriter out=response.getWriter();
out.println(“Hello World”); //Use ‘out’ to send content to browser
}
}
Example. Servlet
public class ReadUserName extends HttpServlet {
public void doGet( HttpServletRequest request, HttpSevletResponse response )
throws ServletException, IOException {
reponse.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“<HTML><BODY>\n <UL> \n” +
“<LI>” + request.getParameter(“userid”) + “\n” +
“<LI>” + request.getParameter(“password”) + “\n” +
“<UL>\n<BODY></HTML>”);
}
public void doPost( HttpServletRequest request, HttpSevletResponse response )
throws ServletException, IOException {
doGet(request,response);
}
}
Java Server Page (JSP)
- HTML내에 Servlet과 유사한 코드가 내장되어 있는 형태이다.
- 단, Servlet과의 차이점은 HTML이 먼저 처리된 후, Code가 처리된다는 점이다.
* Servlet
- Code가 먼저 처리되고, HTML이 뒤이어 처리되는 형태이다.
Example. JSP
<html>
<head><title>Welcome to B&N</title></head>
<body>
<h1>Welcome back!</h1>
<% String name=“NewUser”;
if (request.getParameter(“username”) != null) {
name=request.getParameter(“username”);
}
%>
You are logged on as user <%=name%>
<p>
</body>
</html>
- 위 HTML내에 위치한 JSP Code는 Runtime에 실행된다.
즉, 위 HTML에 해당되는 Page는 Dynamic하게 생성된다.
Maintaining State
- HTML은 Stateless하여 이전에 처리되었던 Data에 대한 정보가 일체 저장되지 않는다.
- 이러한 특징으로 인한 장단점은 아래와 같다.
* HTML의 장점
- 사용하기에 간단하다.
- Static한 정보를 다루는 Application에서 사용하기에 용이하다.
- 추가적인 메모리 공간이 불필요하다.
* HTML의 단점
- 바로 이전에 처리된 Web Page Request에 대한 정보도 일체 저장되지 않기 때문에 여러 편의기능(장바구니, 로그인 등)을 구현하기에 어렵고,
특히 보안 기능을 구현하기 어렵다.
- 위 단점들에 대한 해결책은 아래와 같다.
1) Server-Side State
- DB 혹은 App Layer의 Local Memory에 이전 데이터들을 저장한다.
- DB에 저장될 경우, 데이터가 안전히 관리되지만, 데이터에 접근하기 위해선 SQL Query를 통해 DB에 접근해야 한다.
- Local Memory에 저장될 경우, Main Memory의 Volatile한 특성으로 인해 데이터가 손상될 수 있다.
2) Client-Side State
- Cookie 형태로 Client Host에 이전 데이터들을 저장한다.
- Cookie는 (Name, Value) Pair로 구성된다.
- Java Servlet 혹은 JSP에서 사용하기에 쉽다.
- 중요하지 않은 데이터를 영구적으로 저장하기에 쉽다.
- Cookie의 Size는 4KB 정도로 제한된다.
- User가 Diable시킬 수 있다.
3) Hidden State
- 동적으로 생성된 Web Page내에 정보가 저장된다.
Example. Creating Cookie
Cookie myCookie = new Cookie(“username", “jeffd");
response.addCookie(myCookie);
- Cookie는 아무때나 생성할 수 있다.
Example. Cookie
Cookie myCookie = new Cookie(“username”, “jeffd”);
Cookie.setDomain(www.bookstore.com);
// Web site that receives this cookie
Cookie.setSecure(false): // no SSL required
Cookie.setMaxAge(60*60*24*31) // one month lifetime of cookie
response.addCookie(myCookie);
Example. Accessing Cookie
Cookie[] cookies = request.getCookies(); // returns an array of cookies
String theUser;
for(int i=0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cookie.getName().equals(“username”)) theUser = cookie.getValue();
}
// at this point theUser == “username”
Reference: Database Management Systems 3E (Raghu Ramakrishnan, Johannes Gehrke 저, McGrawHill, 2003)