Skip to content

Latest commit

Β 

History

History
199 lines (131 loc) Β· 11.9 KB

File metadata and controls

199 lines (131 loc) Β· 11.9 KB

2022-03

링크 & 읽을거리

μ§€λ‚œ 1λ…„κ°„ Front-end μ˜μ—­μ—μ„œμ˜ 변화와 μ•žμœΌλ‘œμ˜ 전망을 μ‚΄νŽ΄λ³Ό 수 μžˆλŠ” State of JS 2021 κ²°κ³Όκ°€ λ°œν‘œλ˜μ—ˆλ‹€.

κΈ°μˆ μ— λŒ€ν•œ μ „ μ„Έκ³„μ˜ κ°œλ°œμžλ“€μ˜ μ„ ν˜Έλ„μ™€ λ§Œμ‘±λ„λ₯Ό μ •λ¦¬λœ 자료λ₯Ό 톡해 μ‰½κ²Œ μ•Œμ•„λ³Ό 수 μžˆλ‹€.

TL;DR

  • ν”„λ ˆμž„μ›Œν¬: Angular의 좩격적 μˆœμœ„μ™€ Vue.js의 ν•˜λ½μ„Έ
  • λΉŒλ“œ 도ꡬ: Webpack의 지속적 ν•˜λ½μ„Έμ™€ Vite, esbuild, swc둜의 μ„ΈλŒ€κ΅μ²΄
  • Back-end: GastbyλŠ” μˆœμœ„μ˜ 제일 λ§ˆμ§€λ§‰μ— λž­ν‚Ή
  • λͺ¨λ°”일 & λ°μŠ€ν¬ν†±: Tauri의 λ“±μž₯

[μ°Έκ³ ] λΉ λ₯΄κ²Œ 전체 μ„€λ¬Έ 결과에 λŒ€ν•œ μΈμ‚¬μ΄νŠΈλ₯Ό ν›‘μ–΄ 보고 μ‹Άλ‹€λ©΄, λ‹€μŒ λ™μ˜μƒμ„ μ°Έκ³ ν•˜λΌ. The Shocking State of JavaScript // The Code Report

μžμ‹ μ΄ 15μ‹œκ°„ λ‚΄λ‚΄ μž‘μ„±ν•œ μ½”λ“œμ— λŒ€ν•œ μ½”λ“œ 리뷰 κ³Όμ •μ—μ„œ λͺ¨λ‘κ°€ λ‚˜μ˜ 의견과 닡변을 κΈ°λ‹€λ¦¬λŠ” μƒν™©μ—μ„œ, μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ„€λͺ…ν•  μ μ ˆν•œ 단어λ₯Ό μ°Ύμ§€ λͺ»ν•˜κ±°λ‚˜ λ˜λŠ” 맀일 λ‹€λ£¨λŠ” 라이브러리/μ–Έμ–΄(React Hooks, TypeScript λ“±)듀이 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  μžˆλ‹€λ©΄, μ˜€λŠ˜λ‚ μ˜ μ†Œν”„νŠΈμ›¨μ–΄ 개발자둜써 쓰라린 λ‹€μŒμ˜ ν˜„μ‹€μ— μ§λ©΄ν•˜κ²Œ λœλ‹€.

"기술의 λΉ λ₯Έ λ°œμ „μ— λŒ€λΉ„ν•΄, μš°λ¦¬λŠ” μ‹œκ°„κ³Όμ˜ μ‹Έμ›€μ—μ„œ μ§€κ³  μžˆλ‹€"λΌλŠ” 사싀이닀.

κΈ€μ˜ μ €μžλŠ” 4λ…„ λ™μ•ˆ, 기술적 μŠ€ν‚¬ ν–₯상을 μœ„ν•œ μ΅œμ„ μ˜ 방법듀을 μ°ΎκΈ° μœ„ν•œ 과정듀을 톡해 JavaScript κ°œλ°œμžλ‘œμ„œ 쀑/κ³ κΈ‰ λ ˆλ²¨μ— 더 빨리 λ„λ‹¬ν•˜λŠ” 방법에 λŒ€ν•œ μ£Όμš” 정보(5단계)λ₯Ό κ³΅μœ ν•œλ‹€.

