๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?

๐€๐ฅ๐ฅ ๐๐จ๐ฌ๐ญ285

[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.