---
# System prepended metadata

title: 'HTTP-비모, 경민'

---

## API 호출해보기

- 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다.
Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용)
> Request URL: http://kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.json?key=f5eef3421c602c6cb7ea224104795888&directorNm=봉준호

- API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다
```json
{
    "movieListResult": {
        "totCnt": 15,
        "source": "영화진흥위원회",
        "movieList": [
            {
                "movieCd": "20038957",
                "movieNm": "싱크 & 라이즈",
                "movieNmEn": "Sink & Rise",
                "prdtYear": "2003",
                "openDt": "",
                "typeNm": "단편",
                "prdtStatNm": "기타",
                "nationAlt": "한국",
                "genreAlt": "드라마",
                "repNationNm": "한국",
                "repGenreNm": "드라마",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": []
            },
            {
                "movieCd": "20126732",
                "movieNm": "프레임 속의 기억들",
                "movieNmEn": "The Memories In My frame",
                "prdtYear": "1994",
                "openDt": "",
                "typeNm": "단편",
                "prdtStatNm": "기타",
                "nationAlt": "한국",
                "genreAlt": "드라마",
                "repNationNm": "한국",
                "repGenreNm": "드라마",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100572",
                        "companyNm": "한국영화아카데미"
                    }
                ]
            },
            {
                "movieCd": "20100457",
                "movieNm": "지리멸렬",
                "movieNmEn": "Incoherence",
                "prdtYear": "1994",
                "openDt": "",
                "typeNm": "단편",
                "prdtStatNm": "기타",
                "nationAlt": "한국",
                "genreAlt": "코미디",
                "repNationNm": "한국",
                "repGenreNm": "코미디",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100572",
                        "companyNm": "한국영화아카데미"
                    }
                ]
            },
            {
                "movieCd": "20030046",
                "movieNm": "살인의 추억",
                "movieNmEn": "Memories of Murder",
                "prdtYear": "2003",
                "openDt": "20030425",
                "typeNm": "장편",
                "prdtStatNm": "개봉",
                "nationAlt": "한국",
                "genreAlt": "스릴러",
                "repNationNm": "한국",
                "repGenreNm": "스릴러",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100123",
                        "companyNm": "(주)싸이더스"
                    }
                ]
            },
            {
                "movieCd": "20126674",
                "movieNm": "설국열차",
                "movieNmEn": "Snowpiercer",
                "prdtYear": "2013",
                "openDt": "20130801",
                "typeNm": "장편",
                "prdtStatNm": "개봉",
                "nationAlt": "한국,체코",
                "genreAlt": "SF,액션",
                "repNationNm": "한국",
                "repGenreNm": "SF",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100357",
                        "companyNm": "모호필름"
                    },
                    {
                        "companyCd": "20100410",
                        "companyNm": "오퍼스픽쳐스(유)"
                    }
                ]
            },
            {
                "movieCd": "20072091",
                "movieNm": "인플루엔자",
                "movieNmEn": "Influenza",
                "prdtYear": "2004",
                "openDt": "",
                "typeNm": "단편",
                "prdtStatNm": "기타",
                "nationAlt": "한국",
                "genreAlt": "드라마",
                "repNationNm": "한국",
                "repGenreNm": "드라마",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": []
            },
            {
                "movieCd": "20149067",
                "movieNm": "백색인",
                "movieNmEn": "White Collar",
                "prdtYear": "1994",
                "openDt": "",
                "typeNm": "단편",
                "prdtStatNm": "기타",
                "nationAlt": "한국",
                "genreAlt": "기타",
                "repNationNm": "한국",
                "repGenreNm": "기타",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": []
            },
            {
                "movieCd": "20183782",
                "movieNm": "기생충",
                "movieNmEn": "PARASITE",
                "prdtYear": "2019",
                "openDt": "20190530",
                "typeNm": "장편",
                "prdtStatNm": "개봉",
                "nationAlt": "한국",
                "genreAlt": "드라마",
                "repNationNm": "한국",
                "repGenreNm": "드라마",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100558",
                        "companyNm": "(주)바른손이앤에이"
                    }
                ]
            },
            {
                "movieCd": "20090248",
                "movieNm": "마더",
                "movieNmEn": "Mother",
                "prdtYear": "2009",
                "openDt": "20090528",
                "typeNm": "장편",
                "prdtStatNm": "개봉",
                "nationAlt": "한국",
                "genreAlt": "드라마",
                "repNationNm": "한국",
                "repGenreNm": "드라마",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100558",
                        "companyNm": "(주)바른손이앤에이"
                    }
                ]
            },
            {
                "movieCd": "20060151",
                "movieNm": "괴물",
                "movieNmEn": "The Host",
                "prdtYear": "2006",
                "openDt": "20060727",
                "typeNm": "장편",
                "prdtStatNm": "개봉",
                "nationAlt": "한국",
                "genreAlt": "SF,가족,드라마",
                "repNationNm": "한국",
                "repGenreNm": "SF",
                "directors": [
                    {
                        "peopleNm": "봉준호"
                    }
                ],
                "companys": [
                    {
                        "companyCd": "20100202",
                        "companyNm": "영화사청어람(주)"
                    }
                ]
            }
        ]
    }
}
```
- Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요?
![https://s3.ap-northeast-2.amazonaws.com/media.yagom-academy.kr/resources/usr/63e1b2d9324ce85b6f356d01/20230717/64b4dd16324ce85b6f35dcc7.png](https://s3.ap-northeast-2.amazonaws.com/media.yagom-academy.kr/resources/usr/63e1b2d9324ce85b6f356d01/20230717/64b4dd16324ce85b6f35dcc7.png)

- URL에서 매개변수는 어떻게 표현하나요?
    > {요청URL}?{key}={value}
    
    - `요청 URL` 뒤에 `?`로 매개변수 호출 시작
    - `&`로 매개변수 구분
    - `value`가 배열을 받을 수 있는 경우 `,`로 구분

## Request - HTTP 요청의 핵심요소에 대해서 알아봅시다.

### method

- `GET` 은 언제 어떻게 사용하나요?
  : `GET` 메서드는 특정 리소스의 표시를 요청합니다. `GET`을 사용하는 요청은 **오직 데이터를 받기만** 합니다.
- `POST` 는 언제 어떻게 사용하나요?
  : `POST` 메서드는 **특정 리소스에 엔티티**를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
- `PUT` 은 언제 어떻게 사용하나요?
  : `PUT` 메서드는 목적 리소스 모든 현재 표시를 요청 `payload`로 바꿉니다.
- `PATCH` 는 언제 어떻게 사용하나요?
  : `PATCH` 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
- `DELETE` 는 언제 어떻게 사용하나요?
  : `DELETE` 메서드는 특정 리소스를 삭제합니다.

#### 🔗 참고링크
- [MDN - HTTP Methods](https://developer.mozilla.org/ko/docs/Web/HTTP/Mehods)

위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.

- request-query
  : `Request-Query`는 `HTTP` 요청에서 `URL`에 포함되는 매개변수(`parameters`)를 의미합니다. `URL` 끝에 ?를 붙이고 `key=value` 형태로 매개변수를 추가하여 서버에 특정 데이터를 요청할 수 있습니다. 여러 개의 매개변수를 전달할 때는 `&`를 사용하여 구분합니다.
  ```bash
  GET https://api.example.com/users?id=123&name=John
  ```
- request-body(payload)
  : `Request-Body`는 `HTTP` 요청에서 본문에 담겨져서 서버로 전송되는 데이터를 말합니다. 주로 `POST`, `PUT`, `PATCH`와 같은 메서드에서 사용되며, 클라이언트가 서버로 데이터를 전송할 때 이용됩니다.
  ```json
  {
      "name": "Alice",
      "email": "alice@example.com",
      "age": 30
  }
  ```
- header
  : `HTTP` 요청과 응답에서 부가적인 정보를 담고 있는 메타데이터의 컬렉션입니다. `Header`는 이름-값의 쌍으로 이루어져 있으며, 요청 또는 응답에 대한 여러 가지 정보를 제공합니다. `Content-Type`은 `Header`의 하나로, 특히 요청 또는 응답의 본문(Content)의 타입을 명시합니다.
    - Content-Type 은 무엇인가요?
      : Content-Type은 HTTP 요청이나 응답에서 본문 데이터의 타입을 나타냅니다. 주로 POST나 PUT 등의 요청에서 Request-Body의 데이터 타입을 명시하는 데 사용됩니다.
    - 파일을 전송할때 주로 사용하는 Content-Type 은 무엇인가요?
      : 파일을 전송할 때 주로 사용하는 Content-Type은 `multipart/form-data`입니다. 이 Content-Type은 폼 데이터를 서버로 전송할 때, 그 중에 파일이 포함되어 있을 때 사용됩니다. 파일과 텍스트 데이터를 함께 전송할 때 유용합니다.

## Response - HTTP 응답의 핵심요소에 대해서 알아봅시다.

### HTTP Status

- `200`, `201`, `202`, `204` 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    : > Successful responses (200 – 299)
    
    `200 OK`
        The request succeeded. The result meaning of "success" depends on the HTTP method:

    - GET: The resource has been fetched and transmitted in the message body.
    - HEAD: The representation headers are included in the response without any message body.
    - PUT or POST: The resource describing the result of the action is transmitted in the message body.
    - TRACE: The message body contains the request message as received by the server.

    `201 Created`
        요청이 성공적으로 처리되었고, 새로운 리소스가 생성되었습니다. 이는 일반적으로 POST 요청 또는 일부 PUT 요청 후에 보내지는 응답입니다.
        
    `202 Accepted`
        이 요청은 수신되었지만 아직 처리되지 않았습니다. HTTP에서는 나중에 요청의 결과를 나타내는 비동기 응답을 보내는 방법이 없기 때문에, 이 응답은 확정적이지 않습니다. 이는 다른 프로세스나 서버가 요청을 처리하는 경우나 일괄 처리(batch processing)를 위해 사용됩니다.
        
    `204 No Content`
        이 요청에는 전송할 내용이 없지만, 헤더는 유용할 수 있습니다. 사용자 에이전트(user agent)는 캐시된 헤더를 새로운 헤더로 업데이트할 수 있습니다.

- `400`, `401`, `403`, `404`, `406` 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    : > Client error responses (400 – 499)
    
    `400 Bad Request`
        서버가 클라이언트의 요청을 처리할 수 없거나 처리하지 않을 것이며, 클라이언트의 오류로 인식되는 상황(예: 잘못된 요청 구문, 잘못된 요청 메시지 구성 또는 잘못된 요청 라우팅 등)으로 인해 발생합니다.
        
    `401 Unauthorized`
        HTTP 표준은 "unauthorized"를 지정하지만 의미적으로 이 응답은 "unauthenticated"를 의미합니다. 즉, 클라이언트는 원하는 응답을 얻기 위해 스스로를 인증해야 합니다.
        
    `403 Forbidden`
        클라이언트는 내용에 대한 접근 권한이 없습니다. 즉, 인증되지 않았기 때문에 서버는 요청된 리소스를 제공하지 않습니다. 401 Unauthorized와 달리, 서버는 클라이언트의 신원을 알고 있는 상태입니다.
        
    `404 Not Found`
        서버가 요청한 리소스를 찾을 수 없습니다. 브라우저에서는 이는 URL이 인식되지 않는 것을 의미합니다. API에서도 이는 엔드포인트(경로)는 유효하지만 해당 리소스 자체가 존재하지 않는 것을 의미할 수 있습니다. 서버는 또한 인가되지 않은 클라이언트에게 리소스의 존재를 숨기기 위해 403 Forbidden 대신 이 응답을 보낼 수도 있습니다. 이 응답 코드는 웹에서 자주 발생하기 때문에 가장 잘 알려진 코드 중 하나입니다.


- `500`, `502`, `504`상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    : > Server error responses (500 – 599)
    
    `500 Internal Server Error`
        서버가 처리 방법을 모르는 상황을 마주했습니다.
        
    `502 Bad Gateway`
        이 오류 응답은 서버가 요청을 처리하기 위해 필요한 응답을 얻기 위해 게이트웨이 역할을 하는 도중 잘못된 응답을 받은 것을 의미합니다.
        
    `504 Gateway Timeout`
        이 오류 응답은 서버가 게이트웨이 역할을 하고 있으며, 응답을 시간 내에 받을 수 없을 때 발생합니다.

#### 🔗 참고링크
- [MDN - Http Status](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)

위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.

- 가장 기본적인 성공 요청 응답의 status 코드는 무엇일까요?
    : `200 OK`
- 인증 또는 권한등의 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
    : `401 Unauthorized`
- 잘못된 접근, 존재하지 않는 경로에 대한 접근에 주로사용되는 status 코드는 무엇일까요?
    : `404 Not Found`
- 서버측 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
    : `500 Internal Server Error`, `502 Bad Gateway` 
- status 를 통해서 얻을수 있는 이점은 무엇일까요?
    : 클라이언트 개발자가 status 코드를 통해 적절한 사용자 화면을 노출시킬 수 있다.

## URL / URI
### URL
- URL(Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다.
- HTTP 맥락에서 URL은 "웹 주소" 또는 "링크"라고 불립니다. 브라우저는 https://developer.mozilla.org 등 URL을 주소창에 표시합니다. 일부 브라우저는 URL에서 "//" 뒤의 일부분, 즉 도메인 이름만 표시합니다.
- URL은 파일 전송(FTP), 이메일(SMTP) 등 다른 응용 프로그램에서도 사용할 수 있습니다.

### URI
- URI(Uniform Resource Identifier)는 하나의 리소스를 가리키는 문자열입니다. 가장 흔한 URI는 URL로, 웹 상에서의 위치로 리소스를 식별합니다. 반면, URN (en-US)은 주어진 이름공간 안의 이름으로 리소스를 식별합니다. 도서의 ISBN을 예시로 사용할 수 있습니다.

#### 🔗 참고링크
- [MDN - URI](https://developer.mozilla.org/ko/docs/Glossary/URI)
- [MDN - URL](https://developer.mozilla.org/ko/docs/Glossary/URL)
- [블로그](https://www.elancer.co.kr/blog/view?seq=74)