20๋ ์ด์ Java ๊ธฐ๋ฐ ์น ๊ฐ๋ฐ์ ๋ชธ๋ด์์จ ๊ฐ๋ฐ์ ๋ฐ ๊ฐ์ฌ์ ๋๋ค. ๋๊ท๋ชจ ํ๋ก์ ํธ ์ค๊ณ๋ถํฐ ์ฑ๋ฅ ์ต์ ํ๊น์ง ํญ๋์ ์ค๋ฌด ๊ฒฝํ์ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ, ๋ค์์ ๊ธฐ์ ๊ต์ก๊ณผ ๋ํ ๊ฐ์๋ก ๊ฐ๋ฐ ์ง์ ์ ๋ฌ์๋ ํ์จ์์ต๋๋ค. ์ค๋ฌด์ ๊ต์ก์ ๊ท ํ ์กํ ์๊ฐ์ผ๋ก ๊น์ด ์๋ ํต์ฐฐ์ ์ ๊ณตํฉ๋๋ค.
Courses
Reviews
- Web Programming Using Spring Boot: This is How You Build a Website!
- Web Programming Using Spring Boot: This is How You Build a Website!
- Web Programming Using Spring Boot: This is How You Build a Website!
- Web Programming Using Spring Boot: This is How You Build a Website!
- Web Programming Using Spring Boot: This is How You Build a Website!
Posts
Q&A
JWT ๊ธฐ๋ฐ ์ธ์ฆ
grgwde23๋ ์ข์ ์ง๋ฌธ์ ๊ฐ์ฌํฉ๋๋ค!์ฌ์ค JWT๋ React + Spring Boot ๊ฐ์ด ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋ถ๋ฆฌ๋ ๊ตฌ์กฐ์์ ์ง์ ํ ๊ฐ์ ์ ๋ฐํํฉ๋๋ค.๊ทธ๋์ ์ ๋ ํ์ฌ React + Spring Boot๋ฅผ ํ์ฉํ ๊ฐ์๋ฅผ ๊ตฌ์ ์ค์ด๊ธด ํ๋ฐ์, ์งํ ์ค์ธ ํ๋ก์ ํธ๊ฐ 12์์ ๋ง๋ฌด๋ฆฌ๋๋ ์ผ์ ์ด๋ผ ๊ทธ ์ ์๋ ๋ณธ๊ฒฉ์ ์ธ ๊ฐ์ ์ ์์ด ์กฐ๊ธ ์ด๋ ค์ธ ๊ฒ ๊ฐ์์~ใ ใ ์กฐ๊ธ๋ง ๊ธฐ๋ค๋ ค์ฃผ์๋ฉด, ๋ ์ฒด๊ณ์ ์ธ ๊ตฌ์ฑ์ผ๋ก ์ฐพ์๋ต ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค!๊ทธ ์ ์ ๊ถ๊ธํดํ์ "์๋ฒ ํ์ฅ ์ ์ธ์ ๊ด๋ฆฌ ๋ฌธ์ ํด๊ฒฐ" ๋ถ๋ถ์ ๋ํด์ JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ๊ฐ์ด ์ค๋ช ๋๋ฆด๊ฒ์.[JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ]1.๋ก๊ทธ์ธ ์์ฒญ: ์ฌ์ฉ์๊ฐ ID/PW๋ฅผ ์ ๋ ฅํด์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ ๋๋ค.2.์๋ฒ์์ ์ธ์ฆ ์ฒ๋ฆฌ: Spring Security๊ฐ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๊ณ , ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด JWT ํ ํฐ์ ์์ฑํฉ๋๋ค. ์ด๋ ๋ณดํต Access Token๊ณผ Refresh Token ๋ ๊ฐ๊ฐ ํจ๊ป ๋ฐ๊ธ๋ฉ๋๋ค.3. ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ ์ ์ฅ: ๋ฐ๊ธ๋ฐ์ ํ ํฐ(Access Token, Refresh Token)์ ํด๋ผ์ด์ธํธ(React ๋ฑ)๊ฐ ์ ์ฅํฉ๋๋ค. - Access Token์ ๋ฉ๋ชจ๋ฆฌ๋ localStorage์ ์ ์ฅํ๊ณ , - Refresh Token์ ๋ณด์์ ์ํด httpOnly ์ฟ ํค์ ์ ์ฅํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ ๋๋ค.4. API ์์ฒญ ์ ํ ํฐ ํฌํจ์ฌ์ฉ์ ์์ฒญ ์ Access Token์ Authorization ํค๋์ ๋ด์ ์๋ฒ์ ์์ฒญํฉ๋๋ค.์๋ฒ๋ ์ด ํ ํฐ์ ๊ฒ์ฆํ๊ณ , ์ธ์ฆ๋ ์ฌ์ฉ์๋ก ์ธ์ํด ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.5. Access Token ๋ง๋ฃ ์ํด๋ผ์ด์ธํธ๋ Refresh Token์ ์ด์ฉํด Access Token ์ฌ๋ฐ๊ธ ์์ฒญ์ ํ ์ ์์ต๋๋ค.Refresh Token๋ ๋ง๋ฃ๋์๊ฑฐ๋ ์ ํจํ์ง ์๋ค๋ฉด, ์ฌ๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.[์๋ฒ ํ์ฅ๊ณผ ์ธ์ ๊ด๋ฆฌ์ ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์]๊ธฐ์กด์ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์(HttpSession)์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.์ด ๋ฐฉ์์ ๋จ์ผ ์๋ฒ์์๋ ๊ด์ฐฎ์ง๋ง, ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋๋ก ํ์ฅ(์ค์ผ์ผ ์์) ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.์๋ฅผ ๋ค์ด,์ฌ์ฉ์๊ฐ A์๋ฒ์์ ๋ก๊ทธ์ธํ๋๋ฐ, ๋ค์ ์์ฒญ์ B์๋ฒ๋ก ๊ฐ๋ฉด ์ธ์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ธ์ ์ ๋ณด๋ฅผ ๊ณต์ ์ ์ฅ์(Redis, DB ๋ฑ) ์ ์ ์ฅํด์ผ ํ๋๋ฐ, ์ด๋ ์ค์ ๊ณผ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ๋ค์ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ณต์กํฉ๋๋ค.์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก JWT๋ฅผ ์ฌ์ฉํ๋๋ฐ์,JWT๋ ์ฌ์ฉ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ๋ค๊ณ ๋ค๋๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, ์๋ฒ๊ฐ ์ธ์ฆ ์ํ๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์์ต๋๋ค.์ด๋ค ์๋ฒ๋ก ์์ฒญ์ด ์ค๋๋ผ๋, JWT ํ ํฐ๋ง ์ ํจํ๋ค๋ฉด ์ธ์ฆ์ด ๊ฐ๋ฅํ๊ณ , ์๋ฒ ๊ฐ ์ธ์ ๊ณต์ ๊ฐ ํ์ ์์ด์ง๋๋ค.๋ํ, ๋ก๋ ๋ฐธ๋ฐ์ ๋ค์ ์ฌ๋ฌ ์๋ฒ๊ฐ ์๋๋ผ๋ ์ธ์ฆ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ํ์ฅ ์ ๋งค์ฐ ์ ์ฐํ๊ณ ์์ ์ ์ธ ์ธ์ฆ ์์คํ ๊ตฌ์ถ ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.๋ง์ง๋ง์ผ๋ก, ์์ฝ๊ฒ๋ ๋ฐ๋ก ์ถ๊ฐ ๊ฐ์๋ฅผ ์งํํด๋๋ฆฌ์ง ๋ชปํด ์ฃ์กํ๊ณ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.์ง๊ธ์ฒ๋ผ ๊พธ์คํ ์ง๋ฌธํ๊ณ ํ์ตํด ๋๊ฐ์ ๋ค๋ฉด, ์ค๋ฌด์์๋ ์ถฉ๋ถํ ํ์ฉ ๊ฐ๋ฅํ ์์ค๊น์ง ๊ธ๋ฐฉ ๋๋ฌํ์ค ๊ฑฐ์์!์์ผ๋ก๋ ์ข์ ์ง๋ฌธ ์ธ์ ๋ ํ์์ด๊ณ , ๋๊น์ง ์์ํ๊ฒ ์ต๋๋ค.
- 1
- 2
- 40
Q&A
์ธํฐ์ ํฐ
jsshin๋ ์๋ ํ์ธ์.^^์ข์ ์ง๋ฌธ์ ๋๋ค! ๋ง์ต๋๋ค. Spring Security๋ฅผ ์ ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด์ ์ธ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ธํฐ์ ํฐ๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์๋ํ๋ฉด Spring Security๋ ์ธ์ ๋์ SecurityContext๋ฅผ ํตํด ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค.๊ทธ๋์ ์ดํ ๊ฐ์์์ ๊ธฐ์กด ์ธํฐ์ ํฐ ์ฝ๋๋ ์ญ์ ํ๊ฒ ๋๋๋ฐ์. ์๋ง ์ด ๋ถ๋ถ์ด ๊ฐ์ ํ๋ฆ์ ๋ค์ ํผ๋์ ๋๋ ธ์ ์๋ ์๊ฒ ๋ค์. ์ด ๋ถ๋ถ์ ๋ค๋ฅธ ์๊ฐ์๋ถ๋ค๋ ํท๊ฐ๋ฆด ์ ์๋ ๋ถ๋ถ์ด๋ผ, ์กฐ๋ง๊ฐ ๊ฐ์์ ๋ณด์ ์ค๋ช ์ ์ถ๊ฐํด์ ์ข ๋ ์ฝ๊ฒ ์ดํดํ์ค ์ ์๋๋ก ์ ๋ฆฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.์ข์ ํผ๋๋ฐฑ ์ฃผ์ ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
- 0
- 2
- 54
Q&A
DTO ๊ด๋ จ
jsshin๋ ์๋ ํ์ธ์.^^์์ฃผ ์ข์ ์ง๋ฌธ์ ๋๋ค. DTO๋ ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฐ์ฒด๋ก์, ์์น์ ์ผ๋ก๋ ๊ฐ์ ๋ณํํ์ง ์๋ ๊ฒ์ด ์ค๊ณ์ ์ผ๋ก ๋ ๊น๋ํฉ๋๋ค.ํ์ฌ ์ฝ๋์ฒ๋ผ memberDto์ pw ๊ฐ์ passwordEncoder.encode()๋ก ์ธ์ฝ๋ฉํ ํ ๋ค์ memberDto์ ๋ฐ์ํ๋ฉด, DTO๊ฐ ๋จ์ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ์ฒด๋ผ๋ ์ญํ ๊ณผ ์กฐ๊ธ ์ด๊ธ๋ ์ ์๋ค๋ ์ง์ ์ ์ถฉ๋ถํ ํ๋นํฉ๋๋ค.DTO์ ๊ฐ์ด ๋ฉ์๋ ์คํ ์ค์ ๋ณ๊ฒฝ๋๋ฉด, ์ดํ ์ฝ๋์์ ํผ๋์ ์ค ์ ์๊ณ , ์ฝ๋์ ์ง๊ด์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.๊ทธ๋์ ์ค๋ฌด์์๋ ๋ณดํต ์ธ์ฝ๋ฉ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๋์ ๋ณ์๋ก ๊ด๋ฆฌํ๊ฑฐ๋, DTO โ Entity ๋ณํ ๊ณผ์ ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ ์ฑ์ด ์ฌ๋ผ๊ฐ๋๋ค.๋ค๋ง, ์ด๋ฒ ์จ๋ผ์ธ ๊ฐ์์์๋ ์คํ๋ง ์ ๋ฌธ์๋ถ๋ค๊ป ํจ์ค์๋ ์ธ์ฝ๋ฉ์ด ์ด๋ค ์์ ์ ์ด๋ฃจ์ด์ง๋์ง ์ง๊ด์ ์ผ๋ก ๋ณด์ฌ๋๋ฆฌ๊ธฐ ์ํด memberDto์ pw๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.์ฆ, ๊ฐ์ฒด๊ฐ ํ ๋ฒ ์์ ๋๊ณ ๊ทธ ์์ ๋ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณผ์ ์ ๋ช ํํ๊ฒ ์ดํดํ๋๋ก ๋๊ธฐ ์ํ ๊ต์ก์ ์ธ ๋ชฉ์ ์ด ์์์ต๋๋ค.๊ฒฐ๋ก ์ ์ผ๋ก ์ค๋ฌด์์๋ ๋ ๊น๋ํ ์ค๊ณ๋ก ๊ฐ์ ํ ์ ์๊ณ , ๊ฐ์์์๋ ํ์ต์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ผ๋ถ ์๋์ ์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๋ถ๋ถ์ ์๋ฆฌํ๊ฒ ์บ์นํด์ ์ง๋ฌธํ๊ณ , ์ง์ ๋ฆฌํฉํ ๋ง๊น์ง ์๋ํด ๋ณธ ์ ์ ์ ๋ง ํ๋ฅญํฉ๋๋ค. ๋ฌดํ ๋ฐ์๋ฅผ ๋ณด๋ ๋๋ค. ์ด๋ฐ ์์ธ์ผ๋ง๋ก ์ง์ง ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๋ ์ต๊ณ ์ ๋ฐ๊ฑฐ๋ฆ์ด๊ณ , ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ํ ๋งค์ฐ ํ๋ฅญํ ๊ฐ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฆ๊ฑฐ์ ๋๋ค.์ด์ฌํ ๊ณต๋ถํ๋ ๊ทธ ์์ธ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฌ๊ณ , ์์ผ๋ก๋ ๊ณ์ ์์ํ๊ฒ ์ต๋๋ค.
- 0
- 2
- 62
Q&A
์ถ๊ฐ ๊ฐ์ ํด์ฃผ์ค์ ์๋์?
culwonder.company๋ ์๋ ํ์ธ์! ๊ฐ์๋ฅผ ๊ธ์ ์ ์ผ๋ก ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.๋ง์ํด์ฃผ์ Swagger์ QueryDSL ๋ชจ๋ ์ค์ ํ๋ก์ ํธ์์ ๋ง์ด ํ์ฉ๋๋ ์ค์ํ ๊ธฐ์ ์ด๋ผ ์ ๋ ๊ฐ์ ์ฃผ์ ๋ก ์ถฉ๋ถํ ๊ณ ๋ฏผํ๊ณ ์๋ ๋ถ๋ถ์ ๋๋ค.๋ค๋ง ํ์ฌ๋ ๋จ์ํ ๊ฐ๋ ๋ง ์ ๋ฌํ๋ ์์ค์ด ์๋๋ผ, ์ค๋ฌด ํ๋ก์ ํธ์ ์ฐ๊ณ๋ ์ค์ ์ค์ฌ์ ๊ตฌ์ฑ์ ๊ณ ๋ฏผ ์ค์ธ๋ฐ์,์ด๋ ๊ฒ ์ ๊ทผํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ ๋ฒ์๊ฐ ๊ฝค ๋์ด์ง๊ณ , ํ์ต์๋ถ๋ค๊ป ๋ถ๋ด์ด ๋ ์ ์๋ค๋ ์ ๋ ํจ๊ป ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.๊ทธ๋์ ์์ง์ ๋ฐฉํฅ๋ง ๊ตฌ์ ์ค์ด๋ฉฐ, ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํด์ผ ๊ฐ์ฅ ํจ๊ณผ์ ์ผ์ง ์ ์คํ ๊ณ ๋ฏผํ๊ณ ์๋ ๋จ๊ณ์ ๋๋ค.์์ผ๋ก๋ ํ์ต ํ๋ฆ์ ํด์น์ง ์์ผ๋ฉด์ ์ค๋ฌด์๋ ๋์์ด ๋ ์ ์๋๋ก ์ ์ค๋นํด๋ณด๊ฒ ์ต๋๋ค.๊ฒ๋ค๊ฐ... ์ฌ์ค ์์ฆ ๊ฐ์ธ ํ๋ก์ ํธ๋ก ๋ฐค๋ฎ์ ์ฝ๋์ ํจ๊ป ๋ณด๋ด๊ณ ์์ด์, ๋จธ๋ฆฟ์์์ Swagger๋ QueryDSL์ด ๋ง ๊ฐ์ ์์ผ๋ก ๋ฐ์ด๋ค๊ณ ์ถ์ด ํด๋์ ๊ฐ โ์ ๊น๋งโฆ ์ง๊ธ์ ๋ง๊ณ โฆโ ํ๊ณ ์ ์ ๋ง๋ฆฌ๋ ์ค์ด๊ธฐ๋ ํฉ๋๋ค. ใ ใ ๊ทธ๋๋ ์ข์ ์๊ฒฌ ์ฃผ์ ๋๋ถ์ ๋๊ธฐ๋ถ์ฌ ํ์คํ ๋์๊ณ ์,์กฐ๋ง๊ฐ ๋ ์ข์ ๊ตฌ์ฑ์ผ๋ก ์ฐพ์๋ต ์ ์๋๋ก ์ ์ค๋นํด๋ณด๊ฒ ์ต๋๋ค!๊ฐ์ ์ด์ฌํ ๋ค์ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฌ๊ณ ,์์ผ๋ก๋ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค๋ ฅ ์์๊ฐ์ค ์ ์๋๋ก ์์ํ๊ฒ ์ต๋๋ค! ์์คํ ์๊ฒฌ ์ ๋ง ๊ฐ์ฌ๋๋ฆฌ๊ณ ์, ๋๊น์ง ๊ฐ์ ์ ๋ฐ๋ผ์ค์ค ์ ์๋๋ก ๋๊น์ง ์์ํ๊ฒ ์ต๋๋ค!
- 0
- 1
- 67
Q&A
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ด ์ค๋ณต ์์ฑ ๋๋ ์ค๋ฅ
changhui๋ ์๋ ํ์ธ์,์ง๋ฐฉ ์ถ์ฅ ์ผ์ ์ผ๋ก ๋ต๋ณ์ด ๋ค์ ๋ฆ์ด์ง ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๋ง์ํด์ฃผ์ ์ํฉ์ ๋ณด๋ฉด USER_MEMBER์ user_member ๋ ๊ฐ์ ํ ์ด๋ธ์ด ์์ฑ๋ ์ด์ ๋ MySQL์ ํ ์ด๋ธ ์ด๋ฆ ๋์๋ฌธ์ ๊ตฌ๋ถ ์ค์ ๊ณผ ๊ด๋ จ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.MySQL์์ ํ ์ด๋ธ ์ด๋ฆ์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์ฌ๋ถ๋ ์ด์์ฒด์ (OS)์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ๋ํ MySQL ์์ฒด ์ค์ ๊ฐ์๋ ์ํฅ์ ๋ฐ์ต๋๋ค. Windows๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ง๋ง, Linux๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.๋ํ MySQL ์ค์ ๊ฐ ์ค lower_case_table_names์ ๊ฐ์ ๋ฐ๋ผ ํ ์ด๋ธ ์ด๋ฆ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๊ฒฐ์ ๋๋๋ฐ์, ํด๋น ์ค์ ์ ์๋ ์ฟผ๋ฆฌ๋ก ํ์ธํ ์ ์์ต๋๋ค.SHOW VARIABLES LIKE 'lower_case_table_names';๊ฒฐ๊ด๊ฐ(value)์ผ๋ก'0'์ด๋ฉด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.(Linux, ์ผ๋ถ Mac)'1'์ด๋ฉด ํ ์ด๋ธ ์ด๋ฆ์ ์๋ฌธ์๋ก ํต์ผํด์ ์ฒ๋ฆฌํฉ๋๋ค.(Windows)'2'์ด๋ฉด ์ ์ฅ์ ์๋ ์ด๋ฆ์ผ๋ก ํ๋, ๋น๊ต๋ ์๋ฌธ์๋ก ํฉ๋๋ค.(์ผ๋ถ Mac) changhui๋๊ป์ Windows๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์๋ค๋ฉด lower_case_table_names ๊ฐ์ด '1'์ผ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , Mac์ ์ฌ์ฉ ์ค์ด์๋ผ๋ฉด '0'์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.ํ์ฌ USER_MEMBER์ user_member ํ ์ด๋ธ์ด ๋์์ ์กด์ฌํ๊ณ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ํน์ ํ ์ด๋ธ์๋ง ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด, ์ค์ ์ด๋ Entity ๋งคํ์์ ์ผ๊ด์ฑ์ด ํ์ํ ์ํฉ์ผ๋ก ๋ณด์ ๋๋ค.์ด์์ฒด์ ์ MySQL ์ค์ ์ ๋จผ์ ํ์ธํ์ ๋ค, ์ค์ต ํ๊ฒฝ์ ๋ง๊ฒ ํ ์ด๋ธ ๋งคํ์ ์ ๋ฆฌํ์๋ฉด ์ ์์ ์ผ๋ก ๋์ํ ์ ์์ ๊ฑฐ์์. ํญ์ ์ฑ์คํ๊ฒ ์ค์ต์ ์ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์์ผ๋ก๋ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค๋ ฅ์ ์์๊ฐ์๊ธธ ์ง์ฌ์ผ๋ก ์์ํฉ๋๋ค!
- 0
- 3
- 74
Q&A
mysql ์ค์นํ์ผ
culwonder.company๋ ์๋ ํ์ธ์.์ด๋ฒ ๊ฐ์๋ ์ค์ต ํ๊ฒฝ์ ์ผ๊ด์ฑ์ ์ํด Windows ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.๋ค๋ง, MacOS์์๋ ๋์ผํ ๊ฐ๋ฐ ๋๊ตฌ(MySQL, Workbench ๋ฑ)๋ฅผ ์ค์นํ๊ณ ์ค์ต์ ์งํํ๋ ๊ฒ์ด ์ถฉ๋ถํ ๊ฐ๋ฅํฉ๋๋ค. ํนํ Homebrew๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐํธํ๊ฒ MySQL์ ์ค์นํ์ค ์ ์๊ณ , MySQL Workbench ๋ํ Mac์ฉ ์ค์น ํ์ผ์ด ์ ๊ณต๋๋ ๊ฑฑ์ ํ์ง ์์ผ์ ๋ ๋ฉ๋๋ค!ํ์ฌ ๋ณธ ๊ฐ์์์๋ MacOS ์ค์น ๋ฐ ํ๊ฒฝ ์ค์ ์ ๋ณ๋๋ก ๋ค๋ฃจ์ง ์์ผ๋ฉฐ, Mac ์ฌ์ฉ์๋ถ๋ค๊ป์๋ ๊ณต์ ๋ฌธ์๋ ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ค์ต ํ๊ฒฝ์ ์ง์ ๊ตฌ์ฑํด์ฃผ์ ์ผ ํฉ๋๋ค.๋งฅ๋ถ ์ฌ์ฉ์๋ถ๋ค๊ป๋ ๋ค์ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ง๋ง, ์ด๋ฅผ ํตํด ํ๊ฒฝ ๊ตฌ์ฑ ๋ฅ๋ ฅ๋ ํจ๊ป ํค์ธ ์ ์๋ ์ข์ ๊ธฐํ๊ฐ ๋ ์ ์์ผ๋ ๊ธ์ ์ ์ผ๋ก ๋ฐ์๋ค์ฌ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
- 0
- 2
- 54
Q&A
dto ํ์
H K๋ ์๋ ํ์ธ์~^^DTO์์ String ํ์ ์ ์ฌ์ฉํ ๋ฐ์๋ ํน๋ณํ ์ด์ ๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ค๋ง ํ์ต์๋ถ๋ค๊ป ๋ค์ํ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ์ ํ๋ ์๋๊ฐ ์์ ๋ฟ์ ๋๋ค.ใ ใ ์ฐธ๊ณ ๋ก ํ์ต์ด ์๋ ์ค๋ฌด ํ์ฅ์์๋ ๋ค์ํ ์ํฉ์ ๋ง์ฃผํ๊ฒ ๋๋๋ฐ์, ์ด๋ค ํ๋ก์ ํธ์์๋ DTO ์์ด Entity๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.์ด๋ ์ ๋ ์๋ชป๋ ๋ฐฉ์์ด ์๋๋ผ, ํด๋น ํ๋ก์ ํธ์ ์ค๊ณ ๋ฐฉ์์ด๋ ์๊ตฌ์ฌํญ์ ๋ฐ๋ฅธ ์ ํ์ผ ๋ฟ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.์ง๊ธ์ฒ๋ผ ๋ค์ํ ๊ด์ ์์ ์ฌ๊ณ ํ๊ณ ๊ณ์ํด์ ์ค์ ๊ฐ๊ฐ์ ํค์๊ฐ๋ฉฐ ์ฑ์ฅํด๋๊ฐ์๊ธธ ์ง์ฌ์ผ๋ก ์์ํ ๊ฒ์.ํงํ ~^^
- 0
- 1
- 46
Q&A
๋ฉ์ผ ๋ณด๋ด๋ ๋ฉ์๋์์
HK๋ ์๋ ํ์ธ์. ์ง๋ฐฉ ์ถ์ฅ ์ผ์ ์ผ๋ก ์ธํด ๋ต๋ณ์ด ๋ฆ์ด์ง ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๊ธฐ๋ค๋ฆฌ๊ฒ ํด๋๋ ค ์ฃ์กํฉ๋๋ค. ์์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ์๋ํ ์ ์๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค.๋ค. ๋ฌผ๋ก ์ ๋๋ค. try ~ catch๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ๋๊ฒ ๋ค์.try { MemberEntity updateMember = memberRepository.save(findedMemberEntity); sendNewPasswordByMail(memberDto.getMail(), newPassword); return NEW_PASSWORD_CREATION_SUCCESS;} catch (Exception e) { e.printStackTrace(); return NEW_PASSWORD_CREATION_FAIL;}๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 50
Q&A
์ธํฐ์ ํฐ ์ง๋ฌธ
HK๋ ์๋ ํ์ธ์. ์ง๋ฐฉ ์ถ์ฅ ์ผ์ ์ผ๋ก ์ธํด ๋ต๋ณ์ด ๋ฆ์ด์ง ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๊ธฐ๋ค๋ฆฌ๊ฒ ํด๋๋ ค ์ฃ์กํฉ๋๋ค. ์์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ์๋ํ ์ ์๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ก๊ทธ์ธ ์ธ์ฆ ์ฌ๋ถ์ ๋ฐ๋ผ ํน์ ์๋น์ค ์ ๊ทผ ์ฒ๋ฆฌ๋ฅผ ํ ๋ Filter์ Interceptor ๋ชจ๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.๋์ ๋์ ์์ , ์ฉ๋, ์ค๊ณ ๋ชฉ์ ๋ฑ์ ์์ด ์ฐจ์ด์ ์ด ์์ต๋๋ค. filter๋ Servlet์ ์กด์ฌํ๋ฉด์ DispatcherServlet ์์ ์์นํด์ client์ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.์คํ ํ๋ฆ์ client์ ์์ฒญ โ Filter โ DispatcherServlet ์์ด๋ผ๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.Interceptors๋ Spring Framework์ ์กด์ฌํ๊ณ DispatcherServlet ๋ค์ ์์นํด์ ์ปจํธ๋กค๋ฌ ์ง์ ์ ํ์ ์คํ๋ฉ๋๋ค.์คํ ํ๋ฆ์ client์ ์์ฒญ โ DispatcherServlet โ Interceptor โ Controller ์์ด๋ผ๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ์ธ ์ธ์ฆ์ด๋ ๊ถํ ํ์ธ ๋ฑ์ Spring MVC์์ ์ฒ๋ฆฌ๋๋ ์์ฒญ์ ๋์์ผ๋ก ํ๋ฏ๋ก Interceptor๊ฐ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.๋ฌผ๋ก , Spring Security๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ ๊ตํ๊ณ ์์ ํ ์ธ์ฆ ๋ฐ ๊ถํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.๊ฒฐ๋ก ์ ์ผ๋ก ๋ก๊ทธ์ธ ์ธ์ฆ์ด๋ ๊ถํ ํ์ธ์ด ๋ชฉ์ ์ด๋ผ๋ฉด Interceptor ๋ณด๋ค๋ Spring secutiry๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.์ธ์ฆ ์ธ ์์ฒญ ์ /ํ์ ํน์ ์ฒ๋ฆฌ๊ฐ ๋ชฉ์ ์ด๋ผ๋ฉด Interceptor๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.excludePathPatterns์ ๊ฒฝ์ฐ ํ์ต์๋๋ค๊ป ๋ค์ํ ๋ฐฉ๋ฒ์ ์ค๋ช ๋๋ฆฌ๊ณ ์ ํจ์ ๋๋ค.excludePathPatterns๋ ํน์ ๊ฒฝ๋ก์ ์ธํฐ์ ํฐ๋ฅผ ์ ์ฉํ์ง ์๋๋ก ์ค์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ,์ํฉ์ ๋ฐ๋ผ addPathPatterns์ ํจ๊ป ์ ํ ๋๋ ์กฐํฉ ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.์ค๋์ ์ฝ๋ฉ ํ ์ค, ํ ์ค์ด ์ค๋ ฅ์ ํค์ฐ๋ ๋ฐํ์ด ๋๋ค๊ณ ์๊ฐํ๊ณ ๊ณ์ ๋์๊ฐ๋ ๋ง์์ด ์ค์ํ๊ณ HK๋์ ์ง๋ฌธ์์ ์ด๋ฌํ ์ ์ด ๋๊ปด์ง๋๋ค.๋ถ๋ช ๋ฉ์ง ๊ฐ๋ฐ์๊ฐ ๋ ๊ฑฐ์์. ํ์ดํ ์ ๋๋ค!๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 68
Q&A
AOP์ ๋ํ ์ค๋ช
์! ์ ์ ๋ค์ ๋ถ์ ํํ ์ค๋ช ์ผ๋ก ์ธํด ํ์ต์ ์คํด๋ ๋ถํธ์ ๋๋ฆฐ ๊ฒ ๊ฐ์ ๋จผ์ ์ฃ์กํ๋ค๋ ๋ง์์ ๋๋ฆฝ๋๋ค. ๋ค์ ์ ํํ๊ฒ ์ ๋ฆฌํด๋๋ฆฌ๊ฒ ์ต๋๋ค. Spring AOP(Aspect-Oriented Programming)๋ ์คํ๋ง ํ๋ ์์ํฌ์ ํ ๋ถ๋ถ์ ๋๋ค.Spring AOP๋ ์คํ๋ง ํ๋ ์์ํฌ์ ์ผ๋ถ๋ก ์ ๊ณต๋๋ฉฐ, ๋ณ๋์ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ ํธ ์ด๋ฆ์ ์๊ณ , ์คํ๋ง ํ๋ ์์ํฌ์ ํ์ ๋ชจ๋์ธ spring-aop์ ํฌํจ๋์ด ์์ต๋๋ค.์คํ๋ง ํ๋ ์์ํฌ๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ทธ์ค AOP ๊ธฐ๋ฅ์ spring-aop ๋ชจ๋์ ํตํด ์ ๊ณต๋ฉ๋๋ค. ์ถ๊ฐ๋ก, Spring Boot๋ AOP ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก spring-boot-starter-aop ์คํํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์คํํฐ์๋ AOP ๊ด๋ จ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์, spring-boot-starter-aop ์์กด์ฑ์ ์ค์ ํ๋ฉด AOP ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, spring-boot-starter-aop์ spring-aop ๋ชจ๋์ด ํฌํจ๋์ด ์์ด ๋ณ๋๋ก spring-aop ์์กด์ฑ์ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.๋ค์์ build.gradle์์ spring-boot-starter-aop ์์กด์ฑ์ ์ถ๊ฐํ๋ ์ฝ๋์ ๋๋ค.implementation 'org.springframework.boot:spring-boot-starter-aop' ๋ค์ ํ ๋ฒ ํ์ต์ ๋ถํธ์ ๋๋ฆฐ ์ ์ง์ฌ์ผ๋ก ์ฌ๊ณผ๋๋ฆฌ๋ฉฐ, ๊ด๋ จ ๋์์์ ์กฐ์ํ ์ ๋ฐ์ดํธํ๋๋ก ํ๊ฒ ์ต๋๋ค.์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ํธํ๊ฒ ๋ฌธ์ํด ์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 136




