
이번 주는 정말 말 그대로 "항해"라는 이름에 어울리는 한 주였다. 어디로 가야 할지, 뭘 먼저 해야 할지, 바다 위에 떠 있는 기분이었다. 이번 주 과제는 요구사항이 굉장히 러프하게 주어져서, 과연 어떤 문서를 어떤 수준으로 작성해야 하는지 판단하기가 너무 어려웠다. 혼자서 "이게 맞나?"를 계속 되뇌이게 되는 한 주였고, 그 덕분에 설계라는 작업 자체에 대해 아주 깊이 있게 고민해볼 수 있었다.
초반에는 정말 막막했다. 학교나 학원에서도 설계 과제를 해본 적은 있었지만, 이번처럼 "진짜 내가 주도해서 만들어가야 하는 상황"은 또 처음이었던 것 같다. 특히나 이 과제는 내가 스스로 시나리오를 세우고, 도메인을 정의하고, 설계를 해야 하는 방식이라 더더욱 그랬다. 머릿속에 구상이 안 잡히니까 손도 안 움직이고, 문서 한 줄 쓰는 것도 망설이게 되더라. 무엇보다 ‘설계에 정답이 없다’는 사실이 마음을 더 무겁게 했던 것 같다.
하지만 멘토링과 발제 자료 복기, 그리고 다른 팀원분들의 설계 방향을 참고하면서 조금씩 나만의 기준을 세워갔다. ‘정답은 없다, 내가 정답을 만드는 것이다’라는 생각으로 방향을 정했고, 그때부터 본격적으로 설계를 시작했다. 이동규 코치님 멘토링에서 ‘이벤트 스토밍’이라는 개념을 들은 게 결정적이었다. 이걸 단순히 문서 한 장으로 생각하지 않고, 도메인을 깊이 있게 탐색하고 도출하는 도구로써 받아들이게 되었다. 객체지향적인 설계를 하고 싶다는 욕심도 있었기 때문에, 도메인 모델링을 할 때 꽤 많은 시간을 들였다.
동시성 문제나 외부 이벤트 처리까지도 생각하다 보니 자연스럽게 트랜잭셔널 아웃박스 패턴을 공부하게 되었고, 이 역시 설계에 반영했다. 시퀀스 다이어그램, 상태 다이어그램, 클래스 다이어그램, ERD까지 가능한 모든 시각적 자료를 활용해서 구조를 정리하려고 노력했다. 문서를 작성하는 과정 자체가 ‘정리를 위한 정리’가 아니라, 실제로 코드로 옮겨갈 기반이라는 인식을 하면서 더 몰입할 수 있었다.
심화과제에서는 API 명세와 Mock API 구현을 진행했다. 지난주 과제와 이어지는 흐름이라 익숙한 부분도 있었지만, 이번에는 더 실제 서비스에 가깝게 인터페이스를 나누고 구조를 유연하게 구성하고자 노력했다. Swagger 명세를 위한 인터페이스를 따로 두고, 컨트롤러에서 implements를 통해 구현하는 방식으로 역할을 분리했다. 서비스 계층도 인터페이스를 만들고, Mock 객체를 별도로 구현해서 컨트롤러에 주입하는 형태로 구성했다.
이렇게 하면 실제 구현으로 전환할 때 유연하게 대체가 가능하다고 판단했다. 다만 이 과정에서 몇 가지 고민이 생겼다.
예를 들어 쿠폰 응답 값을 Mock으로 처리할 때, 실제 도메인에서는 할인율과 타입을 Enum으로 나눠놨지만, 명세에서는 문자열로 묶어서 처리했는데, 이런 건 도메인 모델을 미리 설계해서 반영해야 하는 걸까?
이런 질문들이 계속 머릿속을 맴돌았고, 실제 서비스 설계를 해본 경험이 많지 않다 보니 계속 ‘이렇게 해도 될까?’라는 생각이 들었다. 하지만 그럼에도 불구하고 결국에는 기본과제 + 심화과제 + nice to have까지 모두 마무리할 수 있었고, 지금까지의 과정을 되돌아보면 굉장히 큰 성취라고 느낀다.
물론 설계를 하다 보면 계속 구조가 바뀌고, 그에 따라 문서를 반복적으로 수정해야 했던 건 꽤 지치기도 했다. 처음부터 명확하게 방향이 잡혀서 일사천리로 진행되면 좋겠지만, 아직은 실력을 쌓는 단계이고, 시행착오를 겪으며 배우는 중이라고 생각한다. 완벽하게 하는 것보다, 이번 주에는 진심으로 몰입하고 성장했다는 사실이 더 중요하다고 믿는다.
이번 주는 정말 여러모로 값진 시간이었다. 기획, 설계, 분석, 테스트, 문서화까지 하나의 사이클을 경험하며 확실히 시야가 넓어진 느낌이다. 다음 주는 이 흐름을 잘 이어가되, 설계나 구현을 조금 더 스마트하게, 반복을 줄이면서도 완성도 있게 다듬어보는 걸 목표로 삼고 있다.