user-img
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ 69
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
thumbnail
DI ํ™œ์šฉํ•˜๊ธฐ - ์‹ค์Šต
0. ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๊ฒƒ๋“ค ์ง€๊ธˆ๊นŒ์ง€๋Š” DI๋ผ๋Š” ์ปดํ“จํ„ฐ ๋ณธ์ฒด์˜ ๋‚ด๋ถ€๋ฅผ ๋œฏ์–ด ๋ดค๋‹ค. Main1์€ Di์˜ ๊ฐœ๋…: ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์†Œ์Šค์ฝ”๋“œ ๋‚ด๋ถ€๋กœ ์ฃผ์ž…ํ•œ๋‹ค๋Š” ๊ฒŒ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์•Œ์•„๋ณด์•˜๋‹ค. Config.txt๋ผ๋Š” ๋ฌธ์„œ์— ๊ฐ์ฒด์ด๋ฆ„ = "ํ•ด๋‹น ๊ฐ์ฒด ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๊ฒฝ๋กœ์ฃผ์†Œ" ๋กœ ๊ฐ’๋“ค์„ ์ €์žฅํ•ด๋†“๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Main1 ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๊ฐ€ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๋ฐ›์•„์™€์„œ, ๊ฒฝ๋กœ์ฃผ์†Œ๋ฅผ ReflectionApi๋ฅผ ์ด์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ง„์งœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” new ์„ ์–ธ ์—†์ด ํ•ด๋‹น ๋งค์†Œ๋“œ๋งŒ์„ ์ด์šฉํ•ด ๊ฐ์ฒด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. Main2๋Š” ๊ฐ์ฒด ์ €์žฅ์†Œ๋ผ๋Š” ๊ฐœ๋…์„ ์†Œ๊ฐœ ํ–ˆ๊ณ  ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ๋กœ์ง์„ ์„ค๋ช…ํ–ˆ๋‹ค. ๊ฐ์ฒด ์ €์žฅ์†Œ๋Š” Config.txt์˜ ๋‚ด์šฉ์„ Map ํ˜•ํƒœ๋กœ ์ผ๋‹จ ๋ฐ›์•„์˜จ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Key๋Š” ๊ฐ์ฒด์ด๋ฆ„, Value..
2023.03.30
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/SpringMVC