Frontend/JavaScript

Frontend/JavaScript

[JavaScript] λ¬΄ν•œ 슀크둀 κ΅¬ν˜„ν•˜κΈ°(Intersection Observer API)

λ¬΄ν•œ 슀크둀(Infinite Scroll)μ΄λž€? μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€ ν•˜λ‹¨μ— λ„λ‹¬ν–ˆμ„ λ•Œ, μ½˜ν…μΈ κ°€ 계속 λ‘œλ“œλ˜λŠ” μ‚¬μš©μž κ²½ν—˜(UX) 방식이닀. ν•œ νŽ˜μ΄μ§€ μ•„λž˜λ‘œ 슀크둀 ν•˜λ©΄ 끝없이 μƒˆλ‘œμš΄ 화면을 λ³΄μ—¬μ£Όκ²Œ 되고 이둜 인해 λ§Žμ€ μ–‘μ˜ μ½˜ν…μΈ λ₯Ό 슀크둀 ν•΄μ„œ λ³Ό 수 μžˆλ‹€. νŽ˜μ΄μ§€λ„€μ΄μ…˜μ΄ μ•„λ‹Œ λ¬΄ν•œ 슀크둀둜 κ΅¬ν˜„ν•˜λ €λŠ” μ΄μœ β“ μƒν’ˆ λͺ©λ‘μ—μ„œ μƒν’ˆμ„ λ³΄μ—¬μ£Όκ³ μž ν•  λ•Œ νŽ˜μ΄μ§€λ„€μ΄μ…˜, λ¬΄ν•œ 슀크둀 쀑 무엇이 μ‚¬μš©μž κ²½ν—˜μ„ λ”μš± μ’‹κ²Œ ν•  수 μžˆμ„μ§€ κ³ λ―Όν•œ 끝에 λͺ¨λ°”일 ν™˜κ²½μ„ κ³ λ €ν•΄μ„œ λ¬΄ν•œ μŠ€ν¬λ‘€μ„ μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.(차후에 ν”„λ‘œμ νŠΈλ₯Ό λ°˜μ‘ν˜•μœΌλ‘œ λ¦¬νŒ©ν„°λ§ ν•  κ³„νšπŸ™‡πŸ») λ˜ν•œ, λ‹€μŒ μƒν’ˆμ„ 보기 μœ„ν•œ μ‚¬μš©μžμ˜ 클릭을 μ΅œμ†Œν™”ν•˜κ³  더 μ‰½κ²Œ λ‹€μ–‘ν•œ μƒν’ˆμ„ λ³Ό 수 μžˆμ„ 것이라고 νŒλ‹¨ν–ˆλ‹€. κ΅¬ν˜„ν•˜λŠ” κ³Όμ • λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•˜λŠ” 방법은 슀크..

Frontend/JavaScript

[Axios] Axios 인터셉터 μ μš©ν•˜κΈ°

인터셉터(Interceptors)λž€? then λ˜λŠ” catch둜 처리되기 전에 μš”μ²­κ³Ό 응닡을 κ°€λ‘œμ±Œ 수 μžˆλ‹€. Axios 인터셉터λ₯Ό μ μš©ν•˜λ €λŠ” μ΄μœ β“ 토이 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ„œλ²„μ— 토큰 인증을 ν•„μš”λ‘œ ν•˜λŠ” API μš”μ²­μ„ ν• λ•Œλ§ˆλ‹€ HTTP Authorization μš”μ²­ 헀더에 토큰을 λ„£μ–΄μ€˜μ•Όν•˜κ³  401(Unauthorized) μ—λŸ¬κ°€ μ„œλ²„λ‘œλΆ€ν„° λ“€μ–΄μ˜€λ©΄ 토큰을 κ°±μ‹ ν•΄μ€€ ν›„ μž¬μš”μ²­μ„ λ³΄λ‚΄λŠ” 과정을 ν•œ κ³³μ—μ„œ λͺ¨λ‘ μ²˜λ¦¬ν•˜μ—¬ 쀑볡 μ½”λ“œλ₯Ό μ œκ±°ν•˜κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ Axios 인터셉터λ₯Ό μ μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€. μ‚¬μš©μž 지정 config둜 μƒˆλ‘œμš΄ Axios μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λ‹ˆ λ”μš± νŽΈλ¦¬ν–ˆλ‹€. (baseURL, timeout μ„€μ •) μ μš©ν•˜λŠ” κ³Όμ • 1) Axios μΈμŠ€ν„΄μŠ€ 생성 const instanc..

