GS리테일 DX 블로그

Digital Transformation으로 고객 생활 가치의 이노베이션을 꿈꾸는 IT 사람들의 이야기

APP

엔터프라이즈 MSA 이야기 3탄 – SR 도메인 편

무무나이 2023. 8. 1. 14:33

당사에서는 홈쇼핑 백오피스 시스템에 대해 2018년부터 Application Modernization 마스터플랜을 수립하여  

업무 도메인 별 구조개선 작업을 진행 하고 있습니다.  

 

고객자산 영역을 시작으로 방송주문 ,결제 도메인 영역에서 각각 마이크로 서비스로의  전환 작업이  진행되고 있습니다.    과정 중의 하나로 23 1월부터  SR 도메인에 대한 구조개선 프로젝트를 진행 과정을 공유하고자 합니다.

 

홈쇼핑 프로세스  Service Request(SR) 

 

쇼핑몰/홈쇼핑비즈니스에서 "Service Request" 일반적으로 고객이 상품 또는 서비스에 관련된 사항을 문의하거나 요청하는 것을 의미합니다.   홈쇼핑 고객은 문의불만사항상품 교환 또는 환불관련 사항을 고객센터에 직접 전화를 하거나, 쇼핑몰상에서 온라인채팅, 1:1 상담, 상품문의, 이메일 등을 통해 요청할 있습니다.

콜센터 상담원은 고객의 요청사항을 신속하고 효과적으로 처리하기위해 다양한 정보를 조회하고 처리상태를

관리하고 있습니다.  

 

그림 1처럼  SR 모든 서비스에 연관 되어 고객과 쇼핑몰 간의 소통과 상호작용을 원활하게 유지하기 위해  필요한 도메인입니다.  

 

 

그림 1. 쇼핑몰 프로세스와 SR

프로젝트 배경

 

레거시 시스템의 문제점  (pain-point) 

기존 홈쇼핑 시스템은 업무영역별 대부분의 기능이 하나의 소스 repository 관리되는 통합(모노리스) 구조입니다.

이러한 모노리스 시스템 구조로 인해, 기능 추가 복잡한 현행 시스템 분석으로 개발시간이 오래 걸리고, 개발 후 배포시에도 타 개발자와의 배포 충돌을 피하기 위해 기다리는 경우도 많이 발생했으며, 거대한 규모의 소스코드가 서로 엉켜 있어 영향평가도 쉽지 않았습니다

또한 10여 년전에 개발된 시스템으로 미사용 기능도 누적되어 있고, 기술적으로 노후화 되어 유지보수 비용도 증가하고 있었습니다.   업무영역의 오류로 장애가 발생한 경우, 상담원의 시스템에도 장애가 전파되어수많은 상담원이 시스템을 사용할 없는 경우도 발생하였습니다.

 

전환범위 식별

SR 도메인 영역의 기능은 크게 가지로 나눌 있습니다.

하나는 온라인상에서 고객이 직접 요청한 SR 저장하는 기능과, 다른 하나는 상담원이 고객과 직접 통화하면서 SR 접수하고, 이에 대한 활동들을 이력으로 남기는 기능입니다.  

상담원이 사용하는 콜센터시스템의 Front 화면 UI 개편 작업은 별도의 프로젝트로 계획되어 있어, 백엔드 프로그램을  전환대상으로 먼저 진행하였습니다.  

 

그림2. 전환범위

 

프로젝트목표

기존 시스템이 갖고 있는 pain-point 해결하고자, 프로젝트의 목표를 두가지로 수립하였습니다. 

 

 l 시스템의 현대화  :  Cloud Native Application 구축  IT 표준 기술 업그레이드

 l 서비스 경량화      :  SR 도메인의 장애격리 수시 배포를 위한 독립된 서비스 구축

  


모노리스에서 마이크로서비스로의 여정

 

레거시 시스템에 대한 분석

모노리스 구조인 기존 시스템은   WEB  API 서비스에 대한 요청을 공통으로 제어하고 있었습니다. 그래서 로직은 길고 복잡해졌으며 , 사용 여부를 없는 코드들로 가득차 있었습니다.  

 

 API 서비스는 비교적 간단한 로직으로 구성되어 있고, Web 즉 콜센터 상담원의 서비스가 보다 복잡한 상태였으나 공통으로 관리되다 보다 복잡해 보였습니다.

 

데브경수 인스타툰 @waterglasstoon

 

 

 API 서비스를  단순화하기 위해   API 서비스와  Web Backend  서비스를 분리하기로 결정하였습니다.  코어 로직에 대한 이중 관리 우려도 있었으나레거시의 수많은 분기문들은 대부분 WEB 서비스의 요구사항으로 생겨난 것으로 인지하여서,  API  서비스의 처리 로직은  기능에만 충실 하도록 하는 것을 목표로 하였습니다.    

  

  

그림3. 서비스 분리 안

 

대상 프로그램  정리

