CLI 또는 명령줄 인터페이스, 애플리케이션은 터미널 환경 내에서 실행되도록 설계된 특수 프로그램으로, 간단한 텍스트 기반 인터페이스를 활용하여 특정 작업을 쉽게 완료할 수 있도록 도와줍니다. 이러한 애플리케이션은 개발자와 IT 전문가 모두의 일상 업무에 없어서는 안 될 구성 요소로서 각자의 워크플로우 내에서 중요한 기능을 수행합니다.

이러한 소프트웨어 프로그램은 주로 로컬 장치에 설치되어 있거나 인터넷을 통해 액세스할 수 있는 운영 체제 또는 앱과 통신할 수 있는 실용적인 도구로 기능합니다. 사용자가 제공한 지침에 따라 작업을 수행합니다.

CLI 애플리케이션 이해

명령줄 인터페이스를 통해 사용자는 텍스트 명령 입력을 통해 소프트웨어 애플리케이션과 통신할 수 있습니다. 이러한 응용 프로그램은 초기 활성화 입력에 따라 고유한 기능을 나타내는 경우가 많으므로 CLI 프로그램에 대해 서로 다른 시작 명령을 사용하면 다양한 결과가 발생할 수 있습니다.

“ls” 명령은 디렉터리의 내용뿐만 아니라 파일의 세부 정보를 표시하는 데 사용됩니다. 다음과 같은 방식으로 실행할 수 있습니다:

 ls -l /home 

의료 분야에서 인공지능의 적용은 빠르게 증가하고 있으며, 의료 전문가들이 환자를 진단하고 치료하는 방식을 변화시키고 있습니다.

“ls” 명령은 지정된 디렉터리 내의 파일과 디렉터리를 나열하는 유닉스 기반 운영 체제의 유틸리티입니다. 버전에 따라 “목록” 또는 “디렉토리”를 나타내며, 사용자에게 파일 시스템의 내용에 대한 개요를 제공합니다.

이 경우 “-l”로 표시되는 선택적 매개변수가 존재하며, 이는 “long”의 약어 역할을 합니다. 이 특정 지정은 호출될 때 복잡한 데이터의 수준을 높여줍니다.

실제로 이 특정 인수는 홈 환경 내의 특정 위치에 관한 것으로, 관련 데이터가 저장되고 표시되는 지정된 폴더로 가는 경로를 나타냅니다.

각 개별 애플리케이션은 고유한 명령줄 인터페이스를 설정할 수 있지만, 널리 사용되고 널리 활용되는 몇 가지 보편적인 측면이 존재합니다. 이러한 확립된 규범을 준수하면 명령줄 인터페이스에 정통한 개인이 원활하게 사용할 수 있으므로 소프트웨어 제품과의 상호 작용이 용이해집니다.

Commander.js란 무엇인가요?

Commander.js를 활용하면 개발자는 일반적인 명령줄 애플리케이션의 구성을 용이하게 하는 광범위한 기능을 제공하는 동시에 관련된 많은 복잡한 작업을 처리하여 Node.js 환경 내에서 명령줄 인터페이스 애플리케이션을 만들 수 있습니다. 개발자의 주요 책임은 CLI 애플리케이션의 명령, 옵션 및 기능 요구 사항을 지정하는 데 있습니다.

Chalk.js를 다른 패키지와 통합하면 Node.js를 사용하여 포괄적인 명령줄 인터페이스 애플리케이션을 손쉽게 구축할 수 있습니다.

Commander.js를 사용하여 Node.js에서 CLI 애플리케이션 구축하기

도시 사전 에서 단어의 의미와 소셜 미디어 약어를 조회하는 예제 CLI 앱인 urbanary-cli를 살펴봅니다. 다른 사람이 설치할 수 있도록 CLI를 생성하고 npm 패키지 레지스트리에 게시하는 방법을 배웁니다.

터미널 또는 명령 프롬프트에서 다음 단계를 수행하여 새로운 Node.js 개발 환경을 구축할 수 있습니다: 1. 컴퓨터에서 파일 탐색기를 열고 프로젝트의 새 폴더를 만들려는 빈 디렉토리로 이동합니다. 2. 이 디렉토리 내에서 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 “새로 만들기”를 선택합니다. 그런 다음 “폴더”를 선택합니다. 그러면 프로젝트의 루트 디렉토리로 사용할 새 폴더가 생성됩니다. 3. 그런 다음 터미널 또는 명령 프롬프트를 열고 “cd” 명령과 폴더 경로를 사용하여 새로 만든 폴더로 이동합니다. 예를 들어 폴더가 데스크톱에 있는 경우 다음과 같이 입력할 수 있습니다: `cd ~/Desktop/my_new_folder`. “내\_새\_폴더”를

 mkdir urbanary-cli
