크로스 플랫폼 및 모바일 UI · 새 리소스

React Native Elements 디자인 시스템.

React Native Elements 5.0.0으로 완성도 높은 집중 계획 작성기를 만들어 보세요. 실제 테마 역할, 제어 가능한 입력과 선택 항목, 유효성 검사, 로컬 확인 기능을 구현하고 웹 빌드까지 테스트합니다.

OpenDesign 가이드7개 챕터참조 항목 39개독자적 적용 가이드
01

React Native Elements 디자인 시스템 인터페이스 미리보기

작업, 시간, 휴식 옵션을 수정하고 유효성 검사, 표시 방식, 초기화를 확인하세요.

로컬 집중 계획 구성전체 예시 열기
React Native Web 0.21.3 및 React 19.2.0을 통한 네이티브 RNEUI 5.0.0. · 구현 레퍼런스
02

React Native Elements 디자인 시스템 디자인 레퍼런스

고정된 RNEUI 소스 기본값, 공개 컴포넌트 API, 명시적으로 구분된 애플리케이션 설정입니다.

라이트 테마 색상

출처
이름 / 규칙값 / 구성용도
lightColors.primary#2089dc 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.secondary#ad1457 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.background#ffffff 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.black#242424 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.white#ffffff 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.grey1#43484d 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.grey2#5e6977 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.grey5#e1e8ee 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.success#52c41a 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.error#ff190c 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
lightColors.warning#faad14 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.

다크 테마 색상

출처
이름 / 규칙값 / 구성용도
darkColors.primary#439ce0 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.secondary#aa49eb 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.background#080808 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.black#f2f2f2 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.white#080808 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.grey1#bdc6cf 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.grey2#86939e 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.grey5#393e42 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.success#439946 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.error#bf2c24 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.
darkColors.warning#cfbe27 실제 RNEUI 테마 값입니다. black/white 같은 역할은 다크 모드에서 시각적 의미가 반전되므로, 하드코딩한 색상값 대신 활성 테마를 사용하세요.

기본 간격 및 명시적 애플리케이션 설정

출처
이름 / 규칙값 / 구성용도
spacing.xs2공개된 기본 간격 항목입니다. 이 이름은 테마 객체를 구성하며, CSS 변수 토큰을 구성하지 않습니다.
spacing.sm4공개된 기본 간격 항목입니다. 이 이름은 테마 객체를 구성하며, CSS 변수 토큰을 구성하지 않습니다.
spacing.md8공개된 기본 간격 항목입니다. 이 이름은 테마 객체를 구성하며, CSS 변수 토큰을 구성하지 않습니다.
spacing.lg12공개된 기본 간격 항목입니다. 이 이름은 테마 객체를 구성하며, CSS 변수 토큰을 구성하지 않습니다.
spacing.xl24공개된 기본 간격 항목입니다. 이 이름은 테마 객체를 구성하며, CSS 변수 토큰을 구성하지 않습니다.
Sample heading32px / weight 700공식 전역 유형이나 반경 토큰으로 정의된 것이 아니라, 제공된 소스에 명시적으로 설정된 원본 예제 값입니다.
Sample body15px / 23px line height공식 전역 유형이나 반경 토큰으로 정의된 것이 아니라, 제공된 소스에 명시적으로 설정된 원본 예제 값입니다.
Sample cards24px padding / 8px radius공식 전역 유형이나 반경 토큰으로 정의된 것이 아니라, 제공된 소스에 명시적으로 설정된 원본 예제 값입니다.
Button component defaultradius: 6공식 전역 유형이나 반경 토큰으로 정의된 것이 아니라, 제공된 소스에 명시적으로 설정된 원본 예제 값입니다.

컴포넌트 및 프로바이더 계약

