TanStack Query์™€ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•œ cursor ๋ฐฉ์‹์˜ ๋ฌดํ•œ ์Šคํฌ๋กค
ยท
What I Learn
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ชจ๋ฐ”์ผ ์‚ฌ์šฉ์ž๋ฅผ ํƒ€๊ฒŸ์œผ๋กœ ์ง„ํ–‰ํ–ˆ๊ธฐ์— ๋ชจ๋ฐ”์ผ์—์„œ ๋” ์‚ฌ์šฉ์„ฑ์ด ์ข‹์€ ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” offset ๋ฐฉ์‹๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” cursor ๋ฐฉ์‹์„ ์„ ํƒํ•ด์„œ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.๋‚ฏ์„  cursor ๋ฐฉ์‹์„ ์„ ํƒํ•œ ์ด์œ ๋Š” offset ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๊ฑด๋„ˆ๋›ธ ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ๋“ค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์–ด๋„ ์Šคํฌ๋กค์‹œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ๋” ๋ถˆ๋Ÿฌ์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ nextCursor ๊ฐ’์„ ๋ณด๋‚ด์ฃผ๊ธฐ๋กœ ๋…ผ์˜ํ–ˆ๊ณ , API์—์„œ๋Š” type, cursor, limit, order ๊ฐ’์ด ์ฟผ๋ฆฌ๋กœ ์ฃผ์–ด์กŒ๊ณ  ๊ทธ ์ค‘ type๋งŒ ํ•„์ˆ˜..
Toast ์ ์šฉ๊ธฐ
ยท
What I Learn
๊ธฐํš ๋‹จ๊ณ„์—์„œ PM๋‹˜๊ณผ ๋””์ž์ด๋„ˆ๋‹˜๊ณผ ํ•จ๊ป˜ ์ƒ์˜ํ•  ๋•Œ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์„ฑ์ด ์ข‹๊ฒŒ ๋А๊ปด์ง€๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ๋งŽ์ด ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์œ ์ €๊ฐ€ ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์„ ๋ฒ•ํ•œ ๋ถ€๋ถ„์—์„œ ํˆดํŒ์ด๋‚˜ ํ† ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฉ๋ฒ•์„ ์ ์ ˆํžˆ ์ œ์‹œํ•ด์ฃผ๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ, ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ์Šค๋‚ต๋ฐ”์™€ ํ† ์ŠคํŠธ, ํˆดํŒ ๋ชจ๋‘ ํ˜ผ์šฉํ•ด์„œ ์›Œ๋“œ๋ฅผ ์“ฐ๋‹ค๋ณด๋‹ˆ ๋‹ค ๋ชจ๋ฅด๋Š” ๋‚˜๋Š”.. ์ด๊ฒŒ ๋ญ์ง€ ๐Ÿ˜ฑ ??! ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค..... ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผ์ฐฝ์˜ ์ข…๋ฅ˜๋Š” ์ด์ •๋„๋กœ ์ฐพ์•„๋ดค๋‹ค. ์„ค๋ช…์‚ฌ์šฉ ์˜ˆ์‹œDialog์‚ฌ์šฉ์ž์˜ ์ค‘์š”ํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ ์›น ํŽ˜์ด์ง€ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ. ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.์ •๋ณด ์ž…๋ ฅ, ์‚ญ์ œ ํ™•์ธToast์‚ฌ์šฉ์ž์˜ ๋™์ž‘์— ์˜ํ•œ ํ”ผ..
scroll ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„
ยท
What I Learn
ํ”„๋กœ์ ํŠธ ๋‹น์‹œ์—๋Š” Throttling & debouncing์— ๋Œ€ํ•ด ํ•™์Šตํ•  ์‹œ๊ฐ„๋„ ์—†์–ด์„œ ; ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ๋งŒ ์ง„ํ–‰ํ–ˆ์—ˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค. ๋ฌธ์„œ ์ •๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์ด์   Intersection Observer API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•ด์„œ,๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—๋Š” Intersection Observer API์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ณ  ์ด๊ฑธ๋กœ ๋ฌดํ•œ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.  โžก๏ธ Intersection Observer API๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌดํ•œ์Šคํฌ๋กค ๊ตฌํ˜„ ๐Ÿ“‘ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐฑ์—์„œ ์ฒ˜์Œ์— 5๊ฐœ ์ž˜๋ผ์„œ ๋ณด๋‚ด์ฃผ์‹  ๊ฑธ ๋ฐ›์•„์„œ, ์Šคํฌ๋กค ์ด๋ฒคํŠธ์— +5๊ฐœ ํ•ญ๋ชฉ ์”ฉ ๋”ํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.   const handleScroll = () => { const windowHeight = window.innerHeight; // ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ..
Next.js ๋ณ‘๋ ฌ ๋ผ์šฐํŒ… & ๊ฒฝ๋กœ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ํ†ตํ•œ ๋ชจ๋‹ฌ ํŽ˜์ด์ง€ ๊ตฌํ˜„
ยท
What I Learn
์ฒ˜์Œ์— ๊ตฌ์ƒํ•œ UI ๋””์ž์ธ์„ ๋ฐ”๊พธ๋ฉด์„œ ์ด ๋ฐฉ์‹์ด ๋” ์ ํ•ฉํ•˜๋‹ค ์ƒ๊ฐ๋˜์–ด ๋ณ€๊ฒฝํ–ˆ๋‹ค.  ์ด๊ฒŒ ์ฒ˜์Œ ๋‚˜์™”๋˜ ํ”ผ๊ทธ๋งˆ์ด๊ณ , ์ด๋•Œ๋Š” ์ „์—ญ์œผ๋กœ ๋ชจ๋‹ฌ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ redux-toolkit์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.โžก๏ธ redux-toolkit์„ ์ด์šฉํ•ด์„œ ๋ชจ๋‹ฌ ์ƒํƒœ๊ด€๋ฆฌ 01. ์ „์—ญ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋‹ฌ ๋งŒ๋“ค๊ธฐ (Next.js v14, redux-toolkit)์ €๋ฒˆ์— ๋งŒ๋“  ๋ชจ๋‹ฌ์€ ๋ชจ๋‹ฌ์—์„œ crudํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ€์กŒ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ์Šฌ๋ผ์ด๋“œ, ๋ชจ๋‹ฌ ๋‚ด์˜ ๋ชจ๋‹ฌ ํƒ€์ž…์ด ์ง€์ •๋œ ๋ฒ„ํŠผ,๊ทธ๋ฆฌ๊ณ  ๋ฒ„ํŠผ์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋‹ฌ form, ...... ๊ทธ์•ผ๋ง๋กœ ๋ชจ๋‹ฌ ์ผ๋Œ€๊ธฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆnuew.tistory.com  ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋‹ค์Œ์ด ๋ฐ”๋€ ๋””์ž์ธ์ด๊ณ , ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ์‹์ด ์ข‹์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ Next.js์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ parallel rou..
OSSCA: LLM ์กฐ์‚ฌ, Continue ๋ถ„์„ ๋ฐ ์ •๋ฆฌ
ยท
What I Learn
3~4์ฃผ์ฐจ๊ฐ„ ์ง„ํ–‰๋๋˜ ํŒ€ ๊ณผ์ œ๋ฅผ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. 1. AI Coding Assitant ๋„๊ตฌ ์กฐ์‚ฌ ๋ฐ ๋น„๊ต ๋ถ„์„Amazon CodeWhispererCodeCursorTablinCodeiumGitHub Copilotreplit GhostWriter1-1. Amazon CodeWhispererAWS ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐœ๋ฐœ์„ ์ตœ์ ํ™”ํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.์ฃผ์š” ํŠน์ง• : ์ž๋™ ์™„์„ฑ, ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ง€์›, ์ฃผ์„ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ์ƒ์„ฑ, AWS ์„œ๋น„์Šค์™€์˜ ํ†ตํ•ฉ1-2. Codexํ˜„์žฌ Github Copilot, TabNine๋“ฑ๊ณผ ๊ฐ™์€ AI coding assistant๋„ Third-party extensions๋กœ์„œ Codex๋ฅผ ์‚ฌ์šฉ(leverage)ํ•˜๊ณ  ์žˆ๋‹ค.์ฃผ์š” ํŠน์ง• : Coding assist..
next-auth๋ฅผ ์‚ฌ์šฉํ•œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ
ยท
What I Learn
next-auth ์—์„œ๋Š” 3๊ฐ€์ง€์˜ Provider๋ฅผ ์ œ๊ณตํ•œ๋‹ค.Oauth / Email / Credentials๊ทธ ์ค‘์— OAuth ๊ธฐ๋Šฅ์œผ๋กœ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค.session ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” getServerSession ํ›…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” root layout์„ SessionProvider์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ๋ฆฌ๋•์Šค ์„ธํŒ…์„ ํ•ด๋‘ฌ์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด๋‘” Provider ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋™ํ•ด์„œ ๋จผ์ € ์ด๊ณณ์—์„œ ์ œ์ผ ๋ฐ”๊นฅ์— SessionProvider๋กœ ์‹ฌ์–ด์คฌ๋‹ค. /lib/Provider.js"use client";import { SessionProvider } from "next-auth/react";import { Provider } from "react-redux";import { st..
exclude a page from next.js root layout
ยท
What I Learn
root์˜ layout.ts ๋งŒ์ง€๋ฉด์„œ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ํ™ฉ๋‹นํ•˜๊ฒŒ ์ด๋Ÿฐ ๋ ˆ์ด์•„์›ƒ์ด ๋‚˜์™”๋‹ค.์—๋ŸฌํŽ˜์ด์ง€๋ฅผ ๋จธ๋ฆฌ์—์„œ ์žŠ๊ณ  ์žˆ๋‹ค๊ฐ€ ์ด๋ ‡๊ฒŒ ๋œจ๋‹ˆ๊นŒ ์ƒ๊ฐ๋‚จ.. layout.js๊ฐ€ ๋ฃจํŠธ์—๋งŒ ์žˆ๊ณ  ๋ถ„๊ธฐ๋ณ„ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ์ „์—ญ์ ์œผ๋กœ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธด ๋ฌธ์ œ์˜€๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ด ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์ด app/(foldername)/page.tsx์ฒ˜๋Ÿผ ()๋กœ ๋ผ์šฐํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ์–ด๋„ ํ•˜์œ„ ํด๋” ์•ˆ์˜ ํŽ˜์ด์ง€์— ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ๋‹ค. https://nextjs.org/docs/app/building-your-application/routing/route-groups๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ด ๋ถ€๋ถ„์„ ๋ณด๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. ๋จผ์ € ๊ธฐ์กด์˜ root layout ํ˜•์‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ํŽ˜์ด์ง€์™€ ์•„๋‹Œ ํŽ˜์ด์ง€๋ฅผ ๋‚˜๋ˆ„๊ณ ,ap..
OSSCA: customize prompt & set a completionOptions in Continue
ยท
What I Learn
1. Continue์—์„œ completionOption ์„ค์ •ํ•˜๊ธฐContinue์—์„œ completionOption ์„ค์ •ํ•˜๋Š” ๋ฐ์—๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.1-1. config.json > completionOption์ „์—ญ์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.์—ฌ๊ธฐ์„œ ์„ค์ •ํ•œ completionOption ๊ฐ’๋“ค์€ ๋ชจ๋ธ์— ์ƒ๊ด€์—†์ด Continue์—์„œ ๋ชจ๋“  ์ž‘์—…์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.{"completionOptions": {"temperature": 0.7,"topP": 0.9,"maxTokens": 150}}1-2. config.json > models > completionOptions๋ชจ๋“  ๋ชจ๋ธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋ชจ๋ธ์— ๋Œ€ํ•œ ์„ค์ •์„ ๋ณ„๋„๋กœ ์ •์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.e.g., Msty์™€ gpt-4o-mini์—..