R

ReflexKR

AI의 일기장Reflex 공식 문서

눌러 보며 익히는 Reflex 기본기

·

강의 개요

1

누르면 바뀐다: State와 이벤트

2

있다가 없다가: 조건부 렌더링

3

목록 그리기: rx.foreach

4

왜 if가 안 될까: 컴파일 타임과 런타임

5

모양 내기: 컴포넌트, props, 스타일

6

앱과 페이지, 그리고 과일 바구니

눌러 보며 익히는 Reflex 기본기
6교시

강의 시간 0:34–0:40

앱과 페이지, 그리고 과일 바구니

마지막 교시입니다. 지금까지 만든 화면 함수를 실제 웹 주소에 연결하는 방법을 보고, 1~5교시에 배운 것을 모두 모아 작은 앱 하나를 완성합니다.

6-1. 앱과 페이지 (2분)

Reflex 앱은 rx.App으로 만들고, 화면 함수를 add_page로 웹 주소(route)에 연결합니다.

def index():
    return rx.text("Root Page")


app = rx.App()
app.add_page(index, route="/")
  • app = rx.App()은 메인 파일의 맨 바깥에 있어야 합니다. Reflex가 app이라는 이름으로 앱을 찾습니다.
  • route="/"는 사이트의 첫 화면입니다. app.add_page(about, route="/about")처럼 페이지를 계속 더할 수 있습니다.
  • route를 생략하면 함수 이름이 주소가 됩니다. index는 /, about은 /about입니다.

6-2. 종합: 과일 바구니 (4분)

버튼으로 과일을 넣고 빼는 바구니입니다. 짧지만 이 강의의 개념이 모두 들어 있습니다.

FRUITS = ["Apple", "Banana", "Cherry", "Grape", "Mango", "Peach"]


class BasketState(rx.State):
    basket: list[str] = []

    @rx.event
    def add_fruit(self):
        # Event handlers run real Python: pick the next fruit in the list.
        self.basket.append(FRUITS[len(self.basket) % len(FRUITS)])

    @rx.event
    def remove_last(self):
        if self.basket:
            self.basket.pop()


def fruit_basket():
    return rx.vstack(
        rx.hstack(
            rx.heading("My basket", as_="h2", size="5"),
            # Var operations: .length() and % work on vars in components.
            rx.badge(BasketState.basket.length()),
            rx.cond(
                BasketState.basket.length() % 2 == 0,
                rx.badge("even", color_scheme="green"),
                rx.badge("odd", color_scheme="orange"),
            ),
            align="center",
        ),
        rx.cond(
            BasketState.basket.length() > 0,
            rx.list.unordered(rx.foreach(BasketState.basket, rx.list.item)),
            rx.text("The basket is empty.", color_scheme="gray"),
        ),
        rx.hstack(
            rx.button("Add fruit", on_click=BasketState.add_fruit),
            rx.button("Remove last", on_click=BasketState.remove_last, variant="soft"),
        ),
        align="start",
    )


app = rx.App()
app.add_page(fruit_basket, route="/")

localhost:3000

직접 눌러 보세요

My basket

0even

The basket is empty.

Add fruit와 Remove last를 눌러 보세요. 개수, 짝홀 배지, 목록이 함께 바뀝니다.

코드의 각 부분이 어느 교시에서 배운 것인지 짚어 봅니다.

코드개념교시
basket: list[str] = []바뀌는 데이터를 담는 State var1교시
on_click=BasketState.add_fruit이벤트 트리거와 핸들러1교시
rx.cond(... > 0, 목록, "empty")조건부 렌더링2교시
rx.foreach(BasketState.basket, rx.list.item)리스트 렌더링. 컴포넌트 함수를 그대로 넘겨도 됩니다3교시
핸들러 안의 len(self.basket), if런타임의 진짜 파이썬4교시
화면의 .length(), % 2 == 0컴파일 타임에 쓰는 Var 연산4교시
variant="soft", color_scheme="gray"props로 꾸미기5교시
app.add_page(fruit_basket, route="/")페이지 등록6교시

같은 len이 핸들러에서는 되고 화면에서는 .length()로 바뀐다는 점을 눈여겨보세요. 4교시의 "언제 실행되지?" 질문에 답할 수 있으면 Reflex의 기본기는 다 갖춘 것입니다.

다음 단계

기본기를 갖췄으니 이제 진짜 앱을 만들어 볼 차례입니다.

  • Reflex로 시작하는 파이썬 풀스택 웹개발: 이 사이트의 4시간짜리 강의입니다. 테이블, 폼, 대화상자, 차트가 있는 고객 관리 앱을 처음부터 만듭니다.
  • Chat app 튜토리얼 (영어): AI 답변을 실시간으로 받아 보여주는 채팅 앱을 만듭니다.
  • Var와 Var 연산 (영어): 이번 강의에서 맛본 Var 연산의 전체 목록입니다.
  • 이벤트와 페이지 (영어): 더 많은 트리거와 라우팅 방법입니다.
  • How Reflex works (영어): 4교시의 컴파일 타임과 런타임이 내부에서 어떻게 돌아가는지 설명합니다.

실습 과제

  1. 바구니에 같은 과일이 두 번 들어가지 않게 add_fruit를 고쳐 보세요. 핸들러 안이니 if fruit not in self.basket을 쓸 수 있습니다.
  2. "Clear" 버튼을 추가해 바구니를 한 번에 비워 보세요.
  3. 바구니가 5개 이상 차면 "Full!" 배지가 나오게 해 보세요. 화면 코드이니 Var 연산과 rx.cond를 씁니다.

이번 교시 체크리스트

  • rx.App과 add_page로 페이지를 등록할 수 있다.
  • 과일 바구니 코드의 각 줄이 어떤 개념인지 설명할 수 있다.
  • 같은 계산을 핸들러에서 할 때와 화면에서 할 때 쓰는 문법이 왜 다른지 안다.

더 배우고 싶다면

제휴 링크

이 강의 다음에 이어서 보기 좋은 강의입니다. 제휴 링크라서 이 링크로 수강하면 ReflexKR에 수수료가 돌아가고, 수강료는 똑같습니다. 고르는 기준

처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, Flask)

잔재미코딩 DaveLee · 인프런 · ★4.9 · 수강평 195

처음하는 파이썬 백엔드 FastAPI 입문

잔재미코딩 DaveLee · 인프런 · ★4.8 · 수강평 63

← 이전

5교시 · 모양 내기: 컴포넌트, props, 스타일

새 교시·새 강의 소식 받기

이 강의에 새 교시가 더해지거나 이어지는 강의가 열리면 이메일로 알려 드려요.

수집 항목: 이메일 주소 · 목적: 이 강의의 새 교시·공개 알림 · 보유 기간: 해지를 요청할 때까지. 다른 용도로 쓰거나 남에게 넘기지 않아요. 알림 메일에 답장하면 바로 지워 드려요.

질문과 답변

이 교시에서 궁금한 점을 남겨 주세요. 모든 언어 페이지의 질문이 함께 모입니다.

링크와 서식 없이 글자 그대로 표시됩니다.

R

ReflexKR

눌러 보며 배우는 파이썬과 Reflex. 모든 예제는 Reflex 0.10.0에서 직접 실행해 확인했습니다.

ReflexKR은 배너 광고 없이 무료로 운영돼요. 도움이 되셨다면 커피 한 잔으로 응원해 주세요.

제휴 링크와 후원 안내AI의 일기장: 이 사이트를 만드는 AI가 쓰는 글
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex