Node.js : 설치(Windows 7 64bit 기준), npm과 package.json 해부


목차

  1. Node.js 설치 (윈도우 기준)
  2. npm 세팅, package.json 해부


Node.js , npm설치



npm 세팅, package.json 해부

  • npm의 약자 : Node Package Manager
  • 공식문서 : https://docs.npmjs.com/files/package.json
  • 이 npm의 설치는 위의 node.js 설치가 완료 되었다는 전재 하에서 진행 되어야 한다.
  • npm 세팅하기 전의 node.js코딩이 된 js파일의 실행은 node index.js 방식으로 실행이 가능하나, npm 세팅 후에는 실전용으로는 npm start , 테스트용으로 npm test 등의 명령으로 내가 세팅한 node명령어를 간단히 실행할 수 있다.
  • 명령 프롬프트를 열고 아래처럼 명령을 따라 해 본다. 필자는 폴더를 저렇게 했는데, 편한대로 아무 경로 지정하면 될 듯 하다.
  • 굵은 글씨를 따라 쳐보면 새로운 폴더를 만들고 그 폴더를 들어가서 npm을 초기화 한다는 의미이다.
C:\Users\TSPark\Documents\Blog\naver\170603_nodejs>mkdir nodeServer

C:\Users\TSPark\Documents\Blog\naver\170603_nodejs>cd nodeServer

C:\Users\TSPark\Documents\Blog\naver\170603_nodejs\nodeServer>npm init
  • 그러면 npm에서는 대략 이러한 내용을 얘기해준다.
    '이 폴더에 package.json 이라는 파일을 만들거다'
    '이제부터 이 package.json 이라는 파일을 내가 함 해 줄 테니 너는 묻는 말에 대답만 해라.'
    '이 설정 이후에는 npm을 이용해서 이 폴더 안에서 쓰일 node.js 라이브러리들을 설치하게 되었을 때 그에 대한 정보들이 package.json에 자동으로 수록될 것이다'
    '근데 내가 묻는게 귀찮다면 Ctrl + C를 눌러서 나가도 된다'
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (nodeServer)
  • 나는 npm이 묻는말에 성심성의껏 답해줬다. 이거때메 GitHub Repository도 새로 팠다.(기존에 안쓰는걸 고친거지만)
  • 묻는 것에 대답을 잘 해줬더니 package.json에서 아래와 같이 JSON형태로 작성해주었고, 이제 이 정보를 토대로 나의 node.js 프로젝트가 관리 될 것이다.

