Play패키지분석 및 작동 설명
맨 처음 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]
@main이 ()와 {}에서 각각 파라미터를 받을수 있는 이유는 main.scala.html에서 @(title: String)(content: Html) 때문이다.
자바 개발자라면 의아할 수 있고 나 또한 처음에는 뭔가 싶었지만 스칼라의 커링의 개념과 스칼라의 특징을 이해한다면 위 소스를 이해 할 수 있다. 지금은 구동과정에 대해서 설명을 하므로 스칼라의 커링에 대한 개념 설명은 생략한다.
3. 정리
지금까지 Play의 프로젝트 구성요소들의 의미와 어떻게 내부적으로 작동 되는지에 대해서 알아보았다.
Play의 한글 인터넷 자료가 많이 없어서 하나하나 찾는데 시간이 좀 걸리는거 같다... 내가 못찾는건가..