profile
Frontend Developer πŸ’‘
post-thumbnail

[Javascript] Map vs find : λ°°μ—΄ λŒ€μ‹  ν‚€-κ°’ 쑰회둜 λΉ λ₯Έ νƒμƒ‰ν•˜κΈ°

μΈμŠ€νƒ€κ·Έλž¨ 클둠 ν”„λ‘œμ νŠΈ J-Stagram 의 ν”Όλ“œ ν˜•μ‹ κ²Œμ‹œκΈ€ κΈ°λŠ₯을 λ§Œλ“œλŠ” κ³Όμ •μ—μ„œ, κ²Œμ‹œκΈ€ 리슀트λ₯Ό λΆˆλŸ¬μ˜€λŠ” κ²ƒκΉŒμ§€ μ™„μ„± ν›„ ν•΄λ‹Ή κ²Œμ‹œκΈ€μ˜ μž‘μ„±μžλ₯Ό λΆˆλŸ¬μ˜€λŠ” μž‘μ—…μ„ μ§„ν–‰μ€‘μ΄μ—ˆλ‹€. 이λ₯Ό Supabase 의 Admin API 인 listUsers() λ₯Ό 톡해 ν˜„μž¬ κ°€

2025λ…„ 9μ›” 19일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[Next.js, Supabase] 파일 μ—…λ‘œλ“œ κΈ°λŠ₯ 였λ₯˜

Next.js ν™˜κ²½μ—μ„œ Supabase 의 μŠ€ν† λ¦¬μ§€λ₯Ό μ—°κ²°ν•˜μ—¬ νŒŒμΌμ—…λ‘œλ“œλ₯Ό ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜κ³  μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ 계속 400 BadRequest κ°€ λ– μ„œ Supabase κ³΅μ‹λ¬Έμ„œ 및 μ—¬λŸ¬ κ³³μ—μ„œ 검색을 ν•΄λ³΄μ•˜μ§€λ§Œ λͺ…ν™•ν•œ 원인을 μ°Ύμ§€ λͺ»ν–ˆλ‹€β€¦πŸ™νŒŒμΌμ„ μ„ νƒν•œ ν›„ β€œνŒŒμΌμ—…

2025λ…„ 8μ›” 12일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] ColorThief - 색 μΆ”μΆœ κΈ°λŠ₯

μŠ¬λΌμ΄λ“œ λ°°λ„ˆλ₯Ό λ§Œλ“€ λ•Œ, 각 μš”μ†Œ 썸넀일 μ΄λ―Έμ§€μ˜ 색을 μΆ”μΆœν•΄ 배경색을 κΉ”μ•„λ‹¬λΌλŠ” λ””μžμΈμ˜ μš”μ²­μ΄ μžˆμ—ˆλ‹€. κ·Έλž˜μ„œ λ°œκ²¬ν•œ 것이 ColorThief λΌλŠ” 라이브러리..!ColorThief λŠ” Javascript만 μ‚¬μš©ν•˜μ—¬ μ΄λ―Έμ§€μ—μ„œ 색상 νŒ”λ ˆνŠΈλ₯Ό κ°€μ Έμ˜€λŠ” 라이브러리라고

2025λ…„ 8μ›” 12일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[Redux] useSelector μ΅œμ ν™” – λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°©μ§€ (λ°°μ—΄ λ°˜ν™˜)

검색 AI κΈ°λŠ₯μͺ½μ—μ„œ ν˜„μž¬ AI λ‹΅λ³€ κ²°κ³ΌλŠ” 컨텐츠에 따라 λ¬Έλ‹¨μœΌλ‘œ λΆ„λ₯˜λ˜μ–΄ 데이터가 λ‚΄λ €μ˜€λŠ”λ°, κ·Έ μ»¨ν…μΈ μ˜ title 값을 ν•œκΈ€ 제λͺ©μœΌλ‘œ μΉ˜ν™˜ν•΄μ•Ό ν–ˆλ‹€. κ·Έλž˜μ„œ redux 의 state 값을 ν™œμš©ν•˜λ˜ 쀑 μ•„λž˜μ™€ 같은 useSelector λ₯Ό μ‚¬μš©ν•œ μͺ½μ—μ„œ μ—λŸ¬κ°€ 발

2025λ…„ 7μ›” 4일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[Next.js] 검색 μš”μ²­ μ΅œμ ν™”: 이전 μš”μ²­ μ·¨μ†Œν•˜κ³  μ΅œμ‹  데이터 μœ μ§€ν•˜κΈ° (feat. AbortController)

