◆ PART · TEAM

팀 분업 시뮬레이션

세 트랙이 「같은 이름」 으로 만나는 자리

Spring 기초
SMHRD

학습 목표

오늘 들고 가는 3 가지

0. 회원가입 — 어디에나 있는 그 기능

쇼핑몰·SNS·게시판·예약·배달앱·동영상 사이트 — 어떤 서비스든 회원가입 폼은 거의 똑같이 생겼다. 입력칸 몇 개와 가입 버튼. 흔한 화면이지만 한 번 제대로 들여다 보면, 다음 모든 프로젝트가 쉬워진다. 이미 v2~v4 에서 따라하기로 코드를 완성했으므로, 오늘은 그 코드가 「어떻게 만들어지는지」 위에서 내려다본다.

1. 프로젝트의 단계 — 기획에서 구현까지

① 기획 ② 요구사항정의서 ③ 유스케이스 ④ 화면 스케치 ⑤ 구현 "가입 만들자" ★ id, pwd, nick "폼 입력→가입→이동" 3칸 + 버튼 1개 Front+Back+DB ↑ 데이터 약속이 처음 정해지는 자리 — 이후 모든 트랙이 이걸 따른다
단계하는 일회원가입 예
① 기획기능을 만들기로 정함"회원가입 기능을 만들자"
② 요구사항정의서어떤 데이터를 저장할까id, pwd, nick
③ 유스케이스사용자가 어떻게 쓰는지 한 줄"폼 3칸 입력 → 가입 → 로그인 페이지로"
④ 화면 스케치디자이너가 그림으로입력칸 3개 + 버튼 1개
⑤ 구현Front + Back + DBJSP / Controller / mymember

2. 3 트랙 한눈에

트랙주된 산출물주된 도구핵심 약속
Frontend HTML / CSS / JS, 디자인된 폼 VS Code, Figma, 브라우저 <input name="..."> 의 이름
Backend Controller, Service, Mapper, DTO Eclipse, Tomcat, Postman DTO 필드명
DB 테이블, 인덱스, 가데이터 MySQL Workbench 테이블 컬럼명
시각 → 09:00 11:00 14:00 16:00 Front ▣ wireframe ▣ CSS ▣ 디자인 폼 ─────┐ Back ▣ DTO ▣ Service ▣ Mapper ─────┼──→ ◆ 합치기 DB ▣ ERD ▣ CREATE ▣ 가데이터 ─────┘ (이름이 같아 자연 합쳐짐)

3. 「같은 이름」 매핑 표 (회원가입 예시)

의미약속한 이름Front (form name)Back (DTO 필드)DB (컬럼명)
아이디idname="id"String idid VARCHAR(50)
비밀번호pwdname="pwd"String pwdpwd VARCHAR(100)
닉네임nickname="nick"String nicknick VARCHAR(30)

한 줄 원칙: 같은 데이터에 같은 이름을 쓰면, 세 사람이 동시에 일해도 시스템이 합쳐진다.

브라우저 폼 자바 객체 MySQL 테이블 name="id" ─→ String id ─→ id VARCHAR(50) name="pwd" ─→ String pwd ─→ pwd VARCHAR(100) name="nick" ─→ String nick ─→ nick VARCHAR(30) ↑ ★ 한 글자라도 다르면 합치는 순간 깨짐

4. 폼만 갈아끼우기 — 같은 데이터, 다른 디자인

같은 데이터를 받는 화면은 디자인이 갈아끼워질 수 있다. action, method, name 만 약속대로면 화면은 무엇이든 가능 — Backend 는 한 줄도 안 바뀐다.

[디자인 A] 단순 폼 [디자인 B] 카드 + 그래디언트 <input name="id"> <input name="id"> <input name="pwd"> <input name="pwd"> <input name="nick"> <input name="nick"> ↓ ↓ └────── 같은 Controller ───────┘ @PostMapping("/signup") public String signup(Member m)

5. 약속이 깨졌을 때 발생하는 3 가지 사고

사고 ① null 바인딩 — 폼 name 과 DTO 필드명 불일치

<input name="userId"> ←→ private String id; ↓ 콘솔: Member(id=null, pwd=*, nick=*) ^^^^^^^ 자동 바인딩 실패 — 에러 안 남, 데이터만 비어있음

가장 자주 나는 사고. 화면도 서버도 안 죽기 때문에 발견까지 시간이 걸린다.

사고 ② NoSuchColumn — DTO 필드명과 컬럼명 불일치

private String password; ←→ DB 컬럼: pwd ↓ SQLException: Unknown column 'password' in 'field list'

DB 가 즉시 거부하므로 차라리 빨리 잡힌다. INSERT/SELECT 모두에서 발생.

사고 ③ 화면-DB 불일치 — 화면이 다른 이름으로 참조

JSP: ${m.nickname} ←→ DTO: String nick ↓ INSERT 는 정상, 그러나 화면의 닉네임 자리가 모두 빈 칸. 에러도 안 남.

6. 팀 프로젝트 시작 체크리스트

첫 회의 30 분 안에 합의할 5 가지

이 5 가지를 첫날에 정해놓으면 사고의 90% 가 사라진다.

7. Before / After

따라하기 직후

회원가입 코드는 동작한다. 그러나 「왜 그렇게 짜는지」 와 「화면이 바뀌면 어떻게 되는지」 는 안 보였다.

한 번 내려다본 후

기획→요구사항→화면→구현 단계가 보이고, 데이터 약속이 모든 트랙을 잇는다. 화면 디자인은 갈아끼울 수 있다.

학습 확인 체크리스트