본문 바로가기
개인글

주문서 전환 프로젝트 8부능선

by ybs 2023. 6. 24.
반응형

내가 담당하는 네이버페이 주문서 전환 프로젝트(이하 신주문서)는 크게 3개 모듈로 이뤄졌다. 그래서 순차적으로 전환 시키는게 우리팀 미션이다.

 

우리는 작년 12월에 1차 전환을 끝냈고, 이번주에 2차 전환도 마무리지었다. 드디어 마지막 최종 보스(스마트스토어용 주문서)만 남은 상태다. 스마트스토어는 1,2차 때보다 사용자 트래픽이 훨씬 높고 상품 종류와 결제방식도 다양하다. 하지만 큰 장애없이 전환할 수 있을거라 생각한다. 우리는 동적으로(애플리케이션 배포없이) 사용자 트래픽을 제어할 수 있는 장치를 구축해놨기 때문에 지난 1,2차 때도 잘 전환할 수 있었다. 

 

처음 시작은 전체 사용자 중 1% 만 신주문서를 경험하게 하고, 우리는 쌓이는 로그들을 집중 모니터링 한다.

 

모니터링하면서 에러가 발생하거나 조금이라도 의심되는 상황이 발생하면 그 즉시 0%로 돌린다. 사용자들은 문제없는 기존 주문서로 가므로 편한 마음으로 천천히 원인을 파악하고 수정해서 재배포 할 수 있다. 퇴근 후나 주말에는 즉시 대응하기가 어려우니 0% 로 낮추고 업무종료했다.

 

이렇게 그림만 보면 동적 트래픽 제어가 쉬워보인다. % 계산 해서 if 문으로 기존 주문서로 보낼지, 신주문서로 보낼지만 분기해주면 되니 말이다. 하지만 실제로는 그렇게 단순하지 않다. 수많은 서버들과 협업해서 한 서비스를 운영하는 이곳에선, if 문으로 분기하는 우리 서버로 사용자 트래픽을 보내는것부터가 쉽지 않다. 운영환경에서 문제없이 잘 흐르고 있던 트래픽 방향을 트는건 리스크가 크다.

 

나는 2~3개 조직에서 각자 담당하는 서버들과 함께 사용자 트래픽을 돌리기 위한 커뮤니케이션을 정말 많이 했다. 이글에선 자세히 설명할수없지만 트래픽 제어를 위해서 아래 그림처럼 트래픽이 흐르게 만들었다.

 

왜 꼭 이렇게 해야하는지, 더 효율적인 방법이 있지 않냐는 질문이 있을수 있겠다. 물론 있다. 하지만 동적으로 트래픽을 제어하는 기능은, 안정적으로 전환하기 위한 임시 기능이기 때문에 개발에 큰 시간을 투자 하기 어렵다. 또한 위 서버들 중 일부만 우리꺼기 때문에 변경 비용이 너무 크다. 최소한의 변경으로 결과를 내야 했기에 위와 같은 모습이 나왔다.

 

이렇게 구축된 시스템을 활용해 전환하면서 총 20번 넘게 %를 올렸다 내렸다 반복했고 빠르게 버그들을 수정해 나갔다.

그런데 시간이 흘러 시스템이 어느정도 안정되니, 작은 이슈 때문에 전체 트래픽을 0% 로 돌리는게 아깝다고 느껴졌다.

 

그래서 버그로 문제가 되는 특정 판매자나 구매자는 항상 기존 주문서로 보내게끔 강제시키는 기능도 추가했다. 모니터링하면서 계속 실패하는 케이스를 빠르게 조치해 사용자 불편을 최소화 시킬 수 있었다.

 

돌이켜보면 모니터링하면서 빠르게 에러 원인을 찾는 능력도 많이 길러졌다. 신주문서는 EDA 로 되어 있어서 사용자가 진행한 단계마다 Event 들이 로그로 쌓여있다. 이 Event 로그는 주문서 애플리케이션에서 찍는 로그와는 다르다. 그래서 애플리케이션 로그가 저장되는 곳과 사용자 Event 로그가 저장되는 곳도 다르다. 그러다보니 필요한 key 값들을 빠르게 캐치해 검색하고 맵핑해(머리속으로) 로그만으로 사용자 주문/결제 상황을 해석하는 능력이 필요하다.

 

왜 굳이 따로 수집하는지 궁금할 수 있다. 핵심은, Event 들을 로그로 볼건지 데이터로 볼건지 여부다. 쌓인 Event 들을 어떻게 활용하냐에 따라 별도로 수집하는 가치가 결정된다(아직 어떻게 활용할건지 구체적으로 논의하진 못함).

 

 

마지막으로, 애플리케이션 서버에 버그가 발견되서 이전에 쌓인 모든 Event 로그들을 분석해야 할 때가 있다. 이때 우리는 KQL(Kibana Query Language) 을 사용하는데 더 복잡한 조건들이 필요하면 결국 json 으로 다운받은 후 json 파싱해 검사하는 프로그램을 만들어서 확인할 수 밖에 없다. 아직 Event 로그들을 필요에 따라 조회할 수 있는 Materialized View 가 준비되지 않았다. 아직은 Materialized View 까지 고민할 단계가 아니긴 하지만, 앞으로 어떻게 풀어낼지가 남은 과제중 하나다.

반응형