검색 νŽ˜μ΄μ§€μ—μ„œ 탭을 λˆ„λ₯Όλ•Œλ§ˆλ‹€ 그에 ν•΄λ‹Ήν•˜λŠ” λ‰΄μŠ€ λͺ©λ‘μ΄ λ‚˜μ˜€λ„λ‘ κ΅¬ν˜„μ€‘μ΄μ—ˆλ‹€. 근데 μ—¬κΈ°μ„œ ν•˜λ‚˜μ˜ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”λ°β€¦β€œμ •μ±…λ‰΄μŠ€β€ λΌλŠ” νƒ­μ˜ λͺ©λ‘ api μš”μ²­ μ‹œκ°„μ΄ λ‹€λ₯Έ 탭보닀 였래걸렀 μš”μ²­μ€‘ λ‹€λ₯Έ 탭을 λˆ„λ₯΄λ©΄, λ‹€λ₯Έ νƒ­μ˜ λͺ©λ‘ 데이터가 λΏŒλ €μ§„ κ·Έ 이후에 ν•œ 번 더

2025λ…„ 7μ›” 4일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] Selectbox μ»€μŠ€ν…€ (feat. μŠ€νƒ€μΌ & μ ‘κ·Όμ„±)

selectbox 에 μŠ€νƒ€μΌμ„ 주고싢은데 Selectbox 의 경우 selectbox νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ μŠ€νƒ€μΌμ„ μ»€μŠ€ν…€ ν•˜λŠ”λ° ν•œκ³„κ°€ 있기 λ•Œλ¬Έμ— ul, li νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ option 을 κ΅¬ν˜„ν•˜λŠ”λ“± λ”°λ‘œ selectbox 전체λ₯Ό 직접 μ»€μŠ€ν…€ν•΄μ„œ κ΅¬ν˜„ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.μ΄λ•Œ

2025λ…„ 4μ›” 18일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[Next.js] Redirect κΈ°λŠ₯ - resolvedUrl

μ†Œν”Œμ΄λΌλŠ” μ„œλΉ„μŠ€μ—μ„œ νŒ¨λ„νšŒμ›μ— κ°€μž…ν•˜λŠ” 루트λ₯Ό μž‘μ—…ν•˜κ³  μžˆμ—ˆλ‹€. νŒ¨λ„νšŒμ›μ— κ°€μž…ν•˜κΈ° μœ„ν•΄μ„œλŠ” 둜그인, 본인인증 두 κ°€μ§€ 루트λ₯Ό 거쳐야 ν•œλ‹€. 둜그인이 μ•ˆλœ 경우 둜그인 νŽ˜μ΄μ§€λ‘œ 잘 λ¦¬λ‹€μ΄λ ‰νŠΈ λ˜λŠ”λ°, 본인인증의 경우 인증 ν›„ νŒ¨λ„ κ°€μž… νŽ˜μ΄μ§€κ°€ μ•„λ‹Œ

2025λ…„ 3μ›” 4일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] λ‹€μš΄λ‘œλ“œ 이λ ₯ 남기기 κΈ°λŠ₯(feat.withCredentials)

κ΄€λ¦¬μž νŽ˜μ΄μ§€μ˜ λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯μ—μ„œ νŽ˜μ΄μ§€μ— λŒ€ν•œ 값인 νŒŒλΌλ―Έν„°(pageName)을 μΆ”κ°€ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν–ˆλ‹€. 각 νŽ˜μ΄μ§€λ§ˆλ‹€ μ²¨λΆ€νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ λ°›μœΌλ©΄ κ·Έ 이λ ₯이 남아 λ‹€μš΄λ‘œλ“œ 이λ ₯ νŽ˜μ΄μ§€ λͺ©λ‘μ— λ“±λ‘λ˜λŠ” κ³Όμ •μ΄μ—ˆλŠ”λ°, λ°±μ—”λ“œ κ°œλ°œμžλΆ„μ΄ λ‹€μš΄λ‘œλ“œκ°€ λ°œμƒν•œκ²Œ

2025λ…„ 1μ›” 10일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] ν‚€μ›Œλ“œ μΆ”κ°€ μ‚­μ œ κΈ°λŠ₯

