์นดํ
๊ณ ๋ฆฌ ์์
๐ QueryDsl์ ๋ํ ์์ธํ ๊ฐ๋
๋ค์ ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด์ฃผ์ธ์. โ๏ธ N+1 ๋ฌธ์ ๋? ์ฐ๊ด ๊ด๊ณ์์ ๋ฐ์ํ๋ ์ด์๋ก, ์ผ๋๋ค์ ์ฐ๊ด ๊ด๊ณ๊ฐ ์ค์ ๋ ์ํฐํฐ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ์ ์กฐํ๋ ๋ฐ์ดํฐ ๊ฐ์(n)๋งํผ ์ฐ๊ด ๊ด๊ณ์ ์กฐํ ์ฟผ๋ฆฌ๊ฐ ์ถ๊ฐ๋ก ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ฒ ๋๋ ๊ฒ ๐ ์ฆ, 1๋ N(์ผ๋๋ค)์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ
์ด๋ธ์ด ์์ ๊ฒฝ์ฐ์, 1 ์ชฝ์ ํ
์ด๋ธ์ ์กฐํํ๋ฉด ๊ทธ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ
์ด๋ธ๋ค(N)์ด ํจ๊ป ์กฐํ๊ฐ ๋์ด 1+N๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋งํฉ๋๋ค. โ N+1 ๋ฌธ์ ์ ์์ธ JPARepository์ ์ ์ํ ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ์คํํ๋ฉด JPA๋ ๋ฉ์๋ ์ด๋ฆ์ ๋ถ์ํด์ JPQL์ ์์ฑํ์ฌ ์คํํ๊ฒ ๋ฉ๋๋ค. JPQL์ SQL์ ์ถ์ํํ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ก์จ ํน์ SQL์ ์ข
์๋..
์นดํ
๊ณ ๋ฆฌ ์์
โ๏ธ QueryDsl ์ ์ ํ์
(์ปดํ์ผ ์ ํ์
์ ๋ํ ์ ๋ณด๋ฅผ ๊ฒฐ์ )์ ์ด์ฉํด์ SQL๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ SQL, JPQL์ ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋น๋ API Entity ํด๋์ค์ ๋งคํ๋๋ QClass ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ ์คํ โ๏ธ QClass Entity์ ํํ๊ฐ ๊ฐ์ Static Class QueryDsl์ ์ปดํ์ผ ๋จ๊ณ์์ ์ํฐํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก QClass๋ฅผ ์์ฑํจ JPAAnnotationProcessor๊ฐ ์ปดํ์ผ ์์ ์ ์๋ํด์ @Entity ๋ฑ์ ์ ๋ํ
์ด์
์ ์ฐพ์ ํด๋น ํ์ผ๋ค์ ๋ถ์ํด์ QClass๋ฅผ ๋ง๋ฆ ๊ณต์ ์ฌ์ดํธ ๐ก ์ QueryDsl์ ์ฌ์ฉํ ๊น? ์ค์ ๋ก Query๋ฅผ ์ฌ๋์ด ์ง๋ค๋ณด๋ฉด ์๋ง์ ์ฟผ๋ฆฌ๋ฅผ ์์์
์ผ๋ก ์์ฑํด์ผํ๋๋ฐ ์ฌ๋์ด ํ๋ค๋ณด๋ฉด ์ค์..
์นดํ
๊ณ ๋ฆฌ ์์
๐ ์บ์์ ๋ํ ์์ธํ ๊ฐ๋
๋ค์ ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด์ฃผ์ธ์. โ๏ธ Ehcache Java์ ๋ํ์ ์ธ ์บ์ ์์ง ์ค์ ํ๋ โ ํน์ง ๊ฒฝ๋์ ๋น ๋ฅธ ์บ์ ์์ง ํ์ฅ(scable) โ ๋ฉ๋ชจ๋ฆฌ & ๋์คํฌ ์ ์ฅ ์ง์, ๋ฉํฐ CPU์ ๋์ ์ ๊ทผ์ ํ๋ ๋ถ์ฐ ์ง์ โ ๋๊ธฐ/๋น๋๊ธฐ ๋ณต์ฌ, ํผ์ด(peer) ์๋ ๋ฐ๊ฒฌ ๋์ ํ์ง โ Hibernate, Confluence, Spring ๋ฑ์์ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, Gaia ์ปดํฌ๋ํธ์์๋ EHCache๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ๊ตฌํ โ ์ฅ์ ๋๊ท๋ชจ์ ๋์์ฑ ์์คํ
์ ์ํด ์ค๊ณ๋์ด ๋น ๋ฅด๊ณ ๋จ์ํ๋ฉฐ, ์ฑ์ ์ต๋ํ ๊ฐ๋ณ๊ฒ ์ ์งํ์ฌ ์์ ๊ณต๊ฐ์ ์ ์ง [์ฐธ๊ณ ] https://www.ehcache.org/about/features ์บ์์ ๋ณด๊ด๋ ์ ๋ณด์ ๋ณต์ฌ๋ณธ์ ๊ฐ์ ธ์ ๋ฉ์๋์ ์คํ ํ์ ์ค์ฌ์ค ๋์..
์นดํ
๊ณ ๋ฆฌ ์์
๐ ์บ์์ ๋ํ ์์ธํ ๊ฐ๋
๋ค์ ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด์ฃผ์ธ์. โ๏ธ Spring ์บ์(Cache)์ ์ถ์ํ ์บ์๋ ํธ๋์ญ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก AOP๋ฅผ ์ด์ฉํ์ฌ, ์บ์ ๊ด๋ จ ๋ก์ง์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํ ๋ฟ๋ง ์๋๋ผ, ๋ฉ์๋์ ์์ฝ๊ฒ ์บ์ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋, Spring์ ์บ์ ๊ตฌํ ๊ธฐ์ ์ ์ข
์๋์ง ์๋๋ก ์ถ์ํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ์ด ๋ฐ๋๊ฑฐ๋ ์ ์ฉํ ์บ์ ๊ธฐ์ ์ ๋ณ๊ฒฝํด๋ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. โ ์บ์ ์ฌ์ฉ๋ฒ 1. build.gradle์ ์์กด์ฑ ์ถ๊ฐ implementation 'org.springframework.boot:spring-boot-starter-cache' 2. Application ๋ฒ์์ @EnableCaching ์ ๋ํ
์ด์
์ถ๊ฐ 3...
์นดํ
๊ณ ๋ฆฌ ์์
๐ ์บ์์ ๋ํ ์์ธํ ๊ฐ๋
๋ค์ ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด์ฃผ์ธ์. ๐ฌ 2์ฐจ ์บ์ ์ฌ์ฉ ์ด์ ํ๋ก์ ํธ์ ํ
์ด๋ธ์ด ๋ง์์ง๊ณ ์ฐ๊ด๊ด๊ณ๊ฐ ๋ง์์ง๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ/๊ฒ์ฆ ํ๋ ๋ฐ ๋ง์ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๊ฒ ๋์์ต๋๋ค. ๋, ์ด๋ฌํ ์ฟผ๋ฆฌ๋ค์ด ๋ง์์ง๋ฉด์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ฒ์ ๋คํธ์ํฌ ํธ๋ํฝ ์ฆ๊ฐ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋ฌผ๋ก Hibernate์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ 1์ฐจ ์บ์๊ฐ ์์ง๋ง, ์ด๋ ์์์ฑ ์ปจํ
์คํธ์ ์๋ช
์ฃผ๊ธฐ์ ๋์ผํ์ฌ ํธ๋์ญ์
์ด ์ข
๋ฃ๋๋ฉด ํจ๊ป ์ข
๋ฃ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด 1์ฐจ ์บ์๋ ์บ์ฑ ๊ด์ ์์ ํ
์ดํฐ ๋ฒ ์ด์ค ์ ๊ทผ ํ์๋ฅผ ์ค์ด๋ ์ญํ ์ ํฌ๊ฒ ํ์ง๋ ์์ต๋๋ค. ์ด Hibernate 2์ฐจ ์บ์๋ ์ ํ๋ฆฌ์ผ์ด์
๋จ์์ ์บ์์ด๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋๊ธฐ ์ ๊น์ง๋ ์ข
๋ฃ๋์ง ์๊ธฐ ๋๋ฌธ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋งค๋ฒ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์กฐํํ์ง ..
• JAVA
ํ๋ก์ ํธ์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ธ ๊ฐ์ง ์ ๋ํ
์ด์
๋ค์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค! ์๋ฐ์์ @NotNull, @NotEmpty, @NotBlank๋ ๋ชจ๋ ์ ํจ์ฑ ๊ฒ์ฆ(validation)์ ์ํด ์ฌ์ฉ๋๋ ์ ๋ํ
์ด์
์
๋๋ค. ์ด ์ธ๊ฐ์ง๊ฐ ๋น์ทํ์ง๋ง ์ฐจ์ด๊ฐ ๋ถ๋ช
ํ ์๊ธฐ ๋๋ฌธ์, ์ ์์์ผ ์ฉ๋์ ์๋ง๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. โ @NotNull The annotated element must not be null. Accepts any type. @NotNull ์ ๋ํ
์ด์
์ ๋ง ๊ทธ๋๋ก null ๊ฐ๋ง ํ์ฉํ์ง ์์ต๋๋ค. ๋งค๊ฐ๋ณ์, ํ๋ ๋๋ ๋ฉ์๋ ๋ฐํ ๊ฐ์ด Null์ธ์ง ์ฒดํฌํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ , NullPointerException์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ "" / " "์ ๊ฐ์ ๋น๋ฌธ์..