출처
이름 / 규칙값 / 구성용도
createThememode, components, lightColors, darkColorsThemeProvider는 구성된 객체를 받으며, 컴포넌트만 변경하는 경우 기본값을 계속 사용할 수 있습니다.
useThemetheme, updateTheme화면 모양 변경 동작은 애플리케이션 상태를 초기화하지 않고 모드를 변경합니다.
Inputvalue, onChangeText, errorMessage, ref작업이 비어 있을 때 오류가 표시되고 포커스가 실제 입력란으로 돌아갑니다.
ButtonGroupbuttons, selectedIndex, onPress제어되는 인덱스는 15분, 25분 또는 45분을 선택합니다. 인덱스 자체가 시간 길이를 뜻하지는 않습니다.
Switchvalue, onValueChange제어되는 불리언 값에 따라 휴식 설명이 바뀝니다.
CardCard.Title, Card.Divider구조화된 표면은 선택한 테마를 따릅니다.
Buttontitle, onPress, type저장 동작은 로컬 상태를 검증하고, 초기화 동작은 기본값을 복원합니다.
SafeAreaProviderOuter application provider필수 통합 컨텍스트입니다. 웹에서 정상 작동한다고 해서 네이티브 기기의 안전 영역 동작까지 검증되는 것은 아닙니다.
03

React Native Elements 디자인 시스템 전체 가이드

실제 인터페이스를 위해 이 시스템을 선택하고 적용하고 검토하는 실용 가이드.

DESIGN-react-native-elements.md

완전한 안내와 구현 시작점, 소스 링크.

가이드 다운로드

React Native Elements 디자인 시스템 런타임 및 웹 범위

실제 테마 적용 컴포넌트 실행하기

이 예제는 @rneui/themed 및 @rneui/base 5.0.0, React 19.2.0, React Native Web 0.21.3을 사용합니다. 브라우저 빌드에서는 react-native를 react-native-web으로 별칭 처리하고, 일반 JavaScript 모듈보다 .web.js 모듈을 먼저 선택합니다. 이는 모바일 스크린샷을 흉내 낸 HTML 상자가 아니라, 웹에서 렌더링되는 실제 라이브러리 컴포넌트입니다. 제공된 빌드 파일에는 이 해석 설정이 포함되어 있어 독립 실행형 코드에서도 미리 보기를 재현할 수 있습니다.

이 OpenDesign 가이드에서

웹과 네이티브의 검증 근거를 구분하세요

이 구성은 집중 계획 편집기이지, 실행 중인 타이머나 알림 관리자가 아닙니다. 통합에 필요한 SafeAreaProvider로 애플리케이션을 감싸지만, 이 브라우저 테스트로는 iOS 또는 Android의 인셋, 네이티브 키보드 동작, 기기 알림 권한을 검증할 수 없습니다. 네이티브 프로젝트에서는 이 공용 컴포넌트 예제에 더해 플랫폼별 빌드와 기기 테스트가 필요합니다.

  • 웹 렌더링에는 React Native Web을 사용합니다.
  • 계획은 로컬 React 상태에만 저장됩니다.
  • 타이머, 시스템 알림 또는 백엔드 저장은 시작되지 않습니다.

React Native Elements 디자인 시스템 테마 객체와 색상

활성 테마 역할 사용하기

createTheme은 기본 라이트 및 다크 색상에 명시적인 재정의 값을 병합합니다. 이 예제에서는 컴포넌트 기본값과 모드만 변경합니다. useTheme은 확인된 색상을 주변의 View 및 Text 요소에 전달하므로 큰 제목, 설명, 패널이 선택한 화면 모양을 따릅니다. 다크 모드에서 black은 밝은 전경 역할을 하고 white는 어두운 표면 역할을 합니다. 이 이름들을 문자 그대로의 색상값으로 취급하면 테마가 제대로 작동하지 않습니다.

범용 타이포그래피 척도를 임의로 만들지 마세요

RNEUI는 CSS 디자인 시스템과 동일한 토큰 모델을 제공하기보다 컴포넌트 기본값과 사용자 지정 훅을 제공합니다. 따라서 이 문서에서는 실제 defaultSpacing 항목과 예제의 32px 제목, 15px 본문, 8px 카드 모서리 반경을 구분합니다. 이러한 치수는 코드에 명시된 원본 구성 설정입니다. 이를 필수 React Native Elements 브랜드 규칙으로 설명해서는 안 됩니다.

React Native Elements 디자인 시스템 입력 검증 및 포커스

작업 텍스트를 명시적으로 제어하세요

Input에는 value와 onChangeText 콜백이 전달됩니다. 저장 동작은 값이 비어 있는지 확인하기 전에 공백을 제거합니다. 비어 있으면 errorMessage에 구체적인 요청을 표시하고 컴포넌트 ref를 통해 입력란으로 포커스를 돌립니다. 텍스트가 바뀌면 이전 오류를 지우고 로컬 확인 상태를 무효화하여, 수정된 계획을 오래된 저장 완료 메시지가 설명하지 않도록 합니다.

