[Next.js] 쿠키의 개념과 next-cookies에 대해 알아보자
쿠키의 개념과 Next.js에서 쿠키를 관리하는 방법을 알아보자
이번 글을 통해 쿠키의 개념과 Next.js에서 쿠키를 어떻게 사용하는지 알아보자!
쿠키의 기본 개념
쿠키(Cookie)
는 웹 애플리케이션에서 흔히 사용되는 상태 관리 방법 중 하나로, 서버에서 생성하여 클라이언트에 저장한다. 이후 클라이언트는 이 쿠키를 통해 서버에 다시 요청을 보낼 때 추가적인 정보를 전달할 수 있다.
1-1) 쿠키의 주요 특징
-
작은 용량
- 일반적으로 4KB 이하로 제한된다.
-
만료기간
- 쿠키는 설정된 만료 시간 이후 자동으로 삭제된다.
-
도메인 기반 저장
- 쿠키는 특정 도메인에 한해 저장되며, 해당 도메인에서만 접근이 가능하다.
1-2) 쿠키의 용도
쿠키는 여러 목적으로 사용되며, 대표적인 용도는 다음과 같다.
-
사용자 인증
- 로그인 후 세션 정보를 저장하여, 이후 요청 시 인증 상태를 유지한다.
-
사용자 설정 저장
- 다크 모드 설정이나 언어 설정과 같은 사용자 맞춤형 옵션을 저장할 수 있다.
-
세션 유지
- 새로고침 후에도 사용자의 상태 정보를 유지하여 지속적인 사용자 경험을 제공한다.
next-cookies
Next.js에서는 cookies
함수를 사용하여 쿠키를 관리할 수 있다. 쿠키 관리기능은 아래와 같다.
-
쿠키 읽기
: 특정 쿠키를 가져오거나 모든 쿠키를 가져올 수 있음 -
쿠키 존재 여부 확인
: 쿠키의 존재 여부를 확인할 수 있음 -
쿠키 설정
: 새로운 쿠키를 설정하거나 기존 쿠키를 업데이트할 수 있음 -
쿠키 삭제
: 쿠키를 삭제할 수 있는 여러가지 방법을 제공함
2-1) 특정 쿠키 읽기
cookies().get(name)
메서드를 사용하여 특정 이름의 쿠키를 가져올 수 있음
- 만약 쿠키가 없으면
undefined
를 반환함
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const theme = cookieStore.get('theme')
return '...'
}
2-2) 모든 쿠키 읽기
cookies().getAll()
메서드를 사용하여 모든 쿠키를 배열 형태로 가져올 수 있음
- 특정 이름의 쿠키만 가져오려면 이름을 지정할 수도 있음
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
return cookieStore.getAll().map((cookie) => (
<div key={cookie.name}>
<p>Name: {cookie.name}</p>
<p>Value: {cookie.value}</p>
</div>
))
}
2-3) 쿠키 존재 여부 확인
cookies().has(name)
메서드를 사용하여 특정 쿠키가 존재하는지 여부를 확인할 수 있음
import { cookies } from 'next/headers'
export default function Page() {
const cookieStore = cookies()
const hasCookie = cookieStore.has('theme')
return '...'
}
2-4) 쿠키 설정
cookies().set(name, value, options)
메서드를 사용하여 새로운 쿠키를 설정하거나 기존 쿠키를 업데이트할 수 있음.
- 이 메서드는 서버 액션이나 라우트 핸들러에서만 사용할 수 있음
'use server'
import { cookies } from 'next/headers'
async function create(data) {
cookies().set('name', 'lee')
// or
cookies().set('name', 'lee', { secure: true })
// or
cookies().set({
name: 'name',
value: 'lee',
httpOnly: true,
path: '/',
})
}
2-4) 쿠키 삭제
쿠키를 삭제하는 방법은 여러가지가 있다.
- 명시적 삭제
- 빈 값 설정
- 만료 시간 설정
'use server'
import { cookies } from 'next/headers'
// 명시적 삭제
async function delete1(data) {
cookies().delete('name')
}
// 빈 값 설정
async function delete2(data) {
cookies().delete('name', '')
}
// 만료 시간 설정: maxAge:0 => 즉시 만료
async function delete3(data) {
cookies().set('name', 'value', { maxAge: 0 })
}
SSR과 CSR에서의 쿠키 관리 차이점
Next.js는 서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)을 모두 지원하므로, 두 방식에서 쿠키를 처리하는 방법에 차이가 있다.
3-1) SSR (서버 사이드 렌더링)
서버에서 쿠키를 처리하며, getServerSideProps 또는 API 라우트에서 쿠키를 읽거나 설정할 수 있다.
3-2) CSR (클라이언트 사이드 렌더링)
클라이언트에서 직접 쿠키를 읽고 설정할 수 있으며, 브라우저의 document.cookie를 통해 접근한다.
마무리
쿠키의 기본 개념부터 Next.js에서 쿠키를 설정하고 관리하는 방법까지 알아보았다. Next.js에서 쿠키를 활용하여 인증, 사용자 맞춤 설정, 세션 관리 등을 구현하는데 유용하게 적용할 수 있을 것 같다.