Spring 프로젝트를 진행하면서 Query DSL을 언제 도입할지에 대해 고민하던 중 좋은 타이밍이라 생각하여 도입했습니다. 내가 QueryDSL을 도입한 이유와 타이밍에 대해서 간략하게 정리하여 경험을 공유하고 합니다. QueryDSL은 프로젝트 초기에 바로 도입하여 사용하는걸 권장하지만 현재 회사의 프로젝트를 시작하면서 최소한의 툴을 사용하면서 정말 필요할때 도입하고자 목표를 잡았었습니다. 본론으로 들어가기 전에 QueryDSL에 대해 간략하게 소개하고자 합니다. QueryDSL이란? QueryDSL은 Query 빌더로 조금 더 정확하게는 Jpa의 JPQL을 만들어주는 빌더입니다. 보통 Jpa Repository에서 자동으로 만들어주는 매핑 메소드를 생성하기 어렵거나 복잡한 상황에서 쿼리를 작성하고..
Spring Boot 프로젝트에서 JPA를 사용하면 Repository를 통해 DB의 데이터를 꺼내오게 된다. JPA가 지원하는 기본적인 Repository는 다양한 기능을 함께 지원하지만 규모가 커지고 복잡한 쿼리가 필요할때는 한계에 부딪히게 된다. 이럴때 개발자가 자체적으로 Repository를 만들어서 커스텀해 사용해야 하는데 이를 위한 두 가지 방법을 소개하려 한다. 1. 기본 Repository에 Interface를 추가하여 확장하는 방법 2. 기본 Repository와 별개의 Repository생성하는 방법 1. 추가 Interface를 통해 Repository 확장 - 기존 JpaRepostory에 CustomRepo를 추가해준다. public interface ConsultationRepo..
JPA를 이용해 구현을 하다보면 그래프 탐색을 통해 다양한 테이블을 탐색하게 된다. 하지만 객체를 기반으로 구현돼있는 JPA는 자칫 잘못하면 불필요한 집단 쿼리(n + 1)가 발생해 성능에 악영향을 줄 가능성이 매우 높다. 나 또한 이런 문제를 격었기 때문에 그 경험을 공유하려한다. 해당 포스트가 N+1문제 해결을 설명하려는 글은 아니며, 연관된 문제에서 조금 더 유연한 대처를 하는 방법을 소개하려한다. 내가 만난 문제는 고객, 판매자(Account) 테이블과 결제(Payment) 테이블 2가지가 존재했다. 이런 환경에서 판매자가 가지고있는 결제들을 불러오고 결제한 구매자(고객)의 데이터를 함께 List로 return해주는 문제를 해결해야 했다. 처음 작성한 코드는 다음과 같다. //@Query("sel..
최근 스프링 프로젝트를 수행하면서 JPA에 대해 조금 더 공부하고 싶은 마음이 들었다. 그래서 JPA에 대해 간략하게 정리해보려 한다. JPA를 이야기하기 전에 ORM에 대해 간략한 이해가 필요하다고 생각한다. 기존에 자바를 이용해 DB에 접속하기 위해서는 마이바티스같은 Mapper를 사용하거나 JDBC를 이용해 직접 쿼리를 날리는 식으로 사용됐었다. 이런 방식에는 문제가 있는데 객체지향적인 프로그래밍이 어렵다는 문제이다. ORM은 이런 문제를 해결하기 위해 데이터베이스의 테이블을 객체화 시켜 개발할 수 있다. JPA는 이런 자바진영의 공식 ORM API 표준이다. 하지만 JPA자체는 Interface를 묶어둔 추상화 API로 이를 구현하여 사용할 수 있도록 만들어준 프로젝트가 Hibernate이다. 일..
- Total
- Today
- Yesterday
- 신작
- JPA
- 이명규
- 모험
- 게임개발
- 보따리장사
- spring boot
- Java
- Lombok
- 개발일지
- QueryDSL
- 인디게임
- 튜토리얼
- 스크럼
- 게임
- 사이드프로젝트
- 인디
- frontend
- 유니티
- studio108
- 개발
- 우주게임
- Unity3D
- spring
- JIRA
- 게임 개발
- JPQL
- 용사
- 턴드림
- mobx
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |