리펙토링의 코드스멜(Code Smell)이해하기
리펙토링의 코드스멜(Code Smell)이해하기
Flask와 PyMongo로 웹 애플리케이션 구축하기
웹 애플리케이션 개발은 현대 소프트웨어 개발에서 매우 중요한 부분을 차지합니다. 특히 Python은 간결한 문법과 다양한 라이브러리 지원 덕분에 웹 애플리케이션 개발에서 인기가 높습니다. Flask는 Python의 대표적인 경량 웹 프레임워크로, 초보자부터 전문가까지 폭넓게 사용됩니다. 또한, MongoDB는 비정형 데이터를 효율적으로 저장하고 처리할 수 있는 NoSQL 데이터베이스로, 유연성과 확장성을 제공합니다.
이 글에서는 Flask와 PyMongo를 사용하여 간단한 웹 애플리케이션을 설계하고 구축하는 과정을 살펴보겠습니다.
1. Flask와 PyMongo 소개
Flask란?
Flask는 간결하고 유연한 Python 웹 프레임워크로, 작은 애플리케이션부터 대규모 프로젝트까지 적합합니다. 기본적으로 라우팅, 템플릿 엔진, 요청 처리 등을 지원하며, 필요에 따라 확장할 수 있는 구조를 가지고 있습니다.
PyMongo란?
PyMongo는 Python에서 MongoDB와 상호작용할 수 있도록 도와주는 MongoDB 공식 라이브러리입니다. MongoDB는 JSON과 유사한 문서 형식을 사용하는 NoSQL 데이터베이스로, 관계형 데이터베이스와 달리 고정된 스키마가 필요하지 않아 빠르게 데이터를 저장하고 처리할 수 있습니다.
2. Flask와 PyMongo의 장점
Flask의 장점:
- 간단한 설정: 최소한의 설정으로 빠르게 시작할 수 있습니다.
- 모듈화: Blueprint 등 모듈화를 지원하여 코드 관리가 용이합니다.
- 확장 가능성: 다양한 플러그인과 라이브러리로 기능을 확장할 수 있습니다.
PyMongo의 장점:
- 유연한 데이터 처리: 스키마가 없어 데이터 구조 변경이 용이합니다.
- 빠른 개발 속도: 데이터 삽입, 조회, 수정, 삭제 작업을 간단히 구현할 수 있습니다.
- 대규모 데이터 처리: 대량의 데이터를 효율적으로 처리하는 데 적합합니다.
3. Flask와 PyMongo를 사용한 개발 흐름
1. 개발 환경 설정
- Flask와 PyMongo를 설치합니다.
- MongoDB를 로컬 또는 클라우드 환경에서 설정합니다.
2. 애플리케이션 구조 설계
- Flask 디렉토리 구조를 정의합니다.
- Blueprint와 설정 파일을 활용해 확장 가능성을 고려한 구조를 만듭니다.
3. 데이터베이스 설계
- MongoDB에서 사용할 컬렉션과 문서 구조를 정의합니다.
- 필요 시 인덱스를 설정해 효율적인 쿼리를 보장합니다.
4. CRUD 기능 구현
- Flask와 PyMongo를 사용해 데이터를 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete)하는 기능을 구축합니다.
5. RESTful API 개발
- 클라이언트와의 통신을 위해 Flask로 RESTful API를 설계합니다.
- JSON 데이터를 주고받는 엔드포인트를 구현합니다.
6. 프런트엔드 통합
- Flask의 Jinja2 템플릿 엔진을 사용해 HTML과 동적 데이터를 통합합니다.
- Bootstrap 등의 프런트엔드 프레임워크로 사용자 경험을 개선합니다.
7. 배포
- WSGI 서버와 클라우드 플랫폼을 활용해 애플리케이션을 배포합니다.
4. 예제: 간단한 To-Do 리스트 애플리케이션
주요 기능:
- 할 일 추가: 사용자가 새로운 작업을 추가할 수 있습니다.
- 할 일 조회: MongoDB에서 저장된 작업 리스트를 불러옵니다.
- 할 일 완료 표시: 작업 상태를 완료로 업데이트합니다.
- 할 일 삭제: 더 이상 필요 없는 작업을 삭제합니다.
1. 사전 준비
필요한 패키지 설치
Python이 설치되어 있다면 아래 명령어로 Flask와 PyMongo를 설치합니다.
pip install flask pymongo
MongoDB 설정
MongoDB를 로컬에 설치하거나 MongoDB Atlas를 통해 클라우드에서 설정하세요. MongoDB가 실행 중인지 확인하세요.
2. 프로젝트 구조
간단한 프로젝트 구조는 다음과 같습니다:
todo-app/
│
├── app.py # Flask 애플리케이션의 진입점
├── templates/
│ ├── index.html # 메인 페이지 템플릿
├── static/
│ ├── styles.css # 스타일 시트 (선택 사항)
3. 코드 작성
3.1 Flask 애플리케이션 생성 (app.py
)
from flask import Flask, render_template, request, redirect, url_for
from pymongo import MongoClient
= Flask(__name__)
app
# MongoDB 클라이언트 설정
= MongoClient("mongodb://localhost:27017/")
client = client["todo_db"] # 데이터베이스 이름
db = db["tasks"] # 컬렉션 이름
tasks_collection
@app.route('/')
def index():
# 할 일 목록 가져오기
= tasks_collection.find()
tasks return render_template('index.html', tasks=tasks)
@app.route('/add', methods=['POST'])
def add_task():
# 새 할 일 추가
= request.form.get('title')
title if title:
"title": title, "completed": False})
tasks_collection.insert_one({return redirect(url_for('index'))
@app.route('/complete/<task_id>')
def complete_task(task_id):
# 할 일 완료 처리
"_id": ObjectId(task_id)}, {"$set": {"completed": True}})
tasks_collection.update_one({return redirect(url_for('index'))
@app.route('/delete/<task_id>')
def delete_task(task_id):
# 할 일 삭제
"_id": ObjectId(task_id)})
tasks_collection.delete_one({return redirect(url_for('index'))
if __name__ == '__main__':
=True) app.run(debug
3.2 HTML 템플릿 작성 (templates/index.html
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do List</title>
<style>
font-family: Arial, sans-serif; margin: 20px; }
body { .completed { text-decoration: line-through; color: gray; }
</style>
</head>
<body>
<h1>To-Do List</h1>
<form action="/add" method="POST">
<input type="text" name="title" placeholder="할 일을 입력하세요" required>
<button type="submit">추가</button>
</form>
<ul>
{% for task in tasks %}<li class="{{ 'completed' if task.completed else '' }}">
{{ task.title }}
{% if not task.completed %}<a href="/complete/{{ task._id }}">완료</a>
{% endif %}<a href="/delete/{{ task._id }}">삭제</a>
</li>
{% endfor %}</ul>
</body>
</html>
4. 애플리케이션 실행
- 터미널에서
app.py
가 있는 디렉토리로 이동합니다.
- 아래 명령어로 Flask 애플리케이션을 실행합니다:
python app.py
브라우저에서 http://localhost:5000을 열어 To-Do 리스트 애플리케이션을 확인합니다.
5. 다음 단계
이 애플리케이션을 확장하려면 다음을 고려해 보세요:
1. 유저 인증: 사용자별로 할 일을 관리하도록 확장.
2. UI 개선: Bootstrap 또는 다른 CSS 프레임워크로 스타일링.
3. 배포: AWS, Heroku, 또는 Render를 사용하여 배포.
Flask와 PyMongo를 활용한 이 간단한 프로젝트를 통해 웹 애플리케이션 개발의 기본 개념을 익힐 수 있습니다. 이제 자신만의 프로젝트를 만들어보세요!