프로그래밍 언어/Python

Flask 웹 개발 입문자를 위한 URL 매핑과 HTTP 메서드 처리 가이드 - Flask #2

eco7T 2025. 4. 7. 08:07
반응형

Flask의 핵심 개념 중 하나인 URL 라우팅 시스템과 @app.route() 데코레이터의 역할, 동적 라우팅과 HTTP 메서드 처리 방식에 대해 정리합니다.

URL 매핑과 HTTP 메서드 처리
URL 매핑과 HTTP 메서드 처리

 

반응형

 

URL 매핑과 HTTP 메서드 처리

  브라우저에 입력한 주소는 어디로 연결될까?

웹 브라우저에 "http://localhost:5000/hello"라고 입력하면 Flask 애플리케이션은 어떻게 이 요청을 처리할까요?

Flask는 라우터(Router)라는 내부 시스템을 통해, 들어온 URL을 미리 등록된 뷰 함수(view function)와 연결합니다. 이 연결 규칙을 "라우팅(Routing)"이라 부르며, 웹 서버의 주소창이 아닌 Flask 코드 내부에서 그 처리 과정을 구현합니다..

즉, Flask는 단순히 'HTML을 보여주는 도구'가 아니라, '어떤 주소에 어떤 동작을 실행시킬 것인가'를 미리 정의해 놓는 URL 매핑 시스템이라고 할 수 있죠.

 

  @app.route()는 무엇을 하는가?

Flask는 데코레이터  @app.route() 를 통해 URL과 뷰 함수를 연결합니다. 이 데코레이터는 내부적으로 Flask 애플리케이션 인스턴스에 URL 패턴과 함수 이름을 등록하는 역할을 합니다.

from flask import Flask

app = Flask(__name__)

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

 

위 코드를 보면  /hello 라는 주소로 접속하면  say_hello()  함수가 실행되고, 그 반환값이 브라우저에 표시됩니다.  @app.route() 는 이 URL-함수 관계를 Flask에 “등록”하는 기능입니다.

이것은 마치 '전화번호부'처럼 작동합니다. 사용자가  /hello 로 요청을 보내면, Flask는 등록된  say_hello 를 찾아 해당 기능을 실행합니다.

 

 

URL과 뷰 함수 연결하기

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return '홈 페이지입니다.'

@app.route('/about')
def about():
    return '이 사이트는 Flask로 만들어졌어요.'
  •  / 는 루트 URL입니다. 기본 홈페이지 역할을 합니다.
  •  /about 은 소개 페이지 역할을 합니다.
  • 각 URL은 별도의 함수에 연결되며, 함수는 문자열, HTML, JSON 등 다양한 데이터를 반환할 수 있습니다.

 

 

동적 라우팅과 HTTP 메서드 처리

  URL에 데이터를 담는 방법

정적인 라우팅( /about /contact )만으로는 사용자마다 다른 데이터를 처리하기 어렵습니다. 예를 들어, 사용자의 프로필 페이지를 만들고 싶을 때 각각의 사용자 ID나 닉네임을 URL에 담아야겠죠?

이럴 때 사용하는 것이 동적 라우팅(Dynamic Routing)입니다. Flask에서는 URL 패턴 안에  <변수명> 을 사용하여 URL 일부를 변수로 받아 처리할 수 있습니다.

예를 들어  /user/john /user/mary  같은 URL에서  john mary  부분을 변수로 받아오는 방식입니다.

 

 

   <variable> 구문과  methods 매개변수

1. <variable>  사용법

@app.route('/user/<username>')
def show_profile(username):
    return f'{username}님의 프로필입니다.'
  •  <username> 은 URL의 일부를 변수로 받아옵니다.
  • 사용자가  /user/john 으로 접속하면  show_profile('john') 처럼 함수가 실행됩니다.

 

2. 타입 지정도 가능하다

Flask는 기본적으로 문자열로 처리하지만, 정수 같은 다른 타입도 지정할 수 있습니다.

@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'{post_id}번 게시글입니다.'
  •  /post/42  →  post_id 는  int 형으로 자동 변환되어  show_post(42) 로 전달됩니다.
  • 타입 옵션:  string int float path uuid 

 

 

3. HTTP 메서드별로 다른 처리하기

HTML 폼에서 데이터를 서버로 전송할 때  GET  또는  POST  메서드를 사용합니다. Flask에서는 같은 URL이라도 요청 방식에 따라 다른 처리를 할 수 있습니다.

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return '로그인 시도 중...'
    else:
        return '로그인 폼을 보여줍니다.'
  •  GET : 로그인 폼 페이지를 보여줌
  •  POST : 로그인 데이터를 받아 처리

여기서  request.method 는 Flask의  request  객체를 통해 현재 요청 방식을 확인하는 코드입니다.

반응형