🎯 이 실습의 목표

오늘 배우는 것: DB의 핵심 동작(INSERT / SELECT / UPDATE), 테이블 설계, RLS, 그리고 "AI로 직접 도구를 만든다"는 경험.

코드를 처음부터 만들지 않고, 이미 완성된 WOWVote 코드를 받아서 본인의 Supabase에 연결해보는 실습이에요. 셋업·연결 과정 자체가 진짜 학습 자산입니다.

📦 GitHub 레포

⭐ WOWVote 코드 받는 곳

https://github.com/TeddyChoi-wow/WOWVote

이 레포 안에 모든 가이드 문서가 함께 들어있습니다. Clone 후 SUPABASE_SETUP.mdWORKSHOP_GUIDE.md를 따라가세요.


🌟 WOWVote가 뭔가요?

WOWVote는 세미나·포럼·시민 워크숍을 위한 익명 Q&A 도구입니다. WOWD.LAB이 만들었고, 누구나 본인 환경에 배포해서 무료로 쓸 수 있어요.

핵심 기능
QR로 익명 질문 받기
청중이 QR 스캔하면 즉시 질문 작성 가능. 이름은 선택.
차별화
질문 추천 (좋아요)
청중이 좋은 질문에 좋아요 → 자연스럽게 상위 정렬. Slido의 핵심 기능.
💡 왜 이걸로 DB 실습을?

WOWVote는 DB의 핵심 동작 3가지를 모두 경험할 수 있습니다:

  • INSERT — 새 질문 작성 시 DB에 저장
  • SELECT — 질문 목록 조회 + 좋아요 순 정렬
  • UPDATE — 좋아요 클릭 시 카운트 증가

익명 질문함만 만들어도 DB의 3가지 핵심 동작을 다 익힐 수 있어요.


💭 잠깐 — 왜 DB(데이터베이스)가 필요한가요?

📚 비유로 이해하기

DB가 없으면 우리 앱은 "기억상실증 환자"입니다. 누가 무슨 말을 했는지, 어떤 데이터가 있었는지 새로고침 한 번에 다 사라져요.

DB는 그 앱에 "기억"을 달아주는 것입니다. 사용자가 적은 글, 만든 데이터, 누른 좋아요... 모두 저장되어서 다음에 다시 와도 그대로 있어요.

DB 없는 앱 vs DB 있는 앱

DB 없음 DB 있음 (Supabase)
새로고침 데이터 사라짐 그대로 남아있음
여러 사람 사용 각자 따로 데이터, 공유 불가 모두 같은 데이터를 봄
예시 앱 계산기, 단순 변환기 Q&A, 게시판, 회원 관리

📋 실습 진행 순서 — 한눈에

🗺️ 전체 흐름

1) git clone → 코드 내려받기
2) Supabase 셋업 → 내 DB 만들기
3) config.js 만들기 → 내 키 연결하기
4) 실행 → npx serve .
5) 동작 확인 → 질문 / 좋아요 / 발표자 뷰

핵심 개념 한 줄: 코드는 모두 공통, DB와 키는 "1인 1개".
옆 사람과 질문이 안 섞이는 게 정상이에요. (각자 자기 Supabase를 쓰니까)


🚀 0. 시작 전 준비물

아래 4가지는 실습 시작 전에 미리 깔고 가입해 두세요. 현장에서 설치하면 시간이 많이 듭니다.

실습 전 준비 체크 0 / 4 완료
GitHub 계정github.com 가입
VS Codecode.visualstudio.com 설치
Node.jsnodejs.org LTS 버전 설치 (npx 명령에 필요)
Supabase 계정supabase.com 가입 (GitHub로 로그인 추천)
✅ 확인

터미널에 node -v 쳤을 때 버전 숫자가 나오면 준비 완료.


📌 Step 1. 코드 내려받기 (5분)

⚠️ 처음 해보는 분 펼치기 — 터미널 / cd / 폴더 찾기

🤔 "터미널이 뭐예요? 어디서 열어요?"

터미널은 컴퓨터에 명령어를 입력하는 창입니다. 검은색 또는 흰색 글자만 있는 화면이에요.

  • Windows: 시작 → "Git Bash" 검색 → 실행 (Git for Windows 설치되어 있어야 함)
  • Mac: Cmd + Space → "터미널" 검색 → 엔터
  • 가장 편한 방법: VS Code 안에서 터미널 열기 → 상단 메뉴 Terminal → New Terminal

