플라스크(Flask) 앱의 심장, '애플리케이션 팩토리' 이해하기

플라스크 공식 튜토리얼의 첫 단추인 Application Setup 페이지에서는 앱을 어떻게 구조화하고 실행하는지 다룹니다. 핵심은 단순히 앱 객체를 만드는 것이 아니라, '애플리케이션 팩토리(Application Factory)'라는 함수 형태의 설정을 사용하는 것입니다.




애플리케이션 팩토리가 무엇인가요?

일반적으로 입문 예제에서는 코드 상단에 app = Flask(__name__)를 바로 선언합니다. 하지만 프로젝트가 커지면 여러 설정(테스트용, 개발용 등)이 필요해지는데, 이때 함수 안에서 앱 인스턴스를 만들고 반환하는 방식을 사용합니다. 이 함수를 '팩토리(공장)'라고 부릅니다.

  • 확장성: 여러 개의 앱 인스턴스를 서로 다른 설정으로 생성하기 쉽습니다.
  • 순환 참조 방지: 앱 객체를 전역으로 두지 않아 파일 간 참조 에러를 줄여줍니다.



핵심 코드 분석: flaskr/init.py

튜토리얼에서 제시하는 기본 구조는 flaskr라는 패키지 폴더를 만들고 그 안에 __init__.py 파일을 작성하는 것입니다.

import os
from flask import Flask

def create_app(test_config=None):
    # 1. 앱 인스턴스 생성 및 기본 설정
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    # 2. 설정 로드 (테스트용인지 실제 실행용인지 구분)
    if test_config is None:
        app.config.from_pyfile('config.py', silent=True)
    else:
        app.config.from_mapping(test_config)

    # 3. 인스턴스 폴더 생성 (데이터베이스 등이 저장될 곳)
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # 4. 간단한 테스트용 라우트
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app



코드의 주요 요소 상세 설명

요소 역할 설명
instance_relative_config 경로 설정 설정 파일이 앱 패키지 외부의 '인스턴스 폴더'에 있음을 알립니다.
SECRET_KEY 보안 데이터를 안전하게 보호하기 위한 키입니다. 개발 시엔 'dev'를 쓰지만 배포 시엔 숨겨야 합니다.
instance_path 저장소 SQLite 데이터베이스처럼 버전 관리에 포함되지 않아야 할 로컬 데이터가 저장되는 경로입니다.
app.route('/hello') 라우팅 브라우저에서 /hello로 접속했을 때 실행될 함수를 연결합니다.



애플리케이션 실행하기

코드를 모두 작성했다면 터미널에서 아래 명령어를 입력하여 서버를 실행할 수 있습니다. 이때 주의할 점은 패키지 폴더 내부가 아닌, 최상위 폴더에서 실행해야 한다는 것입니다.

  • 실행 명령어: flask --app flaskr run --debug
  • --debug 옵션: 코드를 수정하면 서버가 자동으로 재시작되고, 에러 발생 시 상세한 디버깅 정보를 보여줍니다.



튜토리얼의 다음 단계는?

애플리케이션 팩토리 설정을 마쳤다면, 이제 웹 서비스의 핵심인 데이터베이스(Database)를 연결할 차례입니다. 팩토리 함수 내에서 데이터베이스 초기화 로직을 등록하고 실제 데이터를 저장하는 방법을 배우게 됩니다.




Official Flask Tutorial: Application Setup
공식 문서를 다시 확인하며 각 설정값이 가지는 의미를 꼼꼼히 읽어보시는 것을 추천합니다. 특히 instance_path의 개념은 보안상 매우 중요합니다.