쿠키와 세션

혜쿰·2023년 10월 20일
0
post-thumbnail

📚 개념

세션과 쿠키는 웹 개발에서 사용되는 두 가지 중요한 기술로, 사용자와 웹 서버 간의 상태 관리 및 데이터 저장을 위해 사용된다. 이들은 웹 애플리케이션에서 사용자 경험을 개선하고 데이터를 보관하는 데 도움을 주는 역할을 한다.

📙 쿠키

  • 쿠키는 클라이언트 측 (일반적으로 웹 브라우저)에 저장되는 작은 텍스트 파일로, 웹 서버가 클라이언트에게 전송하는 정보를 보존하기 위해 사용된다.

  • 쿠키는 클라이언트에서 생성하고 저장되며, 서버에 요청 시마다 자동으로 서버로 전송된다.

  • 쿠키는 제한된 용량과 보안의 제약이 있으며, 개인정보와 같은 민감한 정보를 저장하기에 적합하지 않을 수 있다.

  • 주로 사용자 인증, 사용자 설정, 쇼핑카트 등과 같은 상태 정보를 유지하는 데 활용된다.

📘 세션

  • 세션은 서버 측에 사용자 상태 정보를 저장하는 기술로, 일반적으로 쿠키를 기반으로 작동한다.
  • 세션은 일반적으로 더 많은 데이터를 저장할 수 있고, 데이터는 서버 측에서 관리되므로 상대적으로 안전하다.
  • 사용자가 웹 애플리케이션에 접속할 때 고유한 세션 ID가 생성되고 이 ID는 쿠키를 통해 클라이언트에게 전달된다.
  • 이후 클라이언트의 요청에 대한 처리는 세션 ID를 기반으로 서버에서 상태 정보를 관리한다.
  • 주로 웹 애플리케이션의 로그인 상태, 장바구니 내용, 사용자 프로필과 같은 중요한 정보를 저장하는 데 사용된다.

📗 비교

1. 데이터 저장 위치

  • 쿠키: 브라우저의 쿠키 저장소에 저장된다.
  • 세션: 서버 측에서 데이터를 저장하며, 일반적으로 서버 메모리, 데이터베이스 또는 파일 시스템에 저장된다.

2. 데이터 양

  • 쿠키: 작은 용량의 데이터만 저장 가능하며, 브라우저가 서버에 요청 시마다 자동으로 전송된다.
  • 세션: 대량의 데이터를 저장할 수 있으며, 일반적으로 서버 자원에 의존한다.

3. 보안

  • 쿠키: 클라이언트 측에 저장되므로 쿠키는 클라이언트에서 조작될 수 있고, 중요한 정보에 대한 보안을 고려할 필요가 있다.
  • 세션: 서버 측에서 관리되므로 세션 데이터에 대한 보안이 더 강력하며, 클라이언트에 의해 조작하기 어렵다.

4. 수명

  • 쿠키: 설정된 만료일까지 계속 유지되거나 세션 쿠키인 경우 브라우저가 닫힐 때 삭제된다.
  • 세션: 클라이언트의 세션이 종료되거나 타임아웃 될 때 삭제된다. default는 30분이다.

5. 활용

  • 쿠키: 작은 상태 정보를 유지하기에 적합하다.
  • 세션: 중요한 데이터를 저장하는 데 사용된다.

6. 이용목적

  • 쿠키는 주로 사용자 경험을 개선하고 설정을 저장하는 데 사용된다.
  • 세션은 주로 사용자 인증과 사용자의 웹 애플리케이션 상태를 관리하는 데 사용된다.

웹 애플리케이션을 개발할 때, 쿠키와 세션을 함께 사용하는 것이 일반적이며, 어떤 것을 선택할지는 사용 사례와 보안 요구 사항에 따라 다를 수 있다.

📚 세션 코드 예시

📙 파이썬

파이썬 웹 애플리케이션 프레임워크인 Flask를 사용하여 세션을 설정하는 예시이다.

from flask import Flask, session

app = Flask(__name)
app.secret_key = 'your_secret_key'  # 세션 데이터를 암호화하기 위한 키

@app.route('/')
def set_session():
    session['username'] = 'example_user'
    return '세션이 설정되었습니다.'

@app.route('/get_session')
def get_session():
    if 'username' in session:
        return '세션 값: ' + session['username']
    else:
        return '세션에 값이 없습니다.'

@app.route('/clear_session')
def clear_session():
    session.pop('username', None)
    return '세션 값이 제거되었습니다.'

if __name__ == '__main__':
    app.run()

📘 자바

자바 웹 애플리케이션을 개발할 때, 서블릿과 JSP를 사용하여 세션을 다룰 수 있습니다. 아래는 자바 서블릿을 사용한 세션 예시입니다.

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/setSession")
public class SetSessionServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.setAttribute("username", "example_user");
        response.getWriter().println("세션이 설정되었습니다.");
    }
}

@WebServlet("/getSession")
public class GetSessionServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");
        if (username != null) {
            response.getWriter().println("세션 값: " + username);
        } else {
            response.getWriter().println("세션에 값이 없습니다.");
        }
    }
}

@WebServlet("/clearSession")
public class ClearSessionServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.removeAttribute("username");
        response.getWriter().println("세션 값이 제거되었습니다.");
    }
}

이 코드는 서블릿을 사용하여 세션을 설정, 가져오고, 제거하는 방법을 보여준다. HttpSession 객체를 사용하여 세션을 다룬다.

두 가지 언어 모두 세션을 설정하고 가져오는 방법을 보여주며, 필요에 따라 세션을 제거할 수 있다.

0개의 댓글