Day 7 — 백엔드 기초 복습 + 첫 CRUD API 만들기

오늘의 목표

  1. 서버가 요청을 받아 DB와 주고받는 흐름을 이해한다
  2. ORM과 환경변수의 개념을 안다
  3. 내 프로젝트의 첫 CRUD API 한 세트를 완성한다

준비물: ERD + API 명세 + 화면 뼈대가 올라간 저장소


0. 복습 — 지금까지 우리는

화면(프론트) 뼈대를 만들었습니다. 그런데 지금 화면의 데이터는 전부 가짜죠. 오늘은 서버를 만들어서, 이 데이터가 진짜 DB에서 오고 가게 합니다. 드디어 풀스택의 "풀"이 완성되는 날입니다.

여러분은 백엔드 기초가 있으니, 오늘은 개념 복습은 빠르게 하고 내 프로젝트에 적용하는 데 집중합니다.


1. 요청 한 번의 여행 — 전체 흐름

요청 흐름: 화면 → 서버(라우터·컨트롤러·검증) → DB → 응답

버튼 하나 눌렀을 때 무슨 일이 일어나는지 따라가 봅시다.

[화면]  사용자가 "할 일 추가" 클릭
   │  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의 주소·필드명이 일치하는지 미리 대조해 오세요. (안 맞으면 연동이 안 됩니다!)


프론트와 백엔드, 두 반쪽이 다 준비됐습니다. 다음 시간 둘을 잇습니다. 🔌