Spring Framework/Spring & Spring Boot
xml ํ์์ ์์ธ ์ค์๊ฐ ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ์ฑํ๊ณ DB์ ์ ์ฅํ๋ ๋ฐ๊น์ง 442์ด(7๋ถ 22์ด) ์์๋๋ค.ํ ์ง์ญ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๋ ๋ฐ 3~10์ด ๊ฐ๋ ์์๋๊ณ , ์ด 115๊ณณ์ ๊ฐ์ ธ์์ผํ๋ฏ๋ก ์ฝ 7-8๋ถ ์์๋๋ ๊ฒ์ด์๋ค. ์๋ ๊ฐ์ ธ์์ผํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ์ ์ด์ ์ฃผ์์ฐฝ์ xml์ด ์กด์ฌํ๋ url์ ์์ฒญํ์ ๋ 3~5์ด ์ ๋ ์ง์ฐ๋จ์ด ๋ฐ์ํ๊ธด ํ๋ค. ๊ฝค ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ค ์ฑ๋ฅ์ ๊ฐ์ ์ํค๊ธฐ ์ํด ์ฌ๋ฌ ๋ฐฉ์๋ค์ ์๋ํด๋ดค๋ค... CompletableFuture ๋?Java 8์์ ์ถ๊ฐ๋ ํด๋์ค๋ก ๋น๋๊ธฐ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ์๋ฃ๋ ๊ฒฐ๊ณผ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๊ธฐ์กด์ ์๋ Java5์ Future ์ธํฐํ์ด์ค์ ํ๊ณ์ ์ ๊ฐ์ ์ํจ ๊ฒ์ด๋ค. ๋๋ณด๊ธฐ๐น Future๋ ?๐ ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ..
Spring Framework/๐ ์๋ฌ ๊ธฐ๋ก
์ด๋ค ์ํฉ์ธ์ง...์ธ๋ถ API๋ฅผ ํธ์ถํ๊ณ ์๋ต ๊ฐ์ ๋ฐ์ ๋ ๋ฐ์ํ ๋ฌธ์ ์ด๋ค.Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.core.codec.DecodingException: JSON decoding error: Unexpected character (''' (code 39)): was expecting double-quote to start field name] with root cause ํด์ํด๋ณด๋ฉด ์๋ต ๊ฒฐ๊ณผ๊ฐ single quotes์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ก ํ์ฑํ์ง ๋ชปํ๋ค๋ ๊ฒ ๊ฐ๋ค. ์ฐธ๊ณ ๋ก ๋ด๊ฐ ์์ฑ..
Spring Framework/๐ ์๋ฌ ๊ธฐ๋ก
DB์ ์๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ์กฐ๋ฆฌ ์ญ์ ํ๊ณ ๋ค์ save ํด์ผํ๋ค.์ฒ์์๋ deleteAll()๋ก ์ญ์ ํ ํ saveAll()ํ๋ ๊ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.ํ์ง๋ง ์คํ์์ผ๋ณด๋ ์์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. delete๊ฐ ๋์ง ์๊ณ save๋ฅผ ํ๋ ค๊ณ ํ๋ ์ค๋ณต๋ ํค๊ฐ ์๋ค๊ณ ๋์ค๋ ๋ฏํ๋ค. deleteAll()์ฃ๋ค select๋ง ํ๊ณ delete๋ ํ์ง ์์๋ค.๊ฒฐ๊ตญ delete๋ฅผ ํ์ง ์๊ณ saveAll()์ ๋ง๋ insertํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ ์ค๋ณต๋ ํค๊ฐ ์๋ค๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. ๐น deleteAll() deleteAll() ๋ฉ์๋๋ฅผ ๋ค์ด๊ฐ์ ํ์ธํด๋ณด๋ findAll()๋ก ๋ชจ๋ ์ํฐํฐ๋ฅผ ์ฐพ๊ณ ํ๋์ฉ ์ญ์ ํ๋ค. ๊ฐ ์ํฐํฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ญ์ ํ๊ณ , ํธ๋์ญ์
์ด commit๋ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ..
Spring Framework/JPA
[Failed to add the foreign key constraint. Missing index for constraint 'FKe6nwysthx2dnq1ikoe3u9gkxp' in the referenced table 'area'] ์ด ERROR๊ฐ ์ฐธ ๊ฑฐ์ฌ๋ ธ๋ค. ERROR์์๋ ๋ฐ์ดํฐ๊ฐ ์๋ง๊ฒ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ถฉ ์ด๋ค ์๋ฌ์ธ์ง๋ ํ์
ํ๋ค.area_code๊ฐ unique ์กฐ๊ฑด์ด ๊ฑธ๋ ค์์ง ์๊ธฐ ๋๋ฌธ์ FK ์ ์ฝ์กฐ๊ฑด์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ค ์ํฉ์ธ์ง...Weather ์ํฐํฐ์ Area ์ํฐํฐ๊ฐ ์ผ๋์ผ ๋งคํ๋์ด์๊ณ ,referencedColumnName ์ต์
์ ์ค์ AREA_CODE๋ก Area ํ๋๋ฅผ ์ฐธ์กฐํ๋ค. @Entity@Table(name = "WEATHER")public class ..
Spring Framework/Spring & Spring Boot
์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String currentPrincipalName = authentication.getName(); UserDetails userDetails = (UserDetails) authentication.getPrincipal(); ์์ ์๋ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ด์ฉํด์ ์ ์ ๋ฅผ ๋ถ๋ฌ์๋ค. SecurityContext์ ์ธ์ฆ๋ Authentication ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋๊ณ ํ์ฌ ์ค๋ ๋ ๋ด์์ ๊ณต์ ๋์ด ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด getName()๋ง ๋ถ๋ฅผ ์๋ฐ์ ์๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์๋..
Spring Framework/JPA
์คํ๋ง๋ถํธ ํ๋ก์ ํธ๋ฅผ ์คํ์ํค๋ฉด ์์ ๊ฐ์ WARN์ด ํ์๋๋ค. spring.jpa.open-in-view์ ๊ธฐ๋ณธ๊ฐ์ true์ด๋ฉฐ ํด๋นํ๋ WARN์ false ๊ฐ์ผ๋ก ์ง์ ํด์ฃผ๋ฉด ์์ด์ง๋ค. ๋ฐฐํฌ์ฉ ์ชฝ yml ํ์ผ์ spring.jpa.open-in-view๋ฅผ false๋ก ํด์ฃผ์๊ณ , ๋ก์ปฌ ์ชฝ์๋ ๋ณ๋ค๋ฅธ ์ง์ ์ ํ์ง ์๊ณ ๋ฐฐํฌํ๋๋ ๋ฐฐํฌ ์ฌ์ดํธ์์ ๊ธ ์ ์ฒด๊ฐ ์กฐํ๋์ง ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค. open-in-view:false ๋ฅผ ์ฃผ์์ฒ๋ฆฌํ๋ ๋คํํ ๊ธ ์ ์ฒด ์กฐํ๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ค. open-in-view๊ฐ ๋ฌด์์ด๊ธธ๋ ์กฐํ์ ์ํฅ์ ๋ฏธ์น๋์ง ์์๋ณด๊ฒ ๋ค! ๋๋ณด๊ธฐ ์์ ์ ๋ค์๋ ๊น์ํ ๊ฐ์ฌ๋์ '์ค์ ! ์คํ๋ง๋ถํธ์ JPA ํ์ฉ2 - API ๊ฐ๋ฐ ์ฑ๋ฅ์ต์ ํ' ๊ฐ์์์ ์น์
5 API ๊ฐ๋ฐ ๊ณ ๊ธ-์ค๋ฌด ํ์ ์ต์ ํ -..
Spring Framework/Spring & Spring Boot
Spring Security๋ฅผ ๊ตฌํํ๋ค๋ณด๋ฉด filter์ interceptor๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ํํฐ์ ์ธํฐ์
ํฐ์ ๋ํ ๊ฐ๋
์ ์ดํดํ๋ฉด Spring Security ๊ณผ์ ์ ํ์
ํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๊ธฐ์ ๊ธฐ๋กํ๋ค! โจ ์ฉ๋ - ๊ณตํต๊ด์ฌ์ฌํญ (Cross-cutting concern) ๐ ์น ์๋น์ค์์ ๋ก๊ทธ์ธ์ ํด์ผ ๋ค์ํ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ผ๋ฉฐ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์๋ ํ์ด์ง๊ฐ ๋ค๋ฅด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํ ๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ก์ง์ ๋ก๊ทธ์ธ๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผํ ํ
๋ฐ... ์ด๋ ๊ฒ ๋๋ค๋ฉด ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฒ์ด๊ณ ๋ณต์กํด์ง ๊ฒ์ด๋ค. ๋ง์ ๋ก์ง์์ ๊ณตํต์ผ๋ก ๊ด์ฌ ์๋ ๋ถ๋ถ์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ด๋ผ๊ณ ํ๋ฉฐ ์ด๋ฅผ ์คํ๋ง์ AOP๋ก๋ ํด๊ฒฐํ ์ ์์ง๋ง ์น์์๋ ์๋ธ๋ฆฟ ํํฐ์ ์คํ๋ง ์ธํฐ์
ํฐ๋ก ์ฒ๋ฆฌํ ์ ์..
Spring Framework/JPA
JPA ์ํฐํฐ์์ ์์ฑ์๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด ๋์ผ๋ฉด ๊ธฐ๋ณธ์์ฑ์(@NoArgsConstructor๋ฅผ ์ ์ํด์ผํ๋ค๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. + public, protected๋ก ์ ์ธํด์ผํจ ! ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ ์ํด์ผํ๋ ์ด์ ๋ฅผ ์ ํํ๊ฒ ์ค๋ช
ํ ์ ์์ด์ ์ ๋ฆฌํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๊ฒ ๋ค. ๐ ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด Java Reflection API์์ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. JPA๋ DB ๊ฐ์ ๊ฐ์ฒด ํ๋์ ์ฃผ์
ํ ๋, ๋์ ์ผ๋ก ์ํฐํฐ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ณธ์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ Reflection์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์๋ฐ์์๋ Reflection์ด๋ผ๋ API๋ฅผ ์ ๊ณตํ๋๋ฐ, ๊ทธ๋ผ Reflection์ ๋ญ๊น.... Java Reflection ์๋ฐ์์๋ Reflection์ด๋ผ๋ API๋ฅผ ์ ๊ณตํ๋ค. R..