쿠키(Cookies), 세션(Session), 그리고 웹 스토리지(Web Storage)는 모두 웹 개발에서 데이터를 저장하고 관리하는 데 사용되는 기술이지만, 각각의 특징과 작동 방식이 다릅니다. 간단한 예제를 보면서 이들의 차이를 설명하겠습니다.
쿠키 | 세션 | 웹 스토리지 | |
저장 위치 | 클라이언트 | 서버 | 클라이언트 |
데이터 저장 방식 | 키-값 쌍 형태의 작은 텍스트 파일 | 서버 측에 사용자 세션 데이터를 저장하고, 클라이언트는 세션 ID를 사용하여 서버의 데이터에 접근 | 키-값 쌍으로 데이터를 저장하며, 로컬 스토리지와 세션 스토리지 두 가지 유형 존재 |
데이터 전송 | 모든 HTTP 요청과 함께 서버로 자동으로 전송 | 세션 ID가 클라이언트로 전송되지만, 세션 데이터는 서버에 저장되므로 클라이언트와 서버간의 통신을 통해 사용 | 데이터는 클라이언트에서만 사용되며, 서버와의 통신 없이 클라이언트에서 데이터를 관리 |
보안 | 일반적으로 쉽게 열람 가능하므로 민감한 데이터에는 사용되지 않을 수 있으며, 보안 옵션 설정이 가능 | 상대적으로 안전하며, 서버에 민감한 데이터를 저장할 때 사용 | 일반적으로 쿠키보다는 안전하지만, 민감한 데이터에는 추가 보안 조치가 필요 |
저장 기간 | 설정한 만료 날짜 또는 브라우저 세션 종료 시까지 유지 | 클라이언트 세션 종료 또는 세션 타임아웃까지 유지 | 로컬 스토리지는 사용자가 삭제하기 전까지 영구적으로 유지되고, 세션 스토리지는 세션 종료시까지 유지 |
사용 사례 | 사용자 식별, 로그인 상태 유지, 사용자 설정 등 | 로그인 상태 유지, 장바구니, 웹 애플리케이션 상태 관리 | 사용자 설정, 캐싱, 오프라인 작업, 로컬 데이터 저장 |
쿠키(Cookies)
쿠키는 클라이언트 측에 저장되는 작은 텍스트 파일로, 서버로 데이터를 전송하기 위해 HTTP 요청과 함께 보내집니다. 주로 사용자를 식별하고 상태 정보를 저장하는 데 사용됩니다. 아래 코드는 쿠키를 사용하여 로그인 정보를 유지하는 예제입니다.
// 서버에서 로그인 후 쿠키 설정 (예: Express.js)
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.get('/login', (req, res) => {
// 사용자 로그인 후 쿠키 설정
res.cookie('user_id', '123', { httpOnly: true });
res.send('로그인 성공');
});
쿠키를 사용하여 사용자를 로그인 상태로 유지할 수 있습니다. 사용자가 로그인하면 서버는 'user_id' 라는 쿠키를 생성하고 클라이언트에 전송합니다. 그러면 클라이언트가 이 쿠키를 저장하고 서버로 전송하여 사용자를 식별합니다.
세션(Session)
세션은 서버 측에서 사용자 상태를 유지하는 데 사용됩니다. 클라이언트는 세션 ID를 받아 로컬로 저장하고, 이 ID를 사용하여 서버의 세션 데이터에 액세스 합니다. 아래 코드는 세션을 사용하여 로그인 정보를 유지하는 예제입니다.
// 서버에서 세션 사용 (예: Node.js와 Express.js)
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'mysecret',
resave: false,
saveUninitialized: true
}));
app.get('/login', (req, res) => {
// 사용자 로그인 후 세션에 사용자 정보 저장
req.session.user = { id: '123', username: 'user123' };
res.send('로그인 성공');
});
세션을 사용하여 사용자 정보를 서버 측에서 안전하게 저장하고, 클라이언트는 세션 ID를 받아 로컬로 저장합니다. 클라이언트의 로그인 상태를 식별하기 위해 세션 ID를 사용합니다.
웹 스토리지(Web Storage)
웹 스토리지는 클라이언트 측에서 데이터를 저장하는 데 사용됩니다. 데이터는 브라우저에 저장되며, 클라이언트와 서버 간의 통신 없이도 데이터를 저장 및 검색할 수 있습니다.
- 간편성: 쿠키 및 세션에 비해 사용이 간편합니다. 데이터를 저장하고 검색하는 과정이 쿠키, 세션보다 단순했습니다.
- 로컬 데이터 저장: 클라이언트 측에 데이터를 로컬로 저장하므로, 서버에 데이터를 요청하지 않고도 로컬에서 데이터를 빠르게 로드할 수 있습니다. 이것을 잘 이용한다면 웹 애플리케이션의 성능을 향상 시킬 수 있습니다.
- 로그인 상태 유지: 쿠키에서도 물론 가능하지만, 웹 스토리지도 가능합니다.
- 오프라인 액세스: 웹 스토리지를 사용하여 애플리케이션 데이터를 로컬에 저장하면, 사용자가 오프라인 상태에서도 애플리케이션을 사용할 수 있습니다. 이는 오프라인 기능이 있는 경우 유용합니다.
- 캐싱: 웹 스토리지를 사용하여 웹 페이지의 자주 변경되지 않는 데이터를 캐싱할 수 있습니다. 이로써 서버 요청을 줄이고 성능을 향상시킬 수 있습니다.
- 보안 고려 사항: 쿠키는 브라우저에서 수정 가능하므로 민감한 정보를 저장하기에는 적합하지 않을 수 있습니다. 웹 스토리지는 클라이언트 측에서 데이터를 저장하는 데, 민감한 정보를 저장할 때 더욱 안전하다고 여겨질 수 있습니다.
이러한 웹 스토리지는 로컬 스토리지와 세션 스토리지가 있습니다. 로컬 스토리지와 세션 스토리지는 웹 브라우저에서 클라이언트 측 데이터를 저장하는 데 사용되는 두 가지 웹 스토리지 옵션입니다. 이들의 주요 차이점은 다음과 같습니다
- 데이터 수명
• 로컬 스토리지: 로컬 스토리지에 저장된 데이터는 사용자가 명시적으로 삭제하지 않는 한 영구적으로 보존됩니다. 즉, 브라우저를 종료하거나 재시작해도 데이터는 유지됩니다.
• 세션 스토리지: 세션 스토리지에 저장된 데이터는 현재 세션이 유지되는 동안만 유효합니다. 브라우저를 종료하면 세션 스토리지에 저장된 데이터가 삭제됩니다.
- 공유 범위
• 로컬 스토리지: 로컬 스토리지에 저장된 데이터는 동일한 도메인의 모든 페이지에서 공유됩니다. 다른 탭 또는 창에서도 접근 가능합니다.
• 세션 스토리지: 세션 스토리지에 저장된 데이터는 현재 탭 또는 창에서만 접근 가능하며 다른 탭 또는 창에서는 공유되지 않습니다.
- 사용 사례
• 로컬 스토리지: 로그인 정보, 사용자 설정, 장바구니 내역과 같이 영구적인 데이터를 저장하는 데 적합합니다.
• 세션 스토리지: 임시 데이터, 현재 세션에 관련된 데이터, 탭 간 데이터 공유가 필요하지 않을 때 사용됩니다.
아래 코드는 웹 스토리지를 사용하여 로그인 정보를 저장하는 예제입니다. 정말 간단하죠..?
// 클라이언트 측에서 로컬 스토리지 사용
localStorage.setItem('user_id', '123');
웹 스토리지를 사용하여 사용자 정보를 클라이언트 브라우저에 저장합니다. 데이터는 클라이언트 측에서만 사용되며, 서버로 전송되지 않습니다. 사용자 로그인 정보는 브라우저 내에 안전하게 저장됩니다.
[정리]
요약하면, 쿠키는 클라이언트 측에 저장되고 서버로 전송되며, 세션은 서버 측에서 데이터를 관리하고 클라이언트 세션 ID를 사용하여 서버와 상호 작용합니다. 웹 스토리지는 클라이언트 측에서 데이터를 저장하며 클라이언트와 서버 간의 통신 없이 데이터를 관리합니다. 선택은 사용 사례, 보안 및 데이터 저장기간에 따라 다르다고 생각이 듭니다.
저는 가장 최근에 작업한 프로젝트에서 로그인을 구현할 때 웹 스토리지를 이용했습니다. 쿠키, 세션보다 훨씬 간편했고 클라이언트측에 데이터를 저장하는 것 중 하나인 쿠키나 웹스토리지로 작업을 하고 싶었습니다. 보안을 비교해 보니 쿠키보다 웹스토리지가 더 안전하더라고요. 쿠키는 모든 HTTP 요청과 함께 서버로 자동으로 전송이 되기도 하고, 사용자가 쿠키를 직접 볼 수도 있고 쿠키를 조작하거나 삭제할 수 있습니다. 반면 웹 스토리지는 이러한 쿠키보다 더 많은 보안 옵션을 제공합니다. 로컬 스토리지와 세션 스토리지는 동일 출처 정책(Same-Origin Policy)을 준수하며, Javascript로만 액세스할 수 있습니다. 또한, 쿠키는 설정한 만료날짜까지만 유지되거나 브라우저 세션 동안만 유지되지만, 웹 스토리지는 영구적으로 저장할 수 있는 로컬 스토리지가 제공됩니다. 이러한 이유들 때문에 저는 쿠키대신 웹 스토리지를 선택하였습니다.
'1. 웹개발 > 1_1_1 JavaScript' 카테고리의 다른 글
[Javascript] 코드 품질을 높이는 방법 (0) | 2024.02.25 |
---|---|
[Javascript] Prototype과 Class의 개념과 차이 (0) | 2024.01.27 |
[Javascript] 불변성이란? (0) | 2023.12.23 |
[Javascript] Function Declaration과 Function Expression의 차이 (0) | 2023.12.09 |
[Javascript] 브라우저 렌더링 과정 (0) | 2023.12.01 |