목차
서론
https://www.youtube.com/shorts/2W1fQH0wEe4
https://www.youtube.com/shorts/MzFCHctD0lM
https://www.youtube.com/shorts/MzFCHctD0lM
제로초 선생님의 유튜브를 보는 도중 effect라는 라이브러리의 존재를 알게 되었다.
제로초 선생님의 말을 빌리자면 타입스크립트의 새로운 표준이 될 수 있는 라이브러리라고 한다.
Effect 라이브러리란?
Effect는 개발자들에게 복잡하고, 동기,비동기 한 프로그램에 도움을주고자 한 강력한 TS라이브러리라고한다.
Docs
https://effect.website/
https://effect.website/docs/introduction
https://github.com/Effect-TS/effect
Effect공식 사이트 링크
Effect라이브러리를 사용하려면 다음과 같은 요구수치가 필요하였다.
Requirements
- TypeScript 5.4 or newer
- The Strict flag enabled in your tsconfig.json file
{
// ...
"compilerOptions": {
// ...
"strict": true,
},
}
사용예시
Error Handling
const getTodo = (
id: number
): Effect.Effect<unknown, HttpClientError> =>
HttpClientRequest.get(`/todos/${id}`).pipe(
HttpClient.fetchOk,
HttpClientResponse.json,
)
Retry
const getTodo = (
id: number
): Effect.Effect<unknown, HttpClientError> =>
HttpClientRequest.get(`/todos/${id}`).pipe(
HttpClient.fetchOk,
HttpClientResponse.json,
//아래코드가 추가됨
Effect.retry(
Schedule.exponential(1000).pipe(
Schedule.compose(Schedule.recurs(3)),
),
),
)
Interruption
const getTodo = (
id: number
): Effect.Effect<
unknown,
//추가된 코드
HttpClientError | TimeoutException
> =>
HttpClientRequest.get(`/todos/${id}`).pipe(
HttpClient.fetchOk,
HttpClientResponse.json,
//추가된 코드
Effect.timeout("1 second"),
Effect.retry(
Schedule.exponential(1000).pipe(
Schedule.compose(Schedule.recurs(3)),
),
),
)
Observability
const getTodo = (
id: number
): Effect.Effect<
unknown,
HttpClientError | TimeoutException
> =>
HttpClientRequest.get(`/todos/${id}`).pipe(
HttpClient.fetchOk,
HttpClientResponse.json,
Effect.timeout("1 second"),
Effect.retry(
Schedule.exponential(1000).pipe(
Schedule.compose(Schedule.recurs(3)),
),
),
Effect.withSpan("getTodo", { attributes: { id } }),
)
결론
복잡한 프로그램일수록 점점 어려워지는 구현에 도움을 주고자 한 라이브러리로 이해하고있고
rxjs등 라이브러리가 있고 그 라이브러리에도 단점이있어 effect가 도움이된다는거같다.
아직 사용해보진않았지만 공부를 해두려고 글을 남긴다
'타입스크립트(TS) > 라이브러리' 카테고리의 다른 글
[turbo, tailwind] TurboRepo에 HeadlessUI를 사용해보기(기록용) (2) | 2024.12.01 |
---|