쿠키(Cookie)

사용자의 ID 혹은 암호까지 기억하는 경우를 보았을 것이다. 이것은 웹 브라우저가 ID 혹은 암호를 사용자의 컴퓨터에 저장하고 있기 때문에 가능하다. 이처럼 웹 서버가 전달한 정보를 웹 브라우저가 컴퓨터에 저장하는 것을 쿠키(Cookie)라고 한다. 쿠키는 다양하게 활용될 수 있는데, 대표적인 사용 예로 사용자 ID와 암호를 기억함으로써 사이트를 편리하게 사용할 수 있도록 하거나 혹은 사용자의 방문 횟수를 기억하돌고 함으로써 사용자의 웹 사이트 사용 유형을 파악하는 것이 있다. 쿠키는 넷스케이프사에서 처음 제안되었고, RFC 2109로 문서화 되었다.

● 관련정보 : http://en.wikipedia.org/wiki/HTTP_cookie (영문)

● 관련정보 : http://ko.wikipedia.org/wiki/HTTP_쿠키 (한글, 간략함. 영문 참조바람)

 

※ 쿠키 : 서버가 자신이 필요한 정보를 클라이언트에 심어놓는 것. 클라이언트가 접속시 자신(서버)이 심어놓은 쿠키 파일을 불러온다. 사용자 ID와 비밀번호, 방문횟수, 사용 패턴등을 분석 가능하다.

230px-Choco_chip_cookie.jpg

  • MS IE : Cookie 라는 폴더
  • 파폭 등은 cookie.txt
  • 쿠키 제한 : 모두 300개 까지만 사용가능
  • 쿠키 최대 크기 : 4KB

 

● 서블릿/JSP는 쿠키를 위해서 Cookie 클래스를 제공한다. 쿠키를 웹 브라우저에 전달하기 위해서는 HttpServletResponse의 addCookie() 메소드를 이용한다.

쿠키 설정하기 절차(심기)

[1]. Cookie 객체를 만든다.

[2]. 쿠키에 속성을 부여한다.

[3]. 쿠키를 전송한다.

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

res.addCookie(c1);

ex) Cookie(String name, String value) 쿠키의 이름, 값이 필요하다.

  • void setMaxAge(int expiry) 쿠키의 유효한 기간을 설정(단위 : 초)
  • void setValue(String newValue) 새로운 쿠키 값을 설정한다.

    • 정수로 변환시 Integer.parseInt(); 를 사용해준다.

 

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(60 * 60 * 24 * 365); => 1년간 유지됨

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

 

웹 브라우저에 쿠키 전송하기

쿠키의 속성값이 설정되면, 서블릿/JSP는 HttpServletResponse 클래스를 이용해서 웹 브라우저에 쿠키를 설정한다. 이 때 HttpServletResponse으 addCookie() 메소드를 사용한다.

  1. response.addCookie(cookie); --> res.addCookie(c1);

 

쿠키 정보 얻기(뽑기!)

클라이언트에 설정된 쿠키 정보는 웹 브라우저가 다시 웹 사이트를 방문할 때 웹 브라우저에 의해 자동적으로 웹 서버에 전달한다. 쿠키로부터 정보를 얻어 오려면 다음과 같은 절차를 따른다.

[1] 사용자의 요청에서 모든 쿠키를 얻는다.

[2]. 원하는 쿠키를 이름을 통해서 얻는다.

 

 

[3]. 찾은 쿠키로부터 값을 얻는다.

  1. Cookie[] cookies =  request(=req).getCookies();
  2. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
  3. }
    String value = mycookie.getValue();

 

ex) 서블릿/JSP 에서 쿠키 얻기
  1. Cookie[] cookies =  request(=req).getCookies();

 

ex) 쿠키의 이름을 이용해서 원하는 쿠키 찾기
  1. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
    }

 

ex) 쿠키의 값 추출하기
  1. String value = mycookie.getValue();

 

CookieTest.java

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

 

CookieTest.java(수정판 : 읽을 때마다 Count를 증가시킴)

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");

                    if ( cookie.getName().equals("count") ) {
                        //value에 1을 더하고 새로운 value를 세팅
                        value = Integer.toString(Integer.parseInt(cookie.getValue()) + 1);
                        //새값이 설정된 쿠키를 브라우저로 전송
                        Cookie countCookie = new Cookie("count",value);
                        res.addCookie(countCookie);

                        //cookie.setValue(value);
                        //res.addCookie(cookie);  이녀석도 된다. ㅡㅅ-)>
                    }
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            Cookie countCookie = new Cookie("count","0");
            countCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);
            res.addCookie(countCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

CookieTestRun.JPG CookieTest.JPG

이 글은 스프링노트에서 작성되었습니다.

이 작업을 하기 위해 필요한 사전 준비
1. javaFX SDK 설치하기 : http://java.ihoney.pe.kr/34
2. 넷빈 설치하기 : http://java.ihoney.pe.kr/35
3. javafx.com 에서 넷빈용 플러그인 설치하기 : http://www.javafx.com/downloads/windows.jsp
 - 현재는 윈도우와 맥 용만 제공되고 있습니다. ㅡㅅ-)>



