자바스크립트 코드를 작성하는 데 너무 많은 시간을 소비하고 계신가요? 자바스크립트 개발자의 생산성을 높이고 개발 과정을 간소화하는 데 도움이 되는 다양한 Node.js 패키지들을 살펴보겠습니다.
자바스크립트는 동기적이며 단일 스레드 방식으로 작동하는 언어입니다. 소프트웨어와 애플리케이션 개발 분야에서 가장 널리 사용되는 프로그래밍 언어 중 하나입니다. React.js, Angular.js, Vue.js, Express.js 및 Node.js와 같은 많은 프레임워크가 자바스크립트를 기반으로 개발되었습니다.
많은 개발자들이 자바스크립트로 코딩하는 동안 Promise, 이벤트 루프, 콜백, 호이스팅, 클로저 등 복잡한 개념들 때문에 어려움을 겪습니다.
자바스크립트 개발을 더 쉽고 효율적으로 만들 수 있도록 오류 처리, 코드 포맷팅, 파일 삭제, 코드 디버깅, 보안 강화 등 다양한 기능을 제공하는 Node.js 패키지들이 있습니다. 일부 패키지는 CPU 성능, 처리 용량, 오류 심각도 등을 시각적으로 표현하기 위한 대화형 명령줄 인터페이스를 제공하기도 합니다.
Retire.js
Retire.js는 사용 중인 자바스크립트 라이브러리의 버전과 관련된 알려진 취약점 목록을 제공하는 도구입니다.
Chrome 확장 프로그램, Firefox 확장 프로그램, 명령줄 스캐너, Grunt 플러그인 등 다양한 형태로 사용 가능합니다. 설치는 다음 명령어를 통해 할 수 있습니다.
$ npm install -g retire
Retire.js는 자바스크립트 및 Node 파일을 스캔하는 다양한 명령을 제공합니다. 웹 사이트를 검색하고 개발자 콘솔에 경고를 표시하며, 취약점을 발견하면 종료 코드 13을 생성합니다. 또한 Gulp 작업을 통해 자동으로 파일을 스캔하고 취약점을 보고할 수 있습니다.
np
np는 코드 정리, 종속성 설치, 패키지 게시 및 태그 관리 등 다양한 기능을 제공하는 자바스크립트 패키지입니다. 코드가 마스터 브랜치에 푸시되도록 하며 대화형 사용자 인터페이스를 제공합니다.
새로운 리포지토리에 대한 보안을 강화하기 위해 2단계 인증을 사용하며, 종속성을 재설치하여 최신 버전에서 작업을 수행하도록 보장합니다. 최신 버전은 npm으로 푸시됩니다. 설치는 다음 명령어를 통해 가능합니다.
$ npm install --global np
np의 다양한 기능에는 모든 브랜치에서의 코드 게시, 게시를 위한 하위 디렉토리 생성, 코드 정리, 테스트 건너뛰기 등이 있습니다. np 설정은 `np-config.js` 또는 `np-config.json`과 같은 설정 파일에서 CLI 플래그를 사용하여 전역 또는 로컬로 구성할 수 있습니다.
ESLint
ESLint는 자바스크립트 코드를 분석하고 ECMA/자바스크립트 코드에서 패턴을 식별하는 데 사용되는 도구입니다. 추상 구문 트리(AST)를 사용하여 코드 패턴을 평가하며, 모든 규칙은 플러그인 형태로 정의되어 런타임에 동적으로 추가할 수 있습니다. 다음 명령을 사용하여 설치할 수 있습니다.
$ npm init @eslint/config
위 명령어를 실행하면 오류 정의 및 조건이 포함된 규칙 집합이 담긴 `.eslintrc` 파일이 생성됩니다. ESLint는 모든 종속성이 사용자의 `.lock` 파일에 정의되도록 하며, 자체 `.lock` 파일을 사용하지 않아 보안성이 높습니다.
Shelljs
Shelljs는 Node.js API를 통해 모든 운영 체제에서 UNIX 명령을 실행할 수 있는 환경을 제공합니다. 이식성이 뛰어나며 타사 플러그인도 지원합니다. `echo`, `exec`, `chmod`, `pushd`, `popd`, `cd`, `cat` 등 다양한 명령을 사용할 수 있으며, 다음 명령을 통해 설치할 수 있습니다.
$ npm install [-g] shelljs
Firefox, JSHint, ESLint, Zepto 등 다양한 프로젝트에서 테스트되었습니다. Shelljs 패키지를 로컬로 가져오는 것이 전역으로 가져오는 것보다 권장되며, `silent`, `fatal`, `verbose` 등으로 설정할 수도 있습니다.
Omelette
Omelette는 Node 및 Deno 프로젝트에서 코드 자동 완성을 위한 템플릿을 제공합니다. 사용하기 쉬운 API를 제공하며, 비동기 API와 트리 API도 지원합니다. Omelette를 구현하는 예시 코드는 다음과 같습니다.
import * as omelette from 'omelette'; const firstArgument = ({ reply }) => { reply([ 'beautiful', 'cruel', 'far' ]) } const planet = ({ reply }) => { reply([ 'world', 'mars', 'pluto' ]) } omelette`hello|hi ${firstArgument} ${planet}`.init()
Omelette를 가져온 후 Omelette 객체를 생성해야 합니다. `setupShellInitFile()` 및 `cleanupShellInitFile()`과 같은 코드 자동 완성을 위한 다양한 함수를 Omelette 객체에서 호출하여 코드 자동 완성을 설정하고 정리할 수 있습니다. 또한 람다 함수를 사용하여 복잡한 템플릿 리터럴 API를 생성하는 기능도 지원합니다.
Prettier
Prettier는 코드 포맷팅에 사용되는 도구입니다. 탭 대신 공백을 사용하고, 한 줄에 너무 많은 내용을 넣지 않도록 하며, 조건문 및 반복문 내에서 적절한 들여쓰기를 보장하여 코드를 깔끔하고 읽기 쉽게 만들어줍니다. 예를 들어:
아래의 코드 스니펫은 Prettier를 적용하기 전의 모습입니다.
foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());
Prettier 확장 기능을 사용하면 코드가 아래와 같이 변환됩니다.
foo( reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne() );
Prettier는 CI 환경, IDE(통합 개발 환경) 등 다양한 환경에서 실행할 수 있습니다.
jscpd
jscpd는 기술 부채 관리 서비스로, 다양한 코드 및 문서에서 중복된 코드 조각을 찾는 데 도움을 주는 자바스크립트 패키지입니다. 문자열 일치 알고리즘인 Rabin-Karp 알고리즘을 사용하여 코드 중복을 검사합니다.
`jscpd/core`는 다양한 환경에서 코드 중복을 감지하는 기능을 제공하며, `jspd/tokenizer`는 프로그램 소스 코드를 토큰화하는 데 사용됩니다. 그 외에도 `html-reporter`, `badge-reporter`, `leveldb-store`와 같은 여러 패키지가 있습니다. jscpd 설치 명령어는 다음과 같습니다.
$ npm install -g jscpd
jscpd는 GitHub Super Linter, Code-Inspector, Mega-Linter, Codacy 등에서 다양한 용도로 사용되고 있습니다. 자연어 처리, 라인 집계, 코드 분석 등에 활용됩니다.
Vtop
Vtop은 명령줄 활동을 그래픽으로 표시하는 모니터링 도구입니다. 실행 중인 다양한 스레드와 프로세스를 분석하여 CPU 사용률 정보를 그래프, 스파이크 등으로 시각화하여 보여줍니다. 자바스크립트, Makefile, Shell을 사용하여 개발되었으며, 설치 명령어는 다음과 같습니다.
$ npm install -g vtop
다양한 테마와 색상 코드를 사용하여 사용자 요구사항에 맞춰 GUI를 더욱 매력적으로 만들 수 있습니다. 업데이트를 위한 ‘u’, 목록의 최상위 프로세스로 이동하는 ‘g’, 목록의 끝으로 이동하는 ‘G’, 특정 그룹에 속한 프로세스를 종료하는 ‘dd’ 등 다양한 키보드 단축키를 사용할 수 있습니다.
Standardjs
Standardjs는 파일 구성을 자동화하고 코드 형식을 지정하며, 프로그래머의 예외 처리 관련 문제를 신속하게 찾아주는 자바스크립트 라이브러리입니다. 설치 명령어는 다음과 같습니다.
$ npm install standard --global
설치 후 명령줄 인터페이스에서 “standard” 명령어를 사용하여 파일 또는 코드 조각을 실행할 수 있습니다. Standardjs의 모든 종속성은 `package.json` 파일의 `dependencies` 객체에 `”standard”: “*”`를 추가하여 포함할 수 있습니다.
Visual Studio Code, Sublime Text, Atom, Vim, Brackets 등 다양한 텍스트 편집기용 플러그인 형태로도 설치 가능합니다. Node.js, Express.js, npm, Brave 및 GoDaddy에서 Standardjs를 사용하여 비즈니스 요구사항을 충족합니다.
NodeJsScan
NodeJsScan은 Node.js 애플리케이션을 위한 정적 보안 코드 스캐너입니다. 대화형 UI를 통해 애플리케이션의 보안 상태를 알려주며, Slack 알림, NodeJsScan의 `settings.py` 파일에서 SMTP 설정을 구성하여 이메일 알림, CI/CD 파이프라인 등 다양한 애플리케이션과 통합할 수 있습니다. 또한 도커 이미지 빌드도 지원합니다.
오류, 정보 및 경고 메시지를 기록하며, 발생 이유, 심각도, 오류가 발생한 줄 번호, 스캔한 파일 수, 발견된 문제 등 오류에 대한 자세한 설명을 제공합니다. 또한 가독성과 분석 편의성을 위해 그래프와 차트를 표시합니다.
trash
trash는 삭제된 파일을 영구적으로 삭제하는 대신 휴지통으로 이동시키는 자바스크립트 라이브러리입니다. Mac, Linux 및 Windows를 지원하며, 설치 명령어는 다음과 같습니다.
$ npm install trash
Trash는 `Trash()` 함수를 호출할 때 입력 및 옵션을 함수 매개변수로 사용하는 API입니다. 입력은 문자열 또는 문자열 배열일 수 있으며, 옵션은 객체 형태입니다. Trash 함수는 Promise를 반환합니다. 운영 체제에 따라 macOS에서는 `macOS-trash`, Linux에서는 XDG Spec, Windows에서는 휴지통을 사용합니다.
xo
Xo는 ESLint를 사용하는 자바스크립트 및 TypeScript 래퍼입니다. 코드에 들여쓰기를 제공하고, 필요에 따라 세미콜론, 작은 따옴표, 쉼표 등을 추가하여 가독성을 높이는 데 도움을 줍니다. `unicorn`, `import`, `ava`, `n` 등 다양한 ESLint 플러그인을 Xo와 함께 사용할 수 있습니다. 설치 명령어는 다음과 같습니다.
$ npm install xo --save-dev
`$xo –fix` 명령어를 사용하여 문제를 자동으로 수정할 수 있습니다. Xo는 `package.json` 파일의 `xo` 속성을 사용하여 구성할 수 있습니다. Vim, Visual Studio Code, Atom, Sublime Text, Emacs 등 다양한 편집기용 플러그인 형태로 설치할 수 있습니다.
diff2html
diff2html은 “diff 파서 및 예쁜 HTML 생성기”를 의미합니다. 이전 버전과 비교하여 현재 버전의 코드 변경 사항을 강조 표시하여 개발자가 변경 사항을 쉽게 식별하고 이해할 수 있도록 도와줍니다. 색상 코드를 사용하여 이를 수행합니다.
줄 단위 변경 사항과 병렬 변경 사항을 강조 표시하며, 코드 구문 변경 사항을 강조 표시하고 유사한 줄을 그룹화하여 코드 변경 사항을 쉽게 추적할 수 있도록 합니다. 설치 명령어는 다음과 같습니다.
$ npm install diff2html
명령줄과도 통합되며, Jenkins, Codacy, Ungit, git-explorer, code-annotation 등 다양한 프로젝트에서 사용됩니다.
chalk
Chalk는 코드 포맷팅과 스타일 지정에 도움이 되는 Node.js 모듈입니다. 텍스트에 색상 테마를 만들고 추가하는 데 사용되며, 표현력 있는 API와 높은 성능을 제공합니다. 스타일을 중첩할 수 있고 종속성이 없습니다. Chalk 사용 예시는 아래 코드 스니펫에서 확인할 수 있습니다.
import chalk from 'chalk'; console.log(chalk.blue('Hello world!'));
`chalk.level`은 각 레벨에서 지원되는 색상을 정의합니다. ‘0’은 모든 색상이 비활성화된 상태, ‘1’은 기본 색상 지원, ‘2’는 256가지 색상 지원, ‘3’은 트루 컬러 지원을 나타냅니다. Chalk에서 지원하는 다양한 텍스트 서식 스타일에는 반전, 숨김, 표시, 취소선, 굵게, 재설정, 기울임꼴, 밑줄, 흐리게 등이 있습니다.
npkill
Npkill은 오래되고 용량이 큰 node_modules 폴더를 제거하는 도구입니다. node_modules를 매우 빠르게 삭제하고 시스템 공간을 정리하는 데 도움을 줍니다. TypeScript, 자바스크립트, Go를 사용하여 개발되었으며, 종속성이 없고 사용하기 쉽습니다. 설치 명령어는 다음과 같습니다.
$ npm i -g npkill
`npkill` 명령어로 경로에 지정된 모든 node_modules가 삭제됩니다. node_modules 삭제는 되돌릴 수 없으므로 주의해야 합니다. 작업 중인 프로젝트의 모듈이 삭제되면 파일이 손상될 수 있으므로 node_modules를 다시 설치해야 합니다.
fkill-cli
fkill-cli는 Linux 프로세스 및 포트를 종료하는 오픈 소스 대화형 명령줄 도구입니다. Node.js를 사용하여 개발되었으며, 간단하고 무료이며 안전하며 플랫폼 간 호환이 가능합니다. Windows, Linux, macOS에서 작동합니다. 설치 명령어는 다음과 같습니다.
$ npm install --global fkill-cli
프로세스를 종료하려면 프로세스 이름과 ID가 필요합니다. ‘-f’는 강제 실행을, ‘-v’ 명령어는 프로세스 인수를 표시합니다. fkill API는 입력과 옵션을 인수로 사용하며 Promise 객체를 반환합니다. 일부 옵션에는 `force`, `silent`, `ignoreCase`, `tree`, `forceAfterTimeout` 등이 있습니다.
localtunnel
Localtunnel은 시스템의 DNS 및 방화벽 설정을 변경하지 않고 컴퓨터의 로컬 환경과 외부 환경에서 웹 서비스를 공유할 수 있는 플랫폼입니다.
요청은 Localtunnel에서 프록시 처리되고, 공개적으로 접근 가능한 URL이 할당된 후 로컬에 배포된 서버로 전달됩니다. 설치 명령어는 다음과 같습니다.
$ npm install -g localtunnel
HTTPS 요청을 사용하며 안전합니다. 웹훅을 테스트하는 데 사용할 수 있으며, Localtunnel을 사용하여 클라우드 브라우저에서 UI를 테스트할 수 있습니다.
Inquirer.js
Inquirer.js는 Node.js 애플리케이션을 위한 대화형 명령줄 사용자 인터페이스입니다. 오류를 찾고, 입력을 구문 분석하고, 답변을 확인하고, 계층적 프롬프트를 관리하는 과정을 용이하게 합니다. 기능 구현을 위해 기본 ESM 모듈을 사용하며, 설치 명령어는 다음과 같습니다.
$ npm install --save inquirer
주요 메서드로는 `prompt`, `registerPrompt`, `createPromptModule` 등이 있습니다. `prompt()`는 질문과 답변을 입력으로 받아 호출 시 Promise를 반환하는 함수입니다.
질문은 유형, 메시지, 기본값, 선택, 필터 등 질문 관련 값의 해시 버전인 객체입니다. 응답 키-값 객체 쌍에는 클라이언트 응답의 해시된 버전이 포함됩니다. 키는 질문 속성이고, 값에는 확인, 입력, 숫자, 원시 목록 등이 포함될 수 있습니다.
http-server
http-server는 간단한 명령줄 정적 http 서버입니다. 별도의 설정이 필요 없으며 `index.html`과 `404.html`이라는 두 개의 파일로 구성됩니다. `index.html`은 요청 시 렌더링되는 기본 파일이고, `404.html`은 파일을 찾을 수 없을 때 렌더링됩니다. 설치 명령어는 다음과 같습니다.
$ npm install --global http-server
HTML과 자바스크립트를 사용하여 개발되었으며, TLS/SSL 인증서를 통해 보안을 제공합니다. RSA 알고리즘을 사용하여 키 암호화 및 암호 해독을 수행하며, 보안을 위해 개인 키와 함께 암호를 정의할 수도 있습니다.
마지막 단어
자바스크립트는 소프트웨어 개발 분야에서 가장 널리 사용되는 프로그래밍 언어 중 하나입니다. 개발자들의 생산성을 높이기 위해 다양한 Node.js 패키지들이 개발되었습니다.
Retire.js, Localtunnel, Xo, Inquirer.js, Shelljs, fpkill, NodeJsScan, Prettier 등 다양한 Node.js 패키지들은 코드 포맷팅, 보안 강화, 코드 변경 사항 강조 표시, 불필요한 node_modules 삭제 등에 활용할 수 있습니다. 이를 통해 개발자들은 코드를 더욱 효율적으로 디버깅하고 작성하며 관리할 수 있습니다.
Windows 및 macOS에 Node.js와 NPM을 설치하는 방법도 함께 알아보실 수 있습니다.