Nest.js 공식문서를 살펴보면 REST, GraphQL, WebSocket 등 다양한 기능을 제공하는걸 알 수 있다.
하지만 공식문서에는 없는 작지만 숨겨진 기능들이 존재한다.
이번 포스트에서는 이러한 기능 중 하나인 CLI Plugin에 대한 소개와 직접 플러그인을 만드는 방법을 소개한다.
Kotlin으로 도메인 모델링하기
Kotlin용 함수형 라이브러리 Arrow의 공식문서에 있는 Domain modeling 블로그 글을 번역한 내용입니다.
Nest.js는 어떻게 순환 참조 문제를 해결할까?
이전 포스트에서는 Nest.js의 injector 구현을 살펴보았다.
injector가 특정 인스턴스의 의존성 타입을 알아내는 방법에 대한 글이었는데, 이번에는 injector를 구현하면서 발생했던 이슈에 대해 살펴보려고 한다.
Nest.js의 injector는 어떻게 생성자에 지정한 의존성 대상을 알아낼까?
최근 Nest.js의 기본 기능을 직접 구현해보는 스터디를 진행하였다.
스터디 목표는 Nest.js의 @Controller
, @Injectable
, @Module
등의 데코레이터를 만들고, DI를 구현해 간단한 API 서버를 올리는 기능을 구현하는 것이었다.
또한 최대한 Nest.js의 코드를 참고하지 않고 직접 구현해보려고 노력했다.
이 과정에서 의존성 주입을 위한 Injector를 구현하기 위해 특정 클래스가 가지고 있는 의존성을 파악하는 방법을 찾아야했다.
또한 구현 과정에서 순환참조 문제를 해결해야했고, 이를 위해 Nest.js에서 제공하는 forwardRef
가 어떤 원리도 동작하는지 알아보았다.
이번 포스트에서는 그 중에서 Injector의 의존성 주입 대상을 찾는 방법을 소개한다.
Open Telemetry와 Effect-TS로 Nest.js 애플리케이션 모니터링하기
요즘에는 웹 어플리케이션의 모니터링을 위해 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
Effect-TS로 테스트 가능하고 효율적인 코드 작성하기
대수적 자료형을 제공하는 Typescript 라이브러리인 fp-ts의 메인테이너 Giulio Canti의 최근 활동을 보면 fp-ts그룹 내의 저장소에 작업을 하는것을 볼 수 있다.
그 중에서 core 저장소를 보면 해당 프로젝트의 목적이 @effect
생태계와의 통합을 위한 것이라고 한다.
core 라이브러리는 대수적 자료형을 위한 인터페이스와 Option
, Either
와 같은 기본 자료형을 제공하며 효과를 다루기 위해 기존에 사용한 Task
, TaskEither
는 effect를 사용할 것을 권장하고 있다.
해당 라이브러리에 관심이 생겨 관련 문서를 찾아보았지만 자료가 많지 않았고 공식문서조차 매우 부실한 상태이다.
다행히 프로젝트의 주요 메인테이너인 mikearnaldi가 발표한 여러 영상이 있어 이를 활용하였다.
이번 글에서는 발표 영상중 하나인 Write Efficient & Testable code with effect-ts의 내용을 정리해보았다.
fly.io 에서 제공하는 redis 사용하기
fly.io 에서는 웹 어플리케이션에서 자주 사용하는 redis 인스턴스를 제공한다.
무료플랜도 지원하기 때문에 필요한 상황에서 유용하게 사용할 수 있다.
이번 포스트에서는 redis 인스턴스 생성 방법과 ioredis
를 사용할 경우 발생하는 접속문제 해결방안을 공유하고자 한다.
Typescript로 확률 Monad 구현하기 - 2
이전 포스트에서 이어지는 내용입니다.
Typescript로 확률 Monad 구현하기 - 1
최근에 Probability Monads from scratch in 100 lines of Haskell 글을 읽어보았는데 내용이 꽤 재밌어서 Typescript로 구현한 과정을 소개하고자 한다.
해당 글은 haskell을 사용해 확률분포를 표현하는 Monad를 만들어서 간단한 확률을 구하는 과정을 담고있다.
보통 순수 함수형 언어에서 주로 사용하는 Either
, State
같은 Monad 대신 언뜻 보기에는 관련이 없어보이는 확률분포 계산에 Monad를 활용하는 것이 신기했다.
그래서 나에게 조금 더 익숙한 언어인 Typescript로 구현해보았다.
모든 구현 코드는 Github에 올려두었다.
배달비 노노 프로젝트을 진행하며
사이드 프로젝트로 진행하고 있는 배달비 노노 백엔드 서버에 대한 소개와 기술적인 고민에 대한 내용을 담았다.