먼 길을 돌아온 끝에 Java 코드나 Spring으로 Scala+Spark 코드를 실행시키는 대신, Scala로 구동되는 자체 서버에서 Spark 애플리케이션을 실행하고 서버 간 통신을 통해 데이터 처리 결과를 전달하기로 했다. 이를 위해 Scala에서 사용할 수 있는 웹 프레임워크를 찾아본 결과, Play framework를 사용하기로 했다.
Play framework는 Scala의 동시성 프레임워크인 akka
와 이벤트 기반 비동기 네트워크 프레임워크 Netty
를 기반으로 Non-blocking IO를 제공하여 우수한 병렬 처리 성능을 보이는 경량 웹 프레임워크이다. akka
는 actor model을 통해 동시성 처리를 용이하게 하는데 시간 내서 한번 공부해보는 것도 좋을 듯하다.
다만 play를 깊게 공부하고 사용한다기보다는 빠른 개발이 가능하고 기본적으로 MVC 아키텍처를 사용해서 Spring에서와 유사하게 접근할 수 있다는 점에서 채택하게 되었다.
앞선 Spark 호환성과의 긴 싸움을 거치며, 연동이 필요한 툴들의 버전 호환성이 무엇보다 중요하다는 생각이 들어서 사용 버전을 먼저 확정하기로 했고, 각 툴의 공식문서 확인, 구글링, 수십 여번의 직접 구동 끝에 아래와 같이 버전을 확정했다.
(JDK는 기존에 17버전을 사용했으나 이미 Spring으로부터 벗어나기로 하기도 했고, 숱한 구글링 결과 Spark와 제일 잘 호환되는 JDK은 8버전인 것으로 보여서 JDK 8을 호환성 기준으로 삼고 버전을 정해나감)
name | version |
---|---|
JDK | 1.8 |
Scala | 2.12.19 |
Spark | 3.0.2 |
Play framework | 2.8.19 |
mongo-spark-connector | 4.0.5 |
>> chcp 65001
PowerShell에서는 아래 명령어로 바꿀 수 있다.
>> $env:LC_ALL='C.UTF-8'
다만 위 방법은 단일 터미널 세션에만 유지되기 때문에 매번 새 터미널 창을 열 때마다 입력해줘야 한다. 그래서 매 세션마다 해당 내용을 자동 설정해주는 방법이 없을까 해서 찾아봤다.
Windows
+ R
→ regedit)chcp 65001
로 설정. Autorun이 없다면 새로 만들기 → 문자열로 직접 생성해주면 된다. $profile
을 입력하면 출력되는 경로 C:\Users\{your-username}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
의 Microsoft.PowerShell_profile.ps1 파일에 $env:LC_ALL='C.UTF-8'
을 저장해준다. 마찬가지로 파일이 없다면 직접 생성해서 명령어 저장해주면 된다.Play Framework Documentation
Windows - cmd 에서 utf-8 로 인코딩 변환하기
[PowerShell] - 파워쉘을 이용할때 한글깨짐현상 해결방법