목록Nodejs (27)
만족

오늘날 프론트엔드와 백엔드를 막론하고 Node.js 생태계는 빠르게 성장하고 있으며, 그 중심에는 수많은 패키지와 의존성이 있다. 이 의존성들을 효율적으로 관리하는 것은 프로젝트의 성능과 안정성을 좌우하는 중요한 요소이다. npm, Yarn에 이어 새롭게 떠오르는 pnpm에 대해 자세히 알아보면서, 각 도구가 어떻게 패키지를 관리하고 디스크 공간을 사용하는지 함께 파헤쳐 본다. npm과 Yarn, 그리고 그들의 node_modules 이야기Node.js 생태계에서 가장 널리 사용되는 패키지 관리 도구는 역시 npm과 Yarn이다. 두 도구 모두 package.json 파일을 기반으로 프로젝트 의존성을 설치하고 관리하며, 설치된 패키지들은 대부분 프로젝트 루트의 node_modules 디렉토리에 저장된다...
생성된지 24시간 이내라면 저장된 파일을 사용하고, 캐시가 존재하지 않거나 24시간을 초과했다면 파일을 overwrite 하는 식으로 이미지 캐시를 운영하고 있다. 그런데 뒤늦게 캐시가 정상적으로 작동하지 않았다는걸 알았다. birthtime과 mtimebirthtime은 파일의 최초 생성 시간을 의미한다.mtime은 파일의 마지막 업데이트(modified) 시간을 의미한다. 이미 존재하는 파일에 append모드로 파일을 '쓰기'하면birthtime은 변경되지 않지만 mtime은 현재 시간으로 업데이트된다 overwrite file?그렇다면 파일을 overwrite 하면 어떻게 될까? 파일 내용을 완전히 대체하는 작업이기에 내 생각에는 birthtime이 변경된다고 생각했다. 하지만 write 모드로 o..

tsc 로 컴파일할때 항상 ts 파일만 컴파일하지는 않는다. ts + js 가 섞인 프로젝트에서 allowJS 옵션을 통해 js 파일도 tsc input으로 사용될 수 있다. 그러나 이렇게 js 를 tsc 인풋으로 사용할 때는 일부 오류들이 표시되지 않아 문제를 인식할 수 없다. 그 중 얼마 전 발견한 하나의 케이스를 소개한다. iterator + for-of iterator는 iterable(반복 가능) 한 객체로 Array, Map 도 iterable 객체다. iterable 객체는 for-of 를 이용해 순회 가능하다. for (const str of ['1', '2']){ console.log(str);} 이런식으로 of 뒤에 iterable 객체를 두고, of 앞의 변수에 할당하여 반복한다...

yarn classic yarn classic(v1) 과 npm에서 의존성을 추가하면 node_modules 에 설치된다. 새로운 프로젝트를 생성하고, yarn init 으로 초기화한 후 yarn add react 를 이용해 react 의존성을 추가하면 node_modules에 react 패키지가 추가된 모습을 볼 수 있다. 그런데 분명 추가한 것은 react 하나뿐이지만, js-tokens 와 loose-envify 패키지도 존재하는 것을 확인할 수 있다. node_modules/react/package.json의 dependencies를 살펴보면 loose-envify를 사용하고 있고, node_modules/loose-envify/package.json의 dependencies를 살펴보면 js-to..

여러가지 nodejs 데몬 툴 중 forever와 pm2가 특히 유명한데, forever는 기능은 적지만 사용법이 매우 간단해 운영중인 nodejs 서비스에 사용 중이었다. 그러나 모니터링, 무중단 업데이트와 같은 다양한 기능들이 필요하게 되었고, 따라서 forever에서 pm2로 이주해보려 한다. https://pm2.keymetrics.io/ PM2 - Home Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro service management, at a glance. pm2.keymetrics.io PM2 Nodejs 데몬 프로세스 매니저다. 단순..

프로젝트에서 githook을 이용해 커밋 전 검사를 하고 있다. yarn eslint ./src --cache && tsc --noEmit && yarn test 3개의 커맨드가 모두 정상적으로 종료되어야만 커밋되고, 이 작업들은 현재 의존성을 가지고 있어 이전 작업이 끝나야만 다음 커맨드가 실행된다. (yarn eslint ... > tsc ... > yarn test...) 정말 의존성이 필요할까? eslint는 js, jsx파일의 코드 포맷 검사, tsc는 ts, tsx파일의 코드 유효성 검사, test는 테스트를 수행한다. 사실 이들의 순서가 바뀌어도 상관없고, 심지어는 동시에 실행되어도 결과에는 영향을 미치지 않는다. 위 명령을 실행하면 약 20~30초가량이 소모되는데, 점점 프로젝트의 규모가 ..
지난 포스트에서 jest, eslint를 적용해봤다. 그렇다면 이 스크립트를 커밋 전 실행해서 안전한 코드일때만 허가할 수는 없을까? https://www.npmjs.com/package/husky husky Modern native Git hooks made easy. Latest version: 8.0.1, last published: 13 days ago. Start using husky in your project by running `npm i husky`. There are 2316 other projects in the npm registry using husky. www.npmjs.com husky 허스키를 사용하면 githooks 스펙을 손쉽게 사용할 수 있다. https://git-s..

https://jestjs.io/docs/getting-started Getting Started · Jest Install Jest using your favorite package manager: jestjs.io 설치 yarn add --dev jest devDependency에 jest를 추가한다 yarn jest --init 초기 설정이 필요한 경우(browser 환경, typescript 사용 등) 위 커맨드를 이용한다. 테스트 코드 작성 // index.js // object[key] value is not null? const requireValues = (object, keys = []) => { let result = true; keys.map(key => { if (!object[ke..