python flask 이용해서 REST API 만들기 + systemd 등록 + 80포트 오픈

All We Need is Data, itself !·2024년 10월 27일
0

시작 과정은 이러했다
프로젝트를 했을 때 아무래도 주식 실시간 데이터가 들어오는 시간이 장중이다보니, 테스트하기에 불편함이 있다 ㅠ
그래서 테스트용으로 kafka 서버에서 호출해서 사용하려고 만들었다.

코드는 비교적 간단한데, flask를 설치하고 포트를 여는 과정에서 좀 문제가 있었어서 내용을 정리해두려고 한다.

코드 전문

from flask import Flask, jsonify, request
import random
import time

app = Flask(__name__)
# 확인용 iscd = ["005930", "005940", "005950"]

items = {
    "MKSC_SHRN_ISCD" : "",
    "BSOP_HOUR" : random.randrange(100000, 999999),
    "HOUR_CLS_CODE" : str("0"),
    "ASKP1" : random.randrange(1000, 9999),
    "ASKP2" : random.randrange(1000, 9999),
    "ASKP3" : random.randrange(1000, 9999),
    "ASKP4" : random.randrange(1000, 9999),
    "ASKP5" : random.randrange(1000, 9999),
    "ASKP6" : random.randrange(1000, 9999),
    "ASKP7" : random.randrange(1000, 9999),
    "ASKP8" : random.randrange(1000, 9999),
    "ASKP9" : random.randrange(1000, 9999),
    "ASKP10" : random.randrange(1000, 9999),
    "BIDP1" : random.randrange(1000, 9999),
    "BIDP2" : random.randrange(1000, 9999),
    "BIDP3" : random.randrange(1000, 9999),
    "BIDP4" : random.randrange(1000, 9999),
    "BIDP5" : random.randrange(1000, 9999),
    "BIDP6" : random.randrange(1000, 9999),
    "BIDP7" : random.randrange(1000, 9999),
    "BIDP8" : random.randrange(1000, 9999),
    "BIDP9" : random.randrange(1000, 9999),
    "BIDP10" : random.randrange(1000, 9999),
    "ASKP_RSQN1" : random.randrange(100000, 999999),
    "ASKP_RSQN2" : random.randrange(100000, 999999),
    "ASKP_RSQN3" : random.randrange(100000, 999999),
    "ASKP_RSQN4" : random.randrange(100000, 999999),
    "ASKP_RSQN5" : random.randrange(100000, 999999),
    "ASKP_RSQN6" : random.randrange(100000, 999999),
    "ASKP_RSQN7" : random.randrange(100000, 999999),
    "ASKP_RSQN8" : random.randrange(100000, 999999),
    "ASKP_RSQN9" : random.randrange(100000, 999999),
    "ASKP_RSQN10" : random.randrange(100000, 999999),
    "BIDP_RSQN1" : random.randrange(100000, 999999),
    "BIDP_RSQN2" : random.randrange(100000, 999999),
    "BIDP_RSQN3" : random.randrange(100000, 999999),
    "BIDP_RSQN4" : random.randrange(100000, 999999),
    "BIDP_RSQN5" : random.randrange(100000, 999999),
    "BIDP_RSQN6" : random.randrange(100000, 999999),
    "BIDP_RSQN7" : random.randrange(100000, 999999),
    "BIDP_RSQN8" : random.randrange(100000, 999999),
    "BIDP_RSQN9" : random.randrange(100000, 999999),
    "BIDP_RSQN10" : random.randrange(100000, 999999),
    "TOTAL_ASKP_RSQN" : random.randrange(100000, 999999),
    "TOTAL_BIDP_RSQN" : random.randrange(100000, 999999),
    "OVTM_TOTAL_ASKP_RSQN" : random.randrange(100000, 999999),
    "OVTM_TOTAL_BIDP_RSQN" : random.randrange(100000, 999999),
}

# GET /api/check
@app.route("/api/check")
def check():
  return "success"


# GET /api/hoka/{sec}
@app.route("/api/hoka/<iscd>")
def getHoka(iscd):
  items["MKSC_SHRN_ISCD"] = str(iscd)
  return jsonify(items)

if __name__ == "__main__":
  app.run(host='0.0.0.0', port=80)

딱히 별건 없고 그냥 외부 서버에서 요청 접근하기위해 host='0.0.0.0' 그리고 port=80을 줬다는 것만 생각하면 좋을 것 같다.

정수나 실수이면 <int:iscd> <float:iscd> 이렇게 입력해주면 된다.

내 서비스에서는 iscd는 반드시 string이어야만 해서 str(iscd)를 통해 못박음
PHP랑 다르게 python은 형변환이 마음대로 되지 않으니 굳이 필요는 없었나 라고 생각함



flask 설치

일단 서버 업데이트를 해주고, python은 요즘 다 있으니까 버전 체크를 간단하게 진행한다음에, pip를 설치하고 flask를 설치해주면 된다.

dnf update 
dnf install python3-pip

pip install flask

요 사이에 문제가 있었다면 ubuntu에서 pip 설치를 하고 난 다음에 pip install flask 를 쳤더니 Error: externally-managed-environment 라고 뜨면서 install이 안되는 현상이 있었다.
ubuntu 최신 버전에서 외부 매니징 환경을 보안상의 이유로 금지..?하나보다.. 근데 그래도 되나...??????? 스케일아웃이 너무 안되지않나...????

pipx로 설치도 해보고, 파일 삭제하라그래서 (좋지 않은 방법이라고 함) 삭제도 했지만 해결되지 않아서..
그냥 centos로 턴했다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

아무튼..!

설치까지 마무리가 되었으면 아무 위치나 파일 위치를 정해서 파일을 만들어주면 된다.

나의 경우 전 회사에서 /home/ 경로를 자주 사용하였으므로 /home/Dev 를 만들어 경로를 설정해주었다.

그리고 이 위치에 app.py를 만들어준다.

app.py로 만든 해당 코드를 돌려보자

python3 app.py &

백엔드로 안돌리고 싶으면 &를 빼면됨
그리고 Ctrl+C를 눌러서 quit하라.. 뭐 이런 안내문구가 나오면 엔터를 눌러주면 백그라운드로 동작한다.



  • flask 옵션에 관해서
    루프백으로 테스트를 할거면 host설정이나 port 설정을 따로 해주지 않아도 되지만, 기본 포트인 5000번을 사용할 게 아니라면 포트와 host 설정은 해줘야 함.

systemd 등록

[Unit]
Description=flaskapp

[Service]
Type=idle
User=root
Group=root
WorkingDirectory=/home/Dev/
ExecStart=/usr/bin/python3 /home/Dev/app.py

[Install]
WantedBy=multi-user.target

아래 보이는 위치 (/lib/systemd/system/flask.service)에다가 위의 파일을 생성해주면 되는데
systemdaemon에 flask.service를 올리겠다고 설정하는 내용이다.

root유저로 실행하고, Start할 내용은 python3로 app.py를 돌려줘~ 라는 내용.

 vi /lib/systemd/system/flask.service

이렇게까지 설정한다면 일단 끝

이제 이런식으로 flask가 잘 올라가는지 확인을 해주면 됩니당.

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글