본문 바로가기
파이썬/파이썬 플라스크

ep 7. 간단한 HTTP API 구축해보기

by L_SU 2022. 8. 24.

HTTP란?

HTML과 같은 하이퍼미디어 문서를 전송하기위한 애플리케이션 레이어 프로토콜이다. 웹 브라우저와 웹 서버간의 커뮤니케이션을 위해 디자인 되었지만, 이 외의 목적으로도 사용될 수 있다.

여기서 프로토콜이란 컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러가지 규약을 뜻한다. 

 

그렇다면 이 HTTP 개념은 알겠는데 어떻게 사용하는 걸까? 그것을 한번 알아보자.

바로 요청 메소드를 사용해 동작하게 된다. 이 메소드를 사용해 어떤 응답을 할 지 정해진다.

여러가지 HTTP 요청 메소드

위에 보이는 메소드들이 바로 요청 메소드다 이걸 통해 소통을 한다 생각하면 편한데 간단하게 GET 메소드를 활용해 이해를 돕겠다. 만약 우리가 어떤 url에 접속한다고 하자. ex) naver.com 주소에 접속한다. 그때 개발자 도구 F12을 누른 상태로 확인 해본다면 아래와 같이 정보를 확인할 수 있다.

주소에 접속하게 되면 GET 요청 메소드가 전송되고 그에 대한 응답으로 홈페이지를 보여주게 되는 것이다. 이런 식으로 우리가 어떤 주소에 접속 혹은 페이지에서 동작을 하게 되면 서버에 메소드가 전송되고, 그 메소드에 맞는 응답이 날라오게 되는 것이다.

 

REST란?

효율적, 안정적이며 확장가능한 분산시스템을 가져올 수 있는 소프트웨어 아키텍처 디자인 제약의 모음이다.

그 제약들을 준수하는 시스템을 RESTful 하다 라고 일컬어진다.

 

여기서 아키텍처는 하드웨어와 소프트웨어를 포함한 컴퓨터 시스템 전체의 설계방식을 뜻한다.

 

간단한 API 만들기

지금부터 위에서 설명한 개념을 토대로 API라는 것을 만들어보겠다. 여기서 API란 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공해주는 기능을 제어할 수 있게 만든 인터페이스다.

 

아직 개념에 대해 이해가 될듯 말듯 할 것이다. 아래에서 같이 간단한 API들을 만들면서 이런 것이다. 라는 것을 배워보도록하자.

 

파일을 하나 만들어 아래와 같이 구축에 필요한 것들을 import 해주겠다.

어떤 내용이 import 된 것인지 궁금할 것인데 플라스크를 사용함으로 Flask, json 포맷을 사용할 것임으로 jsonify, 요청에서 수신한 데이터를 받기 위한 request, shop_list는 필자가 파일을 나눠 코드를 편하게 보고 싶어 분리 시킨 것이다.

위와 같이 route를 설정해주고 GET요청이 오면 json 포맷으로 shop_list를 리턴하는 함수를 만들어줬다.

그 외의 코드는 플라스크가 정상 작동할 수 있도록 설정해줬다라고 생각해주면 편할 거 같다.

 

그리고 위와 같이 list.py를 만들어 필자 마음대로 임의의 값들을 넣어줬다. 그리고 서버를 실행시켜 주소로 들어가보면 아래와 같이 나올 것이다.

물론 필자와 똑같이 나오지 않을 것이다. 필자는 다른 프로젝트를 하면서 json 응답을 예쁘게 보기 위해 확장프로그램을 설치해줬다.

필자처럼 설치하지 않으면 한글이 깨지고, 데이터가 예쁘게 보이지 않을 것이다. 하지만 필자처럼 확장 프로그램을 설치하지 않아도 코드에 다음과 같은 두 줄을 추가 시켜주면 위의 문제를 해결할 수 있다.

 

위와 같이 key를 추가해주면 아래에 보이는 것과 같이 데이터를 더 편하게 관리할 수 있다.

이렇게 하나의 api를 구현해봤다. api가 어떤 것인지 느낌이 잡히지 않는가? 요청에 따른 응답을 만들어주는 느낌이다. 이번엔 단순히 보는 것이 아닌 데이터를 입력할 수 있는 api를 만들어보자. 위에 보이는 두 데이터 외의 데이터를 추가해줄 수 있는 api 말이다.

create는 post 요청이기에 다음과 같이 처리해줬다. 코드에 대한 설명을 해주자면 값을 입력해주면 list에 값을 추가해주고, 화면에 프린트 해주는 것이다. 테스트를 위해 포스트 맨으로 POST 요청을 보내봤다.

그리고 터미널을 확인해보면 아래와 같이 입력한 값과 타입이 출력된다.

 

그리고 위와 같이 내가 넣은 값이 화면에 출력 되는데, 필자는 설명했듯 2줄을 추가하지 않고, 확장 프로그램을 설치해 웹에서 깨지지 않았던 것이기에 포스트맨에선 데이터가 깨지는 것을 확인할 수 있다. 위에 말해준 2줄을 제대로 추가했다면 이쁘게 보일 것이다.

또 값이 정상적으로 추가 돼 GET 요청으로 다시 보내보면 필자가 추가한 데이터가 출력되는 것을 확인할 수 있다.

이 추가한 값은 데이터베이스에 저장하는 것이 아니기에 서버를 종료하면 없어지는 것이 당연한 것이니 너무 놀라지 않도록 하자

 

다음으론 shop/이름 으로 접속했을 때 이름에 해당하는 상세 정보를 리턴해주는 API를 구현해보겠다.

코드를 빠르게 살펴보면 먼저 shop_name 이라는 파라미터를 받아 shop_list를 for문으로 모두 검사해  파라미터와 일치하는 지 확인하고 일치하면 값을 출력하고 일치하지 않으면 존재하지 않는다고 리턴해주는 코드라고 생각하면 될 거 같다.

위와 같이 정상 작동하는 것을 확인할 수 있다.

 

현재 우리는 name은 만들 수 있지만 items 추가는 구현하지 않았다. 이 부분을 마저 작업해주도록 해주겠다.

위와 같이 POST 요청으로 온 데이터를 name 과 price로 넣어주고, 데이터를 추가해주는 코드이다. 위와 겹치는 부분은 설명 생략하겠다. 이후 포스트맨에서 확인해보면 아래와 같이 item에 값이 입력되는 것을 확인할 수 있다.

 

사이트에서도 확인 해보면 위와 같이 정상적으로 items 값이 들어가는 것을 확인할 수 있다! 이렇게 다양하고 간단한 API 들을 한번 만들어봤다. 모든 실습이 끝난 지금에는 이제 API가 뭔지 알지 않겠는가?