DevLogs/Shoveling

Play Framework 2.6.x Starter Project 구동 삽질기

밥먹고해요 2017. 11. 4. 14:09

Scala 언어에 관심이 생겨 틈틈히 자료를 탐독하다가, 뭔가 Scala 자체만으로는 Practical 한점이 와닿지 않아서 생각난 것이 간단단 웹 서비스를 만들어 보고 싶은 마음에 구글링으로 알게된 Play Framework! 이미 Java 진영에서도 사용되고 있는 듯한데, Java 잘알못인지라 그냥 그러하구나 하고만 인지하고..

GNB에 있는 Download 페이지로 들어가니, 위 스샷처럼 "Start Here" 섹션이 제일 먼저 눈의 보인다. 그리고 맨 위에 나처럼 생초보를 위한 Starter project가 준비되어 있다. 호오.. 일단은 맛보기를 위해 가이드대로 "Download a starter project (for newbies)" 링크를 클릭했다. 음? 그냥 바로 아래에 있는 섹션으로 이동한다. 그냥 앵커 링크였네. ㅋㅋ

처음 시작할 땐 무조건 최신버젼! 당연히 Play 2.6.x Starter Projects 섹션에서 Play Scala Starter Example을 클릭! 우측에 있는 Download (zip) 버튼과 기능이 같나보다. play-scala-starter-example.zip 파일 다운로드가 시작된다! 다 받고는, 적당한 위치에 일단 대충 압축을 풀고~

CMD 콘솔창(※ Windows10 환경)을 띄워서 가이드 대로, sbt run 명령을 실행했다. 뭔가 엄청나게 오래 걸린다. 처음에는 당황했다. 명령어 실행 후 한동안 화면상의 변화가 없다. 진행률 같은 정보조차 안 보인다. 그렇게 한 30초(?) 정도 지나면, 갑자기 뭔가 다운받기 시작하더라. 암튼 한동안 계속 의존관계의 라이브러리 같은 것들을 엄청나게 다운 받아서 엄청나게 설치를 한다. 대략 30분은 걸린듯하다. 

Scala 기반이므로 JVM 위에서 돌아가야 하니, 사전에 내 PC에는 JDK9가 설치된 환경이었다. sbt run 명령 실행시 뭔지모를 불길하고 의미 파악이 안되는 이상한 경고 메시지들이 좀 죽죽 나오던데 그냥 일단 무시했다. 이윽고 모든 의존 케이스들이 설치가 완료되었는지 서버가 실행되었다는 메시지가 튀어나왔다.

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

설레이는 마음으로 브라우져에서 http://127.0.0.1:9000로 접근! 콘솔창에는 그제야 뭔가 컴파일을 한다는 메시지가 나오면서 뭔가 추가적인 메시지들이 나오기 시작한다. 호오.. 최초 접근이 발생했을 때야 비로서 컴파일이 되는 매커니즘인건가? 그리고는 잠시 잠깐 기다린 뒤, 브라우져에서 확인된 내용은 기대했던 게 아니었다..

엥?? 뭔가 방화벽 설정이 추가로 또 필요한건가..?? 혹시나 해서 http://localhost:9000 으로 다시 접근!

어라, 그 순간 콘솔창에는 Java 잘알못인 나로써는, 도무지 이해할 수 없는 메시지들이 우후죽순으로 마구마구 뿌려지면서 결국 아래와 같은 메시지를 마지막으로 남기고는 서버가 죽어버렸다. -_-;

[INFO] [11/04/2017 13:34:30.839] [Thread-1] [CoordinatedShutdown(akka://sbt-web)] Starting coordinated shutdown from JVM shutdown hook

정말의 순간.. Play Framework 공식 사이트에서 나와있는 가이드에서 시킨대로 한 것 뿐인데.. 험난하다. 오류 메시지들 중에서 뭔가 특이할 만한 것들로 구글링을 해보다가 뭔가 확증은 아니지만, 추측해본 결론은.. Play Framework 2.6.x랑 Java9랑은 뭔가 궁합이 안 맞나보다. Play에서 Java9를 아직 제대로 지원하지 않는걸랑가? Java 잘알못이라 너무 파고들기에는 장벽이 너무 높아보였다. 그래서, 결국 Java8을 설치하기 위해 구글링으로 jdk8 다운로드 페이지로 들어갔다. Java 잘알못인 나는 자세한 내용은 모르겠으나, 뭔가 마이너 버젼으로 추측되는 숫자가 151과 152, 이렇게 2가지가 제공되고 있었다. 그래도 최신버젼이 낫지 싶어, 고민없이 152 버젼으로(Java SE Development Kit 8u152 > Windows x64) 다운받고, 설치하고, 시스템 환경 변수에도 Java8경로의 bin 디렉토리로 교체까지!

자자, 이제는 되겠지? 하는 마음으로 새로 오픈한 콘솔창에서 다시 sbt run 명령을 실행했다. 오.. java9 환경일 때 보이던 알수없는 경고 메시지도 안 보인다. 뭔가 아주 깔끔하게 서버가 실행된 것 같다. 다시 브라우져에서 http://127.0.0.1:9000으로 접근해 보니, 어라라, 위에서 봤던 Bad Request 스샷이랑 동일하다. 음.. 그럼, http://localhost:9000으로 다시 접근하면??

엥?? 얘는 뭐라는 거지?? 전체 메시지는 다음과 같다.

[RuntimeException: java.lang.UnsupportedClassVersionError: controllers/routes has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0]

음... 버젼?? 음... 아?! 혹시 JDK9로 컴파일된거라서 이걸 재컴파일하면 될려나 하는 생각이 들었다. 근데, 재컴파일은 어떻게 하지????????? ㅠㅠ

구글링을 해보니, sbt clean 명령으로 컴파일된 것들을 싹 날릴 수 있다보다. 콘솔창에서 바로 sbt clean 실행하고는 다시 sbt run 실행했다. 서버가 띄워진 메시지를 확인한 후, 브라우져에서 다시 http://127.0.0.1:9000으로 접근해 보니~ 또 Bad Request가 나온다. 음......

그럼, http://localhost:9000으로 붙어볼까? 제발!

오우야... 드디어 성공!! 휴.. 이제 본격적으로 공부를 좀 해봐야겠다!


마무리 하면서 정리하면..

Play Framework 2.6.x는 JDK8 기반에서 정상 동작!
상위 버젼인 JDK9 기반은 아직은 피해야 하는 듯한다. ㅎㅎ


Mac에서 동일하게 설치해 봤는데, 최초 sbt run 실행부터 서버 올라갈 때까지 2시간은 넘게 걸린듯하다. 뭔놈에 의존 라이브러리 땡겨오는데 시간이 이리 걸리나 ;;