12강: 백엔드 기초
데이터 저장하기
이제 데이터를 저장할 차례예요
11강에서 Next.js로 화면을 만들었어요. 레고 블록(컴포넌트)을 조립하고, 색칠 스티커(Tailwind CSS)를 붙여서 멋진 메인 페이지를 완성했죠. 11강 마지막에 이렇게 말씀드렸어요. "데이터베이스가 필요해요. Supabase라는 도구로 데이터 저장을 배워볼 거예요."
바로 오늘이에요.
그런데 왜 데이터베이스가 필요할까요? 지금까지 만든 화면에는 한 가지 문제가 있어요. 뭔가를 입력해도, 새로고침하면 전부 사라져요.
카카오톡을 생각해 보세요. 메시지를 보내고, 앱을 껐다가 다시 켜도 대화 내용이 그대로 있죠? 인스타그램에 사진을 올리면, 다음 날 열어도 그 사진이 남아있어요. 어떻게 가능할까요?
데이터베이스(Database, 데이터를 안전하게 보관하는 창고)가 있기 때문이에요. 지금까지 우리가 만든 건 무대 위 세트장이에요. 보이기만 할 뿐, 아무것도 저장되지 않아요. 오늘은 그 세트장 뒤에 창고를 만들어볼 거예요.
이건 뭐예요?
데이터베이스 = 인터넷 엑셀
엑셀을 써본 적 있으시죠? 엑셀의 구조를 떠올려 보세요.
- 시트(Sheet) 하나가 하나의 주제예요. "직원 목록" 시트, "매출 현황" 시트처럼요
- 시트 안에는 열(Column)이 있어요. "이름", "이메일", "전화번호" 같은 항목이에요
- 그리고 행(Row)에 실제 데이터가 한 줄씩 들어가요. "홍길동, hong@email.com, 010-1234-5678"
데이터베이스도 완전히 같아요. 이름만 다를 뿐이에요.
| 엑셀 | 데이터베이스 | 의미 |
|---|---|---|
| 시트 | 테이블(Table) | 하나의 주제 묶음 |
| 열 | 컬럼(Column) | 항목 이름 (이름, 이메일 등) |
| 행 | 로우(Row) | 실제 데이터 한 줄 |
| 통합 문서 | 데이터베이스(DB) | 시트(테이블) 여러 개의 묶음 |
차이가 있다면, 엑셀은 내 컴퓨터에 파일로 저장되지만, 데이터베이스는 인터넷에 있는 창고에 저장돼요. 그래서 누가 어디서 접속하든 같은 데이터를 볼 수 있어요.
Supabase = 인터넷 엑셀 + 관리자
Supabase(수파베이스)는 이 인터넷 데이터베이스를 아주 쉽게 쓸 수 있도록 만들어 준 서비스예요. BaaS(Backend as a Service, 백엔드를 대신 해주는 서비스)라고 불러요.
비유하자면, 엑셀 프로그램을 설치할 필요 없이 구글 시트를 쓰는 것과 비슷해요. 가입만 하면 바로 테이블을 만들고, 데이터를 넣고, 읽고, 수정하고, 삭제할 수 있어요. 서버(데이터를 보관하고 처리하는 컴퓨터)를 직접 만들 필요가 전혀 없어요.
Supabase를 선택하는 이유는 간단해요.
| 기준 | Supabase |
|---|---|
| 배포가 쉬워? | 가입하면 바로 사용. 서버 설정 불필요 |
| AI가 잘 아나? | 공식 문서가 풍부하고, Claude가 코드를 아주 잘 만들어줘요 |
| 무료로 충분해? | 무료 플랜으로 프로젝트 2개, 500MB DB 제공 |
CRUD = 모든 서비스의 기본 뼈대
서비스를 만들 때, 데이터를 다루는 동작은 딱 4가지뿐이에요. 이걸 CRUD(크러드)라고 불러요.
휴대폰 주소록을 생각해 보세요.
| 동작 | 영어 | 주소록 비유 |
|---|---|---|
| Create | 만들기 | 새 연락처 추가 |
| Read | 읽기 | 연락처 검색해서 보기 |
| Update | 수정 | 전화번호 변경 |
| Delete | 삭제 | 연락처 삭제 |
카카오톡도 CRUD예요. 메시지 보내기(Create), 대화 목록 보기(Read), 메시지 수정(Update), 메시지 삭제(Delete). 인스타그램도요. 사진 올리기(Create), 피드 보기(Read), 캡션 수정(Update), 게시물 삭제(Delete).
세상의 모든 서비스는 이 4가지 동작의 조합이에요. CRUD만 할 줄 알면, 어떤 서비스든 만들 수 있어요.
환경 변수(.env) = 비밀 금고
Supabase에 연결하려면 API 키(API Key, 서비스에 접속하기 위한 비밀 열쇠)가 필요해요. 이 열쇠를 코드에 직접 적으면 안 돼요.
왜냐고요? 코드를 GitHub에 올리면, 전 세계 사람이 내 열쇠를 볼 수 있기 때문이에요. 마치 집 열쇠를 현관문에 테이프로 붙여놓는 것과 같아요. 누구나 가져갈 수 있어요.
그래서 환경 변수(Environment Variable)라는 걸 써요. .env.local이라는 특별한 파일에 비밀 정보를 따로 적어두는 거예요. 이 파일은 GitHub에 절대 올라가지 않아요.
# .env.local 파일 — 비밀 금고 역할
NEXT_PUBLIC_SUPABASE_URL=https://abcdefg.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
NEXT_PUBLIC_SUPABASE_URL— Supabase 프로젝트의 주소예요NEXT_PUBLIC_SUPABASE_ANON_KEY— 프로젝트에 접속하기 위한 공개 열쇠예요. "공개 열쇠"라고 해서 아무나 써도 되는 건 아니에요. 허용된 동작만 할 수 있는 제한된 열쇠예요
이 값들은 Supabase 대시보드(프로젝트 관리 화면)에서 복사할 수 있어요. 나중에 실습에서 직접 해볼 거예요.
우리는 이렇게 쓰고 있어요
지금 여러분이 읽고 있는 AI//STUDY 사이트는 정적 사이트(데이터베이스 없이 파일만으로 동작하는 사이트)라서, Supabase를 직접 쓰고 있지는 않아요.
하지만 디온웍스에서 운영하는 다른 서비스들은 전부 Supabase를 쓰고 있어요.
- DGHR(디지HR) — 직원 출퇴근 기록, 휴가 신청, 급여 정보를 Supabase에 저장해요. 직원이 GPS로 출근 체크를 하면 Create, 관리자가 출퇴근 현황을 보면 Read, 퇴근 시간이 수정되면 Update, 잘못된 기록을 삭제하면 Delete. 딱 CRUD예요
- HoneyERP(허니이알피) — 거래처 정보, 견적서, 발주서 데이터를 전부 Supabase 테이블에 넣어요
이 서비스들 모두, 처음에는 오늘 배울 것과 똑같이 시작했어요. Supabase에 가입하고, 테이블을 만들고, 데이터를 넣고 읽는 것부터요.