전략 1 : 확실한 관심사 분리 원칙
전략 2 : Bean Validation + 커스텀 유효성 검사
@PostMapping(path = "public")
public ResponseEntity<ChannelDto> create(@Valid @RequestBody PublicChannelCreateRequest request) {
ChannelDto createdChannel = channelService.create(request);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(createdChannel);
}
전략 3 : 불변 객체 설계
입력값 검증은 중복을 최소화하며 유지보수를 용이하게 해야 하면서도, 시스템의 무결성과 보안은 절대 포기할 수 없는 영역이다. 그렇기에 각 계층에 어떠한 검증을 둘 것인지 결정할 때 아래 항목과 같은 트레이드오프를 고려해야 한다.
결국 검증은 안정성, 성능, 유연성 사이의 문제이며, 각 계층의 책임을 명확히 정의하지 않으면 중복 또는 누락이라는 또 다른 문제가 발생할 수 있다.
입력값 검증은 단순히 @Valid를 붙이는 것이 아닌, 각 계층이 맡아야 할 책임을 명확히 정의하고 신뢰 가능한 시스템을 구축하는 기초작업이다. 모든 검증을 한 곳에서 처리하려는 쉬운 길을 택하기 보단 시스템의 무결성을 다중 계층에서 방어할 수 있도록 설계해보자🤗