Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240731 쿠키와 세션 본문

개발Article

[TIL]20240731 쿠키와 세션

최밤빵 2024. 8. 2. 04:58

Spring을 들으면서 쿠키와 세션에 대한 강의를 들으면서 분명 들을 때는 너무 재밌었는데...! 이해도못하면서 그저 재밌어했던 것 같다. 유튜브에서 쿠키와 세션을 정리한 내용을 보다가 개발일지에 기록하면 좋겠다는 생각이 들어서 정리를하게됐다. 

🤓쿠키와 세션 방식의 이해와 활용

쿠키(Cookie)세션(Session) 방식은 웹 애플리케이션에서 사용자 식별과 상태 관리를 위해 가장 널리 사용되는 방법 중 하나이다. 웹은 본질적으로 무상태(stateless) 프로토콜인 HTTP를 기반으로 하기 때문에, 서버는 각 요청이 독립적이고 이전 요청과의 관계가 없는 상태로 처리된다. 그러나 대부분의 애플리케이션은 사용자의 상태나 데이터를 유지해야 하기 때문에, 이를 위해 쿠키와 세션 방식을 사용한다. 이번 개발일지에서는 쿠키와 세션 방식의 개념, 차이점, 장단점, 그리고 사용 시 주의해야 할 점 등을 다뤄보았다.

 

▶쿠키(Cookie)란 ?

쿠키(Cookie)는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각으로, 서버가 클라이언트를 식별하거나 상태 정보를 유지하기 위해 사용한다. 쿠키는 주로 서버에서 생성되어 클라이언트(브라우저)로 전송되고, 이후 클라이언트가 동일한 서버에 요청을 보낼 때마다 자동으로 함께 전송된다.

 

쿠키의 주요 특징:

→ 클라이언트 측 저장:

쿠키는 클라이언트(웹 브라우저)에 저장되며, 클라이언트 측에서 관리된다. 서버는 쿠키를 설정하고 읽을 수 있지만, 실제 저장은 브라우저가 담당한다.

→ 키-값 쌍의 형태:

쿠키는 key=value 형태의 문자열 데이터로 저장된다. 하나의 도메인에 대해 여러 개의 쿠키가 설정될 수 있으며, 각 쿠키는 키-값 쌍으로 식별된다.

→ 수명:

쿠키는 세션 쿠키(Session Cookie)와 영구 쿠키(Persistent Cookie)로 나뉜다. 세션 쿠키는 브라우저가 종료되면 삭제되지만, 영구 쿠키는 설정된 만료 시간까지 브라우저에 남아 있다.

→ 보안 취약성:

쿠키는 클라이언트 측에 저장되기 때문에 도난, 변조, 가로채기 등의 보안 위험이 있다. 특히, HttpOnly, Secure와 같은 속성을 설정하여 보안을 강화하는 것이 중요하다.

 

▽ 쿠키 사용 예시:

// Java Servlet에서 쿠키 생성 및 설정 예시
Cookie cookie = new Cookie("username", "johnDoe");
cookie.setMaxAge(60 * 60 * 24); // 1일 동안 유효
cookie.setHttpOnly(true); // 클라이언트 측에서 JavaScript로 접근 불가
response.addCookie(cookie);

위의 예시는 Java Servlet을 사용하여 쿠키를 생성하고 설정하는 코드이다. setMaxAge() 메서드를 통해 쿠키의 유효 기간을 1일로 설정하고, HttpOnly 속성을 활성화하여 JavaScript를 통한 접근을 막는다.

 

▶ 세션(Session)이란?

세션(Session)은 서버 측에서 사용자와의 상태를 유지하기 위해 사용하는 방법이다. 서버는 사용자의 요청이 들어올 때마다 세션 ID를 발급하여, 이 세션 ID를 통해 사용자의 상태와 데이터를 유지한다. 세션은 주로 사용자가 로그인한 상태를 유지하거나, 쇼핑 카트와 같은 데이터를 관리하는 데 사용된다.

 

세션의 주요 특징:

→ 서버 측 저장:

세션 데이터는 서버에서 관리되며, 클라이언트에는 세션 ID만 저장된다. 클라이언트가 서버에 요청을 보낼 때마다 세션 ID가 포함되어, 서버는 이 ID를 이용해 저장된 데이터를 조회할 수 있다.

→ 세션 ID를 통한 식별:

세션 ID는 고유한 값으로, 사용자의 브라우저에 저장된 쿠키를 통해 전달된다. 서버는 이 ID를 이용해 사용자를 식별하고, 사용자별 데이터를 관리한다.

→ 보안성이 높음:

세션 데이터는 서버에서 관리되므로, 클라이언트 측 데이터 변조나 도난의 위험이 낮다. 그러나 세션 ID가 도난당할 경우 보안 문제가 발생할 수 있으므로, SSL/TLS를 통한 암호화가 필요하다.

→ 자동 만료:

세션은 일정 기간 동안 사용자가 요청을 하지 않으면 자동으로 만료된다. 이를 통해 서버 자원을 효율적으로 관리할 수 있다.

 

