추천 API 서버로 Play Framework 적용기 - 1

오형택·2024년 3월 12일
0

Play-Spark

목록 보기
3/8
post-thumbnail

먼 길을 돌아온 끝에 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을 호환성 기준으로 삼고 버전을 정해나감)

nameversion
JDK1.8
Scala2.12.19
Spark3.0.2
Play framework2.8.19
mongo-spark-connector4.0.5

🔧 Spark로 처리된 데이터 로그 출력 중에 삽질을 많이 했는데, 계속 한글 데이터가 깨져서 나와서 UTF-8 인코딩 문제 같은데 MongoDB 문제인가 Play framework 문제인가 Scala 문제인가 계속 헤매다가 로그가 출력되는 터미널 창(Windows cmd, PowerShell) 문제임을 깨달았다. 둘 다 기본적으로 UTF-8 인코딩을 사용하지 않아서 애플리케이션 단에서 어떤 짓을 해도 문제가 생기는 거였고 데이터 자체에는 전혀 문제가 없었다. cmd에서는 아래 명령어로 인코딩 장식을 바꿀 수 있고
>> chcp 65001

PowerShell에서는 아래 명령어로 바꿀 수 있다.

>> $env:LC_ALL='C.UTF-8'

다만 위 방법은 단일 터미널 세션에만 유지되기 때문에 매번 새 터미널 창을 열 때마다 입력해줘야 한다. 그래서 매 세션마다 해당 내용을 자동 설정해주는 방법이 없을까 해서 찾아봤다.

  • cmd 레지스트리 설정으로 들어가서(Windows + R → regedit)
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\Autorun 값을 chcp 65001로 설정. Autorun이 없다면 새로 만들기 → 문자열로 직접 생성해주면 된다.
  • Windows PowerShell shell에 $profile을 입력하면 출력되는 경로 C:\Users\{your-username}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1의 Microsoft.PowerShell_profile.ps1 파일에 $env:LC_ALL='C.UTF-8' 을 저장해준다. 마찬가지로 파일이 없다면 직접 생성해서 명령어 저장해주면 된다.

Reference

Play Framework Documentation
Windows - cmd 에서 utf-8 로 인코딩 변환하기
[PowerShell] - 파워쉘을 이용할때 한글깨짐현상 해결방법

profile
개발자 지망생

0개의 댓글