🤔 "cd가 뭐예요?"

cd는 "Change Directory" — 폴더를 이동하는 명령어입니다.

  • cd WOWVote — 현재 위치의 WOWVote 폴더로 들어가기
  • cd .. — 부모 폴더로 한 단계 올라가기
  • pwd — 지금 내가 어디 있는지 확인 (Mac/Linux)

🤔 "GitHub Desktop으로 클론했는데 그 폴더로 가는 법?"

GitHub Desktop은 보통 Documents/GitHub/WOWVote에 저장합니다.

가장 쉬운 방법: GitHub Desktop 화면 상단 메뉴 Repository → Open in Terminal 또는 Open in Visual Studio Code 클릭. 자동으로 그 폴더에서 터미널이 열림.

🤔 "터미널에서 명령어 쳤는데 에러가 나요"

  • command not found → 도구가 설치 안 됐거나, 다른 터미널이 필요 (Windows는 Git Bash 사용)
  • No such file or directory → 지금 폴더에 그 파일이 없음. ls로 확인
  • Permission denied → 권한 문제. Mac은 sudo는 쓰지 말고 강사 호출
💡 막혔을 때 만능 한 마디

Claude에게 솔직하게:

터미널을 처음 써봐서 잘 몰라. 지금 [어떤 상황]인데 어떻게 해야 해? 화면에 뭐가 보이는지 그대로 설명할게: [화면 상태 그대로 적기]
Step 1 상세 가이드 펼치기

방법 A. 터미널 (Git Bash 또는 Terminal)

git clone https://github.com/TeddyChoi-wow/WOWVote.git cd WOWVote

방법 B. GitHub Desktop (클릭만)

  1. 브라우저에서 github.com/TeddyChoi-wow/WOWVote 열기
  2. 오른쪽 위 초록 버튼 "Code" 클릭
  3. 드롭다운에서 "Open with GitHub Desktop" 클릭
  4. GitHub Desktop이 자동으로 열림 → "Clone" 클릭
  5. 저장 위치 확인 → "Clone"

받은 후 — VS Code에서 열기

  1. VS Code 실행 → File → Open Folder
  2. 방금 받은 WOWVote 폴더 선택
  3. 좌측 파일 탐색기에서 다음이 보이면 OK:
    • index.html, present.html — 페이지 파일
    • supabase-schema.sql — DB 셋업용 SQL ⭐
    • SUPABASE_SETUP.md — 클릭 위치까지 짚어주는 셋업 가이드 ⭐
    • WORKSHOP_GUIDE.md — 워크숍 진행 가이드
    • js/config.example.js — 키 설정 템플릿
✅ Step 1 완료

VS Code에 WOWVote 폴더가 열려 있고, 좌측 탐색기에서 위 파일들이 보이면 OK!


📌 Step 2. 내 Supabase 만들기 (15~20분)

📖 자세한 가이드는 레포 안에

WOWVote 레포의 SUPABASE_SETUP.md 파일에 클릭 위치까지 짚어주는 6단계 가이드가 있습니다. VS Code에서 열어서 그대로 따라가세요.

아래는 핵심 흐름만 요약한 것입니다.

⚠️ 처음 해보는 분 펼치기 — Supabase UI / 키 복사 / SQL Editor

🤔 "Supabase 화면이 가이드 설명과 좀 달라요"

Supabase가 UI를 자주 업데이트해서 메뉴 위치가 살짝 다를 수 있어요. 핵심 메뉴 4개의 아이콘 모양으로 찾는 게 더 안전합니다:

  • SQL Editor: </> 아이콘 (꺾쇠 두 개)
  • Table Editor: 표 또는 격자 아이콘
  • Settings: 톱니바퀴(⚙️) 아이콘 — 보통 사이드바 맨 아래
  • API: Settings 안의 하위 메뉴 (열쇠 아이콘일 수도)

🤔 "프로젝트가 'Provisioning' 상태에서 안 끝나요"

처음 만들 때 2~3분 걸립니다. 5분 이상 안 끝나면 페이지 새로고침. 그래도 안 되면 새 프로젝트 생성.

🤔 "키 복사가 잘 안 돼요 / 키가 너무 길어요"

