LabHub

Spring Boot — 쿼리가 몇 개 나가는지 세어 본다 · 보이지 않는 것들 · 실습

목록 하나에 쿼리 301개

LabHub 에서 이어서 보기

목표

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개

  1. 프로젝트를 세운다
  2. 검증을 프레임워크에 맡긴다
  3. 예외를 한곳에서 상태 코드로
  4. 생성자 주입으로 바꾼다
  5. 묶음이 실패하면 전부 되돌린다
  6. 쿼리를 세고 줄인다
  7. 웹 층만 띄우는 테스트
  8. 보이지 않던 것 셋