๐ ๋ฉํ ๋ง โ
4ํ์ฐจ ๐๏ธ 26.03.17
๐ค AI & ์์ฐ์ฑ โ
PR์ ๋จ์ํ ์ฝ๋ ์ ์ถ์ด ์๋๋ผ, ํ๋์ ๋ฌธ์์ด์ ํ์คํ ๋ฆฌ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธด๋ค๋ ๊ด์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
- PR ์ค๋ช ์ ์์ธํ ์๋ก ์ข๋ค.
- ๋ณ๊ฒฝ ์ด์ / ์ค๊ณ ์๋ / ํธ๋ ์ด๋์คํ๋ฅผ ๊ธฐ๋กํ๋ค.
- ๊ณตํต ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ์์ฑ์๊ฐ ์ ํ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ๋ฅผ ๋จ๊ฒจ ์๋๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ ๊ถ์ฅ
- AI๋ฅผ ํ์ฉํ PR ๋ฆฌ๋ทฐ ์์ฑ๋ ์ ๊ทน์ ์ผ๋ก ์๋ํด๋ณด๊ธฐ โ ๋ฐ๋ณต ์์ ์ ์ค์ด๊ณ ์์ฐ์ฑ์ ๋์ผ ์ ์์
๐ณ Git Worktree โ
- ๋ธ๋์น๋ฅผ ๋ณ๋ ฌ๋ก ๊ด๋ฆฌํ ์ ์์
- ํ๊ฐ๊ณต๋ ๋ณ๋ ฌ๋ก ๊ฐ๋จํ ์์ ์ฒ๋ฆฌํ๊ธฐ์ ์์ฃผ ์ฉ์ดํ๋ค๊ณ ํ๋ค.
- Git Worktree๋ก ์ฌ๋ฌ ํผ์ฒ ๋์์ ๊ฐ๋ฐํ๊ธฐ | AI ์ฝ๋ฉ ์๋์ ํ์ ์คํฌ
๐ Next.js ์ธ์ฆ ๋ฐ ๋ฐ์ดํฐ ํ์นญ โ
Fetcher๋ฅผ ํด๋ผ์ด์ธํธ / ์๋ฒ๋ก ๋ถ๋ฆฌํ๋ ํจํด์ ์ถ์ฒ
- ClientSideFetcher โ Axios ๊ธฐ๋ฐ
- ServerSideFetcher โ fetch ๊ธฐ๋ฐ
๊ถ์ฅ ์ํคํ ์ฒ
Token Service (๋
๋ฆฝ)
โ
Fetcher
โ
API ํจ์ํ ํฐ ๊ด๋ฆฌ๋ฅผ ๋ณ๋ ์๋น์ค๋ก ๋ถ๋ฆฌํ๊ณ , Fetcher๊ฐ ํ ํฐ ์๋น์ค๋ฅผ ํตํด ํ ํฐ์ ๋ฐ์ API๋ฅผ ํธ์ถํ๋ ๊ตฌ์กฐ.
- ๋ ๋ฆฝ๋ ํ ํฐ ์๋น์ค: ํ ํฐ ๊ด๋ฆฌ ๋ก์ง์ ๋ณ๋๋ก ๋ถ๋ฆฌํ์ฌ Fetcher โ API ํธ์ถ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐ
- ์ฟ ํค ์ฌ์ฉ ๊ถ์ฅ: localStorage๋ ์๋ฒ์์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ Next.js ํ๊ฒฝ์์๋ ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ์ด ์ ๋ฆฌํ๋ค.
next/headers,js-cookie๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉ ๊ฐ๋ฅ
๐งฉ ์๋ฒ ์ปดํฌ๋ํธ(RSC)์ ํน์ฑ๊ณผ ์ฃผ์์ โ
- ์ปดํฌ๋ํธ ํฌํจ ๊ท์น: ์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์ ์์ง๋ง, ๋ฐ๋๋ ๋ถ๊ฐ๋ฅ
- ์ค๋ ์ท์ ํจ์ : ์๋ฒ ์ปดํฌ๋ํธ๋ ํญ์ ์ต์ ๊ฐ์ ๋ณด๋ ๊ฒ์ด ์๋๋ผ ์์ฒญ ์์ ์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋๋ง๋๋ค.
next/headers์ cookies ๊ฐ๋ snapshot์ด๋ค โ ์ค์๊ฐ ๋ณ๊ฒฝ ๋์ ์ ์ฃผ์ ํ์
๐ ์ฐพ์๋ณด๊ธฐ โ
- Claude Serena, Ghostty
- DIP (Dependency Inversion Principle): ์์กด์ฑ ์ญ์ ์์น. ํ ํฐ ์๋น์ค ๋ฑ์ ๊ตฌํํ ๋ ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํ์ง ์๊ฒ ์ค๊ณํ๋ ๋ฐฉ๋ฒ
- ISP (Interface Segregation Principle): ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น. ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์๊ฒ ์ชผ๊ฐ๋ ์์น
- next/headers์ ์์กดํ์ง ์๋ ํ ํฐ ๊ด๋ฆฌ ๊ตฌ์กฐ
5ํ์ฐจ ๐๏ธ 26.03.20
๐งฉ SOLID / ์ถ์ ๋ ์ด์ด โ
- ๋ณต์กํ ๋ก์ง์ ์ถ์ ๋ ์ด์ด๋ก ์จ๊ธด๋ค.
- ์ฌ์ฉํ๋ ์ชฝ์์๋ ๋ด๋ถ ๊ตฌํ์ ๋ชฐ๋ผ๋ ๋๊ฒ ๋ง๋ ๋ค.
- ์๋น์ค ๊ณ์ธต์ ๊ฐ๋ฅํ ์์ ํจ์ ํํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ข๋ค.
์ถ์ ๋ ์ด์ด ์๋ฏธ
๋ณต์กํ ๋ก์ง์ ๋ฐ์์ ์ ํ์ ์๊ฒ ์จ๊ธฐ๋ ๊ตฌ์กฐ. ์ฌ์ฉํ๋ ์ชฝ์์๋ ์ธํฐํ์ด์ค๋ง ์๋ฉด ๋๋ค.
๐ ์ธ์ฆ โ ํ ํฐ ์๋น์ค ๋ถ๋ฆฌ โ
ํ ํฐ ๊ด๋ฆฌ ๋ก์ง์ ์ ์ญ ์ํ๊ฐ ์๋๋ผ ๋
๋ฆฝ๋ ์๋น์ค ๋ ์ด์ด๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
์ง์ํด์ผ ํ ํจํด - ์ ์ญ ์ํ์ ํ ํฐ ์ ์ฅ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ : js-cookie / iron-session / ์ง์ ๊ตฌํ
- localStorage๋ ์๋ฒ์์ ์ ๊ทผ ๋ถ๊ฐ โ Next.js ํ๊ฒฝ์์๋ ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ์ด ์ ๋ฆฌ
โก useSyncExternalStore โ
์ฟ ํค / ์ธ์ / ์ธ๋ถ ์ ์ฅ์ ๊ฐ์ ์ฝ์ ๋ ์ฌ์ฉ. React ์ํ๊ฐ ์๋ ์ธ๋ถ ์ ์ฅ์๋ฅผ ์์ ํ๊ฒ ๊ตฌ๋ ํ ์ ์๋ค.
const token = useSyncExternalStore(
TokenService.subscribe,
TokenService.getSnapshot,
);- ๋น๋๊ธฐ ํ์ด๋ฐ ๋ฌธ์ ๋ฐฉ์ง
- ์ธ๋ถ ์ ์ฅ์ ๊ตฌ๋ ๊ฐ๋ฅ
- concurrent ํ๊ฒฝ ๋์
๐ ์ฐพ์๋ณด๊ธฐ โ
- SOLID ์์น
- ์ถ์ ๋ ์ด์ด
Q CI ํ์ ์ฒดํฌ ๋จ๊ณ์์ ๋ฐ์ํ ์ค๋ฅ์ ๊ด๋ จํด, ํ์ฌ ํด๊ฒฐ ๋ฐฉํฅ์ด ์ ์ ํ์ง ์ฌ์ญค๋ณด๊ณ ์ถ์ด ์ง๋ฌธ๋๋ฆฝ๋๋ค.
[์ํฉ - Github Actions]
CI์์ tsc --noEmit ์คํ ์ PNG import์ ๋ํด Cannot find module 'png' ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ก์ปฌ์์๋ ๋์ผ ์ฝ๋๊ฐ ์ ์ ๋์ํ๋๋ฐ, GitHub Actions์ type-check ๋จ๊ณ์์๋ง ์คํจํ๊ณ ์์ต๋๋ค.
[ํ์ฌ ์ ์ฉํ ํด๊ฒฐํ ๋ฐฉ๋ฒ - Github ์ ์ฉ ์ฝ๋]src/types/images.d.ts๋ฅผ ์ถ๊ฐํด ์ด๋ฏธ์ง ๋ชจ๋ declaration ์ ์ ํ๊ณ ,tsconfig.json์ include์ next-env.d.ts ๋ช
์ํ๋ CI ํ์
์ฒดํฌ๊ฐ ํต๊ณผํ์ต๋๋ค.
[๊ณ ๋ฏผ๋๋ ์ ]
Next.js๋ next build ๊ณผ์ ์์ .next/types ๊ด๋ จ ํ์
ํ์ผ์ ์์ฑํ๊ณ next-env.d.ts๊ฐ ์ด๋ฅผ ์ฐธ์กฐํ๋ ๊ตฌ์กฐ๋ก ์ดํดํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ CI์ฒ๋ผ tsc --noEmit๋ง ๋จ๋
์ผ๋ก ์คํ๋๋ ํ๊ฒฝ์์๋ ๋ก์ปฌ๊ณผ ํ์
ํ๊ฒฝ์ด ๋ฌ๋ผ์ ธ์ ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ์๊ฐํ์ต๋๋ค.
์ฃผ๊ฐ์ฌ๋๊ป์ CI ์์๋ฅผ build โ type-check๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๋ ์ ์ํด ์ฃผ์
จ๋๋ฐ, ๊ฐ์ธ์ ์ผ๋ก๋ ํ์
์๋ฌ๊ฐ ์๋๋ฐ ๋น๋ ๊ณผ์ ์ ๊ฑฐ์น ํ์๊ฐ ์์ผ๋ type-check โ build ์์๊ฐ ๋ ์์ฐ์ค๋ฝ์ง ์์๊น?"๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํด๊ฒฐํ ๋ฐฉ๋ฒ์ฒ๋ผ, ์ด๋ฏธ์ง ๋ชจ๋ ํ์
์ ์ง์ ์ ์ธํด์ ๊ธฐ์กด CI ์์๋ฅผ ์ ์งํ๋ ๋ฐฉ์์ด ๋ง๋์ง
Next.js์ ๋์ ๋ฐฉ์์ ๋ง์ถฐ ๋น๋๋ฅผ ๋จผ์ ๊ฑฐ์น๋ ๊ฒ์ด ๋ ์ผ๋ฐ์ ์ธ์ง ํ๋จ์ด ์ด๋ ค์ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
[๊ถ๊ธํ ์ ]
Q. ํ์ฌ์ฒ๋ผ .d.ts๋ก ์ด๋ฏธ์ง ๋ชจ๋ declaration์ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๋ฐฉ์์ด Next.js ํ๋ก์ ํธ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋๋ ๋ฐฉํฅ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
A. type.d.ts๋ ๋ง์ด ์ด๋ค. ์ธ๋ถ SDK ์ฐ๊ฒฐ ์์๋ ์์ฃผ ์ฌ์ฉ.
Q. ๋ง์ฝ build โ type-check ์์๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ๋จ์ ํ์
์ค๋ฅ ํ์ธ์ ์ํด ๋งค๋ฒ ๋น๋๋ฅผ ๋จผ์ ์ํํ๋๊ฒ ๋นํจ์จ์ ์ด์ง ์์์ง ๊ถ๊ธํฉ๋๋ค.
A. build โ type-check๋ ์ค์ ๋ก ์ฐ๋ ํจํด.
Next.js ํ๋ก์ ํธ์์ ๋น๋๋ฅผ ๋จผ์ ๋๋ฆฐ ๊ฒฝ์ฐ๋ ์์๋ค๊ณ ํ์
จ๋ค.
- ์ฌ๋ฌ ์ฌ๋์ด ์์ค๋ฅผ ์ค์ผ์ํฌ ํ๋ฅ ์ ์ค์ด๊ธฐ ์ํด
- ๋น๋ ์คํจ๋ฅผ Actions๋ก ์ฒดํนํ๋ ๊ฒ ์์ฒด๊ฐ ๋น์ฉ์ด๊ธฐ ๋๋ฌธ
ํ์ง๋ง, ๋จ์ ํ์ ์ค๋ฅ ํ์ธ์ ์ํด ๋งค๋ฒ ๋น๋๋ฅผ ๋จผ์ ์ํํ๋ ๊ฑด ๋นํจ์จ์ ์ด๊ธด ํ๋ค๊ณ ํ์ จ๋ค.
Q. ์ฐพ์๋ณด๋ Next.js 15.5๋ถํฐ ์ง์ํ๋ next typegen ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ๋น๋ ์์ด ํ์
ํ์ผ๋ง ์์ฑํ ์ ์๋ค๊ณ ํฉ๋๋ค. CI ํ๊ฒฝ์์๋ next typegen โ tsc --noEmit โ next build ๊ฐ์ ํ๋ฆ์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ ์ ํ ์ง ๊ถ๊ธํฉ๋๋ค.
A. ์ฒ์ ๋ค์ด๋ณธ ๋ฐฉ์์ด๋ผ ์ฐพ์๋ณด์๋๋ฐ, ์ ์ฉํด๋ด๋ ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฒฌ ์ฃผ์ฌ
6ํ์ฐจ ๐๏ธ 26.03.23
๐ ๋ฉํ ๋ ๊ณต์ ์๋ฃ โ
ํ๋ก์ ํธ ์งํ ์ค ๋ฉํ ๋์ด ๊ณต์ ํด์ฃผ์ ์๋ฃ ๋ฐ ๊ธฐ์ ์ฐธ๊ณ ๋งํฌ ์ ๋ฆฌ
๐ง Dev Insight
๐ Architecture / Structure
๐ Design System Architecture
๐ Documentation / Visualization
๐งช Testing
๐จ Component / Design System
๐ฆ Libraries / Tools