전체 글70 [ CodeSignal ] 재귀를 이용한 팩토리얼 계산: 메모이제이션 재귀는 복잡한 문제를 단순하고 이해하기 쉬운 코드로 표현할 수 있게 해주는 강력한 프로그래밍 기법입니다. 그러나 때로는 재귀 호출이 과도하게 발생하여 성능 저하나 스택 오버플로우와 같은 문제가 생길 수 있습니다. 이 글에서는 재귀를 사용하여 리스트의 각 정수에 대한 팩토리얼을 계산하는 방법을 살펴보고, 메모이제이션(memoization)을 통해 어떻게 성능을 향상시킬 수 있는지 알아보겠습니다. 팩토리얼이란?팩토리얼은 수학에서 자연수의 곱을 의미하며, 기호 n!로 표기합니다.정의:n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1( 0 ! = 1 ) (예외적으로 0의 팩토리얼은 1로 정의됩니다.)예를 들어:3 ! = 3 × 2 × 1 = 65 ! = 5 × 4 × 3 × 2 × 1 = .. 2024. 10. 8. [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. [백준 11060번] 점프 점프 문제출처:https://www.acmicpc.net/problem/11060 백준 11060번 문제는 "점프 점프"라는 문제로, 주어진 배열에서 최단 거리를 이동하여 마지막 칸에 도달하는 방법을 찾는 문제입니다. 이 문제를 해결하기 위해서는 동적 프로그래밍(DP) 접근법을 사용하였습니다. 아래에 문제 풀이 과정을 단계별로 자세히 설명하겠습니다. 문제 이해주어진 배열에서 각 원소는 그 위치에서 최대 몇 칸을 점프할 수 있는지를 나타냅니다. 목표는 첫 번째 칸에서 시작하여 마지막 칸에 도달하는 최소 점프 횟수를 구하는 것입니다. 입력 및 출력 형식입력: 첫 줄에 배열의 크기 N이 주어지고, 두 번째 줄에 N개의 정수가 주어집니다.출력: 마지막 칸에 도달하기 위한 최소 점프 횟수를 출력합니다. 만약 도달할 .. 2024. 6. 4. 시간복잡도와 공간복잡도 시간복잡도와 공간복잡도는 알고리즘의 성능을 평가하는 두 가지 중요한 척도입니다. 시간복잡도 (Time Complexity)시간복잡도는 알고리즘이 실행되는 데 걸리는 시간을 입력 크기와의 관계로 표현한 것입니다. 보통 Big-O 표기법으로 나타내며, 가장 자주 사용되는 표기법 중 몇 가지는 다음과 같습니다:O(1): 입력 크기에 상관없이 항상 일정한 시간이 걸리는 경우입니다. 예: 배열의 첫 번째 요소에 접근하는 경우.O(n): 입력 크기에 비례해서 시간이 증가하는 경우입니다. 예: 배열의 모든 요소를 한 번씩 방문하는 경우.O(n^2): 입력 크기의 제곱에 비례해서 시간이 증가하는 경우입니다. 예: 이중 루프를 사용하는 경우.O(log n): 입력 크기의 로그에 비례해서 시간이 증가하는 경우입니다. 예:.. 2024. 6. 1. 이전 1 2 3 4 ··· 8 다음 728x90