WIL_230813
6월부터 8월까지의 여름의 흔적
지난 신용평가사 앱 프로젝트 6월 종료 이후 동료들은 엑싯하고 클라이언트 수정 요청사항을 대응하고 있었다.
지난 프로젝트에서 현장 PM의 역할을 수행하다보니 직접 개발 퍼센테이지는 높지 않았으나 역할로 인해 전체적인 프로젝트 맥락을 이해하고 있고 클라이언트 요구사항의 수준이 높지 않아 혼자서도 대응할 수 있음에 다행이라고 생각하였다.
이후 내부 결정으로 인해 다른 프로젝트로 이동이 필요했으며, 현재까지 참여했던 프로젝트 중 가장 큰 규모의 프로젝트에 참여하게 되었다.
해당 프로젝트는 자세하게 기술하기는 커머스 관련 프로젝트로 일반 쇼핑몰보다 요구사항이 굉장히 많은 편이었다.
환율이라는 큰 변수가 존재하였고 쿠폰 정책도 굉장히 다양했으며, 결제 수단도 국내외 수단을 포함해야 하는 난이도가 있는 프로젝트로 보였고 실제로도 그랬다.
처음 부여받은 역할은 퍼포먼스 개선이였다.
정확한 구조는 여기에 언급하기 어려우며, 데브옵스단에서 지적해주는 슬로우 쿼리의 개선이 필요한 상황이였다. PM님과 상의를 통해 아래의 내용을 진행해보는 것으로 이야기가 되었다.
1) 코드 개선을 통한 효율성 재고
2) 인덱싱 처리
3) 캐싱 처리
각 내용에 대해 고민을 한 결론은 다음과 같았다.
- 내가 참여한 시점은 클라이언트측 담당이 참여하는 통합테스트 직전인 상황이라 해당 방법은 리스크가 있을 수 있다 판단하였다.
- 많은 테이블이 단일 또는 복합 인덱스를 처리해주면 개선이 될 수 있을 것이라 판단되었다.
- 단순 또는 일정기간 연산이 필요없는 데이터는 캐싱처리를 하면 효율성이 개선될 수 있을 것이라 판단되었다.
즉, 현 상황에서 쿼리 자체를 건드는 것보다 DB 히트를 최소화하며, 히트시에도 인덱싱을 통해 연산속도를 최대한으로 끌어올려 퍼포먼스 개선을 이끌어내는 것을 목표로 하였다.
이후 코드를 확인하며 대상이 되는 테이블의 인덱스를 생성하고 걸린 갯수와 쿼리 퍼포먼스를 체크하며 하나하나 처리를 하였다. 인덱싱을 걸기 시작하면서 주변에서 쿼리 속도 개선이 체감된다고 이야기를 해주어 수치만이 아닌 체감상 개선이 되어감을 느낄 수 있었다.
캐싱은 Django 스택으론 인증인가단이나 각 API 콜에서 걸어서 처리해본 적은 있으나 스프링에서는 스스로 구조나 코드를 잡는 것보다는 일반적으로 어떻게 처리하는게 추후 유지보수에도 유리할 것인지 판단이 서지 않아 요청을 드려 부장님에게 가이드를 받을 수 있었다.
가이드를 받은 뒤 필요한 서비스마다 캐싱을 처리하기 시작하였다.
리턴 데이터타입이 설정과 맞지 않는 등 애로사항이 있었지만 하나하나 처리하였고 특히 레디스 키값의 중복을 피하고자 키 제네레이터를 커스텀으로 만들었는데 해당 부분을 적용하였을 때 별문제 없이 사용성 개선이 느껴지게 되는 것이 가장 좋았다.
퍼포먼스 부분 개선 완료 후 결제 파트(선물하기, 결제 취소 및 취소 트랜잭션별 데이터 리턴 등)의 개선을 진행하였다.
선물하기 파트는 기본 결제 + 선물의 특별 요건이 포함된 사항이라 코드 리딩을 하며 요건을 파악하는 것이 제일 급선무였다.
기본적인 뼈대는 만들어져 있으나 디테일적인 요소가 좀 부족하여 클라이언트단 필터링을 위한 컬럼 생성이라던가 코드 가독성 개선 및 별도 메소드 분리 등 작업을 통해 요건과 퍼포먼스적인 요소를 부합하는데 주력하였다.
이후 취소 부분은 기본적으로 완성이 되어 있었으나 개발 중간 요건이 추가되면서 코드 가독성 및 일관성이 부족한 부분이 있었다.
우선 결제 취소 코드를 논리적으로 6개 파트로 분리하였다. (자세하게 설명하긴 좀 어렵지만 결제 취소 유효한 주문 단위 여부 체크부터 취소 SMS, 알림톡 발송 등으로 분리) 분리하는 가운데 재사용이 가능한 데이터들을 포함하는 오브젝트를 가지고 일관성을 유지하려고 했으며, 해당 작업으로 인해 변수 재할당 요소가 줄어들어 사용성 개선이 이루어진 것이 보였다.
아울러 각 파트별 단위 테스트 코드 작성을 진행하였으며, 결제 취소 케이스를 다수 생성 및 테스트 수행을 통해 현재까지 요구된 요건에 부합하는지를 확인하였다.
까지 8월 초까지의 업무내용이였고 이 글을 쓰기 전날 5일간의 일본 휴가를 마치고 돌아왔다.
휴가에서 얻은 에너지로 블로그도 잘쓰겠다 다짐을 해보며 이 글을 마무리해본다..