2024. 1. 17. 20:26ㆍ공부/내배캠 TIL
목차
1. 학습 내용
1.2 Node.js란 무엇일까?
1.5 Express.js 프레임워크
2. 내용 정리
HTTP의 구성요소
서버 : 클라이언트에 정보나 서비스를 제공하는 주체
클라이언트 : 요청 주체(브라우저, 프로그램, 앱, 다른 서버)
요청(Request)과 응답(Response) ->
1. 브라우저가 서버에 원하는 정보 요구(Reqeuest)
2. 서버가 페이지 확인 후 데이터 반환(Resoponse)
method :
- GET : 어떤 리소스를 얻을때 사용. 모든 요청은 GET메서드를 사용해 서버에 요청(예외도 있음)
- POST : 데이터를 게시할때 사용. (회원가입, 게시글 작성, 댓글 작성)
<웹 서버와 브라우저 간의 통신 방식>
1️⃣ 사용자가 웹 브라우저의 주소창에 URL을 입력합니다.
( 사용자가 브라우저를 통해 HTTP request로 웹 서버에 사이트 요청.)
2️⃣ 웹 브라우저는 입력받은 URL을 DNS 서버로 전달하여 해당 IP 주소를 찾게됩니다.
3️⃣ DNS 서버는 도메인 이름을 IP 주소로 변환합니다.
4️⃣ 웹 브라우저는 해당 IP 주소로 HTTP 요청을 전달합니다.
5️⃣ IP 주소에 연결된 웹 서버는 요청(Request)을 받아 처리합니다.
(요청을 처리)
6️⃣ 웹 서버는 처리 결과를 HTTP Response로 브라우저에게 전달합니다.
(데이터를 브라우저에 전송)
7️⃣ 웹 브라우저는 받은 HTTP Response을 바탕으로 사용자에게 표시하게됩니다.
(서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그려냄)
02. Node.js란?
1) Node.js는 이벤트 기반, 논 블로킹 I/O모델을 사용해 가볍고 효율적인 JavaScript 런타임 입니다.
(서버라는 말은 없다. Node.js가 서버에도 쓰이지만 서버에만 쓰이진 않기 때문.)
(특성 : 논블로킹 I/O, 싱글 스레드, 이벤트루프)
- JavaScript런타임 : 브라우저가 아닌 로컬에서 실행하게 도와주는 환경.
- 논 블로킹 I/O : 호출되는 I/O 함수가 바로 호출에 대해 리턴해주는 방식, 프로그램이 여러 작업을 동시 처리
- 싱글 스레드 : 동작시 cpu/프로세서를 하나만 사용(리소스 아끼기) / 비동기 처리하여 동시 처리 가능
- 호출 스택 : 함수의 실행 순서를 추적하는 자료구조.
- 이벤트 루프 : 하나의 스레드만으로 여러 비동기 작업을 관리하기 위한 구현체.
3. 예제
<이벤트 루프>
function firstFunction() {
console.log('firstFunction 입니다.');
secondFunction();
}
function secondFunction() {
// 2 초간 기다린다.
setTimeout(function () {
console.log('secondFunction 입니다.');
}, 2000);
}
firstFunction();
console.log('전역 코드 실행 중!');
// print: firstFunction 입니다.
// print: 전역 코드 실행 중!
/** 2 초간 기다린다. **/
// print: secondFunction 입니다.
firstFunction이 호출 스택에 추가되고 실행, secondFunction호출.
secondFunction이 호출 스택에 추가되고, setTimeout함수 실행.
setTimeout은 비동기 -> setTimeout을 이벤트 큐에 넣고 secondFunction을 스택에서 제거.
2초가 지나기 전 console.log('전역 코드 실행 중!') 실행. 2초가 지난 후
secondFunction 실행.
'공부 > 내배캠 TIL' 카테고리의 다른 글
[Node.js_4기] Today_I_Learn : 이벤트 루프 정?리 (24/01/23) (1) | 2024.01.23 |
---|---|
[Node.js_4기] Today_I_Learn : 개인과제 (24/01/22) (0) | 2024.01.22 |
[Node.js_4기] Today_I_Learn : 팀프로젝트 회고 (24/01/16) (2) | 2024.01.16 |
[Node.js_4기] Today_I_Learn : This 복습 (24/01/12) (0) | 2024.01.12 |
[Node.js_4기] Today_I_Learn : 팀 프로젝트 - 기존 코드 리팩토링 (24/01/11) (0) | 2024.01.11 |