κ΄€λ¦¬μž νŽ˜μ΄μ§€μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ“°μ΄λŠ” ν‚€μ›Œλ“œλ₯Ό κ΄€λ¦¬ν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό μž‘μ—…ν–ˆλ‹€. 주제, μž₯λ₯΄, μ˜€λ””μ˜€λ‘œ λ‚˜λ‰˜κ³  ν•΄λ‹Ή λΆ„λ₯˜μ— 따라 μ“°μ΄λŠ” ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•  수 μžˆλŠ” κΈ°λŠ₯이며, ν•΄λ‹Ή ν‚€μ›Œλ“œλ“€μ€ μ „μ—­μ μœΌλ‘œ λ‹€λ₯Έ νŽ˜μ΄μ§€μ—λ„ 적용이 λœλ‹€.κΈ°μ‘΄ λ°μ΄ν„°λ‘œ 받은

2025λ…„ 1μ›” 9일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React.js] ReactQuill 둜 에디터 μƒμ„±ν•˜κΈ°

μ–΄λ“œλ―Ό ν”„λ‘œμ νŠΈμ—μ„œ 곡지사항을 λ“±λ‘ν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό μž‘μ—…μ€‘μ΄μ—ˆλ‹€. 폼 μž‘μ—… 진행쀑 에디터도 κ΅¬ν˜„ν•΄μ•Όν–ˆκ³ , MUI λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλŠ” λ”°λ‘œ 에디터 κΈ°λŠ₯이 μ œκ³΅λ˜μ§€ μ•Šμ•˜λ‹€. κ·Έλž˜μ„œ μ°Ύμ•„λ³΄λ˜ 도쀑 ReactQuill λΌλŠ” νˆ΄μ„ μ•Œκ²Œλ˜μ–΄ μ μš©ν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€.λ‚˜λŠ” ν˜„μž¬ react-hoo

2025λ…„ 1μ›” 9일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] 두 번 λ Œλ”λ§ λ˜λŠ” ν˜„μƒ (React.StrickMode)

μΈμŠ€νƒ€κ·Έλž¨ 클둠 코딩을 ν•˜λŠ” 쀑, μ•Œλ¦Ό νƒ­μ—μ„œ 였늘 λ‚ μ§œμ— ν•΄λ‹Ήν•˜λŠ” 컨텐츠λ₯Ό 필터링 ν•΄μ„œ ν‘œμ‹œν•˜λŠ” μž‘μ—…μ„ ν•˜κ³  μžˆμ—ˆλ‹€. data 에 map 을 돌렀 였늘 λ‚ μ§œμ— ν•΄λ‹Ήλ˜λŠ” 컨텐츠면 todayAlarm μ΄λΌλŠ” state 배열에 λ‹΄μ•„μ§€λŠ” ꡬ쑰둜 μ½”λ“œλ₯Ό κ΅¬ν˜„ν–ˆλŠ”λ°, μ˜€λŠ˜μ— ν•΄

2024λ…„ 9μ›” 12일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

http-server 둜 둜컬 ν™”λ©΄ κ³΅μœ ν•˜κΈ°

λ‹¨μˆœν•œ 퍼블리싱 업무λ₯Ό 맑게 λ˜μ–΄ μž‘μ—…μ€‘, κΈ°νšμžλΆ„κ»˜μ„œ μžμ‹ μ˜ μžλ¦¬μ—μ„œ λ‘œμ»¬ν™”λ©΄μ„ 보고싢닀 ν•˜μ…¨λ‹€. μ΄μ œκΉŒμ§€ λ¦¬μ•‘νŠΈλ‚˜ λ·° ν™˜κ²½μ—μ„œ μž‘μ—…μ„ ν•˜λ‹€κ°€, 일반 HTML/CSS/JavaScript 같이 μ •μ νŒŒμΌλ‘œλ§Œ κ΅¬μ„±λœ μƒνƒœμ—μ„œ 둜컬 화면을 κ³΅μœ λ“œλ¦¬λŠ” 것은 μ²˜μŒμ΄μ—ˆλ‹€.ip μ£Ό

2024λ…„ 8μ›” 8일
Β·
0개의 λŒ“κΈ€
Β·

[javascript] κ²Œμ‹œλ¬Όλ‘œ νŽ˜μ΄μ§€ 이동 (window.location)

