"좋아요 버튼 만들었는데, 새로고침하면 좋아요가 사라져요." "분명히 눌렀는데 왜 안 남아있는 거예요?"

이런 상황, 왜 생길까요?

버튼 누르면 하트가 빨갛게 바뀌는 건 화면에서 일어나는 일이에요. 근데 그 좋아요가 저장되려면 서버 어딘가에 기록돼야 해요.

AI한테 "좋아요 버튼 만들어줘"라고만 하면, 하트 색만 바뀌는 버튼을 만들 수도 있고, 서버 저장까지 하는 걸 만들 수도 있어요. 뭘 원하는지 구체적으로 말 안 하면 AI가 추측해요.


프론트엔드 vs 백엔드, 뭐가 다른가요?

웹 서비스는 크게 두 부분으로 나뉘어요.

🎨 프론트엔드 (Frontend)
   - 화면에 보이는 부분
   - 버튼, 입력창, 이미지, 애니메이션
   - 브라우저에서 돌아감

⚙️ 백엔드 (Backend)
   - 뒤에서 처리하는 부분
   - 데이터 저장, 인증, 계산
   - 서버에서 돌아감

유튜브로 예시 들어볼게요.

프론트엔드 (보이는 것) 백엔드 (안 보이는 처리)
영상 재생 화면 영상 파일 저장/전송
좋아요 버튼 (하트 색 바뀜) 좋아요 수 DB에 저장
댓글 입력창 댓글 저장, 불러오기
구독 버튼 구독자 수 계산

버튼을 누르면 프론트엔드가 "좋아요 눌렀어!"를 백엔드한테 알려줘요. 그럼 백엔드가 DB에 저장하고, 프론트엔드가 화면에 반영해요.


보이는 영역(프론트엔드) vs 처리하는 영역(백엔드) 보이는 영역(프론트엔드) vs 처리하는 영역(백엔드)

전체 구조

👤 사용자 (브라우저)
        ↕ 화면 보고, 버튼 누르고                                    

  🎨 프론트엔드                               
  - 화면 구성, 사용자 입력 받기                
  - Next.js (React 기반)                      

        ↕ 데이터 주고받기 (API)                                     

  ⚙️ 백엔드                                   
  - 데이터 저장, 인증, 비즈니스 로직           
  - Supabase                                 

        ↕ 데이터 저장/불러오기                                      

  💾 데이터베이스                             

전체 데이터 흐름: 유저 → 프론트엔드 → 백엔드 → DB 전체 데이터 흐름: 유저 → 프론트엔드 → 백엔드 → DB

잠깐, 저 용어들 뭔데요?

위 그림에 나온 기술 이름들, 지금 다 이해할 필요 없어요. 그냥 "아, 이런 게 있구나" 정도만 알면 돼요.

🎨 프론트엔드 기술들 (화면 만드는 도구)
├── HTML: 화면의 뼈대. "여기 버튼 넣어줘, 여기 글자 넣어줘"
├── CSS: 화면의 옷. "버튼 색깔 빨간색, 글자 크기 20px"
├── JavaScript: 화면의 두뇌. "버튼 누르면 이거 해라"
├── React: JavaScript를 편하게 쓰는 도구 (인기 많음)
└── Next.js: React를 더 편하게 쓰는 도구 (이 시리즈에서 사용)

⚙️ 백엔드 기술 (데이터 저장하는 도구)
└── Supabase: 백엔드를 통째로 빌려쓰는 서비스
              (DB + 로그인 + 파일저장 다 해줌. 바이브 코더 필수템)

🚀 배포 (만든 걸 인터넷에 올리는 도구)
└── Vercel: Next.js 만든 회사에서 운영하는 배포 서비스
            (GitHub 연결하면 자동으로 배포됨)

이 시리즈에서 쓰는 스택:

Next.js (프론트) + Supabase (백엔드) + Vercel (배포)

왜 이 조합이냐면요:

  • 레퍼런스가 많아요 → 그만큼 AI가 학습한 코드도 많아요
  • AI한테 "Next.js로 만들어줘" 하면 잘 알아듣고 잘 만들어줘요
  • 마이너한 기술 쓰면 AI가 헷갈려하거나 옛날 코드 뱉을 수 있어요

