30분만에 만드는 Todo App 완성 가이드 – 완성까지 한번에!

프로젝트 소개 및 목표

30분만에 만드는 Todo App 완성 가이드는 웹 개발 입문자부터 중급 개발자까지 누구나 쉽게 따라할 수 있는 실전 프로젝트입니다. React와 LocalStorage를 활용하여 할 일 목록을 추가, 완료, 삭제할 수 있는 완전한 Todo 애플리케이션을 구축합니다. 이 가이드를 통해 컴포넌트 설계, 상태 관리, 이벤트 핸들링, 데이터 영속성 등 실무에서 필수적인 개념들을 실습할 수 있습니다. 포트폴리오에 추가할 수 있는 완성도 높은 프로젝트를 30분 안에 완성해보세요.

필요한 기술 스택

이 프로젝트를 진행하기 위해서는 다음과 같은 기술 스택이 필요합니다:

  • React 18+: UI 컴포넌트 구축을 위한 프론트엔드 라이브러리
  • JavaScript (ES6+): 최신 자바스크립트 문법 활용
  • CSS3: 스타일링 및 반응형 디자인
  • LocalStorage API: 브라우저 로컬 데이터 저장
  • Vite: 빠른 개발 환경 구축 도구

Node.js 16 이상이 설치되어 있어야 하며, 기본적인 React Hooks(useState, useEffect) 사용법을 알고 있으면 더욱 수월하게 진행할 수 있습니다.

프로젝트 셋업

먼저 Vite를 사용하여 React 프로젝트를 생성합니다. 터미널에서 다음 명령어를 실행하세요:

npm create vite@latest todo-app -- --template react
cd todo-app
npm install
npm run dev

프로젝트 구조를 다음과 같이 정리합니다:

src/
├── components/
│   ├── TodoForm.jsx
│   ├── TodoList.jsx
│   └── TodoItem.jsx
├── App.jsx
├── App.css
└── main.jsx

이제 개발 서버가 실행되었으며 http://localhost:5173에서 확인할 수 있습니다. 기본 파일들을 정리하고 본격적인 구현을 시작하겠습니다.

단계별 구현 과정

1단계: App 컴포넌트 기본 구조 (5분)

먼저 src/App.jsx 파일을 열어 메인 컴포넌트를 작성합니다. 이 30분만에 만드는 Todo App 완성 가이드의 핵심은 효율적인 상태 관리입니다:

import { useState, useEffect } from 'react';
import TodoForm from './components/TodoForm';
import TodoList from './components/TodoList';
import './App.css';

function App() {
  const [todos, setTodos] = useState([]);

  // LocalStorage에서 데이터 불러오기
  useEffect(() => {
    const savedTodos = localStorage.getItem('todos');
    if (savedTodos) {
      setTodos(JSON.parse(savedTodos));
    }
  }, []);

  // 데이터 변경시 LocalStorage에 저장
  useEffect(() => {
    localStorage.setItem('todos', JSON.stringify(todos));
  }, [todos]);

  const addTodo = (text) => {
    const newTodo = {
      id: Date.now(),
      text,
      completed: false,
      createdAt: new Date().toISOString()
    };
    setTodos([newTodo, ...todos]);
  };

  const toggleTodo = (id) => {
    setTodos(todos.map(todo =>
      todo.id === id ? { ...todo, completed: !todo.completed } : todo
    ));
  };

  const deleteTodo = (id) => {
    setTodos(todos.filter(todo => todo.id !== id));
  };

  return (
    

📝 My Todo App

); } export default App;

2단계: TodoForm 컴포넌트 구현 (5분)

src/components/TodoForm.jsx 파일을 생성하여 입력 폼을 만듭니다:

import { useState } from 'react';

function TodoForm({ onAdd }) {
  const [input, setInput] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    if (input.trim()) {
      onAdd(input.trim());
      setInput('');
    }
  };

  return (
    
setInput(e.target.value)} placeholder="할 일을 입력하세요..." className="todo-input" />
); } export default TodoForm;

3단계: TodoList 컴포넌트 구현 (5분)

src/components/TodoList.jsx 파일을 생성합니다:

import TodoItem from './TodoItem';

function TodoList({ todos, onToggle, onDelete }) {
  if (todos.length === 0) {
    return 

할 일이 없습니다. 새로운 할 일을 추가해보세요!

; } const activeTodos = todos.filter(todo => !todo.completed); const completedTodos = todos.filter(todo => todo.completed); return (
전체: {todos.length} 진행중: {activeTodos.length} 완료: {completedTodos.length}
{todos.map(todo => ( ))}
); } export default TodoList;

4단계: TodoItem 컴포넌트 구현 (5분)

src/components/TodoItem.jsx 파일을 생성합니다:

function TodoItem({ todo, onToggle, onDelete }) {
  return (
    
onToggle(todo.id)} className="checkbox" /> {todo.text}
); } export default TodoItem;

5단계: 스타일링 완성 (10분)

src/App.css 파일을 작성하여 깔끔한 디자인을 적용합니다:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  min-height: 100vh;
  padding: 20px;
}

