41강에서는 로그인 시 발급받은 apiKey를 어디에 저장해야 하는지를 다룬다.
결론부터 말하면, 브라우저 로컬 스토리지(LocalStorage) 를 사용한다.
서버는 모든 요청마다 이렇게 묻는다.
“이 요청을 보낸 사람이 누구냐?”
그래서 클라이언트는 모든 API 요청마다 인증 정보(apiKey) 를 함께 보내야 한다.
const response = await fetch("http://localhost:8080/api/v1/posts/1");
위 요청은 인증 정보가 없다.
const response = await fetch("http://localhost:8080/api/v1/posts/1", {
headers: {
Authorization: `Bearer ${apiKey}`
}
});
이제 서버는 이렇게 판단할 수 있다.
👉 인증 정보는 모든 요청에 포함되어야 한다.
let apiKey = "abcd-1234";
이 방식의 문제점은 명확하다.
👉 즉,
로그인 상태가 유지되지 않는다.
console.clear();
let age = 0;
setInterval(() => {
age++;
console.log(`age : ${age}`);
}, 1000);
age 다시 0부터 시작console.clear();
let age = parseInt(localStorage.getItem("age") ?? 0);
setInterval(() => {
age++;
localStorage.setItem("age", age);
console.log(`age : ${age}`);
}, 1000);
이제 달라진 점:
👉 브라우저에 영구 저장
예시:
age = 37페이지를 새로고침해도
콘솔에는 37부터 다시 시작된다.
로그인 성공 시:
localStorage.setItem("apiKey", apiKey);
이렇게 저장해두면:
const apiKey = localStorage.getItem("apiKey");
const response = await fetch("http://localhost:8080/api/v1/posts/1", {
headers: {
Authorization: `Bearer ${apiKey}`
}
});
👉 모든 인증이 필요한 요청에서 동일하게 사용 가능
| 방식 | 특징 |
|---|---|
| 쿠키 | 자동 전송 가능, 설정 복잡 |
| 로컬 스토리지 | 직접 관리, 구조 단순 |
| 일반 변수 | 새로고침 시 데이터 유실 |
이번 강의에서는 구조를 이해하기 쉽도록 로컬 스토리지를 선택한다.
이번 강의의 핵심은 이 문장이다.
“로그인 정보는 서버가 아니라,
브라우저가 기억해야 한다.”