본문 바로가기
Lecture/Grails

[Grails Part1-3] Scaffolding for Basic CRUD

by cusmaker 2014. 12. 16.
반응형

안녕하세요 cocy입니다.

저번  포스팅에는 Grails를 통해 hello world를 출력하는 부분까지 진행했는데요,

이번 포스팅에서는 Grails의 scaffolding 기능을 활용하여 간단한 CRUD를 구현(?) 생성(!) 해 보도록 하겠습니다.


scaffolding(스케폴딩) 이란 

건축에서 쓰이는 용어로 설명하자면 비계()라고 하며 

그 의 미는 "재료운반이나 작업원의 통로 및 작업을 위한 발판이 되며, ..."

[네이버 지식백과] 비계 [scaffolding, 飛階] (두산백과) 

라고 정의 되어 있습니다. 


그 말 그대로 개발에 필요한 발판이 되는 기본 CRUD를 생성해 주는 기능으로,

개발자가 반복되는 CRUD에 대한 부하를 줄이고 좀더 비지니스 로직 구현에 집중할 수 있게 하여

생산성을 높이기 위한 기능으로, ROR(루비온레일지)에서 차용한 기능입니다.

물론 커스터마이즈는 필요하겠죠?


두말할 필요 없이 간단한 게시판 먼저 생성해 보도록 하죠,

이번 포스팅은 철저히 실용성 위주로 진행하도록 하겠습니다.


먼저 게시판의 뼈대가 될 도메인을 정의해줍니다.

여기서 말하는 도메인이란, 기존 J2EE환경에서의 자바빈즈라고 생각하시면 됩니다.

JPA로 대표되는 ORM인 Hibernate를 사용하기때문에 도메인의 개념이 중요합니다.

Grails에서 사용되는 GORM을 다루기 위해서라도 다시한번 다른 자료들을 참고 하셔서 공부하시기 바랍니다.


간단히 게시판을 설계한다고 생각하고, 

컬럼들을 정의합니다.

제목, 작성자, 작성일, 내용, 조회수

이정도로 하고 도메인을 작성해봅시다.


프로젝트 > domain 우클릭 

 > New > Domain Class

 > board.Article


생성된 클래스에 다음과 같이 적어줍니다.

String subject

String writer

Date dateCreate

String content

Integer readCount

그루비에서는 세미콜론도, 셋터도 겟터도 생략가능합니다.


그다음은 static constraints = {} 라고 적혀있는 익명의 클로저 함수에

다음과 같이 제약사항을 적어줍니다.


subject blank : false

writer         blank : false

dateCreate         nullable:false

content maxSize:400

readCount         nullable:false



그러면 코드는 다음과같이 되어야합니다.



만드는 김에 컨트롤러도 만들어줍니다.

헷갈리지 않게 도메인과 동일하게 만들어보죠.


프로젝트 > domain 우클릭 

 > New > Controller Class

 > board.article


클래스명은 소문자로 시작해도 알아서 카멜 네이밍을 해줍니다.


만들어진 컨트롤러 클래스에 한줄을 추가해줍니다.

static scaffold = true

그리고 def index() {} 이부분은 주석처리를 해줍시다.


그럼 아래 그림처럼 나오겠죠?




이제 서버를 재시작해서 확인해보시면

아래의 그림처럼 간단한(?) CRUD가 완성됩니다.



확인해보시면 도메인 클래스에서 적어주었던 validation은 물론 데이터 타입에 맞추어 UI까지 제공해주고 있습니다.

어떻게 보면 전자정부와 비교가 되기도 하네요.


그런데 여기서 데이터는 어떻게 저장될까요?

간단히 설명드리면

Grails에서는 기본적으로 인메모리DB인 H2를 내장하고 있어,

서버가 재시작될때 도메인을 기준으로 모든 스키마 재생성 및 db접속 까지 한방에 해결합니다.

DB에 관한 정보를 확인하시려면 


프로젝트 > conf > DataSource.grooby


이 파일을 확인하시면 됩니다.


다음 포스팅에서는 스프링 시큐리티 플러그인을 활용하여 

간단한 권한설정 및 로그인 기능을 붙여 보도록 하겠습니다.

수고하셨습니다.