기존 시스템을 분석하면서 가장 먼저 미사용 기능과 불필요한 서비스에 대한  정리작업을 진행하였습니다 

 

현 시스템은  시스템 간의 통신을  ESB ( Enerprise Service Bus)를 이용하고 있습니다.   

ESB 기능을  API로 전환 하기 위해  ESB 인터페이스 정의서를 기반으로 설계를 진행하되, 실 로그 정보와  호출하는 클라이언트 시스템에 사용 여부를 재확인하였습니다. 

결과 60 여개의 ESB 목록에서 미사용을 제거하여 26개로 줄였고,  API 설계 과정에서  중복된 기능을  정리하여 다시 10여 개로 대상을 줄일 수 있게 됩니다.  

 

 WEB 서비스 또한  메뉴 접근 로그 데이터를 토대로 사용 없는 메뉴 서비스에 대해서는  주요 사용자들과 확인을 통해  대상 프로그램을 제외 처리 하는 과정을 거쳐  20% 정도의  미사용 기능을 제거할 있었습니다.  

 

 

 

아키텍처 환경 설계

사내 인프라 관리 정책이 기존 IDC 환경에서 클라우드 환경으로 전환하고 있으므로, 인프라 및 애플리케이션을 클라우드 환경에 구성하였습니다.  

빌드/테스트 배포 환경 또한 자동화되어 있어 지속적인 통합과 배포가 가능하였습니다

그림4. Ci/CD 자동화

  

멀티모듈 구성

API Web 서비스를 분리하면서 공통 기능은 공유할 있도록 4개의 멀티 모듈로  프로젝트를 구성하였습니다

독립적으로 어플리케이션을 실행하는 Web 과 API모듈은 공통 Domain모듈과 Outer 모듈을 포함하여 기동 됩니다.

 

Domain 모듈에는 DB Entity 클래스들과 Repository 포함하고,  Outer 모듈은 공통 Util 예를 들어 파일 업로드메일 발송 타도메인에 대한 호출 처리) 에 대한 Interface 기능들을 분리하여 구성하였습니다.  


그림5. 멀티 모듈 프로젝트

 

데이터 분할 작업  

SR 도메인에 대한 서비스 독립성을 확보 하기 위해, SR 도메인에서  타도메인 참조하는 경우와 타도메인에서 SR 참조하는 대상을 전수 조사 하였습니다.  

 

SR에서 타도메인들에 대한 참조를 식별하고, SQL Query의의 Join 은 모두 풀어  여러 개의 쿼리들로 분해하고

논리적 DB 분리를 위해 DB 계정을 별도로 생성,  도메인 영역에 대한 권한 제어를  두었습니다. 

 

WEB 서비스 화면의 경우 주문, 상품, 고객 정보를 기본적으로 같이 보여 주는 경우가 많기 때문에  애플리케이션 레이어에서  조합하여 처리할 수 있도록 진행하게 됩니다. 

 

External Service 구성  : 도메인 데이터 접근

도메인에 대한 정보 조회는 external 서비스를 별도로 구성하여  자체적으로 개발을 진행하고,  도메인 업무 운영 팀에 요청하여 순차적으로 API를 교체하는 작업을 진행하게 됩니다

  

이는 프로젝트의 진행 일정은 맞추면서 ,  자체 검증 이후에 필요한 인터페이스 항목을 요청 함으로써 불필요한 API Contract에 대한 협의 과정을 최소화할 있었습니다

 

그림6. External Service API doc

External Api 서비스의 기능 교체는 Feign 이용하여 운영 서비스에 영향이 없이  교체가 가능하였습니다. 

 

서비스 1 오픈 이후 주문 정보를 제공 하는  API  3-4 차례 단계를 거쳐 자체 external API에 주문팀에서 제공하는 Microservice API로 교체를 완료하였고, 이후 타 영역  또한  API 제공 되는 시점에 순차적으로 교체해 나갈 예정입니다. 

 

external client 교체

 

l  Feign

넷플릭스에서 만든 API client 라이브러리로  interface와 annotation 구현으로 간단하게 RestTemplate 기능을 대체  가능 합니다.  Feign Client 별로 Header  , Timeout 등을 설정할 있습니다

https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/

  

 

통합 테스트, UAT   

운영 시스템을  신규 시스템으로 교체하는 프로젝트이다 보니,  전환 전후의 동일한 서비스가 유지될 있도록 검증하는 것이 관건이었습니다. 

 

API 서비스는  동일한 요건으로   기존 ESB와 신규 API를  테스트하여 기능 테스트뿐 아니라데이터 비교를 통해 기능의 완성도를 높이고자 노력하였습니다.   

 

Web 서비스는  테스트 사용자 계정을 기준으로 기존 서비스와 신규 서비스 사용을 분기 처리 하고,   동일한 동작   데이터가 노출되는지를 확인하는 방식으로 진행하였으며,   현업(콜센터 상담원) 분들의 적극적인 지원 덕분에 가능할 있었습니다.

 

