#3. 프로젝트 폴더 구조 및 환경설정

FirstValue·2023년 3월 11일
0
post-thumbnail

3.1. 프로젝트 폴더 구조 및 환경설정

프로젝트 폴더 구조는 프론트엔드와 백엔드를 나누고자 client / server로 구분 한다.

⎮프로젝트 폴더 : linkserver/
|-------- client ( React 구조)
|-------- server ( Python구조 )

프로젝트 폴더를 만들고 Client 환경과 Server 환경을 구성해 보겠다.

터미널을 열어서,

mkdir linkservice
cd linkservice

⎮프로젝트 폴더에서 react 환경으로 client 폴더 생성

npx create-react-app client

⎮프로젝트 폴더에서 python가상환경으로 server폴더 생성

python3 -m venv server

프로젝트 폴더인 linkservice 아래에 client와 server환경이 구축되었다.

3.2 Python Flask 기본 환경을 설정해보자.

우선 PostgreSQL에서 DB 설계에 맞게 테이블을 생성한다.

(DB생성 방법은 별도 설명하지 않는다.)


⌘ config.py ( 위치: linkservice/server/config/config.py )


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 ( 위치: linkservice/server/config/create_app.py)


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 ( 위치: linkservice/server/server.py)


여기서는 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을 실행해보자.

📌 실행방법

  1. 가상화 환경 시작
  2. python3 server.py 실행

위와 같은 오류가 발생할 것이다.

Flask 라이브러리가 없어서 발생한 오류인데, 앞으로 진행에 필요한 라이브러리를 미리 모두 설치해보자.

📌 LIBRARY설치

  1. pip install flask
  2. pip install Flask-RESTful
  3. pip install Flask-SQLAlchemy
  4. pip install marshmallow-sqlalchemy
  5. pip install flask-marshmallow
  6. pip install psycopg2
  7. pip install pillow

라이브러리를 모두 설치한 후 다시 한번 터미널에서 python3 server.py
을 실행한다.

server.py에 print(app.config) 을 추가하면 환경파일이 잘 적용되었는지
확인이 가능하다.

여기까지 기본 flask 기본 환경 구성이 완료되었다.


다음 포스팅에서는 SQLAlchemy로 데이타 모델링 작업을 진행해보자.

profile
개발은 개~발이 아니길 바라는 아재

0개의 댓글