본문 바로가기
Security보안

[IT보안용어]세션(Session)과 쿠키(Cookie)의 용어의 유래와 차이점

by ICT 인사이트 2025. 3. 5.
728x90

현대 IT 환경에서는 사용자 경험을 개선하고 보안을 강화하기 위한 다양한 기술이 사용됩니다. 그중에서도 세션(Session)과 쿠키(Cookie)는 웹 애플리케이션에서 사용자 상태를 유지하는 핵심 요소로 자리 잡고 있습니다.

 

웹이 본래 무상태(Stateless) 프로토콜인 HTTP를 기반으로 작동하기 때문에, 사용자의 상태를 유지하려면 별도의 방법이 필요합니다. 이러한 필요성에서 쿠키와 세션이 개발되었으며, 현재까지도 로그인 유지, 장바구니 기능, 개인화된 웹 경험 제공 등의 역할을 수행하고 있습니다.

본 글에서는 세션과 쿠키의 유래, 차이점, 보안 고려 사항, 실무 적용 사례 등을 종합적으로 살펴보며, 개발자와 보안 전문가들이 안전한 웹 애플리케이션을 구축하는 데 도움을 주고자 합니다.

 

1. 세션(Session)과 쿠키(Cookie)의 유래

1.1 쿠키(Cookie)의 유래 🍪

쿠키는 1994년 넷스케이프(Netscape)에서 웹 브라우저가 사용자의 정보를 저장하고, 이를 웹 서버와 교환하여 사용자의 경험을 개선하기 위해 처음 도입되었습니다. 초기 목적은 쇼핑몰 웹사이트에서 장바구니 정보를 유지하는 것이었으며, 이후 웹사이트의 개인화, 로그인 유지 등에 활용되기 시작했습니다.

1.2 세션(Session)의 유래 🔒

세션은 웹 애플리케이션이 사용자의 상태를 관리할 필요성에서 시작되었습니다. HTTP 프로토콜은 기본적으로 무상태(Stateless) 특성을 가지므로, 사용자가 동일한 웹사이트를 방문하더라도 매번 새로운 요청처럼 처리됩니다. 이를 해결하기 위해 서버 측에서 사용자 상태를 유지하는 방법으로 세션이 개발되었습니다.

2. 세션과 쿠키의 개념 및 차이점

구분 세션(Session) 쿠키(Cookie)
저장 위치 서버(Server) 클라이언트(Client)
유효 기간 일정 시간 동안 유지(세션 만료 시 삭제) 설정된 만료 기간까지 유지
보안성 서버에서 관리하여 보안성이 높음 클라이언트에서 저장되어 보안 위험이 있음
데이터 크기 비교적 큰 데이터 저장 가능 브라우저가 제한하는 크기(4KB) 내에서 저장 가능
활용 사례 사용자 로그인, 장바구니, 결제 정보 유지 자동 로그인, 방문 기록, 사용자 맞춤 설정

 

3. 세션(Session)의 특징 및 동작 방식

3.1 세션의 특징

  • 서버 측에서 사용자 정보를 저장하므로 보안성이 높음
  • 일정 시간(타임아웃) 후 자동 만료됨
  • 서버 부하가 증가할 수 있음(세션을 저장해야 하기 때문)

3.2 세션의 동작 방식 🔄

// 세션 생성 예제 (Java Spring Boot)
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;

public class SessionExample {
    public void createSession(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute("user", "JohnDoe");
    }
}
// 세션 가져오기
public String getSessionUser(HttpServletRequest request) {
    HttpSession session = request.getSession();
    return (String) session.getAttribute("user");
}

 

4. 쿠키(Cookie)의 특징 및 동작 방식

4.1 쿠키의 특징 🍪

  • 클라이언트 측에서 저장되며, 사용자가 직접 수정할 수 있음
  • 브라우저가 쿠키를 자동으로 서버에 전송
  • 보안상 취약점이 존재(Cross-Site Scripting, Session Hijacking 등의 위험)

4.2 쿠키의 동작 방식

// 쿠키 생성 예제
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

public class CookieExample {
    public void createCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("username", "JohnDoe");
        cookie.setMaxAge(60*60*24); // 1일 동안 유지
        cookie.setHttpOnly(true); // JavaScript 접근 방지
        cookie.setSecure(true); // HTTPS에서만 전송
        response.addCookie(cookie);
    }
}
// 쿠키 가져오기
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

public class CookieExample {
    public String getCookie(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        for (Cookie c : cookies) {
            if (c.getName().equals("username")) {
                return c.getValue();
            }
        }
        return null;
    }
}

 

5. 세션과 쿠키의 보안 고려사항 🔐

5.1 세션 보안

  • 세션 타임아웃 설정: 일정 시간이 지나면 세션이 자동으로 만료되도록 설정
  • 세션 ID 보호: 세션 ID가 노출되지 않도록 HTTPS를 사용하고, HttpOnly 속성을 활성화
  • CSRF 방지: 요청마다 CSRF 토큰을 포함하여 세션 탈취 공격을 방지

5.2 쿠키 보안

  • 보안 속성 설정: Secure, HttpOnly, SameSite 속성을 활성화하여 보안 강화
  • XSS 방지: 사용자 입력 검증을 통해 악성 스크립트 실행 방지
  • 도메인 및 경로 제한: 쿠키가 특정 도메인과 경로에서만 사용되도록 제한

6. 세션과 쿠키의 실무 적용 사례 ⚡

적용 사례 세션(Session) 쿠키(Cookie)
로그인 유지 사용자가 로그인하면 서버에서 세션을 생성하고, 세션 ID를 관리 사용자의 로그인 상태를 유지하기 위해 Remember Me 기능에서 활용
장바구니 로그인한 사용자의 장바구니 정보 저장 로그인하지 않은 사용자의 장바구니 정보 유지
자동 로그인 보통 사용되지 않음(보안 문제로 인해) 사용자 로그인 정보를 암호화하여 저장

 

7. 🎯 결론

세션과 쿠키는 웹 애플리케이션에서 사용자 상태를 관리하는 중요한 기술입니다.

세션은 서버 측에서 관리되어 보안성이 높지만, 서버 부하를 증가시킬 수 있습니다. 반면, 쿠키는 클라이언트 측에서 관리되므로 서버 부하가 적지만, 보안 취약점이 존재합니다. 따라서, 실제 애플리케이션에서는 두 가지 방법을 적절히 조합하여 사용하며, 보안 속성을 강화하는 것이 중요합니다.

 

오늘날의 웹 환경에서는 보안 위협이 증가하고 있으며, 이에 따라 세션과 쿠키를 안전하게 관리하는 것이 필수적입니다. HTTPS, 보안 속성 설정, 사용자 입력 검증 등 다양한 보안 조치를 통해 보다 안전한 웹 서비스를 제공할 수 있습니다. 개발자와 보안 담당자들은 최신 보안 동향을 반영하여 지속적인 개선을 이루어야 합니다. 🚀

728x90