레거시 소스 개선을 하며 느낀 점(2/4)
시작은 업무 파악 부터
아무리 개발 실력이 좋은 개발자라도 서비스의 업무를 모르는 상태에서 비지니스 로직을 작성할 수 없을 것이다.
각 어플리케이션이 담당하는 업무, 서비스 정책, 헙업 부서 등 과 같은 정보를 정리 후 소스를 보는것이 좋다.
또한 당장 처리해야되는 운영 업무를 위해서는 소스 분석 이전에 이 업무가 어떤 어플리케이션에서 동작하고 어떤 정책에 의해 결정 되는지 파악하는게 더 훨신 더 운영 업무에 도움이 된다.
만약 관리자 시스템이 있다면 관리자 기능에서 어떤것들을 할 수 있는지 파악하는것도 좋다.
(관리자 통해서 할 수 있다고 안내 하거나, 내가 직접 관리자 기능을 이용하면 편하기 때문이다. 실수 방지도 할 수 있고 ..)
1. 서비스 사용자 입장
서비스 정책을 가장 쉽게 파악 할 수 있는건 실제 사용자가 보는 서비스 안내 페이지를 보면된다.
(일반 사용자를 위한 서비스의 경우.. 그게 아니라 B2B 서비스의 경우 문서나 전임자에게…)
나의 경우 클라이언트 앱이 있는 상태였고 실제 사용을 해보며 주요 기능별 정책을 정리하였다.
예를 들면 몇만원 이상 구매시 쿠폰이 발급되고, 포인트가 얼마 이상 쌓이면 승급이 된다. 라는 정보를 정리하였고 이 후 소스를 보며 다른 점이 있는지 확인하였다.
2. 업무 단위 소스 분석
기존 운영되는 시스템을 받았을때 어디서부터 소스를 봐야하는지 참 막막하다.
처음에는 연동규격 문서에 적힌 순서대로 소스를 보고 나름 정리를 하였으나 나중에 생각해보니 상당히 비효율적이라는 생각이 들었다.
그 당시 당장 운영 업무에 필요한 것부터 우선 순위를 정해 분석한다면 시간을 효율적으로 사용할 수 있었을 것이다.
우선 순위는 해당 서비스의 주요 업무를 최우선으로 정하고 부가적으로 요청되거나 해당 업무 플로우 안에 포함되는 것들을 그 다음 우선순위로 정하면 좋을것 같다.
이런식의 소스 분석이 좋은점은 운영업무 과정을 생각해보면 그 장점이 확실히 들어난다.
대부분의 운영업무는 운영문의 -> 어떤 업무인지 확인 -> 로그 또는 DB 조회 -> 문제점 확인 -> 응대 순으로 진행되는데
이때 업무의 종류만 알면 무슨 로그를 봐야하는지, 어떤 키값으로 grep을 해야될지, 어떤 플로우에서 문제가 발생했는지 확인이 쉬워진다.
예를 들어 회원가입이라는 업무는 API서버의 본인인증 -> 입력값 검증 -> DB 조회 -> 성공여부 리턴 플로우를 알고 있다면
API 로그에서 본인인증 요청의 로그를 검색해서 확인하거나 각 요청의 키 값들을 묶어서 검색하여 문제점을 파악할 수 있을것이다.
3. 레거시 시스템의 소스 분석 방법
꼭 레거시 시스템에 해당되는 방법은 아니지만 나의 경우 가장 확실하고 편한 방법은 아파치 로그를 기준으로 서비스 플로우를 찾아가는 것이다.
그 당시 맡은 레거시 시스템 앱, API 서버간 통신을 하는데 특정 기능을 확인하기 위해 직접 앱으로 요청하면서 테스트를 하는식으로 진행헀다.
- 클라이언트 프로그램(앱또는 웹)에서 실제 사용자와 같이 서비스를 호출한다.
- apache 로그를 통해 요청되는 서비스와 순서를 파악한다.
- 어플리케이션 소스와 로그를 보며 각 서비스 간의 상관 관계를 파악한다.
어떤 업무를 보면 하나의 업무를 위해 2~3개의 요청이 필요한 경우가 있다.
이러한 경우는 유니크한 거래번호가 각 요청에 포함되는 경우가 많은데 이러한 값들을 중점적으로 파악하여 운영 업무에서 로그 검색을 할 때 해당 거래번호를 grep 하면 빠르게 문제점을 파악할 수 있다.
4. 함정 조심
마지막으로 레거시 시스템을 운영하다 보면 생각지도 못한 부분에서 문제가 발생할 수 있으니 항상 조심해야된다. 아래는 내가 경험했던것들 중 기억에 남는것들이다.
- 운영 소스와 SVN 소스가 다름
- 한글 인코딩 방식이 다름 (UTF-8, EUC-KR 혼용 …)
- 문서에 없는 배치 … ( 꼭 프로세스 확인 해보길 )
- 외부 연동 모듈 ( 연동을 위한 설정값들 주의 )