일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- backend
- 라라벨
- AMD 안드로이드
- restful
- Android
- API
- Android-Studio AMD
- SpecificationBuilder
- Nest.js
- typescript
- nodejs
- 안드로이드 스튜디오
- 너구리소굴
- restapi
- ES6
- ECMA
- MVVM
- avd
- Spring
- laravel
- SpringSecurity
- springboot
- javascript
- java
- AMD AVD
- android studio
- Specification
- lifecycle
- kotlin
- 안드로이드 에뮬레이터
- Today
- Total
Owen Labs
[오픈소스 프로젝트] JPA Specification Builder 개발 착수 본문
JPA에서는 Select 쿼리를 생성하기위해 Specification이라는 것을 사용한다.
Dto를 이용해 Specification을 손쉽게 생성할 수 있게 해주는 SpecificationBuilder를 구현해보려고한다.
왜 만들게 되었나?
JPA를 이용해 개발하다보면 한가지 의문에 도달하곤 했다.
ORM은 개발자로 하여금 SQL을 작성하지 않게 해준다는 것인데. 결국 SQL이 아닐 뿐 JPQL, QueryDSL 등의 형태로 여전히 쿼리를 작성하고 있다.
본질적으로 '쿼리'에 대한 이해가 전혀 없어도 비즈니스 로직을 구현하는 데에 문제가 없어야 정말 쿼리로부터 벗어났다고 할 수 있을 것이다.
그렇게 SpecificationBuilder라는 것을 처음 생각했다.
SpecificationBuilder의 이점
JPA의 Specification은 CriteriaBuilder라는 클래스를 이용해 작성된다.
Specification Builder가 없다면 특정 필드마다 어떤 비교 연산을 적용할 지, API 마다 작성해주어야하기 때문에, 결과적으로 매우 많은 양의 코드를 작성하게 된다.
하지만 Specification Builder를 이용하면 Dto에 정의된 필드명과 타입을 기반으로 Specification을 손쉽게 생성할 수 있다.
개발기
사실 SpecificationBuilder는 본인이 JPA를 이용해 회사 업무 혹은 사이드 프로젝트를 수행하면서 혼자 작성하던 코드에서 시작되었다.
본인은 계속 업무 중, 개발 중 사용하고 있었으므로 이를 라이브러리로 만들어 여러 프로젝트에서 손쉽게 사용하고자하는 욕구가 있었다.
퇴사 이후 스스로 PMF를 찾아 매출을 만들어 내고자 1인 창업에 도전하느라 SpecificationBuilder에 집중할 수 없던 관계로 이를 아직까지 진행하지 못한 것이다.
앞으로 진행할 개발 과정과 의사결정에 대한 사항을 블로그에 기록할 예정이다.
Github
GitHub - parkjg20/jpa-specification-builder
Contribute to parkjg20/jpa-specification-builder development by creating an account on GitHub.
github.com