ν˜„μž¬ λ¦¬μ•‘νŠΈ ν™˜κ²½μ—μ„œ μΈμŠ€νƒ€κ·Έλž¨ 클둠코딩 쀑이닀. μΈμŠ€νƒ€κ·Έλž¨ 메인 κ²Œμ‹œκΈ€μ˜ β€œλ”λ³΄κΈ°β€ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ νŒμ—…μ΄ λ‚˜μ˜€λŠ”λ°, κ±°κΈ°μ„œ β€œκ²Œμ‹œκΈ€λ‘œ 이동” 을 λˆ„λ₯Ό μ‹œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ”λ°, 이 뢀뢄을 κ΅¬ν˜„ν•˜λ €ν–ˆλ‹€.ν•˜μ§€λ§Œ κ²Œμ‹œκΈ€ μƒμ„ΈλŠ” 두 κ°€μ§€μ˜ ν˜•νƒœλ₯Ό λˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ ν™˜κ²½μ—μ„œ

2024λ…„ 6μ›” 11일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] useController ν™˜κ²½μ—μ„œ setFocus κ°€ μ•ˆλ˜λŠ” ν˜„μƒ

κ°œμΈν”„λ‘œμ νŠΈ 쀑, μž„μ˜λ‘œ 포컀싱을 μ£ΌλŠ” μž‘μ—…μ΄ ν•„μš”ν–ˆλ‹€. β‡’ λŒ“κΈ€ μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜λ©΄ μ•„λž˜ λŒ“κΈ€ 폼이 포컀싱 λ˜λ„λ‘μž‘μ—…μ€ κ°„λ‹¨ν–ˆλŠ”λ°, useForm 의 setFocus λ₯Ό μ‚¬μš©ν•˜λ©΄ 될 μΌμ΄μ—ˆλ‹€. ν•˜μ§€λ§Œ μ–΄μ§Έμ„œμΈμ§€ 포컀싱이 λ˜μ§€ μ•Šμ•˜κ³ , useRef κΉŒμ§€ μ‚¬μš©ν–ˆλŠ”λ°λ„ 포컀

2024λ…„ 5μ›” 16일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[React] μš”μ†Œ μ™Έ μ™ΈλΆ€ μ˜μ—­ 클릭

μΈμŠ€νƒ€κ·Έλž¨ 클둠 μ½”λ”© ν”„λ‘œμ νŠΈ μž‘μ—…μ€‘, 더보기 λ²„νŠΌμ„ ν† κΈ€ ν΄λ¦­μ‹œ 메뉴창이 뜨고 λ‹«νžˆλ„λ‘ λ§Œλ“€μ–΄λ†“μ€ μƒνƒœμ΄λ‹€. μ—¬κΈ°μ„œ λ‚˜λŠ” 메뉴창 μ™Έμ˜ μ˜μ—­μ—λ„ 클릭할 μ‹œ 메뉴창이 λ‹«νžˆλ„λ‘ ν•˜κ³ μ‹Άμ–΄ν–ˆλ‹€. 찾던 λ‚΄μš©μ€‘, λ‹¨μˆœν•˜κ²Œ μ „μ²΄μ˜μ—­μ„ νƒœκ·Έλ‘œ 감싼 ν›„ ν•΄λ‹Ή μ „μ—­ νƒœκ·Έμ˜ onClick

2024λ…„ 3μ›” 24일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[ESlint] SyntaxError: Failed to load parser '@typescript-eslint/parser' declared in '.eslintrc.json μ—λŸ¬

next ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜λ € 초기 μ„ΈνŒ…μ€‘, λ‹€μŒκ³Ό 같은 eslint μ—λŸ¬ 문ꡬ가 λ–΄λ‹€.초기 eslintrc.json λŠ” λ‹€μŒκ³Ό 같이 μžλ™μœΌλ‘œ μ„€μ •λ˜μ–΄μžˆλ˜ 상황이닀.next.js 초기 μ„ΈνŒ…(eslint, prettier) κ΄€λ ¨ 글을 μ„œμΉ˜ν•˜μ˜€λŠ”λ°, μœ„μ˜ λΆ€λΆ„λ§ŒμœΌλ‘  μ™„λ²½ν•˜κ²Œ

2024λ…„ 1μ›” 21일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[javascript] body 슀크둀 막기

