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