[TIL] 221018

✏️ Check Box

📌 정리


2019 우아한 테크세미나에서 조영호님이 발표하신 우아한 객체지향 영상을 봤다. 주니어를 위한 백엔드 디자인를 주제로한 원티드 프리온보딩 챌린지의 강사님께서 Q&A시간에 이것저것 이것저것 추천해주신 영상 중 하나인데, 기존에 개발하면서 궁금했던 의문점이 많이 풀리게 되었다.

주된 내용은 어플리케이션을 개발하면서 생기는 의존성 루프를 어떻게 유연하게 대처하는지에 대한 것이었다. 개발을 할때 지금 내가 작성하는 서비스 로직에 다른 도메인의 서비스가 막 들어와도 되는걸까? 라는 의문점이 생기곤 했다. 영상에서는 클래스의 의존성을 그려보라고 말한다. 이렇게 되면 클래스간의 의존성을 한눈에 볼 수 있으며 이를 통해 충분히 고민하여 다른 시각으로 설계 디자인을 변경할 수 있다는 것이었다.
해당 서비스의 설계에 의존성이 루프를 가진다면, 먼저 함께 생성되고, 삭제되거나 같은 로직으로 변경되는 객체를 하나의 도메인으로 묶어 서로다른 도메인에 접근할 때는 객체참조가 아닌 Repository를 통해 탐색하도록 변경하여 의존성의 고리를 끊는다. 기존 서비스를 리팩토링하게 되면 문제가 발생하는데, 3가지 문제에 대한 해결법을 제시한다.

첫째, 중간객체(새로운 객체)를 만들어 로직을 몰아넣는 방법. 둘째, 첫째 방식을 이용하면서 의존성을 역전시켜 루프를 끊는 방법.
셋째, 이벤트 퍼블리싱 방식을 사용했을 떄, 새로운 패키지로 분리하는 방법.

이렇게 의존성 사이클을 제거하면 추가적으로 각 도메인을 기준으로 시스템을 분리하여 구성할 수 있다.

해당 영상을 보면서 무작정 코드만 작성할게 아니라 의존성 사이클을 고려한 디자인을 설계하여 도메인을 서로 분리하고, 나아가 MSA까지 도입할 수 있는 서비스를 개발해야겠다는 생각을 가지게 되었다. 그런 코드를 작성하는 날이 오길 바라며…

Back to [TIL] 221017