본문으로 건너뛰기

· 약 20분
Jake Son

Nest.js 공식문서를 살펴보면 REST, GraphQL, WebSocket 등 다양한 기능을 제공하는걸 알 수 있다.
하지만 공식문서에는 없는 작지만 숨겨진 기능들이 존재한다.
이번 포스트에서는 이러한 기능 중 하나인 CLI Plugin에 대한 소개와 직접 플러그인을 만드는 방법을 소개한다.

· 약 23분
Jake Son

최근 Nest.js의 기본 기능을 직접 구현해보는 스터디를 진행하였다.
스터디 목표는 Nest.js의 @Controller, @Injectable, @Module 등의 데코레이터를 만들고, DI를 구현해 간단한 API 서버를 올리는 기능을 구현하는 것이었다.
또한 최대한 Nest.js의 코드를 참고하지 않고 직접 구현해보려고 노력했다.

이 과정에서 의존성 주입을 위한 Injector를 구현하기 위해 특정 클래스가 가지고 있는 의존성을 파악하는 방법을 찾아야했다.
또한 구현 과정에서 순환참조 문제를 해결해야했고, 이를 위해 Nest.js에서 제공하는 forwardRef가 어떤 원리도 동작하는지 알아보았다.

이번 포스트에서는 그 중에서 Injector의 의존성 주입 대상을 찾는 방법을 소개한다.

스터디 저장소: https://github.com/joyfulprogrammers/nest-clone

· 약 16분
Jake Son

요즘에는 웹 어플리케이션의 모니터링을 위해 Datadog과 같은 도구를 사용한다. 최근에 작업중인 사이드 프로젝트도 모니터링을 위해 Datadog을 사용하려고 했다. 하지만 APM(Application Performance Monitoring)과 같은 기능은 유료로 제공되기에 무료 솔루션을 찾아보았다.

그 과정에서 Open Telemetry이라는 프로젝트를 알게 되었다. 오픈소스이며 내가 원하는 기능을 제공하고 있었고, 또한 이전 포스트에서 소개한 Effect-TS는 Open Telemetry에 대한 지원이 잘 되어있었다. 그래서 이를 활용해 Nest.js 환경에서 각 계층에 대한 span을 aop를 통해 자동으로 생성하고, 이를 jaeger로 수집하는 방법을 설명하고자 한다.

정보

포스트에 소개한 내용은 다음 저장소에 적용되어 있다. https://github.com/bae-no/bae-no-server

· 약 18분
Jake Son

대수적 자료형을 제공하는 Typescript 라이브러리인 fp-ts의 메인테이너 Giulio Canti의 최근 활동을 보면 fp-ts그룹 내의 저장소에 작업을 하는것을 볼 수 있다.

gcanti-profile

그 중에서 core 저장소를 보면 해당 프로젝트의 목적이 @effect 생태계와의 통합을 위한 것이라고 한다.
core 라이브러리는 대수적 자료형을 위한 인터페이스와 Option, Either와 같은 기본 자료형을 제공하며 효과를 다루기 위해 기존에 사용한 Task, TaskEither는 effect를 사용할 것을 권장하고 있다.

해당 라이브러리에 관심이 생겨 관련 문서를 찾아보았지만 자료가 많지 않았고 공식문서조차 매우 부실한 상태이다.
다행히 프로젝트의 주요 메인테이너인 mikearnaldi가 발표한 여러 영상이 있어 이를 활용하였다.
이번 글에서는 발표 영상중 하나인 Write Efficient & Testable code with effect-ts의 내용을 정리해보았다.

· 약 5분
Jake Son

fly.io 에서는 웹 어플리케이션에서 자주 사용하는 redis 인스턴스를 제공한다.
무료플랜도 지원하기 때문에 필요한 상황에서 유용하게 사용할 수 있다.
이번 포스트에서는 redis 인스턴스 생성 방법과 ioredis 를 사용할 경우 발생하는 접속문제 해결방안을 공유하고자 한다.

· 약 14분
Jake Son

최근에 Probability Monads from scratch in 100 lines of Haskell 글을 읽어보았는데 내용이 꽤 재밌어서 Typescript로 구현한 과정을 소개하고자 한다.

해당 글은 haskell을 사용해 확률분포를 표현하는 Monad를 만들어서 간단한 확률을 구하는 과정을 담고있다.
보통 순수 함수형 언어에서 주로 사용하는 Either, State같은 Monad 대신 언뜻 보기에는 관련이 없어보이는 확률분포 계산에 Monad를 활용하는 것이 신기했다.
그래서 나에게 조금 더 익숙한 언어인 Typescript로 구현해보았다.

모든 구현 코드는 Github에 올려두었다.