ํค์๋๋ฅผ ๊ฒ์ํ๋ฉด ํค์๋์ ๋ํ ๋ด์ค๋ฅผ ๋์ค๊ฒ ํ๋ ๋ด์ค ๊ฒ์ API๋ฅผ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํ๋ค.

API ๋ง๋ค๊ธฐ ์ ์, ๊ธฐ๋ณธ ์ ํ ํ๊ธฐ
(1). serverless๋ก aws-openapi-server๋ฅผ ๋ง๋ค๊ณ vscode๋ก ์ด์ด์ฃผ์๋ค.
https://codebunny99.tistory.com/105
RestFul API๋ฅผ Serverless Framework๋ก ์ฐ๊ฒฐํ๊ธฐ
*** ์๋์ฝ๋ค ํ๋กฌํํธ์์ ๊ฐ์ํ๊ฒฝ ๋ง๋ค๋ฉด์ flask์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์์ค๋ค *** conda create -n lambda_310 python=3.10pip install flask flask-restful mysql-connector-python psycopg2-binary passlib flask-jwt-exte
codebunny99.tistory.com

(2). ๋์ปค ์ค์ ์ ํด์ค๋ค.
https://codebunny99.tistory.com/108
AWS ์๋ฒ ์ฐ๊ฒฐ ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฉ๋ ์ค์ฌ์ฃผ๋ Docker(๋์ปค) ์ค์นํ๊ธฐ
https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or
codebunny99.tistory.com
(3). ๊นํ๋ธ์ ์ฐ๊ฒฐํด์ค๋ค.
https://codebunny99.tistory.com/106
Serverless๋ก ๋ง๋ ํ๋ก์ ํธ ํด๋๋ฅผ ๊นํ๋ธ(Github)์ ์ฐ๊ฒฐํ๊ธฐ
cmd(๋ช ๋ นํ๋กฌํํธ) serverless ๋ผ๊ณ ์ ๋ ฅํ๋ค serverless ๋ฐฉํฅํค๋ก Flask API๋ก ์ด๋ํ๋ค ๊นํ๋ธ(Github) New repositoryํ๊ธฐ VSCode VSCode Serverless๋ก ์๊น ๋ง๋ ํด๋ ์ด๊ณ , ๊ฐ์ํ๊ฒฝ
codebunny99.tistory.com
(4). ๊นํ๋ธ ์ก์ ์ฆ ์ค์ ์ ํ๋ค.
https://codebunny99.tistory.com/107
Serverless๋ก ๋ง๋ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ ์ก์ ์ฆ(Github actions)๋ก ์๋ํํ๊ธฐ
์ฌ์ฉํ repository๋ฅผ ํด๋ฆญํ๊ณ Settings๋ก ์ด๋ํ๋ค. Settings์์ Security -> secrets and variables -> Actions๋ก ์ด๋ํ๊ณ New repository secret ๋ฒํผ์ ํด๋ฆญํ๋ค. https://codebunny99.tistory.com/104 ์๋ฃ
codebunny99.tistory.com
API ์์ฑํ๊ธฐ
๋จผ์ API์ ๋ํ ์ค๋ช ์ ๋ฐ์์ ์ฝ์ ์ ์๋ค.
https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
๊ฒ์ > ๋ด์ค - Search API
๊ฒ์ > ๋ด์ค ๋ด์ค ๊ฒ์ ๊ฐ์ ๊ฐ์ ๊ฒ์ API์ ๋ด์ค ๊ฒ์ ๊ฐ์ ๊ฒ์ API๋ ๋ค์ด๋ฒ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ค, ๋ฐฑ๊ณผ์ฌ์ , ๋ธ๋ก๊ทธ, ์ผํ, ์น ๋ฌธ์, ์ ๋ฌธ์ ๋ณด, ์ง์iN, ์ฑ , ์นดํ๊ธ ๋ฑ ๋ถ์ผ๋ณ๋ก ๋ณผ ์ ์๋ API์ ๋๋ค
developers.naver.com
vscode ์์ฑํ๊ธฐ

๋จผ์ , vscode ํฐ๋ฏธ๋ cmd ์ฐฝ์์ requests๋ฅผ ์ค์นํ๋ค.
pip install requests
requirements.txt ํ์ผ์ ๋ฃ์ด์ค๋ค.

config.py ํ์ผ์ ์์ฑํ๋ค.

์ด ์์, ๋ค์ด๋ฒ API ํค ๊ฐ์ ๋ฃ์ด์ค๋ค.
๋ค์ด๋ฒ API ํค ๊ฐ์,
https://developers.naver.com/main/
NAVER Developers
๋ค์ด๋ฒ ์คํ API๋ค์ ํ์ฉํด ๊ฐ๋ฐ์๋ค์ด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก API ๊ฐ์ด๋์ SDK๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ๊ณต์ค์ธ ์คํ API์๋ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ, ๊ฒ์, ๋จ์ถURL, ์บก์ฐจ๋ฅผ ๋น๋กฏ ๊ธฐ๊ณ๋ฒ์ญ, ์
developers.naver.com
์ด๊ณณ์์ ํ์๊ฐ์ ํ ํ, Application ์์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด,


