0Pricing
TypeScript Academy · 강의

오류 채널과 의존성

효과에서 타입이 지정된 오류와 주입된 의존성을 추적합니다.

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

오류 채널과 의존성

두 채널이 Effect를 강력하게 만듭니다. 바로 타입이 지정된 오류 채널(E)과 요구 사항 채널(R)입니다. 이 레슨에서는 타입이 지정된 오류를 발생시키는 방법과 Context 및 Layer를 통해 의존성을 제공하는 방법을 알아봅니다.

Effect.fail을 사용한 타입이 지정된 실패

Effect.fail은 값을 오류 채널에 넣습니다. 태그가 있는 클래스를 사용하면 오류를 쉽게 구분할 수 있습니다.

import { Effect } from "effect";

class NotFound { readonly _tag = "NotFound"; }
class Forbidden { readonly _tag = "Forbidden"; }

const load = Effect.fail(new NotFound());
// Effect<never, NotFound, never>

조합할수록 오류가 유니언됩니다

서로 다른 오류를 가진 효과를 순서대로 연결하면 오류가 E 채널에서 유니언으로 합쳐지므로, 타입에 가능한 모든 실패 방식이 나열됩니다.

// Effect<A, NotFound, never> then Effect<B, Forbidden, never>
// => Effect<B, NotFound | Forbidden, never>

오류 처리

Effect.catchAll 또는 catchTag로 오류를 처리하면 오류가 채널에서 제거되거나 다른 오류로 대체됩니다. NotFound를 처리하면 E의 범위가 좁아집니다.

import { Effect, pipe } from "effect";

const safe = pipe(
  Effect.fail(new NotFound()),
  Effect.catchTag("NotFound", () => Effect.succeed("default"))
);
// Effect<string, never, never> -- error handled

복구와 전파

오류를 처리하지 않으면 오류는 E에 남아 호출자에게 전파되고, 호출자는 이를 처리하거나 다시 전파해야 합니다. 컴파일러가 오류가 조용히 사라지는 일이 없도록 보장합니다.

의존성 선언

서비스는 Context.Tag로 선언합니다. 이 서비스를 사용하는 효과는 R 채널에 해당 서비스를 요구 사항으로 갖게 됩니다.

import { Context, Effect } from "effect";

class Random extends Context.Tag("Random")<
  Random,
  { readonly next: Effect.Effect<number> }
>() {}

const program = Effect.gen(function* () {
  const random = yield* Random;
  return yield* random.next;
});
// Effect<number, never, Random>

타입에 표시되는 요구 사항

이제 R 채널에 Random이 포함된 것을 확인해 보세요. 이 효과는 해당 요구 사항이 충족될 때까지 실행할 수 없으며, 컴파일러가 이를 강제합니다.

Layer로 제공하기

Layer는 서비스를 만드는 방법을 설명합니다. Layer를 제공하면 요구 사항이 충족되고 R에서 제거됩니다.

import { Effect, Layer } from "effect";

const RandomLive = Layer.succeed(Random, {
  next: Effect.sync(() => Math.random()),
});

const runnable = Effect.provide(program, RandomLive);
// Effect<number, never, never> -- R cleared

Layer 조합

Layer는 다른 Layer에 의존할 수 있고 서로 합쳐질 수도 있어 전체 의존성 그래프를 구성합니다. Effect는 각 타입을 바탕으로 올바른 순서에 맞춰 연결합니다.

import { Layer } from "effect";
// Layer.merge(DatabaseLive, LoggerLive)
// Layer that provides both services

Layer를 바꿔 가며 테스트하기

의존성이 명시적이므로 테스트에서는 테스트 대상 프로그램을 건드리지 않고 다른 Layer(예: 결정론적인 Random)를 제공할 수 있습니다. 이는 요구 사항 추적의 큰 장점입니다.

import { Layer, Effect } from "effect";

const RandomTest = Layer.succeed(Random, {
  next: Effect.succeed(0.5),
});
// Effect.provide(program, RandomTest) -> deterministic

이것이 중요한 이유

오류 채널과 요구 사항 채널은 보이지 않던 가정을 컴파일러가 검사하는 계약으로 바꿉니다. 모든 실패는 처리하거나 선언해야 하고, 모든 의존성은 제공해야 합니다. 이것이 대규모 Effect 프로그램을 견고하고 테스트하기 쉽게 만듭니다.

간단한 확인

오류 채널과 의존성에 대한 이해를 확인해 보세요.

복습

오류 채널은 타입이 지정된 실패(Effect.fail을 사용하고 catchTag/catchAll로 범위를 좁힘)를 추적하며, 이러한 실패는 조합할수록 유니언됩니다. 한편 요구 사항 채널은 Context.Tag로 선언한 서비스를 추적하고, Effect.provide를 통해 Layer를 제공하면 요구 사항이 충족됩니다. 두 채널을 함께 사용하면 실패와 의존성을 컴파일러가 검사할 수 있고, Layer를 바꿔 테스트하기도 쉽습니다.

자주 묻는 질문

“오류 채널과 의존성” 강의는 무료인가요?

네 — “오류 채널과 의존성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“오류 채널과 의존성”에서 뭘 배우나요?

효과에서 타입이 지정된 오류와 주입된 의존성을 추적합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

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

“오류 채널과 의존성” 강의는 얼마나 걸리나요?

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

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

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

이 강의의 모든 강의

  1. 효과 시스템이 중요한 이유
  2. Effect 타입
  3. 효과 조합
  4. 오류 채널과 의존성
← TypeScript Academy(으)로 돌아가기