제로부터 쌓는 개발일지
article thumbnail
반응형

Request와 Response의 개념

  • Request: 클라이언트(예: 웹 브라우저, 애플리케이션)가 서버에 요청을 보내는 행위
    URL: 서버의 특정 리소스를 지정
    HTTP Method: 행동을 정의 (Ex. GET, POST)
    Headers: 요청에 대한 메타데이터를 포함
    Query Parameters: URL에 추가된 선택적 데이터
    Body Data: POST 및 PUT 요청과 같은 일부 요청에 포함된 데이터
  • Response: 서버가 클라이언트의 요청에 응답하는 것
    Status Code: 요청이 성공적이었는지, 문제가 있었는지를 나타냄 (Ex. 200, 404).
    Response Data: 클라이언트에게 전달되는 데이터
    Response Headers: 응답의 메타데이터

 

서버 모듈

  • HTTP 모듈: Node.js의 기본 모듈로, HTTP 서버 및 클라이언트 기능을 제공
    해당 모듈을 사용하여 HTTP 서버를 구축할 수 있으나, 보다 복잡한 기능을 위해 Express.js와 같은 프레임워크를 선호
  • Express.js: HTTP 모듈을 확장하여 보다 풍부한 기능과 간결한 코드 구조를 제공하는 인기 있는 웹 프레임워크
    Express.js는 HTTP 모듈의 기능을 포함하며, 추가적인 미들웨어, 라우팅, 템플릿 엔진 등을 제공

 

Express.js의 통신 흐름

  1. 클라이언트 요청: 클라이언트는 특정 URL과 데이터를 포함한 요청을 서버로 보냄
  2. 서버 처리: 서버는 요청을 받고 필요한 비즈니스 로직을 수행
  3. 서버 응답: 처리된 결과를 클라이언트에게 응답으로 보냄

 

API 구현 과정

  • 라우터 설정: Express.js의 라우터를 사용하여 특정 HTTP 메소드와 URL에 따라 요청을 처리할 함수를 정의
  • 데이터 처리: 서버는 요청에 포함된 데이터를 처리하고, 필요한 경우 데이터베이스와 상호작용
  • 응답 반환: 처리된 결과를 클라이언트에게 JSON 형식 등으로 반환

 

Express.js의 req 객체

  1. req.app: 현재 실행중인 Express 애플리케이션의 인스턴스를 참조
  2. req.baseUrl: 라우터 인스턴스에서의 마운트 경로를 반환
  3. req.body: 클라이언트로부터 받은 본문 데이터
    express.json() 미들웨어를 사용하여 파싱
  4. req.cookies: 쿠키 데이터를 담고 있음
    cookie-parser 미들웨어 필요
  5. req.hostname: 요청의 호스트 이름을 반환
  6. req.ip: 요청을 보낸 클라이언트의 IP 주소를 반환
  7. req.method: HTTP 요청 메서드 (예: GET, POST)를 반환
  8. req.originalUrl: 요청의 원본 URL을 반환
  9. req.params: 라우트 경로의 매개변수를 담은 객체
    Ex. router.get('/user/:id', ...)에서 :id의 값을 담고 있음
  10. req.path: 요청 URL의 경로 부분을 반환
  11. req.protocol: 요청의 프로토콜을 반환
    Ex. http, https
  12. req.query: URL의 쿼리 스트링 매개변수를 객체 형태로 담고 있음
    Ex. /search?q=taco에서 req.query.q는 'taco'
  13. req.route: 현재 라우트에 대한 정보를 담고 있음
  14. req.secure: HTTPS를 통해 요청이 이루어졌는지 여부를 반환
  15. req.signedCookies: 서명된 쿠키의 내용을 담고 있음
    cookie-parser 미들웨어 필요
  16. req.xhr: 요청이 Ajax 요청인지 여부를 Boolean 값으로 반환

 