▽ 세션 사용 예시:

// Java Servlet에서 세션 생성 및 사용 예시
HttpSession session = request.getSession(); // 기존 세션이 있으면 반환, 없으면 새로 생성
session.setAttribute("username", "johnDoe"); // 세션에 데이터 저장

// 세션에서 데이터 읽기
String username = (String) session.getAttribute("username");

// 세션 무효화 (로그아웃 등)
session.invalidate();

위의 예시는 Java Servlet을 사용하여 세션을 생성하고 데이터를 저장하는 코드이다. getSession() 메서드는 기존 세션이 있으면 해당 세션을 반환하고, 없으면 새 세션을 생성한다. 세션 데이터는 setAttribute() 메서드를 통해 저장되고, getAttribute() 메서드를 통해 조회할 수 있다.

 

▶ 쿠키와 세션의 차이점

쿠키와 세션은 모두 사용자 상태를 유지하기 위한 기술이지만, 저장 위치와 보안, 용량, 사용 용도 등에서 차이가 있다.

 
▽쿠키(Cookie)세션(Session)
저장 위치 클라이언트 측(브라우저) 서버 측
보안성 비교적 낮음 (클라이언트에 저장됨) 비교적 높음 (서버에서 관리됨)
수명 만료 시간에 따라 다름 서버 설정에 따라 다름
용량 제한 쿠키 당 약 4KB 서버 메모리에 종속됨 (제한 없음)
전송 방식 모든 요청 시 자동으로 전송됨 세션 ID만 쿠키나 URL로 전송
사용 목적 사용자 설정, 비로그인 상태 유지 등 로그인 상태 유지, 중요한 정보 관리 등

 

▶쿠키와 세션의 장단점

 

▷ 쿠키 

→ 쿠키의 장점:

클라이언트 측에 저장되므로 서버 자원을 사용하지 않아 서버 부담이 적다.

만료 시간을 설정하여 장기간 사용이 가능하다.

클라이언트에서 직접 수정 가능하여 테스트와 디버깅에 유용하다.

→ 쿠키의 단점:

클라이언트에 저장되므로 보안에 취약하다. (변조, 도난 위험)

쿠키 용량이 제한적이다. (쿠키 당 약 4KB)

사용자가 브라우저에서 쿠키를 차단할 수 있다.

 

▷ 세션 

→ 세션의 장점:

서버 측에 저장되므로 클라이언트 측의 변조 위험이 없다.

보안이 중요한 데이터를 처리하는 데 적합하다.

상태 정보를 서버에서 관리하므로 서버에서 사용자 상태를 쉽게 파악할 수 있다.

→ 세션의 단점:

세션 정보는 서버 메모리를 사용하므로, 많은 사용자 요청을 처리할 때 성능 문제가 발생할 수 있다.

세션 ID가 유출되면 세션 하이재킹(Session Hijacking) 등의 보안 문제가 발생할 수 있다.

 

▶ 쿠키와 세션 사용 시 주의사항

→ 보안 설정:

쿠키와 세션 모두 보안에 취약할 수 있으므로, Secure, HttpOnly, SameSite와 같은 속성을 설정하여 보안을 강화해야 한다. 세션 ID는 반드시 SSL/TLS를 통해 암호화된 채널에서 전송되어야 한다.

→ 세션 관리 전략:

많은 사용자를 처리해야 하는 애플리케이션에서는 세션 무효화 시간(Time-out)을 적절하게 설정하고, 필요하지 않은 세션은 즉시 무효화해야 한다.

→ 용도에 맞는 선택:

사용자 설정이나 비로그인 사용자 상태 유지 등의 간단한 데이터는 쿠키를 사용하고, 로그인과 같이 보안이 중요한 정보는 세션을 사용하는 것이 좋다.

 

▶정리

쿠키와 세션 방식의 차이점과 장단점, 사용 시 주의사항에 대해 정리를 해봤다. 쿠키는 클라이언트 측에 데이터를 저장하여 서버 부담이 적지만 보안에 취약하고, 세션은 서버 측에 데이터를 저장하여 보안이 높지만 서버 자원을 소모할 수 있다. 각각의 특성과 장단점을 잘 파악하여 적절히 사용하는 것이 중요하다. 웹미니프로젝트때 기술매니저님과 민교님이 쿠키랑 세션에 대해서 얘기할 때 알지 못 해서 혼자 답답해 했던 기억이있는데 지금은 그래도 강의도 듣고 조금은 알아들을 수 있어서 기쁘다😆

'개발Article' 카테고리의 다른 글

[TIL]20240802 Filter  (0) 2024.08.02
[TIL]20240801 로드밸런서  (0) 2024.08.02
[TIL]20240730 Bcrypt  (0) 2024.07.30
[TIL]20240729 jwtUtil은 순수하다  (0) 2024.07.30
[WIL]20240728 리프레시토큰은 어렵다.  (0) 2024.07.28