본문 바로가기
programming language/Node.js

Node.js

by cariño 2022. 9. 20.
728x90
반응형

chrome v8 javascript 엔진으로 빌드 된 javascript 런타임이다. 

*  javascript 런타임이란? 
런타임이란 프로그래밍 언어가 구동되는 환경을 말하는데,
Node.js나 크롬 등의 브라우저들은 javascript가 구동되는 환경이기 때문에 브라우저나 node.js들을 자바스크립트 런타임이라고 말한다. 
  • 브라우저: HTML,CSS,자바스크립트를 실행해 웹페이지를 브라우저 화면에 렌더링하는 것이 목적
  • 브라우저는 DOM API를 기본적으로 제공한다.
  • Node.js: 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 것이 주된 목적
  • Node.js는 DOM API를 제공하지 않는다. 브라우저 외부 환경에서는 HTML요소를 파싱해서 객체화한 DOM을 직접 다룰 필요가 없기 때문이다.

서버사이드에서도 javascript를 사용할 수 있도록 만든것이 Node.js이다.

Chrome V8 엔진 위에서 javascript를 실행할 수 있도록 만들어주고, javascript로 응용 프로그램을 만들 수 있도록 

해준다.  React.js, Angular, Lodash같은 프레임워크나 Babel, Webpack, ESLint등 여러가지 도구를 사용하기 위해선 node.js 와 npm이 필요하다. 

 

[설치]

각 해당 사이트에서 파일을 다운받아서 설치한다. 

설치 후 cli로 버전 확인

node -v
npm -v

 

 

[Global Object]

- 브라우저의 경우 window가 global 객체 역할을 한다. 

- window객체의 alert함수를 window선언 없이 사용 가능한것처럼 global 내부 함수들을 global선언 없이 사용할 수 있다. 

 

console.log(global) //node에서는 global object가 확인됨

global.setTimeout(() => {
  console.log('in the timeout')
}, 3000)

setTimeout(() => {
  console.log('without global timeout')
}, 3000)

 

 

[모듈이란?]

독립된 기능을 갖는 것 (함수, 파일)들의 모임.

  • 외장모듈
  • 일반 Node.js 개발자들이 만들어 놓은 모듈(라이브러리)
  • 외장 모듈을 이용하기 위해서는 npm(Node Package Manager)를 사용한다.

 

  • 내장모듈
  • Node.js를 설치하고 나면 그 안에 이미 제공되어지는 모듈을 말한다. 
  • 내장 모듈은 이미 Node.js를 설치할 때 존재하기 때문에 npm을 사용하지 않는다. 

[global에서 자주 사용되는 요소]
  • __dirname: 현재 폴더 경로를 출력함
  • __filename: 현재 파일 경로를 출력함
  • process.env:환경 변수로 등록된 값들을 접근할 수 있음
console.log(__dirname)
console.log(__filename)

 

환경변수란?

PATH 경로이다.

프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. 

 

윈도우에서 파일을 찾거나 실행할 때, 현재 디렉터리에 존재하지 않는 파일은 다른위치에 존재하더라도 찾을 수 없다. 

내가 실행하려는 파일이 있는 위치로 이동하여 파일을 입력해야 한다. 

 

환경변수를 설정하지 않으면 실행하고자 하는 파일이 존재하는 디렉토리 안에서만 작업하거나 경로를 작성하여 실행해야하는 번거로움이 있다. 이런 불편함을 해소하기 위해서 변수값에 경로를 설정하는 것이 환경변수 설정이다. 

 

어느 환경에서 배포하느냐에 따라서 다르게 설정해야하는 항목은 보통 운영체제 레벨에서 환경 변수를 통해 관리하게 된다. 

 

환경변수 접근: process.env

Node.js에서 환경변수 접근할 때는 내장 JS 객체인 process.env를 사용한다. 

어플리케이션 어디에서든지 접근이 가능하다.

 


 

[nodejs - modules, require]

node의 js를 모듈화 시키기 위해서 modules와 require를 사용한다. 

module.export를 사용해서 변수나 함수들을 모듈화 시킬 수 있고 require를 사용해서 모듈들을 가져와 사용할 수 있다. 

 

[modules]

1. 모듈화 할 데이터들을 module.exports에 json 형태로 넘겨준다. 

 

//ex1Module.js

const people = ['people1', 'people2', 'people3', 'people4']
const animal = ['animal1', 'animal2', 'animal3', 'animal4']

module.exports = {
  people,
  animal
}

 

 

2. js를 뺀 나머지 명칭으로 파일에 접근한다. 

 

const ex1Module = require('./ex1.module')

console.log('ex1Module.people: ', ex1Module.people);
console.log('ex1Module.animal: ', ex1Module.animal);

//ex1Module.people:  [ 'people1', 'people2', 'people3', 'people4' ]
//ex1Module.animal:  [ 'animal1', 'animal2', 'animal3', 'animal4' ]

[require]

1. os

nodejs에서 제공하는 기본적인 모듈들 중 os

const os = require('os')

console.log('os.platform(): ', os.platform());
console.log('os.homedir(): ', os.homedir());

//os.platform():  win32
//os.homedir():  C:\Users\Administrator

2. fs

파일 시스템에 접근할 수 있다.

파일 처리와 관련된 전반적인 작업을 하는 모듈을 말한다. 

 

1) 최상단에 모듈을 불러온다. 

 

const fs = require( "fs" ); // => fs 모듈 불러오기

 

2) Sync가 있으면 동기적 방식이다. 

fs 모듈은 sync가 있는 함수와 없는 함수 두가지 형태의 함수를 제공하고 있다. 

sync가 없는 함수는 callback함수를 통해 비동기 로직을 구현한다. 

sync가 있는 함수는 로직을 동기로 작성 가능하다. 

 

fs.readFile()

fs.readFileSync(path[, options])

 

readFile로 만들면 비동기적으로 파일을 읽어오기 때문에 post1.txt파일을 읽어올때도 계속 실행된다.

실행 순서가 동기적으로 처리된 것과 다르게 나오는 것을 확인할 수 있다.

 

// docs/post1.txt
hello node.js
 
//require
const fs = require('fs')
let input = fs.readFileSync('./docs/post1.txt').toString()
console.log(input) 
//hello node.js

//비동기적
fs.readFile('./docs/post1.txt', (err, data) => {
    console.log(data.toString())
})
console.log('비동기실행')
//비동기실행
//hello node.js

 

참고 사이트

 

[Node.js] fs 모듈

fs모듈 fs는 Node.js에서 기본적으로 제공하는 모듈로 File System의 약자이다. 파일을 읽기, 쓰기 등의 작업을 할 수 있다. 파일 읽기 fs.readFile과 fs.readFileSync로 파일을 읽어올 수 있다. fs.readFileSync..

choice91.tistory.com

 

728x90

'programming language > Node.js' 카테고리의 다른 글

AWS_S3 client 배포하기  (1) 2022.12.01
React 로그인 API _ 2 (서버만)  (0) 2022.11.06
express 사용해 보자!  (0) 2022.10.24
Webpack  (0) 2022.09.20
모듈 시스템  (1) 2022.09.20

댓글