본문 바로가기

프로그래밍/Node.js

[Do it Node.js 프로그래밍] 2일차

1. 공부한 범위

 

[02] 노드로 만들 수 있는 대표적인 서버와 용도

[03] 노드에 대해 알아보고 개발 도구 설치하기

 

2. 공부한 내용 요약

 

[02]  노드 간단하게 살펴보기

 

02-1 첫 번째 노드 프로젝트 만들기 


- 자바스크립트 파일을 명령 프롬프트를 통해 실행시킨 사진


- Atom을 사용하기 때문에 Bracket의 NodeJS Integration과는 다른 패키지를 찾아야 했고, 검색 결과 atom-runner가 원하는 기능을 준다는 것을 알 수 있었다.


- runner 패키지를 이용해 node를 실행시킬 수 있도록 config.json파일을 수정했다.

- atom-runner 패키지가 무사히 완료된 후 프로젝트를 실행한 결과 (Alt + R을 이용해 구동할 수 있다.)

 

02-2 콘솔에 로그 뿌리기

 

- cmd에서 직접 node를 실행 후 콘솔창에 로그를 출력한 결과

- undifined와 null가 빈 값을 의미하는 대표적인 프로그래밍 언어다. 이 둘의 차이로 undifined는 단순히 값이 존재하지 않는다는 것, null은 의도적으로 프로그래머가 값을 비웠다고 생각하면 된다.

- JSON 포맷은 자바스크립트의 객체 포맷으로 단말끼리 데이터를 주고받을 때 많이 사용한다.

- JSON 포맷은 자바스크립트에서 객체를 만들 때 사용하는 형식과 같다. 즉, {}을 사용해 만들 수 있고, 그 안에 키와 값으로 구성된 속성들을 ,로 구별하게 된다.

- console객체에서 자주 쓰이는 3가지 메소드

dir(object) : 자바스크립트 객체의 속성을 출력한다.

time(id) : 실행 시간을 측정하기 위한 시작 시간을 기록한다.

timeEnd(id) : 종료 시간을 기록한다. 

 

 

 

- 위 코드에서 __dirname과 __filename은 전역변수다. 이는 프로그램 전 범위에 걸쳐 영향을 미치게 된다.

 

02-3 프로세스 객체 간단하게 살펴보기

- 프로세스 객체 : 프로그램을 실행했을 때 만들어지는 프로세스 정보를 다루는 객체

* 주요 메소드와 속성

argv : 프로세스를 실행할 때 전달되는 매개변수 정보

env : 환경 변수 정보

exit() : 프로세스를 끝내는 메소드

- env 환경 변수에는 OS와 같은 시스템 환경 변수와 사용자 정의 환경 변수가 있으며 process.env 속성을 이용한다면 둘 모두의 환경 변수에 접근할 수 있다.

 

02-4 노드에서 모듈 사용하기

- 각 기능을 분리시킬 때 단순히 별도의 파일에 코드를 놓는다고 끝나는 것이 아니라 모듈 파일을 다시 불러와 사용할 수 있는 경로도 만들어야 한다.

- 노드는 CommonJs 표준 스팩을 따라 모듈을 사용할 수 있으며, 이 과정에서 exports 전역 객체를 사용한다.

*exports와 module.exports의 차이

exports에는 속성을 추가할 수 있어 여러 개의 변수나 함수를 각 속성으로 추가할 수 있다.

module.exports는 하나의 함부나 변수, 객체를 직접 할당한다. 일반적으로는 객체를 그대로 할당하며 이 를 메인 파일에서도 사용할 수 있게 된다.

- 모듈의 이름만 지정하면 파일을 찾아와 불러오지만 해당 파일이 없다면 폴더 이름을 찾아 그 안에 있는 파일을 불러오기도 한다.

 

- 더하기 함수를 모듈로 분리하기 전

 

- 모듈로 분리한 후의 결과

- 다른 사람들이 만들어 둔 모듈을 외장 모듈이라고 한다.

