[Scala] Scala 기초 - 소개

Hyunjun Kim·2025년 4월 15일
0

Data_Engineering

목록 보기
30/153

1. 소개

1.1 Scala 소개

Scala 는 2003년에 스위스 로잔공대의 Martin Odersky 가 개발한 강력한 타입(stronglytyped) 방식의 확장 가능한 (Scalable) 프로그래밍 언어(Language)이다.
자바 언어의 한계를 극복할 수 있게 설계되었으며 객체지향 프로그래밍(OOP)과 함수형 프로그래밍(FP)을 모두 지원하는 혼합 패러다임(Multi-Paradigm) 언어이다.

1.1.1 Scala의 기술적 특징

1) JVM 기반 언어

Scala는 자바 바이트코드로 컴파일되기 때문에 Java Virtual Machine(JVM)에서 실행할 수 있으며, Java 코드와 높은 상호 운용성(Interoperability)을 가진다.
따라서 기존의 Java 생태계의 라이브러리와 프레임워크를 그대로 사용할 수 있다는 장점을 가진다.

2) 함수형 + 객체지향형 통합

Scala는 함수형 언어의 특성과 객체지향 언어의 특징을 모두 제공한다.
예를 들어, 불변성(immutability), 고차 함수(Higher-order Functions), 패턴 매칭(Pattern Matching), 케이스 클래스(Case Class) 등의 함수형 기능은 물론, 클래스, 상속, 다형성과 같은 객체지향 요소도 갖추고 있다.

3) 분산 컴퓨팅 친화적

Scala는 기본적으로 액터 모델(Actor Model) 기반의 통신을 지원하는 Akka 프레임워크와 잘 결합되며, 분산 시스템 설계에 적합하다.
Apache Spark와 Apache Kafka 같은 대규모 데이터 분산 처리 시스템도 Scala로 구현되었으며, 이로 인해 데이터 엔지니어링 분야에서 널리 사용된다.

1.1.2 Scala의 제약과 전망

1) 버전 간 호환성 문제

Scala는 2.12와 2.13 버전 간에도 호환되지 않는 이슈가 있었고, 이후 3버전(Scala 3)이 출시되면서 대규모 커뮤니티 이탈이 발생하였다.
이러한 호환성 문제는 장기적으로 언어의 생존 가능성에 의문을 남기고 있다.

2) Kotlin의 부상

최근 들어, Kotlin이 Scala의 대체 언어로 주목받고 있다. Kotlin은 Java의 단점을 극복하고, Java와의 호환성을 강화했으며, Scala, Groovy, Erlang 등의 언어에서 장점을 흡수한 형태로 빠르게 생태계를 확장하고 있다.
Kotlin은 함수형 프로그래밍도 지원하며, Java 라이브러리와의 통합성에서도 Scala보다 우수하다는 평가를 받는다.
이로 인해 업계에서는 “Scala 대신 Kotlin으로 가자”는 움직임도 점차 확산되고 있다.

1.2 강의에서 다루는 범위

이 강의는 대용량 분산 시스템, 특히 Apache Spark를 중심으로 실습과 이해를 돕기 위해 Scala 문법을 병행하여 다룬다.

Spark는 기본적으로 Scala로 구현된 프레임워크이며, JVM(Java Virtual Machine) 상에서 구동된다. 실제로 Spark 애플리케이션을 개발하는 현업 사례 중에서도 Scala를 사용하는 비율이 높은 편이며, 코드 레벨로 들어가면 Scala로 작성된 코드를 접할 일이 종종 있다.

이러한 현실적인 필요에 따라, Spark를 학습하면서 함께 Scala를 경험해보는 것이 효과적이라고 판단하였다.

1.2.1 학습 목적과 접근 방식

  • 이 강의에서는 Scala 전문가 수준의 학습을 목표로 하지 않는다.
    대신, Spark 애플리케이션을 이해하고 작성하는 데 무리가 없을 정도의 문법 수준을 빠르게 습득하는 데 집중한다.

  • 나는 Python과 Pandas에 익숙한 상태로, Python으로 Spark를 작성하는 것이 더 편리하게 느끼지만 Spark 자체가 Scala로 빌드되어 있고, JVM 위에서 작동하기 때문에 사용자 정의 함수(UDF) 등 Spark의 고급 기능을 활용할 때는 Scala가 더 자연스럽고 강력한 접근을 가능하게 한다.

1.2.2 Scala 선택의 기술적 배경

  • 정적 타입(Static Typing)
    Scala는 정적 타입 언어이므로, 코드 작성 시점에 타입이 확정되며, 컴파일 타임에 오류를 검출할 수 있다.
    반면 Python은 동적 타입 언어이기 때문에, 실제 실행해 보기 전에는 오류나 타입 문제를 인지하기 어렵다.
    이는 특히 장기적으로 운영되는 시스템의 안정성과 유지보수성 측면에서 Scala가 더 유리하다는 뜻이다.

  • 운영 코드로서의 Spark
    데이터 엔지니어가 작성하는 Spark 애플리케이션은 종종 기업의 핵심 시스템이나 데이터 파이프라인의 일부로서 장기 운영되며, 안정성과 예측 가능성이 중요하다.
    분석가들이 Python을 활용하여 즉각적인 분석용 코드를 작성하는 것과는 다른 맥락이다.
    따라서 데이터 엔지니어 입장에서는 정적 타입을 활용한 코드 가독성, 명확한 의도 전달, 안정성 확보를 위해 Scala로 작성하는 것이 바람직하다.

1.3 Java & Scala Version

본 챕터에서는 Java 8(1.8) 버전과 Scala 2.12.15 을 사용한다. IDE 로는 IntelliJ IDEA Community version에 Scala plugin을 설치해서 사용한다.

profile
Data Analytics Engineer 가 되

0개의 댓글