CLI 프로그램 만들기

index.js 파일 제일 위에 #!/usr/bin/env node 를 적어 준다.

윈도우에서는 아무 역할이 없지만 리눅스나 맥에서는 이 파일을 노드로 실행하라는 역할을 한다.

 

#!/usr/bin/env node
console.log("hello cli");

 

package.json 파일에 bin 부분을 추가한다.

cli를 실행하면 index.js가 실행된다.

 

{
    "name": "node-cli",
    "version": "0.0.1",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "description": "",
    "bin": {
      "cli": "./index.js"
    }
  }

 

아래처럼 글로벌로 설치하면 index.js 가 프로그램을 설치가 된 것이다.

D:\code\node\cli>npm i -g

added 1 package in 1s

 

실행을 하면 console가 실행되는 것을 확인할 수 있다.

D:\code\node\cli>npx cli
hello cli

 

아래와 같이 코드를 수정했어도 다시 설치할 필요 없이 정상적으로 실행이 된다.

//index.js 파일

#!/usr/bin/env node
console.log("hello cli", process.argv);

 

D:\code\node\cli>npx cli
hello cli [
  'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\john\\AppData\\Local\\npm-cache\\_npx\\bc67c92c0f4afb79\\node_modules\\node-cli\\index.js'
]

 

process.argv 는 매개변수를 불러올 수 있다.

 

D:\code\node\cli>npx cli one two three four
hello cli [
  'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\john\\AppData\\Local\\npm-cache\\_npx\\bc67c92c0f4afb79\\node_modules\\node-cli\\index.js',
  'one',
  'two',
  'three',
  'four'
]

 

터미널에서 사용자의 답변을 듣는 코드를 작성하고 실행 화면이다.

// index.js 파일

#!/usr/bin/env node
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin, // 터미널 인풋
  output: process.stdout, // 터미널 아웃풋
});

rl.question("예제가 재밌나요?(y/n)", (answer) => {
  if (answer === "y") {
    console.log("감사합니다.");
  } else if (answer === "n") {
    console.log("죄송합니다.");
  } else {
    console.log("y 또는 n 만 입력하세요.");
  }
  rl.close();
});

 

D:\code\node\cli>npx cli                        
예제가 재밌나요?(y/n)b
y 또는 n 입력하세요.

D:\code\node\cli>npx cli
예제가 재밌나요?(y/n)y
감사합니다.

D:\code\node\cli>npx cli
예제가 재밌나요?(y/n)n
죄송합니다.

 

아래와 같이 package.json 이 수정되면 다시 설치를 해줘야 한다.

cli : 이 부분이 index.js → template.js 로 변경

 

{
    "name": "node-cli",
    "version": "0.0.1",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "description": "",
    "bin": {
      "cli": "./template.js"
    }
  }
 

 

D:\code\node\cli>npm i -g

up to date in 831ms

 

template를 자동으로 만들어 주는 cli 프로그램을 수행한 결과 화면

자동으로 html 파일을 만들고 안에 내용을 채워진 것을 확인

 

 

설치한 npx cli를 지울 때는 아래 명령어 사용 가능

 

D:\code\node\cli>npm rm -g node-cli

Commander, Inquirer 사용하기

자주 쓰이는 패키지 2개를 알아보자.

버전에 따라서 명령어가 달라질 수 있어서 버전까지 지정해서 설치

D:\code\node\cli>npm i commander@9 inquirer@8

added 53 packages, and audited 54 packages in 7s

15 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

 

command.js 만들고 package.json 수정 필요, 다시 설치

// package.json 파일
"bin": {
    "cli": "./command.js"
  },

 

// 다시 설치
D:\code\node\cli>npm i -g

up to date in 964ms

 

필수값 , 선택값 구분

program
  .command("template <type>") // <type> 은 필수값, [type] 은 선택 값

 

버전 확인

D:\code\node\cli>npx cli -v
0.0.1

 

설명내용을 확인 가능

D:\code\node\cli>npx cli -h
Usage: cli [options] [command]

Options:
  -v, --version                   output the version number
  -h, --help                      display help for command

Commands:
  template|tmpl [options] <type>  템플릿을 생성합니다.
 
 

 

명령어를 실행하면 아래와 같이 템플릿이 포함된 파일을 자동으로 만들어 준다.

 

