Skip to content

[1주차] 이승연 과제 제출합니다.#6

Open
a-00-a wants to merge 8 commits intoCEOS-Developers:masterfrom
a-00-a:a-00-a
Open

[1주차] 이승연 과제 제출합니다.#6
a-00-a wants to merge 8 commits intoCEOS-Developers:masterfrom
a-00-a:a-00-a

Conversation

@a-00-a
Copy link
Copy Markdown

@a-00-a a-00-a commented Mar 14, 2026

No description provided.

@a-00-a
Copy link
Copy Markdown
Author

a-00-a commented Mar 14, 2026

@a-00-a
Copy link
Copy Markdown
Author

a-00-a commented Mar 14, 2026

Review Questions

1.DOM은 무엇인가요?
DOM(Document Object Model)은 HTML 문서를 브라우저가 객체 형태로 표현한 구조.
브라우저는 HTML을 읽으면 이를 트리 구조의 객체로 변환하고, JavaScript는 이 DOM을 통해 웹 페이지의 요소를 선택하거나 수정하고, 추가하거나 삭제할 수 있음.
즉, DOM은 JavaScript가 웹 페이지의 구조와 내용을 동적으로 조작할 수 있게 해주는 인터페이스임.

2.이벤트 흐름 제어(버블링 & 캡처링)이 무엇인가요?
이벤트 흐름(Event Flow)은 웹 페이지에서 이벤트가 발생했을 때 그 이벤트가 DOM 요소들 사이에서 전달되는 방식.
이 과정은 크게 두 단계로 나뉨.
첫 번째는 캡처링(Capturing) 단계 -> 이벤트가 최상위 요소인 document에서 시작해 실제 이벤트가 발생한 요소까지 위에서 아래로 전달되는 과정임.
두 번째는 버블링(Bubbling) 단계 -> 이벤트가 발생한 요소에서 시작하여 부모 요소로 아래에서 위로 전달되는 과정임. 필요에 따라 event.stopPropagation() 을 사용하면 이벤트가 부모 요소로 전달되는 것을 막을 수 있음.

3. 클로저와 스코프가 무엇인가요?
스코프(Scope)는 변수에 접근할 수 있는 범위.
함수 내부에서 선언된 변수는 해당 함수 내부에서만 접근할 수 있음.
클로저(Closure)는 함수가 자신이 선언될 당시의 스코프를 기억하여, 함수가 외부에서 실행되더라도 그 스코프에 있는 변수에 접근할 수 있는 특성을 의미함. 즉, 클로저를 통해 함수 내부에서 외부 함수의 변수에 계속 접근할 수 있게 됨.

@a-00-a
Copy link
Copy Markdown
Author

a-00-a commented Mar 14, 2026

과제 진행 중 개선 및 학습한 부분

date input UI 개선
기본 날짜 입력창에서 날짜 텍스트를 숨기고 달력 아이콘만 보이도록 CSS를 활용해 UI를 개선했습니다.

Todo 드래그 앤 드롭 기능 구현
Todo 항목을 마우스로 드래그하여 순서를 변경할 수 있도록 구현하고, 변경된 순서를 localStorage에 저장하도록 수정했습니다.

드래그 UX 개선
드래그 시 리스트가 자연스럽게 이동하도록 로직을 수정하여 화면이 흔들리는 현상을 줄이고 보다 자연스러운 정렬이 되도록 개선했습니다.

색상 및 UI 가독성 개선
프로젝트 과정 중 배경색과 Todo 카드 색상이 잘 구분되지 않는 문제를 해결하기 위해 색상 대비를 조정하고 전체적인 UI 가독성을 개선했습니다.

다크모드 UI 조정
다크모드에서 텍스트와 배경색의 대비가 자연스럽게 보이도록 CSS 변수를 수정하여 스타일을 개선했습니다.

달력 위치 UI 개선
기존에 사이드바에 있던 날짜 선택(date picker)을 메인 화면의 날짜 영역으로 이동시켜 사용자가 바로 날짜를 변경할 수 있도록 UI 접근성을 개선했습니다.

Copy link
Copy Markdown

@waldls waldls left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

승연님 1주차 과제하시느라 수고 많으셨습니다! 드래그 UX까지 생각하신 점이 너무 멋있어요✨
React로 리팩토링한 버전도 기대됩니당 ㅎㅎㅎ

