inflearn logo
강의

Course

Instructor

A developer's cheat sheet for adding Java/Spring tests

Service, Repository를 interface로 만들었을때 궁금한게 있습니다.

374

qkrxodudtls4167

8 asked

0

테스트 코드를 작성할 때 DIP를 이용해서 결합도를 낮추고, 빠르게 테스트를 하는 것을 확인하였습니다.
궁금한 점은 interface로 서비스 레파지토리를 선언해서 사용하면,

  1. 인터페이스 자체가 어떻게보면 다형성을 위해 도면을 구성한다고 생각되는데, FakeImpl을 만들기위해서 너무 많이 다형성을 사용하는게 아닌가 싶은 생각도 들어서요. 초기 프로젝트에는 오버엔지니어링이 되지는 않을까 고민이 됩니다.

  2. 소스코드 관리하는 점에서 따라가기 쉽지 않은 것을 느꼈습니다. 물론 패키지 구조를 잘 알고 있는 사람이라면 쉽게 접근하겠지만, 그렇지 않은 사람이 코드를 분석했을 때 함수를 클릭해서 접근은 하는 경우가 많더라고요. 이럴 경우에는 패키지 구조를 도식화해서 공유해서 해결하는지, 궁금합니다.

 

spring tdd jpa 소프트웨어-테스트 unittest

Answer 2

0

jiwhunkim

  1. 프로덕트 규모가 작은 프로젝트라고 한다면 오버엔지니어링이 맞습니다. 다만 프로덕트 규모가 커지게 되고 모듈 단위가 다양하다면 모듈 단위로 테스트 가능하게 코드가 만들어져 있지 않으면 사람이 테스트를 수행하는 수 밖에 없습니다.

  2. 개발 문서 또는 readme 에 아키텍처 구조, 컨벤션 같은 것을 작성하고 공유하는게 좋습니다.

0

communityai8509

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

박태영님의 질문에 대해 답변드리겠습니다.

  1. 서비스와 레포지토리를 인터페이스로 분리하는 것은 DIP(의존성 역전 원칙)을 이행하여 의존성의 관리를 유연하게 하기 위한 방법 중 하나입니다. 초기 프로젝트에서 인터페이스를 사용하는 것이 오버엔지니어링처럼 느껴질 수 있지만, 장기적으로 프로젝트의 확장성과 유지보수성을 고려할 때 유리합니다. FakeImpl 같은 테스트용 구현체를 만들어 사용하는 것도 다형성을 활용하면서 유연한 테스트가 가능해집니다. 따라서 프로젝트의 규모와 향후 유지보수 계획을 고려하여 적절한 수준에서 인터페이스를 도입하는 것이 좋습니다.

  2. 소스 코드 관리 및 프로젝트의 구조를 이해하는 것은 초보자에게는 분명 어려울 수 있습니다. 이러한 문제를 해결하기 위해, 일반적으로는 문서화 작업을 통해 패키지 구조를 명확히 설명하고, 클래스 및 인터페이스 간의 관계를 도식화하여 공유합니다. 또한, 모던 IDE를 활용하면 코드를 통한 네비게이션이 용이하므로, 적절한 도구 사용도 하나의 해결 방안이 될 수 있습니다. 프로젝트 멤버들이 패키지 구조와 코드의 구성을 빠르게 이해할 수 있도록 지속적인 커뮤니케이션과 문서화 작업을 병행하는 것이 중요합니다.

프로젝트 초기 단계에서 이러한 고민을 하는 것은 매우 긍정적인 접근이라 할 수 있습니다. 팀원들과 충분한 논의를 거쳐, 프로젝트에 가장 적합한 개발 방법을 찾으시길 바랍니다.

UserService, CertificationService 책임 분리 기준 질문

0

20

1

service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존

0

56

1

Service 소형 테스트 질문

0

76

1

조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?

0

114

1

controller 의 port 패키지의 service 인터페이스 사용

0

70

1

빌드 문제

0

90

1

빌드 안 되시는 분들 참고

0

101

1

update에서 Repository.save

0

103

1

최종 완성된 코드를 받아 볼 수 있을까요?

0

153

1

의존성 역전으로 해결한 외부의존성?

0

160

1

좋은 설계

0

176

1

Controller에 테스트

0

137

1

JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성

0

238

0

영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용

0

221

1

인프라계층 구현체와 테스트 구현체에 대한 질문

0

220

1

실습 코드 커밋

0

369

1

UserEntity 메서드

0

291

2

CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것

0

215

1

레이어드 아키텍처 개발에 대하여

0

229

1

BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.

0

222

1

테스트에서 주입과 생성

0

197

1

프로젝트 코드는 제공해주시지 않는건가요?

0

377

2

개선된 아키텍처의 구조

0

274

1

서비스 레이어의 단위 테스트 범위 고민

0

184

1