Frontend/JavaScript

[JavaScript] μ •κ·œ ν‘œν˜„μ‹ μ•ˆμ— λ™μ μœΌλ‘œ λ³€μˆ˜λ₯Ό λ„£λŠ” 방법

μ •κ·œ ν‘œν˜„μ‹(Regular Expression)은 λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 문자 쑰합을 μ°ΎκΈ° μœ„ν•œ νŒ¨ν„΄μ΄λ‹€. RegExp RegExp μƒμ„±μžλŠ” νŒ¨ν„΄μ„ μ‚¬μš©ν•΄ ν…μŠ€νŠΈλ₯Ό νŒλ³„ν•  λ•Œ μ‚¬μš©ν•œλ‹€. λ¦¬ν„°λŸ΄ ν‘œκΈ°λ²•μ˜ λ§€κ°œλ³€μˆ˜λŠ” 두 λΉ—κΈˆμœΌλ‘œ 감싸야 ν•˜λ©° λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. μƒμ„±μž ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λŠ” λΉ—κΈˆμœΌλ‘œ 감싸지 μ•ŠμœΌλ‚˜ λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•œλ‹€. // μ •κ·œ ν‘œν˜„μ‹ μƒμ„±ν•˜κΈ° /ab/g new RegExp(/ab/, 'g') // λ¦¬ν„°λŸ΄ new RegExp('ab', 'g') // μƒμ„±μž λ™μ μœΌλ‘œ μ •κ·œ ν‘œν˜„μ‹ μƒμ„±ν•˜κΈ° const λ³€μˆ˜ = 'JS'; const regex = new RegExp(`${λ³€μˆ˜}`, 'g'); console.log(regex); // /JS/g 🧐 μ‘μš©ν•˜κΈ° match() λ©”μ„œλ“œλŠ” λ¬Έμžμ—΄μ΄ μ •κ·œμ‹κ³Ό λ§€μΉ˜λ˜λŠ”..

Frontend/JavaScript

[JavaScript] μ—°κ²° 리슀트둜 큐(Queue) κ΅¬ν˜„ν•˜λŠ” 방법

큐(Queue)λž€? νλŠ” 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜λŠ” 자료ꡬ쑰 쀑 ν•˜λ‚˜λ‘œ, λ¨Όμ € μž…λ ₯된 데이터가 λ¨Όμ € 좜λ ₯λ˜λŠ” "μ„ μž…μ„ μΆœ(FIFO: First-In-First-Out)" 원칙을 λ”°λ¦…λ‹ˆλ‹€. 큐(Queue)의 κ΅¬ν˜„ 방법 2가지 νλŠ” λ°°μ—΄(Array)μ΄λ‚˜ μ—°κ²° 리슀트(Linked List)λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 1️⃣ λ°°μ—΄ 배열을 μ‚¬μš©ν•  경우, 크기가 κ³ μ •λ˜μ–΄ μžˆμ–΄μ„œ λ°μ΄ν„°μ˜ μΆ”κ°€ 및 μ œκ±°μ— μ œν•œμ΄ μžˆμ„ 수 μžˆμ§€λ§Œ, μ—°μ‚° 속도가 λΉ λ¦…λ‹ˆλ‹€. 2️⃣ μ—°κ²° 리슀트 μ—°κ²° 리슀트λ₯Ό μ‚¬μš©ν•  경우, 크기에 μ œν•œμ΄ μ—†μ–΄μ„œ 데이터λ₯Ό μœ λ™μ μœΌλ‘œ μΆ”κ°€ 및 μ œκ±°ν•  수 μžˆμ§€λ§Œ, μ—°μ‚° 속도가 λŠλ¦½λ‹ˆλ‹€. 🧐 λ°°μ—΄λ‘œ 큐(Queue)λ₯Ό κ΅¬ν˜„ν•΄λ„ λ˜μ§€λ§Œ ꡳ이 ? μ—°κ²° 리슀트둜 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” 이유 JavaScriptμ—μ„œ 배열을 μ‚¬μš©..

