본문으로 건너뛰기

2. 핵심 개념

Projects, Pages, and Widgets Intro (프로젝트, 페이지, 위젯 소개)

Project

  • 독립적으로 완결된 앱입니다 — 애플리케이션을 구성하는 모든 파일이 assets 폴더 아래에 정리되어 있습니다(pages, scripts, providers, theme 등). 새 프로젝트를 만들면 이 파일들이 자동으로 생성됩니다.
  • 프로젝트를 만들고 관리하는 방법을 더 알아보려면 Manage Projects in Lucy Team Cloud 문서를 참고하세요.

Page

  • Page는 앱의 화면 한 장이며, 화면 사이를 이동하는 단위입니다 — 내비게이션 레이어라고 생각하면 됩니다.
  • 각 Page 안에는 실제로 동작하는 인터랙티브 콘텐츠를 담는 Form이 있습니다 — 인터랙션 레이어입니다.
  • Form은 페이지의 위젯 트리, 스크립트, 데이터를 담고 있습니다.
  • 참고: 여기서 말하는 Form은 FormContainer 위젯과는 다릅니다 — FormContainer 위젯은 하나의 Form 안에 다른 Form을 끼워 넣을 수 있게 해주는 위젯입니다.
  • 페이지를 만들고 관리하는 방법을 더 알아보려면 Layout and Screen Design 문서를 참고하세요.

Widget

  • Widget은 Form 안에 배치되는 시각적 구성 요소입니다.

Layout Concepts (레이아웃 개념)

  • 레이아웃 위젯은 Lucy Studio에서 디자인을 이루는 가장 기본적인 구성 요소입니다. 페이지에 구조를 부여하고, 그 안에 담긴 위젯들을 정렬할 수 있게 해줍니다. Lucy Studio에서는 모든 레이아웃 위젯이 하나의 섹션으로 묶여 있지만, 개념적으로는 Basic, List, Area 세 그룹으로 나눠 생각할 수 있습니다.
  • 아래는 이 위젯들에 대한 간단한 소개입니다. 개별 레이아웃 위젯과 그 속성, 더 깊이 있는 레이아웃 개념을 알아보려면 Layout and Screen DesignWork with Widgets 문서를 참고하세요.

Basic Layout Widgets

레이아웃 위젯은 다른 위젯을 그 안에 담습니다. 레이아웃 안에 배치된 위젯은 그 레이아웃의 child(자식)이고, 레이아웃은 그 child의 parent(부모, 한 단계 위)입니다. 같은 parent를 공유하는 위젯들은 서로 sibling(형제, 같은 레벨)입니다. 이런 parent → child → sibling 구조를 위젯 트리(widget tree)라고 부릅니다.

위젯 트리 구조

  • Column vs Row:

    • Column: 자식들을 위에서 아래로 배치합니다.
    • Row: 자식들을 왼쪽에서 오른쪽으로 배치합니다.

    Column과 Row 비교

  • Stack: 자식들을 서로 겹쳐서 쌓습니다 (팬케이크를 쌓은 모습을 떠올리면 됩니다).

    Stack 레이아웃

  • Wrap: 자식들을 한 줄로 배치하다가, 공간이 부족해지면 남는 것들을 다음 줄로 넘깁니다.

    Wrap 레이아웃

  • Main-Axis vs Cross-Axis:

    • Column — Column은 자식을 위에서 아래로 배치하므로, main-axis(주축)는 세로 방향이고 cross-axis(교차축)는 가로 방향입니다.

    Column의 main-axis

    • Row — Row는 자식을 왼쪽에서 오른쪽으로 배치하므로, main-axis(주축)는 가로 방향이고 cross-axis(교차축)는 세로 방향입니다.

    Row의 main-axis

List Layout Widgets

  • ListView: 1차원으로 스크롤되는 리스트
  • GridView: 2차원 그리드 레이아웃
  • MasonryGrid: 고정된 컬럼 안에 높이가 제각각인 카드를 배치

Area Layout Widgets

  • SafeArea: 모바일 기기의 노치, 내비게이션 바, 홈 인디케이터와 겹치지 않도록 자동으로 여백을 추가합니다.
  • Card: 그룹화된 콘텐츠를 담는 Material 스타일 카드 컨테이너
  • PageView: 페이지 단위로 스크롤되는 뷰
  • VSplit: 페이지 영역을 수직으로 분할
  • HSplit: 페이지 영역을 수평으로 분할

Applying Style to Widgets (위젯에 스타일 적용하기)

모든 위젯은 위젯 스타일이라는 내부 데코레이터로 감쌀 수 있습니다. 다른 위젯을 담는 레이아웃 위젯과 달리, 위젯 스타일은 하나의 위젯을 감싸서 그 위젯 주변의 위젯 트리 구조는 바꾸지 않으면서 보이는 모습이나 동작 방식만 바꿉니다. 같은 위젯에 여러 스타일을 겹쳐 적용할 수 있으며, 가장 바깥쪽부터 안쪽 순서로 적용됩니다.

이 스타일들을 적용하고 사용하는 방법을 더 알아보려면 Styles 문서를 참고하세요.

Design System & Components (디자인 시스템 & 컴포넌트)

Design System

Lucy의 디자인 시스템은 Styles 대화상자에서 관리하는 재사용 가능한 스타일 모음입니다 — Text Styles, Color Themes, Icon Sets. 한 번 정의해두면 앱 전체에서 재사용할 수 있고, 정의를 바꾸면 그것을 쓰는 모든 곳이 자동으로 갱신됩니다. 덕분에 모든 화면이 일관된 모습을 유지할 수 있습니다.