그림7. 사용자별 호출 서비스 분기

 

 

점진적 오픈 전략  

SR서비스는 고객의 불만이나 문의를 처리하는 시스템으로  시스템의 가용성이 중요합니다. 

서비스 장애시  고객 문의 접수 자체가 되지 않거나  상담원 업무 처리에 대한  지연으로 인해  고객 불편이 가중 되게  될 것이기 때문입니다.  따라서  장애가 발생 하더라도   장애시간을 최소화 하고,  서비스를 빠르게 정상화 하는 것과,   점진적으로 오픈 하여  안정적으로 운용 할 수 있도록 전략을 수립 하였습니다.  

 

API 서비스는 오픈후  모니터링이나 알림 장치를 통해 이상 징후 감지를 감지하게 되면 배포 없이 신속하게 

기존 ESB 서비스로 전환 할 수 있도록  스위칭 체계를 준비 하였습니다.  

 

서비스를  오픈하면서  방화벽 이슈부터필수 파라미터 누락 여러 가지 상황들이 발생하였지만,  스위칭 기능으로 인해 빠르게 장애 전파를 막고  조치 대응 있었습니다

 

WEB 서비스는 대상 기능을 3 그룹으로 나누어 영향도가 적은 순으로 단계별 오픈을 진행하였고,  기능을 사용 할 수 있는 사용자를  특정 하여  오픈 함으로써  안정성을 확보하였습니다.   서비스 오픈시  이상 감지는 상담원으로부터  빠르게 피드백을 받을 수 있도록 핫 채널을 열어 소통하였습니다.  WEB 서비스 또한 스위칭 체계를  통해   배포 없이  기존 기능으로  원복 하고  신속하게 조치 하였습니다.  

 

 

그림8.  WEB 서비스 단계별 오픈 전략

 

  

로깅, 모니터링

서비스 어플리케이션 로그는  통합 로그 시스템이 구축되어 있어,  Open Search로 로그 분석을 사용할 수가 있었습니다.  

 

       

그림9. 로그 수집

  

  

분산 환경에 대한 로그 추적을 용이하게 하기 위해서 Sleuth를 적용 하였고,  Traceid 와 SpanID 를 통해 서비스간 로그를 확인할 수 있게 되었습니다.  

 

그림10. 서비스간 traceid로 로그 확인

l   Sleuth

 형사라는 뜻으로 분산된 마이크로 서비스 간에 트래픽의 흐름을 추적할 있도록 Trace 기록을 로그에 자동 삽입해 줍니다 ( sleuth는 Micrometer로 대체되었다고 합니다.)   

https://spring.io/projects/spring-cloud-sleuth  

  

또한 MDC(Mapped Diagnostic Context)를 활용하여 Request/Response  추가적인 값을 기록하고

해당 Key 값을 Elastic Search 에 추가 인덱싱 하여 로그 검색 필터로 활용 할 수 있게 하였습니다.  

 

그림11. MDC 값 추가 설정

 

 

이렇게 수집된 데이터를 기반으로 DashBoard 구성 알람 서비스를 통해 서비스 이상 현상에 대해 조기 감지 있게 하였습니다. 

 

그림12. Opensearch Dashboard
그림13. Monitor Alarm

 

 

프로젝트 회고 향후 진행 방향 

이번 프로젝트가 장애(?)  없이 서비스 오픈 있었던 것은,  홈쇼핑 시스템에 경험이 많은 시니어 개발자분들과  운영 경험이 많은 PL , 현업의 적극적인 지원으로 연계 테스트 이행 전략을 안전하게 가져 갈 있었기 때문입니다.  

 

긴말이 필요 없는 팀워크 였다고 생각 합니다.

 

데브경수 인스타툰 @waterglasstoon

 

또한 연계 채널 서비스 오픈을 위해 협업해 주신 유관 부서원들과 인프라 환경   CI/CD 지원해 주신 클라우드 팀원분들의 지원으로 든든했던 프로젝트 였습니다.

 

 

모놀리식 시스템을 마이크로서비스 아키텍처로 한 번에 옮기는 것은 어렵습니다 !! 

 

따라서 단위를 작게 세분화하여 요구사항에 맞는 서비스부터 점진적으로 전환해 나가는 것이 성공 가능성을 높일  있습니다.  

이번 SR 구조 개선 프로젝트는 마이크로 서비스 전환을 하기 위한 과정에서 작게 실행해 보는 단계였고,  이번 프로젝트를 통해 다음 두번째, 세번째 쉽게추진할 있는 경험을 얻었다고 있습니다

 

 마이크로서비스로의 여정은 아직 끝나지 않았습니다...  To be Continued... 

 


장 진 (Jeany) | 디지털서비스본부 > 홈쇼핑서비스부문 > 고객/상품 서비스팀

홈쇼핑 기간계 구조개선 업무를 담당하고 있습니다.

Live Life with no excuse