μ „ GitHub CTOμ˜€λ˜ Jason Warner(ν˜„ Redpoint 벀처 캐피털 λ§€λ‹ˆμ €)의 팟캐슀트 인터뷰(팟캐슀트 15:20 λΆ„κ²½)μ—μ„œ κ·ΈλŠ” Full-stack 개발이 μœ ν–‰ν•˜κ³  μžˆμ§€λ§Œ, λ―Έλž˜μ—λŠ” κ°œλ°œλ˜λŠ” μ œν’ˆμ˜ λ³΅μž‘μ„± 증가에 따라 ν”„λ‘œκ·Έλž˜λ°μ˜ λ―Έλž˜μ—μ„œ Full-stack μ—”μ§€λ‹ˆμ–΄μ˜ κ°μ†Œκ°€ 일어날 것이며, back-end μ˜μ—­μ—μ„œλŠ” 전문성을 μ§€ν–₯ν•˜λŠ” λ°©ν–₯으둜의 변화와 이동이 μ΄λ€„μ§ˆ κ²ƒμœΌλ‘œ μ˜ˆμΈ‘ν–ˆλ‹€.

μ•„λž˜λŠ” Markdown Mermaid syntax둜 λ§Œλ“  λ‹€μ΄μ–΄κ·Έλž¨

  graph TD;
      A-->B;
      A-->C;
      B-->D;
      C-->D;
Loading

이제 Githubμ—μ„œ markdown νŒŒμΌμ—μ„œ λ‹€μ΄μ–΄κ·Έλž¨μ„ λ Œλ”λ§ ν•  수 μžˆλ‹€.

μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ‹€μ΄μ–΄κ·Έλž¨μ„ λ§Œλ“€κ³  λ Œλ”λ§ ν•˜λŠ”μ§€λ„ νŒŒμ΄ν”„λΌμΈμ„ 톡해 μ„€λͺ…ν•΄ μ£Όκ³  μžˆλ‹€.

2013λ…„ Reactκ°€ μ΄ˆκΈ°μ— λ°œν‘œλ˜μ—ˆμ„ λ•Œ μ‹œμž₯μ—μ„œμ˜ λ°˜μ‘μ€ 썩 μ’‹μ§„ μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ μ§€κΈˆμ€ React의 μ‹œλŒ€λΌ 해도 과언이 아닐 μ •λ„λ‘œ κ°€μž₯ 인기 있고 영ν–₯λ ₯ μžˆλŠ” ν”„λ‘œμ νŠΈκ°€ λ˜μ—ˆλ‹€.

이 μ˜μƒμ€ jQuery, Backbone, Angular μ‹œλŒ€λ₯Ό 걸쳐 React μ‹œλŒ€λ‘œ μ–΄λ–»κ²Œ μ™”λŠ”μ§€μ˜ 역사λ₯Ό 유머 있게 μ΄μ•ΌκΈ°ν•˜κ³  μžˆλ‹€. 10λΆ„μ˜ μ‹œμ²­ μ‹œκ°„ λ™μ•ˆ React의 κ΄€μ μ—μ„œ Front-end의 역사λ₯Ό κ°€λ³κ²Œ 느껴볼 수 μžˆμ„ 것이닀.

Meta(Facebook)의 인기 μžˆλŠ” ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬μΈ Jest의 μ£Όμš” κΈ°μ—¬μžμΈ Simen Bekkhus(ν”„λ‘œμ νŠΈ μ΅œλ‹€ 컀밋 κΈ°μ—¬μž)λŠ” ν”„λ‘œμ νŠΈμ˜ ν•œ 이슈λ₯Ό 톡해 μˆ˜λ…„κ°„ Meta μ†Œμ† 인원듀이 μˆ˜λ…„κ°„ κ°œλ°œμ— μ°Έμ—¬ν•˜μ§€ μ•Šκ³  μžˆλ‹€λŠ” μ½”λ©˜νŠΈλ₯Ό λ“±λ‘ν–ˆλ‹€.

