node.js
- 설치 후 확인

- 현재 폴더 확인

코드
function hello(name){
console.log(`${name}님 환영합니다.`);
}
hello('홍길동');
- 실행

npm
1) npm초기화
- npm init
- OK가 나올때 까지 계속 엔터
- package.json 파일 생김 - 사용하는 모듈이나 패키지 및 버전 등의 정보가 담겨있다.
2) ansi-color 모듈 설치
npm i ansi-colors
3) 설치한 모듈(패키지) 사용해보기
const c = require("ansi-colors");
function hello(name){
console.log(c.green(name)+" 님 환영합니다.");
}
hello('홍길동');
4) 설치한 모듈 삭제하기
npm uninstall ansi-colors
함수형 변수(함수 표현식)
let hi = function(){
return '안녕하세요.';
}
console.log(hi());
일반함수의 매개변수로 전달
function sayHi(method){
console.log(method());
}
sayHi(hi);
화살표 함수로 변환
let hi2 = () => {
return '안녕하세요?';
};
sayHi(hi2);
let sum = (a,b) => {
return a + b;
}
console.log(sum(10,20));
- 화살표함수의 수형문(본문)이 한줄이면, 중괄호 생략가능
let sub = (a,b) => a - b;
console.log(sub(10,20));
let double = a => a * 2;
console.log(double(10));
비동기 처리
- 코드 선언 시점과 코드 실행 시점이 다른 것
- UI(사용자의 액션-버튼, 스크롤)처리, HTTP - 요청과 응답은 비동기이다.
- 동기 처리 : 실행시 응답을 기다리면서 Blocking현상이 발생한다
1) 콜백함수
- 함수안에서 다른 함수를 매개변수로 넘기고 실행되어지는 순서 제어
- 복잡하고 가독성이 떨어짐
const order = (coffee, callback) => {
console.log(`${coffee} 주문 접수`);
setTimeout(()=>{
callback(coffee);
},3000);
};
const display = (result) => {
console.log((`${result} 완료!`));
};
order('아메리카노',display);
2) Promise
- ES6(2015) 프라미스 객체와 콜백함수 사용
- 비동기처리에 성공했을 때와 성공하지 못했을 때의 반환 결과를 미리 약속해둔 것
- 처리에 성공했는지 실패했는지 판단하고 실행할 명령어는 개발자가 직접 코딩
- 실행할 명령어는 개발자가 직접 코딩
let likePizza = true;
const pizza = new Promise((resolve, reject) => {
if(likePizza){
resolve('피자를 주문합니다.');
}else{
reject('피자를 주문하지 않습니다.');
}
});
pizza
.then((result) => console.log(result))
.catch((err) => console.log(err));
3) async/await
- ES2017 - asynsc와 await 예약어를 통해서 구현
변수
const user = "홍길동";
module.exports = user;
함수
const hello = (name) => {
console.log(`${name}님, 안녕하세요?`);
};
module.exports = hello;
두 파일 부르기
const user = require("./07-1-user.js");
const hello = require("./07-2-hello.js");
hello(user);
export depart
const goodbye = (name) => {
console.log(`${name}님, 안녕히가세요.`);
};
export default goodbye;
export const goodbye = (name) => {
console.log(`${name}님, 안녕하세요?`);
};
greeting.mjs
const hi = (name) => {
console.log(`${name}님, 안녕하세요?`);
};
const goodbye = (name) => {
console.log(`${name}님, 안녕하세요?`);
};
export {hi, goodbye};
app.mjs
import {hi, goodbye as bye} from "./08-4-greeting.mjs";
hi("변사또");
bye('김진사');
import * as say from "./08-4-greeting.mjs";
say.hi("hong");
say.goodbye("kim");
통신 프로토콜
- HTTP/HTTPS
- TCP/IP - Socket통신 - 메신저, 게임
- UDP/IP - Broadcast통신
- 이메일(POP, SMTP)
- 원격접속(Telnet)
- 파일전송(FTP)
글로벌 모듈
global.console.log("콘솔입니다.");
console.log("콘솔입니다.2");
console.log(`현재 모듈이 있는 폴더:${__dirname}`);
console.log(`현재 모듈이 있는 폴더:${__filename}`);
path 모듈
const { log } = require('console');
const path = require('path');
const fullPath = path.join('some', 'work', 'test.txt');
console.log(fullPath);
console.log(`파일 절대 경로 : ${__filename}`);
const dir = path.dirname(__filename);
console.log(dir);
const filename = path.basename(__filename);
console.log(filename);
const pureFilename = path.basename(__filename, '.js');
console.log(pureFilename);
const ext = path.extname(__filename);
console.log(ext);
pureFilename2 = path.basename(__filename, ext);
console.log(pureFilename2);
const parsedPath = path.parse(__filename);
console.log(parsedPath);
console.log(parsedPath.name);
fs 모듈
const fs = require('fs');
let files = fs.readdirSync("./");
console.log(files);
console.log("나는 다른 일 할래.");
fs.readdir("./",(err, files) => {
if(err){
console.log(err);
return;
}
console.log(files);
});
console.log("나는 다른 일을 한다.");
fs-read
const fs = require('fs');
const data = fs.readFileSync("./01-hello.js", "utf-8");
console.log(data);
fs.readFile("./01-hello.js","utf-8",(err)=>{
if(err){
console.log(err);
return;
}
console.log(data);
});
fs-write
const fs = require("fs");
let data = "This is test file";
fs.writeFileSync("test-1.txt",data);
fs.writeFile("test-2.txt",data, (err) => {
if(err){
console.log(err);
}
console.log("파일 쓰기 성공!");
});
fs-append
const fs = require("fs");
const appendData = "추가되는 내용입니다.";
if(fs.existsSync("./test-1.txt")){
console.log("파일이 존재함.");
fs.writeFileSync("./test-1.txt",appendData,{flag:"a"});
};
fs.appendFile("./test-2.txt","\n\n새로운 내용추가", (err) => {
if(err){
console.log(err);
}
console.log("파일 내용 추가 완료!");
});
http모듈 - 서버
const http = require("http");
const server = http.createServer((req,res)=>{
console.log("HTTP 요청 발생!");
console.log(req.method);
res.setHeader("Content-Type","text/plain");
res.write("Hello Node.js");
res.end();
});
server.listen(3000, () => {
console.log("3000번 포트에서 서버 실행 중...");
});
const http = require("http");
const server = http.createServer((req,res)=> {
console.log("HTTP 요청 발생!");
const {method,url} = req;
res.setHeader("Content-Type","text/plain");
if(method==="GET" && url === "/home"){
res.statusCode == 200;
res.end("HOME");
}
else if(method === "GET" && url === "/about"){
res.statusCode == 200;
res.end("ABOUT");
}
else{
res.statusCode == 404;
res.end("알 수 없는 요청입니다(경로나 자원이 없음.)");
}
});
server.listen(3000, ()=>{
console.log("3000번 포트에서 서버 실행 중...");
})