Day 7 — 백엔드 기초 복습 + 첫 CRUD API 만들기
오늘의 목표
- 서버가 요청을 받아 DB와 주고받는 흐름을 이해한다
- ORM과 환경변수의 개념을 안다
- 내 프로젝트의 첫 CRUD API 한 세트를 완성한다
준비물: ERD + API 명세 + 화면 뼈대가 올라간 저장소
0. 복습 — 지금까지 우리는
화면(프론트) 뼈대를 만들었습니다. 그런데 지금 화면의 데이터는 전부 가짜죠. 오늘은 서버를 만들어서, 이 데이터가 진짜 DB에서 오고 가게 합니다. 드디어 풀스택의 "풀"이 완성되는 날입니다.
여러분은 백엔드 기초가 있으니, 오늘은 개념 복습은 빠르게 하고 내 프로젝트에 적용하는 데 집중합니다.
1. 요청 한 번의 여행 — 전체 흐름
버튼 하나 눌렀을 때 무슨 일이 일어나는지 따라가 봅시다.
[화면] 사용자가 "할 일 추가" 클릭
│ POST /todos { title: "장보기" }
▼
[서버] 요청을 받음
│ ① 라우터: 이 주소는 어느 코드로?
│ ② 컨트롤러: 요청 처리 로직
│ ③ 검증: title이 비었나? 로그인했나?
▼
[DB] INSERT INTO todos ...
│ 저장하고 결과 반환
▼
[서버] 201 Created { id: 5, title: "장보기", ... }
▼
[화면] 새 할 일이 목록에 나타남
💡 이 흐름이 머릿속에 그려지면 백엔드의 절반은 이해한 겁니다. 모든 API가 이 패턴의 변형입니다.
2. ORM — DB를 코드로 다루기
DB에 직접 명령(SQL)을 쓸 수도 있지만, 보통은 ORM을 씁니다.
ORM = DB 테이블을 코드 객체처럼 다루게 해주는 도구
# SQL 직접 쓰기
"INSERT INTO todos (title, user_id) VALUES ('장보기', 1)"
# ORM 사용 (예시)
Todo.create(title="장보기", user_id=1)
| 장점 | 단점 | |
|---|---|---|
| ORM | 쉽고 안전, 빠른 개발 | 복잡한 쿼리엔 한계 |
| 직접 SQL | 세밀한 제어, 성능 | 손이 많이 감, 실수 위험 |
💡 초보 프로젝트는 ORM을 권장합니다. 본인 스택의 대표 ORM을 쓰세요 (예: Prisma, Sequelize, SQLAlchemy, Django ORM 등). 복잡한 쿼리가 필요할 때만 SQL을 섞습니다.
3. 환경변수 — 비밀은 코드 밖에
DB 비밀번호, API 키 같은 비밀 정보를 코드에 직접 쓰면 안 됩니다. GitHub에 올라가면 누구나 봅니다.
환경변수 = 코드 바깥(.env 파일)에 보관하는 설정값
# .env 파일 (절대 GitHub에 안 올림! .gitignore에 추가)
DATABASE_URL=postgresql://localhost:5432/mydb
JWT_SECRET=내비밀키
# 코드에서는 이렇게 불러옴
db_url = os.environ["DATABASE_URL"]
⚠️ 반드시
.env를.gitignore에 넣으세요. (Day 4에서 .gitignore 만든 것 기억나죠?) 비밀키가 GitHub에 올라가면 사고로 이어집니다.
4. 실습 — 첫 CRUD API 완성하기
오늘은 핵심 테이블 하나의 CRUD 5종을 만듭니다. (Day 3 API 명세 그대로!)
🛠 실습 순서
1. 백엔드 프로젝트 초기화 + DB 연결
AI 프롬프트:
"[내 스택]으로 백엔드 서버를 초기화하고,
[내 DB]에 연결하는 기본 설정을 만들어줘.
DB 접속정보는 .env 환경변수로 분리해줘."
2. ERD대로 테이블/모델 생성
"이 ERD대로 [테이블명] 모델을 만들어줘: [ERD 붙여넣기]"
3. CRUD API 5개 구현 (Day 3 명세대로)
"이 API 명세대로 [리소스] CRUD 엔드포인트를 만들어줘:
[API 명세 표 붙여넣기]
ORM은 [내 ORM] 사용."
4. 하나씩 테스트
- POST로 데이터 만들기
- GET으로 조회 확인
- PATCH/DELETE 확인
(테스트 도구: Postman, Thunder Client, 또는 브라우저)
5. 동작하면 commit & push
테스트하는 법 (API 도구 사용)
화면 없이도 API만 따로 테스트할 수 있습니다.
POST http://localhost:____/todos
Body: { "title": "테스트", "due_date": "2026-01-20" }
→ 201과 함께 데이터가 돌아오면 성공!
GET http://localhost:____/todos
→ 방금 만든 할 일이 목록에 보이면 성공!
✍️ 막힐 때 보세요
DB 연결이 안 돼요 → 가장 흔한 막힘 지점입니다. 에러 전문을 복사해 AI에게 주세요. .env 값이 맞는지, DB가 실행 중인지 확인.
AI가 만든 코드 구조가 복잡해요 → "MVC 패턴으로 라우터/컨트롤러/모델 폴더를 나눠서 정리해줘"라고 하면 깔끔해집니다.
한 번에 5개를 다 만들었더니 다 안 돼요 → Day 5 교훈! 하나씩 하세요. GET 하나 만들어 확인 → POST 추가 → ... 순서로.
5. 오늘의 체크리스트
- 요청→서버→DB→응답의 흐름을 그릴 수 있다
- ORM이 무엇이고 왜 쓰는지 안다
- 환경변수로 비밀을 분리하는 이유를 안다 (.gitignore 확인!)
- 첫 CRUD API 5종을 만들고 테스트했다 ← 가장 중요!
- commit & push 했다
6. 다음 시간 예고
Day 8 — 프론트-백 첫 연동 + Block 1 점검 🚩
- 드디어 화면과 서버를 연결합니다! 가짜 데이터 → 진짜 데이터
- Block 1(1~4주)을 마무리하고 멘토링으로 방향 점검
- 준비물: 동작하는 화면 뼈대 + CRUD API
📌 숙제: 화면에서 쓸 API와 방금 만든 API의 주소·필드명이 일치하는지 미리 대조해 오세요. (안 맞으면 연동이 안 됩니다!)
프론트와 백엔드, 두 반쪽이 다 준비됐습니다. 다음 시간 둘을 잇습니다. 🔌