Simen은 μΆ”κ°€ μ½”λ©˜νŠΈλ₯Ό 톡해 λΆˆν•„μš”ν•œ μ˜€ν•΄(μœ„μ˜ μ½”λ©˜νŠΈμ— λŒ€ν•œ μ˜λ„)κ°€ μƒκΈ°λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄, μžμ‹ μ€ Metaλ‘œλΆ€ν„° Jest ν”„λ‘œμ νŠΈ 기여에 λŒ€ν•œ ν™œλ™μ„ ν•˜λ©΄μ„œ μ–΄λ– ν•œ λΉ„μš©(보상에 λŒ€ν•œ κΈ°νšŒλŠ” μ œκ³΅λ˜μ—ˆμœΌλ‚˜)도 μ§€κΈ‰λ°›μ§€ μ•Šμ•˜μœΌλ©°, μ΄λŠ” 보수 지급을 λ°›κ²Œ 되면 ν”„λ‘œμ νŠΈ μ°Έμ—¬κ°€ 업무적 μ„±κ²©μœΌλ‘œ λ³€ν•˜λŠ” 것에 λŒ€ν•œ 개인적 κ±°λΆ€κ°μœΌλ‘œ 인해, 개인적 선택에 따라 보상에 λŒ€ν•œ 기회λ₯Ό κ±°λΆ€ν–ˆλ‹€λŠ” λ‚΄μš©λ„ ν•¨κ»˜ κ³΅μœ ν–ˆλ‹€.

JavaScriptμ—μ„œ 배열을 ν•©μΉ˜λŠ” 방법은 concat, push λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜κ±°λ‚˜ spread μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. 각각의 방법듀이 λ°°μ—΄ μ—˜λ¦¬λ¨ΌνŠΈμ— μˆ«μžμ™€ νƒ€μž…(μ›μ‹œ νƒ€μž… ν˜Ήμ€ 객체)에 따라 λ²€μΉ˜λ§ˆν¬κ°€ μ–΄λ–»κ²Œ λ‚˜μ˜€λŠ”μ§€ κ·Έ κ²°κ³Όλ₯Ό ν™•μΈν•΄λ³΄μž. (μœ„ λ¬Έμ„œμ— μ—†λŠ” [...array1, ...array2] μΌ€μ΄μŠ€κ°€ κΆκΈˆν•˜λ‹€λ©΄ 예제 μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•΄μ„œ 확인해 보자.)

React 18λΆ€ν„° μ œκ³΅ν•˜λŠ” RSC(React Server Component)λ₯Ό μ΄μš©ν•˜λ©΄ 기쑴보닀 λΉ λ₯Έ νŽ˜μ΄μ§€ λ‘œλ”©μ†λ„μ™€ μž‘μ€ λ²ˆλ“€ μ‚¬μ΄μ¦ˆλ₯Ό μœ μ§€ν•˜μ—¬ 더 쒋은 μ‚¬μš©μ„±μ„ μ œκ³΅ν•  수 μžˆλ‹€. μ§€κΈˆμ€ μ‹€ν—˜μ μΈ κΈ°λŠ₯μ΄μ§€λ§Œ κ³§ λ‹€κ°€μ˜¬ λ―Έλž˜μ΄κΈ°μ— 이 글을 톡해 쑰금 더 μ•Œμ•„κ°€κΈΈ λ°”λž€λ‹€. 생각보닀 κΈΈμ§€ μ•Šμ€ 글이기 λ•Œλ¬Έμ— κ°„λ‹¨νžˆ μ‚΄νŽ΄ λ³Ό 수 μžˆλ‹€.

[μ°Έκ³ ] λΉ λ₯΄κ²Œ 읽고 μ‹Άλ‹€λ©΄ λ²ˆμ—­κΈ€μ„ μ°Έκ³ ν•˜μž.

