6월 10일 - Cookie & Session

Yullgiii·2024년 6월 10일
0
post-thumbnail

Cookie & Session

HTTP는 비상태성(Stateless) 프로토콜로 상태 정보를 유지하지 않는다. 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 큰 장점이지만 통신할 때마다 매번 연결 설정을 해야 하며, 이전 요청과 현재 요청이 같은 사용자의 요청인지 알 수 없다는 단점이 존재한다. 쿠키와 세션을 통해서 HTTP의 Stateless한 문제점을 해결할 수 있다.

저장 위치

  • 쿠키: 클라이언트의 웹 브라우저가 지정하는 메모리 또는 하드 디스크에 저장된다.
  • 세션: 서버의 메모리에 저장된다.

만료 시점

  • 쿠키: 저장할 때 expires 속성을 정의하여 만료 날짜를 지정할 수 있다.
  • 세션: 클라이언트가 로그아웃하거나 설정된 시간 동안 반응이 없으면 무효화된다. 따라서 정확한 만료 시점을 알 수 없다.

리소스

  • 쿠키: 클라이언트에 저장되기 때문에 서버 자원을 사용하지 않는다.
  • 세션: 서버에 저장되기 때문에 세션이 생성될 때마다 서버 리소스를 차지한다.

용량 제한

  • 쿠키: 한 도메인당 20개, 하나의 쿠키당 4KB로 제한되어 있다.
  • 세션: 서버에 의해 생성되므로 개수나 용량 제한이 없다.

보안

  • 쿠키: 클라이언트에 저장되기 때문에 보안에 취약하다.
  • 세션: 서버에 저장되기 때문에 쿠키에 비해 보안이 우수하다.

예제 코드

쿠키 예제

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

public class CookieExample {
    public void createCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("username", "john_doe");
        cookie.setMaxAge(60 * 60 * 24); // 1 day
        response.addCookie(cookie);
    }

    public void readCookie(javax.servlet.http.HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("username")) {
                    System.out.println("Username: " + cookie.getValue());
                }
            }
        }
    }
}

세션 예제

import javax.servlet.http.HttpSession;

public class SessionExample {
    public void createSession(javax.servlet.http.HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute("username", "john_doe");
    }

    public void readSession(javax.servlet.http.HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            String username = (String) session.getAttribute("username");
            if (username != null) {
                System.out.println("Username: " + username);
            }
        }
    }
}

So...

쿠키와 세션은 HTTP의 비상태성 문제를 해결하는 데 유용한 도구이다. 쿠키는 클라이언트에 저장되고 서버 자원을 사용하지 않지만, 보안에 취약하고 저장 용량이 제한적이다. 반면 세션은 서버에 저장되어 보안이 우수하고 용량 제한이 없지만, 서버 자원을 사용하게 된다. 상황에 따라 적절한 방법을 선택하여 사용해야 한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글