/scala-backend

스칼라로 도전하는 직업적 백엔드 프로그래밍

Primary LanguageScala

Scala로 도전하는 직업적 백엔드 프로그래밍

현업 업무에 스칼라를 쓸 때 알아두면 좋을 예제 사전

왜 스칼라로 하는가?

한 줄 요약: JVM 환경의 잇점을 누리면서 함수형 프로그래밍도 만끽한다

제 주변의 백엔드 업무 환경은 자바를 위주로 한 JVM 환경을 기본으로 합니다. 하지만, 자바는 프로그래밍 언어로써는 좀 아쉬운 점이 있지요. 그렇다고 JVM을 벗어나자니 이미 있는 기존 라이브러리나 연동 환경을 버리게 되어 아깝고 힘이 듭니다. 그러니 JVM은 사용하되, 자바보다 나은 개발 언어 선택한다면, 더 즐겁고 효과적인 백엔드 개발을 할 수 있겠다고 생각합니다. JVM 바탕의 자바가 아닌 언어 중에 유명한 것은 Kotlin, Clojure, Scala 등이 있습니다.

코틀린은 자바와의 상호 운영성이 매우 편리한 장점이 있지만, 함수형 프로그래밍을 추구하기에는 좀 아쉬운 점이 있습니다. 아주 훌륭한 자바라고 보시면 되고, 아마도 단기간에 백엔드 프로그래밍의 표준으로 자리 잡을 수 있을 거라고 생각합니다. 보수적이고 레거시가 많은 환경에서도 코틀린 정도는 효과적으로 적용할 수 있으리라 예상합니다.

클로저는 함수형 프로그래밍 언어이자, 끝장 강력하고 유연한데, 이미 우리에게 익숙한 OOP를 휙 떠나게 되고(전 그래서 좋지만), 그 색다른 문법에 당황하며 거부감을 느끼는 사람이 많습니다. 배워두면 참 좋고, 업무용으로도 활용하고 싶지만, 다른 개발자를 섭외하기가 쉽지 않습니다.

스칼라는 본격 함수형 프로그래밍을 시작할 수 있으면서도, 기존의 명령형 OOP를 혼용해서 쓸 수 있습니다. 이미 있는 JVM 라이브러리들을 기존 스타일대로 가져다 쓰면서 점진적으로 함수형 프로그래밍을 적용할 수 있는 매력이 있습니다. 게다가 Apache Spark 같은 훌륭한 실용 제품 덕에 대용량 데이터를 다루는 곳에서는 이미 잘 쓰고 있다는 점이 특징입니다.

백엔드 시스템이 해야 할 일

한 줄 요약: 몇 가지 주요 작업만 할 수 있으면 무슨 언어로 개발해도 되는 것 아닌가?

결국 직업적인 백엔드 개발자가 서비스를 개발할 때 처리해야 할 일은 아래에 나열한 일들이 중요한 것 같습니다.

  • HTTP 요청/응답 처리 (서버측 & 클라이언트측 모두)
  • 데이터 모델과 JSON 문자열 상호 변환 (또는 protobuf 등의 데이터 포맷으로 상호 변환)
  • 관계형 데이터베이스 JDBC 연동
  • 아파치 카프카 Producer/Consumer/Stream API 연결
  • Redis 클라이언트 연결
  • 환경설정 파일이나 환경변수 편하게 읽어 쓰기
  • 단위 테스트
  • 로깅 / 디버깅 / 프로파일링 / 성능 모니터링

각 회사나 팀마다, 주로 쓰는 서비스도 조금씩은 다를 테고, 아예 AWS 등의 클라우드 서비스를 연동해서 사용해야 할 수도 있겠지만, 크게는 위의 작업으로 대부분 커버될 것 같습니다. 다시 말해 이 정도 작업을 빠르게 적용해서 할 수 있다면, 스칼라로 실무 프로젝트를 개발해도 되는 것 아닐까요?

결국, 어떤 새로운 프로그래밍 언어로 시스템을 구축하려면, 프로그래밍 언어의 문법만 익히면 되는 일이 아니라, 평소 주로 하는 작업들을 새로운 언어와 라이브러리들을 써서 신속 정확하게 구축하는 일이 중요할 것입니다. 이 정도 작업들을 스칼라로 처리하는 간단한 예제라도 한 묶음 있다면 좋겠습니다.

또 다른 누군가 백엔드 프로그래머가 스칼라로 새 프로젝트를 진행한다면, 그분들께도 도움이 될 것 같다는 이 샘플 프로젝트를 준비합니다. 스칼라로 현업 백엔드 개발을 (시작) 한다면 여기 앞으로 적을 예제 코드들을 참고하시면 좋겠습니다.

연재문서

라이선스