ECSS- Enterprise Customer Success Solution
컨택센터 운영에 필요한 모든 설정을 관리 및 컨택 센터 운영을 하며 발생한 통계 데이터를 수집하고 데이터 제공 및 시각화 기능을 제공하는 솔루션
회사에서 새롭게 개발하고 있는 솔루션 중 하나로, 해당 솔루션에서 화면 개발 및 Rest API 개발을 진행하였음.
프로젝트 진행 시, 타 업체에서도 컨택 센터 통계 데이터에 대한 요청이 늘어남에따라, Front-end / Back-end 를 분리하였음.
화면은 Front-end 에서만 그리도록 CSR 구조로 설계하였으며, Back-end의 경우 자원에 대한 관리만 할 수 있도록 Api 서버로 설계하여 역할을 분리하였음. Front-end 의 경우 Vue.js 를 사용하였고, Back-end 의 경우 Spring boot를 이용하고 JPA를 사용하여 Oracle 과 연동하였음.
기존에 Legacy 했던 ERS 솔루션의 기능도 리펙토링 하며 진행했던 프로젝트로 프로젝트를 진행하며 리펙토링/클린코드 등과 같이 스터디도 같이 하여 공부를 많이 요했던 프로젝트.
Solution Features
현재 개발중에 있으며, Legacy 한 ERS 의 기능을 그대로 구현하는 단계에 있음.
1. 년/월/일/시간/30분/15분/일+시간 별 통계 데이터 제공
- 검색 조건에 맞게 데이터를 웹 및 엑셀 파일로 제공
2. 컨택센터 상담원 관리 기능
- 각 벤더(Cisco, Aspect, Avaya) 에서 제공하는 Rest API 를 호출하여 상담원 추가/수정/삭제 기능 개발.
3. 실시간 모니터링 제공
- Node.js 를 이용해 실시간 통계 데이터 제공
4. 보고서 Wizard 제공
- 기본적으로 제공하는 보고서 외에도, 관리자가 스스로 통계 보고서를 작성할 수 있도록 동적 보고서 생성 기능 제공
Role
주로 아래 스킬을 사용하여 개발을 진행 함.
1. Spring boot 2.x
-
Spring boot 를 사용해 MVC 모델로 컨택 센터 관리에 필요한 API 개발
- Restful 하게 API를 구성하여, CRUD 기능에 집중할 수 있도록 개발하였음.
- Controller <–> Service <–> Repository Layer 으로 나눴으며, 계층에 맞게 역할을 분리함으로써 유지보수 시 수월할 수 있도록 고려
2. JPA
-
JPA를 이용해 SQL 작성에 대한 시간을 줄이고, 객체 지향에 맞게 DB 데이터를 관리할 수 있게 하였음.
-
Legacy 한 ERS 의 통계 테이블의 경우, 정규화가 복잡하게 될 경우, Join된 데이터 조회 시 서버에서 각각의 모델에 데이터를 Setting 해줘야 하는 번잡스러움이 있었음. 이러한 문제를 해결하기 위해 HashMap 에 Key, Value 형식에 따라 테이블 컬럼을 저장하다 보니, 무분별하게 테이블이 커지는 문제가 발생.
이러한 문제는 프로젝트를 겪으면 겪을 수록 유지보수에 어려움을 주었고, 코드가 복잡해짐에따라 생산성이 나오지 않는 현상이 계속해서 발생함.
나중에는 이 테이블에 이 컬럼이 어디에 쓰였는지 알 지 못했음… 버전관리에도 어려움이 발생..
- JPA를 이용해 모델간의 관계를 객체지향적으로 설계 해주는것만으로도 Join 에 대한 부담이나, 데이터 조회 혹은 Insert/Update 시 부모/자식 객체간의 데이터 관리에 대한 고민과 부담을 없앨 수 있었음.
- 기존에는 Oracle 위주의 쿼리로만 작성되었기에 다른 DB를 사용하는데 있었던 부담이 있었지만, JPA 인터페이스에서 제공하는 기본 메서드 외에 JPQL을 사용하여 다른 DB 적용에 대한 부담을 없앨 수 있었음.
-
3. Vue.js
- Vue.js 의 MVVM 모델을 따라 개발 진행
- 직접적으로 DOM 에 접근할 필요 없이 Data 영역에 선언한 데이터를 가지고도 동적으로 화면을 구성할 수 있도록 개발
- 기존의 JSP 보다 훨씬 코드도 간편하고, 비즈니스 로직 분리에 대한 고민이 없어 프로젝트에 늦게 참여한 인원도 쉽게 개발을 진행할 수 있었음.
Architecture
1. ECSS
- 각 Client 들이 API 서버로 자원 요청 시, API 서버는 요청에 맞게 자원에 대한 CRUD 작업 진행