JavaScript
웹 페이지에 움직임을 주는 언어 — 변수 · 함수 · 이벤트 · 화면 바꾸기
CLICK TO OPEN
웹 페이지에 움직임을 주는 언어 — 변수 · 함수 · 이벤트 · 화면 바꾸기
CLICK TO OPEN
JS란? · Hello world · 변수 · 데이터 타입 · 연산자 · 조건문 · 함수 · 이벤트 · 화면 조작
JavaScript란?
JavaScript란?
HTML 뼈대
CSS 옷과 색깔
JavaScript 움직임과 반응
JS로 할 수 있는 것
• 버튼 클릭하면 글자·그림 바꾸기
• 사용자가 적은 이름 기억하기
• 계산하고 결과 화면에 보여주기
• 게임·애니메이션 같은 움직임 만들기
이 페이지 코드 안내
모든 예제는 ES6+(2015년 이후 최신 자바스크립트) 문법으로 작성
• 변수는 let·상수는 const (옛날 var 안 씀)
• 함수는 화살표 함수 ( ) => { } 사용
• 문장 조립은 템플릿 리터럴 `${ }` (옛날 + 이어붙이기 대신)
• 색깔 규칙 — 상수·변수·메서드·함수·속성을 색으로 구분
참고 링크
• MDN — 상호작용 추가하기 — 이 페이지의 원본 문서
• MDN JavaScript 메인 — 전체 안내서
Hello world!
Hello world! — 첫 JavaScript
페이지의 큰 제목(h1)을 JS로 바꾸는 첫걸음, HTML이 제목을 만들고 CSS가 꾸미고 JS가 글자를 바꾸기, 세 파일이 협동하는 가장 작은 예제
미리보기 — 아래 코드가 실제로 실행된 결과
버튼을 누르면 아래 scripts/main.js 코드가 그대로 작동
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• const — 상수(constant) 만드는 단어, 한 번 담으면 다시 안 바뀌는 상자
• title · btn — 찾은 요소를 담는 상자 이름(상수명), const로 만들어 값이 고정된 상수
• document.querySelector("#title") — 메서드(객체에 딸린 도구), id로 요소 하나 찾기
• ( ) => { … } — 화살표 함수(ES6), 이름 없이 그 자리서 바로 쓰는 함수, 옛 function( )의 최신 표기
• addEventListener("click", 함수) — 메서드, "클릭되면 이 함수 실행" 약속
• textContent — 속성(property), 요소 안 글자 내용
• 속성 vs 메서드 — 점 뒤 이름에 괄호 ( ) 붙으면 메서드(동작), 안 붙으면 속성(값)
• 연결: CSS는 <head>에 link로, JS는 </body> 앞에 script로
• 같은 id로 셋이 연결: HTML id="title" → CSS #title → JS querySelector("#title")
• 위치는 강제 아님 — spec상 link·script 둘 다 어디든 허용, 깜빡임·blocking 때문에 생긴 관례
• CSS를 <head>에 — 그리기 전 스타일 알아야 스타일 안 입은 화면이 번쩍이는 것(FOUC) 방지
• script를 </body> 앞에 — HTML 다 그린 뒤 실행, querySelector가 요소를 찾음(위에 두면 아직 없어 null)
• 실무 권장 — <head>에 두고 defer 속성(다운로드 병렬·파싱 후 실행·순서 보장)
변수 (Variables)
변수 — 값을 담는 상자
변수는 이름표 붙은 상자, 그 안에 숫자·글자 같은 값을 넣어두고 필요할 때 꺼내 쓰기, 상자 이름만 부르면 안에 든 값이 따라옴
미리보기 — 아래 코드가 실제로 실행된 결과
이름을 넣고 버튼을 누르면, 입력값이 변수에 담겨 인사로 나옴
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• 식별자(변|상수명) — 값을 담아 이름 붙인 상자, 이름만 부르면 안에 든 값이 따라옴
• let — "새 변수(상자) 만들게" 하는 마법 단어
• = — "이 값을 상자에 넣어" 라는 뜻, 같다는 비교가 아님
• let vs const — let은 값을 나중에 바꿀 수 있는 상자, const는 한 번 담으면 고정
• .value — 입력칸에 친 글자를 꺼내는 속성
• 템플릿 리터럴 `안녕, ${이름}!` — 백틱 안 ${ }에 값 끼우기, 옛 "안녕," + 이름 이어붙이기의 최신 표기
데이터 타입
데이터 타입 — 상자에 담는 값의 종류
상자에 담는 값에도 종류가 있음, 글자·숫자·참거짓·여러 개 묶음 등, 종류에 따라 쓰는 법이 조금씩 다름
값의 종류
| 종류 | 설명 | 예시 |
|---|---|---|
String | 글자 (따옴표로 감싸기) | "Bob" |
Number | 숫자 (따옴표 없음) | 10 |
Boolean | 참 또는 거짓 | true, false |
undefined | 값을 아직 안 넣음 (선언만 한 변수) | let x; 한 뒤의 x |
null | 의도적 "비어있음" 표시 | null |
Array | 여러 값을 한 줄에 묶기 | [1, "Bob", 10] |
Object | 거의 모든 것 (덩어리) | document.querySelector("h1") |
미리보기 — 아래 코드가 실제로 실행된 결과
버튼 7개로 String·Number·Boolean·undefined·null·Array·Object 각각의 값과 typeof 확인
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• 글자는 꼭 따옴표로 감싸기, 숫자는 안 감싸기
• Array는 대괄호 [ ] 안에 값을 쉼표로 나열
• typeof 값 — 그 값의 타입을 글자로 알려 줌 (예: "string"·"number"·"object")
• undefined(값 미할당)·null(의도적 비움)도 타입의 하나
• 결과 문장은 템플릿 리터럴 `${값} (타입: ${typeof 값})`로 조립
연산자 & 주석
연산자 & 주석
연산자는 값을 더하고 비교하는 기호, 주석은 컴퓨터는 무시하고 사람만 읽는 메모
연산자
| 기호 | 역할 | 예시 |
|---|---|---|
+ | 더하기 / 글자 잇기 | 6 + 9 → 15 |
- * / | 빼기·곱하기·나누기 | 8 * 2 → 16 |
= | 상자에 값 넣기 | let x = 3; |
=== | 같은지 비교 (참/거짓) | x === 3 → true |
!== | 다른지 비교 | x !== 5 → true |
미리보기 — 아래 코드가 실제로 실행된 결과
두 숫자와 기호를 고르고 계산을 누르면 연산자가 실제로 작동
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• +는 숫자끼리는 더하기, 글자끼리는 이어 붙이기
• =는 넣기, ===는 같은지 비교, 헷갈리지 않기
• // 뒤는 주석 — 컴퓨터는 무시, 사람만 읽는 메모
• .value로 입력 글자 꺼내고 Number( )로 숫자 변환
• 결과 문장은 템플릿 리터럴 `${x} ${기호} ${y} = ${result}` — 옛 + 이어붙이기보다 읽기 쉬움
조건문 (if/else)
조건문 — 만약 ~라면
"만약 이렇다면 이것을 하고, 아니면 저것을 해" 라고 컴퓨터에게 시키는 갈림길, if(만약)와 else(아니면)로 길을 나누기
미리보기 — 아래 코드가 실제로 실행된 결과
아이스크림을 고르고 확인을 누르면 if/else 코드가 그대로 작동
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• if (조건) — 괄호 안 조건이 참(true)이면 바로 아래 중괄호 실행
• else — 조건이 거짓이면 이쪽 실행
• === — 두 값이 같은지 비교, 결과는 참 또는 거짓
• else if — 갈림길 여러 개일 때 (예: 초코·바닐라·딸기)
함수 (Functions)
함수 — 재사용하는 명령 묶음
함수는 자주 쓰는 명령을 하나로 묶어 이름 붙인 것, 이름만 부르면(호출) 묶어둔 일을 척척 해줌, 마치 자판기 버튼 하나로 음료 나오기
미리보기 — 아래 코드가 실제로 실행된 결과
두 숫자를 넣고 곱하기를 누르면 multiply 함수가 그대로 호출됨
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• const 이름 = (재료) => { } — 화살표 함수 만들기, 괄호 안 num1, num2는 매개변수(받아올 재료)
• => 뒤가 한 줄이면 return·중괄호 생략 — (a, b) => a * b 는 곱한 값을 자동으로 돌려줌
• multiply(4, 7) — 재료 4와 7 넣고 함수 부르기(호출), 답 28
• 옛 표기 function multiply( ){ return … } 와 같은 동작, 화살표가 더 짧음
이벤트 (Events)
이벤트 — 사용자 행동에 반응하기
이벤트는 클릭·키 누르기 같은 사용자 행동, "이 행동이 일어나면 이걸 해줘" 라고 미리 약속해두면 페이지가 반응함
미리보기 — 아래 코드가 실제로 실행된 결과
버튼을 누를 때마다 click 이벤트가 일어나 횟수가 늘어남
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• addEventListener("click", 함수) — "클릭되면" 그 함수를 실행하라는 약속
• ( ) => { ... } — 화살표 함수(ES6), 이름 없이 그 자리서 바로 쓰는 함수
• n++ — n을 1 늘리기 (n = n + 1 과 같음)
• click 말고도 mouseover(마우스 올림), keydown(키 누름) 등 많음
이미지 바꾸기
이미지 바꾸기 — 클릭하면 그림 토글
그림을 클릭할 때마다 두 그림이 번갈아 바뀌는 장난, 지금 그림이 무엇인지 확인하고 다른 그림으로 교체하기
미리보기 — 아래 코드가 실제로 실행된 결과
그림을 클릭하면 getAttribute/setAttribute로 두 그림이 번갈아 바뀜
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• getAttribute("src") — 그림의 파일 주소 읽어오기
• setAttribute("src", "...") — 그림 주소를 새 것으로 바꾸기
• onclick = ( ) => { } — addEventListener 말고 onclick 속성에 함수 거는 방법도 있음
• if/else로 지금 그림을 확인해 반대 그림으로 토글
myImage.addEventListener("click", () => { /* 클릭하면 실행 */ });// onclick — 덮어써서 마지막 1개만btn.onclick = 저장하기;btn.onclick = 알림띄우기; // 저장하기 사라짐 → 알림만 실행// addEventListener — 쌓여서 전부btn.addEventListener("click", 저장하기);btn.addEventListener("click", 알림띄우기); // 클릭 1번 → 저장 + 알림 둘 다환영 메시지 저장
환영 메시지 저장 — 이름 기억하기
사용자에게 이름을 물어보고 브라우저에 저장, 다음에 다시 와도 이름을 기억해서 인사, localStorage가 브라우저의 작은 메모장 역할
미리보기 — 아래 코드가 실제로 실행된 결과
이름을 저장하면 localStorage에 기억됨 (이 미리보기는 새로고침 시 초기화, 실제 브라우저에선 계속 기억)
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• localStorage.setItem("name", 값) — 브라우저 메모장에 저장
• localStorage.getItem("name") — 저장된 값 꺼내기, 없으면 null
• removeItem("name") — 저장된 값 지우기
• 인사말은 템플릿 리터럴 `안녕, ${이름}!`로 조립
• prompt()로 물어보는 방법도 있음 (아래 참고 링크)
참고 링크
• MDN localStorage — 브라우저 저장소 설명
• MDN prompt() — 입력 창 사용법
반복문 (Loops)
반복문 — 똑같은 일을 여러 번
같은 일을 여러 번 시킬 때 똑같은 코드를 복붙하면 힘듦, for에게 "몇 번 돌지"만 정해주면 그 안의 일을 알아서 그만큼 반복, 마치 줄넘기 100번처럼 횟수만 정하기
미리보기 — 아래 코드가 실제로 실행된 결과
숫자를 정하고 버튼을 누르면 for·while이 그만큼 반복하며 목록을 그림
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• for (시작; 조건; 증가) — 시작값·계속할 조건·매번 늘릴 양 세 가지
• i++ — i를 1씩 늘리기, i = i + 1과 같음
• while (조건) — 조건이 참인 동안 반복, 조건을 안 바꾸면 무한반복 주의
• 반복문(for·while)은 ES6에서도 그대로 사용
참고 링크
• MDN 반복문 — for·while 자세히
문자열 메서드
문자열 메서드 — 글자 다루는 도구
글자(문자열)에는 길이 재기·대문자 바꾸기·일부 바꾸기 같은 편한 도구가 딸려 있음, 점(.)을 찍고 도구 이름을 부르면 글자를 척척 다루기
미리보기 — 아래 코드가 실제로 실행된 결과
글자를 넣고 버튼을 누르면 length·toUpperCase·replace 결과를 한 번에 보여줌
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• .length — 글자 수, 괄호 없는 속성
• .toUpperCase() — 모두 대문자로, 괄호 붙는 메서드
• .replace(찾을것, 바꿀것) — 일부를 다른 글자로
• 구분법 — 괄호 ( ) 있으면 메서드, 없으면 속성
• ` 백틱 — 키보드 숫자 1 왼쪽 키, 작은따옴표 ' 와 다름
• `${ }` — 템플릿 리터럴, 백틱 안에 값 끼워 문장 만들기
참고 링크
• MDN 문자열 메서드 — 더 많은 도구
배열 메서드
배열 메서드 — 여러 값을 한 줄에
배열은 값 여러 개를 한 줄에 차곡차곡 담는 묶음, 마치 사물함처럼 칸칸이 들어 있어 추가·개수 세기·이어붙이기를 도구로 쉽게 하기
미리보기 — 아래 코드가 실제로 실행된 결과
과일 이름을 넣고 추가를 누르면 push로 배열에 쌓이고 length·join 결과가 갱신됨
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• .push(값) — 배열 끝에 새 값 추가 (메서드)
• .length — 담긴 값의 개수 (속성)
• .join(", ") — 값을 사이 글자로 이어 한 문장으로
• 대괄호 [ ] 안에 쉼표로 나열해 배열 만들기
• const — 배열은 const로 선언 (push로 내용이 바뀌어도 변수 자체를 재할당하지 않으니까)
• render — 화면을 다시 그리는 화살표 함수, 데이터가 바뀔 때마다 호출해 화면 갱신
참고 링크
• MDN 배열 — push·pop·map 등
객체 (Objects)
객체 — 한 덩어리로 묶기
객체는 서로 관련된 값들을 이름표 붙여 한 덩어리로 묶은 것, 사람 한 명을 이름·나이로 묶듯, 점(.)을 찍고 이름표를 불러 값을 읽고 바꾸기
미리보기 — 아래 코드가 실제로 실행된 결과
버튼을 누르면 person 객체의 age·name 속성을 점(.)으로 읽고 바꿔 화면이 갱신됨
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• { 이름: 값, … } — 중괄호 안에 이름표와 값을 쌍으로
• person.name — 점 찍고 이름표(속성)로 값 읽기
• person.age++ — 점 표기로 값 바꾸기
• 이름표 하나하나를 속성(property)이라 부름
• 같은 모양 객체를 여러 개 찍어내는 틀이 클래스(class) — 다음 STEP 15에서 배움
참고 링크
• MDN 객체 기본 — 속성·메서드
클래스 (Class)
클래스 — 객체 찍어내는 틀
객체(STEP 14)를 하나하나 손으로 만들면 번거로움, 클래스는 같은 모양 객체를 여러 개 찍어내는 틀(붕어빵 틀), new로 찍으면 객체(인스턴스)가 나옴, ES6부터 class 문법 정식 지원
미리보기 — 아래 코드가 실제로 실행된 결과
버튼을 누르면 Dog 클래스로 찍어낸 두 객체가 각자 이름으로 짖음
폴더 구조
index.html
styles/main.css
scripts/main.js
핵심 포인트
• class 이름 { } — 객체를 찍어내는 틀(설계도)
• constructor(재료) — new로 만들 때 자동 실행, this.속성에 값 저장
• this — 지금 만들어지는 객체 자신을 가리킴
• new Dog("뽀삐") — 틀로 객체(인스턴스) 찍어내기, 여러 개 가능
• 틀 안의 함수는 메서드 — 모든 객체가 함께 사용
• Document(대문자)는 클래스, document(소문자)는 그 틀로 찍은 객체
참고 링크
• MDN 클래스 — class·constructor·메서드
• MDN new 연산자 — 인스턴스 생성
디버깅 (Debugging)
디버깅 — 에러 잡고 값 확인하기
코드가 안 될 때 추측은 금물, 개발자도구(F12)의 Console 탭에서 console.log(JS의 프린트 · 파이썬 print와 같은 역할)로 값을 직접 확인하고 빨간 에러 메시지를 읽기, 에러는 적이 아니라 어디가 틀렸는지 알려주는 힌트
폴더 구조
index.html
scripts/main.js
핵심 포인트
• F12 (또는 우클릭 → 검사) → Console 탭에서 로그·에러 확인
• console.log(값) — JS의 프린트(파이썬 print와 같은 역할), 실행 중 값을 눈으로 확인
• 왜 중요? — 코드는 눈에 안 보이게 돌아감, 찍어봐야 "내 생각 vs 실제 값"이 맞는지 알 수 있음, 버그 대부분이 "값이 내 예상과 다름"이라 출력 한 줄이 원인을 바로 드러냄
• console.log("이름:", 값) — 앞에 이름표를 붙이면 여러 개 찍어도 안 헷갈림
• typeof — 값의 종류 확인 (number·string 구분)
• Cannot read properties of null — querySelector가 못 찾음 (id 오타·script 위치)
• X is not defined — 변수·함수 이름 오타거나 선언 안 함
• X is not a function — 오타거나 그 값에 없는 메서드 호출
• 빨간 에러 줄 클릭 → 몇 번째 줄인지 표시, 거기부터 확인
• debugger — 코드에 한 줄 적으면 그 지점에서 실행이 멈춤(중단점), F12 열려 있을 때만 작동, 멈춘 상태로 변수값을 콘솔에 직접 쳐보거나 한 줄씩 실행 가능, console.log를 여러 개 찍기 귀찮을 때 강력
참고 링크
• MDN console.log — 콘솔 출력
• Chrome DevTools 콘솔 — 개발자도구 사용법
서버 연동 (CRUD)
서버 연동 — fetch로 CRUD 하기
지금까지는 localStorage(내 브라우저에만 저장)만 썼음, 진짜 서버가 있으면 fetch로 데이터를 주고받아 생성·조회·수정·삭제(CRUD)가 가능, json-server로 가짜 서버를 1분 만에 띄워 연습
미리보기 — 아래 코드가 실제로 실행된 결과 (가짜 서버로 시뮬레이션)
버튼을 누르면 CREATE·READ·UPDATE·DELETE가 순서대로 (가짜) 서버에 요청을 보내고 결과를 보여줌
폴더 구조
db.json — json-server가 읽는 가짜 DB
• db.json 하나가 가짜 데이터베이스 역할, json-server가 이 파일을 읽어서 자동으로 GET·POST·PUT·DELETE API를 만들어줌
• 키 이름 "users"가 곧 주소가 됨 — http://localhost:3000/users로 요청하면 이 배열을 주고받음
• POST로 추가하면 새 항목이, PUT·DELETE하면 수정·삭제된 내용이 이 파일에 실시간으로 저장됨(서버 껐다 켜도 유지)
index.html
styles/main.css
scripts/main.js
서버 실행 — json-server (실제 폴더에서 실습할 때)
핵심 포인트
① fetch 기본
• fetch(주소, 옵션) — "가져오다"라는 뜻, 서버에 요청 보내기, method로 CREATE(POST)·READ(GET)·UPDATE(PUT)·DELETE(DELETE) 구분
• JSON.stringify(객체) — 보낼 때 객체를 글자로 변환
예) { name: "John" } → '{"name":"John"}'
• res.json() — 받은 응답을 다시 객체로
예) '{"id":1,"name":"John"}' → { id: 1, name: "John" }
② 비동기 · async / await
• fetch는 비동기 — 응답이 언제 올지 몰라서 브라우저를 멈춰놓고 기다리지 않음, 바로 다음 줄로 넘어가고 응답은 나중에 처리(그래야 기다리는 동안 클릭·스크롤이 계속 됨)
• await("기다리다") — 그 비동기 결과가 올 때까지 이 줄만 대기, 브라우저 전체가 멈추는 게 아니라 async 함수 안쪽만 순서대로 기다리게 해줌
• async("비동기") — 함수 앞에 붙여서 "이 함수 안에서 await 씀" 표시하는 팻말, async와 await은 짝꿍 — await은 async 함수 안에서만 쓸 수 있음(없으면 SyntaxError)
③ norm(await res.json()) 실행 순서
• 안에서 바깥으로 실행됨: ① res.json()으로 응답을 객체로 바꾸고 ② await로 그 결과를 기다렸다가 ③ 완성된 객체를 norm에 넣어 순서를 정리함
풀어쓰면 const data = await res.json(); const result = norm(data);와 완전히 같은 동작
• 재조립 순서는 서버가 정하는 게 아니라 norm 함수를 쓴 우리(개발자)가 정한 것 — { id: data.id, name: data.name }이라고 코드에 그 순서로 적어서 결과도 그 순서로 나옴, { name: data.name, id: data.id }로 적었으면 반대로 name이 먼저 나왔을 것
예) 서버 응답 [{name:"Jane",id:1}, {id:2,name:"Lee"}](뒤죽박죽) → norm 통과 후 [{id:1,name:"Jane"}, {id:2,name:"Lee"}](통일), 값은 그대로고 키 순서만 바뀜
④ 실행 환경 주의사항
• 위 미리보기는 브라우저 안에서 가짜 서버를 흉내 낸 것, 실제로는 json-server를 켜고 http://localhost:3000으로 요청을 보내야 함(아래 실행법 참고)
• npm install -g json-server(전역 설치)는 항상 최신 버전을 받음, 최신 json-server(v1.x)는 id를 랜덤 문자열로 만들어서 예제(id가 1,2,3 숫자)와 안 맞음
• 터미널에 그냥 json-server ...라고 치면 이미 깔려있는 전역 버전이 먼저 실행됨(로컬에 버전을 고정해놔도 무시당함) → 꼭 npm start로 실행할 것 (package.json의 start 스크립트가 이 폴더의 로컬 버전을 확실히 사용)
• JSON 객체는 키 순서가 의미 없음 — 서버가 {"id":1,"name":"Kim"}과 {"name":"Kim","id":1}을 다르게 저장해도 데이터는 똑같음(버그 아님)
• 실제 서비스에서는 이 자리에 진짜 백엔드(Node.js·Express 등)가 들어감
참고 링크
• MDN Fetch API — fetch 사용법
• json-server (GitHub) — 가짜 REST API 서버
미니 프로젝트 (HTML + CSS + JS)
미니 프로젝트 (HTML + CSS + JS)
지금까지 배운 HTML(뼈대)·CSS(꾸미기)·JS(기능)를 전부 모아 자유 주제로 자기만의 한 페이지 웹사이트를 직접 제작, 정답 없음 — 만들고 싶은 걸 만들기, 작게 시작해서 기능 하나씩 붙이기
이제 이만큼 할 수 있음 (복습)
• 변수·조건문·함수로 로직 짜기
• 이벤트로 버튼·입력에 반응하기
• querySelector·textContent·createElement·appendChild로 화면 바꾸기
• 배열·객체·클래스로 데이터 다루기
• console.log·debugger로 디버깅하기
만드는 순서
① 기획서 작성 + index.html 맨 위에 주석으로 심기
② 종이에 화면을 먼저 그리기 (무엇이 어디에)
③ HTML로 뼈대 — 제목·입력칸·버튼·결과칸
④ CSS로 꾸미기 — 색·여백·글꼴
⑤ JS로 기능 — 이벤트 달고 동작 만들기
⑥ F12로 디버깅 — 안 되면 console.log로 값 확인
⑦ Netlify로 배포 — URL 제출
시작 템플릿 — index.html
시작 템플릿 — styles/main.css
시작 템플릿 — scripts/main.js
핵심 포인트
• 기획서 먼저! — 코딩보다 기획이 더 중요, 무엇을·왜·누구를 위해·어떤 기능을 정하고 시작해야 길을 안 잃음
• 기획서 항목 — 프로젝트 이름 / 한 줄 소개 / 목표(왜 만드나) / 핵심 기능 3개 / 화면 구성(어디에 무엇)
• 기획서를 사이트에 심기 — index.html 맨 위에 <!-- ... --> 주석으로 기획서를 박아두기, 만들다 헷갈릴 때 다시 보는 나침반
• 작게 시작 — 버튼 하나·기능 하나부터, 되면 다음 기능 추가
• HTML → CSS → JS 순서 — 뼈대 먼저, 꾸미기 다음, 기능 마지막
• 막히면 console.log로 값 확인 + 에러 메시지 읽기 (STEP 16)
• 한 번에 완벽 X — 일단 돌아가게 만들고 다듬기
• 다 만들면 Netlify 배포해서 친구에게 링크 공유
도전
• 기능 2개 이상 넣기 (예: 추가 + 삭제)
• localStorage로 새로고침해도 안 사라지게 저장
• 모바일에서도 보기 좋게 반응형(@media) 적용
참고 링크
• MDN 웹 개발 학습 — 막힐 때 찾아보기
• 이전 STEP 카드를 다시 열어 코드 복습하기 (특히 STEP 08 이벤트 · 13 배열 · 16 디버깅)
내장 객체 + 이벤트 목록
목록 — JS 내장 객체 · 메서드 · 이벤트 총정리
지금까지 배운 Math·String·Array·Object·JSON·Date·Number 메서드와 이벤트 목록을 한 곳에 모아둠, 실행용이 아니라 필요할 때 찾아보는 참고 카드, 실무 예시 10개도 함께 훑어보기
내장 객체 메서드
이벤트 목록
실무 예시 10개
핵심 포인트
• 이 카드는 실행용이 아니라 참고용 — btn·input·form 같은 요소가 실제로 없어서 그대로 실행하면 에러남, 필요할 때 찾아서 내 프로젝트에 맞게 옮겨 쓰기
• 괄호 ( ) 있으면 메서드, 없으면 속성 — .length vs .toUpperCase()
• 이벤트는 addEventListener("이벤트이름", 함수) 형태로 통일
• 실무에서는 이 목록을 전부 외우기보다, 필요할 때 검색해서 찾아 쓰는 습관이 더 중요
참고 링크
• MDN 전역 객체 — Math·String·Array·Object 등 전체 목록
• MDN 이벤트 레퍼런스 — 이벤트 종류 전체 목록