cd urbanary-cli
npm init -y

으로 바꿉니다. 이 CLI는 Axios를 사용하여 도시 사전 API에 HTTP 요청을 보냅니다. Rapid API 를 사용하여 엔드포인트를 확인하고 자격 증명을 볼 수 있습니다.

하위 명령과 도움말이 있는 간단한 CLI

명령줄 인터페이스(CLI) 구성을 시작하려면 Commander와 Axios 패키지를 함께 설치하는 특정 명령을 실행해야 합니다. 필요한 명령은 다음과 같습니다:

 npm install commander axios

기존 프로젝트 디렉터리 내에 “bin”이라는 이름의 새 폴더를 생성하려면 다음 단계를 따르세요: 1. 현재 프로젝트의 루트 디렉토리로 이동합니다. 2. 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 “새 폴더”를 선택하여 새 폴더를 만듭니다. 이 폴더의 이름을 “bin”으로 지정합니다. 3. 그런 다음 새로 만든 “bin” 폴더로 이동합니다. 4. “bin” 폴더 안의 다른 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 “새 파일”을 선택합니다. 파일 이름을 지정하라는 메시지가 나타나면 “index.js”를 파일 이름으로 입력합니다. 5. “확인”을 클릭하여 새 파일을 만듭니다. 이제 프로세스가 완료되었으며, 프로젝트에 “bin” 폴더와 “index.js” 파일이 모두 성공적으로 추가되었을 것입니다.

 mkdir bin
cd bin
touch index.js

“바이너리”의 줄임말인 “bin” 디렉터리는 명령줄 인터페이스를 실행할 때 NodeJSDoc이 액세스하는 초기 파일을 보관하는 중요한 역할을 합니다. 문제의 이 파일을 “index.js”라고 합니다. Commander.js 라이브러리를 사용하여 자신만의 커맨드 라인 도구 구성을 시작하려면 앞서 언급한 “index.js” 파일에 필요한 조정을 자유롭게 수행하세요.

이 글도 확인해 보세요:  Vite 시작하기: 최고의 빌드 툴

처음에는 Commander의 프레임워크를 통해 프로그램 구성 요소를 도입합니다:

 const { program } = require('commander');

프로그램 객체를 활용하는 것은 보조 명령, 대체 명령 및 입력 매개변수와 같은 구성 요소를 지정하여 애플리케이션의 인터페이스를 묘사하는 데 필수적입니다. 이 엔티티에는 각 요소에 해당하는 특정 절차가 있으며, 예를 들어 명령 방법을 사용하면 하위 순서를 설정할 수 있습니다.

