개발
백엔드 없이 앱 만들기
Supabase 실전 — 우리 앱 7개가 전부 이 구조입니다
서버를 만들지 않고 로그인·데이터베이스·파일 저장·서버 함수까지 세웁니다. 여기 나오는 사고는 전부 우리가 실제로 낸 것입니다 — 공개 저장소 유출, 탈퇴 후 남은 파일, 로그인했는데 로그아웃으로 보이는 문제, 레이트리밋 오작동.
- 6개 파트결제 즉시 전부 열립니다
- 30개 산출물손에 남는 결과물
- 36개 자산그대로 복사해 쓰는 것
- 4.5만자읽을 분량
- 평생소장 기수·개강일 없음
- 평생 업데이트 고쳐지면 다시 받으면 최신본
- 7일 청약철회 내려받기 전까지
「평생」은 회사가 이 서비스를 운영하는 기간을 뜻합니다. 서비스를 종료하게 되면 90일 전에 알려드리고, 결제하신 자료를 내려받으실 기간을 90일 이상 보장합니다. 그때까지 한 번도 내려받지 않으셨다면 환급해 드립니다. 환불 규정
앱은 만들겠는데 서버가 막막하다면
회원가입·로그인·데이터 저장·파일 업로드를 직접 만들려면 그것만으로 몇 주가 갑니다. 그리고 직접 만든 쪽이 대개 더 안 안전합니다 — 남의 데이터가 남에게 보이는 사고는 거의 다 여기서 납니다.
지금
서버를 직접 만들다가 앱을 못 만든다
이 강의를 따라 하면
앱에 집중하고, 남의 데이터가 안 보이는 구조를 규칙으로 강제한다
이 강의의 핵심
- Point 1우리 앱 7개가 전부 이 구조입니다예제용 설정이 아니라 실제로 운영 중인 구조를 그대로 풉니다. 여기서 나오는 사고도 전부 우리가 낸 것입니다.
- Point 2「남의 데이터가 안 보이게」를 규칙으로 강제합니다앱 코드에서 조심하는 방식은 언젠가 뚫립니다. 데이터베이스 쪽에서 막는 구조를 만듭니다.
- Point 3파일 업로드에서 나는 사고를 미리 막습니다공개 버킷·탈퇴 후 남는 파일처럼 반복해서 나는 실수를 목록으로 만들고 검사합니다.
- Point 4무료로 어디까지 되고 언제 돈이 나가는지요금이 어떻게 붙는지, 일시정지가 언제 걸리는지까지 확인 날짜와 함께 적었습니다.
글이 아니라 물건입니다
읽고 끝나는 강의가 아닙니다. 그대로 열어서 쓰는 파일을 드립니다. 아래는 실제로 들어 있는 것의 앞부분입니다 — 편집하지 않았습니다.
[anon / publishable — 공개 키] · 앱·브라우저에 넣어도 된다 · 파트 2의 권한 규칙(RLS)을 그대로 받는다 · 이 키만으로는 남의 데이터를 못 본다 (규칙이 걸려 있다면) · 환경변수 이름: NEXT_PUBLIC_SUPABASE_ANON_KEY [service_role — 만능 키] · **모든 권한 규칙을 통과한다.** RLS 가 걸려 있어도 무시하고 다 읽는다 · 서버(라우트·서버 함수)에만 둔다 · 환경변수 이름: SUPABASE_SERVICE_ROLE_KEY ← 공개 접두사 금지 · ⚠️ 앱에 넣으면 전 사용자 데이터가 열린다
① 프로젝트 첫 설정 — 키 두 종류 구분표
이 표를 잘못 읽으면 그날로 사고입니다. 키 이름에 `service`·`secret` 이 들어가면 앱에 넣지 마십시오.
함께 들어 있는 자산
- ① 프로젝트 첫 설정 — 키 두 종류 구분표
- ② .env.example — 이름만 담아 커밋한다
- ③ 클라이언트 만들기 — 스키마 명시 함정 포함
- ④ 세션 읽는 두 함수 — 언제 무엇을 쓰는가
- ⑤ 첫 표 만들기 — user_id 를 반드시 넣는다
- ⑥ 저장할 때 user_id 를 채우는 코드
- ① 권한 규칙 전문 — 표마다 이걸 그대로 넣으십시오
- 외 29개
이런 분께
- 서버 만들 줄 몰라서 멈춘 분서버 코드를 거의 쓰지 않고 앱을 세웁니다.
- 만들었는데 보안이 불안한 분남의 데이터가 보이는지 직접 뚫어보는 방법을 씁니다.
- 두 번째 앱을 빨리 만들고 싶은 분같은 구조를 재사용하는 방식을 다룹니다.
결제하시면 손에 남는 것 · 30개
강의를 다 보고 나면 이것들이 파일로 남습니다.
- 01구글 로그인 + 이메일 로그인이 도는 앱PART 1
- 02키 두 종류를 구분하는 규칙표PART 1
- 03세션을 읽는 두 함수의 사용처 구분표PART 1
- 04로그인 상태가 새로고침에도 유지되는 것을 확인한 결과PART 1
- 05.env.example (그대로 복사)PART 1
- 06네 가지 규칙(읽기·쓰기·수정·삭제) SQL 전문PART 2
- 07두 번째 계정으로 뚫어보는 침투 시험표 8항목PART 2
- 08공유 기능이 필요할 때의 규칙 예시PART 2
- 09만능 키를 쓰는 곳 관리 목록PART 2
- 10규칙이 실제로 걸렸는지 확인하는 SQLPART 2
- 11비공개 저장소 정책 SQL 전문PART 3
- 12서명 주소로 이미지를 보여주는 코드PART 3
- 13탈퇴 시 파일까지 지우는 함수PART 3
- 14업로드가 0바이트로 저장되는 것을 잡는 검증 코드PART 3
- 15이미 공개로 올려버렸을 때의 수습 절차PART 3
- 16공용 AI 호출 함수 (그대로 복사)PART 4
- 17앱별 사용량 제한 표와 함수PART 4
- 18진짜 IP 를 찾는 진단 코드PART 4
- 19하루 비용 상한 코드PART 4
- 20함수 배포·환경변수 설정 명령PART 4
- 21변경을 파일로 남기는 절차PART 5
- 22칸 추가·삭제·이름 변경 안전 순서PART 5
- 23검사 규칙을 실패 케이스로 시험하는 SQLPART 5
- 24조용한 실패를 잡는 응답 확인 코드PART 5
- 25되돌리기(rollback) 준비 방법PART 5
- 26출시 전 보안 점검 목록 12항목PART 6
- 27한 번에 돌리는 자동 점검 SQLPART 6
- 28두 번째 계정 침투 시험 절차PART 6
- 29사고가 났을 때의 대응 순서PART 6
- 30새 표·저장소를 만들 때 도는 체크리스트PART 6
커리큘럼 · 6개 파트
파트마다 무엇을 배우고, 무엇이 파일로 남는지까지 적었습니다. 목차만 보고 결제하시게 하지 않겠습니다.
- PART 1서버를 안 만들고 시작한다 — 로그인까지 하루
배우는 것
- 데이터베이스가 곧 API 다
- 로그인은 만들지 말고 붙인다
- 공개 키와 비밀 키는 권한이 완전히 다르다
- service_role 키는 앱에 절대 넣지 않는다
- 세션을 읽는 함수가 두 개다
- 스키마를 명시해야 하는 경우가 있다
손에 남는 것
- 구글 로그인 + 이메일 로그인이 도는 앱
- 키 두 종류를 구분하는 규칙표
- 세션을 읽는 두 함수의 사용처 구분표
- 로그인 상태가 새로고침에도 유지되는 것을 확인한 결과
- .env.example (그대로 복사)
복사해 쓰는 자산 6개① 프로젝트 첫 설정 — 키 두 종류 구분표 · ② .env.example — 이름만 담아 커밋한다 · ③ 클라이언트 만들기 — 스키마 명시 함정 포함 · ④ 세션 읽는 두 함수 — 언제 무엇을 쓰는가 · ⑤ 첫 표 만들기 — user_id 를 반드시 넣는다 · ⑥ 저장할 때 user_id 를 채우는 코드
- PART 2남의 데이터가 안 보이게 잠근다 — RLS 는 선택이 아니다
배우는 것
- 기본은 "아무도 못 본다" 다
- 규칙은 데이터베이스에 건다
- 네 가지를 따로 정해야 한다
- using 과 with check 가 다르다
- 만능 키는 규칙을 무시한다
- 반드시 다른 계정으로 확인한다
손에 남는 것
- 네 가지 규칙(읽기·쓰기·수정·삭제) SQL 전문
- 두 번째 계정으로 뚫어보는 침투 시험표 8항목
- 공유 기능이 필요할 때의 규칙 예시
- 만능 키를 쓰는 곳 관리 목록
- 규칙이 실제로 걸렸는지 확인하는 SQL
복사해 쓰는 자산 6개① 권한 규칙 전문 — 표마다 이걸 그대로 넣으십시오 · ② 규칙이 실제로 걸렸는지 확인하는 SQL · ③ 두 번째 계정 침투 시험표 — 이걸 안 하면 검증이 아니다 · ④ 직접 조회로 시험하는 명령 · ⑤ 공유가 필요할 때 — 규칙을 넓히는 법 · ⑥ 만능 키 사용처 관리 목록
- PART 3사진과 파일을 안전하게 다룬다 — 우리가 두 번 유출한 곳
배우는 것
- 저장소는 기본을 비공개로 만든다
- 비공개 파일은 서명 주소로 보여준다
- 저장소에도 권한 규칙이 필요하다
- 경로에 사용자 id 를 넣는다
- 탈퇴하면 파일도 지운다
- 업로드가 빈 파일로 저장될 수 있다
손에 남는 것
- 비공개 저장소 정책 SQL 전문
- 서명 주소로 이미지를 보여주는 코드
- 탈퇴 시 파일까지 지우는 함수
- 업로드가 0바이트로 저장되는 것을 잡는 검증 코드
- 이미 공개로 올려버렸을 때의 수습 절차
복사해 쓰는 자산 6개① 비공개 저장소 만들기 + 정책 전문 · ② 업로드 코드 — 0바이트 함정 포함 · ③ 서명 주소로 보여주기 — 만료 함정 포함 · ④ 탈퇴 처리 — 표 + 파일 + 계정 · ⑤ 탈퇴가 진짜 되는지 확인하는 절차 · ⑥ 이미 공개로 올려버렸을 때 — 수습 절차
- PART 4앱에 못 담는 일은 서버 함수로 뺀다
배우는 것
- 비밀 키는 함수 안에만 둔다
- 금액·권한은 서버가 다시 확인한다
- 함수 주소는 공개다
- 사용량은 서버에서 센다
- 앱별로 따로 세야 한다
- 진짜 IP 는 통념과 다를 수 있다
손에 남는 것
- 공용 AI 호출 함수 (그대로 복사)
- 앱별 사용량 제한 표와 함수
- 진짜 IP 를 찾는 진단 코드
- 하루 비용 상한 코드
- 함수 배포·환경변수 설정 명령
복사해 쓰는 자산 6개① 공용 AI 호출 함수 — 전문 · ② 사용량 표와 판정 함수 — 앱별로 따로 센다 · ③ 진짜 IP 를 찾는 진단 코드 — 통념대로 고치면 망가진다 · ④ 하루 총 비용 상한 — 폭주 방어선 · ⑤ 함수 배포와 환경변수 — 명령 그대로 · ⑥ 앱에서 함수를 부르는 코드
- PART 5바꿀 때 깨뜨리지 않는다 — 빈 값이 검사를 통과한 이야기
배우는 것
- 변경은 파일로 남긴다
- 지우기 전에 안 쓰는지 확인한다
- 이름 변경은 두 단계로
- 검사 규칙은 통과 못 하는 값으로 시험한다
- NULL 은 CHECK 를 통과한다
- 응답의 결과 건수를 봐야 한다
손에 남는 것
- 변경을 파일로 남기는 절차
- 칸 추가·삭제·이름 변경 안전 순서
- 검사 규칙을 실패 케이스로 시험하는 SQL
- 조용한 실패를 잡는 응답 확인 코드
- 되돌리기(rollback) 준비 방법
복사해 쓰는 자산 6개① 마이그레이션 파일 — 형식과 규칙 · ② 칸 추가·삭제·이름 변경 안전 순서 · ③ 검사 규칙 — 빈 값 함정과 올바른 작성법 · ④ 검사 규칙 시험 SQL — 막아야 할 값으로 · ⑤ 조용한 실패를 잡는 응답 확인 · ⑥ 되돌리기 준비 — 배포 전에 해둘 것
- PART 6털리기 전에 내가 먼저 본다 — 출시 전 점검
배우는 것
- 점검은 목록으로 한다
- 두 번째 계정이 최고의 도구다
- 탈퇴가 진짜 지워지는지 본다
- 새로 만들 때마다 다시 돈다
- 기록이 있어야 대응할 수 있다
- 고칠 수 있는 곳을 서버로 옮겨 둔다
손에 남는 것
- 출시 전 보안 점검 목록 12항목
- 한 번에 돌리는 자동 점검 SQL
- 두 번째 계정 침투 시험 절차
- 사고가 났을 때의 대응 순서
- 새 표·저장소를 만들 때 도는 체크리스트
복사해 쓰는 자산 6개① 출시 전 보안 점검 목록 12항목 · ② 한 번에 돌리는 자동 점검 SQL · ③ 두 번째 계정 침투 절차 — 20분 · ④ 새 표·저장소를 만들 때 도는 체크리스트 · ⑤ 사고 대응 순서 — 먼저 막는다 · ⑥ 점검 결과 기록표 — 비교할 수 있게
다루는 도구 · 2종
이름만 대고 넘어가지 않습니다. 무엇이고, 왜 쓰고, 얼마이고, 대신 쓸 수 있는 건 뭔지까지 적었습니다. 가격은 확인한 날짜를 같이 적었습니다 — 바뀌면 고쳐서 올립니다.
| 도구 | 무엇인가 | 가격 | 대신 쓸 수 있는 것 |
|---|---|---|---|
| Supabase | 서버를 직접 안 만들고도 데이터베이스·로그인·파일 저장을 쓸 수 있게 해주는 서비스입니다. | Free $0 — 데이터베이스 500MB, 파일 1GB, 월 활성 사용자 5만 명. 단 1주일 안 쓰면 프로젝트가 잠시 멈추고, 무… | Firebase · 직접 서버 + PostgreSQL · PocketBase |
| PostgreSQL | Supabase 안에서 실제로 데이터를 담고 있는 데이터베이스입니다. | PostgreSQL 자체는 무료입니다(오픈소스). 돈이 드는 건 그걸 돌려 주는 곳(Supabase 등)입니다. | Firestore (Firebase) · MySQL · SQLite |
누가 만들었나
앱 7개를 직접 만들어 Google Play 와 App Store 에 올리고, 지금도 운영합니다. 기획도 개발도 심사 대응도 고객 문의도 혼자 합니다. 이 강의는 그 과정에서 실제로 막혔던 지점만 적은 것입니다.
심사도 결제도 고객 문의도 직접 통과시켜 본 것만 씁니다. 남의 사례를 옮기지 않고, 해보지 않은 것을 아는 척하지 않습니다. 그래서 이 페이지에는 지어낸 수강생 수도, 후기도, 할인율도 없습니다 — 없는 것을 적지 않는 것이 우리가 파는 것의 일부입니다.
- 7개스토어에 올려 운영 중인 앱
- 15개같은 방식으로 만든 강의
- 455개강의 전체에 든 복사해 쓰는 자산
묶어 사면 더 쌉니다
이 강의는 아래 패키지에 들어 있습니다. 관련 강의를 같이 보실 생각이면 패키지 쪽이 낫습니다.
자주 묻는 것
- 영상인가요, 글인가요?글입니다. 읽고 그대로 따라 하시는 형식입니다. 재생 시간을 채우는 대신 복사해 쓰는 파일 36개를 드립니다. 낡으면 고쳐서 올립니다.
- 사전 지식이 필요한가요?필요 없습니다. 도구가 무엇이고 왜 쓰는지부터 설명합니다 (이 강의에서 다루는 도구 2종은 위 표에 있습니다). 다만 직접 따라 하실 시간은 필요합니다 — 읽기만 하면 남는 게 없습니다.
- 언제까지 볼 수 있나요?기한이 없습니다. 기수도 개강일도 없고, 결제하시면 6개 파트가 바로 열립니다. 도구와 정책이 바뀌어 내용을 고치면 추가 결제 없이 다시 받으실 수 있습니다.
- 보다가 안 맞으면요?결제일부터 7일 이내에 철회하실 수 있습니다. 다만 본문을 내려받으신 뒤에는 제한됩니다(전자상거래법 제17조제2항제5호). 받지 않으신 상태라면 그대로 철회 대상입니다.
이건 아닙니다
- 대규모 트래픽 설계가 아닙니다 — 우리 규모가 아닙니다
- 팀 협업·배포 자동화는 다루지 않습니다
- 특정 프레임워크 문법 강의가 아닙니다
환불
결제일부터 7일 이내에 철회하실 수 있습니다. 다만 본문을 내려받으신 뒤에는 청약철회가 제한됩니다(전자상거래법 제17조제2항제5호). 내려받으신 시각은 기록되며, 받지 않으신 상태라면 그대로 철회 대상입니다. 환불 규정 전문