# Effect - TypeScript로 강력한 앱 구축을 도와주는 라이브러리

> Clean Markdown view of GeekNews topic #15381. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15381](https://news.hada.io/topic?id=15381)
- GeekNews Markdown: [https://news.hada.io/topic/15381.md](https://news.hada.io/topic/15381.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-06-17T09:53:02+09:00
- Updated: 2024-06-17T09:53:02+09:00
- Original source: [effect.website](https://effect.website/)
- Points: 30
- Comments: 3

## Summary

"The missing Standard Library for TypeScript" 라는 소제목이 잘 설명해줍니다. 복잡한 동기/비동기 프로그램을 쉽게 만들 수 있게 도와줍니다. TypeScript를 사용하신다면 꼭 살펴보세요.

## Topic Body

- "The missing Standard Library for TypeScript"  
- 복잡한 동기/비동기 프로그램을 쉽게 만들 수 있도록 설계  
- 코드를 더욱 Composable, Reusable, Testable 하게   
- Maximum Type-Safety(에러 핸들링 포함)  
- 다양한 라이브러리 제공   
- 클러스터링 & 워크플로우 제공 (알파버전)  
- 폭넓은 호환성   
  - Node, Deno, Bun, Cloudflare Workers, Chrome   
  - React, Solid.JS , Vite, Next.JS, Tauri  
- 주요 특징   
  - 동시성(Concurrency) : Fiber 기반 동시성 모델을 통해 고도로 확장 가능하고 초저지연 애플리케이션을 구현 가능  
  - 조합성(Composability) : 작고 재사용 가능한 구성 요소를 사용하여 유지 관리가 용이하고 읽기 쉬우며 유연한 소프트웨어를 구축 가능   
  - 리소스 안전성(Resource Safety) : 프로그램이 실패하더라도 리소스의 획득과 해제를 안전하게 관리 가능   
  - 타입 안전성(Type Safety) : 타입 추론과 타입 안전성에 중점을 두고 있어, TypeScript 타입 시스템을 최대한 활용 가능   
  - 오류 처리(Error Handling) : 내장 오류 처리 기능을 사용하여 구조화되고 신뢰할 수 있는 방식으로 오류를 처리 가능  
  - 비동기성(Asynchronicity) : 코드가 동기식이든 비동기식이든 동일하게 보이도록 작성 가능   
  - 관측 가능성(Observability) : 완전한 추적 기능을 통해 프로그램의 실행을 쉽게 디버그하고 모니터링 가능  
  
#### 왜 Effect 인가?  
  
- 프로그래밍은 어려움  
- 라이브러리와 앱을 만들 때 많은 도구를 사용해 복잡성을 관리함  
- Effect는 TypeScript 프로그래밍에 대한 새로운 사고방식을 제시함  
- Effect 생태계의 도구를 통해 더 나은 애플리케이션과 라이브러리를 구축할 수 있음  
- 이를 통해 TypeScript 언어와 타입 시스템을 더 잘 이해하고 프로그램을 더 신뢰성 있고 유지 관리하기 쉽게 만들 수 있음.  
  
##### Effect 패턴  
  
- 일반적인 TypeScript 코드에서는 함수가 성공하거나 예외를 던질 것이라고 가정함  
  - 예: `divide` 함수는 0으로 나누면 예외를 던짐  
- 타입만 봐서는 이 함수가 예외를 던질 수 있다는 것을 알 수 없음  
- 코드베이스에 수백, 수천 개의 함수가 있을 때 이 문제는 커짐  
- 예외 처리를 잊기 쉽고, 관리하기 어려움  
- TypeScript의 컴파일러는 버그, 도메인 오류 및 일반적인 복잡성에 대한 첫 번째 방어선임  
  
##### Effect 패턴 적용하기   
  
- Effect의 주요 인사이트는, 성공 값뿐만 아니라 오류와 "컨텍스트"를 추적하기 위해 타입 시스템을 사용할 수 있다는 것  
  - 예: `divide` 함수의 Effect 버전은 예외를 던지지 않고, 오류를 호출자에게 전달함  
- 오류와 성공 값을 관리하는 기능을 제공  
- 컨텍스트 추적을 통해 모든 인수를 전달하지 않고도 함수에 추가 정보를 제공할 수 있음  
  - 예: 테스트 중 외부 서비스의 실제 구현을 모의 객체로 교체 가능  
  
```typescript  
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  
```  
  
##### Effect 생태계  
  
- Effect의 독특한 인사이트와 다른 도구들이 결합되어 복잡한 애플리케이션을 쉽게 만들 수 있는 풍부한 라이브러리 생태계가 형성됨  
- 과거에는 불가능해 보였던 것들이 이제는 평범하게 됨  
- Effect 생태계는 빠르게 성장 중이며, Effect의 GitHub에서 확인 가능함  
  
##### 바퀴를 재발명하지 말 것  
  
- TypeScript 애플리케이션 코드에서는 종종 같은 문제를 반복적으로 해결함  
- 외부 서비스, 파일 시스템, 데이터베이스와의 상호작용은 모든 애플리케이션 개발자에게 공통된 문제임  
- Effect는 이러한 문제들에 대한 표준화된 솔루션을 제공하는 풍부한 라이브러리 생태계를 제공함  
- 여러 종속성을 설치할 필요 없이 Effect는 많은 문제를 한 번에 해결함  
  
##### 실용적인 문제 해결  
  
- Effect는 Scala와 Haskell에서 영감을 받음.  
- 그러나 Effect의 목표는 실용적인 도구 키트를 제공하여 TypeScript 애플리케이션과 라이브러리를 구축할 때 직면하는 일상적인 문제를 해결하는 것임  
  
##### 즐기면서 배우기  
  
- Effect를 배우는 것은 재미있음  
- 많은 개발자들이 실무에서 Effect를 사용해 실제 문제를 해결하고 있음  
- Effect 생태계의 일부를 먼저 사용해보고, 점점 더 많은 도구를 활용할 수 있음  
- 처음에는 Effect의 개념이 낯설 수 있으나, 문서를 읽고 핵심 개념을 이해하는 데 시간을 들이면 나중에 더 고급 도구를 사용할 때 도움이 됨  
- Effect 커뮤니티는 항상 학습과 성장을 도울 준비가 되어 있음. Discord나 GitHub를 참고할 것

## Comments



### Comment 26539

- Author: firea32
- Created: 2024-06-24T11:31:49+09:00
- Points: 1

rust 가 가지고 있는 핵심이랑 비슷한 궤를 가지고 있네요.

### Comment 26339

- Author: toaonly
- Created: 2024-06-17T16:36:24+09:00
- Points: 1

좀 더 써봐야 알 것 같지만 fp-ts 에 비하면 훨씬 쾌적하게 사용할 수 있네요

### Comment 26323

- Author: seunggi
- Created: 2024-06-17T10:42:48+09:00
- Points: 1

fp-ts 가 3.0 개발을 안하고 effect로 합류하기로 했습니다.  
  
fp-ts 를 쓴다면 effect를 고려해 보시면 좋습니다.  
  
https://x.com/MichaelArnaldi/status/1626975031048773635  
https://effect.website/docs/other/fp-ts