이클립스도 그렇지만, 넷빈도 Procject를 생성해야지 fx파일을 생성해서 실행해 볼 수가 있습니다. file -> new Procject 클릭하세요. ^^
간단하게 프로젝트명을 입력하고 Finish를 누릅니다. ^^
Create Main File을 생성하시면, 다음과 같이 기본 fx가 생성되어 나타납니다.

/*
 * Main.fx
 *
 * Created on 2009. 5. 24, 오후 10:19:36
 */

package javafxapplicationproject;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

/**
 * @author Honeymon
 */

Stage {
    title: "Application title"
    width: 250
    height: 80
    scene: Scene {
        content: Text {
            font : Font {
                size : 16
            }
            x: 10, y: 30
            content: "Application content"
        }
    }
}
위의 코드를 JavaFX에서 실행하면 아래처럼, 웹브라우저에 Application content 라는 내용이 나타납니다. 마치 프로그래밍 언어의 'Hello, World'와 같다고 할 수 있겠죠. ㅡㅅ-);; 이렇게 하니까 성의가 없어보이는군요!!! Hello, world로 해줘도 되었는데... 그냥 썼으니... 이 귀차니즘이란!!!

자, 이번에는 동그라미를 그려보도록 하겠습니다. ^^
/*
 * Main.fx
 *
 * Created on 2009. 5. 24, 오후 10:19:36
 */

package javafxapplicationproject;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

/**
 * @author Honeymon
 */

Stage {
    title: "Application title"
    width: 250
    height: 80
    scene: Scene {
            content: Circle {
        centerX: 100, centerY: 100
        radius: 40
        fill: Color.YELLOW
    }

    }
}
참 쉽죠잉~~?? ㅡㅅ-);; 기본 예제는 사용하는 방법을 알려주기 때문에 쉽지요. 거기서 응용을 들어가면... OTL...
이제 자바스크립트를 열심히 배워줘야겠습니다. 훗~~ 모두들 ^^ 즐거운 한주 보내세요.
2009년 5월 23일 토요일, 데브멘토에서 주관하고 있는 DTFE(개발자 페스티벌)의 세미나중 하나인 JavaFX(자바모델링, 윤익환님 강연) 세미나가 있어서 도곡역에 위치한 군인공제회 건물을 향했습니다. ㅡㅅ-);; 저 간판을 보고 잠시 방황했습니다. 표지판이 뭐 저래!!

이 건물에는 IBM이 입주해있습니다. ㅡㅅ-)>
IBM가 DTFE를 협찬하면서, 세미나 전후에 자사의 서비스 들을 소개하는 경우를 보게되는군요. 좋은 내용들이어서 크게 거부감을 느끼거나 하지는 않았습니다. ^^ 자~ 강연이 있는 21층(발송된 문자에는 71층!!! 이런 고층빌딩이!!)으로 향했습니다.
IBM 연구소에서 하는 강연이었기 때문에, 보시다 시피, IBM Badge가 있는 직원만 이용할 수 있다고 합니다. 그래서 세미나 참관객들이 엘리베이터에 타면, 진행요원들이 재빠르게 탑승해서 카드를 찍어주더군요. ㅎㅎ. ㅡㅅ-) 뭔가 있어보였어요.

이번에 IBM에서 밀고 있는 슬로건이더군요. 보다 스마트한(효율적이고 지능적인... 그런 느낌?) 시스템을 개발하여 지구를 바꿔보겠다는 그런 내용인 듯 했습니다. ㅎㅎ 여전히 영어가 짧은 관계로 대략 그런 느낌을 받을 뿐이었습니다. OTL... 세계 정복을 하기 위해서는 영어는 필수인 듯 합니다. 그런 다음에, 한국어를 세계 공통어로 만들어버리겠습니다. 훗~!!
관련내용 : http://www.ibm.com/ibm/ideasfromibm/us/smartplanet/topics/healthcare/20090223/index1.shtml


자~!! 세미나 현장으로 들어가볼까요~? ^^


먼저 IBM의 윤서익 차장님이 IBM의 SMARTER PLANET 에 대해서 설명하셨습니다. 좋은게 좋은거죠!!


