Spring MVC 통합
Grails는 하부 웹 애플리케이션 프래임워크로서 Spring MVC를 활용하고 있습니다. 비록 Spring MVC가 가장 간결한 프래임워크는 아니지만, Spring MVC가 제공하는 확장성은 Grails의 목적에 완벽히 어울립니다. Grails 서블릿은 Grails 환경의 부트스트랩을 위해 Spring의 DispatcherServlet 을 확장하고 있고, 모든 Grails 콘트롤러의 요청을 처리하는 Spring MVC 콘트롤러인 org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController 의 인스턴스가 단 한개만 존재합니다.
SimpleGrailsController 는 요청을 org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper 로 전달하는데, 이 클래스가 실제로 요청을 처리합니다. 이 클래스는 HTTP 요청을 몇 단계로 나누어 처리합니다. 진입점은 handleUri 메서드인데, 다음과 같은 작업을 수행합니다:
- URI를 그 구성요소(콘트롤러 이름, 액션 이름, ID 등)로 분해
- URI에 해당하는 GrailsControllerClass 인스턴스를 새로 생성
- 콘트롤러 인스턴스의 동적 메서드 및 속성을 설정
- 콘트롤러의 스케폴딩 기능이 활성화되어 있는 경우 스케폴더(scaffolder)를 얻어옴
- URI에 대한 클로저 액션의 래퍼런스를 얻어옴
- 플래시 스코프를 다음 상태로 전진
- URI를 위한 뷰 이름을 얻어옴
- 등록된 before 인터셉터를 실행
- before 인터셉터가 false를 반환하지 않았으면 콘트롤러 액션에 대한 클로저를 실행
- 뷰 이름과 클로저 액션이 반환한 모델을 기반으로 Spring MVC의 ModelAndView 인스턴스를 생성
- 등록된 after 인터셉터를 실행
- Spring MVC의 ModelAndView 인스턴스를 반환