피드로 돌아가기
Using Symfony Forms as Controller Arguments with #[MapRequestToForm]
Dev.toDev.to
Backend

Attribute 기반 Symfony Form 자동 매핑으로 컨트롤러 보일러플레이트 제거

Using Symfony Forms as Controller Arguments with #[MapRequestToForm]

AzYouness2026년 6월 6일7intermediate

Context

REST API 개발 시 Request 데이터를 Entity로 변환하기 위해 Form 생성, Submit, Validation, Data Mapping 과정을 매 컨트롤러에서 반복하는 중복 로직 발생. DTO를 통한 수동 매핑 방식은 Entity 구조와 일치하는 요청 처리 시 불필요한 변환 코드와 보일러플레이트를 양산하는 한계 존재.

Technical Solution

  • #[MapRequestToForm] Attribute를 도입하여 컨트롤러 인자 주입 단계에서 Form 처리 로직을 자동화한 구조 설계
  • Symfony의 ValueResolver 메커니즘을 활용해 EntityValueResolver로 객체를 먼저 식별한 뒤 Request 데이터를 Form에 Submit 하는 순차적 데이터 흐름 구축
  • FormType의 data_class 설정을 통한 Form Type 자동 추론 로직으로 명시적 타입 지정 최소화
  • PATCH 요청 시 clearMissing 옵션을 제어하여 부분 업데이트(Partial Update)를 지원하는 유연한 매핑 전략 적용
  • FormValidationFailedException을 통한 중앙 집중식 유효성 검증 실패 처리 및 HTTP 에러 응답 구조 일원화

- Request 구조가 Entity와 밀접할 경우 DTO-Entity 간 수동 매핑 대신 Form Component 활용 검토 - Controller Argument Resolver의 실행 순서를 제어하여 기존 객체 조회 후 데이터 업데이트 수행 가능 여부 확인 - API 전역의 Validation 로직을 Attribute 기반으로 추상화하여 비즈니스 로직과 인프라 로직 분리 시도

원문 읽기