아래는 inquirer 버전 URL 이다.

https://www.npmjs.com/package/inquirer?activeTab=versions

 

npx cli 로 실행하고 선택할 때는 화살표로 움직일 수 있다.

D:\code\node\cli>npx cli
? 템플릿 종류를 선택하세요. html    
? 파일의 이름을 입력하세요. new
? 파일이 위치할 폴더의 경로를 입력하세요. public/html
? 생성하시겠습니까? Yes    
이미 해당 파일이 존재합니다
터미널을 종료합니다.

 

조금 더 꾸며볼 수 있다.

chalk 를 설치하면 색깔을 입힐 수 있게 해준다.

 

D:\code\node\cli>npm i chalk@4

up to date, audited 54 packages in 1s

15 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

 

에러 내용 같은 경우에 아래와 같이 빨간색 볼드체로 보이게 할 수 있다.

console.error(chalk.bold.red("이미 해당 파일이 존재합니다"));

 

성공은 아래와 같이 초록색으로 보이게 할 수 있다.

console.log(chalk.green(pathToFile, "생성 완료"));

 

아래는 색상이 변경된 결과 화면이다.

 

'Javascript > Node' 카테고리의 다른 글

노드 교과서 섹션 8  (0) 2023.08.23
노드 교과서 섹션 9  (0) 2023.08.22
노드 교과서 섹션 10  (0) 2023.08.19
노드 교과서 섹션 11  (0) 2023.08.18
노드 교과서 섹션 12  (0) 2023.08.17

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

 

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

 

대표사진 삭제

사진 설명을 입력하세요.

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

정규표현식은 난이도가 높은 편이라고 생각됩니다. 다 이해하지는 못하고 실습을 해보면서 일부분이라도 이해하려고 노력하였습니다. 코딩면허시험 부분은 도움이 될만한 문제들이 많았고 생각을 하면서 코딩을 하다보면 실력이 조금씩 늘고 있다는 것을 느낄 수 있었습니다.

 

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

대표사진 삭제

사진 설명을 입력하세요.

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

 

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

 

대표사진 삭제

사진 설명을 입력하세요.

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

개발을 시작하게 될 때 어떻게 시작해야 할지 순차적으로 잘 설명되어 있다. 연습장에 적어가며 설명하는 방식으로 설명되어 있는데 아무것도 없는 상태에서 시작하는 것보다 훨씬 도움이 되었다. 단순히 예제만 나열한 것이 아니라 필요할 법한 예제들을 설명되어 있다.

 

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

대표사진 삭제

사진 설명을 입력하세요.

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

 

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

 

대표사진 삭제

사진 설명을 입력하세요.

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

예외처리는 에러가 발생할 때 처리할 수 있는 다양한 방법들에 대해서 설명되어 있었습니다. 몇가지 에러를 실제로 발생시키고 그 에러를 어떻게 예외처리 하는지 잘 설명되어 있습니다. 내장함수와 외장함수는 개발할 때 필요한 유용한 함수들이 소개되어 있고 실제 예까지 설명되어 있습니다. 종류가 많아서 당장 다 사용하지는 못하지만 필요할때마다 찾아서 유용하게 사용할 수 있을 것입니다.

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

 

 

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

대표사진 삭제

사진 설명을 입력하세요.

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

클래스, 모듈, 패키지에 대해서 필요한 부분들이 친절하게 설명되어 있습니다. 클래스가 왜 필요한지 이유와 객체에 대해서도 명확하게 알 수 있게 설명되어 있습니다. 객체 생성된 이후에 변수들이 공유되지 않는 것들도 여러가지 사례로 테스트 하면서 익힐 수 있게 되어 있습니다.

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

대표사진 삭제

사진 설명을 입력하세요.

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

대표사진 삭제

사진 설명을 입력하세요.

 

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

함수에 대해서 다양한 케이스에 대해서 설명되어 있어서 좋았습니다. 결과값이 없거나 입력값이 없는 함수, 입력값이 몇개가 될지 모르는 함수 등 다양한 예를 들어주시고 실제로 적용할 수 있을만한 함수를 만들어 보면서 쉽게 익힐 수 있었습니다. 실제로 파일 읽고 쓰기 예도 직접 해볼 수 있게 설명되어 있어서 좋았습니다.

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

 

