프로그래밍 기초/portfolio project

Python Flask 웹 서버 실행

NOG 2024. 8. 26. 13:02

웹페이지 틀을 구성하는 프론트 엔드

페이지에 대한 데이터를 Logic에 맞게 넣어주는 백엔드 및 데이터베이스 등

=> REST API를 사용해서 이러한 컴퓨터들 사이에서 http 데이터 요청을 해서 응답 데이터를 화면에 출력시키는 구조다.

 

Flask

 

플라스크는 파이썬으로 작성된 마이크로 웹 프레임워크


웹 애플리케이션을 구축하는 데 필요한 핵심 기능을 제공하는 데 중점을 둔 단순하고 미니멀한 디자인
특정 도구나 라이브러리를 강요하지 않는다는 점에서 '마이크로'라는 원칙을 따른다.

나머지 기능은 자신이 원하는 다른 라이브러리나 프레임워크를 확장해 사용

 

 

__name__?

 

파이썬에서 디폴트로 있는 해당 변수는 모듈로서 실행될 때 모듈(라이브러리)의 이름이 저장된다. (abc.py이면 abc)

모듈이 아닌 실행되는 코드에서는 __main__ 값이 들어간다.

 

코드를 실행할 때는 __name__== __main__ 이 된다.

 

 

/*

 

VS code Extensions에서 Python 설치하고 오류발생 시 python 직접 설치한다. (PATH)

python -m venv 가상환경이름

=>가상환경 폴더 안에 들어가 Scripts에서 activate.bat 실행한다

pip intstall flask

상위 폴더로 올라가서 venv 전 위치의 폴더에서 가상환경 내에서 flask를 설치해준다.

 

*/

from flask import Flask

app = Flask(__name__)

@app.route("/hello")
def test():
    return "<h2>hello World.</h2>"

if __name__=="__main__":
    app.run(port="5000", debug=True)

 

flask 라이브러리 안의 여러 클래스들 중에 핵심적인 기능인 Flask 클래스만 import한다는 의미이다.

Flask 클래스로 app이라는 객체를 만들고 웹서비스의 기능을 넣어서 추가하는 형태로 구현한다.

파라미터를 제외한 URL에 라우팅될 경로('/'로 시작)를 적어주면 된다.

run이라는 함수에는 웹주소, 포트, debug(에러를 볼 것인가) 같은 인자가 있다. 

 

 

=> cmd 터미널에서 실행시켜주면 된다.

 

 

/hello 경로에 라우팅된 것을 확인할 수 있다. 


/*

이렇게 어떠한 경로에 라우팅된 것이 endpoint이다. 이것은 해당 api를 호출할때의 URL이다.

*/

 

 

기존에 만들었던 채팅레이아웃에서 send 버튼을 누르면  localhost:5000/hello 에다 요청하고 응답값이 잘 나오는지 console.log 로 확인해보겠다.

  const SendMessage = () => {
    setMessages([...messages, { text: input, sender: "user" }]);

    axios.get("http://localhost:5000/hello").then(function (result) {
      console.log(result.data);
    });

    setInput("");
  };

 

 

npm install axios 를 통해서 axios를 설치하고 해당 url에 http get 요청을 보내봤다.

 

 

CORS 정책에 의해서 차단된 것을 확인할 수 있었다.

자원을 제공하는 localhost:5000/hello 에서 access-control-allow-origin에

위의 send  버튼을 눌러 요청했던 http://localhost:3000/chat 이 없어서 접근이 허용되지 않았던 것 같았다.

 

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 모든 경로에 대해 CORS 허용

@app.route('/hello')
def hello():
    return "hello, World."

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

 

해당 문제를 해결하기 위해

pip install flask-cors를 통해서 flask-cors를 설치하고

Flask 서버에서 어플리케이션 전체(모든 경로)에 대해서 CORS를 허용시켜 차단되지 않도록 하였다.

 

 

제대로 hello World. 가 찍히는 것을 확인할 수 있었다.

 

 

deactivate 를 통해서 가상환경 venv에서 나올 수 있다.