๐ฅ๏ธ ์ด์ปค๋จธ์คํ๋ก์ ํธ15 [๊ธฐ์ ์ ์์ฌ๊ฒฐ์ ] Lock ์ ๋ต ๊ธฐ์ ์ ์์ฌ๊ฒฐ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด, ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด "์ด๋ค ๊ธฐ์ ์ ์ ํํ ๊ฒ์ธ๊ฐ?"์ ๋ํ ์ค์ํ ๊ณ ๋ฏผ์ ํ๊ฒ ๋๋ค.์ด๋ฒ ๊ธ์์๋ ์ด์ปค๋จธ์ค ํ๋ก์ ํธ(EvoStyle)์์ ์ ์ฐฉ์ ํ ์ธ ์ฟ ํฐ ๋ฐ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ด๋ค Lock ์ ๋ต์ ์ ํํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ์ง ์ ๋ฆฌํ ์์ ์ด๋ค. ๋ฐฐ๊ฒฝ์ด์ปค๋จธ์ค ์๋น์ค์์๋ ์ด๋ฒคํธ ์ฟ ํฐ์ฒ๋ผ ๋ค์ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ๊ธ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค.์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ฟ ํฐ ์ค๋ณต ๋ฐ๊ธ ๋ฐฉ์ง, ์ฌ๊ณ ์ด๊ณผ ์ฌ์ฉ ๋ฐฉ์ง, ์์ฒญ ์๋ ๊ด๋ฆฌ์ ๊ฐ์ ์๊ตฌ์ฌํญ์ด ํต์ฌ ๊ณผ์ ๊ฐ ๋์๋ค.ํ์ฌ๋ ๋จ์ผ ์๋ฒ ํ๊ฒฝ์ด์ง๋ง, ํฅํ ์ํ ํ์ฅ(๋ฉํฐ ์๋ฒ)์ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ํ์ํ๋ค. ๋ฌธ์ ์ ์๋์ผํ ์ฟ ํฐ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์์ฒญํ์ ๋, ๋ณ๋ค๋ฅธ ๋์์ฑ ์ ์ด ์์ด ์ฒ๋ฆฌํ๋ฉด ๋ค์ .. 2025. 5. 14. [ํธ๋ฌ๋ธ์ํ ] Spring Security 401/403 ์๋ฌ๊ฐ HTML๋ก ๋ด๋ ค์ฌ ๋, JSON ์ปค์คํฐ๋ง์ด์ง์ผ๋ก ํด๊ฒฐํ๊ธฐ ๐ฅ Spring Security ์์ธ ์ฒ๋ฆฌ ์ปค์คํฐ๋ง์ด์ง ํธ๋ฌ๋ธ์ํ (401/403 HTML ๋ฐํ ๋ฌธ์ ํด๊ฒฐ) Spring Security๋ฅผ ์ด์ฉํด์ ์ธ์ฆ/์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ณผ์ ์์, ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.๋ฐ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ ์๋ต์ด JSON์ด ์๋๋ผ HTML ํ์ด์ง์๋ ๊ฒ์ด๋ค!๋ฌธ์ ํ์ ๊ณผ CustomAuthEntryPoint์ CustomAccessDeniedHandler๋ฅผ ์ง์ ๊ตฌํํด์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค! ๐ค ๋ฌธ์ ์ํฉ: ์์๊ณผ ๋ค๋ฅธ HTML ์๋ตSpring Security ๊ธฐ๋ณธ ์ค์ ๋ง ํ์ ๋, ์ธ์ฆ ์คํจ๋ ๊ถํ ๊ฑฐ๋ถ๊ฐ ๋ฐ์ํ๋ฉด ์๋ต์ด ์ด๋ ๊ฒ ๋ด๋ ค์๋ค.๐ HTTP Status๋ ๋ง๊ฒ ๋จ์ด์ง๋ค. (401 / 403)๐ ๊ทธ๋ฐ๋ฐ ๋ณธ๋ฌธ์ด Spring.. 2025. 5. 13. [ํธ๋ฌ๋ธ์ํ ] ์ฟ ํฐ ๋ฐ๊ธํ๋ค ํฐ์ง Deadlock, ๊ทธ๋ฆฌ๊ณ Redisson์ผ๋ก ํด๊ฒฐํ ์ด์ผ๊ธฐ ๐ฃ ๋์์ฑ ํ ์คํธ ์ค Deadlock ๋ฐ์! ๊ทธ๋ฆฌ๊ณ Redisson ๋ฝ๊น์ง ๋์ ํ ํธ๋ฌ๋ธ์ํ ์ ์ฐฉ์ ํ ์ธ ์ฟ ํฐ ๋ฐ๊ธ ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์ ๊ฒช์๋ ํธ๋ฌ๋ธ์ํ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค!Deadlock์ด ์ค์ ๋ก ๋ฐ์ํ๋ ๋ถํ ํ ์คํธ ๊ฒฐ๊ณผ์, ๋ฝ ์ ๋ต์ ๊ณ ๋ฏผํ๊ณ ์ต์ข ์ ์ผ๋ก Redisson ๋ฝ์ ๋์ ํ๊ธฐ๊น์ง์ ์ค์ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ด๋ธ ํธ๋ฌ๋ธ์ํ ๊ธฐ๋ก์ด๋ค! ๐ซ ๋ฌธ์ ์ํฉ: Deadlock ๋ฐ์ ์คํ๊ธฐ๋ณธ์ ์ธ ์ฟ ํฐ ๋ฐ๊ธ API๋ง ์์ฑํ ์ํ์์, ๋ค์ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ๊ธ์ ์์ฒญํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น ๊ถ๊ธํ๋ค.๊ทธ๋์ JMeter๋ฅผ ์ด์ฉํด ๊ฐ๋จํ ๋ถํ ํ ์คํธ๋ฅผ ์งํํด ๋ดค๋ค.ํ ์คํธ ์กฐ๊ฑดํญ๋ชฉ๊ฐํ ์คํธ ๋๊ตฌApache JMeter์ค๋ ๋ ์100๋ช ๋ฃจํ ํ์1ํ (1๋ช ๋น 1ํ ๋ฐ๊ธ ์๋)์ฟ ํฐ ์๋10๊ฐ๋์ API/api/co.. 2025. 5. 13. [ํธ๋ฌ๋ธ์ํ ] Spring Boot JWT ์ธ์ฆ ํ๋ฆ ๋ง๋ค๊ณ 200 OK๋ง ๋์ค๋ ๋ฌธ์ ํด๊ฒฐ ๐ฅ JWT ์ธ์ฆ ๊ตฌํ & ํํฐ ํธ๋ฌ๋ธ์ํ ํ๋ก์ ํธ์์ JWT ์ธ์ฆ์ ์ฒ์์ผ๋ก ์ง์ ๊ตฌํํด ๋ดค๋ค.ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ๊น์ง๋ ์ ์์ ์ผ๋ก ๋์ํ์ง๋ง.. ๋ฌธ์ ๋ ๊ทธ ์ดํ์๋ค.Controller๋ก ์์ฒญ์ด ๋์ด๊ฐ์ง ์๊ณ , 200 OK๋ง ๋์ค๋ ํ์์ด ๋ฐ์ํ๋ค.๋ฌธ์ ๋ฅผ ์ฐพ์ง ๋ชปํด์ ํ์ฐธ์ ํค๋งค๋ค๊ฐ, ๊ฒฐ๊ตญ ์ฒ์๋ถํฐ ์ฝ๋๋ฅผ ๋ค์ ์ ๋ฆฌํ๋ฉด์ ํด๊ฒฐํ๋ค. โ๏ธ JwtUtil ํด๋์คJWT๋ฅผ ๋ฐ๊ธํ๊ณ , ๊ฒ์ฆํ๊ณ , Claim ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ์ญํ ์ ๋ด๋นํ๋ ํด๋์ค์ด๋ค.@Slf4j(topic = "JwtUtil")@Component@RequiredArgsConstructorpublic class JwtUtil { private static final String BEARER_PREFIX = "Bearer "; privat.. 2025. 5. 13. [KPTํ๊ณ ] ์ด์ปค๋จธ์ค ํ๋ก์ ํธ ์ด์ปค๋จธ์ค ํ๋ก์ ํธ์ ๋ํ ๊ฐ์ธ KPT ํ๊ณ Keep: ์ด๋ฒ ํ๋ก์ ํธ์์ ์ ์งํ์ผ๋ฉด ํ๋ ๋ถ๋ถ์๋ก์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ ค์์ ๋๋ผ์ง ์์ ์ ์ด๋ฒ ํ๋ก์ ํธ์์ ์ฒ์์ผ๋ก ์ธ์ฆ/์ธ๊ฐ ๋ถ๋ถ์ ๋งก์ JWT์ Spring Security๋ฅผ ์ฌ์ฉํ๋ค.์ฒ์ ์ ํ๋ ๋ถ์ผ๋ผ์ ๋๋ ค์๋ ์์์ง๋ง, ๋์ ํ๋ ์์ง๊ฐ ๋ ๊ฐํด์ ๋งก์ ์ญํ ์ ๋๊น์ง ํด๊ฒฐํด๋ผ ์ ์์๋ค.๋์์ฑ ์ ์ด๋ ์ฒ์ ๊ฒฝํํ๋ ์์ญ์ด์์ง๋ง, ๊ฐ๋ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌํ๋ฉฐ ํ์ต์ ์งํํ๊ณ ๋ฌด์ฌํ ๋ง๋ฌด๋ฆฌํ ์ ์์๋ค.์ํํ ์์ฌ์ํตํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ค๋ฅธ ํ์์ด ๊ตฌํํ ๋ถ๋ถ์ด ์ดํด๋์ง ์์ ๋๋ ๋ฐ๋ก ์ฐพ์๊ฐ์ ์ง๋ฌธํ๊ณ ์ดํดํ๋ ค๋ ๋ ธ๋ ฅ์ ์๋ผ์ง ์์๋ค.์ ๊ทน์ ์ผ๋ก ์๊ฒฌ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๊ธฐ ์ํด ํจ๊ป ๊ณ ๋ฏผํ๊ณ ํ๋ ฅํ๋ค.๊ผผ๊ผผํ ์ฝ๋ ๋ฆฌ๋ทฐ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ.. 2025. 5. 12. [TIL] ๋ค์ ์์ํด๋ณด๋ ํ๋ก์ ํธ 18์ผ์ฐจ.. ๐ ์ค๋์ ์ด๋ค ํ๋ฃจ์์ง..์ค๋ ์๊ฐ๋ณด๋ค ์ง์ค์ด ์ ์ ๋๋ ํ๋ฃจ์๋ค.์ค์ ์๋ JPQL๋ก ๊ตฌํํ๋ ๋ฉ์๋๋ฅผ ์ ๋ถ QueryDSL๋ฅผ ํ์ฉํ์ฌ ๋ฐ๊พธ๋ ์์ ์ ํ๋ค.์ต์ข ํ๋ก์ ํธ ๋ ์ด์ฌํ QueryDSL๋ฅผ ์ฌ์ฉํ ๋ณด๋์ด ์์๋์ง, ์๊ฐ๋ณด๋ค ๊ฐ๋จํ ์ฟผ๋ฆฌ์ฌ์ ๊ทธ๋ฌ๋์ง ์ฒ์ ์ฌ์ฉํ ๋๋ณด๋ค๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์๋ค.์คํ์๋ ํ์๋ค์ด ์ฌ๋ฆฐ PR์ ํ์ธํ๊ณ ํ๋ก์ ํธ ์์ ํ๋ ๋ด์ฉ๋ค์ ๋ฌธ์ํํ๊ธฐ ์์ํ๋ค.์ ์ ๋ฆฌํด๋ฌ์ผ ๋์ค์ ๊น๋จน์์ ๋ ๋ณด๊ณ ๊น๋จน์ง ์์ ๊ฒ ๊ฐ์์ ๊ผผ๊ผผํ๊ฒ ํด ๋์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.์ค๋ ๋ฌธ์ํ๋ฅผ ์์ํด์ ์ด๋ฒ ์ฃผ ์ฃผ๋ง๊น์ง๋ ๋๋ผ ์์ ์ด๋ค. ๐ก ์๋กญ๊ฒ ์๊ฒ ๋ ๋ด์ฉ์ ๋ญ๊ฐ ์๋๋ผ..?!์ด๋ผ.. ์๋ก ๊ณต๋ถํ ๋ด์ฉ์ด ์์ด์ ์ฌ๊ธฐ ์ ์ ๋ด์ฉ์ด ์๋ค....... ๐๏ธ ๋ด์ผ์ ๋ญ ํ์ง?!โ๏ธ ํ.. 2025. 5. 8. ์ด์ 1 2 3 ๋ค์