스프링 MVC에서 모델(model)이란

컨트롤러에 의해 비즈니스 로직이 수행되고 나면 대체로 사용자에게 반환되어 브라우저에 표시될 정보가 만들어진다. 이런 정보를 모델(model)이라고 한다. 이 정보를 보통 JSP에 해당하는 뷰(view)로 보낸다.

출처 - 스프링 인 액션 3판 p221


@SessionAttributes 가 해주는 기능은 두 가지다. 

첫째, 컨트롤러 메소드가 생성하는 모델정보 중에서 @SessionAttributes 에 지정한 이름과 동일한 것이 있다면 이를 세션에 저장해 준다. 

두 번째로 @SessionAttributes 가 해 주는 일은 @ModelAttribute 가 지정된 파라미터가 있을 때 이 파라미터에 전달해줄 오브젝트를 세션에서 가져오는 것이다.


출처 - 토비의 스프링 3.0


===================================================================================

Model 객체 전달 방식에 대해서만 말씀 드리면,, 

Controller에서 사용하는 (Servlet)Model 객체를 Service로 전달하는 것은 비추구요.. 

Controller에서 사용하는 (Servlet)Model은 Controller와 View Page 간에 전달용으로 사용하시고, 

Controller - Service - DAO (Repository) 에 두루 걸치는 모델 객체는 별도의 

(Service)Model(또는 DTO)을 

작성해서 사용하시고,, (두 Model의 용도가 다르기 때문에..) 

Controller에서 (Service)Model과 (Servlet)Model을 binding (한쪽 Model의 필요한 속성들을 

다른 쪽 Model에 전달하는 과정)해서 사용하시는 걸 권장드립니다. 

Model binding 관련해서는,, Map의 values들을 전달해주는 라이브러리 등도 있으니 확인해보시기 바랍니다. 

앞에서 설명 드린 방식은 (설계적으로) 원론적이며 이상적으로 권고해드리는 내용이며, 

실제 상황에 따라 업무 효율에 크게 차이가 난다면, 편의적으로 처리하는 것도 가능하지 않을까하는 

의견입니다. ^^;


다른 분들이 말씀하신 것처럼 도메인 계층이 클라이언트 계층(WEB, REST API, 

WS 등)에 의존하는 상황은 금물입니다. 

가능한 서비스를 원자적인 수준으로 잘게 나누고 컨트롤러에서 여러번 호출하 

도록 처리하는 편이 좋겠습니다. 

반드시 한 서비스에서 두 가지 값을 반환해야 한다면 최윤석(mOer)님 말씀처 

럼 DTO를 만들어 이 객체에 담아 반환하는 방법이 자바쪽의 정석이겠죠. 

해당 DTO가 특정 용도로 한번만 사용된다면 DTO를 만드는 것이 부담되고 낭비 

로 느껴지기 때문에 Map, List, 배열 등에 담아 사용하기도 합니다.하지만 이 

럴 경우엔 타입 확인이 안 되는 문제가 있습니다. 담는 값이 모두 같은 타입 

이라면 지네릭을 사용해서 타입 확인이 되도록 할 수 있지만 타입이 다르다면 

컴파일러가 타입을 확인하도록 할 수 없습니다. 

스칼라라는 언어에서는  이럴 때 쓰라고 Tuples라는 특수 목적의 자료구조를 

가지고 있습니다. n개의 객체를 간단하게, 타입 확인도 되면서, 한 묶음으로 

묶어 메서드에 전달하거나 반환할 수 있습니다. 

http://codemonkeyism.com/tuples-scala-goodness/ 

제가 전에 자바용으로 만들어 놓은 것이 있어 좀 전에 github에 올려놨으니 

혹시 필요하면 참고하세요. 

https://gist.github.com/2299564 



출처 - http://www.ksug.org/153


'Framework & Platform > Spring' 카테고리의 다른 글

spring - annotation 2  (0) 2012.05.09
spring - annotation 1  (0) 2012.05.09
Spring - @Controller  (0) 2012.05.09
Spring - @RequestMapping  (0) 2012.05.09
Spring MVC Deprecated API  (0) 2012.05.08
Posted by linuxism
,