티스토리 뷰

반응형

맨 처음 Spring을 접했을 때 자동으로 만들어지는 프로젝트 구조에 대해서 분석하고 Spring을 시작을 했었듯이 이번에도 기본으로 만들어지는 Play의 프로젝트 구조를 파악한 다음 어떻게 아래와 같은 화면이 나타나게 되었는지에 대해서 알아본다.


1. 프로젝트 분석




맨 처음 프로젝트를 생성하게 되면 위와 같은 형태의 프로젝트 골격을 가지게 된다. 우선 추후에 계속 설명하게 될 폴더는 열어 놓은 상태이며 하나씩 설명하면 다음과 같다.


PostingProject -> .idea는 inteliJ에서 만들어놓는 폴더 구조이며 

PostingProject -> app은 Scala 혹은 Java소스와 ViewTemplate인 *.scala.html 파일들을 생성하게 되는 곳이다.

PostingProject -> conf는 어플리케이션에서 사용하게 될 설정 정보와 Play에 의해 동작되는 웹페이지에 대한 진입점을 만들게 되는 routes로 구성되어 진다.

PostingProject -> project는 Project 빌드 정보와 플러그인 정보를 가진 파일들로 구성된다.

PostingProject -> public은 자바스크립트와 이미지, CSS와 같은 뷰와 출력용 자원에 대한 파일들을 생성하게 되는 곳이다.

PostingProject -> target은 빌드되면서 나오는 자원들의 위치이며 

PostingProject -> test는 testUnit을 작성할 수 있는 폴더이다.

.gitignore는 설명을 생략하며 

중요한 build.sbt에 대해서 설명을 한다. 보통 자바를 사용하는 스프링에서는 pom.xml에 사용하고자 하는 라이브러리에 대한 Dependency를 설정을 해주는데 그 역할을 하는 녀석이 build.sbt이다. 


그럼 맨처음에 보았던 출력화면은 어떻게 출력되는 것일까???


2. 프로젝트 구동


맨 처음 activator로 play를 구동시키면 http://localhost:9000을 호출 할 수 있게 된다. 그럼 routes파일을 보게 되고 아래의 routes파일의 내용중 #Home page 아래에 있는 내용의 경로와 일치하게 되어 controller.Application.index를 호출 하게 된다.


[routes]


여기서 controller.Application.index가 의미하는 내용은 'app폴더의 controller 패키지에 있는 Application Class의 index 함수를 실행시켜 달라!!' 라는 의미이며 아래의 Application Class의 index 함수가 실행되게 된다.


[Application.scala]


위에서 보게 되면 Action이라는 녀석과 OK라는 녀석이 생소하다....

Action이라는 녀석은 Play는 요청에 대한 handle을 Action이라는 함수에 전담시키게 된다. Action은 내부적으로 play.api.mvc.Request=>play.api.mvc.Result라는 리터럴을 가지고 있다.


OK라는 녀석은 요청에 대해 200이 떨어졌다는 의미를 지니며 views.html.index의 ViewTemplate을 호출하게 된다.

여기서 views.html.index의 의미는 index.scala.html 파일을 실행 시키게 되며 파일의 내용은 아래와 같다.


[index.scala.html]


참으로 간단한 소스이지만 무엇을 의미하는지 처음에는 난해할 수 있다.
일단 설명하자면 이렇다. *.scala.html 파일들은 마지막 파일확장자가 html이지만 ViewTemplate이다. 살짝 알아 본바로는 View Engine에 의해서 스칼라로 변형이 되는거 같다.
마치 JSP파일이 실제로는 Servlet으로 변형되어 동작하는것과 비슷하지 않을까 생각이든다. (추후에 찾아보면서 포스팅~)
위 소스를 보게 되면 @가 많다. 의미는 이러하다.
첫번째 @같은 경우는 해당 파일이 String Type의 message를 받을 수 있다라는 의미이고 두번째 @는 main.scala.html을 호출 하는데 파라미터로 "Welcome to Play" 라는 문자열과 @play20.welcome(message)를 넘겨 주겠다는 의미이다.
어떻게 {} 안에 내용이 파라미터일까 라고 헷갈릴 수 있다. 아래의 main.scala.html 소스를 보면서 설명한다.

[main.scala.html]


@main이 ()와 {}에서 각각 파라미터를 받을수 있는 이유는 main.scala.html에서 @(title: String)(content: Html) 때문이다.


자바 개발자라면 의아할 수 있고 나 또한 처음에는 뭔가 싶었지만 스칼라의 커링의 개념과 스칼라의 특징을 이해한다면 위 소스를 이해 할 수 있다. 지금은 구동과정에 대해서 설명을 하므로 스칼라의 커링에 대한 개념 설명은 생략한다.


3. 정리 


지금까지 Play의 프로젝트 구성요소들의 의미와 어떻게 내부적으로 작동 되는지에 대해서 알아보았다. 

Play의 한글 인터넷 자료가 많이 없어서 하나하나 찾는데 시간이 좀 걸리는거 같다... 내가 못찾는건가..

반응형

'Play' 카테고리의 다른 글

PlayFramework JSON Response  (0) 2017.02.18
PlayFramework Filter 적용하기  (0) 2017.02.18
Play 설명 및 설치  (0) 2016.09.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함