Express.js의 res 객체

  1. res.app: 현재 실행 중인 Express 애플리케이션의 인스턴스를 참조
  2. res.append(field, [value]): HTTP 응답의 헤더 필드를 지정된 값으로 설정
  3. res.cookie(name, value, [options]): 쿠키를 설정
    옵션으로 maxAge, path 등을 설정할 수 있음
  4. res.clearCookie(name, [options]): 지정된 이름의 쿠키를 제거
  5. res.download(path, [filename], [callback]): 파일을 다운로드할 수 있게 함
  6. res.end([data], [encoding]): 응답 프로세스를 종료
  7. res.format(object): 요청의 Accept HTTP 헤더에 따라 다른 컨텐츠를 보낼 수 있음
  8. res.get(field): 지정된 헤더 필드의 값을 반환
  9. res.json([body]): JSON 형식의 응답을 보냄
  10. res.jsonp([body]): JSONP 지원을 통해 응답을 보냄
  11. res.redirect([status,] path): 지정된 경로나 URL로 리다이렉트
  12. res.render(view, [locals], callback): 템플릿 엔진을 사용하여 뷰를 렌더링
  13. res.send([body]): 다양한 유형의 응답 본문을 보냄
  14. res.sendFile(path, [options], [callback]): 파일을 응답으로 전송
  15. res.sendStatus(statusCode): 상태 코드와 함께 응답을 보냄
  16. res.set(field, [value]): 응답의 HTTP 헤더를 설정
  17. res.status(code): 응답의 상태 코드를 설정
  18. res.type(type): Content-Type 헤더를 설정

 

예제 코드

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();

// JSON 및 URL 인코딩된 본문 데이터와 쿠키를 파싱하기 위한 미들웨어 설정
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());

// 예제 라우트: GET /user/:id
// 객체의 다양한 속성을 로깅하고, res.json을 사용하여 JSON 응답을 보냄
app.get('/user/:id', (req, res) => {
    // req 객체 사용 예제
    console.log('Express 앱 인스턴스:', req.app);
    console.log('Base URL:', req.baseUrl);
    console.log('받은 쿠키:', req.cookies);
    console.log('요청 호스트명:', req.hostname);
    console.log('클라이언트 IP:', req.ip);
    console.log('HTTP 메서드:', req.method);
    console.log('원본 URL:', req.originalUrl);
    console.log('라우트 매개변수:', req.params); // { id: '...' }
    console.log('요청 경로:', req.path);
    console.log('요청 프로토콜:', req.protocol);
    console.log('쿼리 스트링 매개변수:', req.query); // ?query=value
    console.log('라우트 정보:', req.route);
    console.log('HTTPS 연결 여부:', req.secure);
    console.log('서명된 쿠키:', req.signedCookies);
    console.log('Ajax 요청 여부:', req.xhr);

    // res 객체 사용 예제
    res.status(200).json({ id: req.params.id, query: req.query });
});

// 예제 라우트: POST /submit
// POST 요청의 본문을 받고, 그 내용을 JSON 형식으로 응답
app.post('/submit', (req, res) => {
    // POST 요청의 본문 데이터
    console.log('POST 본문:', req.body);

    // JSON 응답 보내기
    res.json({ received: true, data: req.body });
});

// 예제 라우트: GET /download
// 지정된 파일을 다운로드
app.get('/download', (req, res) => {
    // 파일 다운로드
    const file = 'path/to/file.txt'; // 실제 파일 경로로 변경
    res.download(file, 'your-file-name.txt');
});

// 예제 라우트: GET /cookie
// 쿠키를 설정
app.get('/cookie', (req, res) => {
    // 쿠키 설정
    res.cookie('example', 'value', { maxAge: 900000, httpOnly: true });
    res.send('Cookie is set');
});

// 예제 라우트: GET /clear-cookie
// 설정된 쿠키를 제거
app.get('/clear-cookie', (req, res) => {
    // 쿠키 제거
    res.clearCookie('example');
    res.send('Cookie cleared');
});

// 서버 시작
const PORT = 3000;
app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

 

반응형
profile

제로부터 쌓는 개발일지

@PachyuChepe

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...