레이블과 오류를 함께 사용하세요

화면에 표시되는 Focus task 레이블과 accessibilityLabel은 같은 컨트롤을 가리킵니다. 플레이스홀더는 입력 내용을 안내하지만 레이블을 대체하지는 않습니다. 검증은 키를 누를 때마다가 아니라 명시적인 저장 동작으로 실행됩니다. 오류가 발생해도 사용자는 초안을 유지할 수 있으며, 실제로 발생하지 않는 서버 요청을 암시하는 비동기 저장 애니메이션은 표시하지 않습니다.

React Native Elements 디자인 시스템 제어형 선택

선택된 인덱스와 시간을 구분하세요

ButtonGroup에는 세 개의 레이블, selectedIndex, onPress가 전달됩니다. 반환된 인덱스는 원본 [15, 25, 45]분 목록에서 값을 선택합니다. 이 인덱스를 분 단위 시간으로 바로 사용하면 애플리케이션 오류가 발생합니다. 미리 보기의 큰 숫자 요약도 같은 선택 인덱스에서 계산되므로 세그먼트 컨트롤과 읽기 쉬운 계획 내용이 서로 일치합니다.

휴식 선택 항목을 실제 불리언 값으로 처리하세요

React Native Elements 디자인 시스템 상태 보존 및 초기화

테마와 계획을 서로 독립적으로 유지하세요

화면 모양을 바꾸면 반대 모드로 updateTheme을 호출합니다. 작업, 선택한 시간, 휴식 설정, 로컬 확인 상태는 이 업데이트와 별개인 애플리케이션 상태로 유지됩니다. 네이티브 컴포넌트는 계획을 다시 구성하지 않고 새 테마를 적용합니다. 브라우저 테스트에서는 사용자 지정 작업을 입력한 뒤 화면 모양을 바꿔 시각적 모드가 데이터 초기화와 실수로 연결되지 않았는지 확인합니다.

명확한 복구 동작 하나를 제공하세요

계획 초기화는 예제 작업, 25분 시간, 휴식 활성화 상태를 복원하고 검증 오류와 확인 메시지를 지웁니다. 선택한 화면 모양은 유지됩니다. 이렇게 하면 콘텐츠 초기화와 테마 설정을 분리하고 예상치 못한 전체 페이지 새로고침을 방지할 수 있습니다. 이 예제에는 영속성 계층이 없으므로 문서를 다시 열면 처음 예제 상태로 시작합니다.

React Native Elements 디자인 시스템 반응형 구성

두 카드 레이아웃 조정하기

콘텐츠는 useWindowDimensions를 사용해 너비가 700px를 넘으면 행으로, 더 좁으면 열로 표시합니다. 각 Card의 바깥 여백은 0으로 설정해 구성 요소 사이의 24px 간격으로 정렬을 제어합니다. 너비가 500px 미만이면 바깥쪽 패딩을 16px로 줄입니다. 두 카드에는 장식용 자리 표시자를 반복하는 대신 편집 가능한 계획과 그에 따라 생성되는 요약을 표시합니다.

두 테마에서 컴포넌트 기본값 확인

RNEUI 컴포넌트 내부에는 전역 색상 외에도 자체 기본 스타일이 적용될 수 있습니다. 예를 들어 이 예시에서는 선택되지 않은 ButtonGroup 항목에 기본 표면 스타일이 유지됩니다. 제품에 다른 대비나 시각적 밀도가 필요하다면 buttonStyle과 selectedButtonStyle을 명시적으로 지정할 수 있습니다. 다만 이 결정은 전역 테마가 자동으로 적용된다고 간주하지 말고 직접 테스트해야 합니다.

React Native Elements 디자인 시스템 브라우저 설정 전체 구성

웹 해상도와 에셋 로더 포함

제공된 build.mjs는 esbuild를 사용해 JavaScript 의존성의 JSX를 파싱하고, react-native-web 별칭과 .web.js 우선순위를 설정하며, 패키지에 포함된 PNG 및 TTF 에셋을 위한 데이터 로더를 구성합니다. 패키지 진입점은 화면에 표시되는 구성에 아이콘이 없더라도 해당 에셋을 참조하는 exports를 포함합니다. 따라서 처리되지 않은 소스를 브라우저에서 바로 가져오는 방식으로 빌드를 대체할 수 없습니다.

