Node.js - Web 모듈
웹 서버는 무엇인가요?
안녕하세요, 열정적인 프로그래머 되고자 하는 분들께! 오늘 우리는 웹 서버의 흥미로운 세상으로 뛰어들어보겠습니다. 웹 서버를 친절한 도서관 사서로 생각해보세요. 항상 당신이 찾는 책(또는 우리의 경우에는 웹 페이지)을 주기 위해 준비되어 있습니다.
웹 서버는 웹 브라우저로부터의 요청에 응답하는 소프트웨어입니다. 브라우저에 URL을 입력할 때, 당신은 사실상 특정 웹 페이지를 요청하는 것입니다. 서버는 그 페이지를 가져다주고 브라우저로 되돌려줍니다.
간단한 비유로 설명해보겠습니다:
- 당신(클라이언트)은 도서관(인터넷)에 들어갑니다.
- 사서(웹 서버)에게 특정 책(웹 페이지)을 요청합니다.
- 사서는 책을 가져다주고 당신에게 전달합니다.
- 당신은 책을 읽습니다(브라우저가 웹 페이지를 표시합니다).
간단하지 않나요? 이제 Node.js를 사용하여 우리 자신의 웹 서버를 만들어보겠습니다!
웹 애플리케이션 아키텍처
코딩을 시작하기 전에, 웹 애플리케이션의 기본 아키텍처를 이해해보겠습니다. 집을 짓기 전에 설계도를 이해하는 것과 같은 이치입니다.
일반적인 웹 애플리케이션은 세 가지 주요 구성 요소로 구성됩니다:
- 클라이언트: 보통은 Chrome나 Firefox와 같은 웹 브라우저로, 서버로 요청을 보냅니다.
- 서버: 우리의 Node.js 애플리케이션이 실행되는 곳입니다. 클라이언트로부터 요청을 받아 응답을 보냅니다.
- 데이터베이스: 데이터를 저장하고 검색하는 곳입니다. 이 튜토리얼에서는 데이터베이스에 대해 다루지 않겠지만, 그 존재를 알아두는 것이 좋습니다!
다음은 이를 설명하는 간단한 다이어그램입니다:
[클라이언트] <---> [서버] <---> [데이터베이스]
화살표는 이 구성 요소 간의 데이터 흐름을 나타냅니다. 멋지죠?
Node를 사용하여 웹 서버 만들기
이제 손을 더러워하고 Node.js를 사용하여 간단한 웹 서버를 만들어보겠습니다. 전혀 코딩한 적이 없어도 걱정 말아요 – 단계별로 설명해드릴게요!
먼저, Node의 내장된 http
모듈을 사용해야 합니다. 이 모듈을 사용하면 HTTP 요청을 처리할 수 있는 서버를 만들 수 있습니다.
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!');
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});
이를 간단히 설명해보겠습니다:
-
http
모듈을require
합니다. 이는 서버를 만들기 위한 도구를 제공합니다. -
http.createServer()
를 사용하여 새로운 서버를 만듭니다. 이 함수는 서버에 요청이 들어올 때마다 실행될 콜백 함수를 받습니다. - 콜백 함수에서 상태 코드를 200(OK)로 설정하고, 콘텐츠 타입을 평문으로 설정하고, "Hello, World!"를 응답으로 보냅니다.
- 마지막으로, 서버가 로컬호스트의 3000 포트에서 요청을 듣도록 설정합니다.
이 코드를 server.js
라는 파일에 저장하고, 터미널을 열어 해당 파일이 있는 디렉토리로 이동한 후 다음 명령어를 실행합니다:
node server.js
이제 브라우저를 열고 http://localhost:3000
에 접속하면 "Hello, World!"를 보게 될 것입니다. 축하드립니다, 첫 웹 서버를 만들었습니다!
Node를 사용하여 웹 클라이언트 만들기
이제 서버가 있으므로, 이 서버로 요청을 보내는 간단한 클라이언트를 만들어보겠습니다. 실제로는 웹 브라우저가 이 역할을 하지만, Node.js를 사용하여 간단한 클라이언트를 만들 수 있습니다.
다음은 서버로 GET 요청을 보내는 간단한 클라이언트입니다:
const http = require('http');
const options = {
hostname: 'localhost',
port: 3000,
path: '/',
method: 'GET'
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
이를 간단히 설명해보겠습니다:
- 다시
http
모듈을require
합니다. - 요청의 옵션을 설정합니다. 호스트네임, 포트, 경로, 그리고 메서드를 설정합니다.
-
http.request()
를 사용하여 요청을 만들고, 옵션과 콜백 함수를 전달합니다. - 콜백 함수에서 상태 코드를 로그하고, 'data' 이벤트에 대한 이벤트 리스너를 설정하여 서버로부터 수신된 데이터를 출력합니다.
- 오류 처리를 설정합니다.
- 마지막으로, 요청을 보내기 위해
req.end()
을 호출합니다.
이 코드를 client.js
라는 파일에 저장하고, node client.js
를 실행하면 상태 코드(200)와 서버에서 보낸 메시지("Hello, World!")가 터미널에 출력됩니다.
결론
축하합니다! 지금까지 Node.js를 사용하여 첫 웹 서버와 클라이언트를 만들었습니다. 이것은 얼음산의 표면에 불과하지만, 멋진 시작입니다. 웹 개발의 여정을 계속하면서 다양한 요청을 처리하고, HTML 페이지를 제공하고, 데이터베이스와 작업하는 등 더 많은 것을 배울 것입니다.
기억하시라, 모든 전문가는 초보자였습니다. 꾸준히 연습하고 배우며, 가장 중요한 것은 즐기세요! 웹 개발의 세계는 방대하고 흥미롭며, 당신이刚刚的第一步을 내딛었습니다. 행복하게 코딩하세요!
Credits: Image by storyset