Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive (18)

JDevBlog

49. Babelκ³Ό Webpack을 μ΄μš©ν•œ ES6+/ES.NEXT 개발 ν™˜κ²½ ꡬ좕

크둬, μ‚¬νŒŒλ¦¬, νŒŒμ΄μ–΄ν­μŠ€, 엣지 같은 에버그린 λΈŒλΌμš°μ €_evergreen browser 1의 ES6 μ§€μ›μœ¨μ€ μ•½ 98%둜 거의 λŒ€λΆ€λΆ„μ˜ ES6 사양을 μ§€μ›ν•œλ‹€. ES6+와 ES.NEXT의 μ΅œμ‹  ECMAScript 사양을 μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ €λ©΄ μ΅œμ‹  μ‚¬μ–‘μœΌλ‘œ μž‘μ„±λœ μ½”λ“œλ₯Ό κ²½μš°μ— 따라 IEλ₯Ό ν¬ν•¨ν•œ κ΅¬ν˜• λΈŒλΌμš°μ €μ—μ„œ 문제 없이 λ™μž‘μ‹œν‚€κΈ° μœ„ν•œ 개발 ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€. λ˜ν•œ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œμ νŠΈκ°€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ―€λ‘œ λͺ¨λ“ˆ λ‘œλ”λ„ ν•„μš”ν•˜λ‹€. ES6 λͺ¨λ“ˆ(ESM) 은 λŒ€λΆ€λΆ„μ˜ λͺ¨λ˜ λΈŒλΌμš°μ €(Chrome 61, FF 60, SF 10.1, Edge 16 이상)μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ λ‹€μŒκ³Ό 같은 이유둜 μ•„μ§κΉŒμ§€λŠ” ESMλ³΄λ‹€λŠ” λ³„λ„μ˜ λͺ¨λ“ˆ λ‘œλ”λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€. IEλ₯Ό ν¬ν•¨ν•œ κ΅¬ν˜• ..

48. λͺ¨λ“ˆ

48.1 λͺ¨λ“ˆμ˜ 일반적 의미 λͺ¨λ“ˆ_module μ΄λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” κ°œλ³„μ  μš”μ†Œλ‘œμ„œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 쑰각을 λ§ν•œλ‹€. λͺ¨λ“ˆμ΄ μ„±λ¦½ν•˜λ €λ©΄ λͺ¨λ“ˆμ€ μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„(λͺ¨λ“ˆ μŠ€μ½”ν”„)λ₯Ό κ°€μ§ˆ 수 μžˆμ–΄μ•Ό ν•œλ‹€. μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” λͺ¨λ“ˆμ˜ μžμ‚°(λͺ¨λ“ˆμ— ν¬ν•¨λ˜μ–΄ μžˆλŠ” λ³€μˆ˜, ν•¨μˆ˜, 객체 λ“±)은 기본적으둜 λΉ„κ³΅κ°œ μƒνƒœλ‹€. λ‹€μ‹œ 말해, μžμ‹ λ§Œμ˜ 파일 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” λͺ¨λ“ˆμ˜ λͺ¨λ“  μžμ‚°μ€ μΊ‘μŠν™”λ˜μ–΄ λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μ ‘κ·Όν•  수 μ—†λ‹€. 즉, λͺ¨λ“ˆμ€ κ°œλ³„μ  μ‘΄μž¬λ‘œμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΆ„λ¦¬λ˜μ–΄ μ‘΄μž¬ν•œλ‹€. λͺ¨λ“ˆμ€ κ³΅κ°œκ°€ ν•„μš”ν•œ μžμ‚°μ— ν•œμ •ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ 선택적 κ³΅κ°œκ°€ κ°€λŠ₯ν•˜λ‹€. 이λ₯Ό export라 ν•œλ‹€. λͺ¨λ“ˆ μ‚¬μš©μžλŠ” λͺ¨λ“ˆμ΄ 곡개_export ν•œ μžμ‚° 쀑 일뢀 λ˜λŠ” 전체λ₯Ό 선택해 μžμ‹ μ˜ μŠ€μ½”ν”„ λ‚΄λ‘œ λΆˆλŸ¬λ“€μ—¬ μž¬μ‚¬μš©ν•  수..

47. μ—λŸ¬ 처리

