inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스프링 데이터 JPA 예제와 트레이드 오프

트레이드오프시 DI, OCP를 지킨다는말

112

김태언

작성한 질문수 15

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
JPA 사용시 중간계층으로 JpaItemRepositovy 를 거쳐서 SpringDataJpaItem의 인터페이스를 구현함으로써 구조가 복잡해지기때문에 중간단계인 JpaItemRepositovy 없이 직접 SpringDataJpaItem를 주입해줌으로써 좀더 간단한 구조가 된다고설명해주셨는데, 단점으로는 DI 와 OCP를 지키지 못한다라고 하셨는데 아래 스크린샷처럼

스크린샷 2024-11-04 오전 8.12.52.png

수업을 듣다가 헷갈려서 찾아봤습니다. DI 와 DIP의 차이를 알아보고 SOLID원칙을 지킨다라는건 DI를 어긴다보단 DIP를 어긴다가 맞는거 같아 이부분에 대한 설명을 DIP를 DI로 추상적으로 설명했다고 이해해야할까요? 정확히는 DIP를 지키기위해 DI를 넣는건데 SpringDataJpaItem를 주입한다고할때 솔직히 이것도 DI로 넣는것도 같고 DIP도 인터페이스(추상화)에 의존하기때문에 지킨거고 오히려 OCP만 어기는 구조가 아닌가해서요

정리하자면

  1. DI를 어긴다는말보단 DIP를 어긴다 라고해야되는게 맞는지

  2. 해당 코드 트레이드오프 설명시 DIP는 지키되 OCP를 지키지 못하는게 아닌지

 

spring mvc jpa querydsl spring-data-mybatis spring-jpa

답변 1

0

인프런 AI 인턴

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

김태언님께서 질문하신 부분에 대해 설명드리겠습니다.

  1. DI를 어긴다는 말보다는 DIP를 어긴다는 표현이 맞는지에 대해서는, DIP(Dependency Inversion Principle)는 실제로 고수준 모듈이 저수준 모듈에 의존하지 않고, 추상화된 인터페이스에 의존하도록 하는 원칙입니다. DI(Dependency Injection)는 이 원칙을 구현하기 위한 방법 중 하나입니다. 강의에서는 이 부분을 보다 쉽게 설명하기 위해 DI 용어를 사용했을 수 있지만, 정확히는 DIP 원칙을 지킬 필요가 있는 부분을 말하는 것 같습니다.

  2. DIP는 지키지만, OCP만 어긴 구조인지에 대해 말씀드리자면, 어댑터(계층)를 삽입하여 DIP를 지키고, 변경의 필요성을 줄이는 것을 목표로 할 수 있습니다. 하지만 어댑터를 생략하고 직접 DI를 하게 된다면 기존 구조를 그대로 변경해야 하는, 즉 OCP(Open/Closed Principle)를 어길 가능성이 높아집니다. 따라서 이런 트레이드오프에서, 두 원칙 간의 균형을 고민하는 것이 중요합니다.

설명을 듣고 이해가 도움이 되셨길 바랍니다. 추가로 궁금한 점이 있으면 언제든지 질문 주세요.

감사합니다!
이미지 출처 및 상세 내용

RepositoryTest의 패키지 위치가 domain인 이유

0

29

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

29

1

update()에 사용하는 setter 질문드립니다.

0

47

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

83

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

173

1

@repository 어노테이션

0

89

3

ItemService

0

58

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

54

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

178

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

77

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

76

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

112

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

83

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

72

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

102

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2