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..
Spring Boot Security를 이용해 커스텀 프로바이더로 인증 필터를 생성하던 중 ProviderNotFoundException를 만나게 됐다. 한참 삽질중에 생각보다 쉽게 해결했다. public class OAuthAuthenticationProvider implements AuthenticationProvider { ...중략... @Override public boolean supports(Class authentication) { return authentication == OAuthAuthenticationToken.class; } } supports 함수에서 해당 프로바이더에서 처리해줄 Token 클래스를 지정해주면 된다. 나같은 경우 OAuthAuthenticationToken 클래..
최근 스프링 프로젝트를 수행하면서 JPA에 대해 조금 더 공부하고 싶은 마음이 들었다. 그래서 JPA에 대해 간략하게 정리해보려 한다. JPA를 이야기하기 전에 ORM에 대해 간략한 이해가 필요하다고 생각한다. 기존에 자바를 이용해 DB에 접속하기 위해서는 마이바티스같은 Mapper를 사용하거나 JDBC를 이용해 직접 쿼리를 날리는 식으로 사용됐었다. 이런 방식에는 문제가 있는데 객체지향적인 프로그래밍이 어렵다는 문제이다. ORM은 이런 문제를 해결하기 위해 데이터베이스의 테이블을 객체화 시켜 개발할 수 있다. JPA는 이런 자바진영의 공식 ORM API 표준이다. 하지만 JPA자체는 Interface를 묶어둔 추상화 API로 이를 구현하여 사용할 수 있도록 만들어준 프로젝트가 Hibernate이다. 일..
- Total
- Today
- Yesterday
- 유니티
- 우주게임
- 인디
- 이명규
- frontend
- 개발
- Lombok
- 게임개발
- spring
- 개발일지
- Unity3D
- 사이드프로젝트
- studio108
- spring boot
- Java
- 용사
- 신작
- 턴드림
- QueryDSL
- 게임 개발
- 인디게임
- mobx
- JPA
- 튜토리얼
- 게임
- JPQL
- 보따리장사
- JIRA
- 모험
- 스크럼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |