• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@ModelAttribute, @SessionAttribute name 속성 차이

23.09.20 15:42 작성 조회수 219

0

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

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

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
안녕하세요 강의를 보고 프로젝트에 적용 중 궁금증이 생겨서 해결한 문제가 있어서 옳은 결론을 낸 것인지 궁금하여 질문 드립니다.

 

@ModelAttribute는 name 속성을 작성하지 않을 경우 파라미터의 class 명의 첫글자를 소문자로 바꾼 후 적용한다고 강의에서 들었습니다. ex) @ModelAttribute LoginUser loginUser 일 경우 loginUser로 model에 저장.

 

@SessionAttribute를 사용하다가 무언가 이상해서 여러 테스트를 해보니 이 애노테이션은 name 속성을 사용하지 않았을 경우 클래스 명이 아닌 변수 이름을 사용하는 것으로 확인했습니다. ex) @SessionAttribute User loginUser 일 경우 loginUser로 session에 속성 값 저장.

 

제가 확인한 방법이 옳은 것인지, 틀리다면 어떤 것이 맞는지, 더 확인해야할 부분이 있는지 궁금합니다.

답변 2

·

답변을 작성해보세요.

2

David님의 프로필

David

2023.09.24

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

잘 확인하셨습니다:)

감사합니다.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.22

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

@ModelAttribute와 @SessionAttribute는 스프링 프레임워크에서 사용되는 애노테이션으로, 각각 모델에 바인딩하고 세션에 저장할 때 사용됩니다.

@ModelAttribute 애노테이션은 메서드나 메서드 매개변수에 적용할 수 있습니다. 메서드에 적용할 경우, 해당 메서드는 @ModelAttribute 애노테이션이 적용된 모델을 리턴하게 됩니다. 메서드 매개변수에 적용할 경우, 해당 매개변수가 모델에 바인딩됩니다. 이 때 name 속성이 작성되지 않을 경우, 파라미터의 클래스명의 첫 글자를 소문자로 변환한 이름으로 모델에 저장됩니다.

@SessionAttribute 애노테이션은 클래스나 메서드 매개변수에 적용할 수 있습니다. 클래스에 적용할 경우, 해당 클래스의 인스턴스가 세션에 저장됩니다. 메서드 매개변수에 적용할 경우, 해당 매개변수가 세션에 바인딩됩니다. 마찬가지로 name 속성이 작성되지 않을 경우 변수 이름을 사용하여 세션에 저장 또는 바인딩합니다.

따라서, @ModelAttribute와 @SessionAttribute의 name 속성 사용 여부에 따라 모델이나 세션에 저장되는 이름이 달라지는 것입니다.

바인딩하거나 모델에 저장해야 할 객체의 이름을 직접 지정하고 싶다면, name 속성을 사용하시면 됩니다. 그렇지 않은 경우에는 스프링이 자동으로 이름을 생성합니다.

혹시나 제가 말한 내용이 부정확하거나 추가로 궁금한 것이 있으면 다시 질문해주세요. 좋은 하루 되세요!