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

2025/066

์‚ฌ๋‚ด ๋ณด์•ˆ ๋ฆฌ์†Œ์Šค ํ†ตํ•ฉ ํ”Œ๋žซํผ ๊ตฌ์ถ•๊ธฐ : 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.