인프런 커뮤니티 질문&답변

김윤식님의 프로필 이미지
김윤식

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

Bean Validation - 시작

Item 객체가 Bean으로 등록되는 이유?

해결된 질문

작성

·

406

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

안녕하세요 Validation 공부중에 질문드립니다.

Item 객체의 경우 현재 @Data Annotation만 있을 뿐, ItemRepository가 @Repository Annotation으로 Bean에 등록되어있는것 까지는 이해가 되나

 

violation = ConstraintViolationImpl{interpolatedMessage='공백일 수 없습니다', propertyPath=itemName, rootBeanClass=class hello.itemservice.domain.item.Item, messageTemplate='{javax.validation.constraints.NotBlank.message}'}

violation.getMessage() = 공백일 수 없습니다

violation = ConstraintViolationImpl{interpolatedMessage='9999 이하여야 합니다', propertyPath=quantity, rootBeanClass=class hello.itemservice.domain.item.Item, messageTemplate='{javax.validation.constraints.Max.message}'}

violation.getMessage() = 9999 이하여야 합니다

violation = ConstraintViolationImpl{interpolatedMessage='널이어서는 안됩니다', propertyPath=price, rootBeanClass=class hello.itemservice.domain.item.Item, messageTemplate='{javax.validation.constraints.NotNull.message}'}

violation.getMessage() = 널이어서는 안됩니다

 

다음 로그 기록에서 rootBeanClass에 Item 객체가 있다는 것은 Item 객체도 Spring Bean으로 등록되어있는 것으로 이해했습니다.

스프링 기본 원리를 다시 쭉 살펴봤는데 애노테이션이 필요하지 않는 경우는 상속을 통한 자동등록이나 수동등록의 경우 빈으로 등록되는걸로 알고있는데요, 저 경우는 왜 자동으로 등록되는것이지 고견 부탁드리겠습니다! 감사합니다!

답변 2

2

안녕하세요. 김윤식님, 공식 서포터즈 David입니다.

Bean Validation에서 언급되는 bean은 java bean을 말합니다.

스프링에서 컨테이너에 등록하여 사용하는 bean과는 다른 것입니다.

감사합니다.

김윤식님의 프로필 이미지
김윤식
질문자

으악 그러면 밑의 AI의 답변이 문제가 있는것인가보네요 정정해주셔서 감사합니다

큰일날뻔했네요 ㅠㅠ

-1

안녕하세요, 인프런 AI 인턴이에요.

Item 객체가 Bean으로 등록되는 이유는 스프링 컨테이너에서 해당 객체를 관리하고 사용할 수 있도록 하기 위해서입니다. 스프링의 IoC (Inversion of Control) 컨테이너는 관리하는 객체들을 Bean으로 등록하여 필요한 곳에서 주입하거나 사용할 수 있도록 합니다.

@Bean 애노테이션은 스프링에서 빈을 등록하기 위한 애노테이션입니다. @Repository 애노테이션은 스프링에서 데이터 액세스 예외를 처리하는 데 사용되는 애노테이션입니다. 따라서, ItemRepository에 @Repository 애노테이션을 사용하는 것은 스프링이 해당 클래스를 빈으로 등록하고 데이터 액세스 예외를 처리할 수 있도록 하는 것입니다.

또한, @Data 애노테이션은 롬복(Lombok)이 제공하는 애노테이션으로, 자바의 POJO 클래스를 쉽게 작성할 수 있도록 도와줍니다. @Data 애노테이션을 사용하면 자동으로 필드, 생성자, getter, setter, toString 등의 메서드를 생성해줍니다.

따라서, Item 클래스에 @Data 애노테이션이 있고, ItemRepository 클래스에 @Repository 애노테이션이 있는 경우 해당 클래스들은 스프링 컨테이너에서 빈으로 등록되어 관리되며, 필요한 곳에서 주입해서 사용할 수 있게 됩니다.

추가로, 질문 중 validation 관련한 내용에 대해서는 조금 더 구체적인 정보가 필요한데요, 예외 메시지에서 “공백일 수 없습니다”라는 메시지를 보고 유효성 검사 조건을 충족시키지 못했을 때 발생하는 메시지인 것 같습니다. 이 부분에 대한 자세한 내용이 필요하시면 해당 부분에 대해서 자세히 알려주세요.

더 도움이 필요하시면 언제든지 물어보세요. 감사합니다.

김윤식님의 프로필 이미지
김윤식
질문자

아 @Data도 빈으로 등록되나보네요 감사합니다

김윤식님의 프로필 이미지
김윤식

작성한 질문수

질문하기