> For the complete documentation index, see [llms.txt](https://dahye-jeong.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dahye-jeong.gitbook.io/til/nodejs/chapter2.md).

# Doit! - 노드 간단하게 살펴보기

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

`js`파일을 실행하려면 터미널에 `$ node [파일이름].js`라 치면 실행된다.

터미널 창에서 `$ node`를 입력하면 한줄 씩 바로 코드 결과를 확인 할 수 있다.

## 02-2 콘솔에 로그 뿌리기

console 객체는 **Global Object(전역 객체)**&#xC774;다. Global Object는 필요할 때 코드의 어느 부분에서나 사용할 수 있다.

| Global Object | 설명                      |
| ------------- | ----------------------- |
| console       | 콘솔 창에 결과를 보여주는 객체       |
| process       | 프로세스의 실행에 대한 정보를 다루는 객체 |
| exports       | 모듈을 다루는 객체              |

```
> console.log('결과는 %d입니다.',10);
결과는 10입니다.
undefined 
> console.log('JSON : %j',{name: "정다혜"});
JSON : {"name":"정다혜"}
undefined
```

결과에서 나오는 `undefined`는 반환 값이 없다는 의미이다.

#### `undefined`와 `null`의 차이

`undefined`는 단순히 값이 존재하지 않는다고 생각하면 되고, `null`은 의도적으로 값을 비웠다고 생각하면된다.

### console 메소드

| 메소드         | 설명                      |
| ----------- | ----------------------- |
| dir(object) | 자바스크립트 객체의 속성들을 출력      |
| time(id)    | 실행 시간을 측정하기 위한 시작 시간 기록 |
| timeEnd(id) | 실행 시간을 측정하기 위한 끝시간 기록   |

#### 전역 변수

| 변수           | 설명                  |
| ------------ | ------------------- |
| \_\_filename | 실행한 파일의 이름 출력       |
| \_\_dirname  | 실행한 파일이 들어 있는 폴더 출력 |

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

**process 객체**는 프로그램을 실행했을 때 만들어지는 프로세스 정보를 다루는 객체이다.

#### 주요 속성 / 메소드

| 속성/메소드 | 설명                            |
| ------ | ----------------------------- |
| argv   | 프로세스를 실행할 때 전달되는 파라미터(매개변수)정보 |
| env    | 환경 변수 정보                      |
| exit() | 프로세스를 끝내는 메소드                 |

`process.env`속성에는 사용자 정의 환경 변수만 들어가 있기 때문에 OS와 같은 시스템 환경 변수에 접근할 수 없다.

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

메인 파일 코드 중 독립적인 기능은 별도 파일로 분리할 수 있으며, 메인 파일에서는 전체적인 진행 순서나 흐름만을 제어한다. 이렇게 분리된 파일을 **모듈**이라고 한다.

```javascript
// main.js
var module1 = require('module1');
module1.함수이름();
```

```javascript
//module1.js
exports.함수이름 = 함수정의;
```

`exports`객체의 속성으로 변수나 함수를 지정하면 그 속성을 main.js와 같은 메인 자바 스크립트 파일에서 불러와 사용할 수 있다. 모듈을 불러올 때는 `require()`메소드를 사용한다.

#### `module.exports`와 `exports`

`module.exports`에는 하나의 변수나 함수 또는 객체를 직접 할당한다. `exports`에는 속성을 추가할 수 있어 여러 개의 변수나 함수를 각각의 속성으로 추가할 수 있다.

```javascript
//module1.js
exports.add = function(a,b){
    return a+b;
};

exports.multiply = function(a,b){
    return a*b;
};
```

```javascript
// module2.js
var calc={};

calc.add = function(a,b){
    return a+b;
};

clac.multiply = function(a,b){
    return a*b;
};

module.exports = calc;
```

### 외장 모듈

다른 사람이 만들어 둔 모듈을 외장 모듈이라고 한다. 시스템 환경 변수에 접근할 수 있는 모듈의 이름은 **nconf**이다.

**npm**패키지를 사용해 다른 사람들이 만들어 올려 놓은 패키지를 다운할 수 있다.

`$ npm install nconf`

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

내장 모듈은 자주 사용하는 기본 기능을 노드에 포함시켜 제공하는 것이다. 내장 모듈은 설치하지 않고 바로 사용할 수 있다.

[내장 모듈 정보](http://nodejs.org/api)

#### 시스템 정보 알려주는 os모듈

| 메소드                 | 설명                         |
| ------------------- | -------------------------- |
| hostname()          | 운영체제의 호스트 이름을 알려준다.        |
| totalmem()          | 시스템의 전체 메모리 용량을 알려준다.      |
| freemem()           | 시스템에서 사용 가능한 메모리 용량을 알려준다. |
| cpus()              | CPU정보를 알려준다.               |
| networkInterfaces() | 네트워크 인터페이스 정보를 담은 배열객체 반환  |

#### 파일 패스를 다루는 path 모듈

| 메소드        | 설명                                  |
| ---------- | ----------------------------------- |
| join()     | 여러 개의 이름들을 모두 합쳐 하나의 파일 패스로 만들어 준다. |
| dirname()  | 파일 패스에서 디렉터리 이름 반환                  |
| basename() | 파일의 확장자를 제외한 이름 반환                  |
| extname()  | 파일의 확장자 반환                          |