anon public 키는 매우 깁니다 (보통 200자 이상, eyJhbGc...로 시작). 복사할 때 함정:

  • 드래그로 선택하면 앞·뒤가 잘릴 수 있음 → 화면의 "Copy" 버튼을 꼭 사용
  • 붙여넣은 후 앞·뒤 공백·줄바꿈 확인 (있으면 인식 안 됨)
  • 키에 점(.)이 중간에 2~3번 있는 게 정상 — 지우지 마세요

🤔 "SQL 실행했더니 에러가 빨갛게 떠요"

흔한 원인:

  • "relation already exists" → 이미 한 번 실행됐음. 무시 OK, 또는 테이블 삭제 후 재실행
  • "syntax error" → 복사할 때 일부가 빠짐. supabase-schema.sql 전체 다시 복사
  • "permission denied" → 프로젝트 준비가 안 끝남. 5분 더 기다리기
💡 막혔을 때 만능 한 마디

스크린샷보다 정확하게 — Claude에게:

Supabase에서 [어떤 단계]를 하고 있어. 지금 화면에 이렇게 보여: [화면에 보이는 내용 그대로 적기] 어떻게 진행해야 해?
2-1. 회원가입 & 프로젝트 만들기
  1. supabase.com 접속 → 우측 상단 "Start your project" 클릭
  2. "Sign in with GitHub" 추천 (계정 통합)
  3. 대시보드에서 "New project" 클릭

    ※ 처음이면 먼저 Organization 만들기 → 이름 아무거나 (예: wowdlab), Plan은 Free

  4. 프로젝트 정보 입력:
    • Name: wowvote
    • Database Password: 자동 생성된 값 옆 Copy 눌러서 어딘가 메모 (다시 못 봐요)
    • Region: Northeast Asia (Seoul)
  5. "Create new project" → 2~3분 대기
2-2. 스키마 실행 — 핵심 단계 ⭐

이 단계가 DB 학습의 핵심입니다. SQL을 직접 실행해서 테이블·정책을 만듭니다.

  1. Supabase 왼쪽 메뉴에서 "SQL Editor" 클릭 (</> 아이콘)
  2. "+ New query" 클릭
  3. VS Code에서 supabase-schema.sql 파일 열기 → 전체 선택(Cmd/Ctrl+A) → 복사(Cmd/Ctrl+C)
  4. Supabase 편집창에 붙여넣기(Cmd/Ctrl+V)
  5. 오른쪽 아래 "Run" 버튼 클릭 (또는 Cmd/Ctrl+Enter)
  6. 아래에 Success. No rows returned 같은 초록 메시지가 뜨면 성공! ✅
💭 지금 무슨 일이?

SQL이 실행되면서 3개 테이블(sessions/questions/likes) + 인덱스 + 기본 세션 1개 + RLS 정책 6개가 한 번에 만들어졌습니다. 이게 "스키마 정의"의 힘이에요.

⚠️ 빨간 에러 뜨면

메시지 전체를 그대로 복사해서 Claude에게 붙여넣어 주세요. 바로 원인 잡아줍니다.

2-3. 제대로 됐는지 확인 (1분)

같은 SQL Editor에서 새 쿼리에 이거 한 줄 넣고 Run:

SELECT * FROM sessions;

→ 아래에 1줄이 나오고 code 칸에 default, title"WOWVote 기본 세션"이 보이면 완벽해요.

추가로 정책이 다 들어갔는지 보려면:

SELECT * FROM pg_policies WHERE schemaname = 'public';

→ 정책 6개가 보이면 OK.

