작성
·
188
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
/api/v1/members 에서는 NotEmpty를 멤버 클래스에서 적용함
public class Member {
~~ 중략
@NotEmpty
private String name;
~~ 중략
}
/api/v2/members 를 테스트 하면서 멤버 클랫스에서는 @NotEmpty 를 제거하고 MemberApiController 내부에 이너 DTO 클래스에 @NotEmpty 속성을 넣으면 API 에서 빈값을 넣어도 그냥 통과시켜 버립니다.
public class Member {
//중략
private String name; //@NotEmpty 제거
//중략
}
public class MemberApiController {
//중략
@Data
static class CreateMemberRequest {
@NotEmpty
private String name;
}
//중략
}
강사님의 의도는 V2가 엔티티에 독립성은 보장 프레젠테이션 레이어의 체크 사항을 엔티티 레벨로 가져오지 않고 DTO를 사용하여 결합을 느슨하게 하려고 보이는데 그러한 의도로 코드 수정하면 원하는 결과가 나오지 않습니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용을 바탕으로 답변드리겠습니다.
@NotEmpty
애노테이션은 Bean Validation API의 일부로, 해당 필드가 null이 아니며 길이가 0이 아닌 문자열을 포함하고 있어야 함을 나타냅니다. DTO 내부에 @NotEmpty
를 사용했음에도 값이 통과되는 것으로 보아, Controller 레벨에서 Bean Validation이 제대로 활성화되거나 적용되지 않은 것 같습니다.
스프링에서는 @Valid
또는 @Validated
애노테이션을 통해 Controller 내의 메서드 파라미터에 대한 검증을 활성화할 수 있습니다. Controller 메서드에서 DTO를 파라미터로 사용하실 때, 해당 DTO 앞에 @Valid
또는 @Validated
애노테이션을 붙여주셨는지 확인해보세요.
예를 들어, @NotEmpty
애노테이션이 있는 DTO를 사용하는 Controller 메서드는 다음과 같이 작성될 수 있습니다.
@PostMapping("/api/v2/members")
public ResponseEntity createMember(@Valid @RequestBody CreateMemberRequest request) {
// 메서드 구현
}
위의 코드에서 @Valid
애노테이션은 CreateMemberRequest
객체에 대한 검증을 활성화하여, @NotEmpty
와 같은 Bean Validation 애노테이션이 적용된 필드에 대해 검증을 수행하게 합니다. 만약 검증에 실패할 경우, 메서드는 실행되지 않고, 스프링은 기본적으로 검증 실패 정보를 담은 응답을 반환합니다.
검증이 제대로 적용되고 있는지 확인하는 한 가지 방법은, Controller 메서드의 실행 여부를 로깅을 통해 확인하는 것입니다. 만약 Controller 메서드가 호출되지 않았다면, 검증에서 실패하여 메서드 호출 자체가 차단된 것일 수 있습니다.
Bean Validation과 @Valid
, @Validated
의 사용에 대한 확실한 적용을 원하시면, 스프링 공식 문서 또는 인프런의 스프링 관련 강의를 참고하시는 것이 좋습니다.