'언어 · 런타임' 카테고리의 글 목록
게으른 개발자
언어 · 런타임/Node.js
Node.js 설치 및 개발 환경 세팅 방법 완전 정복

2025.05.24
Node.js 개발 환경 구성 방법Node.js는 JavaScript 런타임으로, 백엔드 서버 개발에 널리 사용됩니다. 이 글에서는 Node.js 개발 환경을 처음 구성하는 방법을 단계별로 정리합니다.1단계: Node.js 설치Node.js는 공식 웹사이트에서 설치할 수 있습니다.어떤 버전을 설치할까?LTS (Long Term Support): 안정적인 장기 지원 버전. 추천Current: 최신 기능 포함, 실험적 프로젝트에 적합설치 방법Windows / macOS위 링크에서 OS에 맞는 설치 프로그램 다운로드 및 실행Ubuntu (리눅스)curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nod..
언어 · 런타임/설계 패턴
TypeScript 클래스 설계 완전 정복: constructor vs 필드 초기화 차이와 활용법

2025.05.22
글을 쓰게 된 계기최근 TypeScript 기반의 인증 서비스를 리팩토링하면서, 서비스 클래스 내부에서 값을 어떻게 초기화할지 고민할 일이 많았습니다. constructor를 활용해 외부 값을 주입할지, 아니면 내부에서 직접 고정값을 넣을지에 따라 테스트 코드 작성의 난이도와 유연성이 크게 달라졌기 때문입니다.이 경험을 바탕으로, constructor와 필드 직접 초기화의 차이를 명확히 비교하고 각각의 적절한 사용처를 정리해두면 좋겠다는 생각에 이 글을 작성하게 되었습니다.클래스를 설계할 때 생성자(constructor)를 사용할지, 아니면 필드에 직접 값을 초기화할지에 따라 코드의 유연성과 테스트 가능성에 큰 차이가 발생합니다. 본 글에서는 두 방식의 차이를 예제와 함께 명확히 비교해보겠습니다.1. 비..
언어 · 런타임
TokenService는 왜 static이어야 했을까? 객체지향을 넘나드는 JS 설계 회고
2025.05.12
JavaScript에서 class로 바꾸면서 static을 사용하는 이유최근에 작성한 코드에서 기존 함수 기반 설계를 class 구조로 전환하면서 static 키워드를 사용하게 되었다. 이 과정에서 왜 static을 사용해야 했는지, 언제 static이 유용한지를 직접 느끼고 정리해본다.1. 클래스 기반 구조로 전환한 이유기존에는 다음과 같은 순수 함수 구조로 코드를 구성했었다.function generateToken() { ... }function verifyToken(token) { ... }하지만 점점 기능이 늘어나면서함수가 서로 강하게 연관되고네임스페이스 충돌이 걱정되고유지보수와 테스트가 어려워지면서관련 로직을 하나의 책임 단위(class)로 묶는 구조로 변경하였다.class TokenServic..
언어 · 런타임
JavaScript 출력 최적화 - 백준에서 console.log() 쓰면 안 되는 이유
2025.05.11
JavaScript로 백준 문제를 풀 때 console.log()를 사용하면 시간 초과가 나는 이유JavaScript로 알고리즘 문제를 풀 때, 특히 백준에서 console.log()를 반복적으로 사용하면 시간 초과(Time Limit Exceeded, TLE)가 발생하는 경우가 많습니다. 그 이유와 해결책을 아래와 같이 정리합니다.1. 문제의 원인: console.log()는 느린 입출력 방식이다JavaScript의 console.log()는 본래 개발자 도구용 디버깅 함수입니다. 출력 최적화를 목적으로 설계된 것이 아니라, 가독성과 유연함에 초점이 맞춰져 있습니다.각 console.log() 호출 시 내부적으로출력 스트림 처리문자열 변환 및 줄바꿈 처리flush(출력 버퍼 비우기) 수행 등 부가 비용..
언어 · 런타임/JavaScript
JavaScript DFS에서 [...path, i]와 push/pop 비교 - 상태 복사 vs 복원
2025.05.08
1. 문법 개념 요약JavaScript에서 ... 전개 연산자는 배열의 요소를 펼쳐서 새로운 배열을 만드는 데 사용된다.const path = [1, 2];const newPath = [...path, 3]; // 결과: [1, 2, 3]기존 배열 path를 복사하면서 3이라는 새 요소를 뒤에 추가한 형태기존 배열을 변경하지 않고, 새로운 배열을 만들어냄 (불변성 유지)2. DFS/재귀 구조에서의 활용DFS(또는 백트래킹)에서 현재 상태(path)를 복사해서 다음 단계로 넘길 때 유용하다.function dfs(depth, path) { if (depth === M) { console.log(path); return; } for (let i = 1; i 각 DFS..