기타등등/한번해봄

👾한번 해봄 시리즈👾 node.js를 배워보자

킹king 2020. 12. 31. 13:05
반응형

👾한번 해봄 시리즈👾

=할건 따로있는데 한번 손대고싶어서 일단 찍어먹어보는 시리즈

 

------------------------------

 

 

1. node.js

notification 

브라우저 밖에서 javascript를 사용할 수 있게 해주는 런타임 환경.

 

즉 web이라는 환경에서 벗어나 이제 컴퓨터 자체 파일에 접속하거나, 이를 읽고 쓰거나,

데이터베이스에 접속하거나 하는 등의 액션이 가능함.  

 

그러다보니 기존 브라우저에서 하던 명령들이 안먹힐때가 있음.

예를들어 웹api인 alert는 예를들어 브라우저에서 실행시키면 경고창이 잘 뜨겠지만,

node.js에서 실행시키면 에러가 발생함(이젠 환경이 브라우저가 아니니까).

 

장점

- javascript 하나만 알면 서버도 건들 수 있음

- 성능이 좋음(v8 엔진 탑재, 서버쪽에서도 비동기엔진 가능)

 

 

2. 설치

공식 홈페이지 들어가서 설치만 해주면 끝.

 

 

3. 확인

터미널을 켜서 node -v 혹은 node --version 입력해주면 설치된 버전이 나옴.

vscode 들어가서 컨트롤+` 누르면 하단에 터미널 나옴

 

 

4. js 파일 실행

새로운 js파일을 하나 만든 다음에 

console.log(1);

같은거 하나 써준 뒤, 터미널에 node 파일명.js 라고 써주면 해당 파일이 실행됨.

 

 

5. module

node.js에서 각각의 파일은 모듈임.

 

모듈이란 하나의 조각으로 예를들어 한 어플리케이션 안에 10가지 js파일이 있다고 한다면,

얘네들이 모여서 하나의 어플리케이션을 구성하는 부품이 되는 것임.

 

app.js라는 파일안에 var speak라는 변수를 만들고,

logger.js라는 파일안에 var tell이라는 변수를 만들었다면

그 각각의 변수는 해당 모듈 안에서만 사용할 수 있음.

즉, speak는 app.js에서만, tell은 logger.js안에서만 사용할 수 있음.

 

만약 app.js라는 파일이 메인 js라서 다른 js파일에 있는 변수 함수 등을 활용해야한다면

import시켜줘야 사용할 수 있을 것임.

 

 

6. 내보내기

logger.js ---> app.js

먼저 logger안에 있는 변수나 함수를 app.js에서 사용하고 싶다면 export를 쓰면 됨.

// logger.js
var url = 'http://www.naver.com';

function log(m) {
    console.log(m);
}

module.exports.log = log;
// log라는 함수를 내보내서 log라는 이름으로 호출하면 됨.

module.exports.endPoint = url;
// url이라는 변수를 내보내서 endPoint라는 이름으로 호출하면 됨.

 

7. require

app.js에서는 내보내기 되어있는 파일을 가져오기 하는 작업임.

그 뒤 실행하면 됨.

// app.js
var logger = require('./logger');

console.log(logger.endPoint); // http://www.naver.com
logger.log('Hello'); // Hello

 

 

8. 기본 명령어

cd = change directory.

cd ./a = a라는 다음 폴더로 이동.

cd ../ = 이전 폴더(상위 폴더)로 이동.

ls = 해당 디렉토리 내에 있는 파일들 알려줌.

ls 쓰면 이렇게 주르륵 나옴

 

9. process.argv

배열형태로 [node.js의 exe파일 위치, 현재 실행한 js파일의 위치]를 알려줌.

만약 터미널에서 실행할때 뒤에 다른 말을 입력하면 배열에 추가됨.

var args = process.argv;
console.log(args);

// > node app.js 라고 치면 아래와 같이 나옴
// [ 'C:\\Program Files\\nodejs\\node.exe', 'C:\\users\\master\\app.js' ]

// > node app.js hello 라고 치면 아래와 같이 나옴
// [ 'C:\\Program Files\\nodejs\\node.exe', 'C:\\users\\master\\app.js', 'Hello']

 

 

10. 파일 생성, 읽기

node.js안에는 이미 내장되어있는 모듈들이 있음.

 

그중에 file system이라는 모듈을 통해 파일을 생성하고 읽을 수 있음.

var fs = require('fs');

// 파일 생성
fs.writeFile('message.txt', 'This is message file', (err) => {
	console.log('File has been saved!');
});
// 터미널에서 실행하면 터미널에 'File has been saved!'가 찍히고,
// 파일탐색기에서 찾아보면 저 텍스트파일이 생성되어있는 것을 볼 수 있음.

 

fs.readFile('message.txt', 'utf8', (err, data) => {
    console.log(data);
});
// 인자중에 'utf8'을 안쓰고 터미널에서 실행시키면 가끔
// <buffer 28 38 32 93 ....> 이렇게 생긴 데이터가 뜨는데
// utf8 써주면 message.txt에 써놓은 내용이 정상적으로 터미널에 출력됨.

궁금해서 저 콜백함수 인자인 err를 빼봤는데 에러가 뜨는걸 보면 무조건 넣어줘야하나봄.

인자에 err는 넣어줘도 내용에 if(err) throw err를 안쓸 경우,

일부러 없는 파일을 read해봤더니 그냥 undefined가 뜨고,

if(err) throw err 써주면 error 메세지를 뱉음.

 

 

11. 웹서버 실행

여기서는 http라는 모듈이 필요함.

var http = require('http');

var server = http.createServer((req, res) => {
    if(req.url === '/') {
    // 만약 주소가 /라면(이게 기본)
        res.write('<h1>welcome to the web</h1>');
        // 안에 태그 쓰면 잘 먹힘.
        res.end();
        // 항상 닫아줘야한다.
    }
    if(req.url === '/html') {
    // 만약 주소가 /html라면
        res.write('<b style="color: blue;">This is html page</b>');
        res.end();
    }
});

server.listen(3000);
// 터미널에서 실행 후
// 웹브라우저에서 localhost:3000에 접속하면 해당 내용을 볼 수 있음.
// 서버가 열린 상태에는 터미널이 멈춰있는데, 컨트롤 + c를 누르면 종료됨.

만약 아까 만든 message.txt파일의 내용을 localhost:3000에 접속했을때 띄우고 싶다면

아래와 같이 readFile해주면 끝.

var http = require('http');
var fs = require('fs');

var server = http.createServer((req, res) => {
    fs.readFile('message.txt', 'utf8', (err, data) => {
        res.write(data);
        res.end();
    });
});

server.listen(3000);

궁금해서 res.end()를 안써봤더니 브라우저에 내용은 안뜨고 무한으로 돌아감.