조금 일찍 들어간 탓에 사람은 그렇게 많지는 않았습니다. 시작하기 직전에 우르르 올라오시더군요. ^^



제가 요즘 읽고 있는 더글라스 크락포드 님의 JavaScript The Good Parts 라는 책 입니다. 살짝 맛만 봤던 JavaScript의 정수를 모아놓은 자바 정석이라고 할 수 있겠군요. ㅡㅅ-);; JavaScript와 관련된 내용은 (http://java.ihoney.pe.kr/4)을 참조해주세요. ^^ 먼저 말씀드리자면, JavaFX를 제대로 활용하기 위해서는 스크립트 언어(제 생각에는 JavaScript를 기반으로 하는 듯)를 잘 익혀야 합니다.
저의 경우에는 OpenAPI를 이용해서 매쉬업 프로그램을 만들어보고 싶어서 뒤늦게 시작하고 있는데, 나쁘지 않은 선택인 것 같습니다. ^^ 여러분들도 JavaFX를 공부해보세요!!
자바스크립트 핵심 가이드
카테고리 컴퓨터/IT
지은이 더글라스 크락포드 (한빛미디어, 2008년)
상세보기



강연이 시작하기 전, 빔프로젝트가 뿌려주는 동영상에서는 반복적으로 'I'm IBMER'라고 외치더군요. ㅡㅅ-);; 머릿 속에 각인되어버렸습니다. 나도 아이비에머가 될 것 같아요. ㅎㅎ.


오늘 세미나 강연자인 고덕한 님입니다. 좋은 인상으로 말씀하시는게 상당히 리드미컬하시더군요. ^^ 22기 스터디 그룹을 모집하고 계시답니다(http://www.javamodeling.com/index.jsp). 관심있으신 분은 참석하여보시기 바랍니다. ^^; 세미나 자료를 얻고 싶어서 가입했는데 아직 관련한 자료는 안올리셨나봐요?


오늘의 주제인 JavaFX 입니다. JavaFX에 대해서는
http://www.sun.com/software/javafx/index.xml
http://www.javafx.com/
http://java.ihoney.pe.kr/9
http://java.ihoney.pe.kr/26
의 내용을 참조해 주세요. ^^


핸드폰으로 찍은 사진이라 화질이 좋지 못한 점은 양해 부탁드립니다. 강연을 마치고 나니까, 저도 스터디를 다시 시작해야겠구나라는 생각을 하게 되었습니다. ^^; 개인적으로 하고 있기는 하지만, 개인이 할 수 있는 것의 한계가 곧 나타날 것이고 그걸 극복할 수 있는 방법은 그룹 스터디를 통해서 다른 사람들과 지식을 공유하는 방법일 것입니다. 우선은 제가 있는 기술교육센터에서 다시한번 조성을 해봐야겠습니다. ^^

  전체적으로 유익한 강연이었습니다. JavaFX를 구현하는 방법을 조금이라도 감을 잡을 수 있었으니까요. 강연을 듣고 집에오자마자 netbeans를 설치하였습니다. NetBeans 설치방법은 (http://java.ihoney.pe.kr/35)을 참조하시면 손쉽게 하실 수 있을 겁니다. ㅡㅅ-) 어렵지 않아요. 다운 받아서 실행하고 다음다음~~만 눌러주시면 됩니다. ^^




이상으로 JavaFX 세미나에 관한 내용을 마칩니다. ^^
그럼 다음 글은 JavaFX를 이용해서 간단하게 구현한 것을 보여드리겠습니다. ㅡㅅ-)b

'Java > Language' 카테고리의 다른 글

09/05/22 쿠키  (0) 2009.05.25
허니몬, JavaFX 예제 만들기  (0) 2009.05.24
Java IDE, NetBeans를 설치하다.  (0) 2009.05.24
JavaFX SDK 1.1 설치하기  (0) 2009.05.24
j2ee API DOCs, 자바EE 한글화 API 문서(1.3.1 버전)  (0) 2009.05.21
JavaFX를 설치하고 이를 IDE를 통해서 개발하기 위해서는 이클립스나 넷빈 둘 중에 하나를 선택해서 사용하는 것이 좋은 듯 합니다. 두 개발툴 모두 자바 개발툴로서 나름 한가닥씩 하는 곳(IBM, SUN)에서 개발한 개발툴이고, 다양한 플러그인을 지원하고, 지속적으로 업그레이드가 진행되기 때문에 안정적으로 사용할 수가 있지요. ^^; 다만 메모리를 많이 잡아먹는다는 단점이 있다는 것은 흠이라면 흠이라고 할 수 있겠네요. 이는 JVM 때문이기도 할 겁니다. 일반적인 데스크탑에서는 어떨지 모르겠네요. ^^;

넷빈을 다운 받을 수 있는 곳은 http://www.netbeans.org 이곳을 방문하셔서 보이시는 DownLoad NetBeans IDE를 클릭하시면 되겠습니다.

넷빈의 설치를 위해 인스톨러가 설치를 준비하고 있는 모습입니다. ^^

제가 설치한 버전은 All Version을 설치하였습니다. 여기에다가 JavaFX 플러그인을 설치해주었습니다. 리눅스에서는 어떻게 될지 모르겠네요. ㅡ0-);; 우분투에서는 sudo apt-get install netbeans 하면, 자동으로 연결되어서 설치가 되는데 말이죠. ^^;;
필요한 용량은 642.1 MB 이군요. ㅡ_-);; 그래도 뭐... MS의 VS 에 비하면 가볍죠. ㅎㅎ

