[Flask] Flask 프로젝트 초기 세팅

haejun-kim·2020년 9월 16일
0

[Flask]

목록 보기
1/2
post-thumbnail

깔끔한 파이썬 탄탄한 백엔드의 내용을 토대로 프로젝트 초기 세팅 내용을 메모 해 놓기 위한 블로깅

MySQL 설정 및 연결

python 코드에서 DB와 연결하기 위해 사용할 수 있는 다양한 라이브러리가 있는데 그 중 SQLAlchemy 라이브러리를 사용하여 파이썬 코드에서 데이터베이스에 연결하여 SQL을 실행시킬 수 있다.

SQLAlchemy 설치

pip3 install sqlalchemy

SQLAlchemy에서 MySQL을 사용하기 위해서는 MySQL용 DBAPI 또한 설치해야 한다. DBAPI는 이름 그대로 DB를 사용하기 위한 API이다.

MySQL용 DBAPI에는 PyMySQL, MySQLdb, MySQL-Connector가 존재한다.

PyMySQL은 python 기반으로 만들어진 라이브러리이며, MySQL-Connector는 C 기반으로 만들어진 라이브러리이다. 따라서 속도면에 있어서 MySQL-Connector가 더 우세하다.
속도와 관련된 이슈가 없는 경우에는 PyMySQL을 사용해도 무방하다.

MySQL-Connector설치

pip3 install mysql-connector-python

설치가 완료 됐다면, SQLAlchemy를 사용하여 데이터베이스에 연결하여 SQL을 실행시켜 데이터베이스로부터 데이터를 읽어 들이거나 생성하거나 할 수 있다.

나는 프로젝트 초기 세팅을 위해 DB 연결을 다음과 같이 진행하였다.

config.py

from sqlalchemy import create_engine

db = {
    'user' : 'root',
    'password' : 'dnl1vhr2',
    'host' : 'brandi.c5my9kjknh3g.us-east-2.rds.amazonaws.com',
    'port' : 3306,
    'database' : 'brandi'
}

DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8

DB연결과 관련된 역할을 할 config.py라는 python file을 하나 생성 한 후 db와 관련 된 설정값을 기입해준다.

그리고 DB_URL이라는 변수에 위와 같이 fstring을 사용해준다.

DB_URL을 사용해 웹사이트에 접속하는 것과 비슷하게 실제 데이터베이스에 접속하는 개념으로 생각하면 된다.

create_engine 함수를 통해 DB_URL에 명시 된 데이터베이스에 접속한다. create_engine함수는 Engine 객체를 리턴한다. 연결 된 데이터베이스와 SQL을 Engine 객체를 사용해서 할 수 있다. 여기서는 Engine객체를 db라는 변수에 저장했다.

이렇게 하면 SQLAlchemy를 사용한 MySQL연동이 완료된다.

app.py

이제 app.py파일을 수정하여 config.py파일에서 데이터베이스 설정 정보를 읽어들여 데이터베이스와 연결하도록 해보자. 위에서 사용한대로 sqlalchemy의 create_engine을 사용하여 연결한다.

import config

from flask                         import Flask
from flask_cors                    import CORS

from sqlalchemy                    import create_engine

def create_app(test_config = None):
    app = Flask(__name__)
    app.debug = True
    
    if test_config is None:
        app.config.from_pyfile('config.py')
    else:
        app.config.update(test_config)
        
    # DB 연결
    database = create_engine(app.config['DB_URL'], encoding = 'utf-8', max_overflow = 0)
		app.database = database

    # CORS 설정
    CORS(app, resources={r'*' : {'origins': '*'}})

    return app
  1. create_app 이라는 함수를 정의한다. Flask가 create_app이라는 이름의 함수를 자동으로 함수로 인식하기 때문에 해당 함수를 통해 Flask를 실행시킨다. 또 한가지 중요한 것은 create_app 함수가 test_config라는 인자를 받는다는 것이다.
  2. 만약 test_config 인자가 None이면 config.py 파일에서 설정을 읽어들인다. None이 아니면 test_config 설정을 적용시킨다.
  3. sqlalchemy의 create_engine 함수를 사용해 데이터베이스와 연결한다.
  4. app.database라는 변수에 database를 넣어줌으로써, create_app 함수 외부에서도 데이터베이스를 사용할 수 있게 한다.
  5. CORS 설정은 모든 접속을 허용한다는 뜻이다. 이 설정에 대한 자세한 내용은 아래의 링크를 보면 이해할 수 있다.

Python Flask에서 CORS Cross Origin 사용하기

  1. flask 객체를 리턴한다.

초기 세팅

flask layered architecture에 의해 세가지 레이어로 구분짓는데 해당 레이어에 따라서 세팅을 해주면 된다.

presentation layer → view (controller)

business layer → service

persistence layer → model

따라서 위 세가지의 디렉토리를 만들어주자

mkdir model service view

초기 설정이기에 안의 내용은 비어있어도 되지만, __init__.py를 넣어주어도 된다. 해당 __init__.py를 넣어주는 것은 패키지로 인식하도록 도와주고, 또한 __all__ 메소드를 사용하여 변수를 묶어주는데도 사용된다.

또한 django의 manage.py와 같은 역할을 할 run.py라는 파일을 생성해주자. (이름은 무엇으로 하든 상관없다.)

run.py

from app import create_app

if __name__ == '__main__':
    app = create_app()
    
    app.run(host = 'localhost', port = 5000)

 __name__에 __main__이 들어있는지 확인해주는 소스이다.

flask 서버를 실행시킬 때 app.py가 실행되니까 __name__에는 __main__이 들어가서 app.run()이 실행되게 된다.

if문 안에 app.py에서 만들었던 create_app함수를 app이라는 변수에 할당해줬다. 따라서 해당 함수가 실행되면서 flask server가 동작하게 된다.

위와 같이 Flask의 초기 세팅을 마칠 수 있다.

성공적으로 세팅이 완료 됐다면 run.py파일을 실행시켰을 때, 서버가 정상적으로 구동이 되고, 서버가 구동 된 후 localhost:5000으로 접속 했을 때, Not Found가 출력되면 된다. (아무것도 작성하지 않았기 때문에)

DB연동이 제대로 되었는지도 확인해보면 좋을 듯 싶다.

0개의 댓글