전체 글 79

폼 처리 실전: 입력 검증과 에러 메시지 UX 기본기

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개회원가입, 문의 등록, 결제 정보 입력처럼 폼은 대부분의 서비스에서 전환율을 좌우하는 핵심 구간입니다. 기능은 같아 보여도 입력 검증과 에러 메시지 UX를 어떻게 설계했는지에 따라 완료율이 크게 달라집니다. 사용자가 실수했을 때 “왜 안 되는지”를 즉시 이해할 수 있으면 다시 시도하지만, 이유를 모르면 이탈합니다. 그래서 폼 처리의 본질은 값 저장이 아니라 사용자가 끝까지 완료할 수 있도록 돕는 흐름 설계입니다.초보 개발자가 자주 겪는 문제는 검증 로직을 나중에 붙이는 방식입니다. 화면을 만든 뒤 제출 버튼에서만 한 번에 검사하면 에러가 한꺼번에 쏟아지고 사용자는 어디부터 고쳐야 할지 모르게 됩니다. 반대로 입력 시..

이벤트(Event)란 무엇인가: 클릭하면 왜 코드가 실행될까?

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개웹페이지에서 버튼을 누르면 메뉴가 열리고, 입력창에 글을 쓰면 안내 문구가 바뀌는 이유는 무엇일까요? 그 핵심이 바로 이벤트(Event)입니다. 이벤트는 브라우저 안에서 발생한 신호이고, JavaScript는 그 신호를 받아 동작을 실행합니다.2. 핵심 내용이벤트는 "일이 발생했다"는 알림클릭(click), 입력(input), 제출(submit), 스크롤(scroll), 키보드 입력(keydown)처럼 사용자의 행동이나 브라우저 상태 변화가 이벤트가 됩니다.이벤트 리스너가 신호를 기다린다addEventListener를 사용하면 특정 요소에서 특정 이벤트가 발생했을 때 실행할 함수를 연결할 수 있습니다. 즉, "무슨 ..

[바이브코딩 HTML 웹앱 20일 챌린지] 8일차 - 새로고침해도 할 일이 사라지지 않게 만들기

8일차에서는 새로고침해도 할 일이 사라지지 않도록 `localStorage` 저장 기능을 붙입니다. 지금까지는 페이지를 다시 열면 목록이 초기화됐지만, 오늘부터는 입력한 데이터가 브라우저에 남아 다시 불러와지는 흐름을 구현합니다.이 단계는 웹앱이 "진짜 도구"로 넘어가는 중요한 전환점입니다. 초보자도 저장/불러오기 구조를 한 번 익혀두면 메모, 기분 기록, 다크모드까지 같은 패턴으로 확장할 수 있습니다.목차1. 오늘 만들 기능 소개2. AI에게 요청할 프롬프트3. 코드 작성과 실행 과정4. 코드 이해하기5. 오늘 만든 내용 정리6. 자주 묻는 질문7. 다음 단계로 이어가기1. 오늘 만들 기능 소개오늘의 목표는 할 일 목록 상태를 저장하고 복원하는 것입니다. 할 일을 추가/완료/삭제할 때마다 현재 목록을 ..

비동기 처리 첫걸음: 로딩, 성공, 실패를 안정적으로 다루는 패턴

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개프론트엔드에서 체감 품질을 크게 좌우하는 요소 중 하나가 비동기 처리입니다. 같은 API를 호출하더라도 어떤 화면은 안정적으로 느껴지고, 어떤 화면은 멈춘 것처럼 보이는 이유는 로딩·성공·실패 상태를 어떻게 설계했는지에 달려 있습니다. 초보 단계에서는 데이터만 잘 받아오면 끝이라고 생각하기 쉽지만, 사용자 입장에서 중요한 것은 결과가 아니라 진행 과정이 예측 가능한가입니다.예를 들어 버튼을 눌렀는데 반응이 없으면 사용자는 다시 클릭하고, 중복 요청이 발생해 서버와 UI 모두 꼬일 수 있습니다. 또 실패 상황에서 아무 메시지도 없으면 사용자는 원인을 알 수 없어 이탈할 가능성이 높아집니다. 그래서 비동기 처리의 기본은..

함수(Function)는 왜 필요할까? 반복을 줄이는 사고법

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개코드를 조금만 작성해도 같은 로직을 여러 번 복붙하게 됩니다. 이때 필요한 개념이 함수(Function)입니다. 함수는 단순히 문법이 아니라 반복을 줄이고, 실수를 줄이고, 코드를 재사용하게 만드는 사고 도구입니다.2. 핵심 내용함수는 작업을 이름 붙여 묶는 것여러 줄의 동작을 하나의 이름으로 묶어두면 필요할 때 호출만 하면 됩니다. 예를 들어 "할인 가격 계산"이나 "입력값 검증" 같은 반복 작업은 함수로 분리하는 것이 효율적입니다.입력(매개변수)과 출력(반환값)을 명확히좋은 함수는 무엇을 받아서 무엇을 돌려주는지 분명합니다. 입력과 출력을 명확히 하면 테스트가 쉬워지고, 다른 사람이 읽을 때도 이해가 빠릅니다.중..

[바이브코딩 HTML 웹앱 20일 챌린지] 7일차 - 완료한 일은 체크하고, 필요 없는 일은 삭제하기