Monorepos에 λŒ€ν•΄ μ•Œμ•„μ•Ό ν•˜λŠ” λͺ¨λ“  정보듀을 정리해 λ†“μ•˜λ‹€. Monorepoκ°€ 무엇인지뢀터, polyrepo κ΅¬μ‘°μ™€μ˜ 비ꡐ λ“± Monorepo에 λŒ€ν•΄ 더 잘 이해할 수 μžˆλŠ” λͺ¨λ“  λ¦¬μ†ŒμŠ€(λ™μ˜μƒ, νŠœν† λ¦¬μ–Ό, ebook λ“±) 듀에 λŒ€ν•œ 링크λ₯Ό μ œκ³΅ν•œλ‹€.

λ˜ν•œ μƒνƒœκ³„μ—μ„œ μ°Ύμ•„λ³Ό 수 μžˆλŠ” 7개 도ꡬ듀에 λŒ€ν•œ 비ꡐ ν…Œμ΄λΈ”λ„ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— 각 λ„κ΅¬λ“€μ˜ μž₯단점을 ν•œλˆˆμ— 비ꡐ해 λ³Ό 수 μžˆλ‹€.

νŠœν† λ¦¬μ–Ό

μ €μžμΈ Jarrod Oversonκ°€ 21λ…„ 12μ›” 1일 λΆ€ν„° 24일간 맀일 μžμ‹ μ˜ 개발 λΈ”λ‘œκ·Έ λ₯Ό 톡해 μ—°μž¬λ₯Ό μ‹œμž‘ν•œ "24 days from node.js to Rust" μ‹œλ¦¬μ¦ˆ 글이 κΈ°λŒ€ν–ˆλ˜ 것보닀 λ§Žμ€ μ΄λ“€μ˜ 관심을 λΆˆλŸ¬μΌμœΌν‚€μž 이λ₯Ό λ‹€μˆ˜μ˜ κΈ°μ—¬μžλ“€μ˜ 도움을 톡해 ebook ν˜•νƒœλ‘œ λ§Œλ“€κ³  κ³΅κ°œν–ˆλ‹€.

μ±…μ˜ 제λͺ©μ—μ„œ μœ μΆ”ν•  수 μžˆλ“―, 이 책은 JavaScript(node.js) κ°œλ°œμžλ“€μ˜ κ΄€μ μ—μ„œ Rustλ₯Ό ν•™μŠ΅ν•  수 μžˆλ„λ‘ 도와쀀닀.

React Three Fiber(Three.js)λ₯Ό μ‚¬μš©ν•΄μ„œ 3D μž…μž 효과λ₯Ό λ§Œλ“œλŠ” 방법을 μ†Œκ°œν•œλ‹€.

Front-endμ—μ„œ 였λ₯˜ λͺ¨λ‹ˆν„°λ§μ€ 주둜 μ „μ—­ μ—λŸ¬ 이벀트 ν•Έλ“€λŸ¬λ₯Ό 톡해 이뀄진닀.

// λ˜λŠ” window.addEventListener("error", function(){})
window.onerror = function (message, source, lineno, colno, error) {
	console.log("Global error: " + error.message + ", lineno: " + lineno);

	return true;
};

function triggerError() {
	throw new Error('Oh no!');
}

triggerError();

// 좜λ ₯: Global error: Oh no!, lineno: 10

ν•˜μ§€λ§Œ λͺ‡ 단계 더 κΉŠμ€ 레벨의 call stackμ—μ„œμ˜ 였λ₯˜ μ²˜λ¦¬λŠ” λ³΅μž‘ν•΄μ§€λ©°, 상황에 따라 였λ₯˜ 객체가 였λ₯˜ ν•Έλ“€λŸ¬λ‘œ μ „λ‹¬λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μžˆλ‹€.

μ „μ—­ λ©”μ„œλ“œμΈ reportError()λ₯Ό μ‚¬μš©ν•˜λ©΄ call stack μ‹€ν–‰μ˜ 쀑단 없이 였λ₯˜λ₯Ό μ „μ—­ 였λ₯˜ ν•Έλ“€λŸ¬λ‘œ 전달할 수 μžˆλ‹€.

