2021-03-25(Thu)
ํญ๋ชฉ | ๋ด์ฉ |
ํ์ต ๋ ์ง | 2021-03-25(๋ชฉ) |
ํ์ต ์๊ฐ | 11:00~23:00 |
ํ์ต ๋ฒ์ ๋ฐ ์ฃผ์ | ์คํ๋ง๋ถํธ |
ํ์ต ๋ชฉํ | ์คํ๋ง๋ถํธ ๊ธฐ๋ณธ ๊ฐ๋ ์ ํ์ตํ๋ค. |
๋๋ฃ ํ์ต ๋ฐฉ๋ฒ | - |
์์ธ ํ์ต ๋ด์ฉ
JPA?
ํ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB, Relational Database)๋ ๋น ์ง ์ ์๋ ์์์ด๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ํ๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ณ์ํด์ ์น ์๋น์ค์ ์ค์ฌ์ด ๋๋ฉด์ ๋ชจ๋ ์ฝ๋๋ SQL ์ค์ฌ์ด ๋์ด๊ฐ๋ฉฐ, ํ์ ํ๋ก์ ํธ ๋๋ถ๋ถ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ณด๋ค SQL๋ก ๊ฐ๋ํ๊ฒ ๋์๋ค.
์ด๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ SQL๋ง ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๊ทธ๋์ ๊ฐ ํ ์ด๋ธ๋ง๋ค ๊ธฐ๋ณธ์ ์ธ CRUD SQL์ ๋งค๋ฒ ์์ฑํด์ผ ํ๋ค. ์๋ฌด๋ฆฌ ์๋ฐ ํด๋์ค๋ฅผ ์๋ฆ๋ต๊ฒ ์ค๊ณ๋ฅผ ํด๋ SQL์ ํผํ ์ ์๋ค.
์ด๋ฐ ์ํฉ์์ ๋ค์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ๋ณต ์์
์๋ฐฑ ๊ฐ์ ํ ์ด๋ธ์ด ์๋๋ฐ ์ด ํ ์ด๋ธ์ ๋ช ๋ฐฐ์ SQL์ ๋ง๋ค๊ณ ์ ์ง๋ณด์ ํด์ผํ๋ง ํ๋ค.
ํจ๋ฌ๋ค์ ๋ถ์ผ์น
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง์ ์ด์ ์ด ๋ง์ถฐ์ง ๊ธฐ์ ์ด๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ฅ๊ณผ ์์ฑ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ ๊ธฐ์ ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์์, 1:N ๋ฑ ๋ค์ํ ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ ๊ตฌํํ ์ ์๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์๋ง ์ง์คํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ SQL์ ์ข ์์ ์ธ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ค.
JPA๋ ์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค. 1) ๋ฐ๋ณต์ ์ค์ด๊ณ 2) ์ค๊ฐ์์ ํจ๋ฌ๋ค์ ์ผ์น๋ฅผ ์์ผ์ค๋ค.
Spring Data JPA
JPA๋ ์ธํฐํ์ด์ค๋ก์ ์๋ฐ ํ์ค๋ช ์ธ์์ด๋ค. ์ธํฐํ์ด์ค์ธ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ตฌํ์ฒด๊ฐ ํ์ํ๋ค. ๋ํ์ ์ผ๋ก Hibernate, Eclipse Link ๋ฑ์ด ์์ง๋ง, Spring์์ JPA๋ฅผ ์ฌ์ฉํ ๋๋ ์ด ๊ตฌํ์ฒด๋ค์ ์ง์ ๋ค๋ฃจ์ง ์๋๋ค. ๊ตฌํ์ฒด๋ค์ ํ๋ฒ ๋ ์ถ์ํ์ํจ Spring Data JPA๋ผ๋ ๋ชจ๋์ ์ด์ฉํด์ JPA ๊ธฐ์ ์ ๋ค๋ฃฌ๋ค.
์ด๋ฅผ ํตํด ์๋ ๋ ์ด์ ์ ๊ฐ์ง๋ค.
๊ตฌํ์ฒด ๊ต์ฒด์ ์ฉ์ด์ฑ ex) Redis ํด๋ผ์ด์ธํธ๋ฅผ Jedis์์ Lettuce๋ก ๋ณ๊ฒฝํ ๋
์ ์ฅ์ ๊ต์ฒด์ ์ฉ์ด์ฑ(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ๋ค๋ฅธ ์ ์ฅ์๋ก ์ฝ๊ฒ ๊ต์ฒด) ex) ํธ๋ํฝ์ด ๋ง์์ ธ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ ๊ฐ๋น์ด ๋์ง ์์ ๋ MongoDB๋ก ๊ต์ฒด๊ฐ ํ์ํ๋ค๋ฉด Spring Data JPA์์ Spring Data MongoDB๋ก ์์กด์ฑ๋ง ๊ต์ฒดํ๋ฉด ๋จ.
์ค๋ฌด์์์ JPA
์ค๋ฌด์์๋ ๋์ ๋ฌ๋ ์ปค๋ธ ๋๋ฌธ์ JPA๋ฅผ ์ ์ฌ์ฉํ์ง ๋ชปํ๊ณค ํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ ๋ค ์ดํดํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ ์ด์๋ ํด๊ฒฐ์ฑ ์ด ๋ง์์ ์ ์ฐ๋ฉด ์ถฉ๋ถํ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ๋งํผ์ ํผํฌ๋จผ์ค๋ฅผ ๋ผ ์ ์๋ค.
Repository
Respository๋ ibatis๋ MyBatis ๋ฑ์์๋ Dao๋ผ๊ณ ๋ถ๋ฆฌ๋ DB Layer ์ ๊ทผ์์ด๋ค. JPA์์ Repository๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ธํฐํ์ด์ค๋ก ์์ฑํ๋ ๊ฒ์ด๋ค. ๋จ์ํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑ ํ, JpaRepository<Entity ํด๋์ค, PK ํ์ >์ ์์ํ๋ฉด ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฉ์๋๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
์ฃผ์ ํ ์
@Repository๋ฅผ ์ถ๊ฐํ ํ์๋ ์๋ค.
Entity ํด๋์ค์ ๊ธฐ๋ณธ Entity Repository๋ ํจ๊ป ์์นํด์ผ ํ๋ค. Entity ํด๋์ค๋ ๊ธฐ๋ณธ Repository ์์ด๋ ์ ๋๋ก ์ญํ ์ ํ ์๊ฐ ์๋ค.
์์ฑ์ vs ๋น๋ ํด๋์ค
๋น๋ ํด๋์ค๋ @Builder๋ฅผ ํตํด ์ ๊ณตํ ์ ์๋ค. ์์ฑ์๋ ๋น๋๋ ์์ฑ ์์ ์ ๊ฐ์ ์ฑ์์ฃผ๋ ์ญํ ์ ๋๊ฐ๋ค. ๋ค๋ง, ์์์๋ ์ง๊ธ ์ฑ์์ผ ํ ํ๋๊ฐ ๋ฌด์์ธ์ง ๋ช ํํ ์ง์ ํ ์๊ฐ ์๋ค. ๋ฐ๋ฉด ๋น๋๋ ์ด๋ ํ๋์ ์ด๋ค ๊ฐ์ ์ฑ์์ผํ ์ง ๋ช ํํ๊ฒ ์ธ์งํ ์ ์๋ค.
JPA์ ์์์ฑ ์ปจํ
์คํธ๊ณผ ๋ํฐ ์ฒดํน
์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ์ด๋ค. ์ผ์ข ์ ๋ ผ๋ฆฌ์ ๊ฐ๋ ์ด๋ฉฐ, JPA์ ํต์ฌ ๋ด์ฉ์ ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ํฌํจ๋์ด ์๋ ์๋๋๋ก ๊ฐ๋ฆฐ๋ค. JPA์ ์ํฐํฐ ๋งค๋์ ๊ฐ ํ์ฑํ๋ ์ํ๋ก(Spring Data JPA๋ฅผ ์ด๋ค๋ฉด ๊ธฐ๋ณธ ์ต์ ์) ํธ๋์ญ์ ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ด ๋ฐ์ดํฐ๋ ์์์ฑ ์ปจํ ์คํธ๊ฐ ์ ์ง๋ ์ํ์ด๋ค.
์ด ์ํ์์ ํด๋น ๋ฐ์ดํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ํธ๋์ญ์ ์ด ๋๋๋ ์์ ์ ํด๋น ํ ์ด๋ธ์ ๋ณ๊ฒฝ๋ถ์ ๋ฐ์ํ๋ค. ์ฆ, Entity ๊ฐ์ฒด์ ๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ณ๋๋ก Update ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆด ํ์๊ฐ ์ ๋ค๋ ๊ฒ์ด๋ค. ์ด ๊ฐ๋ ์ ๋ํฐ ์ฒดํน(Dirty Checking)์ด๋ผ๊ณ ํ๋ค.
JPA Auditing์ผ๋ก ์์ฑ์๊ฐ/์์ ์๊ฐ ์๋ํํ๊ธฐ
๋ณดํต ์ํฐํฐ์๋ ํด๋น ๋ฐ์ดํฐ์ ์์ฑ์๊ฐ๊ณผ ์์ ์๊ฐ์ ํฌํจํ๋ค. ์ ์ง๋ณด์์ ์ ์ฉํ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌธ์ ๋ ๋งค๋ฒ DB์ ์ฝ์ ํ๊ธฐ ์ , ๊ฐฑ์ ํ๊ธฐ ์ ์ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋ก/์์ ํ๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด๋ฐ ์ค๋ณต์ JPA Auditing์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
LocalDate ์ฌ์ฉ
Java8๋ถํฐ LocalDate์ LocalDateTime์ด ๋ฑ์ฅํ๋ค. ๊ธฐ์กด Date ํ์ ์ ๋ฌธ์ ์ ์ ๊ณ ์น ํ์ ์ด๋ผ Java8์ด๋ฉด ๋ฌด์กฐ๊ฑด ์จ์ผํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก ๊ธฐ์กด Date ํ์ ์ ๋ฌธ์ ์ ์ ์๋์ ๊ฐ๋ค.
๋ถ๋ณ(๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ) ๊ฐ์ฒด๊ฐ ์๋๋ค.
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ธ์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Calendar๋ ์(Month) ๊ฐ ์ค๊ณ๊ฐ ์๋ชป๋์๋ค.
10์์ ๋ํ๋ด๋ Calendar.OCTOBER์ ์ซ์ ๊ฐ์ '9'์ด๋ค.
Spring ์น ๊ณ์ธต์ ๋ํด
Spring์ ์๋ 5๊ฐ์ง ๊ณ์ธต์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Web Layer
ํํ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ์ JSP/Freemarker ๋ฑ์ ๋ทฐ ํ ํ๋ฆฟ ์์ญ์ด๋ค.
์ด์ธ์๋ ํํฐ, ์ธํฐ์ ํฐ, ์ปจํธ๋กค๋ฌ ์ด๋๋ฐ์ด์ค ๋ฑ ์ธ๋ถ ์์ฒญ๊ณผ ์๋ต์ ๋ํ ์ ๋ฐ์ ์ธ ์์ญ์ ๋ค๋ฃฌ๋ค.
Service Layer
@Service์ ์ฌ์ฉ๋๋ ์๋น์ค ์์ญ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก Controller์ Dao์ ์ค๊ฐ ์์ญ์์ ์ฌ์ฉ๋๋ค.
@Transactional์ด ์ฌ์ฉ๋์ด์ผ ํ๋ ์์ญ์ด๊ธฐ๋ ํ๋ค.
Repository Layer
Database์ ๊ฐ์ด ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ๊ทผํ๋ ์์ญ์ด๋ค.
Dtos
Dto(Data Transfer Object) ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ๊ฐ์ฒด๋ฅผ ์ด์ผ๊ธฐํ๋ค.
์๋ฅผ ๋ค์ด ๋ทฐ ํ ํ๋ฆฟ ์์ง์์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ Repository Layer์์ ๊ฒฐ๊ณผ๋ก ๋๊ฒจ์ค ๊ฐ์ฒด ๋ฑ์ด ์ด๋ค์ ์ด์ผ๊ธฐํ๋ค.
Domain model Layer
๋๋ฉ์ธ์ด๋ผ ๋ถ๋ฆฌ๋ ๊ฐ๋ฐ ๋์์ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๊ด์ ์์ ์ดํดํ ์ ์๊ณ ๊ณต์ ํ ์ ์๋๋ก ๋จ์ํ์ํจ ๊ฒ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค. ๋น์ฆ๋์ค ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํด์ผํ ๊ณณ์ด๋ค.
์ฐธ๊ณ
Entity ํด๋์ค๋ฅผ Request/Response ํด๋์ค๋ก ์ฌ์ฉํด์๋ ์ ๋๋ค. ์ค๊น? Entity ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ฟ์ ํต์ฌ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค. Entity ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ด ์์ฑ๋๊ณ , ์คํค๋ง๊ฐ ๋ณ๊ฒฝ๋๋ค. ํ๋ฉด ๋ณ๊ฒฝ์ ์์ฃผ ์ฌ์ํ ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ธ๋ฐ, ์ด๋ฅผ ์ํด ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐ๋ Entity ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ฌด ํฐ ๋ณ๊ฒฝ์ด๋ค. ๋ฐ๋ฉด Request์ Response์ฉ Dto๋ View๋ฅผ ์ํ ํด๋์ค๋ผ ์ ๋ง ์์ฃผ ๋ณ๊ฒฝ์ด ํ์ํ๋ค.
์๋ฒ ํ
ํ๋ฆฟ ์์ง๊ณผ ๋จธ์คํ
์น(Mustache)
์น ๊ฐ๋ฐ์์ ํ ํ๋ฆฟ ์์ง์ด๋, ์ง์ ๋ ํ ํ๋ฆฟ ์์๊ณผ ๋ฐ์ดํฐ๊ฐ ํฉ์ณ์ ธ HTML ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ ์ํํธ์จ์ด๋ฅผ ์ด์ผ๊ธฐํ๋ค. JSP, Freemarker ๋ฑ์ ์๋ฒ ํ ํ๋ฆฟ ์์ง์ด๋ ๋ฆฌ์กํธ, ๋ทฐ์ View ํ์ผ ๊ฐ์ ํด๋ผ์ด์ธํธ ํ ํ๋ฆฟ ์์ง๋ค์ด ์ฌ๊ธฐ์ ์ํ๋ค.
๋ ๋ชจ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ง์ ๋ ํ ํ๋ฆฟ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ HTML์ ์์ฑํ๋ ํ ํ๋ฆฟ ์์ง์ด๋ค.
์๋ฒ ํ ํ๋ฆฟ ์์ง์ ์ด์ฉํด์ ํ๋ฉด์ ์์ฑํ๋ค๋ฉด, ์๋ฒ์์ Java ์ฝ๋๋ก ๋ฌธ์์ด์ ๋ง๋ ๋ค ์ด ๋ฌธ์์ด์ HTML๋ก ๋ณํํ์ฌ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌํ๋ค.
์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด HTML์ ๋ง๋๋ ๊ณผ์ ์์ System.out.println("test");
๋ฅผ ์คํํ ๋ฟ์ด๋ค. ์ด ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋จ์ํ ๋ฌธ์์ด์ผ ๋ฟ์ด๋ค.
๋ฐ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ ์์์ ์๋ํ๋ค. ์์์ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋๋ ์ฅ์๋ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ด๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์์ ์๋๋ ๋๋ ์๋ฒ ํ ํ๋ฆฟ ์์ง์ ์์ ๋ฒ์ด๋ ์ ์ดํ ์ ์๋ค.
๋จธ์คํ ์น๋ ์๋ง์ ์ธ์ด๋ฅผ ์ง์ํ๋ ๊ฐ์ฅ ์ฌํํ ํ ํ๋ฆฟ ์์ง์ด๋ค.
JSP, Velocity: ์คํ๋ง ๋ถํธ์์๋ ๊ถ์ฅํ์ง ์๋ ํ ํ๋ฆฟ ์์ง์ด๋ค.
Freemarker: ํ ํ๋ฆฟ ์์ง์ผ๋ก๋ ๋๋ฌด ๊ณผํ๊ฒ ๋ง์ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๋๋ฌธ์ ์๋ จ๋๊ฐ ๋ฎ์ผ๋ฉด Freemarker ์์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ถ๊ฐ๋ ํ๋ฅ ์ด ๋๋ค.
Thymeleaf: ์คํ๋ง ์ง์์์ ์ ๊ทน์ ์ผ๋ก ๋ฐ๊ณ ์์ง๋ง ๋ฌธ๋ฒ์ด ์ด๋ ต๋ค.
๋จธ์คํ ์น: ๋ฌธ๋ฒ์ด ๋ค๋ฅธ ํ ํ๋ฆฟ ์๋น๋ณด๋ค ์ฌํํ๊ณ , ๋ก์ง์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ View์ ์ญํ ๊ณผ ์๋ฒ์ ์ญํ ์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋๋ค.
์ฐธ๊ณ
๊ท๋ชจ๊ฐ ์๋ ํ๋ก์ ํธ์์์ ๋ฐ์ดํฐ ์กฐํ๋ FK์ ์กฐ์ธ, ๋ณต์กํ ์กฐ๊ฑด ๋ฑ์ผ๋ก ์ธํด ์ด๋ฐ Entity ํด๋์ค๋ง์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ ์กฐํ์ฉ ํ๋ ์์ํฌ๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํ๋ค. ๋ํ์ ์ผ๋ก querydsl, jooq, MyBatis ๋ฑ์ด ์๋ฐ. ์กฐํ๋ ์ด 3๊ฐ์ง ํ๋ ์์ํฌ ์ค ํ๋๋ฅผ ํตํด ์กฐํํ๊ณ , ๋ฑ๋ก/์์ /์ญ์ ๋ฑ์ SpringDataJpa๋ฅผ ํตํด ์งํํ๋ค.
์ด ์ค ์๋ ์ด์ ์์ Querydsl์ ์ถ์ฒํ๋ค.
ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค.
๋จ์ํ ๋ฌธ์์ด๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ๋ฉ์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์คํ๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ผ๋ช ์ ๋ช ์ํ ๊ฒฝ์ฐ IDE์์ ์๋์ผ๋ก ๊ฒ์ถ๋๋ค. ์ด ์ฅ์ ์ Jooq์์๋ ์ง์ํ์ง๋ง, MyBatis์์๋ ์ง์ํ์ง ์๋๋ค.
๊ตญ๋ด ๋ง์ ํ์ฌ์์ ์ฌ์ฉ ์ค์ด๋ค.
์ฟ ํก, ๋ฐฐ๋ฏผ ๋ฑ JPA๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ํ์ฌ์์๋ Querydsl์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ ์ค์ด๋ค.
๋ ํผ๋ฐ์ค๊ฐ ๋ง๋ค.
2๋ฒ ์ฅ์ ๊ณผ ์ด์ด์ง๋ ๊ฒ.
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
์คํ๋ง ๋ถํธ๋ฅผ ํ์ตํ์ง ์๊ณ , ์๋ฐ๋ฅผ ํ์ตํ์ง ์๊ณ ์ฑ ์ ๋ฐ๋ผ์น๋๋ฐ๋ ์๊ฐ๋ณด๋ค ์ ์ดํด๊ฐ ๋๋ค. ๊ทธ๊ฐ ํ์ตํ ๊ฒ ๋๋ถ์ ์๋๊ฐ ๋นจ๋ผ์ง๊ธด ํ๋๋ณด๋ค.
๋๋ถ์ด์ ์คํ๋ง์ ์ฐ๋ ๊ณณ์๋ ๋น์ฅ ์ทจ์ ํ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๊ฐํ๊ฒ ๋ค์๋ค. ์ผ๋จ ๋ก๊ทธ๋ฅผ ์ฝ๋ ๊ฒ๋ ์ด๋ ต๊ตฌ๋ง, ๋ ์ผ์ฆ๊ฐ ์ผ๋ง๋ ์น์ ํ ํ๋ ์์ํฌ์๋์ง ๋ค์๊ธ ๋๋๋ค.
๋ค์ ํ์ต ๊ณํ
์คํ๋ง๋ถํธ ํ์ต
Last updated