바이브 코더에게 중요한 건:

  • 이 용어들을 외울 필요 없어요
  • AI한테 "Next.js로 만들어줘"라고 말할 수 있으면 충분해요
  • 나중에 더 알고 싶으면 그때 검색하면 돼요

이 구조를 알면, 단계적으로 요청할 수 있어요:

1단계: 화면 먼저
나: "장바구니 페이지 만들어줘"
→ AI가 UI 만들어줌 (프론트엔드)

2단계: 확인
→ 화면 잘 나오나 확인

3단계: 백엔드 연결
나: "좋아, 이제 API로 연동해줘"
또는 "지금은 localStorage인데, DB에 저장하게 바꿔줘"
→ AI가 백엔드 연결해줌

잠깐, localStorage랑 DB가 뭔데요?

💾 데이터 저장 방식 2가지
├── localStorage (로컬 스토리지)
  - 내 브라우저에만 저장됨
  - 새로고침해도 남아있음
  - 근데 다른 기기에서는 안 보임
  - 예: 메모장에 혼자 적어둔 것

└── DB (데이터베이스)
    - 서버에 저장됨
    - 어디서든 접근 가능
    - 다른 사람도 같은 데이터 볼 수 있음
    - 예: 구글 드라이브에 올린 것

그래서 "localStorage인데 DB로 바꿔줘"는 **"지금 내 브라우저에만 저장되는데, 서버에 저장하게 해줘"**라는 뜻이에요.

실제로 이런 순서로 개발하기도 해요:

1단계: localStorage로 먼저 테스트
→ 화면이 잘 동작하는지 확인
→ 어떤 데이터를 저장해야 하는지 파악

2단계: 스키마 정리
→ "이 데이터는 이런 형태로 저장하자" 확정

3단계: DB로 마이그레이션
→ "이제 localStorage → DB로 바꿔줘"

스키마(Schema)가 뭐냐면요: 데이터를 어떤 형태로 저장할지 정해둔 틀이에요.

예: 할 일 목록의 스키마
├── id: 고유 번호
├── title: 할 일 내용
├── done: 완료 여부 (true/false)
└── created_at: 만든 날짜

처음부터 스키마를 완벽하게 정하기 어려워요. localStorage로 이것저것 테스트하다 보면 "아, 이 데이터도 필요하네" 하고 알게 돼요. 그때 DB로 옮기면 더 효율적이에요.


프론트만으로 뭘 만들 수 있나요?

화면에서 끝나는 건 가능해요.

✅ 프론트엔드만으로 OK
   - 계산기, 단위 변환기
   - 타이머, 스톱워치
   - 메모장 (단, 새로고침하면 사라짐)

❌ 백엔드 필요
   - 회원가입/로그인 → 사용자 정보 저장
   - 게시글 → 다른 사람도 봐야 함
   - 좋아요 수 → 모든 사람이 같은 숫자
   - 장바구니 → 다음에 와도 남아있어야 함

핵심:

  • 저장하거나 다른 사람도 봐야 하면 → 백엔드 필요
  • 나 혼자, 화면에서 끝나면 → 프론트만으로 가능

BaaS: 백엔드 빌려쓰기

백엔드를 직접 안 만들고, 이미 만들어진 걸 쓸 수 있어요.

💡 BaaS (Backend as a Service)
대표적인 BaaS:
- Supabase: DB + 인증 + 저장소 (바이브 코더 추천)
- Firebase: 구글에서 만든 BaaS
백엔드 직접 만들 때
 프론트 (내가 만듦) ↔ 백엔드 (내가 만듦) ↔ DB    
 BaaS 쓸 때                                     
 프론트 (내가 만듦) ↔ Supabase (이미 구현됨)     

바이브 코더 초보라면 BaaS부터 시작하세요.


실제 대화 예시: 할 일 관리 서비스

