인프런 커뮤니티 질문&답변
PaymentValidator와 PaymentProcessor에서 주문과 결제를 중복 조회하는 구조에 대한 질문이 있습니다 !
작성
·
20
1
제미니님 안녕하세요!
30강 5분쯤에서 나온 결제 구조 관련해서 질문이 있습니다.
검증과 처리 책임을 모두 가지고 있던 PaymentManager를 Validator와 Processor로 분리한 의도는 이해했습니다.
그리고 Validator와 Processor 각각에서 주문과 결제를 다시 조회하도록 구현하신 이유가 컴포넌트를 명확하게 분리하고 재사용성을 높이기 위함이라고 이해했습니다.
여기서 말씀해주신 “명확하다”는 표현이 PaymentService에서 비즈니스 흐름을 더 명확하게 드러내기 위한 설계 의도라고 이해해도 괜찮을까요?
한편으로는 다른 방식도 떠올랐는데, Validator에서 검증하면서 조회한 주문/결제 정보를 PaymentContext 같은 객체에 담아서 Processor.success로 전달하는 구조는 어떻게 생각하시는지 궁금합니다.
이런 방식이 책임 분리나 구조적인 측면에서 문제가 생길 여지가 있는지, 혹은 실제로는 어떤 트레이드오프가 있는지도 함께 알고 싶습니다!
답변 3
1
안녕하세요 질문 감사드립니다!
적어주신 것 처럼 비즈니스 흐름을 명확히 들어내는 의도라고 이해해주셔도 괜찮습니다!
부가적으로 이러한 분리가 각 클래스들의 책임과 맡고있는 역할도 명확해지는 것 같습니다!
추가적으로 적어주신 방식도 가능은 할 것 같습니다만, 느낌적으로 잘 봐야할 것 같습니다
지금 코드 없이 상상을 해봤을때는 Validator가 validation 까지 처리한 후 PaymentContext를 직접 만드는 책임을 갖는 것은 조금 과하지 않을까? 라는 생각이 드는 것 같습니다
일반적으로 validator의 결과는 예외를 던지거나 validation의 상태를 전달하는 정도가 적합하다고 생각되어 Context는 너무 크지 않을까하는 생각이 드는 것 같습니다!
다만 이는 불가하다거나, 구조적 문제 보다는 얼마나 더 비즈니스와 협력 도구들의 관계를 잘 나타내는지 관점으로 생각하면 좋을 것 같습니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!
0
제미니님 답변 감사합니다 !!
말씀해주신 것과 같이 다시 생각해보니 validator가 validation까지 처리한 후 PaymentContext를 직접 만드는 것은 많은 책임을 가지는 것 같다는 생각이 들었습니다 !
다양한 방면으로 생각해볼 수 있도록 강의 만들어주셔서 감사합니다 !! 😀
0
안녕하세요, 인프런 AI 인턴입니다. 정우용님.
질문해주신 PaymentValidator와 PaymentProcessor의 설계에 대해 설명드리겠습니다. 이 부분은 결제를 처리하는 과정에서의 책임 분리와 구조적인 설계가 핵심입니다.
현재 구조의 목적:
- 명확성: PaymentValidator는 검증의 역할만, PaymentProcessor는 처리의 역할만 하도록 하여 각자의 책임을 명확히 하고 있습니다. 이는 유닛 테스트 등에서 각 구성 요소의 기능을 독립적으로 검증하고 최적화할 수 있게 합니다.
- 재사용성: 여러 곳에서 동일한 검증 로직을 필요로 할 때 Validator를 독립적으로 호출할 수 있습니다.
가능한 대안 및 트레이드오프:
- PaymentContext 사용: 질문에서 제안하신 방식처럼, 주문/결제 정보를
PaymentContext로 묶어서 전달하는 방식은 각 컴포넌트 간의 데이터 흐름을 명확하게 하여 한 번의 조회로 필요한 정보를 공유할 수 있게 합니다. 이는 데이터 일관성을 유지하는 데 유리할 수 있습니다.
- 책임 분리의 유지: Context를 사용하면 Validator와 Processor 간의 결합도가 높아질 수 있어, 각 컴포넌트의 독립성이 줄어들 수 있습니다. 이는 구조적인 유연성을 저해할 가능성도 있습니다.
- 추가적인 복잡성: 새로운 객체(PaymentContext)의 도입은 구조를 복잡하게 만들 수 있으며, 이런 복잡성이 프로젝트 전체에 걸쳐 어떤 영향을 미칠지 검토해봐야 합니다.
결론적으로, 두 방식은 각각의 장점과 단점을 가지고 있으며, 프로젝트의 전체적인 아키텍처와 컴포넌트 간의 독립성 요구 사항에 따라 적절한 방법을 선택하시면 됩니다.
관련하여 도움이 될 수 있는 질문들을 아래에 소개합니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




