[파이썬] Flask로 모바일 앱 백엔드 개발

Flask는 Python으로 작성된 마이크로 웹 프레임워크로, 모바일 애플리케이션의 백엔드를 개발하는 데 사용될 수 있습니다. Flask는 간결하고 가벼운 구조로, 사용하기 쉽고 확장 가능한 방식으로 모바일 앱의 서버 사이드를 구축할 수 있습니다.

Flask를 사용하여 모바일 앱의 백엔드를 개발하기 위해서는 몇 가지 단계를 따라야 합니다.

1. Flask 설치하기

먼저 Flask를 설치해야 합니다. 파이썬의 패키지 매니저인 pip를 사용하여 다음 명령어를 실행하세요.

pip install flask

2. Flask 앱을 생성하기

다음으로, Flask 앱을 생성해야 합니다. 이를 위해서는 Python 스크립트 파일을 만들고 Flask 패키지를 import 해야 합니다.

from flask import Flask

app = Flask(__name__)

3. 라우팅 설정하기

Flask 앱은 URL 경로에 따라 다른 동작을 수행할 수 있습니다. 이를 라우팅이라고 합니다. Flask 앱의 라우팅을 설정하기 위해서는 @app.route 데코레이터를 사용합니다.

@app.route('/')
def home():
    return "Hello, Flask!"

위의 코드는 루트 URL(‘/’)에 접속하면 “Hello, Flask!”라는 문자열을 반환하는 함수를 정의한 것입니다.

4. 데이터베이스 연결하기

많은 모바일 앱은 데이터베이스와의 상호작용이 필요합니다. Flask에서는 SQLAlchemy와 같은 패키지를 사용하여 데이터베이스를 연결할 수 있습니다.

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)

위의 코드는 SQLite 데이터베이스에 연결하기 위한 설정을 추가한 것입니다.

5. API 엔드포인트 정의하기

모바일 앱의 백엔드에서는 API 엔드포인트를 정의하여 클라이언트 앱과의 데이터 교환을 처리해야 합니다. Flask에서는 각 API 엔드포인트를 함수로 정의하고 필요한 작업을 수행합니다.

@app.route('/api/data', methods=['GET'])
def get_data():
    # 데이터베이스에서 데이터 조회
    data = db.session.query(Data).all()
    # 데이터를 JSON 형태로 반환
    return jsonify([d.serialize() for d in data])

위의 코드는 /api/data 엔드포인트에 GET 요청이 들어왔을 때 데이터베이스에서 데이터를 조회하여 JSON 형태로 반환하는 함수를 정의한 것입니다.

6. 비동기 작업 처리하기

모바일 앱의 백엔드에서는 때때로 비동기 작업을 처리해야 할 수도 있습니다. Flask에서는 Celery와 같은 패키지를 사용하여 비동기 작업을 처리할 수 있습니다.

from celery import Celery

app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

위의 코드는 Redis를 사용하여 Celery를 설정하는 예시입니다.

7. 앱 실행하기

Flask 앱을 실행하기 위해서는 다음과 같은 코드를 마지막에 추가해야 합니다.

if __name__ == '__main__':
    app.run()

이 코드는 스크립트가 직접 실행될 때에만 Flask 서버를 실행하도록 합니다.

이제 Flask로 모바일 앱의 백엔드를 개발할 준비가 되었습니다. Flask는 사용하기 쉽고 강력한 프레임워크로, 어떤 모바일 앱이든 효율적으로 백엔드를 구축할 수 있습니다. 샘플 코드를 시작으로 Flask를 익숙하게 사용해 보세요!