회사에서 운영하고 있는(거의 방치된...) 서비스에서 외부 서비스의 REST API를 호출하는 부분에서 오류가 잦아, 원래의 주업무는 뒤로 미뤄진채로 오류를 고치는 작업을 하고 있습니다.
먼저 외부 서비스의 클라이언트를 작성하는 작업을 했고, 기존 코드의 외부 서비스 API 호출 부분을 교체하려고 했습니다. 작성한 클라이언트를 테스트한 후 하나씩 교체해나가고 있는데 끝이 없네요.
일단 테스트 코드가 없어 클라이언트 부분 교체 후에 어디까지 영향을 받는지 명확하게 파악하기가 너무 어려웠고, 그나마도 로그를 보려고 했더니 로그 설정도 엉망인 탓에 로그 설정부터 다시 잡아야 했습니다.
문제가 너무 많지만(...) 조금 짚어보자면
- 외부 서비스 API 연동 부분과 비즈니스 로직 부분의 커플링이 심하다.
- 중복된 코드가 많아 같은 기능에 대한 수정을 여러 번 해야한다.
- 모든 것을 서비스 레이어에서 처리한다.
- 불필요한 상속으로 인해 섣불리 베이스 클래스의 코드를 건드리기 어렵다.
- 클래스들의 역할이 불분명하다.
- InMemory DB/RDB/WAS VM은 각각 2개로 구성되어 있으나 하나만 돈다(!?)
- 세션 저장을 위한 Redis 서버는 테스트 서버의 Redis로 설정되어있었다.(......)
- 메이븐 모듈 구성이 불분명하다(쓰이지 않는 모듈이 있긴 한데. 빼려니 무섭다..)
- 배포 환경에 대한 설정 파일의 구분이 없다.(브랜치로 구분한다....잘못 수정하고 merge하면 악몽)
- 브랜치는 VM당 1개로 되어 있닼ㅋㅋ
- 외부 API와 연동 시 응답받은 JSON과 매핑되는 클래스의 필드 타입이 정확하지 않다.
(이건 외부 API 제공 업체의 문서화가 정확하지 않은 탓도 있다. API 문서에 타입이 기재되어 있지 않고, 그냥 샘플 값만 있어서 ID경우 샘플은 숫자로만 12345가 적혀있는데 사실은 정수 타입이 아닌 UUID형식의 String도 섞여 있다)
- 외부 API 호출 시의 요청 URL을 URL인코딩하지 않아 일부 케이스에서 오류가 발생했다. (서명을 생성하면서 특정한 경우에는 인코딩하지 않아도 되지만, 또 어떤 경우에는 인코딩을 해주어야 하는 문자가 포함됨)
- ... (한숨)
울고싶네요.. 하...
어쨌든 사용자의 관점에서 가장 불편을 겪고 있는 것은 외부 서비스 API의 연동으로 인한 오류인데, 회원 정보 이외의 거의 대부분의 기능은 모두 외부 서비스 API를 호출하고 있으니.. 사실 상 프로젝트의 대부분의 코드를 변경해야 하는 셈입니다.
차라리 이 서비스가 전망이 훤하고, 그저 이 전에 개발했던 분들이 시간이 없어서 그랬고, 고치기만 하면 흥할 것이라 예상이 되고, 제가 이 서비스에 애착이 있고 오너십이 있다면 좋겠지만... 모두 아니라 답답할 따름입니다.
얼른 수술 마무리하고 주업무로 넘어가야겠네요
'마음이 뛰다' 카테고리의 다른 글
여백 (4) | 2016.07.29 |
---|---|
휴.. (0) | 2015.12.18 |
드디어 몸무게 앞자리가 6을 찍었다! (2) | 2015.07.29 |
도돌이표 (0) | 2015.05.15 |
정작 나는 준비되어 있는가? (0) | 2015.03.27 |