[Flask-①] 파이썬 Flask 기본 개념과 개발 환경 설정
파이썬 Flask 기본 개념과 개발 환경 설정
웹 개발, 어떻게 시작해야 할까요?
너무 무겁고 복잡한 프레임워크에 지쳤다면,
Flask로 가볍고 유연하게 시작해보세요!
안녕하세요, 여러분 반갑습니다!
오늘은 웹 개발 입문자에게 딱 맞는 Python 기반 마이크로 프레임워크 Flask에 대해 함께 배워볼 거예요.
Flask는 배우기 쉽고, 필요한 기능만 붙여서 쓸 수 있어서 초보자에게 정말 잘 맞는 프레임워크랍니다.
이 글에서는 Flask가 어떤 도구인지, 왜 사용하는지부터 개발 환경을 설정하고 "Hello, World!"까지 웹앱을 직접 실행해보는 것까지 단계별로 친절하게 설명드릴게요.
천천히 따라오시면서 한 줄 한 줄 실행해 보세요.
분명 재미있고 보람찬 시간이 될 거예요. 😊
목차
1. Flask란 무엇인가요? 🧩
웹 개발을 처음 접하는 분들이라면 Flask라는 이름이 조금 생소하게 들릴 수도 있습니다.
하지만 Python 언어를 배우셨다면, Flask는 웹 애플리케이션 세계로 자연스럽게 이어주는 친절한 안내자 같은 존재예요. 😄
Flask는 마이크로 웹 프레임워크입니다.
여기서 '마이크로'란 작고 기능이 제한적이라는 뜻이 아니라, 필수적인 최소한의 구성만 제공한다는 의미입니다.
즉, 필요한 기능을 사용자가 직접 선택하고 조립해서 쓸 수 있어요.
🔍 웹 프레임워크란?
웹 프레임워크는 웹 애플리케이션 개발을 쉽게 해주는 도구 모음이에요.
일반적으로 웹 개발에는 HTTP 처리, 라우팅, 요청/응답 관리, 템플릿 렌더링, 데이터베이스 연동 등 다양한 기능이 필요합니다.
이걸 모두 직접 짜려면 시간도 오래 걸리고, 실수도 많겠죠?
그래서 우리는 웹 프레임워크를 사용합니다.
대표적으로 Django는 많은 기능이 내장된 풀스택 프레임워크이고,
Flask는 꼭 필요한 기능만 기본으로 제공하는 마이크로 프레임워크입니다.
🧠 Flask의 내부 구조와 작동 원리 간단히 알아보기
Flask는 내부적으로 WSGI(Web Server Gateway Interface)라는 표준을 따릅니다.
이 덕분에 Flask 애플리케이션은 다양한 Python 웹 서버와 호환될 수 있어요.
간단히 말하면, 사용자의 브라우저 요청 → Flask가 요청 처리 → 결과를 응답으로 반환하는 흐름이에요.
이 요청-응답 흐름을 이해하는 것이 이후 라우팅, 뷰 함수, 템플릿 등 모든 Flask 기능을 배우는 기초가 됩니다.
- Flask는 단순하고 가볍습니다 — 필요한 기능만 골라서 사용 가능
- WSGI 표준에 따라 Python 기반 웹 서버와 호환됩니다
- 라우팅, 요청 처리, 응답 생성 등 웹의 기본 흐름을 직접 경험할 수 있어요
이제 Flask의 기본 개념과 작동 방식이 조금 이해되셨죠? 😊
다음 섹션에서는 Flask가 왜 이렇게 많이 사랑받는지, 어떤 점이 특별한지를 구체적으로 알아볼 거예요!
2. Flask의 주요 특징과 장점 💡
Flask는 단순하면서도 확장 가능한 구조 덕분에 초보자부터 전문가까지 모두가 애용하는 프레임워크입니다. "필요한 것만 붙인다!"는 유연한 설계 철학이 Flask의 핵심이에요.
그럼 Flask가 왜 사랑받는지, 어떤 강점들이 있는지 하나씩 살펴볼까요?
🎯 Flask의 핵심 특징
- 심플한 구조: 단 하나의 파일로도 전체 웹 앱을 실행할 수 있어요.
- 유연성: 프로젝트 구조를 자유롭게 설계 가능! 마이크로서비스에도 적합합니다.
- 확장성: 플러그인 및 확장 라이브러리를 통해 기능 추가 가능 (예: SQLAlchemy, Flask-Login).
- 방대한 커뮤니티와 자료: 공식 문서가 잘 되어 있고, 튜토리얼도 엄청 많아요.
💻 Flask vs Django: 비교로 보는 특징
비교 항목 | Flask | Django |
---|---|---|
프레임워크 유형 | 마이크로 프레임워크 | 풀스택 프레임워크 |
구조 | 자유롭고 유연함 | 엄격한 구조 |
초보자 적합성 | 빠르게 시작 가능 | 처음엔 다소 복잡 |
확장성 | 라이브러리 추가 방식 | 내장 기능 풍부 |
이처럼 Flask는 자유도와 단순함이 큰 매력입니다.
게다가 파이썬스럽게 직관적인 코드 작성이 가능해서, 배우면 배울수록 더 잘 만들고 싶어지는 프레임워크예요.
이제 Flask의 매력을 알았으니, 다음은 개발 환경을 어떻게 구성할지 알아볼 차례입니다! ✨
3. 개발 환경 구성하기 (venv, 설치) 🛠
Flask 개발을 시작하기 위해선 먼저 작업을 위한 안전한 공간, 즉 가상환경을 만드는 게 중요합니다.
왜냐하면 프로젝트마다 사용하는 라이브러리 버전이 다를 수 있고, 시스템 전체에 영향을 주지 않기 위해서죠.
🌱 가상환경 만들기
다음은 Python 내장 도구 venv
를 사용해 가상환경을 만들고 활성화하는 과정입니다.
# 가상환경 생성
python -m venv venv
# Windows에서 활성화
venv\Scripts\activate
# macOS / Linux에서 활성화
source venv/bin/activate
터미널 프롬프트 앞에 (venv)
가 붙으면 성공입니다. 이제 Flask를 설치해볼 차례예요.
📦 Flask 설치하기
pip install Flask
정상 설치되었다면, 다음 명령어로 설치된 버전을 확인할 수 있어요.
python -m flask --version
🗂 프로젝트 기본 구조
지금은 단일 파일 구조로 충분합니다.
이후 앱이 커지면 파일을 나누게 되지만, 현재는 아래처럼 하나의 파일로 시작해도 전혀 문제 없어요.
/프로젝트폴더
│
├── venv/ # 가상환경 폴더
├── app.py # Flask 메인 애플리케이션
간단하죠?
다음 단계에서는 app.py 내부 구조와 실행 흐름을 차근차근 배워볼 거예요.
Flask가 어떻게 실행되고, URL 요청을 어떻게 처리하는지 눈으로 확인할 시간입니다!
4. Flask 애플리케이션의 구조 이해하기 🧱
본격적으로 Flask 앱을 실행해보기 전에,
app.py 안에 어떤 코드가 들어가고 어떤 구조로 작동하는지부터 알아야 해요.
이해가 되면 앞으로 라우팅이든 템플릿이든, 어떤 기능을 추가할 때도 훨씬 수월해집니다. 😎
🧪 Flask 애플리케이션 생성: Flask(__name__)
from flask import Flask
app = Flask(__name__)
이 코드가 Flask 애플리케이션의 시작입니다.
여기서 __name__
은 파이썬 내장 변수로 현재 모듈의 이름을 나타내며,
Flask는 이를 통해 현재 파일이 직접 실행된 것인지 혹은 다른 모듈에서 import된 것인지를 구분해요.
🔀 라우팅과 뷰 함수 기본 구조
@app.route("/")
def home():
return "Hello, Flask!"
@app.route()
는 Flask에서 URL 경로를 정의하는 방법입니다.
위 예시에서는 / (루트 경로)로 들어오는 요청에 대해 home()
함수가 실행되고,
브라우저에 Hello, Flask!
가 출력돼요.
즉, 브라우저 요청 → Flask 라우터 → 뷰 함수 → 응답 반환의 구조입니다.
- 브라우저에서
http://localhost:5000/
요청 - Flask 내부 라우팅 시스템이 해당 URL을 찾음
home()
함수 실행- 문자열을 HTTP 응답으로 브라우저에 전달
🚦 개발 서버 실행: flask run
# 환경변수 설정 (Windows)
set FLASK_APP=app.py
# macOS / Linux
export FLASK_APP=app.py
# 개발 서버 실행
flask run
이제 브라우저에서 http://localhost:5000
에 접속하면 방금 만든 응답 메시지를 볼 수 있어요!
또한 --debug
옵션을 주면 코드 수정 시 자동 반영되고, 에러도 브라우저에서 확인할 수 있답니다.
지금까지 우리는 Flask 앱의 기본 구조를 확인했고, 어떻게 라우팅을 통해 요청을 처리하는지 익혔습니다.
이제 정말 재미있는 시간! 첫 번째 Flask 애플리케이션을 만들어볼 차례예요. ✨
5. 라우팅과 뷰 함수의 개념 🌐
웹 애플리케이션에서 라우팅(Routing)은 사용자가 특정 URL에 접근했을 때 어떤 기능을 실행할지 결정하는 중요한 역할을 해요.
Flask에서는 라우팅과 뷰 함수(View Function)를 아주 간단하게 설정할 수 있습니다.
🧭 라우팅(Routing)이란?
라우팅은 URL 경로와 처리할 함수를 연결하는 과정이에요.
예를 들어
사용자가 /hello
라는 주소에 접근했을 때 어떤 메시지를 보여줄지를 Flask에게 알려줘야 하죠.
@app.route('/hello')
def say_hello():
return "안녕하세요!"
위 코드에서 @app.route('/hello')
는 URL 경로 /hello
를 처리하는 역할을 해요.
사용자가 이 경로로 접속하면 say_hello()
함수가 실행되고, 그 반환값이 브라우저에 출력됩니다.
👀 뷰 함수(View Function)의 역할
뷰 함수는 URL 요청이 들어왔을 때 실행되는 함수입니다.
이 함수는 반드시 문자열, HTML, JSON 등 응답 가능한 형태의 데이터를 반환해야 해요.
즉, 라우팅은 주소와 함수를 연결하고, 뷰 함수는 실제로 실행되는 동작을 정의합니다.
🔄 클라이언트 요청부터 응답까지의 흐름
- 사용자가 브라우저에서
/hello
주소로 요청을 보냄 - Flask가 해당 경로에 맞는 라우트를 찾음
say_hello()
뷰 함수가 실행됨- 반환된 응답을 HTTP 형식으로 변환해 브라우저에 전달
🌐 다양한 라우트 경로 구성 팁
-
@app.route('/user/<username>')
: 동적인 URL 처리 (예: /user/alice) -
@app.route('/post/<int:post_id>')
: 숫자형 ID 처리 (예: /post/42)
Flask의 라우팅 시스템은 정말 강력하고 직관적이에요.
필요하다면 methods=['GET', 'POST']
옵션으로 요청 방식을 제한할 수도 있답니다.
다음 단계에서는 이 라우팅 구조를 직접 활용하여, 실습으로 "Hello, World!" 앱을 만들어볼 거예요! 😄
6. Hello, World! 앱 만들기 🚀
드디어 Flask 웹 애플리케이션을 직접 만들어볼 시간이에요! 지금까지 배운 내용을 바탕으로, 가장 기본적인 "Hello, World!" 메시지를 띄우는 웹 서비스를 구현해볼게요. 😄
👨💻 app.py 파일 작성
app.py
라는 이름으로 아래 코드를 작성하세요.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
딱 5줄이면 끝!
@app.route("/")
는 루트 경로를 의미하고,
hello()
함수는 브라우저에 Hello, World!
를 보여주는 역할을 합니다.
🚀 실행해보기
# 환경 변수 설정 (macOS/Linux)
export FLASK_APP=app.py
# Windows
set FLASK_APP=app.py
# 실행
flask run
명령어를 입력하고 나면 아래처럼 개발 서버가 실행됩니다.
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
웹 브라우저를 열고 http://localhost:5000에 접속해보세요.
짜잔~! "Hello, World!"라는 문구가 반겨줄 거예요. 🎉
🔁 기타 실행 팁
- 포트를 바꾸고 싶을 땐
flask run -p 8080
처럼 -p 옵션을 사용해보세요. -
--debug
옵션을 쓰면 코드 수정이 실시간 반영돼요! - 서버 종료는
CTRL + C
이제 여러분은 Flask 애플리케이션을 직접 만들고, 브라우저에서 요청을 처리해보는 과정을 경험하셨어요!
웹 개발의 첫 단추, 잘 꿰셨습니다. 👏
다음 단계부터는 이 구조를 바탕으로 템플릿, 폼, 데이터베이스 등 다양한 기능을 붙여나가게 될 거예요.
마무리 ✨
여기까지 따라오셨다면, Flask의 기본 개념과 개발 환경 설정부터 애플리케이션 실행까지 한 사이클을 완주하신 거예요. 🎉
단 몇 줄의 코드로 웹 서버를 만들고, 브라우저를 통해 직접 결과를 확인하는 그 짜릿한 경험, 어떠셨나요?
오늘 배운 내용은 앞으로 Flask를 이용한 웹 개발을 위한 아주 탄탄한 기초가 됩니다.
이후 템플릿을 연결하거나, 사용자 입력을 받고, 데이터를 저장하는 등 더 복잡한 기능으로 확장해 나가더라도,
모든 흐름의 뿌리는 이 기본적인 라우팅 → 뷰 함수 → 응답입니다.
이제 여러분도 "나, Flask 웹 앱 만들 수 있어!"라고 자신 있게 말할 수 있어요.
다음 글에서는 템플릿 엔진인 Jinja2를 통해 HTML을 다루고, 사용자 입력을 처리하는 방법도 하나씩 배워볼 예정입니다. 기대해주세요!
🙌 지금까지 수고 많으셨습니다.
실습을 꼭 따라해 보시고, 직접 오류도 만나보고 해결해 보는 과정이 가장 큰 공부가 됩니다!