Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

백엔드 웹개발에 SCALA 언어를 모던웹으로 Playframework 를 선택하였다고 하면, 마이크로 모던 웹 서비스를위해서 PLAYFRAMEWORK+AKKA 요소를

사용할수가 있습니다. PLAYFRAMEWORK는 JAVA언어도 지원하지만, 주언어를 JAVA로 선택하였다고하면, SPRINGBOOT이 권장됩니다.

DOCKER는 이제 개발환경구축 운영환경구축에 필수 요소임으로 DOCKER 배포/실행까지 살펴보도록 하겠습니다.Scala+Akka의 이점을 고려했을것이며

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

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

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

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

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


필요플러그인

  • SBT
  • DOCKER


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

...

주요 application layout

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

...

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


배포용 빌드 Task등록

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

Image Added

Step3. Docker Build 만들기

Code Block
languagescala
themeEmacs
titleDockerfile
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

...

Code Block
languagescala
themeEmacs
titleDockerfiledockerbuild.bat
docker build -t playchatroom .
Expand
titleide를 이용하여 빌드설정하는방법

Image Added

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

Image Added

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

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


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


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

...

Code Block
languagescala
themeEmacs
titleDockerfiledockerrun.bat
docker run -it -p 9000:9000 -p 9443:9443 --rm playchatroom

...

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

위 컨테이너 목록은 격리된 도커 서비스이며 레디스/몽고db/mysql/kafka 등을 여러가지 의존서비스들을 모두 동일한 가상 네트워크에서 포트충돌없이

간편하게 구동후 상호연동 개발이 가능하는것을 의미하며 동일한 구조로 유사한 추가 개발환경구성및 운영환경을 또는 클라우드환경에

손쉽게 구성할수 있게됩니다.구동이 가능합니다.

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


실행성공화면

Image Added