Node Js 기본 구조

물까치·2025년 2월 24일

NodeJs 강의

목록 보기
2/4

모듈

모듈을 활용한 간단한 서버 생성

const http = require('http'); // Global Module of Node Js

// Parameter : reqset Listener
const server = http.createServer((req, res) => {
	console.log(req);
});

// Parameter : port?, hostname?
server.listen(8080);

http RequestHandler 구조

http header에 주요 속성들

  • Content-Type: 전송되는 데이터의 종류를 나타내는 속성으로, 예를 들어 text/html, application/json 등이 있습니다.
  • Content-Length: 전송되는 데이터의 길이를 나타내는 속성으로, 바이트 단위로 표시됩니다.
  • Status Code: HTTP 응답 상태 코드로, 요청에 대한 서버의 응답을 나타내는 숫자 코드입니다. 일반적으로 200은 성공을, 404는 찾을 수 없음을 의미합니다.
  • method
  • endpoint

![[Attachments/Pasted image 20241230194507.png]]

[[Http Status Code Table]]

response 전송 예시

// Parameter : reqset Listener
const server = http.createServer((req, res) => {
console.log(req);
//key와 value를 넣어 header를 설정 가능
res.setHeader("Content-Type", "text/html");
// content 입력
res.write(
	`<html>
		<head>
			<title>My First Page</title>
		</head>
		<body>
			<h1>Hello from my Node.js Server!</h1>
		</body>
	</html>`);
res.end();
});

http 예시

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

redirection 예시

if (url === "/message" && method === "POST") {
fs.writeFileSync("mesage.txt", 'DUMMY');
res.statusCode = 302;
res.setHeader('Location', '/');
return res.end();
}

라이프 사이클

  • 싱글 스레드를 사용해 요청을 처리함
    + 운영체제에 따라 다중 쓰레드를 활용함

  • 기본적인 동작은 Event Loop 내부에서 처리함
  • process.exit을 통해 서버를 종료할 수 있음

event loop

  • 모든 요청에 대한 처리는 싱글 스레드에서 처리함
  • 이벤트 루프는 복잡한 처리를 콜백함수에게 요청하여 부하를 최적화함
    + 파일 시스템과 같은 복잡한 처리를 worker pool에 비동기적으로 요청함
    + worker pool은 다른 쓰레드의 영역에서 프로세스를 처리할 수 있음

Stream && Buffers

  • http를 통해 송수신되는 데이터를 stream 으로 전송함
  • 버퍼를 통해 코드 영역에 있는 데이터(Chunk)를 임시 저장하여 순차적으로 전송

EventHandler를 활용한 예시

if (url === "/message" && req.method === "POST") {
	const body = [];
	
	req.on('data', (chunk) => {
		body.push(chunk);
	});

	req.on('end', () => {
		const parsedBody = Buffer.concat(body).toString();
		fs.writeFileSync('message.txt', parsedBody.split('=')[1]);
			
		res.statusCode = 302;
		res.setHeader('Location', '/');
		return res.end();
	});

}

다른 js 파일 불러오기

// dict 형식으로 설정
module.exports = {
	handler: requestHandler,
	someText : "Hello World!"
};

// 대입 형식으로 설정
module.exports.handler = requestHandler;
module.exports.someText = "Hello World!";

// 대입 형식 + Node js 에서 지원하는 생략형
exports.handler = requestHandler;
exports.someText = "Hello World!";

core module 정보

profile
광기의 개발일지

0개의 댓글