1단계: 구조 결정
 나: "할 일 관리 서비스 만들 건데,                                      
     프론트는 Next.js로, 백엔드는 Supabase 쓸 거야."                    

 AI: "Supabase 쓰면 백엔드 코드 거의 안 짜도 돼요.                      
     프론트에서 Supabase 클라이언트로 바로 DB 접근하면 됩니다."         

 나: "좋아. 프론트에서 어떻게 구성할지 추천해봐."                        

 AI: "프론트엔드 구조 제안드려요:                                       
     - 로그인 페이지 (Supabase Auth 연동)                             
     - 할 일 목록 페이지                                              
     - 할 일 추가 폼                                                  
     이렇게 3개 페이지로 구성하면 어떨까요?"                            

 나: "오케이, 그렇게 가자."                                            


 2단계: 화면 만들기 + 확인                                              

 나: "로그인 페이지부터 만들어줘.                                       
     이메일/비밀번호 입력창이랑 로그인 버튼 있어야 돼."                  

 AI: "Next.js로 로그인 폼 만들었어요. 확인해보세요."                    

 [기능 단위로 직접 확인]                                               
 - 이메일/비밀번호 입력 → 잘 됨                                        
 - 로그인 버튼 클릭 → 어? 에러 나네?                                   

 나: "로그인 버튼 누르니까 에러 나. 뭐가 문제야?"                        

 AI: "Supabase 환경변수 설정 확인해보세요."                             

 나: "아, 환경변수 설정 안 했네. 추가했어."                             

 [다시 확인] → 로그인 잘 됨!                                           


 3단계: 데이터 연결                                                     

 나: "할 일 목록 페이지 만들어줘.                                       
     Supabase DB에서 데이터 가져와서 보여주고,                         
     추가하면 DB에 저장하게 해줘."                                     

 AI: "할 일 목록 페이지 만들었어요. 확인해보세요."                       

 [기능 단위로 직접 확인]                                               
 - 할 일 목록 표시 → 잘 됨                                            
 - 할 일 추가 → 잘 됨                                                 
 - 삭제 → 잘 됨                                                       

 나: "완벽해!"                                                         

이게 기술적 대화예요.

  1. "프론트는 Next.js, 백엔드는 Supabase"
  2. "로그인 페이지 만들어줘"
  3. 기능 단위로 직접 확인
  4. 에러 나면 → "뭐가 문제야?"
  5. "할 일 목록 페이지 만들어줘. DB 연동해서"

프론트/백엔드 구분하고, 단계별로 확인하면서 대화하는 거예요.


오늘의 핵심 정리

✅ 웹 서비스 = 프론트엔드 + 백엔드
   → 프론트: 화면 (브라우저)
   → 백엔드: 처리/저장 (서버)

✅ 프론트만으로는 "화면에서 끝나는 것"만 가능
   → 저장하거나 공유해야 하면 → 백엔드 필요

✅ BaaS 쓰면 백엔드 직접 안 만들어도 됨
   → Supabase 추천

✅ AI한테는 단계적으로 요청
   1단계: "장바구니 페이지 만들어줘" (화면)
   2단계: 확인
   3단계: "API로 연동해줘" (백엔드 연결)

셀프체크

오늘 배운 내용, 제대로 이해했는지 확인해볼까요?

□ 로그인 화면의 디자인은 어디서 담당하나요?
□ 입력된 비밀번호가 맞는지 확인하는 건 어디서 하나요?
□ 우리 시리즈에서는 어떤 기술 스택을 쓰나요?

(정답: 프론트엔드 / 백엔드 / Next.js + Supabase + Vercel)

다음 글 예고

오늘은 프론트엔드와 백엔드를 배웠어요.

다음 글에서는 데이터는 어디에 저장되나를 알아볼게요.

"할 일 추가했는데, 새로고침하면 사라져요" → 이런 상황이 왜 생기는지, 어떻게 해결하는지 배워요.


이 시리즈 로드맵

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편 ] 에필로그

"좋아요 버튼 만들어줘"에서 "화면 먼저 → 확인 → DB 연동"으로. 이 흐름을 알면 AI한테 단계적으로 요청할 수 있어요.

궁금한 점이나 다뤘으면 하는 주제가 있으면 댓글로 남겨주세요!