⎮프로젝트 폴더 : linkserver/
|-------- client ( React 구조)
|-------- server ( Python구조 )
mkdir linkservice
cd linkservice
npx create-react-app client
python3 -m venv server
(DB생성 방법은 별도 설명하지 않는다.)
config.py은 개발계(Development)와 운영계(Production) 환경설정을 위한 것으로 서버(server.py) 구동 시 호출한다.
SQLALCHEMY_DATABASE_URI 정보를 여러분의 DB정보로 변경하고, 다른 옵션들은 참고하여 필요시 추가/삭제 하면 된다.
이미지 저장 위치설정은 CDN혹은 NAS형태로 제작하고자 별도 폴더로 분리했으며, 개발계와 운영계 위치가 다르다는 점 참고하기 바란다. ( 같은 위치여도 무방하다)
환경파일 내용은 앞으로 진행하면서 설명될 것이다.
import os
dir = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
class Development(object):
DEBUG = True
FLASK_APP = 'linkservice_dev'
ENV = 'development'
## DB URL FOR DEVELOPMENT
SQLALCHEMY_DATABASE_URI = 'postgresql://사용자:사용자패스워드@localhost:5432/데이타베이스명'
# 데이터 변경사항에 대해 커밋 전후로 알림 여부
SQLALCHEMY_TRACK_MODIFICATIONS = True
# Query Debug 여부
SQLALCHEMY_ECHO = True
SQLALCHEMY_POOL_SIZE = 20
SQLALCHEMY_POOL_RECYCLE = 3600
#JSON에서 한글 표현을 위해서 반영
JSON_AS_ASCII = False
#이미지 위치 설정
image_folder = os.path.normpath(os.path.join(dir, os.pardir)) + '/client/public/images/'
COVER_IMAGE_FORDER = image_folder
IMAGE_FORDER = image_folder
IMAGE_URL = 'http://127.0.0.1:3000/images/'
class Production(object):
DEBUG = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False
FLASK_APP = 'linkservice'
ENV = 'production'
## DB URL FOR PRODUCTION
SQLALCHEMY_DATABASE_URI = 'postgresql://사용자:사용자패스워드@localhost:5432/데이타베이스명’
SQLALCHEMY_POOL_SIZE = 20
SQLALCHEMY_POOL_RECYCLE = 3600
#JSON에서 한글 표현을 위해서 반영
JSON_AS_ASCII = False
#이미지 위치 설정
image_folder = os.path.normpath(os.path.join(dir, os.pardir)) + '/images/'
COVER_IMAGE_FORDER = image_folder
IMAGE_FORDER = image_folder
#운영계
IMAGE_URL = 'https://www.linkservice.com/img/'
app_config = {
'development': Development(),
'production': Production(),
}
create_app.py는 환경파일을 읽어 Flask App을 실행한다.
from . import config
from flask import Flask
def create_app(environment):
# config파일에서 불려오기
config_map = {
'development': config.Development(),
'production': config.Production(),
}
config_obj = config_map[environment.lower()]
app = Flask(__name__)
app.config.from_object(config_obj)
return app
여기서는 server.py로 네임을 변경하여 진행한다.
실제 서버를 실행하는 파일로 python3 server.py로 구동한다.
우선 설정파일들로 잘 되는지 확인해보자.
아래는 host가 라이브 도메인이 아닌 경우, DEV환경으로 인식한다.
import socket
from flask import Flask
env = socket.gethostbyname(socket.gethostname())
if '라이브도메인 예)linkserver.co.kr' in env :
app = create_app('production')
print('운영계 환경입니다.')
else:
app = create_app('development')
print(' DEV 환경입니다.')
#print(app.config)
if __name__ == "__main__":
app.run(debug=True, port=5000)
위 내용을 모두 저장한 후 터미널을 열어서python3 server.py을 실행해보자.
- 가상화 환경 시작
- python3 server.py 실행
위와 같은 오류가 발생할 것이다.
Flask 라이브러리가 없어서 발생한 오류인데, 앞으로 진행에 필요한 라이브러리를 미리 모두 설치해보자.
- pip install flask
- pip install Flask-RESTful
- pip install Flask-SQLAlchemy
- pip install marshmallow-sqlalchemy
- pip install flask-marshmallow
- pip install psycopg2
- pip install pillow
라이브러리를 모두 설치한 후 다시 한번 터미널에서 python3 server.py
을 실행한다.
server.py에 print(app.config) 을 추가하면 환경파일이 잘 적용되었는지
확인이 가능하다.
여기까지 기본 flask 기본 환경 구성이 완료되었다.
다음 포스팅에서는 SQLAlchemy로 데이타 모델링 작업을 진행해보자.