user-img
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ 75
thumbnail
[Day 14] Log ์ƒ‰๊น” ์ž…ํžˆ๊ธฐ
0. ๋กœ๊ทธ๊ฐ€ ํฐ์ƒ‰์ด๋ฉด...๋ณด๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค.์ด๊ฒŒ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ๋ณด๋ฉด ๊ทธ๋‚˜๋งˆ ๋‚˜์€๋ฐ, ๋ฐฐํฌ๋œ ์„œ๋ฒ„๋กœ ๋“ค์–ด๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋ณผ๋ ค๊ณ  ์น˜๋ฉด ์ •๋ง ๊ตฌ๋ถ„ํžˆ ํž˜๋“ค์–ด์ง„๋‹ค. ์ด๋ฅผ ์œ„ํ•ด๋กœ๊ทธ ๋ ˆ๋ฒจ ๋ณ„๋กœ ์ƒ‰๊น”์„ ์ ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ ค ํ•œ๋‹ค.1. ์ ์šฉ ๋ฐฉ๋ฒ•(1) ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ ์˜์กด์„ฑ ์‚ฝ์ž…resources ๋ถ€๋ถ„์— logBack์„ ๋‘”๋‹ค. ์ดํ›„ ๋กœ๊น…๊ณผ ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ ๊ฐ„์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด @SLF4J ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ๋ฅผ ์“ฐ๊ณ  ์‹ถ์€ ๋ชจ๋“  ํด๋ž˜์Šค๋งˆ๋‹ค Logger ๊ฐ์ฒด๋ฅผ ์ฃผ์ž… ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๊ฐ์ฒด๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋†’์ด๊ณ , Logger ๊ธฐ๋Šฅ ์ž์ฒด์˜ ์œ ์—ฐ์„ฑ๋„ ์ค„์ธ๋‹ค. (์ฒ˜์Œ์—” Log-Back ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋‹ค๊ฐ€ Log4j๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ @SL4FJ๋ฅผ ์•ˆ ์“ด๋‹ค๋ฉด ๋ชจ๋“  Logger ๋ฉค๋ฒ„๋ฅผ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค;;)..
2025.02.13
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[DAY 13] Jasypt๋ฅผ ํ™œ์šฉํ•ด Secret-key ์•”ํ˜ธํ™” ๋ฐ ์„œ๋ฒ„ ๋ฐฐํฌ ์‹œ ์ž๋™ ๋ณตํ˜ธํ™”
0. ์™œ ํ•„์š”ํ•œ๊ฐ€์™ธ๋ถ€ API๋‚˜ DB, ๋ฏธ๋“ค์›จ์–ด ์—ฐ๋™์„ ์œ„ํ•ด์„œ๋Š” ํ™œ์šฉ์„ ์œ„ํ•ด ์•ฝ์†ํ•œ secret-key๋ฅผ ๋“ค๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต ๊ฐœ๋ฐœ์ž๋“ค์€ ์„ค์ •ํŒŒ์ผ์— ๊ทธ๊ฒƒ์„ ๋ชฐ์•„๋„ฃ๊ณ , @Value()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ทธ๊ฒƒ๋“ค์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ๋‹ค์Œ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ง์ด๋‹ค.์ด๋Ÿฐ secret-key๋“ค์€ ์œ ์ถœ๋˜๋ฉด ํ•ดํ‚น ๋“ฑ ํ”„๋กœ์ ํŠธ์— ์น˜๋ช…์ ์ธ ์œ„ํ˜‘์„ ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ ํ•ญ์ƒ ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ๊ณ , ์ธํ”„๋ผ ํŒ€ ๋˜ํ•œ Jenkins๋‚˜ DockerHub์— ํ‚ค ๋ฆฌ์ŠคํŠธ๋“ค์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ด์„œ ๊ณจ์น˜ ์•„ํ”„๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Java์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Jasypt๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.1. Jasypt๋ž€?(0) ์ •์˜๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ํ˜น์€ ๋‹จ์ผ ํ‚ค ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ•์ ์ด๋ผ ํ•œ๋‹ค๋ฉด Jasypt๋กœ ์•”ํ˜ธํ™”ํ•œ ๋Œ€์ƒ์„ ํŠน์ •ํ•˜..
2025.02.12
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[DAY 12] ๊ณตํ†ต ์‘๋‹ต ์ž๋™ํ™” ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ (๋ด‰ํˆฌ ํŒจํ„ด ๋„์ž… - @ResponseBody Advice)
0. ํ•„์š”์„ฑ์ €๋ฒˆ์— ํ–ˆ๋˜ 6์ธ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ˜ํ™˜ ํ™˜๊ฒฝ ๋ชจ์Šต์ด๋‹ค. ๋‹น์‹œ ResultResponse๋ผ๋Š” ํŒ€ ๋‚ด์˜ ๊ณตํ†ต ์‘๋‹ต ๊ทœ์น™์„ ์ •ํ•˜๊ณ , ResponseEntity๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— DTO๋ฅผ ResultResponse๋กœ ํ•œ ๋ฒˆ ๋” ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.๊ทธ ๋‹น์‹œ์—๋Š” ํฐ ๋ถˆํŽธํ•จ ์—†์ด ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋‹ค์‹œ ๋ณด๋‹ˆ 2๊ฐ€์ง€ ๋ถˆํŽธ ์‚ฌํ•ญ์ด ์žˆ์—ˆ๋‹ค.1๏ธโƒฃ ๋งค์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ํ•ญ์ƒ ResponseEntity์™€ ResultResponse๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค. ์‹ค์ œ ํ•„์ž๊ฐ€ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ค˜์•ผํ•  JSON ๋ฐ˜ํ™˜ ๊ฐ์ฒด๋Š” TokenDTO์ธ๋ฐ, ๊ทธ์ € ๋ฐ˜ํ™˜ ๊ทœ์น™์„ ์œ„ํ•ด์„œ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.2๏ธโƒฃ ๊ฐ™์€ ์ด์œ ๋กœ ๋ฐ˜ํ™˜๊ฐ’ ๋˜ํ•œ ๋‘ ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.์ด๋Š” 3์ธ์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ด๋ผ๋„ ์‹ค์ˆ˜๋กœ ResultRe..
2025.02.12
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[DAY 3] ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ & API ๋ช…์„ธ์„œ ๊ตฌํ˜„ - Notion
0. ๊ฐœ์š”์˜ค๋Š˜์€ 1๏ธโƒฃ PRD(์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ)์™€ 2๏ธโƒฃ API ๋ช…์„ธ์„œ๋ฅผ ํŒ€ ๋…ธ์…˜์— ๋ถ€์ฐฉํ•˜์—ฌ ๋…ธ์…˜์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ–ˆ๋‹ค. ๊ทธ๊ฐ„ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๋Š๊ผˆ๋˜ ๋ถˆํŽธํ–ˆ๋˜ ์ ๋“ค์„ ์ƒ๊ฐํ•ด๋ณด๊ณ , ๊ทธ๊ฒƒ๋“ค์„ ๊ฐœ์„ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ PRD์™€ API ๋ช…์„ธ์„œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ถˆํŽธํ•จ์„ ๋Š๊ผˆ๋˜ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.1. ๋ถˆํŽธ ํ–ˆ๋˜ ์ 1๏ธโƒฃ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ DB์™€ API ๋ช…์„ธ์„œ DB๊ฐ€ ๋”ฐ๋กœ ๋…ผ๋‹ค.๋‘˜์ด ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์—†์œผ๋‹ˆ, API ๋ช…์„ธ์„œ๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž˜ ์ดํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ์ด ์–ด๋ ค์› ๋‹ค. ๋”ฐ๋ผ์„œ ์š”๊ตฌ์‚ฌํ•ญ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด (1) ๋‘๊ฐœ์˜ ํ‘œ๋ฅผ ๋„์šฐ๊ณ , (2) ์—ฐ๊ด€ ์žˆ๋Š” ๊ฒƒ์„ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ฐพ๊ณ , (3) API๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฒ—์–ด๋‚ฌ๋Š”์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ ํ–ˆ๋‹ค. ์ด๋Ÿฌ๋‹ˆ ์ดˆ๋ฐ˜์—๋Š” ๊ตฌํ˜„ ์†๋„๊ฐ€ ๋”๋Ž ๊ณ , ํ›„๋ฐ˜์—๋Š” ์š”๊ตฌ์‚ฌ..
2025.02.02
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[DAY 2] Notion์„ PM์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ (๊ด€๊ณ„ํ˜• DB์™€ ๋กค์—… ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ฐ ์„ธํŒ…)
0. ๋“ค์–ด๊ฐ€๋ฉฐ...์ด๋ฒˆ์— ์ƒˆ๋กœ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ, ๋…ธ์…˜์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. JIRA๋‚˜ MATTERMOST ๊ฐ™์€ ํ˜‘์—…ํˆด์„ ์ง€์›ํ•ด์ฃผ๋˜ SSAFY์™€ ๋‹ฌ๋ฆฌ, ๊ตฌ๋ฆ„ ๋ถ€ํŠธ ์บ ํ”„๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์—†์–ด, NOTION์„ ํ†ตํ•ด ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๊ฐ„ ๋…ธ์…˜ ํ™œ์šฉ๋ ฅ์ด ๋งŽ์ด ๋†’์•„์กŒ์œผ๋‹ˆ, ์ข‹์€ ๊ธฐํšŒ๋ผ ์—ฌ๊ฒผ๋‹ค. ์˜ค๋Š˜์€ 1๏ธโƒฃ ๋…ธ์…˜์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์Šคํ”„๋ฆฐํŠธ ๊ด€๋ฆฌ์™€ 2๏ธโƒฃ ์ˆ˜์‹์„ ํ™œ์šฉํ•œ ๊ฐ€์‹œ์„ฑ ๋†’์ด๊ธฐ๋ฅผ ํ•œ ๋ฒˆ ํ•ด๋ณด๋ ค ํ•œ๋‹ค.1. ERD ์„ค๊ณ„๊ด€๊ณ„ํ˜• DB๋ฅผ ๊ณ„ํšํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ญ์‹œ ์„ค๊ณ„๋ถ€ํ„ฐ ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ERD CLOUD๋ฅผ ํ‚ค๊ณ , DB ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. ์„ค๊ณ„ ์ „์—๋Š” ์„ค๊ณ„์˜ ๋ชฉํ‘œ๋ฅผ ์„ธ์šฐ๊ณ  ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. ๋‚ด๊ฐ€ ์„ธ์šด ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.1๏ธโƒฃ ํŒ€ ๋ฉค๋ฒ„ ๋ณ„๋กœ ์ž์‹ ์ด ํ•ด์•ผํ•  ์ผ์ด ๊ท€์†๋˜์–ด์žˆ๋‹ค.2๏ธโƒฃ ์ง„ํ–‰ ์—ฌ..
2025.02.01
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[DAY 1] Groom Boot Camp ํ•ฉ๊ฒฉ๊ณผ Orientation
2๋ฒˆ์งธ ๋ถ€ํŠธ ์บ ํ”„ ํ•ฉ๊ฒฉ ์†Œ์‹์„ค์„ ์‡ ๊ธฐ ์ „, ํ•ฉ๊ฒฉ ์†Œ์‹์„ ๋‹ด์€ ๋ฉ”์ผ์ด ์™”๋‹ค. ๊ตฌ๋ฆ„์ด๋ž€ ํšŒ์‚ฌ์—์„œ ํ•˜๋Š” 2๋‹ฌ์งœ๋ฆฌ ๋‹จ๊ธฐ KDT ์บ ํ”„์˜€๋‹ค. ํ•ด๋‹น ๋ถ€ํŠธ์บ ํ”„๋ฅผ ์„ ํƒํ–ˆ๋˜ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.1๏ธโƒฃ KDT ์ˆ˜๋ฃŒ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ถ€ํŠธ ์บ ํ”„์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž…๋ฌธ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋‚ญ๋น„ ์—†์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.2๏ธโƒฃ ํ•œ๋‹ฌ์€ ๊ฐœ๋ฐœ, ํ•œ๋‹ฌ์€ TDD ๊ธฐ๋ฐ˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•œ๋‹ค. ์ด๊ฒƒ์ด ์ฃผํšจํ•˜๊ฒŒ ์„ ํƒํ•œ ์›์ธ์ด์—ˆ๋‹ค. SSAFY์—์„œ ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ๋ฐฐ์šด ๋‚˜๋Š”, SSAFY๊ฐ€ ๋‚˜์˜ ๊ธฐ์ดˆ์™€ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„ ์‹ค๋ ฅ์„ ํ‚ค์›Œ์ค€ ๊ฒƒ์— ์ •๋ง ๊ฐ์‚ฌํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•˜๋‚˜ ๊ฐˆ์ฆ์„ ๋Š๊ผˆ๋˜ ๋ถ€๋ถ„์€ ์™„์„ฑํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋œฏ์–ด๋ณด๋ฉฐ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ณ  ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ์ด์—ˆ๋‹ค. ์ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.3๏ธโƒฃ ๋‘ ๋‹ฌ ๋™..
2025.01.31
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/โ˜๏ธ PROTECT ์ผ์ง€
thumbnail
[ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹]์˜ ์›๋ฆฌ, ์„ธ์…˜ ์ธ์ฆ๊ณผ์˜ ์ฐจ์ด์ 
1. Token ์ธ์ฆ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด ์ง€๋Š”๊ฐ€ํšŒ์›์ด ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.โ“ Client๊ฐ€ ID/PW ๋กœ๊ทธ์ธ ์ฐฝ์— ์จ์„œ ์ œ์ถœํ•œ๋‹ค. โ“‘ Server๊ฐ€ DB๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ID/PW๋ฅผ ๊ฐ€์ง„ ํšŒ์›์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ด๋‹น ํšŒ์›์˜ ์ •๋ณด๊ฐ€ ์šฐ๋ฆฌ DB์— ์žˆ์–ด์„œ ์šฐ๋ฆฌ ํšŒ์›์ธ ๊ฒƒ์ด ํ™•์ธ ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. โ“’ Server์—์„œ ํ•ด๋‹น ํšŒ์›์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ ์œ ํ•œ Token์„ ๋งŒ๋“ ๋‹ค. โ““ ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํ† ํฐ์„ ์•„๊นŒ ์œ ํšจํ•œ ์š”์ฒญ์„ ํ•œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ค€๋‹ค. โ“” ์ด์ œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ธ์ฆ์ด ํ•„์š”ํ•œ API๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ํ•ด๋‹น Token์„ ์š”์ฒญ Header์— ๋™๋ด‰ํ•˜์—ฌ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค. โ“• ์ด์ œ ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น Token์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆ ํ›„ ์œ ํšจํ•œ ํ† ํฐ์ด ๋งž๋‹ค๋ฉด ์‘๋‹ต์œผ๋กœ ์š”์ฒญํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •์ƒ ๋‹ต๋ณ€์„ ๋ณด๋‚ด์ฃผ๋ฉด ๋œ..
2024.07.07
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/Spring-Security
thumbnail
ํŠนํ™” ํ”„๋กœ์ ํŠธ Spring Security ๋ถ„์„
1. ๊ฐœ์š”4์›” 5์ผ๋ถ€๋กœ ํŠนํ™” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚ฌ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณด์•ˆ์„ ๋งก์•˜๋Š”๋ฐ, ํ•ญ์ƒ ๋‚ด๊ฐ€ ๋งก์€ ํŒŒํŠธ๋ฅผ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ๋ฒŒ์จ 2์ฃผ ๋ฐ˜์ด ํ˜๋ €๊ธฐ์—, ๋” ๊นŒ๋จน๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด๋‘๋ คํ•œ๋‹ค.ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฌธ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ์„ ํ™•์ธํ•˜์ž.SSAFY 10๊ธฐ ๊ตฌ๋ฏธ 2๋ฐ˜ ํŠนํ™”ํ”„๋กœ์ ํŠธ WALK_WALK2. ์ „๊ฐœ๋„3. ์ฝ”๋“œ ๋ถ„์„(1) JwtAuthFilter ์•ˆ์— ์žˆ๋Š” JwtUtil ๋ถ„์„import io.jsonwebtoken.*;import io.jsonwebtoken.security.Keys;import jakarta.annotation.PostConstruct;import jakarta.servlet.http.HttpServletRequest;import lombok.RequiredArgsCo..
2024.04.26
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/Spring-Security
thumbnail
JWT์— ๋Œ€ํ•˜์—ฌ
1. JWT๋ž€ ๋ฌด์—‡์ธ๊ฐ€?๊ธฐ๋ณธ์ ์ธ ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๊ณ , ๊ฑฐ๊ธฐ์„œ ํ† ํฐ ์ž์ฒด๋ฅผ ๊ฐ•ํ™”ํ•œ ๋ฐฉ์‹์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.์›๋ž˜์˜ ํ† ํฐ ์ธ์ฆ ๊ธฐ๋ฐ˜์—์„œ ์š”์ฒญ์ž๊ฐ€ ๋ณด๋‚ด์˜จ ID/PW ๊ฐ€ DB์— ์กด์žฌํ•˜๋ฉด (์šฐ๋ฆฌ ํšŒ์›์ด ๋งž์œผ๋ฉด) ๊ทธ ์š”์ฒญ์ž์—๊ฒŒ ์ž์‹ ๋“ค์˜ API๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ—ˆ๊ฐ€์ฆ์ธ ํ† ํฐ์„ ์ „ํ•ด์คฌ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋”ํ•ด JWT์˜ ๊ฒฝ์šฐ ํ† ํฐ์„ ๋งŒ๋“ค ๋•Œ, ์‚ฌ์šฉ์ž์˜ ์ •๋ณด(๊ฐ„๋‹จํ•œ ๊ฐœ์ธ์ •๋ณด ๋“ฑ +@)๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋งŒ๋“ ๋‹ค.์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฌด์—‡์ด ์ข‹์„๊นŒ?์•„๊นŒ ํ† ํฐ ์ž์ฒด๊ฐ€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ฐœ์ธ ์ •๋ณด๋ผ๊ณ  ํ•˜์˜€๋‹ค. ํšŒ์›๊ฐ€์ž…์„ ํ•˜์—ฌ ํ† ํฐ์„ ๋ฐ›์•˜๋‹ค๋ฉด, ์ดํ›„ API ์š”์ฒญ์„ ํ•  ๋•Œ, ํ† ํฐ์„ Header๋‚˜ Cookie์— ๋„ฃ์–ด์„œ ๋ณด๋‚ธ๋‹ค. ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ์š”์ฒญ์ด ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด์— ๋Œ€ํ•œ ์š”์ฒญ์ด๋ผ๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” DB๋ฅผ ์กฐํšŒํ•  ํ•„์š”์—†์ด ํ† ํฐ์„ ๋ณตํ˜ธํ™” ํ•˜์—ฌ ๊ทธ ์•ˆ์˜..
2024.04.25
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/Spring-Security
thumbnail
Spring ๊ณต์‹๋ฌธ์„œ Concept of AOP ๋ฒˆ์—ญ
์›๋ณธ ๋ฌธ์„œAOP๊ฐ€ ๋‹ด๊ณ ์žˆ๋Š” ๋ฐœ์ƒAOP๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ช‡๋ช‡ ์ค‘์‹ฌ์ ์ธ ์ƒ๊ฐ๋“ค๊ณผ ์šฉ์–ด๋“ค์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณด์ž! ์—ฌ๊ธฐ์„œ ์“ฐ์ด๋Š” ์šฉ์–ด๋“ค์€ ์Šคํ”„๋ง ๋งž์ถค์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ AOP์˜ ์šฉ์–ด๋“ค์€ ํŠน๋ณ„ํžˆ ์ง๊ด€์ ์ด์ง„ ๋ชปํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์Šคํ”„๋ง์ด AOP ๊ฐœ๋… ๋„์ž…์„ ์œ„ํ•œ ๊ทธ๊ฒƒ๋งŒ์˜ ์šฉ์–ด๋ฅผ ์ผ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์ด ๋” ์šฐ๋ฆฌ๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค!1. ์šฉ์–ด์„ค๋ช…Aspect(๊ด€์ ): ๋ณต์ˆ˜์˜ Class๋“ค์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๊ด€์‹ฌ์‚ฌ์— ๋Œ€ํ•œ ๋ชจ๋“ˆํ™”๋ฅผ ์˜๋ฏธํ•œ๋‹ค.(๊ธฐ์กด์˜ ์šฐ๋ฆฌ๊ฐ€ ์„œ๋ฒ„ ๋กœ์ง์„ ๊ณต๋ถ€ํ•  ๋•Œ, ๊ธฐ๋Šฅ์„ ๋ฌด์—‡์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๊ฐ€? Service Class ํ•˜๋‚˜๊ฐ€ ๊ณง ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ AOP์—์„œ๋Š” ๊ด€์ ์„ ๋‹ฌ๋ฆฌํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”๊ตฌ๊ฐ€ ๋“ค์–ด์™€์„œ Controller -> ๋ณต์ˆ˜์˜ ์„œ๋น„์Šค ๋กœ์ง -> ๋‹ค์‹œ ์‘๋‹ต ๊นŒ์ง€์˜ ์ „ ๊ณผ์ •์„ ํ•˜..
2024.03.12
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringAOP
thumbnail
Weaving๊ณผ Proxy์— ๋Œ€ํ•˜์—ฌ
๊นƒํ—ˆ๋ธŒ์—๋„ ์ •๋ฆฌ ์˜ฌ๋ ค๋†“์•˜์Šต๋‹ˆ๋‹ค.์ „์ˆ˜๋ฏผ_๊นƒํ—ˆ๋ธŒ ์ฃผ์†ŒWeaving๊ณผ Proxy ๊ฐ์ฒด์— ๋Œ€ํ•˜์—ฌ์ด๋ฒˆ ์žฅ์—์„œ ์•Œ์•„๋ณผ ๊ฒƒ:AOP์—์„œ Weaving์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Proxy์™€์˜ ๊ด€๊ณ„๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?Proxy ๊ฐ์ฒด๋ž€ ๋ฌด์—‡์ด๊ณ ? AOP์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์›๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€?1. AOP์—์„œ Weaving์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?AOP์—์„œ weaving์ด๋ž€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ(advice)์„ ๊ทธ๊ฒƒ์ด ํƒ€๊ฒŸํŒ…ํ•˜๋Š” ๋ณธ ๊ธฐ๋Šฅ์— ์žฅ์ฐฉํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ๋”ฐ๋ผ์„œ weaving์€ ๋ณธ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” AOP์˜ ํ•ต์‹ฌ ์ž‘์—…์ด๋‹ค.weaving์€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ๋”ฐ๋ผ 3๊ฐ€์ง€๋กœ ์ข…๋ฅ˜๊ฐ€ ๋‚˜๋‰œ๋‹ค.(1) Compile Time Weaving(CTW)Spring์—์„œ AOP๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” AspectJ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋Š” ๊ฒƒ๊ณผ, Spring A..
2024.03.12
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringAOP
thumbnail
Spring AOP ๊ณต์‹ ๋ฌธ์„œ ์ฝ๊ณ  ์ •๋ฆฌ - Concept-of-AOP
Spring AOP ๊ณต์‹ ๋ฌธ์„œ ์ฝ๊ณ  ์Šค์Šค๋กœ ์ •๋ฆฌํ•จ.๊นƒํ—ˆ๋ธŒ์—๋„ ์˜ฌ๋ ค๋†“์Œhttps://github.com/dalcheonroadhead/Spring-framework-theory/blob/main/AOP/relatedStudy/conceptOfAOP.mdConcept-of-AOP ์Šค์Šค๋กœ ์ •๋ฆฌ๋ชฉ์ฐจAOP๋ž€ ๋ฌด์—‡์ธ๊ฐ€?๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ์•Œ์•„๋ณด๋Š” ์šฉ์–ด ์ •๋ฆฌAdviceJoin PointpointcutAspectIntroductionTarget ObjectAOP proxyWeavingCross-cutting concerns1. AOP๋ž€ ๋ฌด์—‡์ธ๊ฐ€?Aop๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Aspect Oriented Programming)์„ ๋งํ•œ๋‹ค. Java๋ผ๋Š” ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ๋•Œ ์šฐ๋ฆฌ๋Š” ์ž๋ฐ”๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented ..
2024.03.12
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringAOP
thumbnail
[01]-OAuth2 ์ด๋ก 
๋ชฉ์ฐจ1. OAuth2์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (OAuth2๋ž€ ์™œ ํ•„์š”ํ•œ๊ฐ€?)2. ๊ทธ๋ž˜์„œ OAuth2๋ž€?3. OAuth2 ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ 4. OAuth2์˜ ๋™์ž‘ ๊ณผ์ • 1. OAuth์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ  (OAuth2๋ž€ ์™œ ํ•„์š”ํ•œ๊ฐ€?)ํ˜„ IT ์„œ๋น„์Šค ์‹œ์žฅ์—๋Š” ๊ตฌ๊ธ€์ด๋‚˜ ์•„๋งˆ์กด, ํŠธ์œ„ํ„ฐ์™€ ๊ฐ™์€ ๋ฉ”๊ฐ€๊ธ‰ ๊ธฐ์—…๋“ค์ด ๋‹ค์ˆ˜ ์กด์žฌํ•œ๋‹ค. ์ด ๊ธฐ์—…์˜ ์‚ฌ์šฉ์ž๋“ค์€ ์ˆ˜์ฒœ๋งŒ ๋งŽ๊ฒŒ๋Š” ์–ต๋Œ€ ๋‹จ์œ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ ๋งŒํผ ํ•ด๋‹น ๊ธฐ์—…๋“ค์ด ๊ฐ€์ง„ ๋ฆฌ์†Œ์Šค๋„ ๋‹ค์ˆ˜ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋‹จ์ฒด์ƒํ™œ์„ ํ•ด๋ดค๋‹ค๋ฉด ์•Œ ์ˆ˜์žˆ๋“ฏ์ด ํ•˜๋‚˜์˜ ์ผ์„ ์ž‘์—…์ž ์ „์›์ด ๋งŒ์กฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๋‹ค. A๋Š” ์„œ๋ฅ˜ ์ž‘์—…์„ ๋” ์™„๋ฒฝํžˆ ํ•˜๊ณ  ๋‹ค์Œ ์ผ๋กœ ๊ฐ”์œผ๋ฉด ์ข‹๊ฒ ๊ณ , B๋Š” ๊ทธ์ € ๋ณธ ์ž‘์—…์„ ๋นจ๋ฆฌ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ..
2024.03.03
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/Spring-Security
thumbnail
SpringBoot3 WebSocket ChattingServer๋งŒ๋“ค๊ธฐ 5๋‹จ๊ณ„ - ์ฑ„ํŒ…๋ฐฉ ์ธ์› ์ˆ˜ ์ฒดํฌ, Server Side Event ์ฒ˜๋ฆฌ
0. ๋ชฉ์ฐจ 1. ๊ฐœ์š” - ์ด์ „๊ณผ ๋‹ฌ๋ผ์ง„ ์  2. ์ „๊ฐœ๋„ 3. ์ฝ”๋“œ ๋ถ„์„ 4. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์˜ค๋ฅ˜๋“ค https://www.daddyprogrammer.org/post/5290/spring-websocket-chatting-server-enter-qut-event-view-user-count/ ๋ฅผ ๋ณด๊ณ  ์ง„ํ–‰ ํ–ˆ์Šต๋‹ˆ๋‹ค. 1. ๊ฐœ์š” โ“ ์ž…์žฅ ํ‡ด์žฅ ์‹œ ์ธ์› ์ˆ˜ ์ฒดํฌํ•ด์„œ ์ธ์› ์ˆ˜๋ฅผ ์ฑ„ํŒ…๋ฐฉ์— ํ‘œ์‹œ โ“‘ ์ €๋ฒˆ ํฌ์ŠคํŒ…๊นŒ์ง€๋Š” ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ๊ณผ ๊ตฌ๋…์„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ์ง€ํ•˜๊ณ  ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ด์ฃผ๊ณ , ๊ทธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ์Œ. ์ด๋ฒˆ์—๋Š” Sever Side์—์„œ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ์ธ์ง€ ํ•˜๊ณ , ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ฐ”๊ฟจ์Œ. 2. ์ „๊ฐœ๋„ ์›๋ž˜ ๋ฐฐ์šธ ๋•Œ Controller -> service -> Repository๋กœ ์ผ์ด ์ •ํ•ด์ ธ ์žˆ์—ˆ์ง€..
2024.01.23
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/WebSocket
thumbnail
SpringBoot WebSocket Chatting Server๋งŒ๋“ค๊ธฐ 4๋‹จ๊ณ„ - SpringBoot Security ์žฅ์ฐฉ
0.๋ชฉ์ฐจ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜: ddadyProgrammer๋‹˜์˜ ๋ธ”๋กœ๊ทธ Spring websocket chatting server(4) - SpringSecurity + Jwt๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ณด์•ˆ๊ฐ•ํ™”ํ•˜๊ธฐ ์ด๋ฒˆ ์žฅ์—์„œ๋Š” SpringSecurity์™€ Jwt๋ฅผ ์ด์šฉํ•˜์—ฌ Web ๋ฐ Websocket์˜ ๋ณด์•ˆ์„ ์ข€ ๋” ๊ฐ•ํ™”ํ•˜๊ณ . ๊ธฐ์กด์˜ ๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํฌ๊ฒŒ ์•„๋ž˜์˜ 3๊ฐ€์ง€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Spri www.daddyprogrammer.org 1. ๊ฐœ์š” (์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ ๊ฒƒ๋“ค) 2. ์ „๊ฐœ๋„ 3. ์ฝ”๋“œ ๋ถ„์„ 4. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉฐ ๋งŒ๋‚ฌ๋˜ ์˜ค๋ฅ˜ ๋ชจ์Œ 1. ๊ฐœ์š” ์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์ƒˆ๋กญ๊ฒŒ Spring Security๋ฅผ ์ ์šฉํ–ˆ๋‹ค. ์›๋ž˜ ํ”„๋กœ์ ํŠธ๋Š” ์ ‘๊ทผํ•œ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€ํ™”๋ช…๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋ชจ๋‘ ์‚ฌ์šฉ..
2024.01.22
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/WebSocket
@Configuration์— ๋Œ€ํ•˜์—ฌ
@Configuration์€ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์„ค์ •์— ๊ด€ํ•œ ํด๋ž˜์Šค์ž„์„ Spring Container์—๊ฒŒ ์•Œ๋ฆฌ๊ณ , ๊ทธ๊ฒƒ์„ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์–ด? ๊ทธ๋Ÿฌ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์„ค์ • ํŒŒ์ผ์ž„์„ ๊ฐ€์‹œ์ ์œผ๋กœ ์•Œ๋ฆฌ๋Š” ์ผ ์™ธ์—๋Š” @Bean๊ณผ ๋˜‘๊ฐ™์€ ๊ฒƒ์ธ๊ฐ€? ๋ฌผ๋ก  ์•„๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์˜ ๊ฒฝ์šฐ, ํ•ด๋‹น ์„ค์ •์˜ ํ†ต์ผ์„ฑ์„ ์œ„ํ•ด์„œ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๊ณ„์† ๊ทธ ๋‚ด์šฉ์„ ์žฌํ™œ์šฉํ•˜๋ฉฐ ์จ์•ผํ•œ๋‹ค. ์ด์— ์ƒ์‘ํ•˜์—ฌ @Configuration์ด๋ž€ ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ž˜์Šค๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ํ•ด๋‹น Bean ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์ด ๋˜๋„๋ก ์„ค์ •ํ•ด์ค€๋‹ค.
2024.01.20
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringMVC
thumbnail
SpringBoot WebSocket Chatting Server ๋งŒ๋“ค๊ธฐ 3๋‹จ๊ณ„ - ์—ฌ๋Ÿฌ ์ฑ„ํŒ… ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฉ”์„ธ์ง€ ๊ณต์œ  (by Redis Pub/sub)
2
https://www.daddyprogrammer.org/post/4731/spring-websocket-chatting-server-redis-pub-sub/ 0.๋ชฉ์ฐจ 1. ๊ฐœ์š” 2. ์ „๊ฐœ๋„, ์ „์ฒด์ ์ธ ํ๋ฆ„ ํŒŒ์•… 3. ์ฝ”๋“œ ๋ถ„์„ 4. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์žˆ์—ˆ๋˜ ์—๋Ÿฌ ํ•ด๊ฒฐ 1. ๊ฐœ์š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Redis๋ผ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌํ˜• DB๋ฅผ ํ™œ์šฉํ•˜์—ฌ 2๋ฒˆ๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋˜ STOMP์™€ WebSocket๋งŒ์œผ๋กœ ๊ตฌํ˜„ํ•œ Chatting Server ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ๊ณ ๋„ํ™” ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์–ด? ์ด๋ฏธ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์„œ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ๋˜๋Š”๋ฐ ์™œ Redis๋ฅผ ์žฅ์ฐฉํ•ด์•ผ ํ• ๊นŒ์š”? ๊ทธ๋ ‡๋‹ค๋ฉด, ๋จผ์ € Redis๋ฅผ ์™œ ์žฅ์ฐฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. โ“ STOMP์™€ WebSocket๋งŒ์„ ์“ฐ๋Š” Chatting Serv..
2024.01.20
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/WebSocket
thumbnail
Rest-Template๋ž€ ๋ฌด์—‡์ธ๊ฐ€
์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” HTTP Client REST API ํ˜ธ์ถœ์— ํ•„์š”ํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. HTTP Client Rest API๋ž€? ๋จผ์ € ์›น์ด ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ์‚ดํŽด๋ด์•ผํ•œ๋‹ค. ์›น์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋กœ ๋‚˜๋‰œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„๋Š” ๊ทธ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•œ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ถ€๋ถ„์„ HTTP Client REST API๋ผ๊ณ  ํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” SPRING์€ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์„œ๋ฒ„์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, ๋•Œ์— ๋”ฐ๋ผ์„œ ์™ธ๋ถ€ API์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์•ผํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์›๋ž˜ JAVA์—์„œ๋Š” URLConnect๋‚˜ HTTPClient ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ..
2024.01.16
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringMVC
thumbnail
Spring websocket chatting server ๋งŒ๋“ค๊ธฐ 2๋‹จ๊ณ„ - ๊ณ ๋„ํ™”
๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์Šคํ”„๋ง ์›น์†Œ์ผ“ ์ฑ„ํŒ…์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ๋ฅผ ์‹ค์Šตํ•˜๋ฉฐ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค. branch ๋ณ„๋กœ ์ด 6๋‹จ๊ณ„ ๋ชจ๋‘ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 0. STOMP๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Stomp๋ž€ SimpleTextOrientedMessagingProtocol์˜ ์•ฝ์ž๋กœ, ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•œ ํ†ต์‹  ๊ทœ์•ฝ์ด๋‹ค. Stomp์˜ ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. Stomp์—๋Š” 3๊ฐ€์ง€ ๊ฐœ๋…์ด ์กด์žฌํ•˜๋Š”๋ฐ, Topic, Publisher, Subscriber๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค. Topic์€ ์šฐ์ฒดํ†ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. publisher๋Š” ๋ฉ”์„ธ์ง€ ๋ฐœํ–‰์ž์ด๋‹ค. Publisher๊ฐ€ ์–ด๋–ค Topic์„ EndPoint๋กœ ์žก๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ํ•ด๋‹น ์šฐ์ฒดํ†ต์œผ๋กœ ๋ฉ”์„ธ์ง€๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. ์ด๋•Œ ํ•ด๋‹น Topic์„ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” Subscriber..
2024.01.14
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/WebSocket
thumbnail
SpringBoot WebSocket chatting server ๋งŒ๋“ค๊ธฐ 1๋‹จ๊ณ„
๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์Šคํ”„๋ง ์›น์†Œ์ผ“ ์ฑ„ํŒ…์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ๋ฅผ ์‹ค์Šตํ•˜๋ฉฐ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค. branch ๋ณ„๋กœ ์ด 6๋‹จ๊ณ„ ๋ชจ๋‘ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์œผ๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋‹จ๊ณ„๋ผ์„œ firstStep์ด๋ž€ branch์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. https://github.com/dalcheonroadhead/WebSocketBEPractice/tree/firstStep 1. ์ „๊ฐœ๋„ 1-1 Server Logic ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์˜ Basic WebSocket์˜ ์ „๊ฐœ๋„ ์ด๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง DB์™€ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ , ์„œ๋น„์Šค์™€ ์ปจํŠธ๋กค๋Ÿฌ, ๋ชจ๋ธ, ์›น์†Œ์ผ“ ์„ค์ • ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ํ•„์š”ํ–ˆ๋‹ค. 1-2 Server์™€ Client ์ „์ฒด Logic ๋จผ์ € ๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์€ Rest API์™€ ์†Œ์ผ“์ด ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ ma..
2024.01.07
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/WebSocket
thumbnail
Spring Di ํ™œ์šฉํ•˜๊ธฐ - ์ด๋ก  (1)
Beans๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณธ๋‹ค. Application Context๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ๊ทธ ์›๋ฆฌ, ์ข…๋ฅ˜์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณธ๋‹ค. 1. Beans๋ž€? (1) Beans์˜ ์—ญ์‚ฌ ์ฒ˜์Œ์— Java์˜ ๊ฐœ๋ฐœ์ง„์ธ SUNS์—์„œ JavaBeans๋ฅผ ๋ฐœํ‘œํ–ˆ๋‹ค. JavaBeans๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งํ•œ๋‹ค. Beans๋Š” Client ์ธก๋ฉด (Front-end), ์„œ๋ฒ„ ์ธก๋ฉด (Back-end) ๊ฐ๊ฐ ๋‚˜๋‰˜์–ด์„œ ์“ฐ์˜€๋‹ค. ์›๋ž˜ ๊ฐœ๋ฐœ์ง„๋“ค์€ Beans๊ฐ€ Client GUI์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ธธ ๋ฐ”๋žฌ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒ€์ƒ‰์ฐฝ์„ ๋ˆ„๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๊ทธ๊ฒƒ์„ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทผ๋ฐ Clinet GUI ํŒŒํŠธ์—์„œ์˜ Beans๋Š” ๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์„œ, ์‚ฌ๋žŒ๋“ค์ด ์•„๋ฌด๋„ ์“ฐ์ง€ ์•Š์•„ ๋งํ–ˆ๋‹ค. ๋˜๋ ค ์„œ๋ฒ„ ์ธก๋ฉด์—์„œ Beans๊ฐ€ ๊ฐ๊ด‘๋ฐ›..
2023.03.31
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringMVC