강의

멘토링

커뮤니티

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

심플스택님의 프로필 이미지
심플스택

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

격벽의 순환 참조(?)

작성

·

14

0

안녕하세요. 지난번에도 질문 남겼었는데 또 찾아뵙게 되었습니다.

 

user 의 경우 많은 개념들이 참조하게 될 것 같습니다.

회원탈퇴라는 기능이 제공될 때, 회원이 탈퇴되면 관련된 개념들을 삭제해야된다고 할 경우 이를 어떻게 해결하는 것이 좋을까요?

user 쪽에서 관련 개념들을 찾아서 삭제하기에는 개념 격벽간의 순환 참조(?)가 발생하게 될 것 같습니다.

카프카나 메시지 큐 등을 이용해서 처리할 수 있을 것 같은데 현재 이를 처리할 수 있는 별도의 인프라는 없다고 가정해보고 싶습니다.

그렇다면 어플리케이션 이벤트(ApplicationEventPublisher)를 사용하는 것이 방법이 생각납니다.

하지만 이벤트를 사용하게 되면 어플리케이션의 로직 흐름을 보기가 조금 어려우지는 것 같다는 생각도 들어서 괜찮은 방법인지 고민이 됩니다.

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 심플스택님.

회원 탈퇴 시 관련된 개념들을 삭제하는 문제는 다소 복잡할 수 있으며, 특히 여러 도메인이나 개념이 얽혀 있는 경우 격벽으로 인해 순환 참조 이슈가 발생할 수 있습니다. 이를 해결하기 위해 이벤트 기반 아키텍처나 직접적인 참조를 피하는 방법을 고려할 수 있습니다.

문제 해결을 위한 제안

  1. 어플리케이션 이벤트(ApplicationEventPublisher):

    • 이벤트 기반으로 처리하면, 각 도메인이 독립적으로 이벤트에 반응하여 자신의 관련 데이터를 처리할 수 있습니다. 이를 통해 격벽을 침범하지 않고도 다른 개념의 변화에 대응할 수 있습니다.
    • 이벤트 사용의 단점으로는 코드 흐름이 모호해질 수 있다는 점이 있지만, 이를 해결하기 위해선 적절한 이벤트 명명 및 강력한 로깅이 필요합니다.
  2. 관리 서비스 또는 유틸리티 클래스:

    • 특정 관리 서비스에서 전체 항목을 조율하여 이를 삭제하도록 하는 방법입니다. 이 경우 애플리케이션 레이어에서 모든 관련 개념을 알고 있는 하나의 매니저가 존재할 수 있으며, 이를 통해 오케스트레이션할 수 있습니다.
  3. 연관 데이터의 비활성화:

    • 즉각적인 삭제 대신, 관련 데이터를 ‘비활성화’ 상태로 전환하여 추가적인 조건을 통해 접근을 차단하는 방법도 검토할 수 있습니다. 이는 데이터의 삭제로 인한 예기치 못한 오류를 방지하며, 지속적인 트랜잭션 롤백 문제를 피할 수 있습니다.

추가적으로 이와 관련한 다른 수강생의 질문 및 답변을 살펴보시면, 유사한 고민을 다룬 사례를 찾을 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

심플스택님의 프로필 이미지
심플스택

작성한 질문수

질문하기