๋ฐฑ์๋ ๊ฐ๋ฐ
69
[ํ ํฐ ์ธ์ฆ ๋ฐฉ์]์ ์๋ฆฌ, ์ธ์
์ธ์ฆ๊ณผ์ ์ฐจ์ด์
1. Token ์ธ์ฆ ๋ฐฉ์์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด ์ง๋๊ฐํ์์ด ๋ก๊ทธ์ธ์ ์๋ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.โ Client๊ฐ ID/PW ๋ก๊ทธ์ธ ์ฐฝ์ ์จ์ ์ ์ถํ๋ค. โ Server๊ฐ DB๋ฅผ ํตํด ํด๋น ID/PW๋ฅผ ๊ฐ์ง ํ์์ด ์๋์ง ํ์ธํ๋ค. ์ฌ๊ธฐ์ ํด๋น ํ์์ ์ ๋ณด๊ฐ ์ฐ๋ฆฌ DB์ ์์ด์ ์ฐ๋ฆฌ ํ์์ธ ๊ฒ์ด ํ์ธ ๋์๋ค๊ณ ๊ฐ์ ํด๋ณด์. โ Server์์ ํด๋น ํ์์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๊ณ ์ ํ Token์ ๋ง๋ ๋ค. โ ๊ทธ๋ฆฌ๊ณ ํด๋น ํ ํฐ์ ์๊น ์ ํจํ ์์ฒญ์ ํ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด์ค๋ค. โ ์ด์ ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์ด ํ์ํ API๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ํด๋น Token์ ์์ฒญ Header์ ๋๋ดํ์ฌ ๊ฐ์ด ๋ณด๋ธ๋ค. โ ์ด์ ์๋ฒ์์๋ ํด๋น Token์ ์ ํจ์ฑ์ ๊ฒ์ฆ ํ ์ ํจํ ํ ํฐ์ด ๋ง๋ค๋ฉด ์๋ต์ผ๋ก ์์ฒญํ ๋ด์ฉ์ ๋ํ ์ ์ ๋ต๋ณ์ ๋ณด๋ด์ฃผ๋ฉด ๋..
2024.07.07
๋ฐฑ์๋ ๊ฐ๋ฐ/Spring-Security
ํนํ ํ๋ก์ ํธ 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
JWT์ ๋ํ์ฌ
1. JWT๋ ๋ฌด์์ธ๊ฐ?๊ธฐ๋ณธ์ ์ธ ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ๋ฐ๋ฅด๊ณ , ๊ฑฐ๊ธฐ์ ํ ํฐ ์์ฒด๋ฅผ ๊ฐํํ ๋ฐฉ์์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.์๋์ ํ ํฐ ์ธ์ฆ ๊ธฐ๋ฐ์์ ์์ฒญ์๊ฐ ๋ณด๋ด์จ ID/PW ๊ฐ DB์ ์กด์ฌํ๋ฉด (์ฐ๋ฆฌ ํ์์ด ๋ง์ผ๋ฉด) ๊ทธ ์์ฒญ์์๊ฒ ์์ ๋ค์ API๋ฅผ ์ธ ์ ์๋ ํ๊ฐ์ฆ์ธ ํ ํฐ์ ์ ํด์คฌ์๋ค. ์ฌ๊ธฐ์ ๋ํด JWT์ ๊ฒฝ์ฐ ํ ํฐ์ ๋ง๋ค ๋, ์ฌ์ฉ์์ ์ ๋ณด(๊ฐ๋จํ ๊ฐ์ธ์ ๋ณด ๋ฑ +@)๋ฅผ ์ํธํํ์ฌ ๋ง๋ ๋ค.์ด๋ ๊ฒ ๋๋ฉด ๋ฌด์์ด ์ข์๊น?์๊น ํ ํฐ ์์ฒด๊ฐ ์ฌ์ฉ์์ ๋ํ ๊ฐ์ธ ์ ๋ณด๋ผ๊ณ ํ์๋ค. ํ์๊ฐ์
์ ํ์ฌ ํ ํฐ์ ๋ฐ์๋ค๋ฉด, ์ดํ API ์์ฒญ์ ํ ๋, ํ ํฐ์ Header๋ Cookie์ ๋ฃ์ด์ ๋ณด๋ธ๋ค. ๋ง์ฝ ํด๋ผ์ด์ธํธ๊ฐ ์ํ๋ ์์ฒญ์ด ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด์ ๋ํ ์์ฒญ์ด๋ผ๋ฉด, ์๋ฒ์์๋ DB๋ฅผ ์กฐํํ ํ์์์ด ํ ํฐ์ ๋ณตํธํ ํ์ฌ ๊ทธ ์์..
2024.04.25
๋ฐฑ์๋ ๊ฐ๋ฐ/Spring-Security
Spring ๊ณต์๋ฌธ์ Concept of AOP ๋ฒ์ญ
์๋ณธ ๋ฌธ์AOP๊ฐ ๋ด๊ณ ์๋ ๋ฐ์AOP๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ช๋ช ์ค์ฌ์ ์ธ ์๊ฐ๋ค๊ณผ ์ฉ์ด๋ค์ ์ ์ํ๋ ๊ฒ์ผ๋ก ์์ํด๋ณด์! ์ฌ๊ธฐ์ ์ฐ์ด๋ ์ฉ์ด๋ค์ ์คํ๋ง ๋ง์ถค์ด ์๋๋ค. ๋ฐ๋ผ์ ๋ถํํ๊ฒ๋ AOP์ ์ฉ์ด๋ค์ ํน๋ณํ ์ง๊ด์ ์ด์ง ๋ชปํ๋ค. ํ์ง๋ง, ๋ง์ฝ ์คํ๋ง์ด AOP ๊ฐ๋
๋์
์ ์ํ ๊ทธ๊ฒ๋ง์ ์ฉ์ด๋ฅผ ์ผ๋ค๋ฉด, ๊ทธ๊ฒ์ด ๋ ์ฐ๋ฆฌ๋ฅผ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค ๊ฒ์ด๋ค!1. ์ฉ์ด์ค๋ช
Aspect(๊ด์ ): ๋ณต์์ Class๋ค์ ๊ฐ๋ก์ง๋ฅด๋ ๊ด์ฌ์ฌ์ ๋ํ ๋ชจ๋ํ๋ฅผ ์๋ฏธํ๋ค.(๊ธฐ์กด์ ์ฐ๋ฆฌ๊ฐ ์๋ฒ ๋ก์ง์ ๊ณต๋ถํ ๋, ๊ธฐ๋ฅ์ ๋ฌด์์ด๋ผ ์๊ฐํ๋๊ฐ? Service Class ํ๋๊ฐ ๊ณง ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ๋ค. ํ์ง๋ง AOP์์๋ ๊ด์ ์ ๋ฌ๋ฆฌํ์ฌ, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์๊ตฌ๊ฐ ๋ค์ด์์ Controller -> ๋ณต์์ ์๋น์ค ๋ก์ง -> ๋ค์ ์๋ต ๊น์ง์ ์ ๊ณผ์ ์ ํ..
2024.03.12
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringAOP
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
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
[01]-OAuth2 ์ด๋ก
๋ชฉ์ฐจ1. OAuth2์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (OAuth2๋ ์ ํ์ํ๊ฐ?)2. ๊ทธ๋์ OAuth2๋?3. OAuth2 ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ 4. OAuth2์ ๋์ ๊ณผ์ 1. OAuth์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (OAuth2๋ ์ ํ์ํ๊ฐ?)ํ IT ์๋น์ค ์์ฅ์๋ ๊ตฌ๊ธ์ด๋ ์๋ง์กด, ํธ์ํฐ์ ๊ฐ์ ๋ฉ๊ฐ๊ธ ๊ธฐ์
๋ค์ด ๋ค์ ์กด์ฌํ๋ค. ์ด ๊ธฐ์
์ ์ฌ์ฉ์๋ค์ ์์ฒ๋ง ๋ง๊ฒ๋ ์ต๋ ๋จ์๋ก ๋์ด๊ฐ๋ค. ๊ทธ ๋งํผ ํด๋น ๊ธฐ์
๋ค์ด ๊ฐ์ง ๋ฆฌ์์ค๋ ๋ค์ ์กด์ฌํ ๊ฒ์ด๋ค. ํ์ง๋ง, ๋จ์ฒด์ํ์ ํด๋ดค๋ค๋ฉด ์ ์์๋ฏ์ด ํ๋์ ์ผ์ ์์
์ ์ ์์ด ๋ง์กฑํ๋ ๋ฐฉ์์ผ๋ก ์ํํ๋ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. A๋ ์๋ฅ ์์
์ ๋ ์๋ฒฝํ ํ๊ณ ๋ค์ ์ผ๋ก ๊ฐ์ผ๋ฉด ์ข๊ฒ ๊ณ , B๋ ๊ทธ์ ๋ณธ ์์
์ ๋นจ๋ฆฌ ์งํํ๊ณ ์ถ์ ์๋ ์๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ํน์ ์๋น์ค๋ฅผ ์ด์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ..
2024.03.03
๋ฐฑ์๋ ๊ฐ๋ฐ/Spring-Security
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
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
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
Rest-Template๋ ๋ฌด์์ธ๊ฐ
์คํ๋ง์์ ์ ๊ณตํ๋ HTTP Client REST API ํธ์ถ์ ํ์ํ ํจ์๋ฅผ ์ ๊ณตํ๋ ํด๋์ค์ด๋ค. HTTP Client Rest API๋? ๋จผ์ ์น์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ดํด๋ด์ผํ๋ค. ์น์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ก ๋๋๋ค. ํด๋ผ์ด์ธํธ ๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ์์ฒญํ๊ณ , ์๋ฒ๋ ๊ทธ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ค. ํด๋น ๊ณผ์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ํ๋ ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๋ถ๋ถ์ HTTP Client REST API๋ผ๊ณ ํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ค๋ SPRING์ ๋ฐฑ์๋ ํ๋ ์์ํฌ๋ก ์๋ฒ์ ์ญํ ์ ๋ด๋นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ๋์ ๋ฐ๋ผ์ ์ธ๋ถ API์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ผํ๋ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ํด์ผํ ์๋ ์๋ค. ์๋ JAVA์์๋ URLConnect๋ HTTPClient ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ..
2024.01.16
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC
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
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
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
DI ํ์ฉํ๊ธฐ - ์ค์ต
0. ์ง๊ธ๊น์ง ํ ๊ฒ๋ค ์ง๊ธ๊น์ง๋ DI๋ผ๋ ์ปดํจํฐ ๋ณธ์ฒด์ ๋ด๋ถ๋ฅผ ๋ฏ์ด ๋ดค๋ค. Main1์ Di์ ๊ฐ๋
: ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์์ค์ฝ๋ ๋ด๋ถ๋ก ์ฃผ์
ํ๋ค๋ ๊ฒ ์ด๋ค ์๋ฏธ์ธ์ง ์์๋ณด์๋ค. Config.txt๋ผ๋ ๋ฌธ์์ ๊ฐ์ฒด์ด๋ฆ = "ํด๋น ๊ฐ์ฒด ๊ตฌํํ๋ ํด๋์ค์ ๊ฒฝ๋ก์ฃผ์" ๋ก ๊ฐ๋ค์ ์ ์ฅํด๋๋๋ค. ๊ทธ๋ฌ๋ฉด Main1 ๋ด๋ถ์ ํจ์๊ฐ ๋ฌธ์ ๋ด์ฉ์ ๋ฐ์์์, ๊ฒฝ๋ก์ฃผ์๋ฅผ ReflectionApi๋ฅผ ์ด์ฉํด ๋ฉํ๋ฐ์ดํฐ๋ก ์ง์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค. ์ฐ๋ฆฌ๋ new ์ ์ธ ์์ด ํด๋น ๋งค์๋๋ง์ ์ด์ฉํด ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํด์ก๋ค. Main2๋ ๊ฐ์ฒด ์ ์ฅ์๋ผ๋ ๊ฐ๋
์ ์๊ฐ ํ๊ณ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ๋ก์ง์ ์ค๋ช
ํ๋ค. ๊ฐ์ฒด ์ ์ฅ์๋ Config.txt์ ๋ด์ฉ์ Map ํํ๋ก ์ผ๋จ ๋ฐ์์จ๋ค. ๊ทธ๋ฌ๋ฉด Key๋ ๊ฐ์ฒด์ด๋ฆ, Value..
2023.03.30
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC
Spring Di (ํด๋์ค ์์ ์ธ์คํด์ค ๋ณ์๊ฐ ๊ฐ์ฒด์ผ ๋ ์๋์ผ๋ก ์ฐ๊ฒฐ)
์ ๋ฒ ์๊ฐ์ ๋ฐฐ์ ๋ ๋ด์ฉ์ (main2.java)ํด๋์ค์ ๊ฒฝ๋ก์ฃผ์๊ฐ ๋ค์ด๊ฐ ์๋ ์ธ๋ถ ์ ์ฅ ํ์ผ (.porperties)์์ Key= ๊ฐ์ฒด์ด๋ฆ, Value= ํด๋์ค์ ๊ฒฝ๋ก์ฃผ์๋ก ๊ฐ ๋ฝ์๋ด์ ๊ฐ์ฒด ์ ์ฅ์๋ map์ ์ ์ฅํ๋ค. ํด๋น map์์ ๋ค์ value์ ๊ฒฝ๋ก์ฃผ์๋ฅผ ํตํด ์ง์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ด์ value ๊ฐ๋ค์ ๊ฐฑ์ ํ๋ค. ๊ฒฐ๊ตญ map์ (K(๊ฐ์ฒด์ด๋ฆ), V(๊ฐ์ฒด))๊ฐ ๋์ด์ ์ฌ์ฉ์๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ คํ๋ฉด, new๋ฅผ ์ด์ฉํด ๋์ ํ ๋น ํ์ง ์๊ณ map์์ ์ฐพ์ ๊บผ๋ด ์ผ๋ค. ๊ทธ๋ค์ main3.java์์ ๋ฐฐ์ด ๋ด์ฉ์ ์ปดํฌ๋ํธ ์ด๋
ธํ
์ด์
์ ์ด์ฉํ๋ ๊ฒ์ด์๋ค. ๋จผ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ํด๋์ค๋ค์๋ @Component๋ฅผ ๋ถ์ธ๋ค. ๊ทธ๋ฆฌ๊ณ doComponentScan์ด๋ผ๋ ํจ์๋ฅผ ๋ง๋ ๋ค. ํด๋น ํจ์๋ ํจํค์ง ๋ด์ ..
2023.03.29
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC
DI ํ๋ด๋ด๊ธฐ(2)
์ ๋ฒ ์๊ฐ์ ์ต์ข
์ ์ผ๋ก ํ ๊ฒ์ DI๋ฅผ ํ๋ด๋ด์ด ๋ณ๊ฒฝ์ ์ ๋ฆฌํ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฒ์ด์๋ค. DI๋ ์์กด์ฑ ์ฃผ์
์ผ๋ก, ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ค์ฝ๋ ๋ด๋ถ์์ ์ ์ธํ๋ ๊ฒ์ด ์๋๋ผ, ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์์ค์ฝ๋ ๋ด๋ถ๋ก ์ฃผ์
ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ ๋ฒ ํฌ์คํ
์์๋ DI๋ฅผ ํ๋ด๋ด๊ธฐ ์ํ์ฌ ๊ฐ์ฒด ์์ฑ ๊ธฐ๋ฅ์ ํ๋ ๋งค์๋๋ฅผ ์ด์ฉํ๋ค. ํด๋น ๋งค์๋์ ์ธ์๋ก ๋ณด๋ธ ๊ฐ์ด properties์ Key ๊ฐ์ผ๋ก ์๋ค๋ฉด, ๋งค์๋๋ ํด๋น Key์ ๋์๋๋ Value (์ ์ฒด์ด๋ฆ = ๊ฒฝ๋ก์ฃผ์.ํด๋์ค์ด๋ฆ)๋ฅผ ์ด์ฉํ์ฌ Class class ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๊ทธ Class class ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐํ ํ๋ค. Properties๋ map์ฒ๋ผ ํ์์ ๋๊ณ ์์ผ๋, K,V์ ์ค์ง String ๊ฐ๋ง ๊ฐ๋ฅํ๋ค. ์ด๋ฒ์๋ ๊ฐ์ฒด ์ปจํ
์ด..
2023.03.21
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC
DI ํ๋ด๋ด๊ธฐ
DI๋ Dependency Injection์ผ๋ก์ ์์กด์ฑ ์ฃผ์
์ ๋ปํ๋ค. ์ด๋ ์ด๋ค ํด๋์ค์ ๊ฐ์ฒด๋ฅผ new ์ฐ์ฐ์๋ฅผ ํตํด ์์ค์ฝ๋ ๋ด๋ถ์์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ๋ง๋ค์ด์ ์์ค์ฝ๋ ๋ด๋ถ๋ก ์ฃผ์
์ํค๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ๋ณ๊ฒฝ์ ์ ๋ฆฌํ ์ฝ๋๋ฅผ ๋ง๋ค์ด, ๊ฐ๋ฐ์๊ฐ ํ ์ ์๋ ์ค์๋ฅผ ์ค์ด๊ณ , test ํ์๋ ์ค์ด๊ธฐ ์ํด์ ์ด๋ค. ๊ทธ๋ผ ๋ณ๊ฒฝ์ ์ ๋ฆฌํ ์ฝ๋๋ผ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ์ด๋ฅผ ์ด๋ป๊ฒ ํํํด์ผํ๋์ง ์์๋ณด์. 0. ๊ฐ์ class Car{} class SportsCar extends Car {} class Truck extends Car {} SportsCar car = new SportsCar (); // (๋ฐ๊พธ๋ ค๋ ๊ฒ) Truck car = new Tru..
2023.03.21
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC
Intellij ๋จ์ถ๊ธฐ ๋ชจ์์ง (๊ณ์ ์ถ๊ฐ)
alt + home ๋ค๋น๊ฒ์ดํฐ๋ก ๊ฐ๋ ํค shift * 2 ๋ชจ๋ ์ฐพ๋ ๋๋ณด๊ธฐ ์ด๋์ ํฌ์ปค์ค๊ฐ ์๋ ESC ๋๋ฅด๋ฉด Editor๋ก ๋์์ด. ctrl shift A ๋ฐ๋ก ์ก์
๋ญ ์๋์ง ์ฐพ๊ธฐ ctrl tab ์์์ ๋ฐ์ผ๋ก // ctrl shift tab ๋ฐ์์ ์๋ก ์ต๊ทผ์ ์ฝ๊ฑฐ๋ ํธ์งํ ํ์ผ๋ค์ ๋ชฉ๋ก ๋ณด๊ธฐ > Ctrl + E ctrl shift E > ํ์ผ ๋ณด๊ฑฐ๋ ํธ์งํ ์ด๋ ฅ์ด ์ญ ๋์ด. ctr alt left right ๋๋ฅด๋ฉด left ์ ์ ํธ์งํ ๊ณณ์ผ๋ก ๊ฐ. right ๋ค์์ ๋ค์ ์์ผ๋ก ์ด ์ด๋ ค์๋ ํญ๋ค ๊ฐ์ ์ด๋ alt ๋๋ฅด๊ณ ์ค๋ฅธ์ชฝ ์ผ์ชฝ ctrl + / ์ญ ๋๋ฅด๋ฉด ๋ฐ์ผ๋ก ์ญ ๋ด๋ ค๊ฐ. ctrl shift / ์ฌ๋ฌ์ค ์ฃผ์ ctrl f ์ํ๋ ๋ง ์ฐพ๊ธฐ ์ํฐ ๋ด๋ ค๊ฐ๊ธฐ shift ์ํฐ ์ฌ๋ผ๊ฐ๊ธฐ ctrl + R..
2023.03.19
๋ฐฑ์๋ ๊ฐ๋ฐ/SpringMVC