• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JpaRepositoryV2 도입 이유

23.12.08 01:56 작성 조회수 259

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예

3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
제가 이해한 내용을 설명하고, 이해가지 않은 내용을 질문하려 합니다.

 

 

Spring Data JPA 기술을 이용하여 SpringDataJpaItemRepository를 구성했고, 해당 interface를 바로 ItemServiceV1에서 의존관계 주입하여 사용하고 싶다.

하지만, 이미 ItemServiceV1은 ItemRepository interface를 주입받아 사용하고 있기 때문에 SpringDataJpaItemRepository interface를 사용하려면 ItemServiceV1에서 코드레벨에서의 수정이 필연적으로 일어나게 된다.(문제점 1)

또한, SpringDataJpaItemRepository는 ItemRepository를 extends한 것이 아닌 JpaRepository를 extends한 것임.(문제점 2)

따라서 이런 문제점들 때문에 JpaItemRepostioryV2 class를 도입하여 ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다.

 

 

위 내용처럼 서술했을 때 올바르게 서술한 것인지 궁금하고,

2가지 이해가지 않는 부분에 대해서 질문하고 싶습니다.

첫번째: 문제점2가 왜 문제인건지 잘 모르겠습니다.

두번째: “ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다”에서 맞춘다가 정확히 어떤 것을 맞추는 것이라고 해야 표현 상 올바른 것인지 잘 모르겠습니다.

답변 2

·

답변을 작성해보세요.

2

안녕하세요. WOOKI님

AI 인턴이 잘 답변을 해주었는데요. 추가로 보충을 드리자면

여기서 핵심은 스프링 핵심원리 기본편에서 설명한 DI, OCP 원칙을 지키는 것입니다.

JpaItemRepostoryV2 없이 SpringDataJpaItemRepository를 바로 넣으려고 하면 클라이언트 코드인 ItemService의 코드도 함께 변경해야 합니다. 결국 OCP 원칙이 깨지는 것이지요.

8. 데이터 접근 기술 - 활용 방안 -> 스프링 데이터 JPA 예제와 트레이드 오프 부분을 들어보시면 도움이 되실꺼에요.

감사합니다.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.10

안녕하세요, 인프런 AI 인턴입니다.

WOOKI님의 질문에 답변 드리겠습니다.

제가 이해하기로는, Spring Data JPA를 사용하여 새로운 SpringDataJpaItemRepository 인터페이스를 만들었고, 이를 기존 서비스 계층인 ItemServiceV1에서 사용하고 싶다는 말씀으로 들립니다. 말씀하신 두 가지 문제점은 아래와 같이 정리해 볼 수 있겠습니다.

첫 번째 문제점의 경우, ItemServiceV1이 기존에 ItemRepository 인터페이스에 의존하고 있다는 것에서 오는 호환성 문제입니다. ItemServiceV1을 변경하지 않고 새로운 SpringDataJpaItemRepository를 사용하기 위해서는 어떤 방식으로든 두 인터페이스 간의 호환성을 유지해야 하는데, 이를 위해 JpaItemRepositoryV2를 도입함으로써 기존 코드의 수정 없이도 SpringDataJpaItemRepository의 기능을 사용할 수 있도록 구성하려는 것입니다.

두 번째 문제점은 SpringDataJpaItemRepositoryJpaRepository를 extends하고 있고, 이는 기존의 ItemRepository와 직접적인 상속 관계에 있지 않다는 것입니다. 즉, SpringDataJpaItemRepository를 사용하기 위해선 기존에 사용하던 ItemRepository의 방식과는 다른 접근 방식을 요구하게 됩니다.

‘사이를 맞춘다’라는 말은 곧 ItemRepository의 메서드들과 SpringDataJpaItemRepository가 제공하는 메서드들을 조화롭게 통합하거나 호환성을 보장하는 레이어나 구현체를 만드는 것을 의미합니다. 즉, 두 인터페이스 간의 격차를 해소하여 기존 서비스 계층이 새로운 리포지토리 구현체를 손쉽게 사용할 수 있도록 인터페이스 수준에서의 조정을 하는 것이죠.

정리하면, 새로운 SpringDataJpaItemRepository를 도입함으로써 발생하는 코드의 수정 필요성과 JpaRepository와의 상속 관계가 아닌 상황을 해결하기 위해 중간 다리 역할을 하는 JpaItemRepositoryV2 클래스를 만들어 기존 코드와 새로운 기능 간의 연결점 역할을 한다고 이해하시면 됩니다.