모던웹으로 Playframework 를 선택하였다고 하면, Scala+Akka의 이점을 고려했을것이며

여기서는 Playframework 를 인텔리J를 사용하여 초기 셋팅하고, 도커에 배포 실행하는 방법을 알아보겠습니다.

Play는 JVM환경에서 구동되는것이기때문에 JAVA 배포방법과 큰 차이는 없으며.

스칼라 실행/배포를 위해 SBT 를 이용하는것의 약간의 차이가 있습니다. ( Gradle도 지원)

도커는 덤으로 연동을 하였습니다.

play frame work : https://www.playframework.com/documentation/2.6.x/Home


필요플러그인

  • SBT
  • DOCKER


프로젝트 생성에서 실행 배포까지

Step0. 라이트벤드 제공 Play템플릿 선택하기

여기서는 Play Scala ChatRoom 을 선택하였으며 기본 MVC를 위한 뷰템플릿 + 웹소켓요소가 포함되어 있으며

웹소켓은 이제 모던웹에 필수요소이기때문에 기본으로 선택하였습니다.



Step1. 구성요소 받을때까지 기다리기

주요 application layout

  • controller : MVC의 C에 해당하는 코드 집합들
  • filters : 웹요청에대한 정책설정을 할수 있으며, 여기서는 웹소켓에 관련 정책이 자동설정됩니다.
  • views : 뷰템플릿을 추가할수있으며, 여기서는 채팅 페이지의 기본 코드가 설정됩니다.
  • conf : playframework에 사용되는 각종 설정들
  • conf/routes : endpoint를 정의하고 대상 controller에 연결을 정의하는 라우터 설정입니다.


Step2. 컴파일및 실행

sbt는 스칼라프로젝트를 운영할시 메이븐과 유사한 심플하고 유용한 빌드툴입니다.

기본적으로 다음과 같은 명령을 사용할수가 있습니다.

  • compile : 스칼라 프로젝트를 컴파일합니다.
  • run : 스칼라 코드를 실행을 하며, 코드변경이 있을시 증분컴파일후 실행을 수행합니다. ( 개발환경 )
  • dist : 배포를 위한 최종 배포파일을 생성하며 target/universal/{프로젝트명}.zip 로 최종결과물을 만들며 /bin 에 jar를 실행하는 스크립트가 포함됩니다.


배포용 빌드 Task등록

배포용 Task를 만들어둠으로 재사용이 가능하며, 배포 빌드단계 전단계에서 사용할수가 있습니다.

Step3. Docker Build 만들기

Dockerfile
FROM openjdk:8-jre
COPY target/universal/play-chatroom-scala-example-2.6.x /svc
EXPOSE 9000 9443
CMD /svc/bin/play-chatroom-scala-example -Dhttps.port=9443 -Dplay.crypto.secret=secret

프로젝트 루트에 Dockerfile을 위와같이 만들어 줍니다. sbt dist후  universal에 생성된 zip의 압축을 푼후 ( unzip으로 자동화가능) 수행이가능한

도커 명령이며(도커가 셋팅이되었다고 가정합니다.) 

위 명령은 jre가 필요하고 9000(play 웹기본포트), 9443(https) 두가지 포트를 사용하는 실행가능한 scala 웹서비스의 컨터이너를 작성하겠다란 의미입니다.

  

dockerbuild.bat
docker build -t playchatroom .

IDE에서 도커설정을 하게되면 , 배포-도커빌드-실행 단계를 버튼하나로 진행할수가 있으며

도커 컨테이너 내의 가상 네트워크에서 작동되지만, 로컬에서 작동하는것처럼 불편함없이 작동이 가능합니다.

디버깅 환경을 구축하려면 , 리모트환경을 이용해야하며 약간의 다른 셋팅 필요합니다.


Docker 빌드는 다양한 방법으로 연동될수 있습니다.


위 명령은 Dockerfile을 참고 하여 playchatroom 이라는 실행가능한 도커 이미지를 생성해줍니다.

D:\project\scala2>docker images

REPOSITORY                     TAG                      IMAGE ID            CREATED             SIZE

playchatroom                   latest                   88e0b3cd5a14        10 minutes ago      484MB

openjdk                        8-jre                    66bf39162ea7        4 weeks ago         443MB

openjdk 를 베이스로 playcharroom 이라는 이미지 생성이 되었습니다. 

Step4. Docker 실행하기

dockerrun.bat
docker run -it -p 9000:9000 -p 9443:9443 --rm playchatroom

실행되는 도커 컨테이너는 격리된 네트워크로 포트 접근이 기본적으로 불가능하며, 도커의 본체에 포트포워딩 경로를 통해

접근을 시킬수가 있습니다. 여기서는 도커의 본체는 localhost이며  위 실행명령은 http://localhost:9000 으로 접속가능하게해줍니다.


인텔리J가 제공하는 Docker 플러그인을 통해서도 컨테이너 제어가가능하며

위 컨테이너 목록은 격리된 도커 서비스이며 여러가지 의존서비스들을 모두 동일한 가상 네트워크에서 포트충돌없이 구동이 가능합니다.

이렇게 한번 도커에 등록된 컨테이너는 환경변수만 바꿔가며 재사용및 재실행이 가능하게 됩니다.


실행성공화면






  • No labels