요청(Request)과 응답(Response)은 웹 서버에서 클라이언트와 통신하는 데 사용되는 핵심 개념이다.
클라이언트가 서버에 어떤 작업을 요청하면 서버는 이에 대한 응답을 반환한다. 요청과 응답은 HTTP 프로토콜을 통해 이뤄지며, 이를 통해 웹 애플리케이션은 동작한다.
Request(req) - 요청
웹 서버를 만들 때 클라이언트에게 요청을 보내는데 사용한다.
| Request 구성
HTTP 메소드 (Method)
클라이언트는 리소스에 대한 특정 작업을 나타내는 HTTP 메소드를 사용하여 서버에 요청을 보낸다.
< HTTP 메소드 종류>
GET : 리소스를 가져오기 위한 메소드
POST : 새로운 리소스를 생성하기 위한 메소드
PUT : 기존 리소스를 업데이트하기 위한 메소드
DELETE : 리소스를 삭제하기 위한 메소드
PATCH : 리소스를 일부만 업데이트하기 위한 메소드
HEAD : GET과 같지만 본문(body)을 포함하지 않는 메소드
OPTIONS : 서버가 지원하는 HTTP 메소드를 확인하기 위한 메소드
이 외에도 TRACE, CONNECT 등의 HTTP 메소드가 있지만, 일반적으로 사용되지는 않는다.
URI (Uniform Resource Identifier)
요청은 특정 리소스를 식별하는 URI를 포함한다. URI는 요청하는 리소스의 주소를 나타낸다.
헤더 (Headers)
요청은 헤더라 불리는 메타데이터의 집합을 포함한다. 헤더는 요청이나 클라이언트에 대한 부가 정보를 전달하거나 서버에 대한 기본 정보를 제공하는 데 사용된다.
바디 (Body)
POST 또는 PUT과 같은 메소드는 요청 바디에 데이터를 포함할 수 있다. 이는 서버에 전달되는 추가적인 정보를 담고 있다.
| Request Methods
req 객체는 Express 미들웨어 함수에서 사용되는 요청(Request) 객체이다. 이 객체는 클라이언트에서 서버로 오는 HTTP 요청과 관련된 정보 및 기능을 제공한다.
req.params : URL의 동적 라우트 매개변수에 액세스한다.
app.get('/users/:userId', (req, res) => {
const userId = req.params.userId;
// ...
});
req.query : URL의 쿼리 매개변수에 액세스한다.
// GET /search?q=keyword
app.get('/search', (req, res) => {
const searchKeyword = req.query.q;
// ...
});
req.body : POST 요청의 요청 본문에 액세스한다. Body-parser 미들웨어가 필요하다.
// POST /users
app.post('/users', (req, res) => {
const newUser = req.body;
// ...
});
req.headers : HTTP 요청 헤더에 액세스한다.
app.get('/check-user-agent', (req, res) => {
const userAgent = req.headers['user-agent'];
// ...
});
req.cookies : 클라이언트의 쿠키에 액세스한다. cookie-parser 미들웨어가 필요하다.
app.get('/read-cookie', (req, res) => {
const userCookie = req.cookies.user;
// ...
});
req.session : Express 세션에 액세스한다. express-session 미들웨어가 필요하다.
app.get('/user-profile', (req, res) => {
const user = req.session.user;
// ...
});
이외에도 req.method, req.path, req.protocol 등 다양한 메소드와 속성이 있다.
Response(res) - 응답
응답(Response)은 서버에서 클라이언트로 전송되는 데이터를 나타낸다. 클라이언트가 서버에 보낸 요청에 대한 결과로서, 서버는 이에 맞는 응답을 생성하고 클라이언트에게 전송한다.
| Response 구성
상태 코드 (Status Code)
서버는 요청을 받고 처리한 후 클라이언트에게 상태 코드를 반환한다. 상태 코드는 요청이 성공적으로 처리되었는지, 실패했는지 등을 나타낸다. 일반적인 상태 코드는 200 (OK), 404 (Not Found), 500 (Internal Server Error) 등이 있다.
헤더 (Headers)
응답은 헤더를 통해 클라이언트에 대한 부가 정보를 전달하거나, 캐싱 설정, 쿠키, 리다이렉션 등의 정보를 포함한다.
바디 (Body)
응답 바디에는 클라이언트에게 전달되는 데이터가 포함된다. 이 데이터는 HTML 문서, JSON, 이미지, 파일 등 다양한 형식일 수 있다.
| Response Methods
res.send() : 클라이언트에게 데이터를 보낸다. 이 데이터는 문자열, HTML, JSON 등 다양한 형식일 수 있다. 자동으로 Content-Type 헤더를 설정하여 데이터의 형식을 인식하도록 도와준다.
app.get('/example', (req, res) => {
res.send('Hello, World!');
});
res.json() : JSON 형식의 데이터를 클라이언트에게 보낸다. 이 메소드는 자동으로 Content-Type을 application/json으로 설정한다.
app.get('/json-example', (req, res) => {
const jsonData = { message: 'Hello, JSON!' };
res.json(jsonData);
});
res.render() : 템플릿 엔진을 사용하여 동적으로 HTML을 생성하여 클라이언트에게 보낸다. 주로 Express 애플리케이션에서는 템플릿 엔진으로 EJS, Pug, Handlebars 등을 사용한다.
app.set('view engine', 'ejs'); // 템플릿 엔진 설정
app.get('/dynamic-example', (req, res) => {
const dynamicData = { message: 'Dynamic Content!' };
res.render('dynamic-view', dynamicData);
});
더 많은 자세한 사항은 Express공식문서에서 볼 수 있다.
'STUDY > ExpressJS' 카테고리의 다른 글
[7-1] 사용자 인증을 위한 passportjs (0) | 2023.12.08 |
---|---|
[7-2] http의 취약점인 보안 강화를 위한 https (1) | 2023.12.06 |
[4-2] Express에서 정적 파일들을 제공하기 위한 미들웨어 - static (0) | 2023.05.24 |
[7-3] Express.js HTTP 보안강화 미들웨어 - helmet (0) | 2023.04.11 |
[5-3] Express.js 라우터 모듈화 (0) | 2023.04.05 |