일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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-cloud-stream
- spring-batch
- Logstash
- Elk
- play framework
- confluent
- 카프카
- 플레이 프레임워크
- kafkastreams
- RabbitMQ
- Kafka
- kafka streams
- enablekafkastreams
- Spring
- spring-kafka
- avo
- springboot
- coursera
- gradle
- 한빛미디어
- Slick
- schema registry
- statestore
- kafkastream
- Elasticsearch
- scala 2.10
- kafka interactive query
- scala
- reactive
- aws
- Today
- Total
b
플레이 프레임워크2 - 실전#2 ( 기본 웹어플리케이션 이해하기 ) 본문
1. 기본 프로젝트 실행하기
C:\workspace_spring3\tutorial>play new tutorial
커맨드로 tutorial 이름을 가지는 java 프로젝트를 생성하였다.
C:\workspace_spring3\tutorial>play
[info] Loading project definition from C:\workspace_spring3\tutorial\project
[info] Set current project to tutorial (in build file:/C:/workspace_spring3/tutorial/)
_ _
_ __ | | __ _ _ _| |
| '_ \| |/ _' | || |_|
| __/|_|\____|\__ (_)
|_| |__/
play! 2.0.2, http://www.playframework.org
> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.
[tutorial] $ run
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on port 9000...
(Server started, use Ctrl+D to stop and go back to the console...)
이후 Play Command Line에서 [run]을 실행하면 하단의 메시지 처럼 9000 port에서 서버가 실행되었다는 메세지를 확인 할 수 있다. (Ctrl + D를 통하여 Play Command Line으로 복귀 할 수 있으며, 다양한 작업을 수행 할 수 있다)
http://localhost:9000 에서 해당 서버의 실행 모습을 확인 할 수 있다. 해당 웹어플리케이션은 Play framework가 제공하는 기본 skeleton code가 근본이며, 이것을 실행하고 해당 내용을 읽는 정도로도 많은 부분을 파악 할 수 있을 것이다.
2. 기본 Controller
위치 : conf 폴더의 routes 파일
# Home page
GET / controllers.Application.index()
Get Method로 / URL에 접근하면, controllers.Application.index()를 Action Method로 인지하여, 해당 메소드를 수행한다. 해당 메소드는 app/controllers 폴더에 Application.java 내에 위치하고 있다.
package controllers;
import play.*;
public class Application extends Controller {
public static Result index() {
return ok(index.render("Your new application is ready."));
}
}
CoC ( Convention Over Configuration ) 는 설정이상, 설정을 넘은 관례라고 생각할 수 있다. 개발자가 일일히 지정해야 하는 설정이 아닌 관례를 따른다면, 많은 결정들을 하지 않고 단순함과 유연함을 추구할 수 있다. 많은 부분에서 이러한것을 확인 할 수 있을 것이다.
예로, Get /main 으로 접근하는 페이지를 추가해보록 하자.
routes 에 1줄 추가
# Home page
GET / controllers.Application.index()
GET /main controllers.HelloApplication.main()
app/controller/HelloApplication.java 파일 생성후 입력
public class HelloApplication extends Controller {
public static Result main(){
return TODO;
}
}
a. Action Method는 public static 이어야 하는점
b. routes의 Action Method정의 부분은 JavaClass.MethodName 호출하는 것은 어떤 설정이 아닌, 원래 그렇게 하기 때문이다.CoC
코딩을 완료한후 http://localhost:9000 을 다시 브라우저에서 확인해보면 (Ctrl+D를 누르고 Clean->Compile->Run 해도 되지만, Play의 강점중 하나는 그러한 서버 재시작을 안하는거다!)
Console에는 아래의 메시지가 나타나고
--- (RELOAD) ---
[info] play - Application started (Dev)
아래의 기본적은 TODO layer를 확인할 수 있다. 아래페이지는 어떻게 만드냐고 고민하지 말자. 기본적으로 return TODO로 볼수 있고 해당 템플릿은 play-2.0.2\framework\src\play\src\main\scala\views\defaultpages 에 위치한다.
3. 기본 View
기본 View 파일들은 app/views 폴더에 위치 한다 물론, 자바의 package처럼 폴더를 이용하여 패키징 할수 있다. 기존에 Play Framework가 Groovy를 템플릿언어로 이용하였다면, 2.0에서는 Scala를 완전히 흡수하여, 기본 언어 및 템플릿 언어로 사용한다. 그 이유일까? suffix는 .scala.html으로 따르면 된다
사용자의 요청에 의해서(GET /)에 의하여 Application.java 의 index() 펑션을 호출하게 되는데 뷰 파일명.redner(arguments) 형식으로 랜더링할 뷰파일을 정할 수 있다.
Eclipse에서 쓰다보면 신기하다. 단순히 Text 파일인데 이클립스의 Java Editor는 코드 어시스트를 계속 지원해준다. 해당 index.scala.html은 target/scala-2.9.1/classes/view/html 으로 컴파일되어서 class 파일로 존재하고 index.class를 확인해보면
C:\workspace_spring3\tutorial\target\scala-2.9.1\classes\views\html>javap index
Compiled from "index.template.scala"
public final class views.html.index extends java.lang.Object{
public static final views.html.index$ ref();
public static final scala.Function1 f();
public static final play.api.templates.Html render(java.lang.String);
public static final play.api.templates.Html apply(java.lang.String);
public static final scala.collection.Iterator productElements();
public static final scala.collection.Iterator productIterator();
public static final boolean canEqual(java.lang.Object);
public static final java.lang.Object productElement(int);
public static final int productArity();
public static final java.lang.String productPrefix();
public static final boolean equals(java.lang.Object);
public static final java.lang.String toString();
public static final int hashCode();
public static final play.templates.Format copy$default$1();
public static final play.templates.BaseScalaTemplate copy(play.templates.Format);
public static final play.templates.Appendable _display_(java.lang.Object, scala.reflect.Manifest);
public static final play.templates.Format format();
}
위와 같은 method 들을 확인 할 수 있다. (이제 이러한 것을 천천히 알아가는게 목표다)
index.scala.html 과 main.scala.html
file - index.scala.html
@(message: String)
@main("Welcome to Play 2.0") {
@play20.welcome(message, style = "Java")
}
file - main.scala.html
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
<script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
</head>
<body>
@content
</body>
</html>
각 1라인은 Action Method의 Parameter를 할당한다. CoC 변명이 아니다. 단순한 스트링뿐 아니라 @(tasks: List[Task], taskForm: Form[Task]) 처럼 Object도 어사인 할 수 있다.
템플릿언어로서 Scala를 사용하기 때문에 변수명:타입 의 형식을 사용하고 @는 special character로서 많이 사용하게 될것이다.
2라인에는 main 템플릿에 String, Html 의 파라미터를 넘겨준다.
@play20.welcome이라는 상식스럽지 않은 네이밍은 무시하자. (기본 웹 어플리케이션의 화면 랜더링을 위한 예약어 정도로 생각하면 되겠다 - play-2.0.2\framework\src\play\src\main\scala\views\play20\welcome.html 파일을 보면 내가 거짓말 안하는거 알꺼다)
지금까지 기본적으로 생성되는 Play Framework의 [ Welcome to Play 2. ] 웹어플리케이션을 살펴 보았다.
단순하고 유연하고 빠르게 개발을 할수 있는 Play Framework라는데 벌써 SBT Scala Ivy 좀 있으면 Ebean Akka등이 나온다 제기랄 참 쉽다
다음에는 CRUD나 Dummy Data의 사용등에 대해서 한번 해볼련다.
'play framework' 카테고리의 다른 글
Play For Scala (0) | 2013.01.15 |
---|---|
플레이 프레임워크2 - 부가#2 ( Evolutions scripts ) (0) | 2012.07.31 |
플레이 프레임워크2 - 실전#3 ( 첫번째 CRUD ) (0) | 2012.07.25 |
플레이 프레임워크2 - 부가#1 ( 디펜던시 관리 ) (0) | 2012.07.24 |
플레이 프레임워크2 - 실전#1 (프로젝트 생성, Eclipse로 Import 하기) (1) | 2012.07.24 |