본문 바로가기

[부트캠프] IT 코딩 부트캠프 후기/[Let's TIL🚴‍♀️] CodingON

[Node.js] promise 문법, FS모듈 다루기, 서버에 연결(HTTP)

(콜백지옥 때문에 만들어진 문법)

promise 프로미스

- 복잡도 증가와 예외처리의 어려움을 해결하기 위해 만들어짐

- 비동기 작업에서 성공과 실패를 분리해 메소드 수행

 

resolve(value) : 일이 성공적으로 끝난 경우 

-프로미스를 실행한 곳의 then으로 들어간다.

 

reject (error) : 일이 성공적이지 x 에러 발생시

 - 프로미스를 실행한 곳의 catch로 들어간다. 

 

프로미스의 상태

- pending : promise를 수행 중인 상태 (아직 돌고 있는 것을 받고 있어서)

- fullfilled : promise가 resolve된 상태

- rejected : promise가 지켜지지 못한 상태 

- settled : fullfilled혹은 rejected로 결론 난 상태

//함수 안에 파라미터로 함수 보내기
function func1(callback) {
    console.log("func1");
    console.log(callback);
    callback('이름'); //여기가 콜백함수
}

function func2(name) {
    console.log("func2");
    console.log("name : ", name);
}

func1(func2); // 선언 후 불러온 것
// 비동기로 실행되는 경우 순서를 강제로 정함
console.log("----------------------------");

// 이 둘은 동일, 단 선언 후 바로 불러온 것의 차이
func1(() => {
    console.log("func2");
});
console.log("----------------------------");

// 인자를 필요로 하는 콜백 함수 만들기
func1(function (name) {
    console.log("func2");
    console.log("name : ", name);
});

//promise로 변경
func1().then(function(name){
    console.log("func2");
    console.log("name : ", name);   
})
// 원래 코드를 promise로 변경

function login(id) {
    return new Promise( function (resolve, reject) { //promise로 변경
        setTimeout(function(){
            console.log("사용자 입장");
            resolve(id); //resolve로 변경
        }, 3000);
    });
}

function getVideo(id) {
    return new Promise(function (resolve, reject){
        setTimeout(function(){
            console.log( id + "의 비디오 리스트");
            resolve( ['아바타', '라라랜드']);
        }, 2000);
    });
}


function getDetail(video) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
        resolve ("비디오 제목 : " + video);
    }, 1000);
    });
}

login('kim')
    .then(function(user){ //리졸브 id를 user로 받아온다 
        console.log("user : ", user);
        return getVideo(user); // getvdideo함수를 실행하는데, 2초 타임아웃이므로 펜딩상태의 promise를 다음 then이 받는다
    })  //    getVideo().then()과 같다.
    .then(function(videos){ // 파라미터 videos에 아바타, 라라랜드가 들어온다.
            console.log("videos : ", videos);
            return getDetail(videos[0]); // 이것도 시간초가 있어 팬딩이 되므로, 기다리려면 return 시키고 그 다음 then으로 받게한다.
    })
    .then(function(msg){ 
        console.log("msg : ", msg);
    });

    // 비동기 코드지만, .then을 이용해 동기처리하도록 만듦

    
    login('kim')
        .then(getVideo) //이 함수가 바로 실행되게 한 것으로 위의 코드와 같다.



// login('kim')
//     .then( function(user){
//     });
// getVideo(id)
//     .then (functtion (videos){
//     });
// getDetail(videos[0])
//     .then (function (msg){
//     });

        // getVideo(user, function(videos){
        //     getDetail(videos[0], function(msg){
        //         console.log( msg );
        //     });
        // });





// login('kim', function(user){
//     getVideo(user, function(videos){
//         getDetail(videos[0], function(msg){
//             console.log( msg );
//         });
//     });
// });

 

FS 모듈 - 콜백, 프로미스 둘다 가능

 

 

File system | Node.js v19.1.0 Documentation

 

nodejs.org

 

http 통신 

: 클라이언트와 서버가 서로 왔다갔다 하는 것 = 통신

클라이언트가 요청, 서버가 응답하는 것

- node js를 통해 서버를 구축하는 방법은 htttp 와 express 두개

- http 모듈 (노드에서 요즘은 거의 사용하지 않는 편.)

  : 웹 서버를 구동하기 위한 node.js 내장웹 모듈


http 모듈 서버 만들기

 

Response 객체

writeHead : 응답헤더 작성

write : 응답 본문 작성

end : 응답 본문 작성 후 응답 종료

 

const http = require('http');
// const server = http.createServer(); //이걸 이용해서 서버를 연다
// const server = http.createServer( function(req,res){ // 클라이언트가 접속했을 때 실행할 함수를 적어준다. 
//     res.write("<h1>hello!<h1>");                       //req는 클라이언트 요청, res는 서버가 클라이언트에게 주는 응답을 의미
//     res.end("<hr>"); //end라는 함수를 통해서 내 응답이 여기까지인걸 명시해야 무한동력을 멈춘다. write게수는 상관 x
// });
// //만약 수정사항이 생긴다면, 반영하기 위헤서는 포트를 닫고 다시 시작하면 된다. 

//프로미스와 html 사용하기
const fs = require('fs').promises;
const server = http.createServer( function(req,res){ // 클라이언트가 접속했을 때 실행할 함수를 적어준다. 
    fs.readFile('./04test.html')         
    .then(function(data){
        res.end(data.toString());
    });
    });

// server.on() //on이라는 함수는 이벤트를 등록하는 함수
// server.listen() // 서버를 실행하고 클라이언트를 기다리는 함수

server.listen(8080, function(){  //포트번호, 함수 
    console.log('8080번 포트로 실행'); // 8080을 연다는 의미. 브라우저를 http://localhost:8080/ 를 열고 보면 된다.
});

 

locathost & port 

 

locathost

- localhost는 컴퓨터 내부 주소 (127.0.0.1)

- 자신의 컴퓨터를 가리키는 호스트 이름(hostname)

 

port 

- 서버내에서 데이터를 주고받는 프로세스를 구분하기 위한 번호

- 기본적으로 http 서버는 80번 포트를 사용(생략 가능, https는 443)

 

 

HTTP 응답

-1xx : 처리중

-2xx : 성공

-3xx : 리다이렉트 (다른 페이지로 이동)

-4xx : 요청오류 (ex. 400 잘못된 요청, 404 찾을 수 없음)

-5xx : 서버오류

 

 

NCP랑 http연결 실습

 

1) ncp 들어가서 acg 만들어둔 곳에 8080 포트 연결

이렇게 서버가 적용된 곳에 포트를 추가한다
생성 아래에 설정 클릭

 

네이버 클라우드 플랫폼 금융기관용 NAVER CLOUD PLATFORM for Financial Cloud

네이버 금융 클라우드, 금융보안원 안정성 평가 100% 충족, 글로벌 리전 및 보안기술 인증 보유

www.fin-ncloud.com

2) 파일질라 열어서 /var/www/ 에 내가 만든 파일 옮겨두기 

 

3) putty 열어서 로그인 후(아이디는 root) node 실행

 

이때,

cd node /var/www/ 로 이동 후

node 'js파일이름'  

 

4) 그리고 '내 IP:8080' 을 하면 브라우저에서 실행이 되는 걸 볼 수 있다.