WIL Date : 2022년 7월 둘째주
API
사진 출처 - https://antstudy.tistory.com/100
- Application Programming Interface
- 응용프로그램 간에 데이터를 주고받는 방법
API를 예시를 통해 쉽게 이해해보자
-
예를들어 기상청 A와 개발자 B가 있으면 A는 B에게 날씨정보를 주고 싶고 B는 A에게 날씨 정보를 받고 싶다고 하자
-
그렇지만 A와 B는 서로 어떻게 주고받는지 아직 양식을 정해두지 않은 상황이다.
-
그래서 A가 먼저 날씨정보를 받고 싶으면 "기상청.com/api/weather" 를 입력하라고 한다.
-
그러면 B는 A가 얘기한 양식에 따라 요청을 진행
-
여기서 얘기한 A가 "날씨정보를 받고 싶으면 기상청.com/api/weather 라고 요청하세요" 가 바로 API이다.
- 그래서 어플리케이션 프로그래밍 양식 이라고 한다.
API의 파라미터
-
그렇다면 방금 예시처럼 기상청.com/api/weather 라고 요청하는 정보만 있으면 날씨정보를 받을 수 있을까?
-
받을 수 있다고 생각하는 사람이 있다면 기상청.com/api/weather 만을 이용하여 4월 5일 대구 날씨와 5월 17일 서울 날씨를 요청해보자
- 즉, 더 세세한 정보를 기상청에게 보내줘야 기상청이 그에 맞는 정보를 줄 수 있을 것이다.
- 그렇지 않으면 기상청이 가지고 있는 모든 날씨 정보를 api를 요청할 때마다 보내줘야하는데 그러면 서로가 불편해질 수밖에 없다.
-
따라서 기상청 A는 다음과 같은 파라미터를 같이 보내달라고 한다.
region : "대구",
time : 2022-07-17
-
그렇다면 개발자 B는 파라미터를 어떻게 보내줄까?
- JSON Data 양식을 저 파라미터와 똑같이 만들어서 보내준다.
-
개발의 입장에서는 Json(딕셔너리 형태) 데이터를 보내주는 것이지만 실제 URL은 다음과 같이 요청이 된다.
- 기상청.com/api/weather?region=대구&time=2022-07-17
-
이렇게 URL 뒤에 ?변수=값&변수=값....
을 쿼리스트링
이라고 한다.
API 취약점
- 이제 기상청 A도 개발자 B도 API를 통해 서로 주고받고 할 수 있는 구조가 완성되었다.
- 그러나 현재 이렇게 만들어진 API는 누구나 사용 가능하기 때문에 해커 C도 API를 사용할 수 있다.
- 해커 C는 기상청 A로 api 요청을 수백만번, 수천만번 이상을 보낸다.
- 이렇게 되면 DDOS 공격과 유사한 공격을 기상청 A가 받게 되는 꼴이 된다.
API 취약점의 해결
- 그래서 기상청 A는 추가적으로 Secret Key를 발급받은 사람만 api를 사용할 수 있게 한다.
- 이러한 Secret Key는 특정 api는 로그인 후 요청 허가를 받아야 쓸 수 있다.
- 그러면 일반적인 api는 로그인 후 허가 요청을 보내면 자동으로 허가가 진행된다.
- 그러나 해커 C도 Secret Key는 발급받을 수 있으므로 한 대의 컴퓨터로 계속해서 api 요청을 보낼 수 있다.
- 따라서, 이러한 문제를 해결하기 위해 Key당 하루 요청 제한 횟수를 걸어버린다.
정리
- 정리하자면 API의 기본적인 구조는 다음과 같다.
- 그러나 추가적으로 보안이 필요한 경우에는 다음과 같은 구조를 가지게 된다.
- api URL 주소
- 파라미터
- 시크릿 키
- 일일 횟수제한 (이건 사실 서버에서 판단)
API의 방식
- 이러한 API에도 여러가지 방식이 존재하는데 이런 방식을 정리하면 너무 길어질 수 있으니 다음에 따로 포스팅 하는걸로