위의 라이센스에 동이한다고 하시고 체크 해주신다음 next를 누르면 됩니다. ^^

다음은 설치경로를 확인하시면 되겠습니다.
GlassFish는 무엇에 쓰는 녀석일까요? 서버라고 하는 것 같은데 말이죠... 흐흠... 거기에 Apache Tomcat이 설치되는군요. 최근 자바 서블릿과 관련된 부분을 공부하고 있는데, 아마도 웹 컨테이너(웹엔진)으로서 사용을 하게 되는 것 같습니다. ㅡ_-); 흐음~~ 암튼 설치 고고!!
설치가 완료되었습니다. NetBeans 프로젝트에 익명성을 가지고서 사용과 관련된 데이터들을 제공한다는 내용인 듯 하군요.
자, 넷빈을 설치한 화면 입니다. 깔끔하죠. ㅡㅅ-)>

설치를 했으면 구동을 시켜봐야겠지요? ^^ 그럼 간단하게 HelloWorld를 출력하여 보도록 하겠습니다.
최근 Sun에서는 Java를 기반으로 하는 RIA 애플리케이션 개발툴인 JavaFX 1.1 버전을 내놓았습니다. 6월 1일에 JavaOne(http://java.sun.com/javaone)에서 JavaFX를 기반으로 하는 자바 앱스토어(Java AppStore)를 발표할 가능성이 높습니다. ^^ Vector project 라는 이름으로 준비 중인 것 같습니다. Sun 사이트에는 그 내용을 찾아보기는 어렵습니다.

어쨌든~ JavaFX는 몇 년 안에 큰 유행의 흐름을 만들어낼 수 있지 않을까라는 기대를 하면서 JavaFX에 대한 공부를 시작하기로 하였습니다. JvavFX SDK를 설치하는 방법부터 알려드리겠습니다. 현재로는 윈도우와 맥 만 지원을 하는 것으로 보입니다. ㅡㅅ-);; Java SE SDK1.6을 지원한다고 하는데, 사용하는 소스를 보면 1.5 버전을 사용하는 것으로 나오더군요. 버전업되면서 점점 나아지겠지요?

우선 JavaFX를 다운받으러 가야겠지요? ^^ JavaFX 공식 사이트(http://www.javafx.com) 으로 이동합니다. 오른쪽에 보이는 Get 버튼이나 Download Now 버튼을 누르시면 JavaFX SDK를 다운 받는 페이지로 이동합니다.


위의 네모친 JavaFX 1.1.1 SDK를 다운 받으시면 됩니다. JavaFX_sdk-1_1_1-windows-i586.exe 를 다운 받으시면 됩니다. 이를 실행하시면 아래와 같은 화면이 나타납니다. ㅡㅅ-)> 별다른 거 없습니다.  중간에 동의한다고 해주시고 경로확인해 주시고 Next~ Next 설치를 해주시면 됩니다. ^^ 그럼 설치 완료!!!







요렇게 Finish 가 뜨면 완료 된 것입니다. 참 쉽죠잉~~?? JavaFX는 NetBeans 에서 사용을 하시는 게 좋은 듯 합니다. 이클립스에서도 JavaFX에 대한 플러그인을 내놓기는 했지만, 아직은 그 기능을 완전히 지원하지는 못하는 듯 합니다. 그렇지만 NetBeans 의 크기가 좀 비대해서 설치하기 곤란한 상황도 있습니다. 아직 저에게는 이클립스나 넷빈이나 낯설기는 마찬가지군요. ㅡ0-);;

JavaFX와 관련된 내용도 꾸준하게 올려보도록 하겠습니다. ^^

+ Recent posts