Scala 학습에 도움이 되는 참고 자료를 정리합니다. 공식 문서부터 서적, 온라인 강의, 커뮤니티까지 다양한 리소스를 카테고리별로 분류했습니다.
TL;DR - 핵심 추천
- 공식 문서: Scala 3 Book - 단계별 학습서
- 입문서: “Scala for the Impatient” - 빠른 학습에 최적
- 함수형 심화: “Scala with Cats” (무료 온라인) - 타입 클래스 마스터
- 온라인 실습: Scastie - 브라우저에서 즉시 실행
- 커뮤니티: Scala Discord - 실시간 질의응답
공식 문서#
Scala 공식 사이트와 문서는 가장 정확하고 최신의 정보를 제공합니다.
Scala 공식
- Scala 공식 사이트 — 최신 뉴스, 다운로드
- Scala 3 Documentation — Scala 3 공식 문서
- Scala 2 Documentation — Scala 2 공식 문서
- Scala API Docs — 표준 라이브러리 API
학습 자료
공식적으로 제공되는 학습 자료들입니다.
- Tour of Scala — 핵심 기능 빠른 둘러보기
- Scala 3 Book — 단계별 학습서
- Scala Exercises — 인터랙티브 학습
빌드 도구
Scala 프로젝트에서 사용하는 빌드 도구들의 공식 문서입니다.
- sbt Documentation — sbt 공식 문서
- Mill Build Tool — Mill 문서
핵심 포인트
- 시작점: Tour of Scala로 핵심 기능 빠르게 파악
- Scala 3: 새 프로젝트라면 Scala 3 Book으로 학습
- 빌드: sbt가 표준, Mill은 빠른 대안
서적#
Scala 학습에 도움이 되는 서적들을 난이도별로 분류했습니다.
입문서
Scala를 처음 배우는 분께 추천하는 서적입니다.
“Programming in Scala” (4th Edition)
- 저자: Martin Odersky, Lex Spoon, Bill Venners
- Scala 창시자가 쓴 권위 있는 책
“Scala for the Impatient” (3rd Edition)
- 저자: Cay S. Horstmann
- 빠르게 Scala를 배우고 싶은 분께 추천
함수형 프로그래밍
함수형 프로그래밍 개념과 패턴을 깊이 있게 다루는 서적입니다.
“Functional Programming in Scala” (2nd Edition)
- 저자: Michael Pilquist, Rúnar Bjarnason, Paul Chiusano
- “레드북"으로 유명, FP 심화 학습
“Essential Scala”
- 저자: Noel Welsh, Dave Gurnell
- 무료 온라인 버전
고급
타입 클래스, 효과 시스템 등 고급 주제를 다루는 서적입니다.
“Scala with Cats”
- 저자: Noel Welsh, Dave Gurnell
- 무료 온라인 버전
“Practical FP in Scala”
- 저자: Gabriel Volpe
- 실무 함수형 프로그래밍
핵심 포인트
- 입문: “Scala for the Impatient” (빠른 학습) 또는 “Programming in Scala” (깊이 있는 학습)
- 무료: “Essential Scala”, “Scala with Cats” 온라인 제공
- 함수형 심화: “Functional Programming in Scala” (레드북)
실무 라이브러리 맛보기#
이 가이드에서 배운 개념이 실무 라이브러리에서 어떻게 활용되는지 간단히 소개합니다.
Cats: 타입 클래스 실전 활용
Type Classes에서 배운 패턴이 Cats에서 실제로 어떻게 사용되는지 살펴봅니다.
// 이 가이드에서 배운 타입 클래스 패턴
trait Monoid[A]:
def empty: A
def combine(x: A, y: A): A
// Cats에서는 이렇게 활용합니다
import cats.syntax.all.*
import cats.Monoid
// 이미 정의된 인스턴스 사용
List(1, 2, 3).combineAll // 6 (Monoid[Int] 사용)
List("a", "b").combineAll // "ab" (Monoid[String] 사용)
// 커스텀 타입에 적용
case class Order(total: Int, items: Int)
given Monoid[Order] with
def empty = Order(0, 0)
def combine(x: Order, y: Order) =
Order(x.total + y.total, x.items + y.items)
List(Order(100, 2), Order(200, 3)).combineAll
// Order(300, 5)연결 개념: Type Classes, Implicits/Given
ZIO: 함수형 효과 시스템
Higher-Order Functions과 For Comprehensions이 ZIO에서 빛을 발합니다.
import zio.*
// 부수 효과를 값으로 표현
val readLine: ZIO[Any, IOException, String] = Console.readLine
val printLine: String => ZIO[Any, IOException, Unit] = Console.printLine
// for comprehension으로 순차 실행
val program: ZIO[Any, IOException, Unit] = for
_ <- printLine("이름을 입력하세요:")
name <- readLine
_ <- printLine(s"안녕하세요, $name!")
yield ()
// 이 시점에서는 아무것도 실행되지 않음 (순수 값)
// Unsafe.unsafe { implicit u => Runtime.default.unsafe.run(program) }연결 개념: For Comprehensions, Functional Patterns
http4s: 함수형 HTTP
Pattern Matching과 Case Classes가 라우팅에 활용됩니다.
import org.http4s.*
import org.http4s.dsl.io.*
// 패턴 매칭으로 HTTP 라우팅
val routes = HttpRoutes.of[IO] {
case GET -> Root / "users" / IntVar(id) =>
Ok(s"User $id")
case req @ POST -> Root / "users" =>
req.as[User].flatMap(user => Created(user.asJson))
case GET -> Root / "health" =>
Ok("healthy")
}연결 개념: Pattern Matching, Case Classes
Circe: JSON 타입 클래스
Type Classes와 Generics가 JSON 변환에 사용됩니다.
import io.circe.*
import io.circe.generic.auto.*
import io.circe.syntax.*
// case class 정의만 하면 자동으로 JSON 변환 가능
case class User(name: String, age: Int)
val user = User("Alice", 30)
user.asJson.noSpaces // {"name":"Alice","age":30}
// 파싱도 타입 클래스로
"""{"name":"Bob","age":25}""".as[User]
// Right(User("Bob", 25))연결 개념: Case Classes, Type Classes
다음 학습 방향
관심 분야에 따라 추천하는 라이브러리와 학습 자료입니다.
| 관심 분야 | 추천 라이브러리 | 참고 자료 |
|---|---|---|
| 함수형 기초 | Cats | Scala with Cats (무료) |
| 비동기/동시성 | ZIO 또는 Cats Effect | ZIO 공식 문서 |
| 웹 개발 | http4s + Circe | http4s 튜토리얼 |
| 데이터 처리 | Spark | Spark Scala API |
핵심 포인트
- Cats/ZIO: 함수형 프로그래밍 라이브러리, 타입 클래스와 효과 시스템
- http4s + Circe: 함수형 웹 개발 스택
- Spark: 빅데이터 처리, Scala 2 필요
온라인 강의#
동영상으로 Scala를 배울 수 있는 강의들입니다.
무료
무료로 제공되는 양질의 강의 자료입니다.
- Scala & Functional Programming Essentials — Rock the JVM
- Functional Programming Principles in Scala — Coursera (Martin Odersky)
- Scala 3 New Features — 공식 문서
유료
더 체계적인 학습을 원하는 분을 위한 유료 강의입니다.
- Rock the JVM — 종합적인 Scala 강의
- Zionomicon — ZIO 심화
핵심 포인트
- 무료 추천: Coursera의 Martin Odersky 강의 (Scala 창시자)
- 유료: Rock the JVM (종합적), Zionomicon (ZIO 심화)
- Scala 3: 공식 문서의 New Features 페이지 필독
라이브러리 문서#
주요 Scala 라이브러리들의 공식 문서 링크입니다.
함수형 프로그래밍
- Cats — 타입 클래스 라이브러리
- ZIO — 효과 시스템
- Cats Effect — 비동기/동시성
웹 개발
- Play Framework — 웹 프레임워크
- http4s — 함수형 HTTP
- Akka HTTP — 액터 기반 HTTP
데이터 처리
- Apache Spark — 분산 데이터 처리
- Apache Kafka — 스트리밍 플랫폼
- Doobie — 함수형 JDBC
JSON
테스트
- ScalaTest — 테스트 프레임워크
- MUnit — 경량 테스트
- ScalaCheck — 속성 기반 테스트
핵심 포인트
- 함수형: Cats(타입 클래스), ZIO(효과 시스템), Cats Effect(비동기)
- 웹: http4s(함수형), Play(풀스택), Akka HTTP(액터 기반)
- 데이터: Doobie(DB), Circe(JSON), Spark(분산 처리)
커뮤니티#
Scala 개발자들과 소통할 수 있는 채널들입니다.
포럼/디스코드
- Scala Users Forum — 공식 포럼
- Scala Discord — 실시간 채팅
- Typelevel Discord — Cats, fs2 등
Q&A
블로그/뉴스
- Scala Times — 주간 뉴스레터
- Typelevel Blog — 함수형 Scala
- Li Haoyi’s Blog — Scala 팁
핵심 포인트
- 실시간 질문: Scala Discord, Typelevel Discord
- Q&A: Stack Overflow(검색), Reddit r/scala(토론)
- 최신 정보: Scala Times 주간 뉴스레터 구독
도구#
개발 생산성을 높여주는 도구들입니다.
IDE
유틸리티
- Scastie — 온라인 Scala 실행 ⭐ 이 가이드의 모든 예제를 여기서 실행 가능!
- Scaladex — 라이브러리 검색
- Scalafmt — 코드 포맷터
- Scalafix — 리팩토링 도구
핵심 포인트
- IDE: IntelliJ(완성도), VS Code + Metals(가벼움)
- 필수 도구: Scastie(온라인 실행), Scaladex(라이브러리 검색)
- 코드 품질: Scalafmt(포맷팅), Scalafix(리팩토링)
컨퍼런스#
Scala 커뮤니티의 주요 컨퍼런스들입니다.
- Scala Days — 주요 Scala 컨퍼런스
- Scala.io — 유럽 Scala 컨퍼런스
- Typelevel Summit — 함수형 Scala
추천 학습 경로#
단계별 학습 경로를 제안합니다.
입문자
- Quick Start로 환경 설정
- Tour of Scala로 핵심 개념
- “Scala for the Impatient” 또는 Coursera 강의
- 간단한 프로젝트 실습
중급자
- “Programming in Scala” 정독
- Cats 또는 ZIO 학습
- 실무 프로젝트에 함수형 스타일 적용
고급자
- “Functional Programming in Scala”
- “Scala with Cats”
- 타입 시스템 심화 (Shapeless, Type-level programming)
- 오픈 소스 기여