๋ฐฑ์๋ ๊ฐ๋ฐ
75

[Day 14] Log ์๊น ์
ํ๊ธฐ
0. ๋ก๊ทธ๊ฐ ํฐ์์ด๋ฉด...๋ณด๊ธฐ๊ฐ ํ๋ค๋ค.์ด๊ฒ ์ธํ
๋ฆฌ์ ์ด์์ ๋ณด๋ฉด ๊ทธ๋๋ง ๋์๋ฐ, ๋ฐฐํฌ๋ ์๋ฒ๋ก ๋ค์ด๊ฐ ๋ก๊ทธ๋ฅผ ๋ณผ๋ ค๊ณ ์น๋ฉด ์ ๋ง ๊ตฌ๋ถํ ํ๋ค์ด์ง๋ค. ์ด๋ฅผ ์ํด๋ก๊ทธ ๋ ๋ฒจ ๋ณ๋ก ์๊น์ ์ ์ฉํ์ฌ ๊ฐ๋
์ฑ์ ๋์ด๋ ค ํ๋ค.1. ์ ์ฉ ๋ฐฉ๋ฒ(1) ํ์ผ ๊ตฌ์กฐ ๋ฐ ์์กด์ฑ ์ฝ์
resources ๋ถ๋ถ์ logBack์ ๋๋ค. ์ดํ ๋ก๊น
๊ณผ ์ค์ ๊ตฌํ ์ฝ๋ ๊ฐ์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ์ํด @SLF4J ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ์
ํ๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ง ์์ผ๋ฉด ๋ก๊ทธ๋ฅผ ์ฐ๊ณ ์ถ์ ๋ชจ๋ ํด๋์ค๋ง๋ค Logger ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์์ผ ํ๋ค. ์ด๋ ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋์ด๊ณ , Logger ๊ธฐ๋ฅ ์์ฒด์ ์ ์ฐ์ฑ๋ ์ค์ธ๋ค. (์ฒ์์ Log-Back ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ค๊ฐ Log4j๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋ @SL4FJ๋ฅผ ์ ์ด๋ค๋ฉด ๋ชจ๋ Logger ๋ฉค๋ฒ๋ฅผ ๋ฐ๊ฟ์ค์ผ ํ๋ค;;)..
2025.02.13
๋ฐฑ์๋ ๊ฐ๋ฐ/โ๏ธ PROTECT ์ผ์ง

