본문 바로가기

개발 공부/디자인 패턴

(6)
🚀 Chain of Responsibility(책임 연쇄) Pattern으로 비즈니스 로직의 복잡성 해결 안녕하세요, 여러분! 개발을 하다 보면 때로는 코드가 마치 미로처럼 복잡해지는 순간을 마주하게 됩니다. 오늘은 저희 팀이 e커머스 플랫폼 개발을 진행하면서 겪었던 그런 순간과, 이를 해결하기 위해 책임 연쇄 패턴을 어떻게 적용했는지에 대해 이야기해보려고 합니다. 🤷‍♂️ 복잡한 주문 처리의 현실 개발 초기, 우리의 주문 취소 처리 로직은 간단했습니다. 그러나 시간이 지나면서 쿠폰 복구, PG결제 환불, 현금영수증 발행 취소 등 다양한 요구 사항이 추가되었고, 이로 인해 코드의 복잡도가 기하급수적으로 증가했습니다. 여기에 더해, 각 기능 간의 의존성도 높아져 유지보수 및 확장성에 심각한 문제가 발생하기 시작했습니다. 초기의 단순한 코드는 다음과 같았습니다: public class OrderService {..
템플릿 메소드 패턴(Template Method Pattern) - 2. 견고하지만 유연한 알고리즘 구현 방법 🛠 템플릿 메소드 패턴: 코드 재사용성과 유지 보수의 극대화 안녕하세요, 여러분! 오늘은 프로그래밍 세계에서 굉장히 중요한 주제인 코드의 재사용성과 유지 보수에 대해 다뤄보려 합니다. 바로, 템플릿 메소드 패턴에 대한 이야기인데요, 이 패턴은 복잡한 로직이나 반복되는 작업 흐름을 가진 시스템 설계에서 코드의 재사용성을 극대화하고, 유지 보수를 용이하게 하는 데 큰 역할을 합니다. 🚀 🎨 추상화와 템플릿 메소드 패턴의 결합 추상화는 복잡한 현실을 단순화하는 과정을 말합니다. 템플릿 메소드 패턴은 이러한 추상화의 원칙을 따르면서, 공통의 작업 흐름을 정의하고, 일부 단계를 서브클래스에서 구현하도록 합니다. 이 방식을 통해, 기본 구조는 유지하면서도 세부적인 내용을 다양하게 변화시킬 수 있는 유연성을 제공합니..
템플릿 메소드 패턴(Template Method Pattern) - 1. 로직 파편화에 따른 문제점 안녕하세요, 여러분! 프로젝트 진행 중 경험한 로직 파편화 문제와 그 해결 과정에 대해 공유하고자 합니다. 복잡성이 증가함에 따라, 개별적으로 해결책을 모색하는 것이 오히려 코드의 혼란을 가중시켰습니다. 이 문제를 극복하기 위해, 저는 로직을 체계적으로 정리하고, 추상화를 통해 템플릿 메소드 패턴을 적용해보기로 했습니다. 🎨 로직 파편화와 그 현실 제 프로젝트에서 특히 서비스 레이어에서 다양한 비즈니스 로직을 구현하면서 다양한 구현 방식이 혼재되어 있었습니다. 이는 코드의 일관성을 유지하기 어렵게 만들었고, 프로젝트의 유지 보수와 확장성에 심각한 장애가 되었습니다. 🔍 구체적인 문제 사례 비일관성 문제: 동일한 목적의 로직임에도 불구하고, 데이터 검증이나 예외 처리 방식이 개발자마다 달랐습니다. 코드 중..
상태 전이 제어 구현(State Machine) - 3. 상태 기계 구현 상태 기계(State Machine) 구현 예시 저는TransitionManager 클래스와 관련 구성 요소를 사용하여 이 구현을 수행했습니다! 1. 상태 인터페이스 각 상태는 OrderProcessStatus 열거형으로 정의됩니다. 이 열거형은 가능한 모든 주문 처리 상태를 나타냅니다! 2. 상태 전이(Transition) 클래스 Transition 클래스는 한 상태에서 다른 상태로의 이동을 정의합니다. 이 클래스는 원본 상태(source), 대상 상태(target), 그리고 상태 전이에 필요한 가드(guard)와 액션(action)을 포함합니다~ㅎㅎ public class Transition { private OrderProcessStatus source; private OrderProcessStat..
상태 전이 제어 구현(State Machine) - 2. 상태 기계란? 그리고 상태 기계를 구현한 이유 상태 기계(State Machine)란? 상태 기계는 객체의 상태를 관리하는 설계 패턴입니다. 이 패턴은 객체가 특정 상태에 있을 때만 특정 이벤트를 처리할 수 있도록 합니다. 상태 기계는 객체의 상태, 상태 전이, 그리고 상태에 따른 행동을 명확하게 정의합니다! 상태 기계의 구성 요소 상태(State): 객체가 취할 수 있는 모든 상태를 나타냅니다. 예를 들어, 주문 처리 시스템에서는 "결제 대기", "배송 중", "배송 완료" 등이 상태가 될 수 있습니다~ 이벤트(Event): 상태 변화를 유발하는 외부에서의 입력입니다. 예를 들어, 고객의 결제 완료, 상품의 출고 지시 등이 이벤트가 됩니다~ 전이(Transition): 한 상태에서 다른 상태로의 이동을 정의합니다. 각 전이는 특정 이벤트에 의해 발..
상태 전이 제어 구현(State Machine) - 1. 상태 전이 제어와 서비스 계층에서 직접 상태 전이 제어 구현 했을 때의 문제점 상태 전이 제어란? 예를 들어 고객이 쿠팡에서 노트북을 주문했다고 가정해보겠습니다. 대략 이러한 프로세스를 거쳐 노트북이 고객에게 전달될 것 입니다! 여기서 결제완료, 출고예정, 배송시작, 배송중, 배송완료를 상태라고 부르고 한 상태에서 다른 상태로 바뀌는 것을 상태 전이라고 합니다. 상태 전이 제어는 상태 전이에서 어떠한 요청에 따라 상태를 전이할 것인지, 어떠한 조건을 충족해야 상태가 전이될 것인지, 상태가 전이되면 어떤 행동을 해야하는 지를 구현하는 것이라고 할 수 있습니다. 서비스 계층에서 직접 상태 전이 제어 구현 예시와 그 문제점 서비스 계층에서 직접 상태 전이 제어 구현 예시 @Service public class OrderService { ... @Transactional public vo..