인프런 커뮤니티 질문&답변

박주성님의 프로필 이미지
박주성

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

JpaRepository 조건

해결된 질문

작성

·

131

·

수정됨

0

스프링 데이터 JPA 조건2에서

SpringDataJpaRepository의 findAll 메서드의 `@Query`에서 오타를 내서 코드가 테스트에서 오류가 발생했습니다. 추후 코드를 고치니 문제를 해결할 수 있었습니다.

 

여기서 궁금한 점은 테스트에서 findAll에만 영향을 미치는 것이 아니라 왜 전체 테스트에서 오류가 발생하는 것인지 궁금합니다. 혹시 이 부분에 대해선 프록시 객체를 띄우는 데, 메서드의 유효성을 검사하는 로직이 존재하거나 아니면 다른 무언가가 있는지 궁금합니다.

 

package hello.itemservice.repository.jpa;

import hello.itemservice.domain.Item;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface SpringDataJpaItemRepository extends JpaRepository<Item, Long> {

    List<Item> findByItemNameLike(String itemName);

    List<Item> findByPriceLessThanEqual(Integer price);

    // 쿼리 메서드(아래 메서드와 같은 기능 수행)
    List<Item> findByItemNameLikeAndPriceLessThanEqual(String itemName, Integer price);

    // 쿼리 직접 실행
    // error를 추가해 쿼리 오류 생성
    @Query("error select i from Item i where i.itemName like :itemName and i.price <= :price")
    List<Item> findItems(@Param("itemName") String itemName, @Param("price") Integer price);
}

 

 

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 박주성님

오류는 크게 3가지로 분류할 수 있습니다.

  1. 컴파일 오류: 프로그램을 실행하기도 전에 오류를 찾을 수 있습니다. 가장 좋은 오류입니다.

  2. 프로그램 로딩 시점에 발생하는 오류: 이 오류는 컴파일 오류보다는 조금 늦지만 프로그램을 실행할 때 바로 발견할 수 있는 오류입니다. 주로 프로그램이 로딩 중에 내부에 문제가 없는지 스스로 검증할 때 발견할 수 있습니다. 또는 설정이 잘못 되었을 때 발견할 수도 있습니다. 이 오류는 사용자가 프로그램을 실행하기 전에 오류를 발견할 수 있으므로 좋은 오류입니다.

  3. 사용자가 프로그램을 호출할 대 발생하는 오류: 이 오류는 가장 나쁜 오류입니다. 서비스 운영중에 사용자가 무언가를 호출하는 시점에야 문제가 발견됩니다.

 

스프링 데이터 JPA는 @Query 부분을 미리 파싱하고 또 검증합니다. 덕분에 프로그램 로딩 시점에 오류를 빠르게 발견하도록 도와줍니다. 따라서 스프링 컨테이너 로딩 시점에 바로 문제를 발견하고 프로그램을 중단합니다.

 

감사합니다.

박주성님의 프로필 이미지
박주성
질문자

감사합니다!

박주성님의 프로필 이미지
박주성

작성한 질문수

질문하기