4주차 미션을 받고 멘붕이 왔다.
문제를 이해하기에도 시간이 오래걸렸고, 구현하는게 까다로울게 눈에 훤했다.
구조를 잡는데만 하루를 썼다. 그런데 생각해보면 어려워서 더 재밌던 과제였던 것 같다.
이번 미션은 요구사항이 이메일 형식으로 왔고,
비즈니스팀에서 개발팀에게 '크리스마스 프로모션을 위한 프로그램 개발'의뢰를 한 상황이다.
처음엔 어떤걸 구현해야하는지 이해가 안가서 정말 거짓말 안보태고 요구사항만 10번 넘게 읽은 것 같다.
그렇게 읽으니 무엇을 원하는지 알 것 같았고, 나는 크게 두가지 기능으로 나눴다.
기본 기능은 출력예시에 맞춰 구현하는 것이다. 이전 과제들처럼 출력형식에 맞춰서 답을 맞게 내는 것이다.
기본 기능만큼 중요하게 생각한게 추가 기능이었는데,
추가 기능은 비즈니스팀이 제시한 이벤트 목표에 부합하는 프로그램을 구현하는 것이다.
이벤트 목표는 세가지였다.
- 중복된 할인과 증정을 허용해서, 고객들이 혜택을 많이 받는다는 것을 체감할 수 있게 하는 것
- 올해 12월에 지난 5년 중 최고의 판매 금액을 달성
- 12월 이벤트 참여 고객의 5%가 내년 1월 새해 이벤트에 재참여하는 것
실무를 경험해 본 적이 없어서 개발팀이 이벤트 목표까지 생각하여 구현을 하는게 맞나 싶기도 했지만,
안하는 것보다 하는게 나을 것 같아서 구현을 했다.
위의 목표는 각각 이렇게 연결지었다.
- 프로그램 시작 초기에 어떤 이벤트가 열리고 있는지 설명하고 각 이벤트는 중복 참여가 가능하다는 메시지를 출력
- 최고의 판매 금액을 달성하려면 추가 주문을 유도해야한다
-> 샴페인 증정이벤트를 이용해 얼마 더 주문하면 샴페인 증정한다는 메시지 출력 -> 추가 주문할지 재입력 요청- 뱃지를 증정한 고객에게 내년 이벤트 참여시 혜택을 알린다.
내가 기본 기능만이라도 구현을 할 수 있을까? 라는 생각이 들기도 했는데, 어떻게든 해내겠다는 마음을 먹었다.
구현을 하다 보니, 진짜 개발팀이 된 것처럼 몰입하게 됐고 책임감(?)이 생기기도 했던 것 같다. 이 부분이 재밌었다.
다양한 할인 이벤트를 어떻게 보기좋게, 관리하기 쉽게 구현을 할 수 있을까 고민했다.
고민을 하던 중 전략 패턴이라는 것을 알게 되었고, 적용해보았다.
실제로 적용을 해보니 각 할인 이벤트를 관리하는 객체는 간결해졌고, 가독성도 좋아졌다.
처음에는 선물 증정과 할인 이벤트 이렇게 두가지 전략을 나눠서 구현을 했지만, 나중엔 두 가지를 병합한 혜택 전략으로 구현했다.
병합하는 과정에서는 기존의 코드를 변경하지 않고도 선물 증정 전략을 추가할 수 있었다.
또한 이 혜택들을 적용하는 과정에서는 전략들을 리스트로 만들어 간단히 사용할 수 있었다.
전략을 최대한 활용하는 방식으로 코드를 써봤지만, 부족한 부분이 많은 것 같다.
짧은 기간에 찾아 보고 적용을 한 것이라 이 방법을 쓰는게 맞는 건지는 잘 모르고 적용을 했다.
이보다 더 나은 방법은 없는 것인지, 어떻게 하면 최대한 효율적인 전략패턴을 사용할 수 있을지 등을 생각해보고 공부해야겠다.
이번 주차는 MVC패턴 뿐만이 아닌 도메인 주도 개발을 적용해 보았습니다.
처음 적용하기로 마음 먹었을 땐 충분한 학습을 한 후에 구현을 시작해야겠다고 생각을 했지만,
4주차 미션 내용을 확인하곤 시간이 부족할 것 같다는 생각이 들어 충분한 학습을 하지 못하고 구현을 시작했다.
이 부분이 제일 큰 아쉬움으로 남는다.
이번 주가 아닌 저번 주부터 적용을 했다면, 혹은 학습을 먼저 진행했다면 더욱 완성도 있는 코드가 됐을 거라 생각이 든다.
아직 도메인과 서비스에 대한 기준을 명확히 이해하지 못했다. 이
부분은 개발자로써 꼭 필요한 학습이라 생각되기 때문에 최대한 빠른 시일 내로 도메인 주도 개발 관련 공부를 해 볼 생각이다.