์ด๊ณณ์์ ๋ณผ ์ ์๋ค.
app.py๋ฅผ ์์ฑํ๋ค.
import serverless_wsgi
from flask import Flask
from flask_restful import Api
from resources.news import NewSearchResource
app = Flask(__name__)
api = Api(app)
api.add_resource( NewSearchResource , '/news/search')
def handler(event, context) :
return serverless_wsgi.handle_request(app, event, context)
if __name__ == '__main__':
app.run()
resources ํด๋๋ฅผ ๋ง๋ค๊ณ , news.py๋ฅผ ์์ฑํ๋ค.
from flask import request
from flask_restful import Resource
# API ์์ฒญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import requests
# ๋ด๊ฐ ๋ง๋ ๋ณด์ ๊ฐ class
from config import Config
class NewSearchResource(Resource) :
def get(self) :
# params ์ ์ฟผ๋ฆฌ ๊ฐ์ด ์์ผ๋ฉด ๋ฆฌํด
if 'query' not in request.args :
return {"result":"fail", "error":"๊ฒ์์ด๋ ํ์์
๋๋ค."}, 400
# params์ ์๋ ๊ฐ ๋ณ์๋ก ์ ์ฅ (๋์
๋๋ฆฌ์ฌ์ .get() ๋ ๊ฐ๋ฅํ๋ค.)
keyword = request.args.get('query')
# ๋ค์ด๋ฒ API ํธ์ถํ๋ค.
# API ํธ์ถํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ requests
# ํ์ด์ฌ ์ฝ๋๋ก GET, POST, PUT, DELETE API๋ฅผ
# ์ฒ๋ฆฌํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ requests ๋ค.
# openAPI ์์ ์ ๊ณตํ๋ url, params
# params ์์๋ ๋ด๊ฐ ์ค์ ํ ๊ฐ + ์ต์
๋ค
# openAPI ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์์ด๋ ๊ฐ ๊ณผ ์ํฌ๋ฆฟ ๊ฐ ์
๋ ฅ
url = 'https://openapi.naver.com/v1/search/news.json'
params = {'query' : keyword,
'display' : 30,
'sort' : 'date'}
headers = {'X-Naver-Client-Id' : Config.X_NAVER_CLIENT_ID,
'X-Naver-Client-Secret' : Config.X_NAVER_CLIENT_SECRET}
# ๊ฐ์ requests์ get()ํจ์ ์ฌ์ฉํด์ ๋ฐ์์ฃผ๊ธฐ
response = requests.get( url, params= params, headers= headers)
# ์๋ต์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ฐ๋๋ค.
# ํฌ์คํธ๋งจ ์๋ต ๋ฐ๋์ JSON์ผ๋ก ๋์ด์์ด์ ๊ฐ๋ฅํ๋ค.
response = response.json()
print( response )
return {"result" : "success",
"items" : response['items'],
"count" : len(response['items'])}
์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด,

๋์ปค๋ฅผ ์คํํ ์ฑ๋ก sls deploy๋ฅผ ํ๋๋ก ํ์.

Postman
Params ๋ถ๋ถ์ ์์ฑํด์ฃผ๊ณ ,

ํค๋ ๋ถ๋ถ์ ํค ๊ฐ์ ์ ๋ ฅํด์ค๋ค

๋ก์ปฌ์์ ์คํํ ๊ฒฐ๊ณผ( cmd์ flask run ๋ช ๋ น์ด ์คํ)๋ ์ด๋ ๊ฒ ๋ฌ๋ค.

vscode์ sls deploy์์, ๊ฒฐ๊ณผ๊ฐ์ ์ด๋ ๊ฒ ๋ฌ๋ค

๊นํ๋ธ ์ก์ ์ฆ์์๋ ๊ตฌ๋๋๋์ง ํ์ธํ์.

'RestFul API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| instargram ์ฌ์ง ํฌ์คํ API (1) ๊ธฐ๋ณธ ์ธํ (Setting) ํ๊ธฐ (0) | 2024.05.30 |
|---|---|
| HTTP ์์ฒญ์ ์ํ ๋ณต์กํ ์์ ์ ๋จ์ํํ๋ requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.05.30 |
| RestFul API๋ฅผ Serverless Framework๋ก ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.05.23 |
| JWT ์ธ์ฆ ํ ํฐ์ ๋ก๊ทธ์ธ ๋ง๋ฃ ์๊ฐ ์ค์ ํ๊ธฐ (0) | 2024.05.22 |
| JWT(JSON WEP TOKEN) ์ํธํ ๋ก๊ทธ์์ API ๋ง๋ค๊ธฐ (0) | 2024.05.22 |