47.1 μ—λŸ¬ 처리의 ν•„μš”μ„± μ—λŸ¬_errorκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ μ—λŸ¬λŠ” μ–Έμ œλ‚˜ λ°œμƒν•  수 μžˆλ‹€. λ°œμƒν•œ μ—λŸ¬μ— λŒ€ν•΄ λŒ€μ²˜ν•˜μ§€ μ•Šκ³  λ°©μΉ˜ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ κ°•μ œ μ’…λ£Œλœλ‹€. try...catch 문을 μ‚¬μš©ν•΄ λ°œμƒν•œ μ—λŸ¬μ— μ μ ˆν•˜κ²Œ λŒ€μ‘ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ κ°•μ œ μ’…λ£Œλ˜μ§€ μ•Šκ³  κ³„μ†ν•΄μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€. μ§μ ‘μ μœΌλ‘œ μ—λŸ¬λ₯Ό λ°œμƒν•˜μ§€λŠ” μ•ŠλŠ” μ˜ˆμ™Έ_exception 적인 상황이 λ°œμƒν•  μˆ˜λ„ μžˆλ‹€. μ˜ˆμ™Έμ μΈ 상황에 μ μ ˆν•˜κ²Œ λŒ€μ‘ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬λ‘œ μ΄μ–΄μ§ˆ κ°€λŠ₯성이 크닀. 47.2 try..catch...finally λ¬Έ μ˜ˆμ™Έμ μΈ 상황이 λ°œμƒν•˜λ©΄ 첫번째, λ°˜ν™˜ν•˜λŠ” κ°’(null λ˜λŠ” -1)을 if λ¬Έμ΄λ‚˜ 단좕 평가 λ˜λŠ” μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλ₯Ό 톡해 ν™•μΈν•΄μ„œ μ²˜λ¦¬ν•˜λŠ” 방법과 λ‘λ²ˆμ§Έ, μ—λŸ¬..

46. μ œλ„ˆλ ˆμ΄ν„°μ™€ async/await

46.1 μ œλ„ˆλ ˆμ΄ν„°λž€? ES6μ—μ„œ λ„μž…λœ μ œλ„ˆλ ˆμ΄ν„°_generatorλŠ” μ½”λ“œ λΈ”λ‘μ˜ 싀행을 μΌμ‹œ μ€‘μ§€ν–ˆλ‹€κ°€ ν•„μš”ν•œ μ‹œμ μ— μž¬κ°œν•  수 μžˆλŠ” νŠΉμˆ˜ν•œ ν•¨μˆ˜λ‹€. μ œλ„ˆλ ˆμ΄ν„°μ™€ 일반 ν•¨μˆ˜μ˜ μ°¨μ΄λŠ” λ‹€μŒκ³Ό κ°™λ‹€. 1. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœμžμ—κ²Œ ν•¨μˆ˜ μ‹€ν–‰μ˜ μ œμ–΄κΆŒμ„ 양도할 수 μžˆλ‹€. 2. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœμžμ™€ ν•¨μˆ˜μ˜ μƒνƒœλ₯Ό 주고받을 수 μžˆλ‹€. 3. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ œλ„ˆλ ˆμ΄ν„° 객체λ₯Ό λ°˜ν™˜ν•œλ‹€. 46.2 μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜μ˜ μ •μ˜ μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” function* ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œλ‹€. 그리고 ν•˜λ‚˜ μ΄μƒμ˜ yield ν‘œν˜„μ‹μ„ ν¬ν•¨ν•œλ‹€. 이것을 μ œμ™Έν•˜λ©΄ 일반 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방법과 κ°™λ‹€. μ• μŠ€ν„°λ¦¬μŠ€ν¬(*)의 μœ„μΉ˜λŠ” function ν‚€μ›Œλ“œμ™€ ν•¨μˆ˜ 이름 사이라면 어디든지 상관없닀. 46.3 μ œλ„ˆλ ˆμ΄ν„° ..

45. ν”„λ‘œλ―ΈμŠ€

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 비동기 처리λ₯Ό μœ„ν•œ ν•˜λ‚˜μ˜ νŒ¨ν„΄μœΌλ‘œ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. ν•˜μ§€λ§Œ 전톡적인 콜백 νŒ¨ν„΄μ€ 콜백 ν—¬λ‘œ 인해 가독성이 λ‚˜μ˜κ³  비동기 처리 쀑 λ°œμƒν•œ μ—λŸ¬μ˜ μ²˜λ¦¬κ°€ κ³€λž€ν•˜λ©° μ—¬λŸ¬ 개의 비동기 처리λ₯Ό ν•œλ²ˆμ— μ²˜λ¦¬ν•˜λŠ” 데도 ν•œκ³„κ°€ μžˆλ‹€. ES6μ—μ„œλŠ” 비동기 처리λ₯Ό μœ„ν•œ 또 λ‹€λ₯Έ νŒ¨ν„΄μœΌλ‘œ ν”„λ‘œλ―ΈμŠ€_Promise λ₯Ό λ„μž…ν–ˆλ‹€. ν”„λ‘œλ―ΈμŠ€λŠ” 전톡적인 콜백 νŒ¨ν„΄μ΄ 가진 단점을 λ³΄μ™„ν•˜λ©° 비동기 처리 μ‹œμ μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. 45.1 비동기 처리λ₯Ό μœ„ν•œ 콜백 νŒ¨ν„΄μ˜ 단점 45.1.1 콜백 ν—¬ 비동기 ν•¨μˆ˜ λ‚΄λΆ€μ˜ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œλŠ” 비동기 ν•¨μˆ˜κ°€ μ’…λ£Œλœ 이후에 μ™„λ£Œλœλ‹€. λ”°λΌμ„œ 비동기 ν•¨μˆ˜ λ‚΄λΆ€μ˜ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œμ—μ„œ 처리 κ²°κ³Όλ₯Ό μ™ΈλΆ€λ‘œ λ°˜ν™˜ν•˜κ±°λ‚˜ μƒμœ„ μŠ€μ½”ν”„μ˜ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ κΈ°..

