๐๐ฅ๐ฅ ๐๐จ๐ฌ๐ญ292 [ํ๊ณ ] ๋๋ฃ ํผ๋๋ฐฑ์ผ๋ก ๋๋์๋ณธ ๋ - 4๋ ์ฐจ ๊ฐ๋ฐ์์ ํ๊ณ ๋ก ํ๊ณ · Retrospective ๋๋ฃ ํผ๋๋ฐฑ์ผ๋ก ๋๋์๋ณธ ๋— ํ๋ก ํธ์๋ ๋ฉ์ธ ๊ฐ๋ฐ์๋ก์์ ํ๊ณ ํจ๊ป ์ผํ๋ ๋๋ฃ๋ค์๊ฒ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ํ์ฌ ๊ฐ์ด ์ผํ๋ ๋๋ฃ๋ ์๊ณ , TF๋ก ์ ๊น ํจ๊ปํ๋ ๋๋ฃ๋, ์ด๋ฏธ ํด์ฌํ ๋๋ฃ๋ ์๋ค. ๋ฐ์๋ณด๊ธฐ ์ ์๋ ์์งํ ๋๊ทผ๊ฑฐ๋ ธ๋ค. ๋ด๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง, ๋ง์ ๊ธ์๋ก ๋ง์ฃผํ๋ ๊ฑด ๋ค๋ฅธ ์ผ์ด๋๊น. ํผ๋๋ฐฑ์ ์ฝ์ผ๋ฉฐ ์๊ธฐ๋ ํ๊ณ , ์กฐ์ฉํ ๋๋ฌ๋์๋ ๊ฐ์ ์ด ์ฌ๋ผ์ค๊ธฐ๋ ํ๋ค. ์ด ๊ธ์ ๊ทธ ํผ๋๋ฐฑ๋ค์ ๋ฐํ์ผ๋ก ์ค์ค๋ก๋ฅผ ๋์๋ณธ ๊ธฐ๋ก์ด๋ค. ๋๋ ์ด๋ค ๊ฐ๋ฐ์์ธ๊ฐ ๋๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ด์, ํ์ฌ ํด๋ผ์ฐ๋ ์ ํ ํํธ์ ํ๋ก ํธ์๋ ๋ฉ์ธ ๊ฐ๋ฐ์ ์ญํ ์ ๋งก๊ณ ์๋ค. ๋์ ์ฃผ์ ์ญํ ์ ๊ฐ๋ฐ๋ฟ๋ง ์๋๋ผ ์ผ๊ฐ์ ๋ฏธ๋ฆฌ ๋ถ๋ฐฐํ๊ณ ํ์ค์ ์ธ ์ผ์ ์ ์ฐ์ถํ์ฌ ํ .. 2026. 5. 27. [ํ๊ณ ] HIGH FIVE 2026 - ๋๋ ์ด๋ค ๊ฐ๋ฐ์๋ก ์ฑ์ฅํด์ผ ํ๋๊ฐ? HIGH FIVE 2026์ ๋ค๋ ์ค๋ฉฐ์ด ๊ธ์ ๊ฐ์ฐ ๋ด์ฉ๋ณด๋ค๋ ๊ฐ์ธ ๊ด์ ์์ ๋๋ ์ ์ ๋ํด ์์ฑ๋ ๊ธ์ ๋๋ค. ์ด๋ฒ HIGH FIVE 2026์ ๊ฐ์ธ์ ์ผ๋ก ๊ฝค ์๋ฏธ๊ฐ ์ปธ๋ ํ์ฌ์๋ค.์ฌ์ค ๋๋ ๋งค๋ 2~3๋ฒ ์ ๋๋ ๊ฐ๋ฐ ์ปจํผ๋ฐ์ค๋ฅผ ์ฐพ์๋ค๋๋ ํธ์ด๋ค.์๋ก์ด ๊ธฐ์ ์์ฒด๋ ์ข์ํ์ง๋ง, ๊ฒฐ๊ตญ ์ง๊ธ ์ ๊ณ๊ฐ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ์์ง์ด๊ณ ์๋์ง๋ฅผ ๊ณ์ ํ์ธํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ด๋ค.์ฐ๋ฆฌ ํ์ฌ์ ๊ท๋ชจ๋ณด๋ค ๋ช๋ฐฑ๋ฐฐ๋ ํฐ ํ์ฌ์์๋ ์ด๋ค ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๊ถ๊ธํ๊ธฐ๋ ํ๊ณ ,๊ทธ๋ค์ด ๊ณ ๋ฏผํ๋ ๊ฒ๋ค๊ณผ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ผ๋ฉด์ ์์ ๊นจ๊ณ ๋์ค๋ ๊ฑฐ ๊ฐ์ ๋๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฒ ์ปจํผ๋ฐ์ค๋ TECH ์ธ์ ๋ง ๋ค์๊ฒ ์ข ์์ฌ์ธ ์ ๋๋ก,๋ค๋ฅธ ์ธ์ ๋ค๋ ์ฌ๋ฐ๋๊ฒ ๋ง์๋ณด์ฌ์ ๋ค์์ ์ฐธ์ฌํ๊ฒ ๋๋ฉด ๋ ๋ค์ํ๊ฒ ๋ค์ด๋ณด๊ณ ์ถ๋ค. ์ด๋ฒ์๋ ํ์ฌ์ ๋จผ์ ์ด์ผ๊ธฐํด์ ํจ.. 2026. 5. 19. [DX ๊ฐ์ ] Orval์ ํ์ฉํ API Boilerplate ์๋ํ ๊ฒฝํ๊ธฐ ๊ธฐํ์ ๊ณ์ ๋ฐ๋๋๋ฐ ๊ฐ๋ฐ ์ผ์ ์ ๊ณ ์ ๋์ด ์์๋ค์๋น์ค ์ ์ฒด ๊ฐํธ์ ์งํํ๊ฒ ๋๋ฉด์ ์งง์ ๊ธฐ๊ฐ ์์ ๋งค์ฐ ๋ง์ ํ๋ฉด์ ๊ฐ๋ฐํด์ผ ํ๋ ์ํฉ์ด ์์์ต๋๋ค.ํ์ด์ง, ์ฌ๋ผ์ด๋์์, ๋ชจ๋ฌ์ ํฌํจํด 30๊ฐ ์ด์์ ํ๋ฉด์ด ์๋กญ๊ฒ ์ถ๊ฐ๋์ด์ผ ํ๊ณ , ๋ฌธ์ ๋ ๋จ์ํ ํ๋ฉด ์๋ง ๋ง์๋ ๊ฒ์ด ์๋์์ต๋๋ค.๊ธฐํ์ ์์ ํ ํ์ ๋์ง ์์ ์ํ์๊ณ , ๊ฐ๋ฐ์ ์งํํ๋ ๋์์๋ ๊ณ์ํด์ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋๊ณ ์์์ต๋๋ค.ํ์ง๋ง ๋ฆด๋ฆฌ์ฆ ์ผ์ ์ ๊ณ ์ ๋์ด ์์๊ณ , ๊ฒฐ๊ตญ ๊ฐ๋ฐ์๊ฐ ์ค์ ๊ตฌํ์ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ ๊ณ์ ์ค์ด๋๋ ๊ตฌ์กฐ์์ต๋๋ค.์ด๋ฐ ์ํฉ์์ ์ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ค์ ์ง๋ฌธ์ ํ๊ฒ ๋์์ต๋๋ค.“์ง๊ธ ๋ด๊ฐ ์ ๋ง ์ ํ ๊ฐ๋ฐ์ ์๊ฐ์ ์ฐ๊ณ ์๋ ๊ฑธ๊น? ์๋ฏธ ์๋ ๋ฐ๋ณต ์์ ์ ์๊ฐ์ ์๋๊ฑฐ ์๋๊น?” ๋ฐ๋ณต๋๋ API Boilerplate ๋ฌธ์ ๊ธฐ.. 2026. 5. 12. [Next.js] ์ฑ๋ฅ ์ต์ ํ - ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ด๋ ๋ฐฐ๋ด ํ์ผ ๊ด๋ฆฌ ์ ๋ต ํ๋ก ํธ์๋ ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ฐ๋ฆฌ๋ ์์ฐ์ค๋ฝ๊ฒ '๊น๋ํ ์ฝ๋'๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์ ์์ญ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ํ๊ณณ์ ๋ชจ์ ๋ด๋ณด๋ด๋ ๋ฐฐ๋ด ํ์ผ(Barrel File) ํจํด์ ํํ ์ฌ์ฉํ๊ณค ํ์ฃ . ํ์ง๋ง ์ด ํธ๋ฆฌํจ ๋ค์๋ ๋ฒ๋ค ์ฌ์ด์ฆ์ ์ฑ๋ฅ์ ๊ฐ์๋จน๋ ์น๋ช ์ ์ธ ํจ์ ์ด ์จ์ด ์์ต๋๋ค.์ค๋์ ๋ฐฐ๋ด ํ์ผ์ด ์ ์ฑ๋ฅ์ ์ ์ด ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ์ปค์ ธ๋ฒ๋ฆฐ ํ๋ก์ ํธ์์ Next.js์ optimizePackageImports๋ฅผ ํตํด ์ด๋ป๊ฒ ์ฐ์ํ๊ฒ ํ์ถํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. 1. ๋ฐฐ๋ด ํ์ผ(Barrel File)์ด๋?๋ฐฐ๋ด ํ์ผ์ ์ฌ๋ฌ ๋ชจ๋์ ํ๋์ index.ts ํ์ผ๋ก ๋ชจ์์ ๋ค์ ๋ด๋ณด๋ด๋(Re-export) ๋ฐฉ์์ ๋๋ค.// components/index.ts (๋ฐฐ๋ด ํ์ผ)export { d.. 2026. 2. 13. [Next.js] ๋น๋ ์ต์ ํ - ํ๋ก๋์ ๋ฒ๋ค์์ ๊ฐ๋ฐ ์ ์ฉ ์ฝ๋ ์ ์ธํ๊ธฐ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก Next.js ํ๋ก๋์ ๋น๋ ์๊ฐ์ด ์ ์ ๋์ด๋๋ ๋ฌธ์ ๋ฅผ ์ฒด๊ฐํ๊ฒ ๋๋ค.“์ฝ๋๊ฐ ๋๋ฉด ๋น๋๊ฐ ๋๋ ค์ง๋ ๊ฑด ๋น์ฐํ ๊ฑฐ ์๋๊ฐ?” ์ถ์ง๋ง,์์ธํ ๋ณด๋ฉด ํ๋ก๋์ ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๊น์ง ๋น๋ ํ์ดํ๋ผ์ธ์ด ์ฒ๋ฆฌํ๋ฉด์ ์๊ฐ์ ์ก์๋จน๋ ๊ตฌ๊ฐ๋ค์ด ์๋ค. ์ด๋ฒ ๊ธ์ ๊ทธ์ค ํ๋์๋ React Query / Jotai DevTools๋ฅผ _app์ ์ ์ import๋ก ๋ฃ์ด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํด์,๋น๋ ์๊ฐ์ ์ค์ธ ๊ณผ์ ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค. 1. ๋ฌธ์ : DevTools๋ฅผ ๊ทธ๋ฅ ๋ฃ์ผ๋ฉด?๊ฐ๋ฐ ํธ์๋ฅผ ์ํด @tanstack/react-query-devtools, jotai-devtools๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ,๋ณดํต์ ์๋จ์์ ์ ์ import ํ ๋ค _app ์์์ ์ปดํฌ๋ํธ๋ก ๋ ๋๋งํ๊ฒ ๋๋ค.import { ReactQu.. 2026. 2. 4. [AI/Dev] AI ๊ฐ์ด๋ ๊ธฐ๋ฅ ํ๋กฌํํธ ๊ณ ๋ํ ๊ธฐ๋ก๊ณผ ๊ณ ์ฐฐ ๋๋ ํ์ฌ ํ์ฌ์์ ํด๋ผ์ฐ๋ ์๋น์ค์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ์ผํ๊ณ ์๋ค.ํ์ฌ ๋ด๊ฐ ๋งก์ ํด๋ผ์ฐ๋ ์๋น์ค์ ๊ธฐ๋ฅ์ AI ๊ฐ์ด๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค.ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ด์ง๋ง ํํธ์ฅ๋๊ป ํ๋กฌํํธ ๊ณ ๋ํ๋ฅผ ์ฃผ๋์ ์ผ๋ก ๋ง์๋๋ ค์,๋ด๊ฐ ์ฃผ๋ํ์ฌ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํจ๊ป ์ค๊ณํ๊ณ ๊ฐ์ ํ๋ ์ญํ ์ ์์ฒํ๋ค.๊ทธ ์ด์ ๋ AI ์๋ต์ ํ์ง๊ณผ ์ผ๊ด์ฑ์ด ๊ณง ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ง๊ฒฐ๋๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๊ธ์ ๋ด๊ฐ ๋ค์์ ๋ํด ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.AI Guide๋ฅผ ์ค๊ณํ๋ฉด์ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ๊ณ ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ํ๋กฌํํ ์ ๊ฐ์ ํด์ผ ํ๋ค๊ณ ํ๋จํ์ผ๋ฉฐ์ด๋ค ๋ฐฉ์์ผ๋ก ํ๋กฌํํธ๋ฅผ ๊ณ ๋ํํ๋์ง ๊ทธ ๊ณผ์ ์ ์ ๋ฆฌํ ๊ธฐ๋ก์ด๋ค. 1. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ AI ๊ฐ์ด๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ๋ณธ ๊ด์ AI ๊ฐ์ด๋ ๊ธฐ๋ฅ์ ๋๋ต์ ์ผ๋ก ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.ํ์ฌ ๋ด๊ฐ.. 2026. 2. 4. [Next.js] ์ฑ๋ฅ ์ต์ ํ - ๋ฒ๋ค ์ฌ์ด์ฆ ๊ฐ์ (feat. bundle-analyzer) ์ด๋ ๋ ๋ฌธ๋ ์ฐ๋ฆฌ ์๋น์ค์ ์ด๊ธฐ ๋ก๋ฉ์ด ๋๋ฆฌ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. Bundle Analyzer๋ฅผ ๋๋ ค๋ณด๋... _app.js๊ฐ 4.2MB์๋ค. ์ด๋ป๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ๊ณต์ ํด๋ณด๋ ค๊ณ ํ๋ค. ์ค๋น: Bundle Analyzer ์ค์น๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋ถ์ํ๋ ค๋ฉด ๋จผ์ @next/bundle-analyzer๋ฅผ ์ค์นํด์ผ ํ๋ค.yarn add -D @next/bundle-analyzernext.config.js์ ์ค์ ์ ์ถ๊ฐํ๋ค:const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true',});module.exports = withBundleAnalyzer({ // ๊ธฐ์กด ์ค์ ...});ํธ์๋ฅผ ์.. 2026. 2. 3. [React] ํํธํ๋ Form ์ ํจ์ฑ ๊ฒ์ฌ ๋ก์ง, Zod๋ก ์ฐ์ํ๊ฒ ๊ฒฉ๋ฆฌํ๊ธฐ 1. ๋ค์ด๊ฐ๋ฉฐ: ๊ฑฐ๋ํด์ง Form์ ์ต๊ฒฉํ๋ฐํธ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์ญ ๊ฐ์ ์ ๋ ฅ ํ๋๋ฅผ ๊ฐ์ง ๊ฑฐ๋ํ ์ค์ Form์ ๋ค๋ค์ผ ํ ๋๊ฐ ์์ต๋๋ค.์ด๊ธฐ์๋ ๋จ์ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ๋ก์ง๋ ์๋น์ค๊ฐ ์ฑ์ฅํ๋ฉด์ ์ ์ ๋ณต์กํด์ง๋๋ค.์ ๊ท์ ๊ธฐ๋ฐ ํฌ๋งท ๊ฒ์ฆํ์ผ ํฌ๊ธฐ ๋ฐ ํ์ฅ์ ์ฒดํฌํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋๋ง ์ด์ด์ง๋ ์์ฐจ ๊ฒ์ฆ์ด๋ฐ ๋ก์ง๋ค์ด ํ๋๋ ์ถ๊ฐ๋๋ค ๋ณด๋ฉด, ์ด๋ ์๊ฐ UI ์ปดํฌ๋ํธ ์์ ์๋ฐฑ ์ค์ ๊ฒ์ฆ ์ฝ๋๊ฐ ๋ค์์ผ ์๋ ์ํ๋ฅผ ๋ง์ฃผํ๊ฒ ๋ฉ๋๋ค.ํด๋น ํ๋ก์ ํธ๋ ์ด๊ธฐ์ ์ฝ 3์ฃผ๋ง์ ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ์ฌ๋ ค์ผ ํ์ผ๋ฉฐ, MVP๊ฐ ๊ธฐ์กด์ ์จํ๋ ๋ฏธ์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ชจ๋ ํผ์ ๊ตฌํํด์ผ ํ๋ค๋ ํ๊ณ๋ก UI๋ก์ง๊ณผ ๋น์ง๋์ค ๋ก์ง์ด ๋ค์์ธ ์ํ์์ต๋๋ค. ์ต๊ทผ์ ํด๋น ํ๋ก์ ํธ์ ์ ํจ์ฑ ๊ฒ์ฆ ๋ก์ง์ด ์ถ๊ฐ ์๊ตฌ์ฌํญ์ผ๋ก ๋ค์ด์ค๊ฒ ๋์ด ๋ฎ์ด๋์.. 2026. 1. 12. ์ค์๊ฐ ์๋ฆผ ๊ตฌํ ํ๊ธฐ : 4. ํ๋์ ์ฑ๋๋ก SSE ํต์ ํ๊ธฐ (with. Shared Worker) ์ด์ ๊ธ์์ SSE ์ฐ๊ฒฐ ํ ์คํธ๋ฅผ ๋ง์นํ์ ์ค์ ๋ก ๊ฐ๋ฐ์ ์ฐฉ์ํ๋ ๋จ๊ณ๊ฐ ๋์๋ค. ๊ฐ๋ฐ ์ด์ ์ ๋ด๊ฐ ๊ณ ๋ คํด์ผ ํ ์ฌํญ๋ค์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค. 1. SSE๋ ๋ธ๋ผ์ฐ์ ํญ๋ง๋ค ์ฐ๊ฒฐ์ด ์๋ก ์ด๋ฆฐ๋ค.2. ํค๋ ์ปค์คํ ์ด ํ์ํ์ง๋ง SSE์ ๊ฒฝ์ฐ ํค๋ ์ปค์คํ ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ด ์กฐ๊ฑด์ ๋์์ ๋ง์กฑ์ํค๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ด๋ฒ ์ค์๊ฐ ์๋ฆผ ๊ฐ๋ฐ์ ํต์ฌ ๊ณผ์ ์๋ค. 1. ํญ๋ง๋ค ์๋ก ์ด๋ฆฌ๋ SSE ์ฐ๊ฒฐ ๋ฌธ์ SSE๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ํญ ๋จ์๋ก ์ฐ๊ฒฐ์ด ์์ฑ๋๋ค.์ฆ, ์ฌ์ฉ์๊ฐ ๊ฐ์ ์๋น์ค์์ ํญ์ 3๊ฐ ์ด๋ฉด ์๋ฒ ์ ์ฅ์์๋ SSE ์ฐ๊ฒฐ์ด 3๊ฐ๊ฐ ์ด๋ฆฐ๋ค. ๊ธฐ์ ๊ฒํ ์ด๊ธฐ์๋ ์ด ๋ถ๋ถ์ ํฌ๊ฒ ๋ฌธ์ ์ผ์ง ์์๋ค.ํ์ง๋ง ์ค์๊ฐ ์๋ฆผ์ ํน์ ํ์ด์ง๊ฐ ์๋๋ผ ํค๋์ ํญ์ ๋ ์์ด์ผ ํ๋ ๊ธฐ๋ฅ์ด์๊ณ , ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉ์๋ ์ฌ๋ฌ ํญ์ .. 2025. 12. 7. ์ค์๊ฐ ์๋ฆผ ๊ตฌํ ํ๊ธฐ : 3. ์ธํ๋ผ ํ๊ฒฝ์์ ๋ฐฑ์๋ ์๋ฒ์ ์ฐ๊ฒฐ ํ ์คํธ (with. trouble shooting) ์ด์ ๊ธ์์ ๋ฐฑ์๋ ๋ก์ปฌ ์๋ฒ์์๋ ์คํ์ด ์ ๋๋ ๊ฒ์ ํ์ธํ์๋ค. ํ์ง๋ง k8s ์ธํ๋ผ ํ๊ฒฝ์ ์ฌ๋ ธ์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.์ด๋ฒ ๊ธ์์๋ Next.js API Routes + SSE ํ๋ก์ ๊ตฌ์ฑ ์ K8s ํ๊ฒฝ์์ localhost๋ก ์ฐ๊ฒฐ๋๋ ๋ฌธ์ ์ ๋ํด ์์ฑํด๋ณด๋ ค ํ๋ค. Next.js API Routes๋ฅผ ์ฌ์ฉํด SSE(Server-Sent Events) ํ๋ก์๋ฅผ ๊ตฌํํ๋ ์ค, ๋ก์ปฌ(Linux ์๋ฒ)์์๋ ์ ์ ๋์ํ๋ ์ฝ๋๊ฐ Kubernetes(K8s) ์ธํ๋ผ ํ๊ฒฝ์ ๋ฐฐํฌ๋์ localhost๋ก ์๋ชป ์ฐ๊ฒฐ๋๋ฉฐ ์คํจํ๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ์ด ๊ธ์์๋ ๋จ์ํ “env ์ค์ ์ค์”๋ฅผ ๋์ด,IP ์ง์ ์ ๊ทผ ↔ Service Name ๊ธฐ๋ฐ ์ ๊ทผ์ ๊ตฌ์กฐ์ ์ฐจ์ด,๊ทธ๋ฆฌ๊ณ Next.js์ ๋น๋·๋ฐํ์ ํ๊ฒฝ ๋ณ์ .. 2025. 12. 7. ์ค์๊ฐ ์๋ฆผ ๊ตฌํ ํ๊ธฐ : 2. SSE ๋ฐฑ์๋ ๋ก์ปฌ ์๋ฒ์ ์ฐ๊ฒฐ ํ ์คํธ (feat. next.js) ์ฐ๋ฆฌ ์๋น์ค๋ ํ๋ก ํธ(next.js - pages router)์ ๋ฐฑ์๋(spring boot)๋ก ๋ ํ๋ก์ ํธ์ด๋ค. ๊ธฐ์ ์ ๋์ ํ๊ธฐ ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ SSE ํต์ ์ด ๊ฐ๋ฅํ ์ง ํ์ธ์ ์ํด ํ๋กํ ํ์ ํ ์คํธ๋ฅผ ์ํํ์๋ค. ํ๋ก ํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์๋ค. EventSource ๊ฐ์ฒด๋ฅผ ํ์ฉํด SSE ์ฑ๋์ ์ด๊ณ , ์๋ฒ๊ฐ ๋ณด๋ด๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฐ๋จํ ์ฝ๋์ด๋ค. ํ๋ก์ ํธ์์๋ ๋ฐฑ์๋์์ ํต์ ์ next.config.js์ rewrites ์ค์ ์ ํตํด ํ๋ก์ํ๊ณ ์๊ธฐ ๋๋ฌธ์, SSE ์๋ํฌ์ธํธ(/sse/test)๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์์ฑํ์๋ค.// pages/sse-example.jsximport { useEffect } from 'react';export default function SseExa.. 2025. 12. 7. ์ค์๊ฐ ์๋ฆผ ๊ตฌํ ํ๊ธฐ : 1. SSE(Server Sent Events)๋ ๋ฌด์์ธ๊ฐ? SSE(Server Sent Events)SSE์ ๊ฒฝ์ฐ ์นํ์ด์ง(ํด๋ผ์ด์ธํธ)์ ์์ฒญ ์์ด๋ ์ธ์ ๋ ์ง ์๋ฒ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ๋ฅ์ ํต์ ์ผ๋ก ์นํ์ด์ง(ํด๋ผ์ด์ธํธ)๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํด ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด์ผ ํจSSE(Server-Sent Events)๋ ์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๋ Web API์ค์๊ฐ์ผ๋ก ์์ ๋ถ๋ฌ์ค๊ธฐ, ์๋ฆผ ๋ฐ๊ธฐ ๋ฑ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋ง ํด์ผํ๋ ์ํฉํด์ ์ฌ์ฉํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋์ ํ๋ฆํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ SSE๋ก ํต์ ํ์๋ ์์ฒญ์ ๋ณด๋. (Connection Request)์๋ฒ๋ ์ด ์์ฒญ์ ์์ ํ๊ณ ์๋ฝํ์์ ์๋ฆฌ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋. (Connection Response)ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ๋ฐ๊ณ , ์ง๊ธ๋ถํฐ ์๋ฒ๊ฐ ๋ณด๋ด์ฃผ๋ ๋ฐ์ดํฐ๋ค์ ๋ฐ์ํ ์ค๋น์ด์ ์๋ฒ.. 2025. 12. 1. ์ค์๊ฐ ์๋ฆผ ๊ตฌํ ํ๊ธฐ : 0. ์๊ตฌ์ฌํญ ๋ถ์๊ณผ ๋ฐฉ๋ฒ๋ก ๋น๊ต ์ด์ ์๋ ์๋น์ค์ ์๋ฆผ์ ๋ณผ ์ ์๋ ์ฑ๋์ด ์กด์ฌํ์ง ์์๋ค.์๋น์ค ๋ด์ ๊ธฐ์กด์ ์ง์ํ๋ ๋ถ์๊ณผ ๊ด๋ จ๋ ์๋น์ค ์ธ์ SBOM์ ํ์ฉํ ์๋น์ค์ ๊ณต์ ๊ธฐ๋ฅ์ด ์๊ธฐ๊ฒ ๋๋ฉด์ ์๋ฆผ ๊ธฐ๋ฅ์ด ์๊ตฌ์ฌํญ์ผ๋ก ์ถ๊ฐ ๋์๋ค. ์ฃผ์ ์๊ตฌ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์๋ค.์ด๋ฒคํธ ์์ ์ฌ๋ถ ์ค์๊ฐ ๋ฐ์์๋ก์ด ์ด๋ฒคํธ ๋ฐ์ ์ ์ค์๊ฐ ์ ๋ฐ์ดํธ์ด๋ฒคํธ ์ญ์ ์ ์ค์๊ฐ ์ ๋ฐ์ดํธ ์๊ตฌ ์ฌํญ ๋ถ์ โ ์๋ก์ด ์ด๋ฒคํธ ๋ฐ์ ์ ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฐ์ดํฐ ์ ์ก ํ๋ฆcase 1 : ํด๋ผ์ด์ธํธ → ์๋ฒ (์์ฒญ)case 2 : ์๋ฒ → ํด๋ผ์ด์ธํธโ ์ด๋ฒคํธ ์์ ์ฌ๋ถ ์ค์๊ฐ ๋ฐ์, ์ด๋ฒคํธ ์ญ์ ์ ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฐ์ดํฐ ์์ฒญ/์ ์ก ํ๋ฆํด๋ผ์ด์ธํธ ๋์ → ์๋ฒ (์์ฒญ)์ค์๊ฐ์ฑ์ด ์๋ ํด๋ผ์ด์ธํธ ๋์์ ๋ฐ๋ฅธ ์๋ฒ ์์ฒญ์ผ๋ก ์ค์๊ฐ ์๋ฆผ๊ณผ ๋ณ๊ฐ๋ก ์๊ฐ๊ธฐ์กด REST ์์ฒญ์.. 2025. 12. 1. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 6. on-premise sentry ๊ณ ๋ํ ์ด์ ๊ธ ์์ sentry๋ฅผ ํ๋ก ํธ์๋ ์๋ฒ์ ์ฐ๋ ์๋ฃํ์๋ค. ํ์ง๋ง ์ด๋ค ์ ์ ๊ฐ ๋ฐ์ํ ์ค๋ฅ์ธ์ง ํ์ธํ๊ธฐ๋ ์ด๋ ค์ ๊ณ ์์ค๋งต ์ฐ๋๋ ์ ๋๋ก ๋์ด์์ง ์์์ ์ด๋ค ์ฝ๋์์ ๋ฐ์ํ ์๋ฌ์ธ์ง ํ ๋์ ์์๋ณผ ์ ์๋ ์ํฉ์ ์ค๋ฅ๋ฅผ ํธ๋ ์ด์คํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์๋ค. ๋ํ, ํ์ฌ ์๋น์ค๊ฐ ๋ฆด๋ฆฌ์ฆ ๋์ด์๋ ํ์ฌ ์์ ์ ์ฌ์ฉ์๊ฐ ์ด๋ค ํ์ด์ง(๊ธฐ๋ฅ๋จ์์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋์ด ์๋ค.)๋ฅผ ์์ฃผ ๋ค์ด๊ฐ๋์ง ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค๋ ๋ด๋ถ์ ์๊ฒฌ๋ ์กด์ฌํ๋ค. ๊ทธ๋์ ๋๋ 3๊ฐ์ง์ ๋ํด์ ์ผ๋จ ๊ณ ๋ํ๋ฅผ ์งํํ์๋ค. 1. ์ด๋ค ์ฌ์ฉ์๋ก๋ถํฐ ๋น๋กฏ๋ ์ค๋ฅ์ธ๊ฐ2. ์ด๋ค ์์ค์ฝ๋๋ก๋ถํฐ ํธ๋ ์ด์ค ๋ ์ค๋ฅ์ธ๊ฐ3. ์ด๋ค ํ์ด์ง๋ฅผ ์ฌ์ฉ์๊ฐ ๋ง์ด ์ ๊ทผํ๋๊ฐ ์ด๋ค ์ฌ์ฉ์๋ก๋ถํฐ ๋น๋กฏ๋ ์ค๋ฅ์ธ๊ฐSentry์์๋ ์๋ฌ ์ด๋ฒคํธ์ ์ฌ์ฉ.. 2025. 11. 29. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 5. ํ์ด์ง ๋จ์์ UI/UX ๊ฐ์ ํ๊ธฐ ์ด์ ์ ์์ฑํ๋ UI/UX ๊ฐ์ ๊ธฐ๋ ์ปดํฌ๋ํธ ๋จ์์ ๊ฐ์ ์ ๋ค๋ค๋ค๋ฉด,์ด๋ฒ์๋ ํ์ด์ง ๋จ์์ UI/UX ๊ฐ์ ์ฌํญ์ ๋ํด์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.์ด์ฉ๋ค๋ณด๋ "๋ ํผ๋ฐ์ค"๋ผ๋ ๊ฐ๋ ์ ๋ํ ๊ฐ์ ์ ์๊พธ ๋ค๋ฃจ๊ฒ ๋์ง๋ง, ๋ค๋ฅธ ํ์ด์ง๋ค๋ ๊ฐ์ ์ฌํญ์ด ๊ฝค ์์๋ค. ๋ํ, ์ถ๊ฐ ๋๋ ๊ฐ๋ ๋ค์ด ์์ด์ ์ด๊ฑธ ์ด๋ป๊ฒ ์ฌ์ฉ์๋ค์ด ์ค๋ช ์์ด ์ง๊ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์์๊น?๋ผ๋ ๊ณ ๋ฏผ์ ๋๊ฒ ๋ง์ด ํ๋ค. ๊ฐ๋ฐ๋ ๊ฐ๋ฐ์ด์ง๋ง ๊ธฐํ๊ณผ UI/UX๋ฅผ ์ค๊ณํ๋ ์ผ๋ ๊ฝค๋ ์๋ฏธ์๊ณ ์ฌ๋ฏธ์์๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ํ๋์ฉ ๋ค ๋ฏ์ด๋ณด๊ณ , ์ง์ ์ฌ์ฉํด๋ณด๊ณ ๋ถํธํ ์ ๋ค์ ์ทจํฉํ๊ณ , ๊ธฐ์กด ์ฌ์ฉ์๋ค์๊ฒ ๋ฌผ์ด๋ด์ ๊ฐ์ ํด์ผ ํ๋ ๋ถ๋ถ๋ค์ ๊ณ ๋ฏผํ๋ค. ์ฝ๊ฐ์ ์์จ์ฑ์ด ์ฃผ์ด์ง๋ ํ๋ก์ ํธ๋ผ์ ํผ๋๋ฐฑ์ด ๋ ๋น ๋ฅด๊ฒ ์ค๊ฐ๋ ํ๊ฒฝ์ด๋ผ ๋์ฑ ํฅ๋ฏธ๋ฅผ ๋๊ผ๋๊ฑฐ ๊ฐ๋ค. ๊ฐ์ด ์ฐธ์ฌํ ๋ถ๋ค๋ .. 2025. 11. 28. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 4. sentry self-hosted (on-premise) ์ธํ with next.js 1. Sentry๋?Sentry๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ฐ ์์ธ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ ์๊ฐํํ์ฌ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํ์ ํ๊ณ ๋์ํ ์ ์๊ฒ ๋๋ ์คํ์์ค ๊ธฐ๋ฐ์ ์ค๋ฅ ์ถ์ ์์คํ ์ด๋ค.์ฃผ๋ก ์น, ๋ชจ๋ฐ์ผ, ๋ฐ์คํฌํ ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ๋ฐ์ํ๋ ๋ฐํ์ ์ค๋ฅ๋ ์ฑ๋ฅ ์ ํ ์ด์๋ฅผ ์ถ์ ํ๋ ๋ฐ ํ์ฉ๋๋ค.“Application Monitoring and Error Tracking that helps developers see what actually matters, solve quicker, and learn continuously in production.”2. Sentry๋ก ํ ์ ์๋ ๊ฒ๋คโ ์๋ฌ ์ถ์ ์๋ฌ ๋ฐ์ ์ ์คํ ํธ๋ ์ด์ค๋ฅผ ํฌํจํ ์์ธ ๋ก๊ทธ๋ฅผ ์์งํด ์ด๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์๊ฐ์ ์ผ๋ก ํ์ ํ ์ .. 2025. 6. 18. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 3. URL์ ์ค์ฌ์ผ๋ก ์ค๊ณํ ํํฐ, ๊ฒ์, ํ์ด์ง๋ค์ด์ ์ํ ๊ด๋ฆฌ ์ ๋ต ์ด๋ฒ ๊ธ์์๋ ์ฒด์ปค ๋ชฉ๋ก ํ๋ฉด์์ ํํฐ, ๊ฒ์, ํ์ด์ง๋ค์ด์ ์ํ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง ์ ๋ฆฌํ๊ณ ์ ํ๋ค.ํนํ Next.js ๊ธฐ๋ฐ ํ๊ฒฝ์์ URL ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ํ๋ฅผ ํตํฉ ๊ด๋ฆฌํ๊ณ ,์ด๋ฅผ React Query์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊น์ง ์ฐ๊ฒฐํด ์ผ๊ด๋ UX์ ์ด๊ธฐ ์ฑ๋ฅ์ ํ๋ณดํ๋ ์ ๋ต์ ์ค๊ณํ๋ค. ๐ ๋ฌธ์ ์ ์์ฒ์์๋ ํํฐ์ ๊ฒ์ ์ํ๋ฅผ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํ๊ฑฐ๋ localStorage์ ์ ์ฅํ๋ ๋ฐฉ์์ ๊ณ ๋ คํ์๋ค.ํ์ง๋ง ์๋์ ๊ฐ์ ์ค์ง์ ์ธ ํ๊ณ์ ์ด ์กด์ฌํ๋ค.ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด ์ํ๊ฐ ์ด๊ธฐํ๋์ด ์ฌ์ฉ์ฑ์ด ๋จ์ด์งํํฐ๋ง๋ ์ํ๋ฅผ URL๋ก ๊ณต์ ํ ์ ์์ด ํ์ ์ ๋ถํธํจ๋ธ๋ผ์ฐ์ ๋ค๋ก๊ฐ๊ธฐ/์์ผ๋ก๊ฐ๊ธฐ ๋์์ด ๊ธฐ๋์ ๋ค๋ฅด๊ฒ ์๋ํจSSR์ ํ์ฉํ ์ด๊ธฐ ๋ ๋๋ง๊ณผ ์ฐ๊ฒฐ๋์ง ์์ ๋ก๋ฉ ์ UX๊ฐ ์ข์ง ์์์ด.. 2025. 6. 13. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 2. ๊ณ์ธตํ ๋ ํผ๋ฐ์ค ํํฐ UI ๊ฐ์ ๊ธฐ ๐งฑ ๋ณต์กํ ํธ๋ฆฌ๊ตฌ์กฐ ํํฐ, ๊ณ์ธตํ ํํฐ๋ก ๊ฐ์ ํ๊ธฐโ ๊ธฐ์กด UI์ ๋ฌธ์ ์ ๊ธฐ์กด์ ์ฒด์ปค ๊ด๋ฆฌ ์์คํ ์์๋ ์๋์ ๊ฐ์ด ํธ๋ฆฌ ๊ตฌ์กฐ ๊ธฐ๋ฐ์ ๋ ํผ๋ฐ์ค ํํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค.ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ๋ ํํฐ๋ ์๊ฐ์ ์ผ๋ก ๋ณต์กํ๋ฉฐ, ์ค์ฒฉ ๋ ๋ฒจ์ด ๋ง์์ง๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ด ๊ธ๊ฒฉํ ๋จ์ด์ง๋ ๊ตฌ์กฐ๊ฐ ์ฑํฐ/๋ฃฐ ๋จ์๋ก ์ ํํ ์๋ ์์์ง๋ง, ์ ์ฒด ์ ํ/ํด์ ๋ก์ง์ด ์ง๊ด์ ์ด์ง ์์๊ณ , ๋ง์ฐ์ค ์์ด ์กฐ์ํ๊ธฐ์๋ ๋ถํธ์คํฌ๋กค์ด ๋ง๊ณ ๊ตฌ์กฐ๊ฐ ํํํ์ง ์์, ์ฌ์ฉ์ ์ ์ฅ์์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ํํ ์ง ํ์ ์ด ์ด๋ ค์ ๋ณด์์ฒซ๋ฒ์งธ ์ ํ ํญ๋ชฉ์ ๊ฒฝ์ฐ ํํฐ ๋ ์ด์์์ ๋ฒ์ด๋ UI๋ฅผ ๊ฐ์ง๊ณ ์์ โ ๊ฐ์ ๋ฐฉํฅ: 3๋จ๊ณ ๊ณ์ธตํ ํํฐ UI๊ธฐ์กด์ ํ๋์ ๋ณด๊ธฐ ์ด๋ ค์ด UI๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด 3๋จ๊ณ ๊ณ์ธต ๊ตฌ์กฐ์ ๊ธฐ๋ฐํ ์ปค์คํ ํํฐ ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณ ๋ฐ ๊ตฌํํ๋ค. ?.. 2025. 6. 13. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 1. ๋ถํธํ ํํฐ UI, ๋ชจ๋ฌ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ๊ธฐ ๋ณต์กํ ํํฐ UI, ๋ชจ๋ฌ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ๊ธฐโ ๊ธฐ์กด UI์ ๋ฌธ์ ์ ๊ธฐ์กด SAST ์ฒด์ปค ๊ด๋ฆฌ ์์คํ ์ ์์ ๊ฐ์ ํํฐ UI๋ฅผ ์ ๊ณตํ๊ณ ์์๋ค. ๊ทธ๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์๋ค.๋๋ฌด ์ข์ ๊ณต๊ฐ์ ๋ง์ ํํฐ ํญ๋ชฉ์ด ๋ฐฐ์น๋์ด ์์ด ์์ธ์ฑ์ด ๋ฎ๊ณ ์กฐ์์ด ์ด๋ ค์ํํฐ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋ง์์ง ๊ฒฝ์ฐ ์ธ๋ก ์คํฌ๋กค์ด ๊ธธ์ด์ง๊ณ , ์ผ๋ถ ํญ๋ชฉ์ ๊ฐ๋ก ์คํฌ๋กค ์์ด ๋ณผ ์ ์์ ์ ๋๋ก ๋ ์ด์์์ด ๊นจ์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํํฐ ํญ๋ชฉ์ ๋ฐ๋ผ ๋๋กญ๋ค์ด์ด ํํฐ ์์ญ ๋ฐ์ผ๋ก ์์ ธ๋์ค๋ ๋ฌธ์ ๋ ์์๊ณ , ์ผ๋ถ ๊ธด ํ ์คํธ๋ ์๋ ค์ ํ์๋๊ธฐ๋ ํจ โ ๊ฐ์ ๋ฐฉํฅ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ UI ๊ฐ์ ์ ์ ์ฉํ๋ค. ํํฐ๋ฅผ ๋ชจ๋ฌ๋ก ๋ถ๋ฆฌ ์ข์ธก ์ฌ์ด๋ ์์ญ์์ ๋ฒ์ด๋ ์ ์ฒด ๋ชจ๋ฌ ์ฐฝ์ผ๋ก ํํฐ๋ฅผ ์ ๊ณตํ์ฌ ์์ผ ํ๋ณด ๋ฐ ์ฌ์ฉ์ ์กฐ์์ฑ์ .. 2025. 6. 13. ์ฌ๋ด ๋ณด์ ๋ฆฌ์์ค ํตํฉ ํ๋ซํผ ๊ตฌ์ถ๊ธฐ : 0. ํ๋ก์ ํธ ๊ฐ์์ ๊ธฐ์ ์ ํ ์ฌ๋ด ๋ณด์ ๋ถ์ ์ฒด๊ณ ํตํฉ ์์คํ ํ๋ก์ ํธ์ ์ฐธ์ฌ์ฐ๋ฆฌ ํ์ฌ๋ ์ ์ ๋ถ์(SAST), ๋์ ๋ถ์(DAST), ์คํ์์ค ์ปดํฌ๋ํธ ๋ถ์(SCA) ๋ฑ ๋ค์ํ ๋ณด์ ๋ถ์ ์๋น์ค๋ฅผ ์์ฒด์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ด์ํ๊ณ ์๋ค.๊ธฐ์กด์ SAST์ ๊ด๋ จ๋ ์ฒด์ปค(๋ถ์ ๊ท์น ๋ชจ๋)๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ณ๋์ ์ฌ๋ด ์์คํ ์ด ์กด์ฌํ์ผ๋, ๊ทธ ์ธ๋ ์๋ ๊ด๋ฆฌ์ ์์กดํ๊ณ ์์ด ์ฒด๊ณ์ ์ธ ํตํฉ ๊ด๋ฆฌ ํ๋ซํผ์ด ๋ถ์ฌํ ์ํฉ์ด์๋ค. ํนํ ์ ๊ท ์ฒด์ปค๋ ๋ ํผ๋ฐ์ค๋ฅผ ์ถ๊ฐํ ๋ ์ค๋ณต๋ ์์ ์ด๋ ์ปค๋ฎค๋์ผ์ด์ ๋น์ฉ์ด ๋ฐ์ํ ์ ๋ฐ์ ์๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค.์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด SAST, DAST, SCA ์ฒด์ปค ๋ฐ ๋ ํผ๋ฐ์ค ์ ๋ณด๋ฅผ ํ๋์ ์์คํ ์์ ํตํฉ ๊ด๋ฆฌํ ์ ์๋๋ก ์ ๊ท ํตํฉ ๊ด๋ฆฌ ์์คํ ์ ๊ธฐํํ๊ณ ๊ตฌ์ถํ๋ ํ๋ก์ ํธ TF๊ฐ ๊พธ๋ ค์ก๋ค. ๋๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก.. 2025. 6. 13. [Docker] next.js๋ฅผ Docker๋ก ๋ฐฐํฌํ๊ธฐ with multi-stage ๋น๋ ๋๋ณด๊ธฐ๐ ๋ชฉ์ฐจDockerfile ์์ฑํ๊ธฐ (Single-stage Dockerfile)Multi-stage ๋น๋๋ฅผ ํตํ ์ด๋ฏธ์ง ์ต์ ํ.dockerignore๋ก ๋ถํ์ํ ํ์ผ ์ ๊ฑฐ์ฃผ์ Docker ๋ช ๋ น์ดReference ์ฌ๋ด ์๋น์ค ํ๋ก์ ํธ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋งก์ผ๋ฉด์ CI๋ฅผ ๊ตฌ์ถํด ๋ณผ ์ ์๋ ๊ธฐํ๊ฐ ์๊ฒผ๋ค.ํ์ฌ ๊ฐ๋ฐ์ค์ธ ์๋น์ค๋ next.js ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ด๊ฐ ๋งก์ ์ญํ ์ Dockerfile์ ์์ฑํ์ฌ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์ฌ Teamcity์ ์ฐ๋ํ๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์์ ํน์ ๋ธ๋์น์ ์ ๋ฐ์ดํธ ๋ฐ์ ์, ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ ํ ์ฌ๋ด ์ ์ฅ์์ push ํ๋๋ก ํ๋ ๊ณผ์ ๊น์ง๋ ๋ด๊ฐ ๋งก์๋ค. ์ต์ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ ์๋ฒ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ์์ ์ ๋ค๋ฅธ ๊ฐ๋ฐ์ ์ ๋ฐฐ๋์ด ์ฐ๋ํ์๊ธฐ๋ก ํ๋ค. Doc.. 2025. 6. 5. [Next.js] tailwind CSS ๋ก์ปฌ ํฐํธ ์ ์ฉ (feat. Type '{ children: Element[]; className: string; }' is not assignable to type) next.js + tailwind CSSํ๋ก์ ํธ์์ ๊ธ์จ์ฒด๋ฅผ ์ ์ฉ ํ๋ ๋ฐฉ๋ฒํด๋น ๊ฒ์๊ธ์ ๋ค์ ๊ธฐ์ ์คํ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.- next.js v15 pages-router- react v19- typescript- tailwindCSS- shadcnUIํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ pretendard๋ฅผ ์์๋ก ์์ฑํฉ๋๋ค. Optimizing: Fonts | Next.jsOptimize your application's web fonts with the built-in `next/font` loaders.nextjs.org Pretendard ํ์ผ์ ๋ค์ด๋ก๋ ํฉ๋๋ค.https://cactus.tistory.com/306ํด๋น ํ๋ก์ ํธ์์๋ ํฐํธ ๊ฒฝ๋ํ๋ฅผ ์ํด .woff2 ํ์ฅ์ ํ์ผ์ ๋ค์ด๋ก๋ ํ์ต๋๋ค.๋ค์ ๊ฒฝ๋ก์.. 2025. 3. 14. [Next.js] node.js ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํ์ธ๊ณผ heap ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ ์ฉํ๊ธฐ node.js ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํ์ธ๊ณผ heap ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ ์ฉํ๊ธฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ์ธํ๊ธฐ ์ํด์๋ next.js์์ server๋ฅผ ์ปค์คํ ํ์ฌ ๋ก๊ทธ๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์์๋ด๋ ๋ฐฉ๋ฒ์ GPT์ ๋์์ ๋ฐ์ process.memoryUsage()๋ฅผ ํตํด ์ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค. 1. process.memoryUsage์ ์ค์ ์์Node.js(Next.js) ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ธ์ฌ์ดํธ / if(kakaoAI)2024ํด๋น ์ปจํผ๋ฐ์ค ๋ด์ฉ์ด ๋ด๊ฐ ๊ณ ๋ฏผํ๊ณ ์๋ ๊ฐ๋ ์ ์ธ ๋ถ๋ถ์ ๋ค๋ค์ฃผ๊ณ ์์๋ค. 1-1. ์ฝ๋ ์ ์ฉ// server.jsconst { createServer } = require('http');const { parse } = require('url');.. 2024. 12. 23. [Next.js] Next.js์ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ตฌ์กฐ - node.js v8 Next.js์ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ตฌ์กฐNext.js๋ Node.js ๊ธฐ๋ฐ์ V8 ์์ง์์ ์คํ๋๋ค.JavaScript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๋ค. ๋ฐ๋ผ์ V8 ์ญ์ ์๋ฐ์คํฌ๋ฆฝํธ์ Context ๋น ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋จ, ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ปค์ ๊ฐ์๋งํผ ํ๋ก์ธ์ค๋ฅผ ์ฆ์ํ๋ค๊ณ ํ๋ค.์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ V8 ํ๋ก์ธ์ค์์ ํ ๋น๋ ์ผ์ ๋์ ๋ฉ๋ชจ๋ฆฌ๋ก ํํ๋๋๋ฐ, ์ด๋ฅผ Resident set์ด๋ผ๊ณ ํ๋ค. ๋ด๋ถ ๊ตฌ์กฐ๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ๋ค.์ฌ์ง์์ ๋ณผ ์ ์๋ฏ์ด ํฌ๊ฒ ํ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ด๋ฆฌ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.1๏ธโฃ ์คํ ๋ฉ๋ชจ๋ฆฌ์คํ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๊ณ V8๋ง๋ค ํ๋์ ์คํ์ ๊ฐ์ง๋ค. ์คํ์๋ ์ ์ ๋ฐ์ดํฐ(๋ฉ์๋์ ํจ์ ํ๋ ์, ์์ ๊ฐ, ๊ฐ์ฒด ํฌ์ธํฐ)๊ฐ ์ ์ฅ๋๋ค.V8์ ์คํ ์์ญ์ ๊ด๋ฆฌ๋.. 2024. 12. 22. [Next.js] SWC ์ต์ ์ ํ์ฉํ์ฌ ๋น๋ ์๊ฐ ๋จ์ถํ๊ธฐ SWC๋ฅผ ํ์ฉํ์ฌ ๋น๋ ์๊ฐ ๋จ์ถํ๊ธฐ ์ฌ๋ด์์๋ CI/CD ๋๊ตฌ๋ก ๊นํ ์ก์ ์ ์ฌ์ฉํ๊ณ ์๋ค.๋ฐฑ์๋์ ๋ค๋ฅด๊ฒ ํ๋ก ํธ๋ ์ก์ ์ด ์๋ฃ๋๋๋ฐ ๊น์ง ์ ์ฒด์ ์ธ ์๊ฐ์ด ์ข ๋ ์์๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ์ฌ ๋ด๊ฐ ๊ฐ๋ฐํ๊ณ ์๋ ํ๋ก ํธ ํ๊ฒฝ์์ CI/CD ๊ณผ์ ์ค ๊ฐ์ฅ ์์ ์๊ฐ์ด ๊ธด ์คํญ์ ๋น๋ ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ECR๋ก ์ฎ๊ธฐ๋ ์์ ์ด๋ค. ๊ทธ ์ค CI ๊ณผ์ ์ค์์ ํ๋ก ํธ ํ๋ก์ ํธ ๋น๋ ์๊ฐ๊ณผ ECR PUSH ํ์์ด ๋๋ถ๋ถ์ ์ฐจ์งํจ์ ํ์ธ ํ ์ ์๋ค. โ๊ทธ๋ ๋ค๋ฉด,ํ๋ก ํธ ํ๋ก์ ํธ ๋น๋ ์๊ฐ์ ์ด๋ป๊ฒ ์ค์ผ ์ ์์๊น? Next.js ๋น๋ ์๊ฐ์ ๋จ์ถ ํ๋ ๋ฐฉ๋ฒSWC ์ฝ๋ ์์ถ ํ์ฑํ: swcMinify: true๋ฅผ ์ค์ ํด ๋น๋ ์ SWC๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ถํ์ฌ ์ต์ ํ.Webpack ์บ์ฑ ์ฌ์ฉ: W.. 2024. 11. 1. [JavaScript] ๋ง์ฐ์ค ๋ฐ ํ ์ด๋ฒคํธ (onMouseEnter, onMouseLeave, onWheel) [JavaScript] ๋ง์ฐ์ค ๋ฐ ํ ์ด๋ฒคํธ (onMouseEnter, onMouseLeave, onWheel)ํ์ฌ ์๋น์ค๋ฅผ ๊ตฌํ ํ๋ฉด์ ํ์ฌ ์์ฒด ์ปดํฌ๋ํธ ํดํ ์คํ๋๋ฌธ์,๋ง์ฐ์ค๊ฐ ํ ์คํธ ์์ ์กด์ฌ ํ์ง ์์์๋ ํ ์ด๋ฒคํธ ๋ฐ์์ ํดํ์ด ๊ณ์ ๋ ์๋ ํ์์ด ๋ฐ์ํ์๋ค. ๊ทธ๋์ tooltip์ด ๋ ์ผ ํ๋ ํ ์คํธ์ onMouseEnter, onMouseLeave, onWheel ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ค์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ ์ ์์๋ค. onMouseEnter ์ด๋ฒคํธonMouseEnter ์ด๋ฒคํธ๋ ๋ง์ฐ์ค ํฌ์ธํฐ๊ฐ ํน์ ์์์ ์ฒ์์ผ๋ก ๋ค์ด๊ฐ์ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ.์ด ์ด๋ฒคํธ๋ ์ฌ์ฉ์๊ฐ ๋ง์ฐ์ค๋ฅผ ์์ ์๋ก ์ด๋์ํฌ ๋ ํธ๋ฆฌ๊ฑฐ ๋๋ค.onMouseEnter๋ ํด๋น ์์์ ์์ ์์์๋ ์ด๋ฒคํธ๋ฅผ ์ ํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ .. 2024. 5. 20. [JavaScript] ํ์ ์ฐฝ ๊ตฌํ - window.open [JavaScript] ํ์ ์ฐฝ ๊ตฌํ - window.openํ๋ก์ ํธ์์ ๊ธฐํ ๋ช ์ธ๋ฅผ ๋ฐํ์ผ๋ก ๋ ๋ฆฝ๋ ํ์ ์ฐฝ์ ๊ตฌํํด์ผ ํ๋ค.JavaScript์ window.open ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ฐฝ์ ๊ตฌํํ์๋ค. window.open ๋ฉ์๋์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ด๋ ํญ์ ์ด ๋ ์ฌ์ฉํ๋ ๋ฉ์๋window.open(url, windowName, [windowFeatures]);- url : ํ์ ์ฐฝ์ ๋ก๋ํ ํ์ด์ง URL- windowName : ํ์ ์ฐฝ์ ์ด๋ฆ. ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ฐฝ์ด ์ด๋ฏธ ์ด๋ ค์๋ค๋ฉด ํด๋น ์ฐฝ์ ์ฌ์ฌ์ฉ.- windowFeatures : ํ์ ์ฐฝ์ ํน์ฑ์ ์ ์ํ๋ ๋ฌธ์์ด. ์ฝ๋ ์์์ฝ๊ด ๋ณด๊ธฐ Reference Window: open() method - Web APIs | MDNThe open() m.. 2024. 5. 20. SQLD(๊ตญ๊ฐ ๊ณต์ธ SQL ๊ฐ๋ฐ์) - ๋น์ ๊ณต์ ํฉ๊ฒฉ ํ๊ธฐ SQLD(๊ตญ๊ฐ ๊ณต์ธ SQL ๊ฐ๋ฐ์) - ๋น์ ๊ณต์ ํฉ๊ฒฉ ํ๊ธฐ ์ฝ ํ๋ฌ์ ์ธ 2023๋ 6์ 10์ผ์ 49ํ sqld๋ฅผ ์น๋ค๋ค. ์ํ์ ๋ง์ ์ ์ฒญํด๋์์ง๋ง ํ์ฌ์ผ์ด ๊ฐ์๊ธฐ ๋ฐ๋น ์ง๋ฉด์ ์ฆ์ ์ผ๊ทผ์ผ๋ก ๊ณต๋ถํ ์๊ฐ์ด ์ ๋์ ์ผ๋ก ๋ถ์กฑํ๊ฒ ๋์๋ค. ํด๊ทผํ ๊ณต๋ถํด๋ณด๋ ค ํ์ผ๋ ๊ฑฐ์ ํ์ง ๋ชปํ๊ณ , ์ํ ์ ์ฃผ ํ ์์ผ์ ํ๋ฃจ ๊ณต๋ถํ๊ณ ์ํ ์ ๋ ํ์ฌ ์ ๋ฌด๋ฅผ ์ด ์ ์๊ฒ ๋์ด ๊ทธ ๋ ๋ฐค์์ ๋ ธ๋์ฑ 2ํ๋ ํ๊ณ ๊ฐ์ ์ํ์ ๋ณด์๋ค. sqld ์ํ ์ ๋ณด SQLD 1๊ณผ๋ชฉ - ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด 10๋ฌธ์ 2๊ณผ๋ชฉ - SQL ๊ธฐ๋ณธ ๋ฐ ํ์ฉ 40๋ฌธ์ ๋ฌธํญ๋ณ ์ ์ - 2์ ๊ณผ๋ฝ ๊ธฐ์ค - ๊ณผ๋ชฉ๋ณ 40% ๋ฏธ๋ง ํฉ๊ฒฉ ๊ธฐ์ค - 60์ ์ด์ ์ํ์๊ฐ - 90๋ถ ๊ธฐ๋ณธ ๋ฒ ์ด์ค ๋น์ ๊ณต์(์์๋ช ๊ณผํ์ ๊ณต), ์๋ ์ SSAFY๊ต์ก ๋ฐ์ผ๋ฉฐ SQL๋ฌธ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ์์ฑ.. 2023. 7. 1. [Test Code] queryByText, findByText, getByText queryByText, findByText, getByText์ ์ฐจ์ด์ getByText, findByText, queryByText๋ ๋ชจ๋ react-testing-library ํจํค์ง์์ ์ ๊ณตํ๋ ํจ์๋ก, ํน์ ํ ์คํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ํจ์๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋์๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. getByText: ๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ๋ ํจ์์ ๋๋ค. ํน์ ํ ์คํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐพ์ผ๋ฉด ํด๋น ์์๋ฅผ ๋ฐํํ๊ณ , ์์๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ฃผ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ํ์ ํน์ ์์๋ฅผ ์ฆ์ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์ฝ ์์๊ฐ ์์ ๊ฒฝ์ฐ ํ ์คํธ๊ฐ ์คํจํฉ๋๋ค. import { render, screen } from '@testing-library/react'.. 2023. 6. 29. [Test Code] Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package) ์์ธ Error: Not implemented: HTMLCanvasElement.prototype.getContext ์ค๋ฅ๋ ํ ์คํธ ํ๊ฒฝ์์ getContext ๋ฉ์๋๊ฐ ๊ตฌํ๋์ง ์์์ ๋ ๋ฐ์ํฉ๋๋ค. ์ด ์ค๋ฅ๋ ๋๊ฐ ํ ์คํธ ํ๊ฒฝ์์ ์บ๋ฒ์ค์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋๋ฐ, ํ ์คํธ ์ฝ๋์์ ์ค์ ๋ก ์บ๋ฒ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๐๊ถ๊ธ์ฆ context ๋ผ๋ ๊ฒ์ด react์ context๋ฅผ ์๋ฏธํ๋ ๊ฒ์ธ๊ฐ? HTMLCanvasElement.prototype.getContext ๋ฉ์๋์ "context"๋ฅผ ์๋ฏธ HTMLCanvasElement.prototype.getContext ๋ฉ์๋๋ HTML ์บ๋ฒ์ค ์์์ ๊ทธ๋ฆฌ๊ธฐ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋ ์ด ๋ฉ์๋๋ ์บ๋ฒ.. 2023. 6. 29. ์ด์ 1 2 3 4 ยทยทยท 10 ๋ค์