네트워크 (2)

 

 

 

❑ REST API

 

➤REST API 란?

 

REST는 Representational State Transfer의 약자

로이 필딩의 박사학위 논문에서 웹(http)의 장점을 최대한 활용할 수 있는 아키텍처로 처음 소개됨

데이터나 리소스를 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

API는 쉽게 말해서 app끼리 소통하게 해주는 것이다.

 

➤ 좋은 REST API를 디자인하는 방법

 

REST API를 작성할 때는 몇 가지 지켜야 할 규칙들이 있음

REST 방법론을 보다 더 실용적으로 적용하기 위해 레오나르드 리차드슨(Richardson)이 REST API를 잘 적용하기 위한 4단계 모델(0~3단계)를 만들었다.

로이필딩은 이 모델의 모든 단계를 충족해야 REST API라고 부를 수 있다고 주장했지만

실제로 3단계까지 지키기 어렵기 때문에 2단계 까지만 지켜도 좋은 API 디자인이라고 볼 수 있음

2단계 까지 지킨 경우에 HTTP API라고도 부른다.

 

 

➤ Richardson의 REST 성숙도 모델 구조화

 

REST API 성숙도 모델

 

▶️ REST 성숙도 모델 - 0단계 : HTTP 사용

 

0단계에서는 단순히 HTTP protocol을 사용하기만 해도 된다.

이 단계만 작성한 경우 REST API라고 할 수는 없다.

0단계는 좋은 REST API를 작성하기 위한 기본 단계이다.

 

 

▶️ REST 성숙도 모델 - 1단계 : 개별 리소스와의 통신을 준수

 

REST API는 웹에서 사용되는 모든 데이터나 자원을 HTTP URI로 표현한다.

그래서 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 하고

받은 자원에 대한 정보를 응답으로 전달해야 한다.

위의 0단계는 모든 요청에 endpoint를 모두 같게 할 수도 있지만

1단계에서는 요청하는 리소스가 무엇인지에 따라 각각 다른 엔드포인트로 구분해서 사용해야 한다.

 

※ 엔드포인트 작성 요령

  • 동사, HTTP 메서드, 어떤 행위에 대한 단어 사용은 지양
  • 리소스에 집중해 명사 형태의 단어 사용

 

요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 성공/실패 여부를 반환해야함

 

 

▶️ REST 성숙도 모델 - 2단계

 

CRUD에 맞게 적절한 HTTP 메서드 사용을 중점에 둠

GET : 서버의 데이터를 변환시키지 않는 요청에 사용

POST : 요청마다 새로운 리소스를 생성

PUT : 요청마다 리소스를 반환, 매 요청마다 같은 리소스를 반환하는 특징을 멱등성(idempotent)이라고 함

PUT : 교체 PATCH는 수정 용도로 사용

 

※ 더 자세한 내용

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

 

2단계 까지 적용하면 잘 작성된 API라고 여긴다.

REST 3단계까지 따라야 REST API라고 부를 수 있다고 로이 필딩은 주장하지만

3단계까지 적용하는 경우는 극히 드물다.

따라서 반드시 3단계까지 적용해야 하는 것은 아니다.

 

 

▶️ REST 성숙도 모델 - 3단계

 

HATEOAS(Hypertext As The Engine Of Application State)

하이퍼미디어 컨트롤 적용

요청은 2단계와 동일

응답에서 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다는 점이 다르다.

응답에 새로운 링크를 넣어 기능에 접근할 수 있도록 함

 

 

※ 그 외 API 작성 디자인(추후 공부)

 

  • 5 Basic REST API Design Guidelines
  • 호주 정부 API 작성 가이드
  • 구글 API 작성 가이드
  • MS의 REST API 가이드 라인

 

 

❑ Open API와 API Key

 

➤ Open API

 

누구에나 열려있는 API

누구에게나 열려있다고 해서 무제한으로 이용할 수 있는 것은 아니다.

어떤 API는 이용 수칙에 따라 제한사항(가격, 정보의 제한)이 있을 수 있다.

정부에서 제공하는 공공데이터 포털에 접속하면 원하는 키워드의 API를 확인할 수 있다.

대표적인 Open API에는 날씨 API가 있다.

 

 

➤ API Key

 

API를 이용하기 위해서는 API Key가 필요하다.

API Key는 서버의 문을 여는 열쇠라고 볼 수 있다.

로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API Key 형태로 제공한다.

데이터를 요청할 때마다 API Key를 같이 전달해야 원하는 응답을 얻을 수 있다.

 

 

 

❑ Postman으로 API 실습하기

 

Postman : https://www.postman.com/

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

 

HTTP API 테스트 도구 (CLI)

  • curl (대부분의 리눅스 환경에 내장)
  • wuzz

HTTP API 테스트 도구 (GUI)

  • Postman
  • Insomnia

 

https://openweathermap.org/

 

Сurrent weather and forecast - OpenWeatherMap