const fns = [
 () => { console.log("I'm first!"); },
 () => { throw new Error("Oh no!"); },
 () => { console.log("I'm third!"); },
];

  
// Iterate over the functions
for (const fn of fns) {
	// (1) μ—λŸ¬ 이후, 반볡문 μˆ˜ν–‰μ΄ μ€‘λ‹¨λœλ‹€.
	fn();  

	try {
		fn();
	} catch(error) {
		// (2) try...catch둜 감싸면, 반볡문이 μ€‘λ‹¨λ˜μ§€ μ•Šμ§€λ§Œ, μ „μ—­ 였λ₯˜ ν•Έλ“€λŸ¬λ‘œ 였λ₯˜κ°€ 버블링 λ˜μ§€ μ•ŠλŠ”λ‹€.
		console.error(error);

		// (3) reportError()λ₯Ό 톡해 였λ₯˜κ°€ 버블링 λ˜λ„λ‘ ν•  수 μžˆλ‹€.
		reportError(error);
	}
}

μ½”λ“œμ™€ 도ꡬ

Three.jsλ₯Ό ν™œμš©ν•˜μ—¬ λ§Œλ“  개발자의 이λ ₯μ„œ νŽ˜μ΄μ§€μ΄λ‹€. λΈŒλΌμš°μ € 타이틀바에 μ°¨λŸ‰μ˜ μ›€μ§μž„κΉŒμ§€ ν‘œν˜„ν•œ 완성도 높은 개인 μ‚¬μ΄νŠΈμ΄λ‹€. 이 μ‚¬μ΄νŠΈλ₯Ό 톡해 WebGL의 κ°€λŠ₯성을 μ‚΄νŽ΄λ³΄κΈ° λ°”λž€λ‹€.

ν•˜λ“œμ›¨μ–΄ 가속을 μ΄μš©ν•œ κ³ μ„±λŠ₯의 2D WebGL λ Œλ”λ§ 라이브러리.

React Windows95 μ»΄ν¬λ„ŒνŠΈ. μ˜ˆμ „λΆ€ν„° 운영체제 UIλ₯Ό μ›Ήμ—μ„œ κ΅¬ν˜„ν•˜λŠ” ν”„λ‘œμ νŠΈκ°€ μ’…μ’… μžˆμ—ˆμ§€λ§Œ 이 ν”„λ‘œμ νŠΈλŠ” 완성도가 μ’€ 더 λ†’μ•„ 보인닀. μŠ€ν† λ¦¬λΆμ—μ„œ λ‹€μ–‘ν•œ μ»΄ν¬λ„ŒνŠΈλ“€μ„ 직접 확인해 λ³Ό 수 μžˆλ‹€.

HotkeyλŠ” κΉƒν—™μ—μ„œ κ°œλ°œν•œ 라이브러리둜 단좕킀λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” μš”μ†Œμ— data-hotkey 속성을 μΆ”κ°€ν•˜λ©΄ κ°„νŽΈν•˜κ²Œ 단좕킀λ₯Ό 등둝할 수 μžˆλ‹€. κ°„λ‹¨ν•œ μ‚¬μš©λ²•μ€ λ‹€μŒ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μž.

<a href="/page/2" data-hotkey="j">Next</a>
<a href="/help" data-hotkey="Control+h">Help</a>
<a href="/rails/rails" data-hotkey="g c">Code</a>
<a href="/search" data-hotkey="s,/">Search</a>
import {install} from '@github/hotkey'

// Install all the hotkeys on the page
for (const el of document.querySelectorAll('[data-hotkey]')) {
  install(el)
}

v8n은 λ©”μ„œλ“œ 체이닝을 μ‚¬μš©ν•΄ μ§κ΄€μ μœΌλ‘œ μœ νš¨μ„± 검사λ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ” λΌμ΄λΈŒλŸ¬λ¦¬λ‹€. λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆλ‹€.

v8n()
  .string()
  .minLength(5)
  .first("H")
  .last("o")
  .test("Hello"); // true