산을 배경으로 한 한국 포스터
📝 한줄 요약
제출 완료 메시지를 “하단에 조용히 있던” Notice에서 “우상단에 튀어나왔다가 자동으로 사라지는” 토스트 팝업으로 바꾸니, 사용자가 제출이 성공했다는 걸 빠르게 인지했습니다.
Before: 페이지 하단 Notice (스크롤 해야 볼 수 있음, 계속 남아있음)
After: 우상단 토스트 (눈에 즉시 띔, 3초 후 자동 사라짐)
👥 이런 분께 추천
사용자가 행동 결과를 명확히 인지해야 하는 앱을 만드는 분
“완료됐는데 사용자가 못 본다” 같은 피드백을 받은 분
Toast Notification 패턴을 배우고 싶은 분
React에서 고정 위치 UI와 자동 닫힘 로직을 구현하고 싶은 분
🙋 내 스펙 & 환경
항목
내용
직업
초과근무관리 앱 제작
코딩 경험
React / TypeScript / Tailwind CSS
개발 스택
Next.js 14
버전 관리
Git / Vercel 배포
진행 방법
1. 문제: 메시지가 눈에 띄지 않는다
사용자가 Submit 버튼을 눌러서 제출을 완료하면, 페이지 하단에 “Your meeting has been submitted.” 메시지가 나타났습니다.
하지만 문제가 있었어요:
위치: 하단에 있어서, 사용자가 스크롤해야 봤음
시간: 메시지가 계속 남아있어서, 나중에 남은 메시지를 보고 “뭐지?” 하게 됨
인지: 중요한 피드백인데 조용해서 놓치기 쉬움
사용자는 “완료됐나?” 하고 페이지를 새로고침하거나, 제출 버튼을 다시 눌렀어요.
2. 해결책 조사: Toast Notification 패턴
다른 앱들을 보니 성공/오류 메시지를 “토스트”로 띄웠어요:
Gmail: 메일 전송 완료 → 화면 하단에서 “메일이 발송되었습니다” 팝업 (2초 후 사라짐)
Slack: 메시지 전송 → 우상단에 ”✓ Sent” (1초 후 사라짐)
Figma: 파일 저장 → 중앙 상단에서 약간 내려온 위치에 “Saved” (자동 닫힘)
공통점:
중요한 위치: 화면 상단 모서리 (우상단이 가장 흔함)
짧은 시간: 2~3초 후 자동으로 사라짐
애니메이션: 튀어나왔다가 부드럽게 사라짐
명확한 상태: 성공(녹색), 오류(빨강), 정보(파랑) 등 색으로 구분
3. 구현: 토스트 컴포넌트 만들기
상태 추가:
const [showSuccessToast, setShowSuccessToast] = useState(false);제출 성공 시 토스트 활성화:
const handleSubmitClick = async () => {
// ... 제출 로직 ...
setShowSuccessToast(true);
// 3초 후 자동 닫기
setTimeout(() => setShowSuccessToast(false), 3000);
};토스트 UI (JSX):
{showSuccessToast ? (
<div className="fixed bottom-4 right-4 z-50 rounded-md border border-green-200 bg-green-50 px-4 py-3 text-sm font-medium text-green-700 shadow-lg animate-in fade-in slide-in-from-bottom-4 duration-300">
✓ Your meeting has been submitted.
</div>
) : null}핵심 CSS 클래스들:
fixed: 스크롤 무시하고 화면 고정bottom-4 right-4: 우하단 배치 (또는 우상단은top-4)z-50: 다른 요소 위에 떠있게 (z-index)shadow-lg: 그림자로 떠있는 느낌animate-in fade-in slide-in-from-bottom-4: Tailwind 애니메이션 (옅어지면서 튀어나옴)duration-300: 애니메이션 300ms
4. 개선 효과
사용자 테스트 결과:
제출 후 메시지를 놓치는 일 없음 (이전엔 하단을 못 봐서 놓치던 경우 있음)
자동으로 사라지니까 “이 메시지가 뭐지?” 혼동 없음
다른 화면으로 이동해도 완료 피드백이 명확함
5. 확장: 다른 상황에도 적용
토스트는 제출 완료뿐 아니라 많은 상황에서 쓸 수 있어요:
// 오류 토스트
<Toast type="error">
Failed to save. Please try again.
</Toast>
// 정보 토스트
<Toast type="info">
Your settings have been updated.
</Toast>
// 경고 토스트
<Toast type="warning">
This action cannot be undone.
</Toast>🎓 개념: Toast Notification과 Modal
Toast란?
정의: 사용자의 행동에 대한 피드백을 주는 일시적인 메시지 팝업입니다.
“Toast”라는 이름의 유래:
토스터에서 빵이 튀어나오는 이미지 → “팝업” 느낌
잠깐 나타났다가 사라짐 → 한 번의 알림
거슬리지 않게 한 모서리에 떠있음