Frontend/JavaScript

[JavaScript] ν•œλ²ˆμ— ν•˜λŠ” λ°°μ—΄ 생성 & μ΄ˆκΈ°ν™”

JavaScript의 λ°°μ—΄(Array)λŠ” 객체(ν•¨μˆ˜)λ‹€. λ”°λΌμ„œ, λŒ€ν‘œμ  객체지ν–₯ 언어인 μžλ°”μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ new Array()κ°€ μ‘΄μž¬ν•œλ‹€. λ°°μ—΄μ˜ μƒμ„±μž(new Array())와 ν•˜λ‚˜μ˜ 숫자 λ§€κ°œλ³€μˆ˜λ‘œ 생성할 수 μžˆμ§€λ§Œ, κ·Έ κ²°κ³ΌλŠ” lengthκ°€ λ§€κ°œλ³€μˆ˜κ³ , 길이만큼의 빈 μŠ¬λ‘―μ„ 가진 배열이닀. λ°°μ—΄μ˜ μ΄ˆκΈ°κ°’μ„ 확인해보면 undefinedκ°€ 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€. let datas = new Array(5) console.log(datas[0]) // undefined console.log(datas.length) // 5 μ•„λž˜μ™€ 같이 new Array()의 λ§€κ°œλ³€μˆ˜μ— μ›ν•˜λŠ” μ΄ˆκΈ°κ°’λ“€μ„ λ„˜κ²¨μ£ΌλŠ” λ°©λ²•μœΌλ‘œ 생성과 μ΄ˆκΈ°ν™”λ₯Ό λ™μ‹œμ— ν•  수 μžˆμ§€λ§Œ, λ°°μ—΄μ˜ 길이에 따라 ν•œκ³„κ°€ μ‘΄μž¬ν•œλ‹€. // new Ar..

Frontend/JavaScript

[JavaScript] μŠ€μ½”ν”„(Scope)λž€ 무엇인가?

μŠ€μ½”ν”„(Scope) ❓ 1️⃣ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„ 2️⃣ μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 이름) μ ‘κ·Ό κ·œμΉ™μ— λ”°λ₯Έ 유효 λ²”μœ„ λ²”μœ„(μŠ€μ½”ν”„)λŠ” μ€‘κ΄„ν˜Έ(블둝) λ˜λŠ” ν•¨μˆ˜μ— μ˜ν•΄ λ‚˜λˆ μ§„λ‹€. μŠ€μ½”ν”„μ˜ μ£Όμš” κ·œμΉ™ ❗ πŸ‘‰ κ·œμΉ™ 1. λΈ”λŸ­ μ•ˆμ˜ λ³€μˆ˜λŠ” λΈ”λŸ­ μ•ˆμ—μ„œλ§Œ μœ νš¨ν•˜λ‹€. λ°”κΉ₯μͺ½ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έν•œ μ‹λ³„μžλŠ” μ•ˆμͺ½ μŠ€μ½”ν”„μ—μ„œ μ‚¬μš© κ°€λŠ₯ 반면, μ•ˆμͺ½μ—μ„œ μ„ μ–Έν•œ μ‹λ³„μžλŠ” λ°”κΉ₯μͺ½ μŠ€μ½”ν”„μ—μ„œλŠ” μ‚¬μš©ν•  수 ❌ λΈ”λŸ­ λ‚΄λΆ€μ—μ„œλ§Œ μ‘΄μž¬ν•˜κ³ , λΈ”λŸ­μ΄ λλ‚˜λ©΄ 가비지 컬렉터(GC)에 μ˜ν•΄ μžλ™μœΌλ‘œ μ†Œλ©Έλœλ‹€. const a = 1; { const b = 2; console.log(a); } console.log(b); // 였λ₯˜ λ°œμƒ(app crashed) πŸ‘‰ κ·œμΉ™ 2. μ „μ—­ μŠ€μ½”ν”„ vs 지역 μŠ€μ½”ν”„ κ°€μž₯ λ°”κΉ₯μͺ½μ˜ μŠ€μ½”ν”„λ₯Ό μ „..

Frontend/JavaScript

[JavaScript] ν΄λ‘œμ €λž€ 무엇인가?

