2424 {
2525 "name" : " Runtime Model" ,
2626 "description" : " JavaScript 실행 환경 이해" ,
27- "chapters" : [1 ]
27+ "chapters" : [
28+ 1
29+ ]
2830 },
2931 {
3032 "name" : " Async Programming" ,
3133 "description" : " 비동기 프로그래밍의 핵심" ,
32- "chapters" : [2 ]
34+ "chapters" : [
35+ 2
36+ ]
3337 },
3438 {
3539 "name" : " Scope & Closure" ,
3640 "description" : " 스코프와 클로저 깊이 이해" ,
37- "chapters" : [3 ]
41+ "chapters" : [
42+ 3
43+ ]
3844 }
3945 ],
4046 "chapters" : [
165171 "estimatedTime" : 10
166172 }
167173 ]
174+ },
175+ {
176+ "id" : " js-4" ,
177+ "order" : 4 ,
178+ "title" : " 비동기 패턴 (Async Patterns)" ,
179+ "description" : " 콜백, Promise, Async/Await의 진화 과정과 에러 핸들링" ,
180+ "keyQuestion" : " 왜 Promise는 콜백 지옥의 해결책일까?" ,
181+ "part" : " async" ,
182+ "partLabel" : " 비동기/패턴" ,
183+ "misconceptions" : [
184+ " 비동기 함수는 병렬로 실행된다"
185+ ],
186+ "lessons" : [
187+ {
188+ "id" : " js-4-1" ,
189+ "order" : 1 ,
190+ "title" : " 콜백 패턴과 한계" ,
191+ "description" : " 콜백 지옥과 제어권 역전 문제" ,
192+ "difficulty" : " basic" ,
193+ "estimatedTime" : 10
194+ },
195+ {
196+ "id" : " js-4-2" ,
197+ "order" : 2 ,
198+ "title" : " Promise 기초" ,
199+ "description" : " Promise 체이닝과 상태 관리" ,
200+ "difficulty" : " intermediate" ,
201+ "estimatedTime" : 15
202+ },
203+ {
204+ "id" : " js-4-3" ,
205+ "order" : 3 ,
206+ "title" : " Async/Await" ,
207+ "description" : " 동기 코드처럼 작성하는 비동기 로직" ,
208+ "difficulty" : " intermediate" ,
209+ "estimatedTime" : 12
210+ },
211+ {
212+ "id" : " js-4-4" ,
213+ "order" : 4 ,
214+ "title" : " 비동기 에러 핸들링" ,
215+ "description" : " try-catch와 .catch()의 올바른 사용" ,
216+ "difficulty" : " intermediate" ,
217+ "estimatedTime" : 10
218+ }
219+ ]
220+ },
221+ {
222+ "id" : " js-5" ,
223+ "order" : 5 ,
224+ "title" : " 메모리와 불변성" ,
225+ "description" : " 자바스크립트의 메모리 관리와 불변성 패턴" ,
226+ "keyQuestion" : " const로 선언한 객체는 왜 수정할 수 있을까?" ,
227+ "part" : " memory" ,
228+ "partLabel" : " 메모리" ,
229+ "misconceptions" : [
230+ " 모든 변수는 스택에 저장된다"
231+ ],
232+ "lessons" : [
233+ {
234+ "id" : " js-5-1" ,
235+ "order" : 1 ,
236+ "title" : " 원시타입 vs 참조타입" ,
237+ "description" : " Stack과 Heap의 메모리 할당 차이" ,
238+ "difficulty" : " basic" ,
239+ "estimatedTime" : 10
240+ },
241+ {
242+ "id" : " js-5-2" ,
243+ "order" : 2 ,
244+ "title" : " 얕은 복사와 깊은 복사" ,
245+ "description" : " 객체 복사의 함정과 해결책" ,
246+ "difficulty" : " intermediate" ,
247+ "estimatedTime" : 12
248+ },
249+ {
250+ "id" : " js-5-3" ,
251+ "order" : 3 ,
252+ "title" : " 불변성 패턴" ,
253+ "description" : " 불변성이 리액트와 상태관리에 중요한 이유" ,
254+ "difficulty" : " advanced" ,
255+ "estimatedTime" : 15
256+ }
257+ ]
258+ },
259+ {
260+ "id" : " js-6" ,
261+ "order" : 6 ,
262+ "title" : " 프로토타입과 클래스" ,
263+ "description" : " 자바스크립트의 상속 모델인 프로토타입 완벽 해부" ,
264+ "keyQuestion" : " 클래스는 프로토타입의 문법 설탕일까?" ,
265+ "part" : " prototype" ,
266+ "partLabel" : " 객체지향" ,
267+ "misconceptions" : [
268+ " JS 클래스는 Java 클래스와 같다"
269+ ],
270+ "lessons" : [
271+ {
272+ "id" : " js-6-1" ,
273+ "order" : 1 ,
274+ "title" : " 프로토타입 체인" ,
275+ "description" : " [[Prototype]] 링크와 속성 탐색" ,
276+ "difficulty" : " intermediate" ,
277+ "estimatedTime" : 15
278+ },
279+ {
280+ "id" : " js-6-2" ,
281+ "order" : 2 ,
282+ "title" : " 생성자 함수" ,
283+ "description" : " new 키워드의 내부 동작 원리" ,
284+ "difficulty" : " intermediate" ,
285+ "estimatedTime" : 12
286+ },
287+ {
288+ "id" : " js-6-3" ,
289+ "order" : 3 ,
290+ "title" : " ES6 클래스" ,
291+ "description" : " class 키워드와 extends의 실체" ,
292+ "difficulty" : " intermediate" ,
293+ "estimatedTime" : 10
294+ }
295+ ]
296+ },
297+ {
298+ "id" : " js-7" ,
299+ "order" : 7 ,
300+ "title" : " V8 엔진 심화" ,
301+ "description" : " 자바스크립트 엔진 내부의 최적화 원리" ,
302+ "keyQuestion" : " 왜 객체의 속성 순서를 지키는 것이 성능에 좋을까?" ,
303+ "part" : " internal" ,
304+ "partLabel" : " 엔진심화" ,
305+ "misconceptions" : [
306+ " JS 객체는 해시맵이다"
307+ ],
308+ "lessons" : [
309+ {
310+ "id" : " js-7-1" ,
311+ "order" : 1 ,
312+ "title" : " 히든 클래스 (Shapes)" ,
313+ "description" : " 객체 속성 접근 속도를 높이는 V8의 마법" ,
314+ "difficulty" : " advanced" ,
315+ "estimatedTime" : 20
316+ },
317+ {
318+ "id" : " js-7-2" ,
319+ "order" : 2 ,
320+ "title" : " V8 메모리 구조" ,
321+ "description" : " Young/Old Generation과 가비지 컬렉션" ,
322+ "difficulty" : " advanced" ,
323+ "estimatedTime" : 15
324+ },
325+ {
326+ "id" : " js-7-3" ,
327+ "order" : 3 ,
328+ "title" : " 최적화 킬러" ,
329+ "description" : " Deoptimization을 유발하는 코드 패턴" ,
330+ "difficulty" : " expert" ,
331+ "estimatedTime" : 15
332+ }
333+ ]
334+ },
335+ {
336+ "id" : " js-8" ,
337+ "order" : 8 ,
338+ "title" : " 렌더링 성능 최적화" ,
339+ "description" : " 브라우저 렌더링 파이프라인과 프레임 예산" ,
340+ "keyQuestion" : " 애니메이션이 버벅이는 진짜 이유는?" ,
341+ "part" : " perf" ,
342+ "partLabel" : " 성능" ,
343+ "misconceptions" : [
344+ " setTimeout은 정확하다"
345+ ],
346+ "lessons" : [
347+ {
348+ "id" : " js-8-1" ,
349+ "order" : 1 ,
350+ "title" : " 렌더링 파이프라인" ,
351+ "description" : " JS가 픽셀이 되기까지의 과정" ,
352+ "difficulty" : " advanced" ,
353+ "estimatedTime" : 15
354+ },
355+ {
356+ "id" : " js-8-2" ,
357+ "order" : 2 ,
358+ "title" : " rAF vs setTimeout" ,
359+ "description" : " 프레임 예산(16.6ms)과 동기화" ,
360+ "difficulty" : " advanced" ,
361+ "estimatedTime" : 12
362+ },
363+ {
364+ "id" : " js-8-3" ,
365+ "order" : 3 ,
366+ "title" : " 태스크 스플리팅" ,
367+ "description" : " Long Task 쪼개기와 Yielding" ,
368+ "difficulty" : " expert" ,
369+ "estimatedTime" : 15
370+ }
371+ ]
372+ },
373+ {
374+ "id" : " js-9" ,
375+ "order" : 9 ,
376+ "title" : " 메타프로그래밍" ,
377+ "description" : " 언어의 기본 동작을 재정의하는 고급 기능" ,
378+ "keyQuestion" : " 라이브러리는 어떻게 변수 변경을 감지할까?" ,
379+ "part" : " meta" ,
380+ "partLabel" : " 메타" ,
381+ "misconceptions" : [
382+ " Proxy는 원본을 복사한다"
383+ ],
384+ "lessons" : [
385+ {
386+ "id" : " js-9-1" ,
387+ "order" : 1 ,
388+ "title" : " Proxy와 Reflect" ,
389+ "description" : " 객체 조작 가로채기 (Traps)" ,
390+ "difficulty" : " expert" ,
391+ "estimatedTime" : 15
392+ },
393+ {
394+ "id" : " js-9-2" ,
395+ "order" : 2 ,
396+ "title" : " 제너레이터" ,
397+ "description" : " 함수의 일시 정지와 재개" ,
398+ "difficulty" : " advanced" ,
399+ "estimatedTime" : 12
400+ },
401+ {
402+ "id" : " js-9-3" ,
403+ "order" : 3 ,
404+ "title" : " WeakMap과 메모리" ,
405+ "description" : " 약한 참조와 메모리 누수 방지" ,
406+ "difficulty" : " expert" ,
407+ "estimatedTime" : 10
408+ }
409+ ]
168410 }
169411 ]
170- }
412+ }
0 commit comments