Day 47 - Validation

haxxru log;·2026년 5월 8일
post-thumbnail

이 글은 2026년 05월 08일 작성된 글입니다.

오늘은 Spring MVC 폼 처리와 Validation, MySQL 전환과 트랜잭션 흐름까지 정리했다.


1. 폼 = URL 생성기

폼은 사용자가 복잡한 URL을 쉽게 만들 수 있도록 도와준다.

<form action="/posts/doWrite">

2. 글 작성 폼 구현

엔드포인트:

/posts/write

폼 전송:

/posts/doWrite

3. GET 대신 POST 사용

<form method="POST">

GET은 조회, POST는 생성 목적에 더 적합하다.


4. HTTP 메소드

메소드역할
GET조회
POST생성
PUT수정
DELETE삭제

5. 멱등성

같은 요청을 여러 번 보내도 결과가 같으면 멱등성이 있다고 한다.

  • GET → 보통 멱등성 O
  • POST → 보통 멱등성 X

6. Validation 도입

implementation("org.springframework.boot:spring-boot-starter-validation")

7. 선언적 유효성 검사

@NotBlank
@Size(min = 2)
private String title;

if문 대신 어노테이션 기반으로 검증 가능하다.


8. @ModelAttribute

@ModelAttribute WriteForm form

폼 데이터를 객체로 자동 바인딩한다.


9. @Valid

public String doWrite(@Valid WriteForm form)

폼 객체 검증 자동 수행.


10. BindingResult

public String doWrite(
    @Valid WriteForm form,
    BindingResult bindingResult
)

검증 실패 후 흐름을 직접 제어할 수 있다.


11. MarkdownService 도입

@Service
public class MarkdownService {
}

Markdown 관련 로직을 서비스 계층으로 분리했다.


12. MySQL 전환

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_dev

개발 환경 DB를 H2에서 MySQL로 변경했다.


13. Docker 기반 MySQL 실행

docker run --name mysql-1 -p 3306:3306 -d mysql

14. @Transactional

@Transactional
public void delete() {
}

여러 DB 작업을 하나의 트랜잭션으로 묶는다.


15. HikariCP autocommit

spring.datasource.hikari.autocommit: false

불필요한 autocommit 쿼리를 줄일 수 있다.


✅ 정리

  • Spring Validation을 사용하면 선언적으로 유효성 검사를 처리할 수 있다.
  • BindingResult를 이용하면 검증 실패 이후 흐름을 직접 제어할 수 있다.
  • MySQL과 Docker를 통해 실제 서비스와 비슷한 개발 환경을 구성할 수 있었다.
  • @Transactional은 여러 DB 작업을 하나의 단위로 처리하는 핵심 기능이다.

0개의 댓글