슀크둀 κΈ°λŠ₯을 λ§‰μ•„μ•Όν•˜λŠ” μƒν™©μ—μ„œ λŒ€λΆ€λΆ„μ€ body 에 overflow-y: hidden 을 μ£ΌλŠ” 방법이 μ œμ‹œλ˜μ§€λ§Œ, κ·Έλ ‡μ§€ μ•Šμ€ 경우 μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 이λ₯Ό μ²˜λ¦¬ν•΄μ•Όν•œλ‹€.μ²˜μŒμ—” μ•„λž˜μ™€ 같이 이벀트λ₯Ό μ£Όμ—ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•Šμ•˜λ‹€ γ… λ‘λ²ˆμ§Έ μ‹œλ„λ‘œ μ•„λž˜μ™€ 같이 λ‹€λ₯Έ μ΄λ²€νŠΈμ—λ„ 적

2023λ…„ 12μ›” 7일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[Swiper.js] νŽ˜μ΄μ§€ 링크 이동, ν˜„μž¬ μŠ¬λΌμ΄λ“œ ν‘œμ‹œ (hash navigation μ˜΅μ…˜) (1)

μ‚¬μš©μž μž…λ ₯폼을 μ—¬λŸ¬ λ‹¨κ³„λ‘œ μž‘μ„±ν•  수 μžˆλŠ” 뢀뢄을 λ ˆμ΄μ–΄ νŒμ—…μ‹μœΌλ‘œ λ„μ–΄μ§€λŠ”κ²ƒμ΄ μ•„λ‹Œ, λΈŒλΌμš°μ € μƒμ—μ„œλ„ λ’€λ‘œκ°€κΈ°, μ•žμœΌλ‘œ κ°€κΈ°κ°€ κ°€λŠ₯ν•œ λžœλ”©νŽ˜μ΄μ§€ ν˜•μ‹μœΌλ‘œ λ§Œλ“€κ³  μ‹Άμ—ˆλ‹€. μ•„λž˜μ™€ 같은 μ‚¬ν•­λ•Œλ¬Έμ΄μ—ˆλ‹€.4개의 νŽ˜μ΄μ§€λ‘œ λΆ„λ¦¬ν•˜λ©΄ νŽ˜μ΄μ§€ 이동 μ‹œ 이전에 μž…λ ₯ν•œ μ‚¬μš©μžμ˜ μž…

2023λ…„ 12μ›” 6일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[javascript] μ„Έλ‘œ 슀크둀 μŠ¬λΌμ΄λ“œ κ΅¬ν˜„

이미 ν’€νŽ˜μ΄μ§€ 슀크둀이 κ΅¬ν˜„λ˜μ–΄μžˆλŠ” μƒνƒœνŠΉμ • νŽ˜μ΄μ§€λ‚΄μ—μ„œ μŠ¬λΌμ΄λ“œκ°€ μ„Έλ‘œλ‘œ μŠ€ν¬λ‘€λ˜λŠ” ꡬ쑰둜 λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”λ°, ν’€νŽ˜μ΄μ§€ 슀크둀 κΈ°λŠ₯κ³Ό 겹쳐 슀크둀 이벀트λ₯Ό κ΅¬ν˜„ν•˜λŠ”λ° 쉽지 μ•Šμ•˜λ‹€..ν•΄λ‹Ή νŽ˜μ΄μ§€μ— λ„λ‹¬ν•˜λ©΄ body 의 μŠ€ν¬λ‘€μ„ 막은 ν›„ μŠ¬λΌμ΄λ“œλ₯Ό μ‹€ν–‰ν•˜κ²Œ ν•˜κ³ , μŠ¬λΌμ΄λ“œ

2023λ…„ 12μ›” 6일
Β·
0개의 λŒ“κΈ€
Β·
post-thumbnail

[javascript]select λ°•μŠ€ option 선택에 λ”°λ₯Έ input μž…λ ₯μ°½ μΆ”κ°€/μ‚­μ œ

select λ°•μŠ€μ—μ„œ ν’ˆλͺ©μ˜ μ’…λ₯˜ 개수λ₯Ό μž…λ ₯ν•˜λ©΄, κ°œμˆ˜μ— 따라 input 칸이 μΆ”κ°€λ˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€. (ν’ˆλͺ©μ€ 4κ°œκΉŒμ§€ μž…λ ₯ κ°€λŠ₯)개수λ₯Ό λ³€κ²½μ‹œ, κ°œμˆ˜κ°€ 적어지면 적어진 개수만큼 λ’€μ—μ„œλΆ€ν„° input μ‚­μ œ, μž…λ ₯값이 같이 제좜될 수 μžˆμœΌλ―€λ‘œ 그에 λ”°λ₯Έ valu

2023λ…„ 12μ›” 6일
Β·
0개의 λŒ“κΈ€
Β·