๐ป ํ๋ก์ ํธ15 [ ํ KPT ํ๊ณ ] ํ๋ฌ์ค ํ๋ก์ ํธ ํ๋ฌ์ค ํ๋ก์ ํธ Keep: ์ด๋ฒ ํ๋ก์ ํธ์์ ์ ์งํ์ผ๋ฉด ํ๋ ๋ถ๋ถ๋ฆฌ์์ค ๊ด๋ฆฌ๊ฐ์ ๋งก์ ์ผ์ ๋๊น์ง ์ฑ ์๊ฐ ์๊ฒ ์ํํ์ฌ ํ๋ก์ ํธ๊ฐ ์ํํ๊ฒ ์งํ๋์๋ค.CI/CD ํ์ฉ์๋ํ๋ ๋ฐฐํฌ ์์คํ ์ ํ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ฐฐํฌ ๊ณผ์ ์ด ์ํํ๋ค.๋ค์ ํ๋ก์ ํธ์์๋ ์ง์์ ์ผ๋ก ํ์ฉํ๊ณ ๊ฐ์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.์๋ฌ ์ฒ๋ฆฌ์ ์ญ ์์ธ ์ฒ๋ฆฌ ๋๋ถ์ ์๋ฌ ํ์ธ์ด ์ฌ์ ๊ณ , ๋๋ฒ๊น ์๊ฐ์ด ๋จ์ถ๋์๋ค.์ฒด๊ณ์ ์ธ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ํ๋ก์ ํธ ์์ ์ฑ์ด ํฅ์๋์๋ค.์ํํ ์์ฌ์ํตํ์ ๊ฐ ์๊ฒฌ์ ์ ๋ฃ๊ณ ์กด์คํ๋ ๋ถ์๊ธฐ๊ฐ ํ์ฑ๋์ด ํ์ ์ด ์์ํ๋ค.๋ค์ ํ๋ก์ ํธ์์๋ ์ ๊ทน์ ์ธ ์๊ฒฌ ๊ตํ์ ์ ์งํ๊ณ ์ถ๋ค. Problem: ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ์ฝ๋ ๋ฆฌ๋ทฐ ๋ถ์กฑ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ์ง ์์ ๊ฐ ํ์์ ์งํ ์ํฉ์ ๋ช ํํ ํ์ ํ์ง ๋ชปํ๋ค.์ฝ๋ ํ์ง ํฅ์์ ์ํด ์ ๊ธฐ์ .. 2025. 2. 10. [ ํธ๋ฌ๋ธ ์ํ ] SQLSyntaxErrorException - @SQLDelete ์ฌ์ฉ ์ ํ ์ด๋ธ ์ปฌ๋ผ๋ช ๋ถ์ผ์น ๋ฌธ์ Soft Delete๋ฅผ ๊ตฌํํ๊ธฐ ์ํด Hibernate์ @Where ๋ฐ @SQLDelete ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ์ ๋, ๋ค์๊ณผ ๊ฐ์ SQLSyntaxErrorException์ด ๋ฐ์ํ๋ค.๋ฌธ์ ์ํฉSQLSyntaxErrorException: Unknown column 'member_id' in 'where clause'์ฝ๋ ์์ฑ ๊ณผ์ @Where(clause = "is_deleted = false")@SQLDelete(sql = "UPDATE member SET is_deleted = true WHERE member_id = ?")@Where๋ฅผ ์ฌ์ฉํ์ฌ is_deleted๊ฐ false์ธ ๋ฐ์ดํฐ๋ง ์กฐํํ๋๋ก ์ค์ ํ๋ค.@SQLDelete๋ฅผ ํ์ฉํ์ฌ ์ญ์ ์์ฒญ ์ Soft Delete๋๋๋ก SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.. 2025. 2. 4. [ KPT ํ๊ณ ] ํ๋ฌ์ค ์ฃผ์ฐจ ๊ฐ์ธ ๊ณผ์ ํ๋ฌ์ค ์ฃผ์ฐจ ๊ฐ์ธ ๊ณผ์ Keep : ์ด๋ฒ ๊ณผ์ ์์ ์ ์งํ์ผ๋ฉด ํ๋ ๋ถ๋ถ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์์์ ์ฌ๊ณ ๋ ฅ ๊ฐํ๊ฐ ๋จ๊ณ๋ฅผ ์งํํ ๋๋ง๋ค '์ ์ด๊ฑธ ์ฌ์ฉํด์ผ ํ๋๊ฐ?'๋ฅผ ๊ณ ๋ฏผํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.๊ฐ๋ ์ดํด์ ํ์ฉ์๋ก์ด ๊ฐ๋ ์ ๋จ์ํ ์ ์ฉํ๋๋ฐ ๊ทธ์น์ง ์๊ณ , ์ ๋๋ก ์ดํดํ๊ณ ํ์ฉํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.๋ณต์ต์ ํตํ ๊ฐ๋ ์ ๋ฆฌ์ด๋ฏธ ์๊ณ ์๋ ๋ด์ฉ์ด๋ผ๊ณ ํด๋ ํ๋ฒ ๋ ๋ณต์ตํ๋ฉด์ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๋ ์ต๊ด์ ๊ฐ์ง๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ค. Problem : ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ์๊ฐ ๊ด๋ฆฌ์ ์ด๋ ค์์ฃผ์ด์ง ์๊ฐ ์์ ๊ณํํ๋ ์์ ์ ๋ชจ๋ ๋๋ด์ง ๋ชปํ๋ค.๋ถ์์ ํ ์ง์ ํ์ธ์๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ค์ ๋ก ๋ช ํํ๊ฒ ์ดํดํ์ง ๋ชปํ ๋ด์ฉ๋ค์ด ์กด์ฌํ๋ค.์๋ก์ด ๊ฐ๋ ์ ์ฉ์ ์ด๋ ค์์๋ก์ด ๊ฐ๋ ์ ์ตํ๋ ๋ฐ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ์ง ์์ง๋ง, ์ ์ฉ์์ ์๊ฐ์ด ์ค๋ ์์๋์.. 2025. 1. 27. [ ํธ๋ฌ๋ธ ์ํ ] 403 Forbidden ์๋ฌ์ SecurityContextHolder ๋ฌธ์ ํด๊ฒฐํ๊ธฐ Spring Security๋ฅผ ์ด์ฉํด์ ๊ถํ๋ณ URL ์ ๊ทผ์ ์ค์ ํ๋ ์ค, 403 Forbidden ์๋ฌ๋ฅผ ๋ง์ฃผํ๋ค.๋ฌธ์ ์ํฉ๋ค์๊ณผ ๊ฐ์ด /admin/** ์ /users/** ์ ๋ํ ๊ถํ์ ์ค์ ํ ์ํ์์ ADMIN ๊ณ์ ์ผ๋ก ์ ๊ทผํ ๋ 403 Forbidden ์๋ฌ๊ฐ ๋ฐ์ํ๋ค..requestMatchers("/admin/**").hasRole("ADMIN").requestMatchers("/users/**").hasRole("USER")๋ฌธ์ ์์ธ ๋ถ์JwtFilter์์ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization)๋ฅผ ์ฒ๋ฆฌํ๋ฉด์ ๋ฐ์ํ๋ค.Spring Security๊ฐ ๋ด๋ถ์ ์ผ๋ก SecurityContextHolder๋ฅผ ์ด์ฉํด ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ฐ, JwtFilter์์ Secu.. 2025. 1. 27. [ ํธ๋ฌ๋ธ ์ํ ] The bean 'jwtFilter' could not be registered ์๋ฌ ํด๊ฒฐํ๊ธฐ Spring ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง์ฃผํ ๋๊ฐ ์๋ค.The bean 'jwtFilter', defined in class path resource [org/example/expert/config/FilterConfig.class], could not be registered. A bean with that name has already been defined in file [/Users/t2023-m0071/IdeaProjects/spring-plus/build/classes/java/main/org/example/expert/config/JwtFilter.class] and overriding is disabled.๋ฌธ์ ์ํฉ์ ์๋ฌ๋ JwtFilter.class์์ ์ด๋ฏธ Bean์ผ.. 2025. 1. 27. [ ํ KPT ํ๊ณ ] ์์์์ฑ ํ๋ก์ ํธ ์์์์ฑ ํ๋ก์ ํธ Keep: ์ด๋ฒ ๊ณผ์ ์์ ์ ์งํ์ผ๋ฉด ํ๋ ๋ถ๋ถ์ํต ๊ด๋ จํ์ ๊ฐ์ ์ํํ ์ํต ๋๋ถ์ ์ถฉ๋์ ์ต์ํํ๊ณ ํ๋ก์ ํธ๋ฅผ ์์กฐ๋กญ๊ฒ ์งํํ ์ ์์๋ค.์ปค๋ฎค๋์ผ์ด์ ์ด ํธ์ํด์ ์๊ฒฌ์ ์ ์ํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ ์๊ฒฌ์ ์์ฉํ๋ ๊ณผ์ ์ด ๋งค์ฐ ๊ธ์ ์ ์ด์๋ค.ํ๋ก์ ํธ ์ ๊ทน์ฑ๋ชจ๋๊ฐ ํ๋ก์ ํธ์ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ๋ฉฐ ์ฑ ์๊ฐ์ ๋ณด์ฌ์ฃผ์๋ค.GitHubFork๋ฅผ ์ฌ์ฉํด ๊ฐ์ Repository์์ ์์ ํ ๋ค Pull Request๋ก ํฉ์น๋ ์ ๋ต์ด ํ์ ์ ํจ๊ณผ์ ์ด์๋ค.์ฝ๋ ์ปจ๋ฒค์ ์ ํด์ง ์ฝ๋ ์ปจ๋ฒค์ ์ ์ฒ ์ ํ ์ค์ํด ์ฝ๋ ๋ฆฌ๋ทฐ์ ์ดํด๊ฐ ์์ํ๋ค. Problem: ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ๋ฌธ์ ์ : API ์์ ์ฒ์ ์ค๊ณํ๋ API๋ฅผ ํ๋ก์ ํธ ์งํ ์ค ์ฌ๋ฌ ๋ฒ ์์ ํด์ผ ํ๊ณ , ์ด๋ก ์ธํด ๊ฐ๋ฐ ์ผ์ ์ ์ํฅ์ ๋ฐ์๋ค.๋ฌธ์ ์ : ํ ์คํธ ์ฝ๋ ์์ฑํ .. 2025. 1. 13. ์ด์ 1 2 3 ๋ค์