43. Ajax

43.1 Ajax λž€? Ajax_Asynchronous JavaScript and XML λž€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ μ„œλ²„μ—κ²Œ 비동기 λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μš”μ²­ν•˜κ³ , μ„œλ²„κ°€ μ‘λ‹΅ν•œ 데이터λ₯Ό μˆ˜μ‹ ν•˜μ—¬ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ™μ μœΌλ‘œ κ°±μ‹ ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방식을 λ§ν•œλ‹€. AjaxλŠ” λΈŒλΌμš°μ €μ—μ„œ μ œκ³΅ν•˜λŠ” Web API인 XMLHttpRequest 객체λ₯Ό 기반으둜 λ™μž‘ν•œλ‹€. XMLHttpRequestλŠ” HTTP 비동기 톡신을 μœ„ν•œ λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹°λ₯Ό μ œκ³΅ν•œλ‹€. Ajax의 λ“±μž₯은 μ΄μ „μ˜ 전톡적인 νŒ¨λŸ¬λ‹€μž„μ„ 획기적으둜 μ „ν™˜ν–ˆλ‹€. 즉, μ„œλ²„λ‘œλΆ€ν„° μ›ΉνŽ˜μ΄μ§€μ˜ 변경에 ν•„μš”ν•œ λ°μ΄ν„°λ§Œ 비동기 λ°©μ‹μœΌλ‘œ 전솑받아 μ›ΉνŽ˜μ΄μ§€λ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μ—†λŠ” 뢀뢄은 λ‹€μ‹œ λ Œλ”λ§ν•˜μ§€ μ•Šκ³ , λ³€κ²½ν•  ν•„μš”κ°€ μžˆλŠ” λΆ€λΆ„λ§Œ ν•œμ •μ μœΌλ‘œ λ Œλ”λ§ν•˜λŠ” 방식이 κ°€λŠ₯ν•΄..

42. 비동기 ν”„λ‘œκ·Έλž˜λ°

42.1 동기 μ²˜λ¦¬μ™€ 비동기 처리 1. ν•¨μˆ˜ μ‹€ν–‰ ν”„λ‘œμ„ΈμŠ€ ν•¨μˆ˜ 호좜 → ν•¨μˆ˜μ½”λ“œ 평가 → ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성 ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 콜 μŠ€νƒμ— ν‘Έμ‹œλ˜μ–΄ ν•¨μˆ˜ μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€. ν•¨μˆ˜ μ½”λ“œ 싀행이 μ’…λ£Œλ˜λ©΄ 콜 μŠ€νƒμ—μ„œ 팝 λ˜μ–΄ μ œκ±°λœλ‹€. ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œλŠ” 이 콜 μŠ€νƒμœΌλ‘œ κ΄€λ¦¬ν•˜λŠ”λ°, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 단 ν•˜λ‚˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ(콜 μŠ€νƒ)을 κ°–λŠ”λ‹€. 2. 동기 처리둜 μΈν•œ λΈ”λ‘œν‚Ή ν˜„μƒ 이처럼 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ νƒœμŠ€ν¬λ§Œ μ‹€ν–‰ν•  수 μžˆλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ(single thread) λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— μ²˜λ¦¬μ— μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” νƒœμŠ€ν¬λ₯Ό μ‹€ν–‰ν•˜λŠ” 경우 λΈ”λ‘œν‚Ή(μž‘μ—…μ€‘λ‹¨) ν˜„μƒμ΄ λ°œμƒν•œλ‹€. 3. 비동기 처리 λ§Œμ•½ 타이머 ν•¨μˆ˜μΈ setTimeout 을 μ΄μš©ν•˜λ©΄ μ΄ν›„μ˜ νƒœμŠ€ν¬λ₯Ό λΈ”λ‘œν‚Ήν•˜μ§€ μ•Šκ³  곧..