ν΄λ‘œμ € ❓ ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ–΄νœ˜μ  ν™˜κ²½μ˜ μ‘°ν•© 이 ν™˜κ²½μ€ ν΄λ‘œμ €κ°€ μƒμ„±λœ μ‹œμ μ˜ 유효 λ²”μœ„ 내에 μžˆλŠ” λͺ¨λ“  지역 λ³€μˆ˜λ‘œ κ΅¬μ„±λœλ‹€. 즉, λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œ μ™ΈλΆ€ ν•¨μˆ˜μ— μžˆλŠ” μƒνƒœμ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œμ„ λΆ€μ—¬ν•œλ‹€λŠ” 것이닀. μ™œ μ‚¬μš©ν• κΉŒ ❓ λ‚΄λΆ€ 정보λ₯Ό μ€λ‹‰ν•˜κ³ , 곡개 ν•¨μˆ˜(public λ˜λŠ” μ™ΈλΆ€)λ₯Ό ν†΅ν•œ 데이터 μ‘°μž‘μ„ μœ„ν•΄ μ‚¬μš©ν•œλ‹€. (μΊ‘μŠν™”, 정보은닉) μ „μ—­λ³€μˆ˜ λ˜ν•œ μ€„μ—¬μ§€κ²Œ λ˜λ―€λ‘œ 개발 κ³Όμ •μ—μ„œ μ‹€μˆ˜λ‘œ μ ‘κ·Όν•˜λŠ” 일이 μ•ˆμƒκΈ΄λ‹€. ν˜„μž¬λŠ” ν΄λž˜μŠ€μ—μ„œμ˜ private ν•„λ“œ λ˜λŠ” λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. μ–΄λ–»κ²Œ 이것이 κ°€λŠ₯ν• κΉŒ ❓ inner λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ°Έμ‘°ν•˜κ³  있기 λ•Œλ¬Έμ΄λ‹€. ν΄λ‘œμ €λ₯Ό 잘 μ΄ν•΄ν•˜λ €λ©΄ μ–΄λ–»κ²Œ λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λ₯Ό μ§€μ •ν•˜λŠ”μ§€(Lexical scoping)λ₯Ό λ¨Όμ € 이해해야 ν•œλ‹€...

Frontend/JavaScript

[JavaScript] λ¬Έμžμ—΄ μΉ˜ν™˜( replace(), split().join() )

replace() λ©”μ„œλ“œ 1️⃣ μ–΄λ–€ νŒ¨ν„΄μ— μΌμΉ˜ν•˜λŠ” 일뢀 λ˜λŠ” λͺ¨λ“  뢀뢄이 ꡐ체된 μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜ 2️⃣ 첫 번째 λ¬Έμžμ—΄λ§Œ μΉ˜ν™˜μ΄ 되며 μ›λž˜ λ¬Έμžμ—΄μ€ λ³€κ²½λ˜μ§€ ❌ const str = 'μ•ˆλ…•ν•˜μ„Έμš”! μ΄μ„±ν˜Έ μž…λ‹ˆλ‹€.'; console.log(str.replace('', '').replace('', '')); // expected output: "μ•ˆλ…•ν•˜μ„Έμš”! μ΄μ„±ν˜Έ μž…λ‹ˆλ‹€." ''와 ''의 λͺ¨λ“  문자λ₯Ό μΉ˜ν™˜ν•˜κ³  μ‹Άμ—ˆλ˜ λ‚˜λŠ” replace() λ©”μ„œλ“œμ˜ ν•œκ³„λ₯Ό λŠκΌˆλ‹€. λ‹€λ₯Έ 방법도 많이 μžˆκ² μ§€λ§Œ λ‚˜λŠ” split(), join() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 이λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€. split() λ©”μ„œλ“œ String 객체λ₯Ό μ§€μ •ν•œ κ΅¬λΆ„μžλ₯Ό μ΄μš©ν•˜μ—¬ μ—¬λŸ¬ 개의 λ¬Έμžμ—΄λ‘œ λ‚˜λˆ” Join() λ©”μ„œλ“œ 각 μš”μ†Œ λ˜λŠ” 멀버 사이에 지정..

ν”„λ‘ νŠΈμ—”λ“œ μ—”μ§€λ‹ˆμ–΄
'Frontend/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