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

HHS님의 프로필 이미지

작성한 질문수

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

마지막 리팩토링

2부 마지막 리팩토링 3:30쯤

24.07.18 01:04 작성

·

114

0

2부 마지막 리팩토링 0:49에서, "service인데 controller.port를 잘못 참조했다"라고 하셨는데요.

이를 수정하고 나신 후인 3:30쯤에서도, 여전히

service(의 UserServiceImpl)가 controller(의 Port의 UserService)에 의존하는 상황이지 않나요?

제 생각엔 Port 자체를 controller 밖으로 꺼내는 게 의미상 더 좋지 않을까 싶은데 어떻게 생각하시나요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 19. 01:06

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

질문자님께서 말씀하신 부분은 개발 시 아키텍처 설계와 관련된 중요한 부분을 다루고 있습니다. 서비스 레이어가 컨트롤러 레이어에 정의된 포트에 의존하는 것은 일반적으로 바람직하지 않습니다. 이러한 상황은 레이어 간의 역할과 책임이 명확히 구분되지 않음을 의미할 수 있습니다.

Port를 외부로 분리하는 것은 레이어 간의 의존성을 줄이고 시스템의 결합도를 낮추어, 유연하고 확장 가능한 설계를 가능하게 합니다. 이러한 접근 방식은 헥사고날 아키텍처(Hexagonal Architecture) 또는 포트 & 어댑터(Ports & Adapters) 아키텍처 패턴에서 자주 볼 수 있으며, 애플리케이션의 핵심 로직을 외부 컴포넌트로부터 분리하여 테스트와 유지보수를 용이하게 합니다.

님의 제안대로 Port 인터페이스를 컨트롤러 바깥으로 이동시키고, 이를 통해 서비스가 컨트롤러가 아닌 인터페이스에만 의존하도록 설계를 변경하는 것이 좀 더 깔끔한 구조를 만드는 방법일 수 있습니다. 이렇게 하면 추후 다른 컨트롤러나 어댑터에서도 동일한 서비스를 재사용할 수 있는 유연성을 확보할 수 있습니다.

이와 관련하여 Spring에서는 의존성 주입, @Service 어노테이션과 같은 기능을 통해 이러한 설계 패턴을 잘 지원합니다. 따라서, 개발하시는 도중에 이러한 구조적인 설계 변경을 고려해보시는 것도 좋을 것 같습니다.

HHS님의 프로필 이미지

작성한 질문수

질문하기