이번 포스팅에서는 node.js로 웹 페이지에 접속하기 위한 기초적인 개념들을 공부해 보고자 한다.


API(Application Programming Interface)
- 여러 프로그램들과 데이터베이스, 기능들의 상호 통신 방법을 규정하고 도와주는 매개체
- 애플리케이션과 웹 서버 사이에서 중개자의 역할을 하며 시스템 간 데이터 전송을 처리
- 역할
- 서버와 데이터베이스에 대한 출입구 역할
- 애플리케이션과 기기가 데이터를 원활히 주고 받을 수 있도록 돕는 역할
- 모든 접속을 표준화하여 누구나 동일한 액세를 얻을 수 있게 하는 역할
- 장점
- 기존 시스템과의 호환성 유지
- 시스템 간의 상호작용 용이성
- 데이터 접속의 표준화와 편의성
- 자동화와 확장성
- 개발 시간 단축 및 비용 절감
- 개발자 간 협업 용이성
- 비즈니스 확장 용이성
- 단점
- API 변경시 호환성 문제 발생 가능성
- 보안 이슈
- 소유권 문제 발생 가능
- API를 사용하기 위해 이해하고 구현해야하는 높은 기술적 요구사항
- 유형
- private API, public API, partner API

REST API(Representational State Transfer API)
- REST 아키텍처 스타일의 디자인 원칙을 준수하는 API
- 즉, REST 기반으로 만들어진 API
- RESTful API 라고도 함
- HTTP 통신에서 CRUD 요청을 resouce+method로 표현, 특정한 형태로 전달
- 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 떄문에 웹의 장점을 최대한 활용할 수 O
- 그렇다면 REST가 무엇일까?
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- HTTP URL을 통해 자원을 명시하고(웹의 모든 자원에 고유한 http url 부여)
- HTTP Method(post/get/delete/patch 등)를 통해
- 해당 자원에 대한 CRUD 처리를 적용
- 특징: 서버-클라이언트 구조/ 무상태/ 캐시처리 가능/ 계층적
- 장점
- HTTP 프로토콜의 인프라를 그대로 사용 → REST API를 위한 별도의 인프라 구축할 필요 X
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능
- 명확해서 의도하는 바를 쉽게 파악 가능
- 서버와 클라이언트의 역할을 명확하게 분리
- 애플리케이션 분리 및 통합
- 단점
- 표준 존재X
- HTTP Method 형태가 제한적
이 포스팅은 API만 중점적으로 다루는 글이 아니다보니, 간단하게 개념과 특징만 정리하고 넘어가겠다.
node.js에서 서버를 구축하는 방법은 기본적으로 http와 express가 있는데
express는 다운받아야 하고, http는 내장되어 있어서 그냥 불러와서 사용하면 된다.

http 모듈
- node.js를 통해 서버를 구축하는 방법 중 하나
- 웹 서버를 구동하기 위한 node.js 내장 웹 모듈
- server 객체, request 객체, response 객체를 사용함
- server 객체: 웹 서버를 생성할 때 사용하는 객체
- request 객체: 응답 메시지를 작성할 때 첫 번째 매개변수로 전달되는 객체
- response 객체: 응답 메시지를 작성할 때 두 번째 매개변수로 전달되는 객체
- 낮은 코드 가독성 & 확장성
서버를 생성하고 조작하는 예시 코드는 다음과 같다.
const http = require("http"); // http 불러오기
const fs = require("fs"); // 원하는 파일 불러오기 위해 fs 불러오기
const PORT = 8086; // 원하는 포트번호 작성
// 서버 생성
const server = http.createServer(function(request, response){
try{
const data = fs.readFileSync("./index.html"); // index.html 파일을 읽어들임
// response 객체
// 응답 헤더 작성
/* response.writeHead(상태코드, 헤더정보)
- teext/html: 응답의 콘텐트 형식이 HTML이라는 의미
- 인코딩 방식은 utf-8
*/
response.writeHead(200, { "content-type": "text/html; charset=utf-8" });
// 응답 본문 작성
response.write(data); // 위에서 읽어들인 index.html 파일
// 응답 본문 작성 후 응답 종료
response.end();
}catch(error){ // 에러 발생시 실행되는 코드 작성
// 에러시, 만들어 둔 404 페이지를 띄울 것이며, 로직은 위와 동일함
const err = fs.readFileSync("./404.html");
response.writeHead(200, { "content-type": "text/html; charset=utf-8" }); //200은 상태코드이며, html로 보낼 것이고 인코딩 방식은 utf-8로 -
response.write(err);
response.end(); // 응답 종료
} finally{
// 예외 발생과 상관없이 모두 실행시키고 싶은 경우에 작성
console.log("성공 실패 모두 실행됨");
}
});

const http = require("http");
const PORT = 8086;
const server = http.createServer(); // 서버 생성
// listen(포트번호, 실행 함수): 서버를 실행하고 클라이언트를 기다림
server.listen(POPT, function(){
console.log('위에서 선언한 8086번 포트로 서버 실행');
})
/* on(): 서버 객체에 이벤트 등록 */
/*
이벤트 종류
- request, connection, close, checkContinue, upgrade, clientError
*/
// 1. request 이벤트: 클라이언트가 요청할 때 발생하는 이벤트
server.on("request", function () {
console.log("request 이벤트 실행");
});
// 2. connection 이벤트: 클라이언트 접속했을 때 발생하는 이벤트
server.on("connection", function (req, res) {
console.log("connection 이벤트 실행");
});
http 응답에는 상태 코드가 존재하는데, 상태에 따라 다음과 같은 번호로 표현된다.

자주 등장하는 상태 코드
- 1XX : 처리중
- 100: continue, 102: processing
- 2XX: 성공
- 200: OK, 201: Created, 202: Accepted
- 3XX: 리다이렉트(다른 페이지로 이동)
- 4XX: 요청 오류
- 400: 잘못된 요청, 401: 권한 없음, 403: 금지됨, 404: 찾을 수 없음
- 5XX: 서버 오류
참고
https://hahahoho5915.tistory.com/54
'웹 백엔드' 카테고리의 다른 글
Node.js - 비동기 처리 (1) | 2024.01.27 |
---|---|
Node.js - Express 모듈과 EJS 템플릿 (1) | 2024.01.26 |
Node.js (1) | 2024.01.22 |
서버(Server)와 프로토콜 (0) | 2024.01.22 |
웹 프로그래밍 시작하기 (0) | 2022.10.05 |