“찾기” 명령은 명령줄 인터페이스(CLI)를 통해 도시 사전 웹사이트에서 단어의 정의를 검색할 수 있는 기능입니다. 사용자는 단어나 구를 입력할 수 있으며, 이 명령은 가능한 경우 정의를 반환합니다. 이 기능을 구현하려면 검색어를 쿼리 매개변수로 하여 Urban Dictionary API에 HTTP 요청을 보내야 합니다. 그런 다음 응답을 파싱하여 정의를 추출하고 사용자에게 표시할 수 있습니다. 다음은 이를 수행하는 방법을 보여주는 Python 코드 샘플입니다: “`python 요청 가져오기 def find(query): url = ‘https://api.urbandictionary.com/v0/define?term=’ + query response = requests.get(url) data = response.json() if ‘defin

 // index.js
program
    .command('find <word>')
    .description('find meaning of a word or abbreviation or slang')

제공된 구문은 “찾기” 연산의 실행을 나타내므로 중괄호 {{}} 안에 후속 “단어”를 포함시켜야 합니다. 또한 문맥을 명확히 하기 위해 “설명”을 추가할 수 있습니다. 각진 대괄호({})는 “단어”를 필수 매개변수로 표시하는 역할을 하며, 대괄호([])를 사용하여 “단어”를 선택 사항으로 표시할 수도 있습니다.

Commander.js는 이 정보를 사용하여 지원 목적의 정보 콘텐츠를 생성하므로 정교한 계정을 통합하는 것이 좋습니다. ‘도움말’ 명령을 통해 프로그램을 실행하면 기존의 사용 절차에 대한 지침이 표시됩니다.

제안된 방법론을 검증하기 위해 다음 단계를 실험에 포함할 수 있습니다:

 program.parse() 

입력 텍스트는 Python을 사용하여 코드를 작성하는 데 대한 지원 요청, 특히 여러 스레드가 포함된 애플리케이션을 만드는 데 대한 지원 요청입니다. 사용자는 예외를 효과적으로 처리하면서 이 기능을 구현하는 방법에 대한 지침을 찾고 있습니다. 또한 함수 내에서 threading.Thread 및 스레드 변수의 사용에 대한 정보가 필요합니다.

명령줄 인터페이스(CLI) 애플리케이션 내에서 지원을 표시하는 기존 방법을 활용하는 것은 사용자가 긴 문서나 튜토리얼을 검색하지 않고도 프로그램의 기능을 이해할 수 있도록 하는 일반적인 관행입니다. 다행히 Commander는 다양한 명령에 대한 안내를 제공하는 직관적이고 사용자 친화적인 인터페이스를 자동으로 생성하여 이 과정을 간소화합니다. “-h” 또는 “–help” 옵션을 호출할 때마다 시스템은 사용 가능한 매개변수와 해당 용도에 대한 간결한 개요를 사용자에게 표시합니다. 따라서 특정 명령의 올바른 실행에 관한 정보를 얻는 프로세스가 간소화되어 장황하고 복잡한 지침을 작성할 때 수동으로 개입할 필요가 없습니다.

옵션 정의 및 최종 프로그램 준비

자바스크립트에서 명령을 정의할 때 `옵션` 메서드를 활용하고 이를 `command` 객체에 콜백 함수로 전달하여 해당 명령에 대한 추가 옵션을 제공할 수 있습니다. 이를 통해 특정 설정이나 매개변수를 사용하여 명령의 동작을 수정하거나 사용자 지정할 수 있습니다.

이 글도 확인해 보세요:  성능 최적화를 위한 자바스크립트 팁과 요령 10가지

어휘 항목의 의미 설명에 예시적인 인스턴스를 통합하는 방법은 다음과 같이 설정할 수 있습니다:

 program.option('-e, --example', "Display examples")

옵션에서 반환할 정의의 수를 지정하려면 옵션 자체 내의 매개 변수를 활용할 수 있습니다. 이를 통해 특정 쿼리 또는 요청에 대한 응답으로 제공되는 정보의 양을 제어할 수 있습니다. 이러한 유형의 사양을 포함함으로써 사용자는 검색 결과를 맞춤 설정하고 필요한 정보만 받을 수 있습니다.

 program.option(
    '-c, --count [amount]',
    'amount of definitions to display (max is 10)'
)

옵션의 이름을 짧은 형식이든 확장된 형식이든 지정하는 첫 번째 매개변수와 해당 설명을 자세히 설명하는 두 번째 매개변수입니다. 또한 “count” 수정자를 사용하여 표시해야 하는 옵션의 인스턴스 수로 선택적 세 번째 인수를 제공할 수 있습니다.

마지막으로 구현에 통합할 메서드는 Action 메서드입니다. 이 메서드 내에서 ‘찾기’ 명령에 필요한 연산을 구현할 것입니다. 통합이 완료되면 코드의 전체 구조는 다음과 같은 구성과 비슷해집니다:

 program
    .command('find <word>')
    .description('find meaning of a word or abbreviation or slang')
    .option('-e, --example', "Display examples")
    .option(
        '-c, --count [amount]',
        'amount of definitions to display (max is 10)'
    )
    .action(async (word, options) => {});

다음은 제공된 코드 조각을 사용하여 ‘lol’에 대한 세 가지 정의와 해당 예제를 검색하는 방법의 예시입니다: “`python !.g @get_defitions –query ‘define lol’ –limit 3 “` 이 명령은 `!g` 봇에 메시지를 보내고 “lol”을 정의할 것을 지정합니다. limit` 플래그를 3으로 설정하여 처음 세 개의 결과만 반환하도록 합니다. 이렇게 하면 “lol”에 대한 세 가지 다른 정의를 각각 예문과 함께 받게 됩니다.

 urbanary-cli find lol -e -c 3

또는 사용 가능한 각 대안의 확장 버전을 활용하도록 선택할 수 있습니다.

 urbanary-cli find lol --example --count 3

Commander의 npm 페이지 을 확인하여 이에 대한 자세한 내용과 다양한 사용 사례에 맞게 기능을 조정하는 방법을 알아보세요.

