๋ชฉ๋ก์ „์ฒด ๊ธ€ (46)

<Hello Hosung๐Ÿ˜Ž/>

2ํŽธ - Spring Boot Filter ์„ค๊ณ„

1. Filter๋ž€ ๋ฌด์—‡์ธ๊ฐ€Filter๋Š” Servlet ์ŠคํŽ™์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑ„์–ด ๊ณตํ†ต ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.Spring Boot์—์„œ๋Š” DispatcherServlet ์ด์ „ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋œ๋‹ค.์ฆ‰ ์š”์ฒญ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.Client ↓Filter ↓DispatcherServlet ↓Spring MVC ๋”ฐ๋ผ์„œ Filter๋Š” Spring MVC์™€ ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.2. Filter์˜ ์ฃผ์š” ์‚ฌ์šฉ ๋ชฉ์ ์‹ค๋ฌด์—์„œ Filter๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.1) ์š”์ฒญ ๋กœ๊ทธ ๊ธฐ๋กGET /users/1POST /orders API ์š”์ฒญ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 2) TraceId ์ƒ์„ฑ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์š”์ฒญ ํ•˜๋‚˜๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ID๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.์˜ˆ..

Java/ใ…คJava(SpringBoot) 2026. 3. 10. 16:29
1ํŽธ: JWT๋ž€? - ๊ฐœ๋…๊ณผ ์›๋ฆฌ ์™„๋ฒฝ ์ดํ•ด

๐Ÿ“Œ JWT ์™„๋ฒฝ ๊ฐ€์ด๋“œ ์‹œ๋ฆฌ์ฆˆ1ํŽธ: JWT๋ž€? - ๊ฐœ๋…๊ณผ ์›๋ฆฌ ์™„๋ฒฝ ์ดํ•ด (ํ˜„์žฌ ๊ธ€)2ํŽธ: JWT ๊ตฌํ˜„ํ•˜๊ธฐ - Backend (Spring Boot)3ํŽธ: JWT ๊ตฌํ˜„ํ•˜๊ธฐ - Frontend (React)4ํŽธ: JWT ์‹ฌํ™” - Refresh Token๊ณผ ๋ณด์•ˆ ์ „๋žต์ด ๊ธ€์˜ ๋ชฉํ‘œ"JWT๊ฐ€ ๋ญ”์ง€, ์™œ ์“ฐ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€"๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.STEP 0. ์™œ ์ธ์ฆ์ด ํ•„์š”ํ•œ๊ฐ€?์›น์˜ ์น˜๋ช…์ ์ธ ํŠน์„ฑ: Stateless (์ƒํƒœ๋ฅผ ๊ธฐ์–ต ๋ชป ํ•จ)์›น(HTTP)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ "๊ธฐ์–ต๋ ฅ์ด ์—†์Šต๋‹ˆ๋‹ค".โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚ HTTP์˜ Statel..

JavaScript/ใ…คJWT 2026. 1. 16. 16:25
[WebSocket] ์›น ์ฑ„ํŒ… ๊ตฌํ˜„์„ ์œ„ํ•œ WebSocket & STOMP ๊ฐœ๋… ์ •๋ฆฌ-1

[์‹œ๋ฆฌ์ฆˆ ์•ˆ๋‚ด]ใ† 2026.01.07 - [๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ] - [Web Chat] WebSocket + STOMP ์‹ค์Šต์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ-2 (Backend)ใ† 2026.01.07 - [๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ] - [Web Chat] WebSocket + STOMP ์‹ค์Šต์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ-3 (Frontend)์ด ๊ธ€์˜ ๋ชฉํ‘œ"์›น ์ฑ„ํŒ…์€ ์–ด๋–ป๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™์ž‘ํ• ๊นŒ?"๊ฐœ๋ฐœ์„ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ๋„ WebSocket๊ณผ STOMP์˜ ๊ฐœ๋…์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.STEP 0. ์›น ์ฑ„ํŒ…์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ?์ผ๋ฐ˜์ ์ธ ์›น ์‚ฌ์ดํŠธ์˜ ๋™์ž‘ ๋ฐฉ์‹์šฐ๋ฆฌ๊ฐ€ ํ‰์†Œ์— ์‚ฌ์šฉํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘ค ์‚ฌ์šฉ์ž ๐Ÿ–ฅ๏ธ ์„œ๋ฒ„ ..

JavaScript/ใ…คWebSocket 2026. 1. 6. 13:53
[Expo + React Native] 1. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๊ตฌ์กฐ ์™„๋ฒฝ ์ดํ•ด

1. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Expo + React Native๋ฅผ ์ด์šฉํ•ด ์•ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”ํ•˜๊ณ ,ํ•„์š” ์—†๋Š” ํŒŒ์ผ ์ œ๊ฑฐ + ํด๋” ๊ตฌ์กฐ์™€ ์ฃผ์š” ํŒŒ์ผ ์—ญํ• ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์€ ์ œ์™ธํ•˜๊ณ , ์ดˆ๋ณด์ž๊ฐ€ ํด๋”/ํŒŒ์ผ ์—ญํ• ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 1๏ธโƒฃ ํ™˜๊ฒฝ ์ค€๋น„1-1. Node.js ์„ค์น˜ ํ™•์ธnode -vnpm -v ๊ถŒ์žฅ Node.js ๋ฒ„์ „: LTS (์˜ˆ: v20.x)๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด nvm ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜:nvm install --ltsnvm use --lts 1-2. Expo CLI ์„ค์น˜ ํ™•์ธ์ตœ๊ทผ Expo๋Š” npx create-expo-app ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.npx create-expo-app --version ๊ธฐ์กด์— expo-cli ์„ค์น˜๋˜์–ด ์žˆ์–ด๋„ ์ด์ œ npx ์‚ฌ..

JavaScript/ใ…คReact, RN 2025. 11. 30. 21:01
[k8s] ๋‹จ์ผ ํ”„๋กœ์ ํŠธ vs ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋น„๊ต

1๏ธโƒฃ ๋“ค์–ด๊ฐ€๋ฉฐSpring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(K8s) ์œ„์— ๋ฐฐํฌํ•  ๋•Œํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ API๋ฅผ ๋งŒ๋“ค์ง€, ์•„๋‹ˆ๋ฉด API๋ณ„๋กœ ๋ณ„๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ๋˜๋Š” ์ƒํ™ฉ์š”์ฒญ ๋ถ„์‚ฐ, ์Šค์ผ€์ผ๋ง, ์žฅ์•  ๊ฒฉ๋ฆฌ ์ธก๋ฉด์—์„œ ๋น„๊ต2๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ๋ณธ ๊ตฌ์กฐDeployment: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„, ํŒŒ๋“œ(Pod) ์ƒ์„ฑ/๊ด€๋ฆฌService: Deployment ๋‚ด๋ถ€ ํŒŒ๋“œ์— ์š”์ฒญ์„ ์ „๋‹ฌ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑIngress + Nginx: ์™ธ๋ถ€ ์š”์ฒญ์„ Service๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์—ฌ๋Ÿฌ ํŒŒ๋“œ์— ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ [์š”์ฒญํ๋ฆ„๊ทธ๋ฆผ]์™ธ๋ถ€ ์š”์ฒญ → Ingress(์ง€๋„) → Nginx(ํŠธ๋ž˜ํ”ฝ ๋ฐฐ๋ถ„) → Service → ์—ฌ๋Ÿฌ ํŒŒ๋“œ Ingress: URL/๋„๋ฉ”์ธ ๊ทœ์น™ ๊ด€๋ฆฌNginx: ํŒŒ๋“œ ๋‹จ์œ„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ3๏ธโƒฃ ํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ API (..

k8s 2025. 8. 16. 00:55
[Docker] ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ ๋น„๊ต

Docker Compose, Docker Swarm, Kubernetes ๋ชจ๋‘ ๋‹ค ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์ธ๋ฐ, ๊ทธ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ํ™•์‚ฐ๋˜๋ฉด์„œ, Docker Compose, Docker Swarm, Kubernetes ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋“ค์ด ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์„ธ ๊ฐ€์ง€ ๋„๊ตฌ๋Š” ๋ชจ๋‘ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ๊ฐ์ž์˜ ๋ชฉ์ , ๊ทœ๋ชจ, ๊ธฐ๋Šฅ์—์„œ ํฐ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ฐ ๋„๊ตฌ์˜ ํŠน์ง•์„ ๋น„๊ตํ•˜๊ณ , ์–ธ์ œ ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. Docker Compose๋ชฉ์ : ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํŠน์ง•:- ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ฌถ์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต..

Docker 2024. 11. 27. 17:54
[Docker] ๋„์ปค์˜ ๋„คํŠธ์›Œํฌ๋ž€?

Docker ๋„คํŠธ์›Œํฌ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ๊ฐ„, ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” Docker์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Docker ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.Docker ๋„คํŠธ์›Œํฌ๋ž€?Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋„คํŠธ์›Œํฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํ†ต๋กœ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ†ต์‹ , ๋ณด์•ˆ ์„ค์ •, ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Docker ๋„คํŠธ์›Œํฌ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›..

Docker 2024. 11. 26. 17:34
[React, RN] ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง๊ณผ ๋น ๋ฅธ ๋กœ๋”ฉ์„ ์œ„ํ•œ ์ „๋žต

1. ๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌ๊ณ  ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋А๋ฆฌ๊ฒŒ ๋กœ๋”ฉ๋˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณ„์† ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์ด ํฌ๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘ ์†๋„๋ฅผ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.2. ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ(state)๋‚˜ ์†์„ฑ(props)์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.React.memo: ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.const MyComponent = React.memo(({ data }) => {..

JavaScript/ใ…คReact, RN 2024. 11. 25. 14:51