본문 바로가기
코드 정리/Javascript

[자바스크립트 14일 완전정복] 14일차 - 미니 프로젝트 (할 일 목록 앱 만들기)

by rien_d 2025. 3. 16.

자바스크립트 14일 완전정복

 

 

자바스크립트를 배우면서 가장 중요한 것은 배운 개념을 실전에서 활용하는 것이에요.
오늘은 할 일 목록(Todo List) 앱을 만들어 보면서 지금까지 배운 개념을 적용해 보겠습니다.
또한, 프로젝트를 GitHub Pages에 배포하는 방법도 알아볼 거예요. 🚀

 


 

미리보기

See the Pen Untitled by 해련 (@iuqtnifm-the-reactor) on CodePen.

 

 

 

1. 프로젝트 개요

📌 기능 요구사항

  • 사용자가 할 일을 추가, 삭제할 수 있음
  • 할 일을 완료 처리할 수 있음
  • 데이터를 localStorage에 저장하여 새로고침해도 유지됨

✔ HTML, CSS, 자바스크립트의 DOM 조작, 이벤트 핸들링, localStorage 활용

 


 

2. 프로젝트 폴더 구조

todo-app/
│── index.html
│── style.css
│── script.js

✔ 모든 파일을 한 폴더(todo-app/)에 저장하여 관리

 

3. HTML 작성 (index.html)

기본적인 할 일 목록의 UI를 작성해요.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>할 일 목록</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>

  <div class="container">
    <h1>📝 할 일 목록</h1>
    <div class="todo-input">
      <input type="text" id="taskInput" placeholder="새로운 할 일 입력">
      <button id="addTaskBtn">추가</button>
    </div>
    <ul id="taskList"></ul>
  </div>

  <script src="script.js"></script>
</body>
</html>

입력창과 버튼, 할 일 목록을 담은 ul 태그를 추가
script.js를 불러와서 동작 구현

 

4. CSS 스타일 (style.css)

깔끔한 디자인을 적용해요.

body {
  font-family: 'Arial', sans-serif;
  text-align: center;
  background-color: #f4f4f4;
}

.container {
  max-width: 400px;
  margin: 50px auto;
  background: white;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}

.todo-input {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
}

input {
  flex: 1;
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

button {
  padding: 8px 12px;
  border: none;
  background-color: #28a745;
  color: white;
  cursor: pointer;
  border-radius: 4px;
}

button:hover {
  background-color: #218838;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  display: flex;
  justify-content: space-between;
  background: #f9f9f9;
  padding: 8px;
  margin: 5px 0;
  border-radius: 4px;
}

.completed {
  text-decoration: line-through;
  color: gray;
}

할 일을 추가할 입력창과 버튼을 가로 정렬
완료된 할 일은 text-decoration: line-through로 표시

 

5. 자바스크립트 기능 구현 (script.js)

이제 할 일 추가, 삭제, 완료 처리, localStorage 저장 기능을 구현해요.

document.addEventListener("DOMContentLoaded", () => {
  const taskInput = document.getElementById("taskInput");
  const addTaskBtn = document.getElementById("addTaskBtn");
  const taskList = document.getElementById("taskList");

  // 저장된 데이터 불러오기
  loadTasks();

  // 할 일 추가 이벤트
  addTaskBtn.addEventListener("click", addTask);
  taskInput.addEventListener("keypress", (event) => {
    if (event.key === "Enter") addTask();
  });

  function addTask() {
    let taskText = taskInput.value.trim();
    if (taskText === "") return;

    const taskItem = createTaskElement(taskText);
    taskList.appendChild(taskItem);

    saveTasks();
    taskInput.value = "";
  }

  function createTaskElement(text) {
    const li = document.createElement("li");
    li.innerHTML = `
      <span>${text}</span>
      <button class="complete">✅</button>
      <button class="delete">❌</button>
    `;

    li.querySelector(".complete").addEventListener("click", () => {
      li.classList.toggle("completed");
      saveTasks();
    });

    li.querySelector(".delete").addEventListener("click", () => {
      li.remove();
      saveTasks();
    });

    return li;
  }

  function saveTasks() {
    let tasks = [];
    document.querySelectorAll("#taskList li").forEach((li) => {
      tasks.push({
        text: li.querySelector("span").innerText,
        completed: li.classList.contains("completed"),
      });
    });

    localStorage.setItem("tasks", JSON.stringify(tasks));
  }

  function loadTasks() {
    let tasks = JSON.parse(localStorage.getItem("tasks")) || [];
    tasks.forEach((task) => {
      let li = createTaskElement(task.text);
      if (task.completed) li.classList.add("completed");
      taskList.appendChild(li);
    });
  }
});

addTask(): 할 일 추가 기능
createTaskElement(): 동적으로 리스트 아이템 생성
saveTasks(): 할 일 데이터를 localStorage에 저장
loadTasks(): 저장된 데이터를 불러와 화면에 표시

 


 

6. GitHub Pages로 프로젝트 배포

6.1 GitHub Repository 만들기

  1. GitHub에서 새로운 Repository 생성 (이름: todo-app)
  2. 프로젝트 폴더에서 Git 초기화 및 파일 추가 
  3. git init git add . git commit -m "첫 커밋" git branch -M main git remote add origin https://github.com/사용자이름/todo-app.git git push -u origin main

 

6.2 GitHub Pages 활성화

  1. GitHub에서 todo-app Repository로 이동
  2. Settings → Pages 메뉴 선택
  3. Branch를 main으로 설정 후 저장
  4. 잠시 후 https://사용자이름.github.io/todo-app/에서 프로젝트 확인 가능!

 


 

오늘은 자바스크립트를 활용한 미니 프로젝트(할 일 목록 앱)을 만들었어요!
HTML, CSS, 자바스크립트를 활용한 실전 프로젝트 완성
localStorage를 이용해 데이터를 저장하고 불러오는 기능 구현
GitHub Pages를 활용하여 프로젝트를 무료로 배포

 

자바스크립트를 배우면서 가장 중요한 것은 직접 프로젝트를 만들어 보는 것이에요!
앞으로도 더 많은 프로젝트를 만들어보면서 실력을 쌓아보세요. 🚀