[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 ์ผ์ง

[DAY 12] ๊ณตํต ์๋ต ์๋ํ ์ค๊ณ ๋ฐ ๊ตฌํ (๋ดํฌ ํจํด ๋์
- @ResponseBody Advice)
0. ํ์์ฑ์ ๋ฒ์ ํ๋ 6์ธ ํ๋ก์ ํธ์ ๋ฐํ ํ๊ฒฝ ๋ชจ์ต์ด๋ค. ๋น์ ResultResponse๋ผ๋ ํ ๋ด์ ๊ณตํต ์๋ต ๊ท์น์ ์ ํ๊ณ , ResponseEntity๋ก ๋ฐํํ๊ธฐ ์ ์ DTO๋ฅผ ResultResponse๋ก ํ ๋ฒ ๋ ๊ฐ์ธ์ ๋ฐํํ๋ค.๊ทธ ๋น์์๋ ํฐ ๋ถํธํจ ์์ด ํ๋ ๊ฒ ๊ฐ์ง๋ง, ๋ค์ ๋ณด๋ 2๊ฐ์ง ๋ถํธ ์ฌํญ์ด ์์๋ค.1๏ธโฃ ๋งค์๋์ ๋ฐํ ํ์
์ ํญ์ ResponseEntity์ ResultResponse๋ก ๊ฐ์ธ์ค์ผ ํ๋ค. ์ค์ ํ์๊ฐ ํ๋ก ํธ ๊ฐ๋ฐ์์๊ฒ ์ค์ผํ JSON ๋ฐํ ๊ฐ์ฒด๋ TokenDTO์ธ๋ฐ, ๊ทธ์ ๋ฐํ ๊ท์น์ ์ํด์ ํ๋ก์ธ์ค์์๋ ๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํด์ผ๋ง ํ๋ค.2๏ธโฃ ๊ฐ์ ์ด์ ๋ก ๋ฐํ๊ฐ ๋ํ ๋ ๊ฐ์ฒด๋ฅผ ํ์ฉํด ๊ฐ์ธ์ค์ผ ํ๋ค.์ด๋ 3์ธ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ค ํ ๋ช
์ด๋ผ๋ ์ค์๋ก ResultRe..
2025.02.12
๋ฐฑ์๋ ๊ฐ๋ฐ/โ๏ธ PROTECT ์ผ์ง

[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 ์ผ์ง

[DAY 2] Notion์ PM์ผ๋ก ํ์ฉํ๊ธฐ (๊ด๊ณํ DB์ ๋กค์
์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ ์ธํ
)
0. ๋ค์ด๊ฐ๋ฉฐ...์ด๋ฒ์ ์๋ก ํ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์, ๋
ธ์
์ ํตํด ํ๋ก์ ํธ ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋์๋ค. JIRA๋ MATTERMOST ๊ฐ์ ํ์
ํด์ ์ง์ํด์ฃผ๋ SSAFY์ ๋ฌ๋ฆฌ, ๊ตฌ๋ฆ ๋ถํธ ์บ ํ๋ ๊ทธ๋ฐ ๊ฒ์ด ์์ด, NOTION์ ํตํด ์ง์ ๋ง๋ค์ด์ผ ํ๋ค. ๊ทธ๊ฐ ๋
ธ์
ํ์ฉ๋ ฅ์ด ๋ง์ด ๋์์ก์ผ๋, ์ข์ ๊ธฐํ๋ผ ์ฌ๊ฒผ๋ค. ์ค๋์ 1๏ธโฃ ๋
ธ์
์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ ์คํ๋ฆฐํธ ๊ด๋ฆฌ์ 2๏ธโฃ ์์์ ํ์ฉํ ๊ฐ์์ฑ ๋์ด๊ธฐ๋ฅผ ํ ๋ฒ ํด๋ณด๋ ค ํ๋ค.1. ERD ์ค๊ณ๊ด๊ณํ DB๋ฅผ ๊ณํํด์ ์ฌ์ฉํ๋ ค๋ฉด ์ญ์ ์ค๊ณ๋ถํฐ ํด์ผํ๋ค. ๊ทธ๋์ ERD CLOUD๋ฅผ ํค๊ณ , DB ์ค๊ณ๋ฅผ ์์ํ๋ค. ์ค๊ณ ์ ์๋ ์ค๊ณ์ ๋ชฉํ๋ฅผ ์ธ์ฐ๊ณ ์์ํด์ผํ๋ค. ๋ด๊ฐ ์ธ์ด ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ๋ค.1๏ธโฃ ํ ๋ฉค๋ฒ ๋ณ๋ก ์์ ์ด ํด์ผํ ์ผ์ด ๊ท์๋์ด์๋ค.2๏ธโฃ ์งํ ์ฌ..
2025.02.01
๋ฐฑ์๋ ๊ฐ๋ฐ/โ๏ธ PROTECT ์ผ์ง

[DAY 1] Groom Boot Camp ํฉ๊ฒฉ๊ณผ Orientation
2๋ฒ์งธ ๋ถํธ ์บ ํ ํฉ๊ฒฉ ์์์ค์ ์ ๊ธฐ ์ , ํฉ๊ฒฉ ์์์ ๋ด์ ๋ฉ์ผ์ด ์๋ค. ๊ตฌ๋ฆ์ด๋ ํ์ฌ์์ ํ๋ 2๋ฌ์ง๋ฆฌ ๋จ๊ธฐ KDT ์บ ํ์๋ค. ํด๋น ๋ถํธ์บ ํ๋ฅผ ์ ํํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.1๏ธโฃ KDT ์๋ฃ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋ถํธ ์บ ํ์ด๋ค. ๋ฐ๋ผ์ ์
๋ฌธ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๋ญ๋น ์์ด ์ํ๋ ๊ฒ์ ํ ์ ์์ผ๋ฆฌ๋ผ ์๊ฐํ๋ค.2๏ธโฃ ํ๋ฌ์ ๊ฐ๋ฐ, ํ๋ฌ์ TDD ๊ธฐ๋ฐ ๋จ์ ํ
์คํธ๋ก ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ ์ง์คํ๋ค. ์ด๊ฒ์ด ์ฃผํจํ๊ฒ ์ ํํ ์์ธ์ด์๋ค. SSAFY์์ ๊ฐ๋ฐ์ ์ฒ์ ๋ฐฐ์ด ๋๋, SSAFY๊ฐ ๋์ ๊ธฐ์ด์ ํ๋ก์ ํธ ๊ตฌํ ์ค๋ ฅ์ ํค์์ค ๊ฒ์ ์ ๋ง ๊ฐ์ฌํ๊ณ ์๋ค. ํ์ง๋ง ํ๋ ๊ฐ์ฆ์ ๋๊ผ๋ ๋ถ๋ถ์ ์์ฑํ ํ๋ก์ ํธ๋ฅผ ๋ฏ์ด๋ณด๋ฉฐ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ํฅ์์ํค๋ ๊ณผ์ ์ ํ์ง ๋ชปํ ๊ฒ ์ด์๋ค. ์ด๋ฅผ ํ ์ ์์ด์ ์ข์๋ค.3๏ธโฃ ๋ ๋ฌ ๋..
2025.01.31
๋ฐฑ์๋ ๊ฐ๋ฐ/โ๏ธ PROTECT ์ผ์ง

[ํ ํฐ ์ธ์ฆ ๋ฐฉ์]์ ์๋ฆฌ, ์ธ์
์ธ์ฆ๊ณผ์ ์ฐจ์ด์
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