.app {
  max-width: 600px;
  margin: 40px auto;
  background: white;
  border-radius: 20px;
  padding: 30px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

h1 {
  text-align: center;
  color: #333;
  margin-bottom: 30px;
  font-size: 2.5em;
}

.todo-form {
  display: flex;
  gap: 10px;
  margin-bottom: 30px;
}

.todo-input {
  flex: 1;
  padding: 15px;
  border: 2px solid #e0e0e0;
  border-radius: 10px;
  font-size: 16px;
  transition: border-color 0.3s;
}

.todo-input:focus {
  outline: none;
  border-color: #667eea;
}

.add-button {
  padding: 15px 30px;
  background: #667eea;
  color: white;
  border: none;
  border-radius: 10px;
  font-size: 16px;
  font-weight: bold;
  cursor: pointer;
  transition: background 0.3s;
}

.add-button:hover {
  background: #5568d3;
}

.stats {
  display: flex;
  justify-content: space-around;
  margin-bottom: 20px;
  padding: 15px;
  background: #f5f5f5;
  border-radius: 10px;
  font-weight: bold;
  color: #666;
}

.todo-item {
  display: flex;
  align-items: center;
  gap: 15px;
  padding: 15px;
  border: 2px solid #f0f0f0;
  border-radius: 10px;
  margin-bottom: 10px;
  transition: all 0.3s;
}

.todo-item:hover {
  border-color: #667eea;
  transform: translateX(5px);
}

.todo-item.completed {
  opacity: 0.6;
  background: #f9f9f9;
}

.checkbox {
  width: 20px;
  height: 20px;
  cursor: pointer;
}

.todo-text {
  flex: 1;
  font-size: 16px;
  color: #333;
}

.todo-item.completed .todo-text {
  text-decoration: line-through;
  color: #999;
}

.delete-button {
  padding: 8px 16px;
  background: #ff6b6b;
  color: white;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.3s;
}

.delete-button:hover {
  background: #ee5a52;
}

.empty-message {
  text-align: center;
  color: #999;
  padding: 40px;
  font-size: 18px;
}

테스트 및 배포

애플리케이션이 완성되었으면 다음 기능들을 테스트합니다:

  • 할 일 추가 기능 (빈 입력 방지 확인)
  • 체크박스 토글로 완료/미완료 전환
  • 삭제 버튼으로 항목 제거
  • 페이지 새로고침 후 데이터 유지 (LocalStorage)
  • 통계 정보 정확성 확인

배포는 Vercel을 추천합니다. 터미널에서 다음 명령어를 실행하세요:

npm run build
npx vercel --prod

또는 GitHub에 푸시 후 Vercel, Netlify, GitHub Pages를 통해 자동 배포할 수 있습니다. 이 30분만에 만드는 Todo App 완성 가이드를 따라했다면 완전히 작동하는 애플리케이션을 배포할 준비가 완료되었습니다.

마무리 및 확장 아이디어

축하합니다! 30분만에 만드는 Todo App 완성 가이드를 성공적으로 완료하셨습니다. 이제 다음과 같은 기능을 추가하여 프로젝트를 더욱 발전시킬 수 있습니다:

  • 할 일 수정(edit) 기능 추가
  • 카테고리/태그 시스템 구현
  • 드래그 앤 드롭으로 순서 변경
  • 마감일 설정 및 알림 기능
  • 다크 모드 지원
  • 백엔드 API 연동 (Firebase, Supabase)
  • 사용자 인증 및 멀티 유저 지원

이 프로젝트를 포트폴리오에 추가하고, GitHub에 공개하여 취업이나 프리랜서 활동에 활용해보세요!

📚 함께 읽으면 좋은 글

1

30분만에 만드는 Todo App 완성 가이드 – 완성까지 한번에!

📂 프로젝트 아이디어
📅 2025. 10. 20.
🎯 30분만에 만드는 Todo App 완성 가이드

2

30분만에 만드는 Todo App 완성 가이드 – 완성까지 한번에!

📂 프로젝트 아이디어
📅 2025. 10. 15.
🎯 30분만에 만드는 Todo App 완성 가이드

3

30분만에 만드는 Todo App 완성 가이드 – 완성까지 한번에!

📂 프로젝트 아이디어
📅 2025. 10. 10.
🎯 30분만에 만드는 Todo App 완성 가이드

4

30분만에 만드는 Todo App 완성 가이드 – 완성까지 한번에!

📂 프로젝트 아이디어
📅 2025. 10. 5.
🎯 30분만에 만드는 Todo App 완성 가이드

5

REST API 서버 구축 단계별 튜토리얼 – 완성까지 한번에!

📂 프로젝트 아이디어
📅 2025. 10. 19.
🎯 REST API 서버 구축 단계별 튜토리얼

💡 위 글들을 통해 더 깊이 있는 정보를 얻어보세요!

📢 이 글이 도움되셨나요? 공유해주세요!

여러분의 공유 한 번이 더 많은 사람들에게 도움이 됩니다 ✨

🔥 공유할 때마다 블로그 성장에 큰 힘이 됩니다! 감사합니다 🙏

💬 여러분의 소중한 의견을 들려주세요!

30분만에 만드는 Todo App 완성 가이드에 대한 여러분만의 경험이나 노하우가 있으시나요?

💡
유용한 정보 공유

궁금한 점 질문

🤝
경험담 나누기

👍
의견 표현하기

⭐ 모든 댓글은 24시간 내에 답변드리며, 여러분의 의견이 다른 독자들에게 큰 도움이 됩니다!
🎯 건설적인 의견과 경험 공유를 환영합니다 ✨

🔔 블로그 구독하고 최신 글을 받아보세요!

📚
다양한 주제
17개 카테고리

정기 업데이트
하루 3회 발행

🎯
실용적 정보
바로 적용 가능

💡
최신 트렌드
2025년 기준

🌟 프로젝트 아이디어부터 다양한 실생활 정보까지!
매일 새로운 유용한 콘텐츠를 만나보세요 ✨

📧 RSS 구독 | 🔖 북마크 추가 | 📱 모바일 앱 알림 설정
지금 구독하고 놓치는 정보 없이 업데이트 받아보세요!

답글 남기기