Press ^C at any time to quit. name: (nodeServer) nodeServer Sorry, name can no longer contain capital letters. name: (nodeServer) node_server version: (1.0.0) description: Node.js Server Practice entry point: (index.js) app.js test command: node app.js git repository: https://github.com/geoseong/Node.js-Test.git keywords: nodejs,test,tspark author: tspark license: (ISC) About to write to C:\Users\TSPark\Documents\Blog\naver\170603_nodejs\nodeServer\ package.json: { "name": "node_server", "version": "1.0.0", "description": "Node.js Server Practice", "main": "app.js", "scripts": { "test": "node app.js" }, "repository": { "type": "git", "url": "git+https://github.com/geoseong/Node.js-Test.git" }, "keywords": [ "nodejs", "test", "tspark" ], "author": "tspark", "license": "ISC", "bugs": { "url": "https://github.com/geoseong/Node.js-Test/issues" }, "homepage": "https://github.com/geoseong/Node.js-Test#readme" } Is this ok? (yes)

  • npm이 나에게 물어본 것(package.json작성을 위해) : 
    • name : 말그대로 내 프로젝트 이름짓기. 대문자는 허용안된다. 내가 대문자 써서 빠꾸먹은거를 봤듯이..
    • version : 실제 배포되는 소프트웨어가 패치가 될 수록 버전이 올라가는것처럼, 내가 작성하는 프로젝트에 버전을 매긴다. 정말 미천한 내가 패치를 위한 버전관리를 한다고? ㄷㄷ 라고 생각할 수 있지만 개발자의 길에 들어선 순간 패치는 수도없이 할 것이기 때문에 버전을 물어보는 것이다.
    • description : 프로젝트에 대한 설명.
    • entry point : package.json main 에 들어갈 js파일을 지정함과 동시에, 지정된 js파일에서 export되는 객체들을 다른 사용자가 사용할 수 있게 지정하는 영역이다. 
      • 마치 JAVA에서 클래스를 import하고 그 클래스의 어떤 메소드를 쓰게 할 지 등록하는 역할이라고 생각하면 이해가 될 것 같다. 나만 이해가나? ㅋ
      • 예를 들어 app.js파일이 있다고 치자.
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        const express = require('express');
        const router = express.Router();
         
        // MySQL model 연동 테스트
        const controller = require('./user.controller.mysql');
         
        /** 모든 사용자 보기 GET **/
        router.get('/', controller.index);
         
        /** 사용자 조회 GET **/
        router.get('/:id', controller.show);
         
        /** 사용자 삭제 DELETE **/
        // 아래 users배열을 자바스크립트 함수 findIndex(), splice() 메소드를 이용해서 제거.
        router.delete('/:id', controller.destroy);
         
        /** 사용자 추가 POST **/
        router.post('/', controller.create);
         
        /** 사용자 정보 수정 PUT */
        router.put('/:id', controller.update);
         
        module.exports = router;
        cs

      • 지금 app.js안에서 정의된 router객체의 메소드들을 module.exports = router 로 export하면, 아래 코드에서 정의된 get(), delete(), post(), put() 메소드를 다른 사용자가 사용할 수 있게 되는 것이다.
      • 그러면 지금 내가 만든 패키지(라이브러리) 이름 name  node_server 이므로, 내 라이브러리를 쓰는 사람은 이런 식으로 사용이 가능할 것이다.
        1
        2
        3
        4
        5
        6
        7
        const nodeServer = require('node_server');
        const controller = require('./user.controller.mysql');
         
        nodeServer.get('/:id', controller.show);
        nodeServer.delete('/:id', controller.destroy);
        nodeServer.post('/', controller.create);
        nodeServer.put('/:id', controller.update);
        cs


    • test command : package.json scripts 에 들어갈 node 커맨드를 입력하는 영역이다. scripts안의 test명령어는 말그대로 테스트를 위한 커맨드이고, start는 실제로 해당 node 라이브러리라던가 node서버를 켜는 명령어를 설정하면 되겠다.
      이와 관련된 공식문서를 보면서 좀 파봐야될 필요가 있을 것 같다. ㅋ 
      https://docs.npmjs.com/misc/scripts
    • git repository : 해당 프로젝트와 연관된 git repository를 설정한다. 이 설정을 하고나서 지금 프로젝트 폴더경로에서(중요) npm docs 입력을 하면 package.json homepage 에 있는 주소로 자신이 설정한 기본 웹브라우저에 이동된다.
    • keywords : 내 라이브러리가 오픈소스로 온라인에 올라갔을때 검색되는 단어를 설정하는 부분이다.
      • 배열형태로 저장이 되며, 쉼표(',')로 구분을 지으면 알아서 배열형태로 값이 들어간다.
      • 만약 이 라이브러리를 오픈소스로 등록했을 때, 사용자는 npm search tspark 입력을 하게 되었을때 리스트에 나의 라이브러리가 검색이 될 것이다.
      • 기존에 존재하는 라이브러리를 검색하고 싶다면 npm search async 를 검색해보라. async가 들어간 라이브러리들 리스트들이 검색되어 나올 것이다.
    • author : 작성자. 내이름으로 하거나 프로젝트팀 이름으로 하거나 맘대로..
    • license : 기본값은 ISC이다. 
      • 만약 내가 만든 이 패키지(라이브러리)를 오픈소스로 공개하게 되었을때, 다른 사람이 나의 이 라이브러리를 사용하게 된다면, 그 사용자가 어디까지의 권한을 얻을 수 있는지와 제약조건을 설정하는 영역이다.
      • 권한과 제약조건에 대한 라이센스 적용은 OSI가 승인한 라이센스에서 적용시키는게 이상적이라고 한다. 해당 url에서 확인해서 적용해 보시라.
      • url : https://spdx.org/licenses/


+ Recent posts