- 시스템 환경 변수에 접근할 수 있는 모듈의 이름은 nconf이며, 설정에 관한 유용한 기능 뿐 아니라 시스템 환경 변수에 접근하는 기능도 포함하고 있다.

npm : Node Package Manager의 약자로 노드의 패키지를 사용할 수 있도록 설치 및 삭제 등을 지원하는 프로그램이다.

- npm으로 설치한 외부 패키지는 node_modules 폴더에 전부 저장된다. 만일 한 프로젝트만이 아니라 모든 프로젝트에 적용시키고 싶다면 해당 프로젝트들이 저장되어 있는 폴더 바로 아래로 node_modules 폴더를 옮겨 놓으면 된다.

- init 명령어를 이용해 package.json파일 안에 설정해놓은 외부 패키지들을 한 번에 전부 설치할 수 있다. 설치할 때에는 npm명령에 --save 옵션을 추가한다.

 

 

02-5 간단한 내장 모듈 사용하기

- OS 모듈 : 시스템 정보를 알려주는 모듈이다.

hostname() : 운영체제의 호스트 이름을 반환한다.

totalmem() : 시스템 전체 메모리 용량을 반환한다.

freemem() : 사용 가능한 메모리 용량을 반환한다.

cpus() : CPU 정보를 반환한다.

networkInterfaces() : 네트워크 인터페이스 정보를 담은 배열 객체를 반환한다.

- path 모듈 : 파일 경로를 다루는 모듈이다.

join() : 여러 개의 이름들을 모두 합쳐 하나의 파일 경로로 만들어준다. 합칠 때 구분자 등은 알아서 조정하게 된다.

dirname() : 파일 경로에서 폴더 이름을 반환한다.

basename() : 파일 경로에서 파일 확장자를 제외한 이름을 반환한다.

extname() : 파일 경로에서 파일 확장자를 반환한다.


[03] 노드의 자바스크립트와 친해지기

 

03-2 배열 이해하기

- 배열에 값 추가 및 삭제하기

push(object) : 배열 끝에 요소를 추가한다.

pop() : 배열 끝의 요소를 삭제한다.

unshift() : 배열 앞에 요소를 추가한다.

shift() : 배열 제일 앞의 요소를 삭제한다.

splice(index, removeCount, [Object]) : 여러 객체를 요소로 추가하거나 삭제한다.

clice(index, copyCount) : 여러 요소를 잘라 새로운 배열 객체로 만든다.

 

 * 함수를 익명함수로 변수에 할당할 때는 함수를 선언하는 선언문 형식이 아니라 일반 수식처럼 표현식이 되기 때문에 익명함수가 끝날 때는 ;를 붙여주는 것이 좋다.

03-3 콜백 함수 이해하기

- 함수를 파라미터로 전달하는 경우는 대부분 비동기 프로그래빙 방식으로 코드를 만들 때이다.

 

 

- 콜백 함수 : 함수가 실행되는 중간에 호출되어 상태 정보를 전달하거나 결과 값을 처리하는 데 사용된다.

 

 

03-4 프로토타입 객체 만들기

- 함수에 여러 가지 기능과 속성이 추가되며 객체 지향 언어에서 객체의 원형 (prototype)인 클래스를 만들고 해당 클래스에서 새로운 인스턴스 객체를 여러 개 만들어내듯 자바스크립트에서도 새로운 인스턴스 객체를 만들어낼 수 있다.

 

- 위 코드에서 Person.walk와 Person.prototype.walk는 같은 역할을 수행하나 prototype을 추가로 작성한다면 메모리를 더 효율적으로 관리할 수 있는 이점이 있다.

- 프로토타입 객체는 따로 추가하지 않더라도 함수 객체를 만들 때 자동으로 생성된다.

- 기본적으로 walk 함수를 호출했을 때는 prototype으로 정의된 함수가 반환되며 한 객체에만 따로 walk함수를 수정하고 싶다면 prototype을 제거한 Person.walk(function () { ... 형식으로 재정의하면 해당 객체에만 다른 walk함수가 동작하게 된다.