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 베이스이고.... 문법이 친숙하다는것은 상당한 메리트가 있을것 같습니다.


Posted by 용식

오늘 회사에서 현기형이 갑자기 "아! 아무래도 루비를 공부해야겠어!" 라고 한탄(?)을 하셨다.

이유를 여쭤보자 프로토타입을 개발하는데 이걸 자바로 하려니 셋팅하고, JPA에서 DB 스킴이 하나 바뀌면

어노테이션을 하나하나 다 바꿔주고 있는게 짜증난다고 하셨다. ㅋㅋ 프로토타입 웹앱 개발은 좀 빠르게..  특히!!! active record pattern을 사용할 수 있었으면 좋겠고... 정말 애자일스럽게 해야겠다고 하시면서... ROR을 스터디하자고 하셨는데, 빌리형께서 ROR은... 너무 훅 갔으니까 다른건 어떨까요? 라고 말씀을 하시면서.. 물망에 오른..


django, grails, play .... 이중 하나를 골라 팀스터디를 해보기로 했다. 물론 각자 조금씩 공부해보고..

의견을 모아보는것으로..


나는 그중에.. 최근에 공부했던게 groovy라 우선 이걸 try 해보기로.... 목표는 간단한 crud를 만드는 것이지만...

일단 설치 및 IDE 셋팅, 그리고 테스트 페이지 띄우는걸 해보며 정리해본다.


JAVA는 이미 설치가 되어있고 PATH에 잡혀있는 것으로 가정한다. 

export JAVA_HOME=$(/usr/libexec/java_home)


1. groovy 설치

 - 이 과정이 선행되어야 하는지는 잘 모르겠으나 (grails에 포함되어 있을지도 모르겠음...), 일단 내 Mac에는 설치가 되어있었다. 

 - http://groovy.codehaus.org/에서 다운로드 받는다. 

 - 내가 받은 버전은 2.1.7

 - .bash_profile에 GROOVY_HOME설정 후 export


2. grails 설치

 - http://grails.org/ 에서 다운받는다.

 - 최신버전은 2.3.0이지만, 2.2.4 버전을 다운받자.

 - 이유는 다음단계에서 springsource에서 제공되는 Groovy & Grails Tool Suite을 설치할텐데 이 GGTS의 버전이 3.3.0이고 grails 2.3.0에서는 groovy compile 에러가 발생한다.

 - .bash_profile에 GRAILS_HOME 설정 후 export


2번까지만 진행해도 console에서 테스트 페이지를 띄울 수 있다. 아래와 같이 해보자.

1) grails create-app test

     Created Grails Application at /Users/need4spd/Programming/grails/grails-2.3.0/test

2) cd test

3) grails run-app

4) | Compiling 10 source files

    | Compiling 130 source files

    | Server running. Browse to http://localhost:8080/test

5) web browser에서 위 url로 접근

6) grails-app/views/index.gsp 페이지가 열린다.


3. Groovy & Grails Tool Suite 설치

 - http://www.springsource.org/downloads/sts-ggts 에서 download

 - version은 3.3.0

 - MAC OSX용 dmg를 받아서 install


여기까지만하면 이제 테스트를 해볼준비가 되었다. GGTS를 실행하면 workspace를 설정하라고 나온다. 편한대로 설정하자. 그러면 아래와 같은 화면이 나올것이다.




1) File -> New -> Grails Project 선택


2) 그러면 아래와 같은 화면이 나오는데, 처음에는 grails configuration이 되어있지 않을것이므로, 아래 링크를 클릭하여 grails홈을 설정하여준다. 앞서 언급한대로 2.2.4 버전으로 설정해주면 된다.


3) grails 설정화면



4) 프로젝트명을 입력하고 grails프로젝트를 생성한다. 여기서는 testapp으로 이름을 지었다. 


5) 프로젝트가 생성된 화면



6) 여기까지가 console에서 grails create-app testapp 이랑 비슷하다고 보면 될것 같다. 


7) 서버를 기동하여 index.gsp 페이지를 띄워보자. 우선, 아래의 버튼을 클릭한다.



8) 그러면 command를 입력 할 수 있는 작은 창이 뜬다. 여기서, 프로젝트를 testapp으로 선택하고 run-app이라고 친 후 enter를 치면, 서버가 기동된다.



9) 테스트 페이지 접근 (https://localhost:8080/testapp)



10) controller를 만들어보자. 다시 console을 띄워 다음의 명령어를 입력한다.

"create-controller com.tistory.devyongsik.Hello"


11) cotroller가 아래와 같이 생성되었다.



12) 코드를 아래와 같이 입력하자.



13) https://localhost:8080/testapp으로 다시 접근해보면 새로 생성한 controller 리스트가 보인다. 물론 별도의 재기동 절차는 필요없다.



14) 화면의 contoller를 클릭하면 아래와 같은 화면이 나타난다.

url을 보면 http://localhost:8080/testapp/hello/index로 되어있다. testapp은 프로젝트명이고 (app이름) hello는 controller의 prefix이다. 그리고 index는 Controller에 정의한 index() 메서드이다. 음? 그렇다면? 그렇다.. url을 

http://localhost:8080/testapp/hello/testPage로 접근해보면.... 



이렇게 나온다.


다음엔 CRUD를 공부해야겠다... grails.. 근데 국내 서적이 없다.. ;;;;;;


Posted by 용식
TAG grails