대표사진 삭제

사진 설명을 입력하세요.

 

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

 

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

대표사진 삭제

사진 설명을 입력하세요.

 

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

if문, while문 ,for문 의 다양한 예제와 차이점과 어떻게 사용해야 될지에 알게 되었습니다.

in, not in 이나 continue 용법도 배워서 적절하게 사용할 수 있을 것 같습니다.

 

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

대표사진 삭제

사진 설명을 입력하세요.

 

 

1. 책 DB를 넣어주세요. (글감 > 책 클릭 > 내가 지금 공부하는 책 검색 및 선택)

Do it! 점프 투 파이썬저자박응용출판이지스퍼블리싱발매2019.06.20.

 

2. 나의 스터디 흔적을 사진으로 보여주세요. 책상(모니터)과 책이 함께 보이면 최고!

 

 

3. 이번 스터디에서 특별히 좋았던 점이나 어려웠던 점이 있었나요? 새로 알게된 부분이 있다면 알려주세요. 다음에 이 책으로 공부할 스터디룸의 독자들에게 큰 도움이 됩니다. (200자 이내)

문자열을 만드는 방법이 4가지나 있는 이유를 알게 되었습니다. 문자열 포맷팅이 생소하였지만 알게 되면서 앞으로도 많이 사용하게 될것 같습니다. 리스트, 튜플, 딕셔너리의 차이점을 알게 되어서 앞으로 적절하게 사용할 수 있게 되었습니다.

 

4. 열심히 실습한 코드를 저장해 첨부해 주시거나 자랑할만한 스크린샷이 있다면 올려주세요.

 

Lllfjjj

'파이썬 python' 카테고리의 다른 글

파이썬 발표자료  (0) 2019.03.20

--DBMS_XPLAN_예제

 

-- 해당 SQL 찾을 때 사용, SQL_ID 알거나 SQL 일부 내용 알 때 사용
SELECT *  
FROM V$SQL 
WHERE SQL_FULLTEXT LIKE '%SELECT%TB_TEST_1%' 
--WHERE SQL_ID='7abcdefegd' 
; 

 

 

 

-- ALTER SESSION SET CURRENT_SCHEMA 설정시 필요한 SYNONYM 조회 

-- DBA_OBJECTS에서 조회하거나 정확하게 하려면 DBA_SYNONYMS 조회

SELECT * 
FROM DBA_OBJECTS
WHERE OBJECT_NAME='TB_TEST_1';

 

SELECT * 

FROM DBA_SYNONYMS 

WHERE TABLE_NAME='TB_TEST_1';

 

-- SQL에 OWNER 없을 때 주로 사용 

ALTER SESSION SET CURRENT_SCHEMA=USERNAME; 


-- BIND 변수 사용할 때 사용

-- V$BIND_CAPTURE 에 없을 때 DBA_HIST_SQLBIND 에서 조회


SELECT * FROM V$BIND_CAPTURE WHERE SQL_ID='7abcdefegd';
SELECT * 
FROM DBA_HIST_SQLBIND 
WHERE SQL_ID='7abcdefegd' ORDER BY SNAP_ID DESC, INSTANCE_NUMBER, POSITION;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID,PLAN_HASH_VALUE,NULL,'advanced allstats last'));
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('7abcdefegd',1107028900,NULL,'advanced allstats last'));

-- 플랜 확인 필요한 SQL에  /*+ gather_plan_statistics */ 삽입
SELECT /*+ gather_plan_statistics */ *

FROM TB_TEST_1;

-- 직전에 사용한 실제 플랜 확인 가능 

-- 결과값을 메모장이나 별도 화면에서 붙여 넣어서 플랜 확인


SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ADVANCED ALLSTATS LAST'));

 

 

 

 

-- 현재 세션에서 수행했던 실제 플랜 확인 가능 (주로 위에 방법이 편해서 사용)
SELECT PREV_SQL_ID, PREV_CHILD_NUMBER 
FROM V$SESSION
WHERE SID=USERENV('SID') AND USERNAME IS NOT NULL
AND PREV_HASH_VALUE <>0;

SELECT * FROM TABLE(DBMS_XPALN.DISPLAY_CURSOR('7abcdefegd','0','advanced allstats last'));
 

+ Recent posts