로컬 상호작용 전체 테스트

제공된 소스를 rne.jsx로, HTML를 index.html로 저장하고 고정된 패키지를 설치한 다음 빌드하고 디렉터리를 제공하세요. 빈 작업, 사용자 지정 작업, 다른 시간, 휴식 전환, 모양 변경 및 초기화를 테스트하세요. 이 과정으로 제공된 구성을 확인할 수 있지만, 내보낸 모든 RNEUI 컴포넌트나 모든 네이티브 플랫폼이 자동으로 검증되는 것은 아닙니다.

  1. 제공된 세 파일을 같은 디렉터리에 보관하세요.
  2. 고정된 종속성을 설치하고 node build.mjs를 실행하세요.
  3. index.html을 사용해 생성된 번들을 제공하세요.
  4. 비어 있음, 편집됨, 테마 변경 및 초기화 상태를 테스트하세요.

React Native Elements 디자인 시스템 컴포넌트 예시

rne.jsx

Provider, 네이티브 컴포넌트 및 애플리케이션 상태 전체 구성

jsx
import React,{useState,useRef} from 'react';
import {createRoot} from 'react-dom/client';
import {View,Text,useWindowDimensions} from 'react-native';
import {ThemeProvider,createTheme,Button,ButtonGroup,Input,Switch,Card,Divider,useTheme} from '@rneui/themed';
import {SafeAreaProvider} from 'react-native-safe-area-context';
const theme=createTheme({mode:'light',components:{Button:{radius:6},Input:{containerStyle:{paddingHorizontal:0}}}});
function App(){const {theme,updateTheme}=useTheme();const {width}=useWindowDimensions();const [title,setTitle]=useState('Read a chapter'),[duration,setDuration]=useState(1),[breaks,setBreaks]=useState(true),[error,setError]=useState(false),[saved,setSaved]=useState('');const input=useRef(null);let c=theme.colors;function changed(){setSaved('')}function save(){if(!title.trim()){setError(true);input.current?.focus();return;}setError(false);setSaved(`${title.trim()} · ${[15,25,45][duration]} minutes · ${breaks?'with a short break':'no break reminder'}. Kept in this preview only.`)}return <View style={{backgroundColor:c.background,padding:width<500?16:32,maxWidth:1000,width:'100%',alignSelf:'center'}}><View style={{flexDirection:'row',justifyContent:'space-between',gap:24,flexWrap:'wrap',marginBottom:24}}><View style={{flexShrink:1}}><Text style={{color:c.primary,fontSize:13,fontWeight:'700'}}>REACT NATIVE ELEMENTS · WEB STUDY</Text><Text accessibilityRole="header" style={{fontSize:32,fontWeight:'700',color:c.black,marginTop:12}}>Make room for one thing</Text></View><Button title={theme.mode==='light'?'Use dark theme':'Use light theme'} type="outline" onPress={()=>updateTheme({mode:theme.mode==='light'?'dark':'light'})}/></View><Text style={{color:c.grey1,fontSize:15,lineHeight:23}}>An original focus-plan composer using RNEUI 5.0.0 through React Native Web. No timer or system notification is started.</Text><View style={{flexDirection:width>700?'row':'column',gap:24,marginTop:24}}><Card containerStyle={{flex:1,margin:0,padding:24,borderRadius:8}}><Card.Title>Shape your focus block</Card.Title><Card.Divider/><Input ref={input} label="Focus task" accessibilityLabel="Focus task" value={title} onChangeText={v=>{setTitle(v);setError(false);changed()}} errorMessage={error?'Enter a task before keeping this plan.':''} placeholder="What deserves your attention?"/><Text style={{fontSize:16,fontWeight:'700',color:c.grey1,marginBottom:8}}>Duration</Text><ButtonGroup buttons={['15 min','25 min','45 min']} selectedIndex={duration} onPress={i=>{setDuration(i);changed()}} containerStyle={{marginHorizontal:0,height:48,marginBottom:24}}/><View style={{flexDirection:'row',justifyContent:'space-between',alignItems:'center',gap:16,marginBottom:24}}><Text style={{fontSize:16,color:c.black,flexShrink:1}}>Include a short break</Text><Switch value={breaks} onValueChange={v=>{setBreaks(v);changed()}} accessibilityLabel="Include a short break"/></View><Button title="Keep this plan" onPress={save}/></Card><Card containerStyle={{flex:1,margin:0,padding:24,borderRadius:8}}><Card.Title>Your local plan</Card.Title><Card.Divider/><Text style={{fontSize:48,fontWeight:'700',color:c.primary}}>{[15,25,45][duration]}</Text><Text style={{fontSize:16,color:c.grey1,marginBottom:24}}>minutes for {title.trim()||'your next task'}</Text><Divider/><Text style={{color:c.black,fontSize:16,lineHeight:25,marginVertical:24}}>{breaks?'Finish with a pause before choosing what comes next.':'Keep the end of this block open; no break reminder is included.'}</Text><Text style={{fontSize:13,lineHeight:21,color:c.grey2}}>The duration, task and break choice are original application state. Theme colors, Input, ButtonGroup, Switch, Card and Button come from the installed library.</Text></Card></View><Text accessibilityLiveRegion="polite" style={{color:c.black,fontSize:15,lineHeight:23,marginTop:24}}>{saved}</Text><Button title="Reset the plan" type="clear" onPress={()=>{setTitle('Read a chapter');setDuration(1);setBreaks(true);setError(false);setSaved('');}} containerStyle={{alignSelf:'flex-start',marginTop:8}}/></View>}
createRoot(document.getElementById('root')).render(<SafeAreaProvider><ThemeProvider theme={theme}><App/></ThemeProvider></SafeAreaProvider>);

