일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring
- 플레이 프레임워크
- kafka streams
- 한빛미디어
- Elasticsearch
- Logstash
- avo
- spring-cloud-stream
- springboot
- scala
- aws
- scala 2.10
- kafka interactive query
- kafkastream
- confluent
- coursera
- schema registry
- statestore
- enablekafkastreams
- reactive
- spring-batch
- kafkastreams
- 카프카
- play framework
- Elk
- gradle
- spring-kafka
- Slick
- Kafka
- RabbitMQ
- Today
- Total
b
플레이 프레임워크2 - 실전#3 ( 첫번째 CRUD ) 본문
간단한 화면도 DB를 이용한 CRUD 중 'C'를 학습해 보도록 하겠다 Play Framework는 기본적으로 H2를 임베딩하고 있기때문에 주석을 단3줄만 제거하는것으로 설정을 끝낼수 있다.
1. application.conf 의 수정
# Database configuration db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play"
# Ebean configuration ebean.default="models.*"
한줄 한줄 설명하기 보단 따라하다보면 언젠가는 이해할 수 있을 것이다.
기본 DB명을 [message] 로 정하고 위의 3줄을 입력하였다. (기존 주석 처리된 라인을 이용해도 된다)
default DB가 없이는 다른 Database name을 지정할 수 없다. 즉 첫 번째는 무조건 default이다. 아... 삽질이여 ㅠ_ㅠ
db.default.url="jdbc:h2:mem:play" 는 H2 디비 메모리 모드, 만약 파일로 설정할경우는
db.default.url="jdbc:h2:path_db_name.db" 처럼 사용하자
* 참고#1 : http://www.h2database.com/html/cheatSheet.html
2. .Model 생성
기본 프로젝트에서는 Models 패키지가 없으므로 app.models 패키지를 추가한다. 그리고 Message.java를 입력한다.
package models; import java.util.List; import javax.persistence.*; import play.data.validation.Constraints.Required; import play.db.ebean.Model; @Entity public class Message extends Model { @Id Long id; @Required String content; static Finder<Long, Message> find = new Finder(Long.class, Message.class); public Message(String content){ this.content = content; } public static List<Message> all(){ return find.all(); } public static Message findById(Long id){ return find.ref(id); } }
3. Routes 수정
GET / 는 필요없다고 삭제하는 그런 사소한 얘가 아니다. 얘는 나두고 한 줄 더 추가하자.
# Home page GET / controllers.Application.index() GET /list controllers.Application.getList()
4. Application.java의 수정
index()는 /list으로 리다이렉트 하도록 수정하고, /list에 매핑되는 Entry Point Method를 하나 작성하자.
package controllers; import java.util.List; import models.Message; import play.mvc.Controller; import play.mvc.Result; public class Application extends Controller { public static Result index() { return redirect(routes.Application.getList()); } public static Result getList(){ Listmessages = Message.all(); return TODO; } }
5. 중간 실행 단계
위의 코드를 정상적으로 작성하고 http://localhost:9000를 호출하면 아래와 같은 화면을 볼 수 있을 것이다.
붉은 화면이라고 해서 노여워하거 슬퍼하지 말고 Apply this script now! 버튼을 누른다. models의 해당 Model Object를 기반으로 DDL을 생성해 준다. 이후 return TODO로 작성을 하였기 때문에 TODO의 화면을 볼 것이다. 그리고 콘솔에서는 database [default]가 운영중인 메세지를 노출한다
[info] play - database [default] connected at jdbc:h2:mem:play
[info] play - Application started (Dev)
6. 간단한 View 파일의 생성
Application.java 의 getList() 를 수정해보자
public static Result getList(){ Listmessages = Message.all(); return ok(views.html.message.list.render(messages) ); }
다음 app/views/message 폴더에 list.scala.html 파일을 생성한다
@(messages: List[Message]) [html] [head][/head] [body] [h1]@if( messages.size() == 0) { No Message } else { @messages.size() POST(s) }[/h1] [/body] [/html]
먼가 Message 데이터가 없기 때문에 Size = 0 일꺼고, No Message 를 화면에 출력한다는것을 어렴풋이 생각할 수 있다.
message 폴더에 list.scala.html 이기 때문에 Action Method에서는 message.list.render(값) 으로 사용한다. 그리고 Action Method에서 넘어오는 인자들은 view page의 1라인에서 각 변수에 할당하여 사용하고 있다.
데이터가 없으니 이거 뭐 확인 할 길이 있나...? 더미 데이터를 한번 넣어보자.
application.conf 를 보면 아래 부분을 볼 수 있다.
# Global object class # ~~~~~ # Define the Global object class for this application. # Default to Global in the root package. # global=Globalroot package (app) 에 Global 이름으로 생성할 수도 있지만, 간지를 위해 #global=Global 을 global=InitSampleData 으로 수정하고 /app/InitSampleData.java 파일을 작성하자
import java.util.List; import java.util.Map; import models.Message; import play.Application; import play.GlobalSettings; import play.libs.Yaml; import com.avaje.ebean.Ebean; public class InitSampleData extends GlobalSettings { @Override public void onStart(Application app) { Map다음 conf/sample.yml 파일에 샘플 데이터를 입력한다> samples = (Map >)Yaml.load("sample.yml"); Ebean.save(samples.get("message")); } }
message: - !!models.Message id: 11 content: content from sample.yml #1 - !!models.Message id: 12 content: content from sample.yml #1
데이터 형식은 Yaml로 작성해야 하고, play.libs.Yaml.load(String fileName) 으로 로딩할 수 있다. 그리고 GlobalSettings 를 상속 받으면 application start-up / shut-down 에 작업을 할 수 있다.
(물론 application start-up될때마다 수행되므로, shut-down할때 삭제하던지 하는 방법등으로 중복 insert를 방지하는건 기본센스)
이제 실행해보면, 기본적으로 2개의 데이터가 있다는 결과 화면을 볼 수 있다~!
테스트 데이터를 넣는 방법은 Evolutions scripts 으로도 가능한데, 이건 다른 포스팅에서 작성한다.
추가.
SBT에서 [package-src]로 추출한 소스를 첨부한다. 받아서 jar를 푼다음, eclipsify 를 이용한다면 쉽게 볼 수 있을것이다.
tutorial_2.9.1-1.0-SNAPSHOT-sources.jar
'play framework' 카테고리의 다른 글
Play For Scala (0) | 2013.01.15 |
---|---|
플레이 프레임워크2 - 부가#2 ( Evolutions scripts ) (0) | 2012.07.31 |
플레이 프레임워크2 - 실전#2 ( 기본 웹어플리케이션 이해하기 ) (0) | 2012.07.24 |
플레이 프레임워크2 - 부가#1 ( 디펜던시 관리 ) (0) | 2012.07.24 |
플레이 프레임워크2 - 실전#1 (프로젝트 생성, Eclipse로 Import 하기) (1) | 2012.07.24 |