
Node.js는 http 모듈과 웹과 관련된 기본적인 처리를 한다.
하지만 http 모듈만으로 제대로 된 웹 애플리케이션을 만드는 것은 굉장히 어렵기 때문에 express 모듈을 이용하여 http 모듈에 여러 기능을 추가하여 편리한 개발을 지원한다.
1) 웹 요청과 응답
1.1) 스트림
프로그램이 프로그램 외부와 통신할 때 사용함. 컴퓨터 속 흐르는 물길로 비유함.
스트림은 일종의 추상적인 개념으로 입출력 기기나 프로세스/파일 등 어디로 가는지, 어디로 나왔는지 상관없이 통일된 방식으로 데이터를 다루기 위한 가상의 개념이다.
따라서 스트림을 정의하기는 모호하다.
공식문서에서는 "스트리밍 데이터로 작업하기 위한 추상적 인터페이스" 라고 설명한다.
1.1*) 스트림 타입
| 타입 | 설명 | 예시 |
| Readable | 읽을 수 있는 스트림 | fs.createReadStream() |
| Writeable | 쓸 수 있는 스트림 | fs.createWriteStream() |
| Duplex | 읽고 쓰기 둘다 가능 | net.Socket() |
| Transform | 데이터를 쓰고 읽을 때, 데이터 수정 또는 변형 가능한 Duplex 스트림 | zlib.createDeflate() |
1.2) HTTP 웹 서버의 요청/응답 메시지
[응답]
웹 브라우저 → 서버
- URL : 대상 (누구)
- Method : 방식
- Headers : 목적 (무엇)
[응답]
서버 → 웹 브라우저
- Status Code : 정상 수신 확인
- Header : 추가 요청 사항 확인
- Data : 본문
* 응답 메시지 사용 시, 쿠키 저장 및 추출 가능. 또한 웹 페이지를 강제로 이동시킬 수 있음.
2) express 모듈을 사용한 서버 생성/실행
*express 모듈을 사용하여 서버 생성시 아래 메서드 사용.
| 메서드 | 설명 |
| express() | 서버 애플리케이션 객체 생성 |
| app.use() | 요청 수신 시의 실행할 함수 지정 |
| app.listen() | 서버 실행 |
2.1) express 서버 생성 및 실행
// 모듈을 추출한다.
const express = require('express');
// 서버를 생성한다.
const app = express();
// request 이벤트 리스너를 설정한다.
app.use((request, response) => {
response.send('<h1>Hello express</h1>');
});
// 서버를 실행한다.
app.listen(52273, () => {
console.log('Server running at http://127.0.0.1:52273');
});
2.2) Port
포트는 컴퓨터와 컴퓨터를 연결하는 역할을 함. 정보의 출입구에 비유.
3) 페이지 라우팅
클라이언트 요청에 따른 적절한 페이지를 제공하는 기술.
express 모듈은 app 객체의 다음 메서드를 사용하여 페이지 라우팅을 함.
| 메서드 | 설명 |
| get(path, callback) | GET 요청 발생 시의 이벤트 리스너 지정 |
| post(path, callback) | POST 요청 발생 시의 이벤트 리스너 지정 |
| put(path, callback) | PUT 요청 발생 시의 이벤트 리스너 지정 |
| delete(path, callback) | DELETE 요청 발생 시의 이벤트 리스너 지정 |
| all(path, callback) | 모든 요청 발생 시의 이벤트 리스너 지정 |
3.1) GET, POST, PUT, DELETE
웹 요청 시, 여러 정보를 서버에 전달함. 이때 메서드 값을 전달.
GET, POST, PUT 등등 을 적어서 보내는 것이 규칙이다. 목적에 맞게 사용하면 됨.
- GET : 값 확인 시
- POST : 값 전달 시
- PUT : 값 수정 시
- DELETE : 값 제거 시
* 페이지 라우팅 시 토큰을 활용함.
4) 요청 메시지/ 응답 메시지
4.1) response 객체
| 메서드 | 설명 |
| send() | 데이터 본문 제공 |
| status() | 상태 코드 제공 |
| set() | 헤더 설정 |
Content-Type
서버가 클라이언트 웹 브라우저에 데이터를 제공 → 웹 브라우저는 해당 데이터의 타입 구분. (MIME 형식 문자열로 제공)
| MIME 형식 | 설명 |
| text/plain | 기본적인 텍스트 의미 |
| text/html | html 데이터 의미 |
| image/png | png 데이터 의미 |
| audio/mpe | MP3 음악 파일 |
| video/mpeg | MPEG 비디오 파일 |
| application/json | json 데이터 의미 |
| multipart/form-data | 입력 양식 데이터 의미 |
| type() | Content-Type을 MIME 형식으로 지정 |
HTTP 상태 코드
| HTTP 상태 코드 | 설명 | 예시 |
| 1XX | 처리 중 | 100 Continue |
| 2XX | 성공 | 200 OK |
| 3XX | 리다이렉트 | 300 Multiple Choices |
status() 메서드
status() : 상태 코드 지정
리다이렉트
웹 브라우저가 리다이렉트를 확인하면, 화면을 출력하지 않고 응답 헤더에 있는 Location 속성을 확인하여 해당 위치로 이동.
redirect() 메서드 사용.
4.2) request 객체
요청 매개 변수
| 분류 | 값(예시) | 설명 |
| 프로토콜 | HTTPS | 통신 규칙 |
| 호스트 | (search.)naver.com | 애플리케이션 서버(또는 분산장치)의 위치 |
| URL | /search.naver | 애플리케이션 서버 내부 라우트 위치 |
요청 매개 변수 추출
- query 객체 사용
- URL 뒤 ? 삽입
- '키=값' 형태로 값을 '&' 로 구분하여 입력
| 요청 매개 변수 | ?where=nexearch &query=초콜릿 &sm=top_hty &fbm=0 &ie=utf8 | 추가적인 정보 의미 |
* 본 포스팅의 내용은 '한빛아카데미_자바스크립트 프로그래밍 입문 (2판)' 의 내용을 포함합니다. *
** 미들웨어 부분 별도 포스팅 **
'Node.js' 카테고리의 다른 글
| [Node.js]: Node.js 입문하기 _ 모듈/함수 (0) | 2024.04.01 |
|---|---|
| [Node.js] : Node.js 입문하기 _ 기본 개념 (1) | 2024.03.29 |