7일차에서는 할 일 항목에 완료 체크와 삭제 기능을 붙입니다. 6일차에 "추가"까지 됐다면, 오늘은 목록을 실제로 관리할 수 있게 만드는 단계입니다. 완료 상태 전환 + 개별 삭제가 들어가면 웹앱 사용감이 한 단계 올라갑니다.이 단계의 핵심은 "클릭한 항목만 정확히 제어"하는 흐름입니다. 초보자도 이벤트 타겟 개념을 한 번 익혀두면 이후 필터, 진행률, 저장 기능으로 확장할 때 훨씬 유리합니다.목차1. 오늘 만들 기능 소개2. AI에게 요청할 프롬프트3. 코드 작성과 실행 과정4. 코드 이해하기5. 오늘 만든 내용 정리6. 자주 묻는 질문7. 다음 단계로 이어가기1. 오늘 만들 기능 소개오늘 기능은 두 가지입니다. 첫째, 체크박스를 눌러 완료 상태를 표시하고 완료 항목 스타일(예: 취소선, 색상 변경)을..

상태(State) 설계 입문: 어디에 저장하고 누가 바꿔야 할까?

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개프론트엔드 개발에서 버그가 반복되는 가장 큰 이유 중 하나는 상태를 어디에 둬야 하는지 초기에 정하지 않았기 때문입니다. 화면이 커질수록 같은 데이터가 여러 컴포넌트에 흩어지고, 누가 값을 바꿨는지 추적하기 어려워집니다. 결국 기능은 돌아가지만 수정할 때마다 예기치 않은 사이드 이펙트가 생깁니다. 그래서 상태 설계의 첫 질문은 단순합니다. 이 값은 어디에 저장해야 하고, 누가 변경 권한을 가져야 하는가?입문 단계에서 흔히 하는 실수는 “일단 가까운 컴포넌트에 state를 둔다”는 방식입니다. 초기엔 편하지만 기능이 늘어나면 props 전달이 깊어지고, 중간 컴포넌트가 데이터 중계 역할만 하게 됩니다. 이 문제를 줄이..

변수는 '값을 담는 이름표'다: let/const 쉬운 정리

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개JavaScript를 시작하면 가장 먼저 만나는 개념이 변수입니다. 변수는 어렵게 생각할 필요 없이 "값을 담아두는 이름표"입니다. 특히 요즘 문법에서는 let과 const를 구분해 쓰는 습관이 매우 중요합니다.2. 핵심 내용const: 바뀌지 않을 이름표const는 재할당이 불가능한 변수를 선언할 때 사용합니다. 값이 고정되어야 하는 설정값이나 참조값에 적합하며, 기본 선택지로 쓰기 좋습니다.let: 나중에 바뀔 수 있는 이름표let은 재할당이 가능한 변수를 선언할 때 씁니다. 카운트 값처럼 실행 중에 값이 변하는 데이터에 사용합니다.var는 왜 덜 쓰일까?var는 함수 스코프와 호이스팅 특성 때문에 예기치 않은 ..

[바이브코딩 HTML 웹앱 20일 챌린지] 6일차 - 버튼을 누르면 할 일이 추가되게 만들기

6일차에서는 드디어 버튼 클릭으로 할 일이 실제로 추가되게 만듭니다. 5일차에 준비한 입력창, 버튼, 목록 UI에 JavaScript를 연결해서 사용자 입력이 화면에 반영되는 첫 동작을 구현하는 날입니다.이 단계부터 "정적인 페이지"가 아니라 "반응하는 웹앱"으로 넘어갑니다. 초보자 기준에서는 모든 문법을 완벽히 이해하려고 하기보다, 클릭 이벤트가 어떤 순서로 실행되는지 흐름을 잡는 데 집중하면 훨씬 빠르게 성장할 수 있습니다.목차1. 오늘 만들 기능 소개2. AI에게 요청할 프롬프트3. 코드 작성과 실행 과정4. 코드 이해하기5. 오늘 만든 내용 정리6. 자주 묻는 질문7. 다음 단계로 이어가기1. 오늘 만들 기능 소개오늘의 목표는 입력창에 작성한 할 일을 버튼 클릭 한 번으로 목록에 추가하는 것입니다..

기능 쪼개기: 큰 화면을 컴포넌트 단위로 분해하는 기준

목차1. 주제 소개2. 핵심 내용3. 적용 방법4. 정리5. 자주 묻는 질문1. 주제 소개화면 하나를 통째로 만들기 시작하면 처음에는 빠르게 보이지만, 수정이 반복될수록 코드가 급격히 무거워집니다. 버튼 하나를 고치려 해도 파일 전체를 훑어야 하고, 작은 변경이 다른 영역을 망가뜨리는 일이 자주 생깁니다. 그래서 실무에서는 큰 화면을 먼저 완성하려고 하지 않고, 초기에 컴포넌트 단위로 나누는 기준부터 잡습니다. 이 과정이 흔히 말하는 “기능 쪼개기”입니다.핵심은 디자인을 그대로 조각내는 것이 아니라, 역할과 변경 주기를 기준으로 분해하는 것입니다. 자주 바뀌는 영역과 거의 고정된 영역을 분리하면 이후 요구사항 변경이 들어와도 영향 범위를 예측하기 쉬워집니다. 예를 들어 대시보드 화면이라면 필터 영역, 통..