

ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ์ด๋?
ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ์ ์ฌ๋ฌ ๋จ๊ณ์ ์์
์ ์์๋๋ก ์๋์ผ๋ก ์ด์ด ๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฝ๊ฒ ๋งํด, ์ผ์ด ํ๋ฅด๋ ๊ธธ(ํ์ดํ๋ผ์ธ)์ ๋ง๋ค๊ณ , ๊ทธ ๊ธธ์ ์๋ก ์ฐ๊ฒฐํด ์์
์ด ๋๊ธฐ์ง ์๊ฒ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ ์
๋ฌด ์ฒ๋ฆฌ์์๋ ์ด์ ๋น์ทํ๊ฒ,
A ์์
์ ๊ฒฐ๊ณผ๊ฐ ์๋์ผ๋ก B ์์
์ผ๋ก ๋์ด๊ฐ๋๋ก ๊ธธ์ ๋ง๋ค์ด ๋๋ ๊ฒ์ ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ์ด๋ผ๊ณ ํฉ๋๋ค.
์ ์ค์ํ๊ฐ?
- ์๊ฐ ์ ์ฝ: ๋ฐ๋ณต ์์ ์ ์๋์ผ๋ก ์ด์ด์ค
- ์ค์ ๊ฐ์: ์ฌ๋์ด ์๋์ผ๋ก ํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ ์๋ฐฉ
- ํจ์จ ์ฆ๊ฐ: ์ ๋ฌด ์๋ ๋นจ๋ผ์ง
- ๊ท๋ชจ ํ์ฅ ๊ฐ๋ฅ: ์์ ๋์ด ๋์ด๋๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์์ฝ
- ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ = ์์ ๋จ๊ณ๋ฅผ ์๋์ผ๋ก ์ด์ด๋๋ ๊ฒ
- ๋์ ํ๋ฆ์ ๋ง๋ค๊ณ ์๋์ผ๋ก ๋ค์ ๋จ๊ณ๋ก ๋๊ธฐ๋ ์์คํ
- ๋ฐ์ดํฐ, ๊ฐ๋ฐ, ์ ๋ฌด ์๋ํ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ฌ์ฉ๋จ
โ๏ธ ์คํ๋ง์์ ์ปดํฌ๋ํธ ์ค์บ(Component Scan) ์ด๋?
์คํ๋ง์์ ์ปดํฌ๋ํธ ์ค์บ(Component Scan) ์ด๋,
์คํ๋ง์ด ์๋์ผ๋ก ๊ฐ์ฒด(Bean)๋ฅผ ์ฐพ์์ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋กํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋งํด.
์์ฃผ ์ฝ๊ฒ ๋งํ๋ฉด:
“๋๊ฐ @Component, @Service, @Repository, @Controller ์ด๋ฐ ๊ฑธ ๋ถ์ฌ๋๊ธฐ๋ง ํ๋ฉด
์คํ๋ง์ด ์๋์ผ๋ก ์ฐพ์์ Bean์ผ๋ก ๋ฑ๋กํด์ค๊ฒ!”
๋ผ๋ ๊ธฐ๋ฅ์ด์ผ.
๐ 1. ์ปดํฌ๋ํธ ์ค์บ์ด ์ ํ์ํด?
์๋ ์คํ๋ง์์๋ Bean์ ์ด๋ ๊ฒ ํ๋ํ๋ ๋ฑ๋กํ์ด:
๊ทผ๋ฐ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด Bean์ด ์๋ฐฑ ๊ฐ๊ฐ ๋๊ณ ํ๋ํ๋ ๋ฑ๋กํ๋ ๊ฒ ํ๋ค๊ฒ ์ง?
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ์ปดํฌ๋ํธ ์ค์บ!
์คํ๋ง์ด ์ง์ ๋ ํจํค์ง๋ฅผ ์ญ ์ค์บํ๋ฉด์
@Component ๊ณ์ด ์ด๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ฅผ ์๋ ๋ฑ๋กํด์ค.
๐ 2. ์ด๋ค ๊ฒ๋ค์ด ์ค์บ ๋์์ธ๊ฐ?
์๋ ์ด๋ ธํ ์ด์ ์ ์ ๋ถ “์ค์บ ๋์”์ด์ผ, ์ฆ Bean์ผ๋ก ์๋ ๋ฑ๋ก๋จ:
| @Component | ๊ธฐ๋ณธ ์ปดํฌ๋ํธ |
| @Service | ์๋น์ค ๊ณ์ธต |
| @Repository | DB/DAO ๊ณ์ธต |
| @Controller | MVC ์ปจํธ๋กค๋ฌ |
| @RestController | REST API ์ปจํธ๋กค๋ฌ |
์ด ๋ชจ๋ ๊ฒ๋ค์ด ์ฌ์ค ๋ด๋ถ์ ์ผ๋ก๋ ์ ๋ถ @Component ๊ธฐ๋ฐ์ด์ผ.
๐ 3. ์ปดํฌ๋ํธ ์ค์บ์ ๋์ ํ๋ฆ
- ์คํ๋ง ๋ถํธ ์์
- @SpringBootApplication ์์
@ComponentScan์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ํจํค์ง ๊ธฐ์ค์ผ๋ก ํ์ ํจํค์ง๋ฅผ ์ ๋ถ ๊ฒ์ - @Component ๊ณ์ด์ด ๋ถ์ ํด๋์ค๋ฅผ ๋ฐ๊ฒฌ
- ์๋์ผ๋ก Bean ๋ฑ๋ก
- DI(์์กด ์ฃผ์ )๋ฅผ ํตํด ํ์ํ ๊ณณ์ ์ฝ์ ๋จ (@Autowired, ์์ฑ์ ์ฃผ์ ๋ฑ)
๐ 4. ๊ฐ์ฅ ์ค์ํ ํฌ์ธํธ
๐ฏ "๊ฐ์ ํจํค์ง ๋๋ ํ์ ํจํค์ง"๋ง ์ค์บํ๋ค
์คํ๋ง ๋ถํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ ์ด๋ฐ ์ด์ ์ผ:

์ด๋ ๊ฒ๋ง ํด๋๋,
- Bean ๋ฑ๋ก ์ฝ๋ ์์
- ์ค์ ์์
๊ทธ๋ฅ ์คํ๋ง์ด ์๋์ผ๋ก ๊ฐ์งํด์
memberService๋ผ๋ ์ด๋ฆ์ผ๋ก Bean์ ๋ง๋ค์ด์ค๋ค.
์์ ๊ฒ์ ์คํ๋ง ์ปจํ ์คํธ์ ๋ฑ๋ก๋๋ ๊ฒ์ด ๋ง๋๊ฐ?
๋ค, ๋ง์!
์ปดํฌ๋ํธ ์ค์บ์ผ๋ก ์ฐพ์ ํด๋์ค๋ค์ ์ ๋ถ ์คํ๋ง ์ปจํ
์ด๋(= ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ)์ Bean์ผ๋ก ๋ฑ๋ก๋ผ.
์ ํํ๋ ์ด๋ ๊ฒ ํํํ ์ ์์ด:
“์ปดํฌ๋ํธ ์ค์บ์ Bean์ Spring ApplicationContext ์ ์๋ ๋ฑ๋กํ๋ ๊ณผ์ ์ด๋ค.”
๐ ์คํ๋ง ์ปจํ ์คํธ์ ๋ฑ๋ก๋๋ค๋ ์๋ฏธ
์คํ๋ง ์ปจํ ์คํธ(ApplicationContext)๋ ์ผ์ข ์ “Bean ์ ์ฅ์”์ผ.
- ์คํ๋ง์ด ์ฑ์ ์์ํ๋ฉด ApplicationContext๊ฐ ์์ฑ๋จ
- ์ปดํฌ๋ํธ ์ค์บ์ด ์์๋จ
- @Component, @Service, @Repository, @Controller๊ฐ ๋ถ์ ํด๋์ค๋ฅผ ๋ฐ๊ฒฌ
- ์ด ํด๋์ค๋ค๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด ApplicationContext์ ์ ์ฅ
- ํ์ํ ๋ DI(@Autowired, ์์ฑ์ ์ฃผ์ ๋ฑ)๋ก ๊บผ๋ด์ ์ฌ์ฉ
์ฆ, “์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด”๊ฐ ๋๋ค๋ ๋ป์ด์ผ.
๐ ์ ๋ฆฌ ๊ทธ๋ฆผ
๐ ํต์ฌ ์์ฝ
- ์ปดํฌ๋ํธ ์ค์บ = Bean ์๋ ๋ฑ๋ก ๊ธฐ๋ฅ
- ์๋ ๋ฑ๋ก๋ Bean = ์คํ๋ง ์ปจํ ์คํธ๊ฐ ๊ด๋ฆฌ
- ์ปจํ ์คํธ ๋ฑ๋ก → DI๊ฐ ๊ฐ๋ฅํด์ง๊ณ , ์ฑ๊ธํค ๊ด๋ฆฌ๋ ์คํ๋ง์ด ํด์ค
JPA์์ ํผ์์คํด์ค ์ปจํ ์คํธ๋ ์คํ๋ง์์ ์คํ๋ง ์ปจํ ์คํธ์ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ?
์ด ๋ ๊ฐ๋ ์ด๋ฆ์ด ๋น์ทํด์ ์ด๋ณด์๊ฐ ๊ฐ์ฅ ๋ง์ด ํท๊ฐ๋ ค ํ๋ ๋ถ๋ถ์ด์ผ.
ํ์ง๋ง ์ฑ๊ฒฉ·์ญํ ·์ ์ฅํ๋ ๋์์ด ์์ ํ ๋ฌ๋ผ.
์์ฃผ ์ฝ๊ฒ, ๋น๊ต ์ค์ฌ์ผ๋ก ์ค๋ช ํ ๊ฒ.
๐ฅ ํ ์ค ํต์ฌ ์์ฝ
์คํ๋ง ์ปจํ ์คํธ = ์คํ๋ง์ด ๊ด๋ฆฌํ๋ “Bean ์ ์ฅ์”
ํผ์์คํด์ค ์ปจํ ์คํธ = JPA๊ฐ ๊ด๋ฆฌํ๋ “์ํฐํฐ ์ ์ฅ์(์์์ฑ ๊ด๋ฆฌ ์ฐฝ๊ณ )”
๋ ๋ค “์ปจํ ์คํธ”์ง๋ง ์ ํ ๋ค๋ฅธ ์ธ๊ณ์ผ.
๐ 1. ์คํ๋ง ์ปจํ ์คํธ(Spring ApplicationContext)
โ๏ธ ๋๊ฐ ๊ด๋ฆฌ?
โก๏ธ ์คํ๋ง ํ๋ ์์ํฌ
โ๏ธ ๋ฌด์์ ์ ์ฅ?
โก๏ธ ์คํ๋ง Bean (Service, Repository, Controller ๋ฑ)
โ๏ธ ๋ชฉ์
โก๏ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํฌ๋ํธ(Bean)๋ฅผ ์์ฑ·์ด๊ธฐํ·์๋ฉธ๊น์ง ๊ด๋ฆฌํ๋ IoC ์ปจํ ์ด๋
โ๏ธ ์์
- MemberService
- MemberRepository
- OrderService
- PasswordEncoder
์ด๋ฐ ๊ฒ๋ค์ด ์คํ๋ง ์ปจํ ์คํธ์ ๋ค์ด ์์.
โ๏ธ ์์ฑ ์์
โก๏ธ ์๋ฒ๊ฐ ์์๋ ๋
๐ 2. ํผ์์คํด์ค ์ปจํ ์คํธ(Persistence Context, ์์์ฑ ์ปจํ ์คํธ)
โ๏ธ ๋๊ฐ ๊ด๋ฆฌ?
โก๏ธ JPA + Hibernate
โ๏ธ ๋ฌด์์ ์ ์ฅ?
โก๏ธ ์ํฐํฐ ๊ฐ์ฒด(Entity)
(DB ํ
์ด๋ธ row๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ ๊ฒ๋ค)
โ๏ธ ๋ชฉ์
โก๏ธ ์ํฐํฐ์ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ
โก๏ธ 1์ฐจ ์บ์ ์ ์ง
โก๏ธ ๋ณ๊ฒฝ ๊ฐ์ง(Dirty Checking)
โก๏ธ ์ง์ฐ ๋ก๋ฉ(Lazy Loading)
โก๏ธ DB UPDATE ์๋ ๋ฐ์
โ๏ธ ์์๋ก ์ ์ฅ๋๋ ๊ฒ
- Member ์ํฐํฐ
- Order ์ํฐํฐ
- Product ์ํฐํฐ
(์ค์ ๋ก DB์ ์ ์ฅ๋๊ธฐ ์ ์ํฐํฐ ๊ฐ์ฒด๋ค์ด ์ฌ๊ธฐ์ ๋จธ๋ฌด๋ฆ)
โ๏ธ ์์ฑ ์์
โก๏ธ ํธ๋์ญ์ ์ด ์์๋ ๋(EntityManager ์ด๋ฆด ๋)
๐ฅ ์์ ๋ค๋ฅธ ์์๋ก ๋น์ ํ๋ฉด?
โ๏ธ ์คํ๋ง ์ปจํ ์คํธ = “์ฌ๋(์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ)๋ฅผ ๊ด๋ฆฌํ๋ ํ์ฌ ์กฐ์ง๋”
- ํ์ฌ๋ ์ง์(Bean)์ ๊ด๋ฆฌ
- ์ธ์ ์์ฑ๋๊ณ , ์ธ์ ์ฐ์ด๊ณ , ์ธ์ ์์ด์ง๋์ง ๊ด๋ฆฌ
โ๏ธ ํผ์์คํด์ค ์ปจํ ์คํธ = “์ฐฝ๊ณ ์์ ๋ฌผ๊ฑด(์ํฐํฐ)์ ๋ณด๊ด·์์ ·์ถ์ ํ๋ ์ฌ๊ณ ์์คํ ”
- ์ฐฝ๊ณ ์๋ ์ ํ(์ํฐํฐ)์ด ๋ด๊น
- ์ ํ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก DB์ ๋ฐ์๋จ(Dirty Checking)
- ์ด๋ฏธ ์ ์ฅ๋ ์ ํ์ ๋ค์ ์กฐํํ์ง ์๊ณ ์บ์์์ ๋ฐ๋ก ์ค(1์ฐจ ์บ์)
์ ํ ๋ค๋ฅธ ์กด์ฌ์ผ!
๐ 3. ๋ ์ปจํ ์คํธ์ ์ฐจ์ด ํ๋ ๋น๊ตํ
| ๊ด๋ฆฌ ์ฃผ์ฒด | Spring Framework | JPA/Hibernate |
| ์ ์ฅ ๋์ | Bean(์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ) | ์ํฐํฐ(Entity) |
| ์์ฑ ์์ | ์๋ฒ ์์ ์ | ํธ๋์ญ์ ์์ ์ |
| ์ญํ | ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด ๊ด๋ฆฌ | ์ํฐํฐ ์์/๋ณ๊ฒฝ๊ฐ์ง/์บ์ฑ |
| ๋ผ์ดํ์ฌ์ดํด | ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฒด | ํธ๋์ญ์ ๋จ์ |
๐ 4. ํท๊ฐ๋ฆฌ๋ ํต์ฌ ํฌ์ธํธ
โ ์คํ๋ง ์ปจํ
์คํธ์๋ ์ํฐํฐ๊ฐ ๋ค์ด๊ฐ์ง ์๋๋ค
โ ํผ์์คํด์ค ์ปจํ
์คํธ์๋ Bean์ด ๋ค์ด๊ฐ์ง ์๋๋ค
โญ ๋์ ์์ ํ ๋ถ๋ฆฌ๋์ด ์๋ค
โญ Repository Bean์ ์คํ๋ง ์ปจํ
์คํธ์ ์์ง๋ง
Repository๊ฐ ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๊ทธ ์ํฐํฐ๋ ํผ์์คํด์ค ์ปจํ
์คํธ์ ๋ค์ด๊ฐ
๐ฅ ๋ง์ง๋ง ์์ฝ
์คํ๋ง ์ปจํ ์คํธ = ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ Bean ์ ์ฅ์
ํผ์์คํด์ค ์ปจํ ์คํธ = JPA์ ์ํฐํฐ ์ ์ฅ์(์์์ฑ ๊ด๋ฆฌ)
๋์ ๋ชฉ์ ·์ญํ ·์ ์ฅ ๋์ ๋ชจ๋ ๋ค๋ฅด๋ค.
ChatGPT์ ๋ง:
์์ฃผ ํต์ฌ์ ์ผ๋ก **“QueryDSL์ด JPA์ ์ด๋ป๊ฒ ํตํฉ๋๋์ง”, “์ธ์ ๋ถํฐ ์ฐ์๋์ง”, “ํ๊ตญ SI ๊ฐ๋ฐํ๊ฒฝ์์์ ์ค์ ์ฌ์ฉ ๋ฌธํ”**๊น์ง ๋ชจ๋ ์ ๋ฆฌํด์ค๊ฒ.
โ 1. QueryDSL๊ณผ JPA์ ํตํฉ์ด๋?
JPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก JPQL์ด๋ผ๋ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํด.
์:
๋ฌธ์์ด์ด๋ผ์
- ์ปดํ์ผ ํ์ ์ฒดํฌ ๋ถ๊ฐ
- ์คํ ๋ฐ์ ๋น๋ฒ
- ๋ฆฌํฉํฐ๋ง์ด ์ด๋ ค์
- ๋์ ์ฟผ๋ฆฌ ์์ฑ์ด ๋ณต์กํจ
๊ฐ์ ๋ฌธ์ ๊ฐ ์์์ด.
๊ทธ๋์ ๋์จ ๊ฒ QueryDSL.
๐ QueryDSL์ ํต์ฌ ๊ธฐ๋ฅ
โ๏ธ 1) ํ์ ์์ ํ ์ฟผ๋ฆฌ
์ปดํ์ผ ์์ ์ ์ค๋ฅ๋ฅผ ์ก์.
โ๏ธ 2) ์ํฐํฐ ๊ธฐ๋ฐ ์๋ Qํด๋์ค ์์ฑ
์:
โ๏ธ 3) ๋์ ์ฟผ๋ฆฌ๊ฐ ๋งค์ฐ ์ฌ์
BooleanBuilder, Predicate ์กฐํฉ ๋ฑ.
โ๏ธ 4) JPAQueryFactory๋ฅผ ํตํ ์ ์ฐํ ์ฟผ๋ฆฌ ์์ฑ
์๋ฅผ ๋ค์ด:
์ด๊ฒ ๋ฐ๋ก QueryDSL + JPA ํตํฉ์ ์์ฑ๋ ํํ์ผ.
๐ 2. JPA์ QueryDSL์ ํตํฉ ๋ฐฉ์
JPAQueryFactory๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ฉด ๋จ.
โฌ ๊ตฌ์กฐ ํ๋ฆ
์ฆ,
QueryDSL์ JPA ์์์ ๋์ํ๋ฉฐ, ๊ฒฐ๊ตญ ๋ด๋ถ์์๋ JPQL → SQL ๋ก ๋ณํ๋๋ค.
๐ 3. QueryDSL์ ์ธ์ ๋ถํฐ ์ฌ์ฉ๋๊ธฐ ์์ํ๋?
์ ํํ ์ญ์ฌ:
- ์ด๊ธฐ ๊ฐ๋ฐ ์์ : ์ฝ 2009~2010๋
๋น์ Spring + Hibernate ํ๊ฒฝ์์ ํ์ ์ธ์ดํ ์ฟผ๋ฆฌ ์ธ์ด๊ฐ ํ์ํด ๋ฑ์ฅ. - ๋ณธ๊ฒฉ์ ์ผ๋ก JPA์ ํจ๊ป ๊ตญ๋ด์์ ํ์ฐ๋ ์๊ธฐ: 2014~2016๋
- ์คํ๋ง๋ถํธ ๋์
์ดํ ์ ๊ตญ์ ์ผ๋ก ํผ์ง ์๊ธฐ: 2018~2022๋
(์คํ๋ง๋ถํธ + JPA ํ์คํ → QueryDSL ์ฑํ ์ฆ๊ฐ)
โป ํนํ "์คํ๋ง๋ถํธ 2.x + JPA" ์กฐํฉ์ด ๋จ๋ฉด์ QueryDSL์ด ๋ฐ ํ์๋ก ์๋ฆฌ ์ก์.
๐ 4. ํ๊ตญ ๊ฐ๋ฐ์๋ค, ํนํ SI ํ์ฅ์์๋ ์ด๋ค๊ฐ?
ํ๊ตญ SI ์ค๋ฌด์ ๋ถ์๊ธฐ๋ฅผ ์ ํํ ๋งํด์ค๊ฒ.
๐ฐ๐ท ํ๊ตญ SI์์ QueryDSL ์ฌ์ฉ ๋ฌธํ
โ๏ธ โ 2015~2020๋ : QueryDSL ์ ์ฑ๊ธฐ
- ๊ตญ๋ด SI/๋๊ธฐ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ๋ JPA ์ฟผ๋ฆฌ ๊ธฐ์
- ๋ฌธ์์ด ๊ธฐ๋ฐ JPQL๋ณด๋ค ์์ ์
- ๋์ ์ฟผ๋ฆฌ๊ฐ ์ฌ์์ ๋ณต์กํ ์ ๋ฌด ์์คํ ์ ์ ํฉ
- ๋ง์ ๋ ๊ฑฐ์ ์์คํ ์ด QueryDSL ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ๊น์ง ์ ์ง
โ๏ธ โก 2021๋ ์ดํ ๋ณํ: “JPA vs MyBatis ์ฌ๋๊ฒฐ”
ํ๊ตญ SI๋ ์๋ MyBatis๊ฐ ๊ฐ์ธ.
ํนํ SI๋ ๋ค์ ์ด์ ๋ก MyBatis๋ฅผ ์ ํธํจ:
- ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ด ๊ฐ๋ฅ
- ๋ณต์กํ SQL ์์ฑ ํธํจ
- DBA์ ํ์ ํ๊ธฐ ์ ๋ฆฌ
- ๋ ๊ฑฐ์๊ฐ ์ ๋ถ MyBatis ๊ธฐ๋ฐ
๊ทธ๋์ SI์์๋ ๋ค์ ํจํด์ด ๋ํ๋จ:
| ์คํํธ์ , ํ๋ซํผ | JPA + QueryDSL |
| SI, ๋ํ ๊ณต๊ณต ํ๋ก์ ํธ | MyBatis ๋๋ QueryDSL ํผ์ฉ |
| ๋ฐ์ดํฐ ๋น์ค ํฐ ํ๋ก์ ํธ | MyBatis |
โ๏ธ โข 2023~2025๋ : QueryDSL ์ ์ง or JPA + Spring Data ์์ฒด Query ์ด์ฉ
์ต๊ทผ ๋ณ๋:
- ๊ณต์์ ์ผ๋ก QueryDSL์ ๋๊ท๋ชจ ์ ์ง๋ณด์ ํ์ด ์์ด์ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฆผ
- ๊ทธ๋์ ์์ ์ฌ๋ผ์ง์ง ์๊ณ "์์ง๋ ๋ง์ด ์ฐ์ด๋ ์ค๋ฌด ํ์ค"์ด์ง๋ง,
๋์ฒด ์๋ฃจ์ ๋ ๋ฑ์ฅ:- Spring Data JPA์ @Query
- Query By Example (QBE)
- Spring Data JDBC
- JOOQ ์ฌ์ฉ ์ฆ๊ฐ(ํนํ ๊ธ์ต๊ถ)
โป ํ์ง๋ง, ์ฌ์ ํ ์ค๋ฌด JPA ์ฌ์ฉ์์ 70% ์ด์์ QueryDSL ์ฌ์ฉ ๊ฒฝํ ์์.
๐ 5. ๊ฒฐ๋ก
โ๏ธ QueryDSL + JPA ํตํฉ์ ์๋ฏธ
- JPA ๊ธฐ์ค์ ์ฟผ๋ฆฌ๋ฅผ ํ์ ์์ ํ๊ณ ๋์ ์ผ๋ก ๊ฐ๋ ฅํ๊ฒ ์์ฑ ๊ฐ๋ฅ
- JPQL์ ๋ฌธ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ JPA ์ต๊ณ ์ ๋๋ฐ์
โ๏ธ ์ธ์ ๋ถํฐ?
- 2010๋ ๊ฒฝ ์ฒซ ๋ฑ์ฅ
- 2014~2020๋ ๊ตญ๋ด JPA ์์ฅ์์ ์ฌ์ค์ ํ์ค
- ์ง๊ธ๋ ์ฌ์ ํ ๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉ๋จ
โ๏ธ ํ๊ตญ SI์์๋?
- ์ฌ์ ํ QueryDSL ์ฌ์ฉ ๋ง์
- ํ์ง๋ง MyBatis๋ ์ฌ์ ํ ๊ฐ๋ ฅ
- ์ต์ ํ๋ก์ ํธ๋ JPA + QueryDSL ํผํฉ์ด ๋ง์
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 29์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.18 |
|---|---|
| 28์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.17 |
| 26์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.13 |
| 25์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.12 |
| 24์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.11 |