2-4. 키 2개 복사하기
  1. 왼쪽 세로 메뉴 맨 아래 "Settings" (⚙️ 톱니바퀴) 클릭
  2. 설정 하위 메뉴에서 "API" 클릭
  3. 이 화면에서 두 가지를 복사:
    • Project URL (맨 위, https://....supabase.co 형태) → 옆 Copy
    • Project API keys 섹션의 anon public 키 → 옆 Copy
🔐 service_role 키는 절대 사용 금지

같은 화면에 service_role 키도 보이지만, 그건 절대 클라이언트 코드에 넣지 마세요. 우리는 anon public 키만 사용합니다.


📌 Step 3. 내 키 연결하기 (config.js, 5분)

⚠️ 처음 해보는 분 펼치기 — cp 명령어 / 파일 안 보일 때 / 따옴표

🤔 "cp가 뭐예요?"

cp는 "Copy" — 파일 복사 명령어입니다.

cp js/config.example.js js/config.js

위 명령은 js/config.example.js 파일을 복사해서 js/config.js라는 새 파일을 만들어요. 원본은 그대로 두고요.

💡 명령어 대신 마우스로 하기:

  1. VS Code 좌측 탐색기에서 js/config.example.js 마우스 우클릭 → "Copy"
  2. js/ 폴더 우클릭 → "Paste"
  3. 복사된 파일 우클릭 → "Rename"config.js로 변경

🤔 "VS Code에서 config.js가 회색으로 흐릿하게 보여요"

정상입니다. config.js.gitignore에 등록되어 있어서 git이 무시하는 파일이에요. 그래서 VS Code 탐색기에서:

  • 회색·흐릿하게 표시 — 정상 (git이 추적 안 함)
  • 옆에 'I' 표시 — Ignored (무시) 의미

이게 정상이에요. 파일이 사라진 게 아닙니다. 클릭하면 정상적으로 열려요.

🤔 "config.js가 아예 안 보여요"

  • VS Code 좌측 탐색기 새로고침: 폴더 옆 새로고침 아이콘 클릭
  • 파일이 진짜 안 만들어진 거라면 cp 명령어 다시 실행
  • 혹시 다른 폴더에 만들어졌나 — js/ 폴더 안에 있는지 확인 (루트 아님)

🤔 "키 붙여넣었는데 따옴표가 이상해 보여요"

가장 흔한 함정입니다. 두 종류의 따옴표가 있어요:

  • 일반 따옴표: " ' — 코드에서 사용 OK ✅
  • 스마트(곱슬) 따옴표: " " ' ' — 코드에서 안 됨 ❌

스마트 따옴표는 워드 같은 곳에서 자동 변환되는 모양이에요. VS Code에서는 그대로 입력하면 일반 따옴표가 나오니까 걱정 마세요. 다만 다른 곳에서 복사해 왔다면 확인:

  • 의심되면 따옴표 부분만 직접 다시 타이핑
  • 또는 VS Code에서 Ctrl+H (찾아 바꾸기)로 ""로 교체

🤔 "키에 공백·줄바꿈이 끼었어요"

붙여넣을 때 의도치 않게 들어갈 수 있어요. 확인 방법:

SUPABASE_ANON_KEY: "eyJhbGc...",

키 시작 따옴표 바로 옆에 키 문자가 붙어있어야 해요. 사이에 빈칸·줄바꿈 있으면 제거.

✅ 올바른 모양 예시
window.WOWVOTE_CONFIG = { SUPABASE_URL: "https://abcdefgh.supabase.co", SUPABASE_ANON_KEY: "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...", DEFAULT_SESSION_CODE: "default", };
  • 각 값이 따옴표 안에 있음
  • 값 뒤에 쉼표(,)가 있음
  • URL은 https://로 시작, .supabase.co로 끝
Step 3 상세 가이드 펼치기

VS Code의 터미널(또는 시스템 터미널)을 열어서:

cp js/config.example.js js/config.js

그다음 js/config.js 파일을 VS Code에서 열어 복사한 값을 채워주세요:

window.WOWVOTE_CONFIG = { SUPABASE_URL: "https://여기에-본인-URL.supabase.co", SUPABASE_ANON_KEY: "여기에-anon-public-키", DEFAULT_SESSION_CODE: "default", };
⚠️ 보안 주의
  • js/config.js.gitignore에 포함되어 git에 올라가지 않습니다
  • anon public 키만 사용하세요. service_role 키는 절대 넣지 마세요

📌 Step 4. 실행 & 동작 확인 (10분)

⚠️ 처음 해보는 분 펼치기 — npx / 콘솔 / "에러도 없는데 안 돼요"

🤔 "npx serve . 했더니 뭐가 잔뜩 나와요"

정상이에요. npx는 Node.js 도구 실행 명령어입니다. 처음 쓰면 자동으로 다운로드해서 살짝 오래 걸려요.

정상 출력 예시:

Serving! Local: http://localhost:3000 Network: http://192.168.0.5:3000

이런 게 나오면 성공. 이 창은 그대로 켜두세요 (닫으면 사이트도 같이 꺼짐).

🤔 "터미널을 끄면 어떻게 되나요?"

사이트가 멈춥니다. 워크숍 동안엔 터미널 창을 그대로 켜두세요. 다 끝나면 터미널 창에서 Ctrl+C로 멈출 수 있어요.

🤔 "주소를 어디에 입력해요?"

크롬·사파리·엣지 같은 브라우저의 주소창http://localhost:3000 입력 후 엔터.

🤔 "화면 떴는데 질문 작성이 안 돼요. 에러도 없어요"

가장 어려운 상황입니다. 브라우저 콘솔을 봐야 해요.

  1. 브라우저에서 F12 누르기 (Mac: Cmd + Option + I)
  2. 상단 탭에서 "Console" 클릭
  3. 빨간 글씨(에러)가 있는지 확인
  4. 빨간 글씨 있으면 → 그대로 복사해서 Claude에게

이게 진짜 중요해요. "에러 없는 것 같은데"라고 느껴도 콘솔에 거의 항상 단서가 있어요.

🤔 "콘솔에 뭐가 너무 많아요. 어디가 에러예요?"

  • 빨간색: 에러 (Error) — 이게 문제
  • 노란색: 경고 (Warning) — 보통 무시 OK
  • 회색·흰색: 일반 로그 — 무시 OK

빨간 글씨만 골라서 보세요. 보통 1~3줄 정도예요.

🤔 "WOWVOTE_CONFIG 미설정 알림이 떠요"

가장 흔한 시작 에러입니다. 원인 3가지:

  1. js/config.js 파일을 안 만들었음 → Step 3 다시
  2. 파일은 만들었는데 키가 비어있음 (예시 그대로 둠) → 본인 키로 교체
  3. 파일을 다른 폴더에 만들었음 → 반드시 js/ 폴더 안에 있어야 함

🤔 "기본 세션을 찾지 못했어요 에러"

Supabase 스키마 실행이 안 됐거나 일부만 실행된 경우.

  1. Supabase SQL Editor 열기
  2. SELECT * FROM sessions; 실행
  3. 결과가 비어있음 → supabase-schema.sql 다시 전체 복사·실행

🤔 "동작은 안 하는데 에러도 없어요"

가장 막막한 상황. 진단 순서:

  1. config.js 다시 확인 — URL과 키가 정확한지, 따옴표·쉼표 모양 OK인지
  2. 브라우저 콘솔 F12 — 정말 에러가 없는지 한 번 더
  3. Supabase 대시보드 — Table Editor에서 데이터가 실제 들어가는지 확인
  4. 시크릿 모드로 다시 열기 — 캐시 문제 가능성
  5. 여기까지 다 했는데도 안 되면 강사 호출
💡 만능 진단 프롬프트

Claude에게:

WOWVote를 실행했는데 [어떤 동작]이 안 돼. 내가 한 것: - supabase-schema.sql 실행 완료 - config.js 파일에 키 넣음 - npx serve로 사이트 띄움 브라우저 콘솔(F12)에 뜬 에러: [빨간 글씨 그대로 복사] 또는 에러는 없지만 [어떤 화면 상태]야. 원인 분석하고 해결책 알려줘.
4-1. 실행하기

정적 사이트라 빌드 없이 바로 실행됩니다.

방법 A. 터미널 명령어 (추천)

npx serve .

터미널에 뜬 주소(예: http://localhost:3000)를 브라우저에서 열기.

방법 B. VS Code Live Server

  1. VS Code 확장에 "Live Server" 설치 (없으면)
  2. 좌측 탐색기에서 index.html 우클릭
  3. "Open with Live Server" 클릭
⚠️ 그냥 더블클릭으로 열면 안 됨

index.html을 그냥 더블클릭하면 file:// 프로토콜로 열려서 Supabase 연결이 막힙니다. 반드시 npx serve 또는 Live Server로 열어주세요.

4-2. 동작 확인 — 진짜 DB가 동작하는지 ⭐
동작 확인 체크리스트 0 / 4 완료
질문 작성 → 목록에 보임
Supabase Table Editor > questions에 내 질문 데이터가 보임
좋아요 클릭 → 숫자 증가 + 위로 이동
http://localhost:3000/present.html → 큰 화면 발표자 뷰, 5초마다 자동 갱신
🎉 여기까지 되면 성공!

지금 일어난 일을 정리하면:

  • INSERT: 질문 작성이 questions 테이블에 행 추가
  • SELECT: 페이지 로드 시 모든 질문을 좋아요 순으로 조회
  • UPDATE: 좋아요 클릭이 likes_count를 1 증가시킴

이 3가지가 DB 세계의 핵심입니다. 본인 프로젝트에서도 똑같이 응용 가능해요.


⚠️ 자주 막히는 곳 — 꼭 읽기

증상 원인 / 해결
"WOWVOTE_CONFIG 미설정" 알림 config.js를 안 만들었거나 키가 비어 있음. Step 3 다시
그냥 더블클릭했더니 안 돼요 index.htmlfile://로 열면 안 됨. 반드시 npx serve / Live Server
"기본 세션을 찾지 못했어요" 스키마 실행이 안 됨. supabase-schema.sql을 SQL Editor에서 Run했는지 확인
빨간 RLS / 정책 에러 스키마의 정책 부분이 빠짐. 스키마 전체를 다시 Run
키 어디 있어요? Supabase Settings > API. anon public만 사용, service_role절대 금지
며칠 뒤 갑자기 안 돼요 무료 프로젝트는 미사용 시 일시정지됨. 콘솔에서 Restore로 깨우기
💡 만능 해결법

에러가 나면 메시지 전체를 복사해서 Claude Code에 이렇게:

이 에러가 났어. 원인 분석하고 해결해줘. [에러 메시지 전체 붙여넣기]

📖 코드 읽어보기 (15분, 이해 단계)

동작시켰다면 이제 코드가 어떻게 도는지 봅니다.

  • js/questions.js — INSERT(질문 작성), SELECT(목록 조회·정렬)가 어디 있는지 찾아보기
  • js/likes.js — 좋아요 중복을 어떻게 막는지 (fingerprint + UNIQUE 제약)
  • supabase-schema.sql — 테이블 3개의 관계, 인덱스, RLS 정책
🤔 스스로 질문해보기
  • 정렬은 DB에서 할까, 브라우저에서 할까? (힌트: .order(...))
  • 좋아요 숫자는 왜 increment_likes 함수로 올릴까? (힌트: 동시에 여러 명이 누르면?)

🔥 변형 도전 — 실습의 진짜 재미

Claude Code에게 이렇게 지시해보세요. 하나씩 시도하는 걸 추천:

좋아요 취소 기능을 추가해줘. 한 번 더 누르면 취소되게.
질문에 답글(댓글) 다는 기능을 추가해줘. 데이터 모델 변경부터 단계별로.
질문 검색창을 추가해줘. 입력하면 실시간으로 필터링되게.
내 본인 프로젝트에 같은 구조(질문+좋아요)를 적용하는 방법을 알려줘.
💡 변형의 원칙

변형할 때도 원칙은 같아요: DB(스키마) → 코드 → 테스트 순서.


🚀 더 나아가기 (집에서)

1. 배포해서 진짜 쓰기

WOWVote 레포의 README에 "운영 가이드"가 있습니다. Vercel 배포 + QR 코드 생성까지 안내합니다.

2. B 시나리오 도전 — 진짜 슬라이도 대체재로

호스트 페이지, 행사별 세션 분리, 모더레이션을 추가합니다. Claude Code에게:

B 시나리오(/admin 호스트 페이지 + 세션 분리) 계획부터 세워줘.

🧭 Claude Code 세션을 새로 열 때

대화가 끊겨도 이 프롬프트 하나면 맥락이 복원됩니다:

이 폴더의 문서를 읽고 전체 맥락을 파악한 다음 어디서부터 이어가면 되는지 알려줘. 읽을 파일: CLAUDE.md, PRD.md, README.md, current_status.md, SUPABASE_SETUP.md

🌟 학습 자산을 만드셨어요

오늘 셋업한 WOWVote는 단순한 데모가 아닙니다. 본인의 모든 미래 프로젝트에서 응용할 수 있는 "DB 연결의 표준 패턴"이에요. 이 경험이 본인의 진짜 자산입니다.

즐겁게 실습하세요! 막히는 건 당연한 거예요. 에러는 친구입니다. 🙌

— WOWD.LAB