Spring Boot — 쿼리가 몇 개 나가는지 세어 본다 · 보이지 않는 것들 · 실습
목록 하나에 쿼리 301개
목표
Spring 이 대신 해 주는 일을 봅니다. 검증·예외 변환·트랜잭션 경계·지연
로딩은 전부 눈에 안 보이는 곳에서 일어나고, 그래서 문제도 눈에 안 보입니다.
특히 마지막 하나 — 목록 하나 그리는 데 쿼리가 몇 개 나가는지 — 를
실제로 세어 봅니다.
환경
Java 21 · Maven · Spring Boot 3.4.1 · H2(메모리). 네트워크가 없습니다.
mkdir -p /root/work/springcp -r /opt/lab/samples/spring-starter/* /root/work/spring/cd /root/work/springmvn -o -B test # -o 를 빠뜨리면 원격을 보러 가서 실패합니다의존성은 뼈대 pom.xml 에 있는 것만 쓸 수 있습니다 — web, validation,
data-jpa, actuator, h2, test. 새 의존성은 받을 수 없습니다.
계약
채점기는 여러분의 클래스를 참조하지 않고 HTTP 와 쿼리 수로만 봅니다.
클래스를 어떻게 쪼개든 아래만 맞으면 됩니다.
| 경로 | 계약 |
|---|---|
| GET /healthz | {"status":"ok"} |
| POST /items | {name, price} · 정상 200/201 · 위반 400 |
| GET /items | 저장된 목록(JSON 배열) |
| GET /items/{id} | 있으면 200 · 없으면 404 + 메시지 |
| POST /items/bulk | 배열 · 하나라도 실패하면 전부 롤백 |
| GET /shops | 가게마다 물품 수 · 쿼리 2개 이하 |
패키지는 labhub 로 두세요.
단계
1. 뼈대 · /healthz
2. @Valid → 400
3. @RestControllerAdvice → 404
4. 생성자 주입
5. @Transactional 롤백
6. N+1 세고 줄이기 → 06-queries.txt
7. @WebMvcTest 슬라이스
8. 정리 → 08-notes.md
참고
채점기는 프로젝트를 복사본에 옮겨 검사합니다. 여러분의 src 에
채점용 파일이 남지 않습니다.
단계 8개
- 프로젝트를 세운다
- 검증을 프레임워크에 맡긴다
- 예외를 한곳에서 상태 코드로
- 생성자 주입으로 바꾼다
- 묶음이 실패하면 전부 되돌린다
- 쿼리를 세고 줄인다
- 웹 층만 띄우는 테스트
- 보이지 않던 것 셋