8. Server to Client


  앞장에서는 브라우저가 자신이 필요로하는 정보를 얻기 위하여 웹서버롤 정보를 전달하는 방법과 그에따른 SSJS의 사용법을 설명했다. 이번 장에서는 기존의 HTML만 쓰던 사람에게는 약간 생소한 내용을 다룬다.

  서버의 입장에서보면, 어떤 요구사항을 접수받게 되면(form이든 URL이든 간에), 요구한 브라우저를 구분하기 위한 별도의 정보가 필요하다. 이때, HTML form 의 Hidden tag, Cookie 등을 사용한다.

8.1 Form Tag

  HTML의 form tag안에 사용되는 tag중에 hidden tag를 사용하게 되면, 사용자의 브라우저에는 나타나지 않고( 물론, view source에 의해 보여진다. ) submit으로 form 데이터를 전송할 때, 덩달아 서버로 전송되게 된다.

<INPUT TYPE="hidden" NAME="uid" VALUE="xxx">


  이렇게 하게 되면, CSJS에서도 그 값에 접근할 수 있으며, 서버로 전송된 뒤에는 SSJS에서 request.uid로 접근해서 값을 참조할 수 있게 된다.

  그러나 이 방법은 실제로 그렇게 많이 사용되지 않는다. 저장해야 할 정보들이 많거나, 페이지간에 공유하는 정보가 계속 변경되는 경우에는 로직이 점점 더 복잡해져서 나중에 관리하기가 어려워지게 되며, Source가 노출되는 단점을 가지고 있다.

8.2 Cookie

  쿠키는 브라우저에 저장된 정보를 말한다. 쿠키값은 cookie.txt파일로 windows디렉토리 밑에서 찾을 수 있다(물론 알아보기 힘들게 되어있다.). 이 쿠키값은 서버가 정보를 보내서 브라우저에 저장하게 된다. 특히 쿠키는 특정 URL에 종속된다.

    Cookie  디렉토리 개념으로 보자면, 특정한 URL에 접속해서 쿠키를 저장하라는 정보를 받게 되면, 그 이후부터 해당 디렉토리이하의 모든 URL에 접속할 때 마다 자동으로 서버에 전송된다. UNIX시스템의 경우에는 HTTP_COOKIE라는 환경변수(env)에 저장된다. C로 작업하게 되면, 이 환경변수를 가지고 와서(getenv("HTTP_COOKIE")) 일일이 작업을 해주어야 한다. 참고로 uid라는 Cookie값이 저장될 때, 실제로는 NETSCAPE_LIVEWIRE.uid라는 값으로 저장된다.


  SSJS에서는 client라는 object를 통해서 이 쿠키값을 쉽게 사용할 수 있도록 하고 있다. client.userid 라고 쓰면, 브라우저에 저장된 쿠키값중에 userid라는 값이 있을 경우에는 그 값이 들어가게 되고, 쿠키값이 없는 경우는 null이 채워진다.
    Cookie 저장 / 삭제   이 문제는 참어려우면서도, 간단한 문제이다. HTTP 프로토콜에 의하면, 브라우저가 Set-Cookie: uid=deadfire; 라는 정보를 받게 되면,해당 URL에 종속되게 쿠키로 저장하게 된다. 브라우저가 종료될 때 같이 파괴되는데, URL이 디렉토리 개념이므로, 상위에 저장된 쿠키값은 하위의 모든 URL에도 전송된다. 즉, 앞에서부터 글자가 같은 곧까지는 같은 쿠키정보를 얻을 수 있다는 얘기로,

    server.domain:8888/index.html (1)
    server.domain:8888/pub/test.html (2)
    www.test.com/index.html (3)
      이렇게 3개의 예중에서 (1)에 저장된 쿠키가 (3)번으로 접근할 때 전송되지는 않지만, (2)로 접근할 때는 전송된다는 말이다.

      또, 중요한 것은 이 쿠키값은 브라우저에서 조회해 볼 수도 있고, 임의로 변경할 수도 있다는 점이다. 사용자의 접근 권한이나 패스워드와 같은 것을 쿠키에 저장해서 이것만 가지고 보안을 했다고 할 수 없다. MD5와 같은 checksum방식과 암호화 기법이 동시에 사용되어야 신뢰할 수 있게 된다는 점을 다시한번 강조한다.
  여기까지 배우고 났을 때, 당신이 CSJS를 익히고 온 사람이라면, 이미 기본적인 CGI를 다 소화 할 수 있게 되었다. request, client라는 두가지 object를 접해봤으니 말이다. 잘 모르시겠다? 그럼, 일단 끝까지 읽어보고 나서 또 봅시다. 왜냐하면, 다음장에서 다시한번 정리한다.

- Last Update : 2001.7.5 by Deadfire(http://www.deadfire.net)

LiveWire 강좌
LiveWire란?
최초예제/동작원리
실행환경 준비
컴파일 및 실행
SSJS의 기본
     - Function
     - Classes/Objects
     - 사용 Tag
     - SSJS의 처리과정
기본 함수
Client To Server
     - FORM Tag
     - URL
Server To Client
     - FORM Tag
     - Cookie
Session
Client
Project/Server
File
Database
     - Database고려사항
     - Function/예제
기타
     - Stored Procedure
     - 외부함수호출
마치며

Copyright ⓒ 1997 ~, Deadfire Program Master