행복한 아빠

[Grails1.0 사용자 가이드] 16. Scaffolding 본문

Grails

[Grails1.0 사용자 가이드] 16. Scaffolding

행복한아빠 2008. 3. 12. 13:54


16. Scaffolding

Scaffolding으로 주어진 도메인 클래스를 위한 다음을 포함한 전체 애플리케이션을 자동 생성할 수 있다.

  • 필요한 뷰들
  • create/read/update/delete (CRUD) 연산을 위한 컨트롤러 액션들


Scaffolding 사용하기
Scaffolding을 사용하는 가장 간단한 방법은 scaffold 속성을 통해 scaffolding을 활성화하는 것이다. Book 도메인 클래스를 예로 들면 컨트롤러의 scaffold 속성을 true로 설정해야 한다.

class BookController {
    def scaffold = true
}

위 예제가 동작하는 것은 BookController가 Book 도메인 클래스와 동일한 명명규칙(naming convention)을 따르기 때문이다. 만일 다른 도메인 클래스를 scaffold하고 싶을 경우 scaffold 속성에 특정 도메인 클래스를 지정할 수 있다.

def scaffold = Author

그런 다음 Grails 애플리케이션을 실행하면 실행시간에 필요한 액션들과 뷰들을 자동으로 생성한다. 다음 액션들은 실행시간 scaffolding 메커니즘에 의해 동적으로 구현되는 것들이다.

  • list
  • show
  • edit
  • delete
  • create
  • save
  • update

이것과 함꼐 CRUD 인터페이스도 생성될 것이다. 간단히 http://localhost:8080/app/book로 가면 위 예제의 인터페이스를 접근할 수 있다.

만일 도메인 모델을 자바와 Hibernate 매핑으로 작성하는 것을 선호한다면 간단히 필요한 클래스를 임포트하고 scaffold 속성을 해당 자바 클래스로 설정하여 scaffolding을 사용할 수 있다.

동적 Scaffolding
scaffold 속성을 사용할 때 Grails는 이것을 위해 코드 템플릿이나 코드 생성 방법을 사용하지 않는다. 따라서 scaffold 컨트롤러에 scaffold 액션과 함께 당신의 고유 액션들을 추가할 수 있다. 예를 들면 아래 예제에서, changeAuthor는 실제 물리적으로 존재하지 않는 show 액션으로 리다이렉트한다.

class BookController {
    def scaffold = Book
    def changeAuthor = {
        def b = Book.get( params["id"] )
        b.author = Author.get( params["author.id"] )
        b.save()        // redirect to a scaffolded action
        redirect(action:show)
    }
}

필요하다면 scaffold된 액션을 당신의 고유한 액션으로 재정의(override)할 수 있다.

class BookController {
    def scaffold = Book
    // 저자와 책 둘 다 반환하도록 액션을 재정의
    def list = {
        [ "books" : Book.list(), "authors": Author.list() ]
    }
}

이 모든 것이 CRUD 인터페이스를 실행시간에 동적으로 생성하는 "동적 scaffolding"으로 알려진 것이다. Grails는 또한 다음 장에서 논의할 "정적" scaffolding도 지원한다.

생성된 뷰를 수정하기
Grails는 유효성 검사와 제약조건을 적합시킨 지능적인 형태의 뷰를 생성한다. 예를 들면, 간단히 빌더의 constraints를 재정렬하여 뷰에 나타나는 필드 순서를 변경할 수 있다.

def constraints = {
    title()
    releaseDate()
}

또는 inList 제약조건을 사용하여 텍스트 입력 대신 list를 생성할 수 있다.

def constraints = {
    title()
    category(inList:["Fiction", "Non-fiction", "Biography"])
    releaseDate()
}

또는 숫자에 대해 range 제약조건을 사용한다.

def constraints = {
     age(range:18..65)
}

제약조건을 통해 size를 제한하면 생성된 뷰에 얼마나 많은 문자를 입력할 수 있는지 제한하는 효과를 낼 수도 있다.

def constraints = {
    name(size:0..30)
}


컨트롤러와 뷰 생성하기
위의 scaffolding 특징들이 유용하기는 하지만 실세계 상황에서는 로직과 뷰를 수정하기를 원할 것이다. Grails에서 명령행을 통해 컨트롤러와 뷰들을 생성할 수 있다. 컨트롤러를 생성하기 위해서는 다음과 같이 입력한다.

grails generate-controller Book

또는 뷰를 생성하기 위해서는 다음과 같이 입력한다.

grails generate-views Book

또는 모든 것을 생성하기 위해서는 다음과 같이 입력한다.

grails generate-all Book

도메인 클래스가 패키지에 있거나 Hibernate로 맵핑된 클래스로 생성하기 위해서는 완전한 패키지 이름을 포함하는 것을 기억하라.

grails generate-all com.bookstore.Book

---
원문: 16. Scaffolding
0 Comments
댓글쓰기 폼