코드 참조

  • 고정된 설정과 함께 세 파일을 모두 사용하세요.

build.mjs

웹 모듈 우선순위를 포함한 실제 브라우저 번들 구성입니다.

자바스크립트
import {build} from 'esbuild';
await build({entryPoints:['rne.jsx'],bundle:true,minify:true,outfile:'rne.bundle.js',alias:{'react-native':'react-native-web'},resolveExtensions:['.web.js','.js','.jsx','.json'],loader:{'.js':'jsx','.ttf':'dataurl','.png':'dataurl'},define:{'process.env.NODE_ENV':'"production"'}});

코드 참조

  • 고정된 설정과 함께 세 파일을 모두 사용하세요.

index.html

생성된 번들을 불러오는 전체 루트 문서입니다.

html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Focus plan composer</title><style>body{margin:0;background:#f4f7fa}*{box-sizing:border-box}input:focus-visible,[role=button]:focus-visible{outline:2px solid #2089dc;outline-offset:3px}</style></head><body><div id="root"></div><script src="./rne.bundle.js"></script></body></html>

코드 참조

  • 고정된 설정과 함께 세 파일을 모두 사용하세요.
04

React Native Elements 디자인 시스템 에이전트 설정

구현 시작점

먼저 제공된 rne.jsx, build.mjs, index.html을 저장하세요. 이 설정은 검증된 브라우저 빌드이며 네이티브 앱 설정이 아닙니다.

sh
npm init -y
npm install [email protected] [email protected] @rneui/[email protected] @rneui/[email protected] [email protected] [email protected] [email protected] --legacy-peer-deps
npm install --save-dev esbuild
node build.mjs
python3 -m http.server 8000

프로젝트를 위한 프롬프트

에이전트 프롬프트
전체 브라우저 빌드와 Provider를 사용해 제공된 RNEUI 5.0.0 포커스 계획 작성기를 구현합니다. 제어되는 인덱스와 시간 매핑, 공백 제거를 통한 유효성 검사와 포커스 처리, 로컬에서만 이루어지는 확인, 테마와 무관한 계획 상태, 명시적 초기화를 유지하세요. 이 웹 예시에서는 네이티브 기기 기능을 다루지 마세요.
05

React Native Elements 디자인 시스템 출처 및 범위

React Native Web을 통해 렌더링되는 실제 RNEUI 5.0.0 컴포넌트입니다. OpenDesign의 원래 계획 콘텐츠와 상태를 사용하며, 네이티브 기기, 타이머 또는 알림 기능은 포함하지 않습니다.