프로그램 기능 구현하기

다음 방법론을 활용하여 index.js 파일에 Axios를 통합합니다.

 const axios = require('axios');

액션의 함수 매개변수 내에 도시 사전을 쿼리하는 데 필요한 논리 연산을 통합하는 동시에 사용자 선호도에 따라 결과를 표시하는 시스템을 구현할 수도 있습니다.

네, 기꺼이 도와드리겠습니다! 제가 정확히 무엇을 도와드리면 좋을까요?

 let requestOptions = {
    method: 'GET',
    URL: "https://mashape-community-urban-dictionary.p.rapidapi.com/define",
    params: { term: word },
    headers: {
        'X-RapidAPI-Key': YOUR_RAPID_API_KEY,
        'X-RapidAPI-Host': 'mashape-community-urban-dictionary.p.rapidapi.com'
    }
}

사용자로서 제 관심사와 선호도에 따라 추천을 요청할 수 있기를 원합니다.” 다음은 Axios를 사용하여 MovieLens API에 GET 요청을 보내고 좋아하는 장르를 기반으로 추천을 검색하는 방법의 예시입니다: ”’자바스크립트 ‘에서 axios를 가져옵니다; const client = axios.create({ baseURL: ‘http://localhost:8091/’, // 로컬 또는 프로덕션에서 실행하는 경우 올바른 URL로 바꾸세요. }); 비동기 함수 getGenreRecommendations(genres) { try { const response = await client.get(‘/movies/listSimilarMovies?genres=’ + encodeURIComponent(genres)); return response.data;

 try {
    let resp = await axios.request(requestOptions);
    console.log(`Definitions for ${word} fetched`);
    wordData = resp.data.list;
} catch (err) {
    console.error(err.message)
}

응답 데이터에서 필요한 핵심 정보 중 하나는 정의되는 각 용어 또는 개념에 대한 정의와 관련 예시로 구성된 항목 모음을 포함하는 “목록” 속성입니다.

이 기능을 구현하기 위해 스크립트의 ‘try’ 블록 내에 있는 기존 코드를 수정하여 옵션을 처리하고 그에 따라 결과를 표시하는 추가 로직을 포함할 수 있습니다. 이를 위해 옵션 객체 배열을 받아들이고 JSX 구문을 사용하여 렌더링하는 새 함수를 만들 수 있습니다. 그런 다음 컴포넌트의 `render()` 메서드 내에서 이 함수를 호출하여 상태로부터 선택된 옵션을 전달합니다. 마지막으로 옵션 메뉴에 대한 사용자 상호작용으로 인한 변경 사항을 반영하도록 테이블 헤더의 렌더링을 업데이트합니다.

 if (options.example && options.count) {
    let cnt = 1;
    let definitions = wordData.slice(0, options.count);

    definitions.forEach((elem) => {
        console.log(`Definition ${cnt++}: ${elem.definition}`);
        console.log(`Example:\n${elem.example}\n`);
    });
} else if (options.count && !options.example) {
    let cnt = 1;
    let definitions = wordData.slice(0, options.count);

    definitions.forEach((elem) => {
        console.log(`Definition ${cnt++}: ${elem.definition}`);
    });
} else if (options.example) {
    console.log(`Definition: ${wordData[0].definition}`);
    console.log(`Example:\n${wordData[0].example}`);
} else {
    console.log(`Definition: ${wordData[0].definition}`);
}

이 함수의 현재 구현에는 사용자가 제공한 입력 매개변수를 기반으로 결과를 표시하는 방법을 식별하기 위해 조건문, 특히 “if-else” 구문을 사용하는 것이 포함됩니다. 구체적으로, 명령줄 인수 목록에 “example” 및 “count” 플래그가 모두 있으면 프로그램은 “wordData” 배열을 반복하여 각 단어 정의의 미리 정해진 인스턴스 수를 해당 사용 예와 함께 인쇄합니다.

이 글도 확인해 보세요:  JES를 활용한 흥미로운 사운드 처리 기법 3가지

시스템은 사용자가 개수만 제공하는지, 예제만 제공하는지, 아니면 둘 다 제공하지 않는지에 따라 다른 동작을 보입니다. 구체적으로 카운트만 제공하면 입력 문자열과 일치하는 정의의 수가 표시됩니다. 반대로 예제만 제공하면 해당 문장과 함께 하나의 정의가 표시됩니다. 두 옵션 중 하나를 제공하지 않으면 정의만 표시하는 기본 동작이 수행됩니다.

애플리케이션을 실행하기 위해 가장 먼저 해야 할 일은 독립적인 스크립트로 실행할 수 있도록 bin/index.js 파일에 shebang 줄을 포함시키는 것입니다. 이렇게 하면 프로그램 실행 프로세스가 초기화됩니다.

 #!/usr/bin/env node 

package.json 파일에서 애플리케이션의 기본 진입점을 수정하려면 다음 단계를 따르세요: 1. 텍스트 편집기 또는 통합 개발 환경(IDE)을 사용하여 프로젝트 디렉터리 내에 있는 package.json 파일을 엽니다. 2. 파일 내에서 애플리케이션의 기본 진입점 역할을 하는 JavaScript 파일의 이름을 지정하는 “main” 속성을 찾습니다. 3. 3. 애플리케이션의 기본 진입점으로 사용할 스크립트의 업데이트된 파일 이름 또는 경로를 반영하도록 “main” 속성의 값을 수정합니다. 예를 들어 새 메인 스크립트의 이름이 “app.js”인 경우 기존 값을 “[insert-filename]”에서 “app.js”로 변경합니다. 4. 동일한 개체 내에서 수정된 “main” 속성 뒤에 새 “bin” 속성을 추가합니다.

 "main": "./bin/index.js",
"bin": {
  "urbanary-cli": "./bin/index.js"
},

Urbanary CLI를 사용할 때, “under bin”으로 표시된 기본 입력은 애플리케이션의 작동을 시작하기 위해 터미널 내에서 실행될 명령을 가리킨다는 점을 인식하는 것이 중요합니다. 따라서 명령줄 애플리케이션을 개발 및 구현할 때 이 명령에 적합한 명칭을 사용하는 것이 좋습니다.

npm을 사용하여 애플리케이션을 전역적으로 설치하려면 터미널에서 “npm install -g” 명령을 실행합니다. 이 작업을 수행하면 명령 프롬프트에 직접 이름을 입력하여 애플리케이션을 호출할 수 있습니다.

제공된 그림은 소프트웨어 설정 절차와 변수 ‘lmk’의 용도를 결정하는 데 사용할 수 있는 명령어 예시를 보여줍니다.

프로젝트의 루트 디렉터리에서 “npm publish” 명령을 실행하여 Node.js 모듈을 npm(노드 패키지 관리자) 레지스트리에 게시할 수 있습니다. 이렇게 하면 모듈을 글로벌 또는 로컬로 쉽게 설치할 수 있으므로 전 세계 모든 사용자가 선호도에 따라 “npm install” 또는 “yarn add”를 사용하여 모듈을 활용할 수 있습니다.

Node.js는 Rust와 같은 기술을 사용하여 명령줄 인터페이스(CLI)를 개발하는 것과 달리 애플리케이션을 구성하고 릴리스하는 보다 간소화된 프로세스를 제공합니다.

Node.js로 기능적인 CLI 애플리케이션 빌드

Node.js Commander 패키지는 npm 패키지를 지원하는 명령줄 인터페이스(CLI) 유틸리티를 만들거나 개발 워크플로우를 개선하는 도구를 개발하려는 개발자를 위한 포괄적인 솔루션을 제공합니다. 강력한 기능과 직관적인 디자인을 갖춘 이 패키지는 개발자가 아이디어를 빠르고 효율적으로 현실화할 수 있도록 지원합니다.

Node.js는 다양한 애플리케이션을 위한 강력하고 효율적인 명령줄 인터페이스(CLI)를 구축할 수 있는 다용도 플랫폼을 제공합니다. 강력한 기능을 통해 복잡한 CLI 상호 작용을 쉽게 지원할 수 있으며, 개발자에게 추가 라이브러리 또는 도구를 활용하여 CLI 경험을 향상시킬 수 있는 충분한 리소스를 제공합니다.

By 이지원

상상력이 풍부한 웹 디자이너이자 안드로이드 앱 마니아인 이지원님은 예술적 감각과 기술적 노하우가 독특하게 조화를 이루고 있습니다. 모바일 기술의 방대한 잠재력을 끊임없이 탐구하고, 최적화된 사용자 중심 경험을 제공하기 위해 최선을 다하고 있습니다. 창의적인 비전과 뛰어난 디자인 역량을 바탕으로 All Things N의 잠재 독자가 공감할 수 있는 매력적인 콘텐츠를 제작합니다.