Styles 대화상자

  • Text Styles: 이름이 붙은, 재사용 가능한 타이포그래피
  • Color Themes: 이름이 붙은 색상으로, 라이트/다크 테마 변형을 가집니다. Color Theme는 테마를 인식하므로 하나의 색상이 라이트/다크에 따라 서로 다른 값을 가질 수 있고, 앱은 실행 중에 테마를 전환할 수 있습니다($app.changeTheme).
  • Icon Sets: 재사용 가능한 아이콘 모음

Components

Lucy Studio의 Component는 한 번 만들어두고 앱 전체에서 재사용할 수 있는 위젯 그룹입니다. 마스터를 변경하면 앱 전체에 있는 그 인스턴스들이 함께 갱신됩니다. Lucy Studio에서 컴포넌트를 사용하는 방법을 더 자세히 알아보려면 Work with Widgets 문서를 참고하세요.

  • Component vs. page — page는 이동 가능한 화면이고, component는 페이지 안에 끼워 넣는 재사용 가능한 조각입니다.
  • Master vs. instance — 마스터 정의는 하나이고, 그것을 사용하는 각 위치가 인스턴스입니다. 인스턴스는 자신만의 값(인스턴스별 속성, 변수)으로 재정의할 수 있습니다.

Data Binding (데이터 바인딩)

Data Binding은 위젯 속성의 값이 어디서 오는지를 미리 정해두는 방법입니다. 위젯의 Properties 패널에서 속성을 고를 때, 이미 값을 담고 있는 사전 정의된 Data Set에 그 속성을 연결할 수 있습니다.

한 번 연결해두면, 연결된 소스가 바뀔 때마다 Lucy Studio가 자동으로 위젯을 최신 상태로 유지합니다. 스크립트로 값을 직접 설정하는 것과 다른 점이 바로 이 부분입니다 — 스크립트는 그 순간에 딱 한 번만 값을 밀어넣지만, 바인딩은 소스를 계속 지켜보다가 바뀔 때마다 반응합니다.

각 연결 대상에 대한 자세한 내용은 Data and State Management 문서를 참고하세요.

Script (스크립트)

Lucy Studio는 표준 JavaScript와 플랫폼 API를 결합해서 복잡한 로직과 동적인 동작을 구현할 수 있게 해줍니다. 예를 들어 사용자 이벤트에 실시간으로 반응하거나, 실행 중에 위젯 속성을 동적으로 바꾸거나, 서버에 데이터를 요청해서 화면에 반영하거나, 페이지 간 이동 같은 앱의 흐름을 제어할 수 있습니다.

화면에 배치된 위젯은 자동으로 스크립트 전역 객체로 등록되므로, 스크립트에서 위젯의 ID로 바로 그 위젯을 참조할 수 있습니다(예: button1.visible = false).

스크립트 작성 방법과 사용 가능한 전역 객체·함수에 대한 자세한 내용은 Logic and Scripting 문서를 참고하세요.

Animation Mode

Animation Mode는 코드를 작성하지 않고도 화면에서 바로 위젯의 동작 조건과 실행 로직을 구성할 수 있는 NoCode 로직 도구입니다. UI에서 조건과 반응을 선택하고 연결하는 것만으로 복잡한 인터랙션을 만들 수 있어서, 스크립트 없이도 빠르고 직관적으로 로직을 구성할 수 있습니다. 크게 세 가지 기능으로 구성됩니다.

  • Detect Transition 변수나 위젯 속성 값의 변화를 감지해서, 설정해둔 조건이 충족되면 등록해둔 반응을 자동으로 실행합니다.
  • State Transition 위젯이 다른 상태로 바뀔 때 재생되는 애니메이션 효과를 설정합니다. (예: 버튼의 색상이 다른 색으로 서서히 바뀌는 것)
  • Action 특정 사용자 동작(이벤트)에 반응해서 실행할 로직을 설정합니다. (예: 버튼을 탭했을 때 다른 페이지로 이동) 여러 Action을 순차적으로 또는 동시에 실행할 수 있고, 조건에 따라 실행 여부를 제어할 수 있습니다.

자세한 내용은 Studio Interface 섹션을 참고하세요.

Workflow: Build in Studio, Preview in Player (워크플로우: 스튜디오에서 제작, 플레이어에서 미리보기)

What Lucy Player Is (Lucy Player란)

Lucy Player를 사용하면 Lucy Studio에서 만든 디자인을 실시간으로 테스트해볼 수 있습니다. iOS, Android, Windows, macOS에서 실행되므로 실제 기기에서 화면을 미리 볼 수 있습니다.

How Studio & Player Connect (Studio와 Player의 연결 방식)

Lucy Player와 Lucy Studio 사이의 연결은 환경에 따라 몇 가지 방식으로 이루어집니다.

  • 같은 네트워크에 연결되어 있으면 Lucy Studio가 Lucy Player를 자동으로 찾습니다.
  • 같은 컴퓨터에서 실행 중이면 Lucy Player가 즉시 감지되어 연결됩니다.
  • 서로 다른 네트워크에 연결되어 있는 경우(예: 셀룰러 데이터를 사용 중인 경우)에는 Lucy Studio가 생성한 QR 코드를 스캔해야 합니다.

Live Preview (실시간 미리보기)

캔버스에서 페이지를 편집한 뒤에는 바로 실제 기기에서 그 편집 내용을 확인하며 디자인이 실제로 어떻게 보일지 볼 수 있습니다. Lucy Player와 연결하고, 화면을 보낼 기기를 선택한 뒤 Lucy Studio의 Action bar에서 재생 버튼을 누르기만 하면 됩니다. Lucy Player를 설정하고 Lucy Studio와 연결하는 더 자세한 단계는 Test and Debug 문서를 참고하세요.