Access current weather data for any location on Earth including over 200,000 cities! The data is frequently updated based on the global and local weather models, satellites, radars and a vast network of weather stations. how to obtain APIs (subscriptions w

openweathermap.org

 

크롬 브라우저 검색창에 입력해서 결과 같은지 확인한다.

JSON 형태의 결과값을 정리해서 보여주는 확장프로그램을 사용했다. (JSON Viewer)

크롬 브라우저 결과

{
    "coord": {
        "lon": 127.4167,
        "lat": 36.3333
    },
    "weather": [
        {
            "id": 802,
            "main": "Clouds",
            "description": "scattered clouds",
            "icon": "03d"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 296.12,
        "feels_like": 295.7,
        "temp_min": 296.12,
        "temp_max": 296.12,
        "pressure": 1010,
        "humidity": 47,
        "sea_level": 1010,
        "grnd_level": 1004
    },
    "visibility": 10000,
    "wind": {
        "speed": 1.15,
        "deg": 274,
        "gust": 0.98
    },
    "clouds": {
        "all": 45
    },
    "dt": 1654665772,
    "sys": {
        "type": 1,
        "id": 8131,
        "country": "KR",
        "sunrise": 1654632758,
        "sunset": 1654685173
    },
    "timezone": 32400,
    "id": 1835224,
    "name": "Daejeon",
    "cod": 200
}

 

Postman weatherAPI 결과

 

 

 

 

 

읽어주셔서 감사합니다. 좋은하루 보내세요😍

오개념에 대한 지적은 언제나 환영입니다.

 

 

 

❑ Client-Server Architecture

 

 

➤ 클라이언트-서버 아키텍쳐(2-Tier Architecture)

 

서버는 말 그대로 제공(serve)하는 주체

리소스를 사용하는 곳이 ‘클라이언트

리소스를 제공하는 곳이 ‘서버

 

client가 데이터 전송하면서 요청  server가 응답

client의 요청 없이 server가 응답오는 경우는 없음

 

 

 

➤ 3-Tier Architecture

 

Client - Server - Database

2-Tier 아키텍처에 데이터베이스 추가된 형태

데이터베이스: 리소스를 저장하는 공간 (창고와 같은 역할)

 

프론트엔드는 사용자의 눈에 보이는 UI를 디자인하여 상호작용 할 수 있는 앱을 개발하는 일을 한다.

백엔드는 눈에 보이지 않는 로그인, 로그아웃, 상품정보를 API 노출하는 등의 사용자 인증을 주로 다루는 개발자이다.

백엔드 개발자가 데이터베이스 등의 시스템 설계까지 도맡아서 하는 경우도 많다.

 

 

 

➤ 클라이언트와 서버의 종류

 

▶️ 클라이언트

 

주로 플랫폼에 의해 구분됨

크롬같은 웹 브라우저가 대표적인 클라이언트임

 

 

▶️ 서버

 

서버는 하는 일에 따라 종류가 다름

파일 서버(파일을 제공)

웹 서버(웹 사이트에서 필요로 하는 정보 제공)

메일 서버(메일을 주고받을 수 있게 해줌)

데이터베이스(데이터 제공)

 

 

 

❑ HTTP

 

➤ Protocol(프로토콜)

 

서버와 클라이언트가 정보를 주고받는 프로토콜이 존재해야 한다.

정해진 프로토콜 -> http

HTTP를 이용해 주고받는 메시지를 HTTP 메시지 라고함

HTTP만의 규칙이 있고 그 규칙을 지켜야지만 한다

 

 

➤ 참고) OSI 7계층

 

OSI 7계층은 네트워크 데이터 통신을 설명할 때 반드시 있어야 하는 중요한 개념입니다.

과거에는 통신용 규약이 표준화 되지 않아서 호환되지 않는 시스템이나 애플리케이션이 많았고 통신이 불가능 했습니다.

이를 하나의 규약으로 통합하려는 노력이 현재의 OSI 7계층에 남아있습니다.

OSI 7계층이 네트워크 동작을 나누어 이해하고 개발하는데 많은 도움이 되므로 네트워크의 주요 레퍼런스 모델로 활용되고 있습니다.

하지만 현재는 대부분의 프로토콜이 TCP/IP 프로토콜 스택 기반으로 되어 있습니다.

-IT엔지니어를 위한 네트워크 입문-

 

➤ OSI 모델과 TCP/IP 모델

OSI 7계층과 TCP/IP 모델 비교

 

 

❑ API(Application Programming Interface)

 

서버에 클라이언트가 어떤식으로 요청을 보내야 하는지 모르기 때문에

카페의 메뉴판 처럼 리소스를 잘 활용할 수 있도록 제공하는 것이다.

Interface : 의사소통이 가능하도록 만들어진 접점

카페에서 메뉴판에 아이스 아메리카노, 카페라떼 등 가능한 요청을 명시해서 고객에게 보여줘야

고객이 엉뚱한 주문(예를 들어 국밥)을 하지 않고 올바른 주문을 넣을 수 있다.

이처럼 서버가 리소스를 받을 메뉴판인 API를 구축해놓아야 클라이언트가 이를 활용해서 요청을 할 수 있는 것이다.

보통 인터넷에서는 HTTP라는 프로토콜을 사용하고 주소(URL, URI)를 통해 접근 가능 하다.

 

 

➤ HTTP 작성하기

 

CRUD

Create Read Update Delete : 컴퓨터 소프트웨어에서 기본적으로 데이터를 처리하는 기능

 

▶️ HTTP 대표적 메소드

  • GET : 조회 (Read)
  • POST : 추가 (Create)
  • PUT(PATCH) : 갱신 (Upload)
  • DELETE : 삭제 (Delete)

 

 

 

❑ URL과 URI

 

 

➤ URL

 

브라우저의 주소창에 입력한 URL은 서버가 제공하는 환경에 존재하는 파일의 위치를 나타냄

Uniform Resource Locator의 줄임말

네트워크 상의 웹페이지, 동영상, 이미지 등의 파일이 위치한 정보를 나타냄

 

scheme, hosts, url-path로 구분

scheme: 통신방식(프로토콜) ex) http://  file://

hosts : 웹 서버의 이름이나 도메인, IP 주소

url-path : 해당 웹 서버의 루트로부터 웹페이지, 이미지, 동영상 등이 위치한 경로와 파일명

 

127.0.0.1 은 로컬 PC를 나타냄

 

 

➤ URI

 

Uniform Resource Identifier의 줄임말

URL의 기본 요소(scheme, hosts, url-path) + query(쿼리), bookmark

query : 웹 서버에 보내는 추가적인 질문

브라우저의 검색창을 클릭하면 나타나는 주소가 URI이다.

URI는 URL을 포함하는 상위 개념이다.

 

 

 

❑ IP와 포트

 

➤ IP

 

네트워크에 연결되어 있는 특정 PC의 주소를 나타내는 체계를 IP address(Internet Protocol address)라고 함

172.31.0.1 -> 총 4부분의 숫자가 3개의 . 으로 나누어진 형태

한부분을 옥텟(Octet)이라고 부름

옥텟은 모두 .으로 구분 되어 있음

인터넷에 연결된 모든 PC는 IP주소 체계에 따라 4부분의 숫자로 구분됨

이런 주소체계를 IPv4라고 함 (version4)

IP주소의 각 부분은 0~255까지 표현 가능-> 1옥텟에 1byte 차지

이 체계를 따르면 32bit(8x4)를 이용해서 2^(32)인 약 43억 개의 IP 주소 표현 가능

 

localhost, 127.0.0.1 : 현재 사용 중인 로컬 PC를 지칭

0.0.0.0, 255.255.255.255 : broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소, 서버에서 접근 가능 IP주소를 broadcast address로 지정하면 모든 기기에서 서버에 접근 가능함

 

 

▶️ IPv4 vs IPv6 비교

 

인터넷 보급률이 낮았던 때에는 IPv4로 네트워크에 연결된 모든 PC에 주소를 할당하는 것이 가능했다.

그러나 개인 PC가 보급되면서 전 세계의 수많은 PC가 인터넷에 연결되면서 각각의 IP가 필요해졌고

IPv4로 할당할 수 있는 PC 수를 넘어버렸다.

이런 문제를 해결하기 위해 IPv6가 생겼다.

IPv62^(128)개의 주소 표현이 가능하다.

 

 

➤ PORT

 

포트는 IP주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미함

이미 사용중인 포트는 중복해서 사용할 수 없다.

IP가 집 주소라면  PORT는 호수라고 보면 된다.

포트 번호는 0~65,535까지 사용 가능하다.

0~1024번 까지는 통신을 위한 규악에 따라 정해져 있는 포트다.

▶️ 반드시 알아야 하는 포트 번호

  • 22 : SSH
  • 80 : HTTP
  • 443 : HTTPS

 

정해진 포트라도 필요에 따라 자유롭게 사용 가능하다.

URI에도 PORT를 명시한다.

잘 알려진 포트는 명시하지 않지만 잘 알려지지 않은 포트는 반드시 포함해야 한다.

 

 

 

❑ 도메인과 DNS

 

➤ Domain name

 

웹 사이트에 진입할 때 IP주소를 대신하여 사용하는 주소

IP = 도로명 주소, 지번 주소

Domain name = 상호, 아파트 이름

IP는 특성상 한눈에 파악하기 힘들고 길지만 도메인 이름은 바로 파악 가능하다.

 

 

➤ DNS

 

모든 PC는 IP주소를 가지고 있지만 모든 로컬 PC가 도메인 이름을 가지는 것은 아니다.

127.0.0.1은 localhost로 사용할 수 있지만 그 외의 모든 도메인 이름은 일정 기간 동안 대여해야 사용 가능하다.

그렇다면 도메인 이름과 해당 IP를 어떻게 연결할까?

네트워크에는 도메인 이름으로 IP를 찾아주는 서버가 따로 존재한다.

DNS(Domain Name System)은 호스트의 도메인 이름을 IP주소로 변환하거나

반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.

만약 주소창에 daum.net 입력하면 요청이 DNS에서 IP주소(211.249.220.24) 찾는다.

 

 

 

읽어주셔서 감사합니다.

오개념에 대한 지적은 언제나 환영입니다 🙂

1