---
# System prepended metadata

title: "HTTP - Zion\U0001F34E, Whales\U0001F42C"
tags: [활동학습, HTTP]

---

### API 호출해보기

- 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다.
- Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용)
    ```swift
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <movieListResult>
        <totCnt>96281</totCnt>
        <movieList>
            <movie>
                <movieCd>20232832</movieCd>
                <movieNm>교전</movieNm>
                <movieNmEn>Ambush</movieNmEn>
                <prdtYear>2023</prdtYear>
                <openDt></openDt>
                <typeNm>장편</typeNm>
                <prdtStatNm>개봉예정</prdtStatNm>
                <nationAlt>미국</nationAlt>
                <genreAlt>전쟁,액션</genreAlt>
                <repNationNm>미국</repNationNm>
                <repGenreNm>전쟁</repGenreNm>
                <directors/>
                <companys/>
            </movie>
    ```
- API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다
    - Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요?
    - URL에서 매개변수는 어떻게 표현하나요?
        - `?key=fb92260b76d9959bbf3ab69c991d8985`

### Request - HTTP 요청의 핵심요소에 대해서 알아봅시다.
`method`
- GET 은 언제 어떻게 사용하나요?
    - When: 정보를 조회할 때
    - How: <img src = "https://hackmd.io/_uploads/BJvEWPG9h.png" width = "100">

- POST 는 언제 어떻게 사용하나요?
    - When: 새로운 Resource를 저장/등록할 때
    - How: <img src = "https://hackmd.io/_uploads/HJFYWPMq2.png" width = "100">

- PUT 은 언제 어떻게 사용하나요?
    - When: Resource를 재등록 및 수정할 때
    - How: <img src = "https://hackmd.io/_uploads/ryx3WwGc3.png" width = "100">

- PATCH 는 언제 어떻게 사용하나요?
    - When: 데이터를 갱신할 때
    - How: <img src = "https://hackmd.io/_uploads/r130WPz52.png" width = "100">

- DELETE 는 언제 어떻게 사용하나요?
    - When: Resource를 삭제할 때
    - How: <img src = "https://hackmd.io/_uploads/HyqWGvM9n.png" width = "100">

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

- request-query
주소 바깥 ? 이후에 변수를 담을 수 있습니다.
ex) `http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.xml?key=fb92260b76d9959bbf3ab69c991d8985`
- request-body(payload)
JSON, XML등의 데이터를 담습니다. 주소에서는 확인할 수 없습니다.

- header
- Content-Type 은 무엇인가요?
보내는 자원의 형식을 명시하기 위해 Header에 실리는 정보입니다.(mime-type)    
- 파일을 전송할때 주로 사용하는 Content-Type 은 무엇인가요?
Content-Type: application/msword <-- doc
Content-Type: application/pdf <-- pdf
Content-Type: application/vnd.ms-excel <-- xls
Content-Type: application/x-javascript <-- js
Content-Type: application/zip <-- zip
Content-Type: image/jpeg <-- jpeg, jpg, jpe
Content-Type: text/css <-- css
Content-Type: text/html <-- html, htm
Content-Type: text/plain <-- txt
Content-Type: text/xml <-- xml
Content-Type: text/xsl <-- xsl

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

`HTTP Status`

- 200, 201 , 202, 204 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    - 200
        - m: OK
        - d: 오류 없이 전송 성공
    - 201
        - m: Created
        - d: 요청이 성공. 리소스가 생성됨
    - 202
        - m: Accepted
        - d: 서버가 클라이언트의 요청을 수락함
    - 204
        - m: Non Content
        - d: 클라이언트의 요구를 처리했으나 전송할 데이터가 없음
- 400 , 401 , 403 , 404 , 406 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    - 400
        - m: Bad Request
        - d: 요청 실패. 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함
    - 401
        - m: Unauthorized
        - d: 권한 없음. 요청된 리소스에 대한 유효한 인증 자격 증명이 없기 때문에 클라이언트 요청이 완료되지 않음
    - 403
        - m: Forbidden
        - d: 금지
    - 404
        - m: Not Found
        - d: 문서를 찾을 수 없음. 서버가 요청한 파일이나 스크립트를 찾지 못함.
    - 406
        - m: Not Acceptable
        - d: 받아들일 수 없음
- 500 , 502 , 504 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
    - 500
        - m: Internal Server Error
        - d: 서버 내부 오류
    - 502
        - m: Bad gateway
        - d: 게이트웨이 상태 나쁨
    - 504
        - m: Gateway timeout
        - d: 프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있음. 초기 서버가 원격 서버로부터 응답을 받을 수 없음. (HTTP 1.1에서 새로 등장)

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

- 가장 기본적인 성공 요청 응답의 status 코드는 무엇일까요?
    - 200
- 인증 또는 권한 등의 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
    - 400
- 잘못된 접근, 존재하지 않는 경로에 대한 접근에 주로사용되는 status 코드는 무엇일까요?
    - 4xx
- 서버측 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
    - 5xx
- status 를 통해서 얻을수 있는 이점은 무엇일까요?
    - 상태 코드만 확인하더라도 클라이언트가 서버로 보낸 요청에 대한 응답이 성공인지 실패인지 또한, 구체적으로 어떤 성공인지 어떤 실패인지를 자세히 알 수 있다.

### URL / URI

URL 과 URI에 대해서 알아봅시다.
- URI(Uniform Resource Indenitfier) - 통합 자원 식별자
인터넷 상의 리소스 "자원 자체"를 식별하는 고유한 문자열 시퀀스입니다.
리소스의 이름만을 나타냄
ex) elancer.co.kr

- URL(Uniform Resource Locator) - 식별자 + 위치
네트워크 상에서 통합 자원의 위치를 나타내기위한 규약입니다.
웹사이트 주소 + 컴퓨터네트워크 상의자원
리소스의 이름 뿐만아니라 접근할 수 있는 위치까지 함께 나타냄(https 프로토콜 포함)
ex) https://elancer.co.kr