작업의 이름은 통합 이벤트 라고 불리는 것을 작업중이다.
현재 업무 중인 포워딩 레포는 이제 4년차를 맞이했다.
흔히 코드의 생명은 2~3년이라고 하는데, 그러다보니 삐걱거리고 안되는 부분도 있고
신규 기획으로 인하여 추가 작업해야하는 부분이 있었는데...
바로 운송 상태에 대한 히스토리를 파악하는 것이였다.
말만 들으면 정말 간단하다.
API 한개마다 로그를 찍는 코드만 추가해주면 되니까
인 줄 알았는데, 그냥 구조가 너무 복잡했다.
코드를 작성한 사람들도 많아지고, 사람마다 스타일이 달랐기에 (컨벤션이 없었음 초반에..)
Event emitter
를 그냥 자기 취향에 맞게 남발(...)하고 있던 것이였다.
근데 이걸 한개로 합치라는 퀘스트가 떨어졌다.
일단 기존의 로그를 모두 담을 수 있는 테이블이 필요했다.
니들은 JSON 컬럼 쓰지마라
이 4가지를 복합적으로 세팅하여 테이블을 설계했는데
이 마저도 핑퐁이 정말 많았다(ㅋㅋ)
해당 작업은 기존의 포워딩의 키맨인 팀원과 나 2명이서 진행을 했는데
해당 레포를 잘 아는 팀원과, 이제 레포를 보기 시작한 나
의 끝없는 논의로 진행을 했다.
그래서 어느정도 컬럼이 정리가 된 후, 생성을 한 다음에
논의를 계속 이어가다가 이러다간 끝이 나지 않을 것 같다고 (왜 변경했는지? 에 대한 컬럼의 네이밍을 정하는데 큰 혼란이 있었다. 근데 이건 현재 진행형일 수도 있음.)
일단 만들어보고 틀리면 고쳐보자! 라는 식으로 진행하기로 한다.
좀 다양하게 정리가 됐다.
그렇게 복잡하게 진행을 하고 있었는데........
정확하게 월요일날, 좀 당황스러운 코드를 맞이하게 된다.
3개의 핸들러를 연이어서 호출하는 코드
를 PR 리뷰를 하는 과정에서 보게 됐다.
사실 평소에도 2개씩 붙어있는 걸 볼 때 마다 이마를 짚으면서 이게 맞나 진짜? 하고 있었는데
연속 3개가 따라락 붙어있는 것을 보고 그냥 이렇게 진행되는 것은 아닌 것 같다고 홀드를 요청하고
팀원과 논의를 하다보니, 사무실에서 하고 있어서 주변의 팀원분들이 들으면서 이런저런 생각을 잡아주고
어제(화요일) 정리가 좀 됐다.
화요일날 ChatGPT와 다양한 레퍼런스를 보고 어느정도 결정을 하게 됐다.
일단 오버엔지니어링을 하지 않을 것.
이게 제일 중요하다고 생각했다.
솔직히 정답은 이벤트 드리븐 아키텍쳐를 차용하는 것이 맞다고 생각했다.
왜냐하면 서비스 하나에 발생하는 것들이 동시다발적으로 다 다른 엔티티를 건드려서 이게 한개의 메소드로 진행되기엔 쪼끔 애매모호한 감이 있었다.
근데 그럼 유지보수는 누가 할거고 그렇게 변경되는 과정에서의 번잡함은 누가 감당할 수 있지? 라는 생각과
일단 포워딩 도메인 특성상 API 콜이 진짜 엄-청 없다.
그러다보니 굳이 고오급 아키텍쳐를 구현하는 것은 시간적으로도 손해라는 판단을 세웠다.
아무튼 아래처럼 바꾸려고 현재 진행중이다.
그래서 축을 자리 바로잡고 진행을 하려고 하고 있는데...
과연 이게 언제 끝날 수 있는 것인지 모르겠다...ㅋㅋㅋ
여기서 더 수정이 일어날 것인지
아니면 이대로 깔쌈하게 완료가 될 것인지
올해는 일단 못끝내고(이벤트가 150개가 넘고 이벤트 1개당 액션이 4~6개가 있는 경우도 몇 있다..)
언제 쯤 끝날 수 있을지 모르겠다.
잘 끝낼 순 있나?
뭔가 이상한 느낌이 많이 들었다.
모듈화를 시켜놨는데, 해당 이벤트 핸들러의 로직 상에서 수많은 모듈에 접근해야하는 불상사가 벌어지고 마는데....
머리를 붙잡고 있던 팀원과 나는 그렇게 헬프 콜을 쳤다.
그러면서 다양한 이야기가 나왔고, 원점으로 돌아갈 뻔 한 문제도 있었다...
아무튼 요약을 해보자면
이벤트는 하나만 쏘고, N개의 모듈에서 N개의 리스너를 사용한다.
targetGroup은 필요했었다.
최초의 설계에서는 targetGroup이 있었으나
명확한 용도를 특정하지 못하여 targetEntity
로 변경하게 되었다.eventKey를 정확하게 명시하자.
* 그룹화가 되어있다보니 변경된 이력을 간단하게 확인하려면 json 컬럼을 뒤집어 까야하는데..
이러면 상당히 번거로워지다보니 eventkey를 정확하게 명시하도록 이야기를 했다.
맨 처음에는 entity+(컬럼이름+@)+CUD
로 가려다가 너무 많은 컬럼이 변경되면 답이 없으니
entity+CUD
로 가기로 일단 정리했다.
하면 할수록 코드 베이스를 전체를 바라보면서 작업을 해야하다보니 정말 작업이 지지부진하다;
그래서 둘이서 우에엥 하고 있는데, 뒤에서 CTO님이 원래 그렇게 가는거 맞다고
큰 일 하고 있으니 다른거 안하고 그것만 하라길래 일단 ㅇㅋ.... 모드로 천천히 진행하고 있다.
이거 몇차까지 우스갯소리로 이야기를 하고 있는데 5차 내외로 끝나면 좋겠다.
사람들 앞에서 고민을 이야기해보자
러버덕이 되는 한이 있더라도 커다란 도움이 된다
진짜라니까?