HTTP 메서드에 대해 설명해주세요.

면접용

HTTP 메서드는 클라이언트와 서버 간의 통신에서 요청의 목적을 정의합니다. 주요 메서드로는 GET, POST, PUT, PATCH 등이 있습니다. GET은 데이터를 조회하는 데 사용되며 멱등성을 가지며 안전한 요청으로 간주됩니다. POST는 데이터를 생성하거나 서버에 전송할 때 사용되며, 요청 데이터가 본문에 포함되고 멱등성을 보장하지 않습니다. PUT은 리소스를 생성하거나 기존 리소스를 대체하며, 멱등성을 가지지만 안전하지 않습니다. PATCH는 리소스의 일부를 수정하는 데 사용되며, PUT과 달리 전체가 아닌 부분 업데이트에 적합합니다. 이외에도 HEAD(헤더 정보만 요청), OPTIONS(서버가 지원하는 메서드 확인), CONNECT(터널 생성), TRACE(메시지 루프백 테스트) 같은 메서드가 있습니다. HTTP 메서드는 멱등성(Idempotence)과 안전성(Safety) 개념을 통해 요청의 특성을 명확히 정의하며, RESTful API 설계에서 중요한 역할을 합니다.


개념설명

1.HTTP Method의 기본 개념

HTTP Method란?

- 웹에서 클라이언트[서버에 의뢰를 하는 웹 브라우저]와 서버[요청을 보내는 곳] 간의 통신 방식을 정의하는 방법 - 서버가 수행해야 할 동작을 지정하여 요청을 보내는 방법입니다.

이를 왜 사용할까요?

리소스와 동작을 분리하여 데이터 관리,처리를 효율적으로 하기위해서입니다.

  • 리소스: 웹 애플리케이션에서 관리되는 데이터나 객체를 의미합니다. (예: 사용자 정보, 제품 정보)

  • 동작: 리소스에 대해 수행되는 작업을 의미합니다. (조회, 생성, 업데이트, 삭제 등)

2.각 HTTP Method의 특성

  • 조회 GET: 리소스를 가져오기 위한 요청입니다.

    • 사용 예시: 데이터 조회합니다.

    • 특징: 데이터 변경이 없습니다.

    [예시] 특정 사용자 정보를 가져오는 요청

    Client --------------------> Server GET /api/user/123 <-------------------- 200 OK //요청 성공 { "id": 123, "name": "jisu", "email": "jisu@naver.com" }

    • 클라이언트는 /api/user/123 엔드포인트로 GET 요청을 보냅니다.

    • 서버는 데이터베이스에서 해당 사용자 정보를 조회합니다.

    • 조회된 사용자 정보를 JSON 형식으로 응답합니다.

    • 응답의 상태 코드는 200 OK

    • GET 요청은 데이터를 조회하기 위한 요청으로, 본문(Body)과 Content-Type 헤더를 포함하지 않는 것이 표준입니다.

    • 필요한 데이터는 URL의 쿼리 파라미터로 전달합니다.

const express = require('express');
const app = express();// Express 애플리케이션

app.get('/api/user/:id', (req, res) => {
    const userId = req.params.id;
    // 데이터베이스에서 사용자 조회 (여기서는 하드코딩된 예시 사용)
    const user = {
        id: userId,
        name: "John Doe",
        email: "john@example.com"
    };
    res.status(200).json(user);
});

//서버시작
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
  • 등록 POST: 리소스를 생성하기 위한 요청입니다.

    • 사용 예시: 사용자 등록, 새로운 데이터 추가합니다.

    • 특징: 데이터 변경 있으며 보통 안전하지 않습니다.

[예시] 새로운 사용자 계정을 생성

Client --------------------> Server POST /api/user { "name": "jisu", "email": "jisu@naver.com", "password": "securepassword" } <-------------------- 201 Created//리소스 생성 성공 { "id": 124, "name": "jesu", "email": "jisu@naver.com" }

  • POST 요청은 클라이언트가 서버에 새로운 리소스를 생성할 때 사용합니다.

  • /api/user 엔드포인트로 POST 요청을 보냄,생성할 사용자 정보가 포함됩니다.

  • 서버는 이 요청을 받아서, 데이터베이스에 새로운 사용자 정보를 저장됩니다.

  • 저장이 완료되면, 서버는 새로 생성된 사용자의 정보를 JSON 형식으로 응답합니다.

  • 데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성합니다.

  • 응답의 상태 코드는 201 Created ⇒ 새로운 리소스가 성공적으로 생성되었음을 의미합니다.

  • 수정 PUT: 리소스를 업데이트하기 위한 요청입니다.

    • 사용 예시: 기존 데이터 수정합니다.

    • 특징: 전체 업데이트하며 같은 요청 반복 시 결과가 동일합니다.

    [예시]기존 사용자의 정보를 업데이트

    Client --------------------> Server PUT /api/user/123 { "name": "jisu", "email": "jisu@naver.com" } <-------------------- 200 OK//요청 성공 { "id": 123, "name": "jisu", "email": "jisu@naver.com" }

    • PUT 요청은 클라이언트가 서버에 기존 리소스를 업데이트할 때 사용합니다.

    • URL을 통해서 어떠한 데이터를 수정할지 파라미터를 받습니다.

    • 클라이언트는 /api/user/123 엔드포인트로 PUT 요청을 보냄, 업데이트할 사용자 정보가 포함됩니다.

    • 서버는 이 요청을 받아서, 데이터베이스에서 해당 사용자 정보를 업데이트합니다.

    • "업데이트가 완료되면, 서버는 업데이트된 사용자 정보를 JSON 형식으로 응답, 응답의 상태 코드는 200 OK, 성공적으로 처리되었음을 의미합니다.

  • 삭제 DELETE: 리소스를 삭제하기 위한 요청입니다.

    • 사용 예시: 데이터 삭제합니다.

    • 특징: 데이터 변경이 발생합니다.

    [예시] 특정 사용자를 삭제

    Client --------------------> Server DELETE /api/user/123 <-------------------- 200 OK { "message": "User deleted successfully" }

    • DELETE 요청은 클라이언트가 서버에 리소스를 삭제할 때 사용합니다.

    • 서버에 해당 ID를 가진 사용자를 삭제하라는 요청을 보냅니다.

    • 서버는 이 요청을 받아서, 데이터베이스에서 해당 사용자 정보를 삭제합니다.

    • 데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있게 됩니다.

    • 삭제가 완료되면, 서버는 삭제 성공 메시지를 JSON 형식으로 응답합니다. 응답의 상태 코드는 200 OK

Last updated