0Pricing
Scala for Backend Engineering & Functional Programming · 강의

ZIO 앱 실행

ZIOAppDefault를 알아봅니다

ZIO 앱 실행은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

설명에서 실행까지

ZIO 값은 설계도일 뿐입니다. 이를 실행하려면 ZIO 런타임에 전달해야 하며, 일반적으로 런타임을 직접 호출하는 대신 ZIOAppDefault를 확장합니다.

ZIOAppDefault

ZIOAppDefault를 확장하고 run을 구현합니다. 프레임워크는 기본 서비스(Console, Clock, Random, System)를 제공하고 시작과 종료를 관리합니다.

import zio._

object Hello extends ZIOAppDefault {
  def run = Console.printLine("Hello, ZIO!")
}

run 값

run은 기본 서비스로 환경이 충족되는 ZIO입니다. 오류 타입과 성공 타입은 유연하며, 런타임이 실패를 보고하고 종료 코드를 설정합니다.

여러 단계로 구성된 앱

for 내포식으로 앱 로직을 조합합니다. 각 줄은 런타임에 의해 순서대로 실행되는 효과입니다.

import zio._

object Greeter extends ZIOAppDefault {
  def run = for {
    _    <- Console.printLine("What is your name?")
    name <- Console.readLine
    _    <- Console.printLine(s"Hello, $name!")
  } yield ()
}

run에서 계층 제공하기

앱이 사용자 지정 서비스에 의존한다면 run 효과에 provide를 사용하여 해당 계층을 제공해야 실행 전에 환경이 완전히 충족됩니다.

import zio._

object App extends ZIOAppDefault {
  // def run = program.provide(MyService.layer)
  def run = ZIO.unit
}

종료 코드

기본적으로 성공한 run은 코드 0으로 종료되고 실패한 경우에는 0이 아닌 코드로 종료됩니다. exitCode를 사용하여 명시적인 ExitCode를 반환할 수도 있습니다.

import zio._

object App extends ZIOAppDefault {
  def run = Console.printLine("done").exitCode
}

명령줄 인수

ZIOApp.args 또는 getArgs를 통해 ZIOAppArgs로 프로그램 인수에 접근하면 Chunk[String]이 반환됩니다.

import zio._

object App extends ZIOAppDefault {
  def run = for {
    args <- getArgs
    _    <- Console.printLine(s"args: ${args.mkString(", ")}")
  } yield ()
}

최상위에서 실패 처리하기

런타임이 깔끔한 메시지를 출력하도록 최상위 수준에서 오류를 처리하거나 기록하는 것이 좋습니다. run에서 catchAll 또는 tapError를 사용합니다.

import zio._

object App extends ZIOAppDefault {
  val logic = ZIO.fail("oops")
  def run = logic.catchAll(e => Console.printLine(s"Failed: $e"))
}

파이버 분기하기

run 내부에서 fork를 사용해 효과를 파이버에서 동시 실행하고 나중에 join할 수 있습니다. 런타임은 모든 파이버를 감독하고 종료할 때 중단합니다.

import zio._

val prog = for {
  fiber  <- ZIO.succeed(40).fork
  result <- fiber.join
  _      <- Console.printLine(s"got $result")
} yield ()

수동으로 Unsafe 실행하기

ZIOAppDefault 외부에서는 Unsafe.unsafe와 Runtime을 사용해 효과를 실행할 수 있지만, 이는 일반적인 앱 코드가 아니라 통합 경계에서만 사용해야 합니다.

import zio._

// Unsafe.unsafe { implicit u =>
//   Runtime.default.unsafe.run(myEffect).getOrThrow()
// }

일반 Scala main

비교를 위해 독립적인 Scala 진입점을 살펴보겠습니다. ZIOAppDefault는 main의 역할을 하면서 서비스 연결, 오류 보고, 파이버 감독을 처리합니다.

object Main {
  def main(args: Array[String]): Unit = {
    println("Hello, ZIO!")
  }
}

빠른 확인

ZIO 애플리케이션을 실행하는 권장 방법은 무엇인가요?

복습

ZIO 앱을 다음과 같이 실행하는 방법을 배웠습니다.

  • run 효과를 사용하는 ZIOAppDefault
  • 기본 서비스와 계층 provide
  • 종료 코드, 인수, 최상위 오류 처리
  • 파이버 분기와 안전하지 않은 경계

ZIO 기초 과정을 모두 마쳤습니다.

자주 묻는 질문

“ZIO 앱 실행” 강의는 무료인가요?

네 — “ZIO 앱 실행” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

“ZIO 앱 실행”에서 뭘 배우나요?

ZIOAppDefault를 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“ZIO 앱 실행” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ZIO 효과
  2. ZIO 조합
  3. 오류 채널과 의존성 채널
  4. ZIO 앱 실행
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기