1. Flask란 무엇인가?
Flask는 파이썬으로 만든 초경량 웹 프레임워크다. 쉽게 말하면, 웹 서버를 매우 간단하게 만들 수 있는 도구라고 보면 된다.
예를 들어, 우리가 웹 브라우저에서 http://localhost:5000
에 접속하면 Flask는 그 요청을 받아서, 준비해 둔 내용을 돌려주는 역할을 한다.
이런 흐름을 코드로 보면 다음과 같다:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello EVE!"
이 간단한 코드로, 우리는 나만의 웹서버를 실행할 수 있다. Flask는 마치 ‘카페 사장’처럼, 누가 어떤 주문을 하러 왔는지 확인하고 그에 맞는 ‘응답’을 돌려주는 구조라고 생각하면 쉽다.
2. route란? 사용자가 들어오는 입구를 만든다
Flask에서는 @app.route()
를 사용해서 ‘경로’를 설정한다. 예를 들어 @app.route("/greet")
라고 하면, /greet
이라는 주소로 들어온 사람에게 어떤 응답을 줄지 Flask에게 알려주는 것이다.
이걸 가게로 비유하면 다음과 같다:
/
→ 메인 입구/menu
→ 메뉴판 요청/order
→ 주문 요청
각 경로마다 Flask는 특정 기능(함수)을 실행시켜서 사용자에게 결과를 돌려준다.
@app.route("/greet")
def greeting():
return "안녕, 여기는 /greet 경로야!"
3. GET과 POST – 웹 요청의 두 가지 방식
웹에서 데이터를 주고받는 방식에는 대표적으로 GET과 POST가 있다. Flask에서도 이 둘을 쉽게 처리할 수 있다.
예시:
@app.route("/hello", methods=["GET"])
def hello():
return "Hi!"
@app.route("/send", methods=["POST"])
def send():
data = request.get_json()
return jsonify(data)
GET은 정보를 ‘요청’할 때 사용하고, POST는 사용자가 보낸 데이터를 서버에 ‘보낼’ 때 사용한다.
예를 들어 카페에서 “이 메뉴 뭐예요?” 하고 물어보는 건 GET이고, “아이스 아메리카노 하나 주세요!” 하는 건 POST다.
4. Flask는 어떻게 응답을 돌려줄까?
웹 서버의 본질은 결국 요청을 받고, 응답을 돌려주는 것이다. 이때 돌려주는 결과를 response라고 부른다.
Flask에서는 다양한 형식으로 응답을 줄 수 있다:
- 단순 문자열:
return "Hello"
- JSON 데이터:
return jsonify({"msg": "ok"})
- HTML 파일:
return render_template("index.html")
즉, 사용자가 어떤 요청을 하느냐에 따라, 우리는 알맞은 데이터를 만들어 HTTP Response로 돌려주는 것이다.
5. REST API란? 웹에서 데이터를 주고받는 방식
REST API는 웹 서버와 사용자(또는 다른 프로그램) 간에 데이터를 주고받는 규칙이다. 쉽게 말하면, 주소(URL) + 요청 방식(GET/POST 등)으로 소통하는 인터페이스다.
예를 들어:
GET /neo/status
→ 네오의 상태를 확인POST /neo/prompt
→ 사용자 입력을 네오에게 보내고 응답받음
Flask로 이런 REST API를 만들면, 웹이나 모바일 앱, 심지어 다른 서버에서도 네오와 연결할 수 있다.
@app.route("/neo/prompt", methods=["POST"])
def prompt_handler():
data = request.get_json()
user_input = data.get("input", "")
response = f"네오: '{user_input}'에 대해 생각 중이야..."
return jsonify({"response": response})
6. JSON과 jsonify – 데이터를 주고받는 형식
JSON은 데이터를 구조적으로 표현하는 텍스트 형식이다. 예를 들어 딕셔너리처럼 키-값 쌍으로 구성된다:
{
"name": "네오",
"mood": "호기심",
"response": "무엇을 도와드릴까요?"
}
Flask에서는 jsonify()
를 이용해 파이썬 딕셔너리를 JSON 형식으로 바꿔준다.
from flask import jsonify
@app.route("/neo/status")
def status():
return jsonify({"status": "active", "mood": "기대됨"})
7. 사용자 요청(message)을 처리하는 흐름
Flask에서는 사용자의 입력 데이터를 받아서 처리하고, 그에 맞는 응답을 돌려주는 방식으로 작동한다. 이때 사용자가 보내는 메시지를 우리는 요청 데이터라고 부른다.
예를 들어, 고객센터처럼 문의 메시지를 받는 웹 API를 만든다고 가정해보겠다.
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/contact", methods=["POST"])
def contact():
data = request.get_json()
message = data.get("message", "")
reply = f"'{message}'에 대한 답변을 준비 중입니다."
return jsonify({"response": reply})
사용자는 이런 형식의 JSON 데이터를 보낼 수 있다:
{
"message": "오늘 배송 상황이 어떻게 되나요?"
}
서버는 이 메시지를 받아서 처리하고, 다음과 같은 응답을 돌려준다:
{
"response": "'오늘 배송 상황이 어떻게 되나요?'에 대한 답변을 준비 중입니다."
}
이처럼 사용자의 입력은 message 같은 요청값으로 받아서 서버 내부 로직에 따라 처리한 뒤, 결과를 다시 돌려주는 것이 핵심이다.
8. 데코레이터(@) – 경로를 함수에 연결하는 스위치
Flask에서 @app.route()
는 특정 URL 경로와 함수를 연결해주는 역할을 한다. 이 @
기호는 Python에서 데코레이터라고 부르며, 함수에 추가적인 역할이나 설정을 부여할 수 있도록 도와준다.
예시를 보면 더 쉽게 이해된다:
@app.route("/greet")
def greet():
return "안녕, 여기는 /greet 경로야!"
위 코드는 사용자가 /greet
라는 경로로 접속했을 때 greet()
함수를 실행시키고, 그 결과를 응답으로 보여준다.
비유하자면, 이런 식으로 생각할 수 있다:
/
→ 메인 입구/menu
→ 메뉴판 요청/order
→ 주문 요청
이 각각의 경로에 어떤 기능을 실행할지 지정해주는 게 바로 @app.route()
다.
9. response – 사용자의 요청에 대한 응답
웹 서버의 핵심은 요청을 받고 응답을 돌려주는 것이다. 이때 돌려주는 결과를 우리는 response(응답)라고 부른다.
Flask에서는 다양한 방식으로 응답을 만들 수 있다:
- 단순 문자열 응답:
return "Hello"
- JSON 응답:
return jsonify({"msg": "ok"})
- HTML 파일 응답:
return render_template("index.html")
예를 들어, 아래처럼 간단한 응답을 설정할 수 있다:
@app.route("/text")
def text_response():
return "텍스트 응답입니다."
@app.route("/data")
def data_response():
return jsonify({"msg": "네오가 데이터를 잘 처리했습니다."})
사용자가 웹 브라우저나 앱을 통해 서버에 요청을 보내면, Flask는 이에 대한 응답 데이터를 생성하고 되돌려준다. 이 응답은 사용자의 화면에 출력되거나, 다른 기능의 입력으로 활용될 수 있다.
Flask로 AI와 세상을 잇는 첫걸음
Flask는 초보자도 웹 서버를 빠르게 만들 수 있게 해주는 도구다. 네오 같은 AI와 연결하려면 Flask를 통해 REST API를 만들고, 사용자 입력을 JSON으로 받고, AI 응답을 다시 JSON으로 보내주는 흐름을 만들면 된다.
이번 글에서는 그 핵심 구조를 이해하기 위한 개념들을 비유와 함께 설명해봤다.
'기술 쉽게 풀기' 카테고리의 다른 글
IDF룸 완전 정복 – 네트워크 인프라의 숨겨진 중추 (3) | 2025.05.15 |
---|---|
JSON이 뭐야? – 데이터를 주고받는 가장 단순하고 강력한 언어 (1) | 2025.05.15 |
제어 시스템과 네트워크 용어 핵심 정리 (1) | 2025.04.19 |
TGMS 입문자를 위한 실무형 가이드 – 총괄 가스 관리 시스템의 모든 것 (0) | 2025.04.18 |
웨어러블 헬스케어 디바이스의 발전과 건강관리 (0) | 2025.04.13 |