(콜백지옥 때문에 만들어진 문법)
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' 을 하면 브라우저에서 실행이 되는 걸 볼 수 있다.
'[부트캠프] IT 코딩 부트캠프 후기 > [Let's TIL🚴♀️] CodingON' 카테고리의 다른 글
[web-server] 요청처리 : Form 전송 이용하기, method의 2가지 종류 (GET, POST) (0) | 2022.11.22 |
---|---|
[Express, ejs 모듈] 노드 모듈을 이용한 웹 서버 구축 (0) | 2022.11.22 |
[Node.js] 노드 내장 객체와 모듈 알기 (+ 객체 구조 분해, 콜백 함수) (2) | 2022.11.19 |
[Node.Js] Node.js 설치와 기초 (0) | 2022.11.15 |
[GIT] GIT 다루기(branch 생성 삭제, merge기초) and 브랜치 종류 (0) | 2022.11.15 |