1. 오늘 한 것 (What I Did)
- HTML로 만들어둔 페이지를 JSON 파일(데이터)과 JavaScript 함수로 쪼개서 다시 만들기 → 동적 렌더링
- 자바스크립트 최신 문법들 (템플릿 리터럴, 구조 분해 할당) 써보기
- http-server으로 로컬 서버 돌려서 파일 불러오는 방법 배우기 → CORS 문제 해결, 올바른 폴더에서 실행하기
- JSON 파싱 오류부터 JavaScript 문법 오류까지 다양한 디버깅 경험
2. 새로 이해한 것 (What I Learned)
왜 HTML을 쪼개서 만들까?
- 내용만 바꾸고 싶으면 JSON 파일만 수정하면 됨, 관리하기 편해짐
- 같은 틀에 다른 데이터만 넣어서 여러 페이지 만들 수 있음, 재사용 가능
- HTML 태그 직접 건드릴 일이 없어짐, 실수 줄어듦
자바스크립트 새로운 문법들
템플릿 리터럴 - 문자열 만들기가 쉬워짐
// 예전 방식: 헷갈리고 실수하기 쉬움
let html = "<div>" + title + "</div>";
// 새로운 방식: 보기 쉽고 실수 안 남
let html = `<div>${title}</div>`;
구조 분해 할당 - 객체에서 값 꺼내기
// 예전 방식
function makeCard(data) {
let title = data.title;
let content = data.content;
}
// 새로운 방식: 한 번에 꺼내기
function makeCard({ title, content }) {
// 바로 title, content 사용 가능
}
배열을 HTML로 바꾸는 패턴
// 데이터 배열을 HTML로 변환하는 기본 공식
데이터배열.map(항목 => `<div>${항목}</div>`).join('')
- map(): 배열의 각 요소를 변환
- join(): 배열을 문자열로 합치기
전체 흐름 정리
기본 패턴: 데이터 가져오기 → 변환하기 → 화면에 그리기
// 1. 데이터 로딩 (JSON 파일에서 데이터 가져오기)
fetch('./data.json')
.then(response => response.json())
// 2. 데이터 변환 (데이터를 HTML로 바꾸기)
.then(data => {
return data.body.map(item => createComponent(item)).join('');
})
// 3. DOM 렌더링 (화면에 보여주기)
.then(html => {
document.querySelector("#main").innerHTML = html;
})
컴포넌트 만드는 기본 틀
const makeComponent = ({ title, content, items }) => {
return `
<div class="component">
<h3>${title}</h3>
<p>${content}</p>
${items.map(item => `<li>${item}</li>`).join('')}
</div>
`;
};
이 패턴만 알면 어떤 페이지든 똑같은 방식으로 만들 수 있다! (아마도....?)
3. 만난 문제들과 해결법
자바스크립트 문법 실수 연발
- 증상: Malformed arrow function parameter list, contents.map is not a function
- 문제: 괄호 빠뜨리기, 변수명 헷갈리기, 함수 순서 바뀌기
- 해결:
- 매개변수는 항상 괄호로 감싸기 (item) =>
- 변수명 복사해서 붙여넣기로 일치시키기
- map() 다음에 join() 순서 지키기
JSON 파일 에러
- 증상: Bad control character in string literal in JSON
- 문제: JSON에서 줄바꿈 때문에 파일이 깨짐
- 해결: 실제 엔터키 대신 \n 문자로 모두 바꾸기
데이터 구조 안 맞음
- 증상: TypeError: contents.map is not a function
- 문제: 코드에서 기대한 데이터 모양과 실제 JSON 데이터 모양이 달랐음
- 해결: JSON 파일 열어서 실제 구조 확인하고 코드 수정
4. 여전히 모르겠는 부분
- 코드의 실행 순서, 흐름, 조건에 따라 결과가 왜 그렇게 나오는지 직관적으로 이해되지 않음
- DOM이 뭔지는 어렴풋이 알겠지만, 실제로 조작하거나 활용하는 방법이 익숙하지 않음
- 선언한 변수들이 언제 살아나고, 언제 사라지는지 모르겠음 → 스코프 개념인가?
- 변수, 매개변수, 인자, 함수 등의 용어와 역할이 명확히 구분되지 않음
'TIL' 카테고리의 다른 글
2025-08-09 NestJS + TypeORM DB 연동 (4) | 2025.08.10 |
---|---|
2025-08-06 (6) | 2025.08.10 |
2025-08-03 (10) | 2025.08.03 |
2025-07-31 (5) | 2025.07.31 |
2025-07-21 (3) | 2025.07.23 |