"할 일 추가했는데, 새로고침하면 사라져요." "분명히 저장했는데 왜 안 남아있는 거예요?"
11편에서 프론트엔드와 백엔드를 배웠으니 이제 만들 수 있을 것 같은데, 막상 만들어보면 "어? 왜 새로고침하면 다 날아가지?"가 되는 거예요.
저장한다는 게, 생각보다 여러 곳에서 일어나요. 어디에 저장하느냐에 따라 "새로고침하면 사라지냐, 남느냐"가 달라져요.
저장소 3가지

💡 복습: localStorage는 11편에서 배웠죠? "메모장에 혼자 적어둔 것"이에요.
1️⃣ 메모리: 새로고침하면 사라짐
메모리는 프로그램이 돌아가는 동안만 유지돼요.
카카오톡 대화 입력창에 "안녕" 쓰다가
→ 전송 안 하고 앱 종료
→ 다시 켜면? "안녕"은 사라짐
드롭다운이 열렸는지, 모달창이 떠 있는지 같은 건 저장할 필요 없죠. 이런 "지금 화면이 어떤 상태인가"를 프로그래밍에서는 State라고 불러요.
2️⃣ localStorage: 내 브라우저에만 남음
11편에서 배웠듯이, localStorage는 "메모장에 혼자 적어둔 것"과 같아요. 새로고침해도 남아있지만, 다른 기기에서는 안 보여요.
localStorage 외에도 비슷한 게 있어요 (지금은 몰라도 돼요): - sessionStorage: 탭 닫으면 사라짐 - Cookie: 서버랑 주고받을 때 사용 이 시리즈에서는 localStorage만 쓸 거예요.
3️⃣ DB: 영구 저장, 공유 가능
서버에 있는 데이터베이스(DB)에 저장하면 어디서든 접근 가능해요. 다른 기기, 다른 사람도 볼 수 있어요.
DB는 엑셀 같은 표(테이블) 형태예요.
| id | user_id | title | done | created_at |
|---|---|---|---|---|
| 1 | 1 | 블로그 글쓰기 | false | 2026-01-10 09:00 |
| 2 | 1 | 운동하기 | true | 2026-01-10 09:05 |
| 3 | 2 | 회의 준비 | false | 2026-01-10 10:00 |
어디에 저장할지 판단하기
다른 사람도 봐야 함? → DB 다른 기기에서도 봐야 함? → DB 나만 보는 설정? → localStorage 임시 데이터? → 메모리
예시로 보면:
| 기능 | 저장 위치 | 이유 |
|---|---|---|
| 게시글 | DB | 다른 사람도 봐야 함 |
| 좋아요 수 | DB | 모든 사람이 같은 숫자 |
| 다크모드 설정 | localStorage | 내 선호도 |
| 로그인 전 장바구니 | localStorage | 임시 저장 |
| 입력창 내용 | 메모리 | 저장 필요 없음 |
실제 대화 예시: 할 일 관리 서비스
나: "할 일 관리 서비스 만들 건데,
할 일 데이터는 DB에 저장해야 돼.
Supabase에 todos 테이블 설계해줘."
AI: "todos 테이블 설계 제안드려요:
- id (고유 번호)
- user_id (누구의 할 일인지)
- title (할 일 내용)
- done (완료 여부)
- created_at (생성 시간)"
나: "좋아. 그렇게 만들어줘."
2단계: 기능 만들고 확인하기
나: "할 일 추가하면 todos 테이블에 저장하고,
화면 로드할 때 불러와서 보여줘."
AI: "할 일 추가/불러오기 기능 만들었어요."
[기능 단위로 직접 확인]
- 할 일 추가 → DB에 저장됨 ✓
- 새로고침 → 그대로 남아있음 ✓
- 다른 브라우저에서 로그인 → 똑같이 보임 ✓
3단계: 다크모드 추가
나: "다크모드 토글도 만들어줘."
AI: "다크모드 토글 만들었어요."
[기능 단위로 직접 확인]
- 다크모드 켜기 → 화면 어두워짐 ✓
- 새로고침 → 유지됨 ✓
- 다른 기기에서 로그인 → 어? 기본 모드네?
나: "다른 기기에서 다크모드 안 되는데?"
AI: "다크모드 설정은 localStorage에 저장했어요.
localStorage는 브라우저별로 따로 저장돼서 그래요.
DB에 저장하면 기기 간 동기화 가능해요."
나: "아, 그렇구나. 다크모드는 기기별로 달라도 돼. 그대로 둬."
💡 이렇게 확인하다 보면 자연스럽게 알게 돼요:
"아, localStorage는 브라우저별이구나"
"동기화 필요하면 DB에 저장해야 하는구나" 이게 바이브 코딩이에요.
- 일단 시킨다
- 확인한다
- 문제 있으면 다시 프롬프트
- 잘 안 풀리면 그때 기술적으로 들어간다
"왜 안 돼?!" → 화냄 → AI 탓 → 다른 모델로 바꿈 → 또 안 됨
이 시리즈는 이걸 바꾸려는 거예요. 저장소 3가지를 알면 "다른 기기에서 안 되네?" → "아, localStorage니까 그렇구나" → 논리적으로 이해할 수 있어요.
AI한테 요청하는 패턴
❌ 막연하게
"장바구니 담기 기능 만들어줘"
✅ 구체적으로
"장바구니 담기 만들어줘.
로그인 전이면 localStorage에,
로그인 후면 cart 테이블에 user_id랑 같이 저장해줘."오늘의 핵심 정리
1️⃣ 메모리 → 새로고침하면 사라짐 2️⃣ localStorage → 내 브라우저에만 3️⃣ DB → 영구 저장, 공유 가능 ✅ 판단 기준 다른 사람/기기에서 봐야 함? → DB 나만 보는 설정? → localStorage ✅ AI한테 요청할 때 "뭘 만들지 + 어디에 저장할지 + 필드는 뭔지"
셀프체크
오늘 배운 내용, 제대로 이해했는지 확인해볼까요?
□ 게시글 데이터는 어디에 저장해야 하나요?
□ 다크모드 설정은 어디에 저장하는 게 좋을까요?
□ 드롭다운 메뉴가 열렸는지 닫혔는지는 어디에 저장하나요?
□ AI에게 유저 정보를 저장해달라고 할 때 정확한 표현은?
(정답: DB - 공유 필요 / localStorage - 개인 설정 / 메모리 State - 휘발성 OK / DB의 users 테이블에 저장해줘)
다음 글 예고
오늘은 데이터를 어디에 저장하는지 배웠어요.
다음 글에서는 서비스들이 대화하는 방법: API를 알아볼게요.
"프론트엔드가 백엔드한테 어떻게 데이터를 요청하는 거예요?" → API라는 게 뭔지, 어떻게 요청하는지 배워요.
이 시리즈 로드맵
PART 1: 마인드셋 (1~4편)
"AI를 부리는 마음가짐"
[ 1편 ] AI는 유능한 신입사원이다 ✅
[ 2편 ] 바이브 코딩이란 무엇인가 ✅
[ 3편 ] 바이브 코더가 알아야 할 것 ✅
[ 4편 ] 목표 수준: 유능한 상사 되기 ✅
↓
PART 2: 도구 세팅 (5~9편)
"일단 만들어보기"
[ 5편 ] 필수 도구 설치 ✅
[ 6편 ] 코드 에디터 세팅 ✅
[ 7편 ] 터미널 기초 ✅
[ 8편 ] Git & GitHub 기초 ✅
[ 9편 ] AI 코딩 도구 세팅 ✅
↓
PART 3: 기술 개념 - 큰 그림 (10~15편)
"전체 구조 이해하기"
[ 10편 ] 프로그램의 종류 ✅
[ 11편 ] 프론트엔드 vs 백엔드 ✅
[ 12편 ] 데이터는 어디에 저장되나 👈 지금 여기
[ 13편 ] 서비스들이 대화하는 방법: API
[ 14편 ] 프로젝트 구조
[ 15편 ] 데이터 흐름
↓
PART 4: 기술 개념 - 실무 용어 (16~20편)
"AI와 대화할 때 쓰는 용어"
[ 16편 ] 컴포넌트와 페이지
[ 17편 ] 상태(state)란 무엇인가
[ 18편 ] 에러 읽는 법
[ 19편 ] 타입과 린트
[ 20편 ] 디버깅 기초
↓
PART 5: 실전 - 프론트엔드 (21~24편)
"화면 만들기"
[ 21편 ] Next.js 프로젝트 시작
[ 22편 ] 첫 화면 만들기
[ 23편 ] 컴포넌트 분리와 스타일링
[ 24편 ] 사용자 입력 처리
↓
PART 6: 실전 - 백엔드 연동 (25~28편)
"데이터 저장하기"
[ 25편 ] Supabase 세팅
[ 26편 ] DB 테이블 만들기
[ 27편 ] CRUD 구현
[ 28편 ] 인증(로그인) 붙이기
↓
PART 7: 실전 - 배포 (29~31편)
"세상에 공개하기"
[ 29편 ] Vercel 배포
[ 30편 ] 환경변수 관리
[ 31편 ] 도메인 연결
↓
PART 8: 독립 성장 (32~35편)
"혼자서도 성장하기"
[ 32편 ] 에러 해결 루틴
[ 33편 ] 공식 문서 읽는 법
[ 34편 ] 바이브 코더 성장 로드맵
[ 35편 ] 에필로그
"저장해줘"에서 "todos 테이블에 user_id랑 같이 저장해줘"로. 어디에 저장하는지 명확히 지시하면 AI가 정확히 구현해요.
궁금한 점이나 다뤘으면 하는 주제가 있으면 댓글로 남겨주세요!