Grails CRUD Example을 찾아보다..
http://www.vogella.com/articles/Grails/article.html를 발견하고 따라한 내용을 정리하였습니다.
원문의 내용도 그리 어렵지 않기 때문에 그냥 해보셔도 좋을것 같습니다.
우선 이전포스트 http://devyongsik.tistory.com/645에서의 설정까지는 다 끝나있다고 가정합니다.
0. GGTS를 실행합니다.
1. 프로젝트 생성
- File -> new Project -> Grails Project를 선택하여, grails project를 생성합니다. 프로젝트 이름은 guestbook으로 합니다.
2. 도메인 클래스를 생성합니다. 여기서 사용되는 도메인 클래스는 3개입니다.
User, Feedback, Comment입니다. User는 Feedback을 작성하고, 하나의 Feedback은 여러개의 Comment를 가지는 구조가 됩니다. GGTS에서 grails command를 입력 할 수 있는 창을 띄워서 아래의 명령어를 통해 도메인 클래스를 생성합니다. 테스트 클래스까지 같이 생성됩니다.
create-domain-class com.tistory.devyongsik.guestbook.Feedback
create-domain-class com.tistory.devyongsik.guestbook.User
create-domain-class com.tistory.devyongsik.guestbook.Comment
3. 생성된 도메인 클래스를 아래와 같이 수정합니다. 기본적인 필드값과 Relationship 그리고 validation을 추가합니다.
User는 relationship 설정이 없으며, Feedback은 hasMany로 여러 Comment가 연결됨을 보여주고 있습니다.
Comment에서는 belongsTo로 Feedback이 연결되어있는데 이는 연결된 Feedback이 삭제될때 Comment도 모두 같이 삭제됨을 나타냅니다.
각 필드의 기본적은 validation조건은 static constraints에 설정됩니다. 꽤 많네요.... 음...
참, Comment의 user (nullable: true) 조건에 의해서 Comment는 User가 없어도 작성 할 수 있습니다.
4. Dynamic Scaffolding을 이용하여 Controller를 생성합니다. grails command 입력창을 띄워서 아래의 명령어를 입력합니다.
generate-controller com.tistory.devyongsik.guestbook.User
generate-controller com.tistory.devyongsik.guestbook.Feedback
generate-controller com.tistory.devyongsik.guestbook.Comment
그러면 각 controller가 생성되는데 각 controller 맨앞에 아래의 코드를 추가합니다.
def scaffold = true
위 구문에 의해서 grails runtime에 각 도메인 클래스를 기반으로한 CRUD 인터페이스 (view)가 생성됩니다.
또한 generate와 create의 차이점은 create는 거의 빈 컨트롤러가 생성되는반면 generate는 CRUD기능을 기본적으로 모두 가지고 있는 형태의 컨트롤러가 만들어집니다.
5. 이제 서버를 구동하고, http://localhost:8080/guestbook에 접속합니다.
서버 기동방법은 grails command 창을 띄우고, 프로젝트를 guestbook으로 선택한 다음에 run-app을 치고 실행합니다. 그리고, 화면에 나타나는 Controller 중 FeedbackController를 클릭합니다.
CRUD 기능이 추가된 웹 어플리케이션이 완성되었습니다. -_-; 참 쉽죠잉...~
아마 따라해보시면 실제 화면에는 위와같이 데이터가 존재하지 않을것입니다. Grails는 bootstrap.groovy를 통해서 테스트 데이터를 미리 만들어 놓을 수 있도록 할 수 있습니다.
6. ~/conf/BootStrap.groovy
7. 데이터 저장
- 기본적으로 위와 같이 웹어플리케이션을 실행하면 데이터가 서버의 runtime과 주기를 함께합니다.영구적으로 저장을 하고 싶으면 아래의 명령어로 서버를 기동하면 서버가 restart되어도 데이터가 남아있게 됩니다.
8. static scaffolding
- dynamic scaffolding은 Controller에 def scaffold = true 설정으로 자동으로 gsp가 생성되지만, static scaffolding을 사용하면 명시적으로 gsp 파일을 생성시킬 수 있습니다.
아래의 명령어를 실행합니다.
generate-views com.tistory.devyongsik.guestbook.Feedback
generate-views com.tistory.devyongsik.guestbook.User
generate-views com.tistory.devyongsik.guestbook.Comment
그러면 아래와 같이 gsp들이 생성됩니다.
그리고, 컨트롤러에 작성하였던 def scaffold = true 구문을 삭제합니다.
이제 gsp 파일을 통해 view를 커스터마이즈 할 수 있습니다.
느낌 :
CRUD 자체는 간단하게 구현해볼 수 있습니다. ROR같은 느낌이 많이 나는데요..
베이스가 자바여서 그런지... 기본적인 Configuration은 잘 되어있지만, 좀 손을 데려고하면 역시 설정 지옥이 기다리고 있을지도 모르겠다는 생각이듭니다. 이클립스에 생성된 프로젝트만봐도.. 뭐가 좀 많아 보여요.
그래도 스프링소스가 밀고 있는 Groovy 베이스이고.... 문법이 친숙하다는것은 상당한 메리트가 있을것 같습니다.