본문 바로가기

개발일지30

[Monorepo] Monorepo 환경에서 ts-rest, zod, 그리고 tRPC 사용에 대한 고찰 최근 프로젝트에서 monorepo 구조를 채택하여 클라이언트와 서버 코드를 함께 관리하고 있습니다. 클라이언트는 모두 Next.js로 작성되었고, 서버는 NestJS를 사용하고 있습니다. 현재는 ts-rest와 zod를 활용하여 타입 안전성과 데이터 유효성 검사를 구현하고 있지만, tRPC를 알게되었고 도입하는 것이 좋을지 고민이 되었습니다. 이에 따라 각 도구의 장단점을 분석하고, 우리의 프로젝트 환경에 가장 적합한 선택을 찾아보았습니다.    ts-rest와 zod의 조합 장점타입 안전성 강화: ts-rest를 통해 서버와 클라이언트 간의 타입을 공유할 수 있어 런타임 오류를 줄일 수 있습니다.유효성 검사: zod를 사용하여 입력 데이터의 유효성을 검증함으로써 안정적인 API를 구축할 수 있습니다.R.. 2024. 9. 20.
[Monorepo] Monorepo 구축하기 제가 속한 팀에서는 10개 이상의 프론트 서버를 운영 중인데, 다양한 서비스와 서버를 운영하다 보니, 코드 중복과 유지보수의 복잡성, 그리고 서버 비용 증가와 같은 문제들이 발생했습니다. 이로 인해 코드 중복과 관리의 복잡성이 커졌고, 이를 해결하기 위한 방법을 고민한 끝에, 저는 모노레포(Monorepo)를 도입하기로 결정했습니다.  왜 모노레포인가? 여러 아키텍처 옵션 중 모노레포(Monorepo)를 선택한 이유는 여러 가지입니다. 멀티레포(Multi-repo)와 비교했을 때, 모노레포는 코드 중복 문제와 유지보수 복잡성 측면에서 큰 이점을 제공합니다. 특히 멀티레포 구조에서는 각 프로젝트가 별도의 저장소로 관리되기 때문에 공통 코드나 라이브러리를 여러 번 작성해야 하며, 서로 다른 버전을 관리하는 .. 2024. 9. 12.
Node.js의 내부 작동 방식을 이해하기 Node.js의 내부 작동 방식을 이해하기 위해, Node.js의 핵심 구성 요소인 V8 엔진, 이벤트 루프, 그리고 명령줄 옵션 파서에 대해 설명하겠습니다. 이를 위해 Node.js의 소스 코드 일부를 분석하며, 각 구성 요소가 어떻게 구현되어 있는지 살펴보겠습니다.   1. V8 엔진과 메모리 관리 V8 엔진이란?V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드를 기계어로 컴파일하여 실행합니다. Node.js는 이 V8 엔진을 사용하여 서버 측에서 자바스크립트를 실행합니다. Node.js는 C++로 작성된 코드를 통해 V8 엔진과 상호작용합니다.   메모리 관리: NodeArrayBufferAllocator ( node_internals.h )NodeArrayBufferAllo.. 2024. 8. 17.
Node.js의 내부 구조를 이해하기 Node.js의 내부 구조를 이해하기 위해 node.cc, node_main.cc, 그리고 관련 헤더 파일들(node_internals.h, node_options-inl.h)을 함께 살펴보겠습니다. 이들 파일은 Node.js의 초기화, V8 엔진의 설정, 이벤트 루프 관리, 그리고 명령줄 옵션 파싱 등 Node.js의 핵심 기능을 구현하는 데 사용됩니다.    1. node.cc와 node_main.cc Node.js의 초기화와 시작node.cc와 node_main.cc는 Node.js 애플리케이션이 시작될 때 실행되는 주요 함수들을 포함하고 있습니다. 여기에서 Node.js가 초기화되고, V8 엔진이 설정되며, 이벤트 루프가 시작됩니다.  Start 함수 (node_main.cc)node_main.c.. 2024. 8. 16.
1장. 타입스크립트 알아보기 [이펙티브 타입스트립트] 아이템 1 타입스크립트와 자바스크립트 관계 이해하기 타입스크립트는 다른 언어들과 다르게 저수준 언어로 컴파일되지 않습니다. 또 다른 고수준 언어인 자바스크립트로 컴파일되고, 실행됩니다. 타입스크립트가 자바스크립트로 컴파일되고 실행 역시 자바스크립트로 되는 이유는 자바스크립트의 장점을 활용하기 위함입니다. 자바스크립트의 표준성, 호환성, 유연성, 다양한 환경 지원, 그리고 풍부한 생태계를 활용할 수 있기 때문이라고 생각됩니다.  타입시스템의 목표 중 하나는 런타임에 오류를 발생시킬 코드를 미리 찾아내는 것. 명시적으로 타입을 선언하여 의도를 분명히 하게 되면 오류가 어디서 발생했는지 알 수 있고 올바른 해결책을 받을 수 있습니다. const student = [ {name: 'hoho', addres.. 2024. 8. 8.
[오픈소스] 오픈소스는 어디서부터 봐야할까? !! 다른 좋은 방법이 있다면 공유해 주세요!!!  STEP 1: README 우선 README을 읽어봐야 합니다. 오픈소스의 큰 맥락을 이해할 수 있습니다. README 중 기여가이드가 있습니다. 아래는 Node.js 의 CONTRIBUTING.md에 대한 내용입니다. 1. 기여의 유형Node.js 프로젝트에 기여할 수 있는 다양한 방법이 있습니다. 코드 작성뿐만 아니라 다음과 같은 활동도 포함됩니다: - 문서화 - 사용자 질문에 답변 - 프로젝트 인프라 관리 - Node.js 사용자들을 위한 옹호 활동 모든 기여는 환영받으며, 기여의 크기와 관계없이 모두 가치가 있습니다. 2. 오픈 거버넌스 모델 Node.js 프로젝트는 오픈 거버넌스 모델을 사용합니다. 이는 기여자들이 협력하여 프로젝트를 관리하고 .. 2024. 7. 1.
728x90