타입스크립트(TypeScript)로 **에러를 값으로, 의존성을 명시적으로** 관리하는 방법

by DD
1개월 전
조회수 8

Effect-TS 없이 타입스크립트(TypeScript)의 기능을 활용하여 에러 처리(Error Handling)의존성 주입(Dependency Injection)을 개선하는 방법을 제시함.

에러를 값으로 처리(Typed Errors as Values)하여, `try/catch` 블록 대신 타입 안전성(Type Safety)을 확보하고, 컴파일 타임(Compile Time)에 에러를 감지함.

함수 시그니처(Function Signature)에 의존성을 명시하여, 테스트 용이성(Testability)을 높이고, 코드의 가독성을 향상시킴.

Monad와 같은 개념을 직접 구현하는 대신, 타입스크립트(TypeScript)의 기본 기능을 활용하여 코드 복잡성(Code Complexity)을 줄이는 방법을 제안함.

타입 시스템을 활용한 에러 처리(Error Handling)

게시물은 에러를 값으로 처리(Typed Errors as Values)하는 방식을 통해 `Promise`의 문제점을 해결한다. 기존의 `Promise`는 에러 발생 시 `try/catch` 블록을 사용해야 하지만, 에러의 종류를 알 수 없다는 단점이 있다. 저자는 구분된 유니온(Discriminated Union)을 사용하여 에러의 종류를 명시하고, 컴파일러가 모든 에러 케이스를 처리하도록 강제한다. 특히, `assertNever` 함수를 통해 타입 안전성(Type Safety)을 확보하고, 에러 누락을 방지한다.

의존성 주입(Dependency Injection)의 단순화

저자는 의존성 주입(Dependency Injection)을 위해 복잡한 프레임워크 대신, 함수 시그니처를 활용하는 간단한 방법을 제시한다. `signupUser` 함수가 사용하는 데이터베이스, 이메일 서비스, 분석 클라이언트 등의 의존성을 함수 파라미터로 명시함으로써, 코드의 테스트 용이성(Testability)을 높이고, 의존성을 명확하게 파악할 수 있게 한다. 이는 클린 아키텍처(Clean Architecture)의 '인프라 계층'을 단순하게 구현하는 방법으로, 코드의 유지보수성을 향상시킨다.

코드 구성(Composition)의 한계와 Effect-TS

게시물은 flatMap과 유사한 `andThen` 헬퍼 함수를 사용하여 코드 구성(Composition)을 개선하지만, 중첩된 구조로 인해 복잡성이 증가하는 문제를 지적한다. 저자는 Effect-TS의 `do notation`과 같은 기능을 언급하며, 더 복잡한 에러 처리 및 비동기 흐름 관리를 위한 대안을 제시한다. 하지만, 타입스크립트(TypeScript)의 한계로 인해 Effect-TS와 같은 완벽한 솔루션은 어렵다고 언급하며, 수동적인 방법(Manual Approach)의 중요성을 강조한다.

Effect-TS의 대안, 그리고 트레이드오프(Trade-offs)

저자는 Effect-TS가 제공하는 강력한 기능들을 인정하면서도, 타입스크립트(TypeScript)의 기본 기능을 활용하는 방법의 장점을 강조한다. 타입 안전성(Type Safety), 의존성 주입(Dependency Injection), 그리고 코드 구성(Composition)을 위한 간단한 패턴들을 제시하며, Effect-TS 없이도 상당 부분의 문제를 해결할 수 있음을 보여준다. 하지만, 복잡한 상황에서는 Effect-TS와 같은 프레임워크의 필요성을 인정하며, 각 방법의 트레이드오프(Trade-offs)를 명확히 제시한다.

Effect Without Effect-TS: Algebraic Thinking in Plain TypeScript · cekrem.github.io