앞서서 살펴본 예제를 다시 한번 자세히 확인해 보겠습니다.
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.write('<h1>Hello World</h1>');
res.end('<p>Hello Server</p>');
})
.listen(8080, () => {
console.log('8080번 포트 서버 대기 중');
});
/* 출력
8080번 포트 서버 대기 중
*/
우선 createServer 메서드 뒤에 listen 메서드를 붙입니다. 여기서는 클라이언트에 공개할 포트 번호를 작성하고 포트 연결이 완료된 후 실행될 콜백 함수를 작성합니다. 여기서는 '8080번 포트 서버 대기 중'이라는 텍스트를 출력하도록 만들었습니다.
res 객체에 대해서도 살펴볼까요? res에는 res.writeHead / res.write / res.end 메서드가 존재합니다.
- res.writeHead : res에 대한 정보를 기록합니다. 첫 번째 인수는 성공을 의미하는 200, 두 번째 인수는 응답에 대한 정보 중 콘텐츠 형식이 HTML임을 정의합니다. 또한 한글 표시를 위해 utf8을 선언합니다. 이와 같이 정보가 기록되는 부분을 '헤더(header)'로 칭합니다.
- res.write : 첫 번째 인수는 클라이언트로 본낼 데이터를 의미합니다. HTML 태그 뿐만 아니라 버퍼를 보낼 수도 있고 여러 번 호출해서 데이터를 여러 개 보낼 수도 있습니다. 이렇게 데이터가 기록되는 부분을 '본문, 즉 바디(body)'라고 합니다. 헤어와 바디 개념은 GET이나 POST 등의 용어와 함께 들어보신 적이 있죠? 추후 다시 살펴 보겠습니다.
- res.end : res 응답을 종료합니다. 만약 여기에 인수가 있을 경우, 그 데이터도 클라이언트로 보낸 다음 종료합니다. 응답이 종료되면 브라우저는 res 내용을 받아서 렌더링하게 됩니다.
○ localhost
로컬 호스트는 현재 컴퓨터의 내부 주소를 의미합니다. 외부 접근이 불거하고, 자신의 PC에서만 접근할 수 있습니다. 결국 서버 개발 테스트 용도로 자주 사용하게 되죠. localhost 또는 127.0.0.1을 주소로 사용합니다. 여기서의 숫자가 우리가 흔히 얘기하는 IP(Internet Protocol)입니다.
○ 포트
포트는 서버가 프로세스를 구분하기 위해 사용하는 번호를 의미합니다. 하나의 서버에 다양한 req가 들어오고, 이를 처리하게 되죠. 이 req를 프로세스 별로 포트를 다르게 할당하고 이를 통해서 req를 구분하게 됩니다.
123.45.67.89라는 IP를 가진 서버가 있다고 가정해 보겠습니다. 이 서버로 HTTP 요청도 들어오고, FTP 요청도 들어옵니다. 혹은 데이터베이스에서 요청이 들어오기도 하죠. 이럴 때 IP 주소 뒤에 콜론( : )을 붙여서 사용하게 됩니다. 하나의 서버에 req를 받는 여러 개의 귀가 (포트)번호를 갖고 달려있는 것입니다. HTTP req만 듣는 귀, FTP req만 듣는 귀...이런 식으로요.
우리는 위의 예제에서 localhost를 사용하고 포트 번호를 8080을 사용할 경우에 대해서 콜백을 정의했습니다. 그럼 이럴 때 http://localhost:8080이라고 주소를 입력해서 결과를 확인했죠. 해당 서버에는 8080 포트가 설정되어 있는 겁니다.
하지만 일반적으로 우리가 주소창에 포트 번호를 적지 않습니다. 그 이유는, 대표적인 포트 번호는 생략이 가능하도록 설정되어 있기 때문입니다. 80(HTTP), 443(HTTPS), 21(FTP), 3306(MYSQL)이 대표적입니다. http://tistory.com:80 과 같은 방식으로 주소를 입력해 보면 동일하게 작동합니다. 이런 대표적인 포트 번호들은 사용하지 않는 것이 좋습니다.
참고로 리눅스, 맥에서는 1024번 이하의 포트 번호 연결 시 관리자 권한이 필요합니다. 이럴 때 명령어 앞에 sudo를 붙여 줍니다. sudo node server1과 같은 방식으로 말이죠. 8080의 경우 sudo를 붙이지 않아도 됩니다.
'Programming > Node.js' 카테고리의 다른 글
5. http 모듈로 서버 만들기 (1) - 요청과 응답 [4] (0) | 2024.07.01 |
---|---|
5. http 모듈로 서버 만들기 (1) - 요청과 응답 [3] (0) | 2024.06.30 |
5. http 모듈로 서버 만들기 (1) - 요청과 응답 [1] (0) | 2024.06.26 |
4. Node 기능 살펴보기 (11) - 예외 처리하기 [3] : 흔히 발생하는 에러 유형 (0) | 2024.06.25 |
4. Node 기능 살펴보기 (11) - 예외 처리하기 [2] (0) | 2024.06.24 |