Comment thread styles.css
Comment on lines +94 to +96
body.dark-mode .hamburger {
color: var( --darkmode_hamburge);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CSS 변수를 활용해 다크모드를 구현하신 점이 체계적이라 좋은 것 같아요! 다만 .hamburger 스타일 부분에 오타가 있어 수정이 필요해 보입니다.

Comment thread styles.css
Comment on lines +291 to +306
/*체크박스 스타일*/
.todo input[type="checkbox"] {
appearance: none;
/*flex-shrink: 0;*/
width: 18px;
height: 18px;
border-radius: 5px;
border: 2px solid var(--bg_checkbox);
/*display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease-in-out;*/
cursor: pointer;
position: relative;
background-color: var(--bg_checkbox);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재는 입력이 길어질 때 왼쪽의 체크박스가 찌그러지는 현상이 발생하는 것 같습니다!
체크박스에 flex-shrink: 0;을 주면 해결할 수 있을 것 같습니다. 관련된 문서 링크 하나 남기고 갑니다!
Image

Comment thread styles.css
Comment on lines +321 to +327
/*할 일 텍스트 스타일*/
.todo span {
flex-grow: 1;
font-size: 14px;
text-align: left;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 한국어는 줄바꿈이 잘 되는데, 띄어쓰기 없는 긴 영문이나 숫자는 박스를 뚫고 나가는 것 같아요 🥲
.todo spanword-break: break-all; 속성을 추가하면 해결될 것 같습니다!
관련해서 참고할만한 블로그 글 하나 남깁니당
Image

Comment thread main.js Outdated
Comment on lines +206 to +209
function handleOutsideClick(event) {
if (!sidebar.contains(event.target) && !hamburger.contains(event.target)) {
closeSidebar();
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사이드바 외부 클릭 처리 로직에서 Early Return 패턴을 적용해 보셔도 좋을 것 같습니다!
사이드바나 햄버거 버튼 클릭처럼 '동작을 방해하지 않아야 할 상황'을 먼저 return으로 걸러내면, 본 로직을 중괄호 안에 가둘 필요가 없어 들여쓰기도 줄어들고 코드도 훨씬 직관적으로 변할 것 같아요~!

function handleOutsideClick(event) {
    if (sidebar.contains(event.target) || hamburger.contains(event.target)) return;
    closeSidebar();
}

Copy link
Copy Markdown

@Tutankhannun Tutankhannun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 주차 과제도 수고 많으셨습니다~~ 다크모드 설정, 순서 변경 등 다양한 기능을 추가한 점도 인상 깊었습니다. 이번 코드 리뷰에 달린 내용들 반영하여 다음주 과제도 잘 부탁드립니다~~

Comment thread main.js Outdated

// 이벤트 리스너 등록
enterButton.addEventListener("click", addTodo);
input.addEventListener("keypress", (event) => {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

웹 표준에서는 keypress보다는 keydown 혹은 keyup을 사용하는 것이 권장됩니다! 또한 한글 IME 이슈도 한번 보시면 좋을 것 같아요~

KeyboardEvent.key
input에 한글 입력 시 엔터 키 중복 실행 막기 (feat. isComposing)

Comment thread main.js Outdated
const todoText = document.createElement("span");
todoText.textContent = text;
if (completed) {
todoText.style.textDecoration = "line-through";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스타일 변경은 JS 인라인보다 CSS 클래스로 분리하는 것이 이후의 유지 보수에도 용이하고 더 간결하고 보기 좋은 코드가 됩니다~

Comment thread main.js Outdated

// 날짜 변경 (이전/다음)
function changeDate(days) {
const newDate = new Date(currentDate);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new Date(YYY-MM-DD) 형식의 문자열을 넘기면 UTC 기준으로 파싱되어 한국(UTC+9)에서 실행하면 실제로는 날짜가 하루 밀리는 버그가 생길 수 있습니다. const [y, m, d] = dateString.split("-")와 같이 스플릿 문자열을 사용하는 등의 방식을 고려해주셔도 좋을 것 같습니다!

Comment thread index.html
</main>
<script src="./main.js"></script>
</body>
</html> No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aside, nav 시맨틱 태그로 분리해서 코드 작성해주셔서 영역 구분과 가독성이 더욱 좋은 것 같습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants