경력기술서 · 2021.10 – 2022.10 · KT / 퓨렌스
우리은행 AI 기반 불완전판매방지 솔루션 구축
풀스택 개발 및 사내 업무망 연동 · 증권망 녹취·업무 서버
우리은행 전 지점의 상담 녹취를 수집해 STT·TA 결과를 상담 화면에 실시간으로 보여 주고, 불완전판매 점검까지 이어지는 솔루션입니다.
메인 개발자로 녹취 AP, WAS, 업무 화면, 연동 배치, 은행 배포 파이프라인을 개발했습니다.
Spring (MyBatis)
Tomcat
JSP · jQuery
PostgreSQL
Kafka
WebSocket
TCP Socket
SEED
AOP
Jenkins · PCMS
Linux · Shell
00
증권망 아키텍처
증권망 · 서버 1·2 이중화
모든 서버군 앞단 L4 VIP
상담 화면
녹취
실시간 분석
Client
Browser업무 · STT 자막 · TA 결과
L4 VIP
Server
Kafka 1Broker
Kafka 2Broker
Data
DB VIP → Master
PostgreSQL 1Master · 쓰기
PostgreSQL 2Slave · 복제
Master 주기 백업
메타데이터 · 리더 선출
ZooKeeperKafka 클러스터 코디네이션
- 브로커 1·2 등록 · 생존 확인
- 컨트롤러 · 파티션 리더 선출
- 토픽 · 파티션 설정 보관
실시간 경로
Kafka 1·2STT · TA 즉시 수신WAS 1·2WebSocket pushBrowser
01
규모와 역할
우리은행 전 지점서비스 범위
일 1,500건녹취 파일 (MP3 기준)
메인 개발녹취 AP · WAS · 화면 · 배치
12개월2021.10 – 2022.10
02
녹취 음성에서 상담 화면 STT까지
음성 수집, STT 전달, 화면 표시, 녹취 저장, 청취까지 하나의 흐름으로 개발했습니다.
REC Agent
녹취 AP
NAS
STT · TA
Kafka 1·2
WAS 1·2
Browser
실시간 STT · TA
① UDP 음성 · L4 Hash
② TCP 소켓 · 청크 단위 음성
③ STT · TA 결과 메시지
④ 즉시 수신 · 채널 ID 필터
⑤ WebSocket push
녹취 저장
⑥ MP3 · SEED 암호화
녹취 청취
⑦ 청취 요청
⑧ 암호화 파일 조회
⑨ SEED 복호화 스트리밍
② 청크 전송
STT 엔진이 한 번에 받을 수 있는 음성 데이터 길이가 정해져 있고, 발화 인식을 위해서도 적당한 크기로 잘라 보내야 합니다.
그래서 STT 엔진 인터페이스 정의서의 규격에 맞춰 음성을 청크 단위로 잘라 TCP Socket으로 실시간 전달했습니다.
④ WAS 이중화
메시지를 받는 시점에는 브라우저가 WAS 1·2 중 어디에 붙어 있는지 모릅니다.
그래서 Kafka 메시지에 채널 ID를 담고, WAS 1·2가 같은 Topic을 구독하도록 했습니다.
메시지의 채널 ID가 자기 WebSocket 세션에 있으면 해당 클라이언트에 push하고, 없으면 버리도록 설계했습니다.
⑥ ⑨ 암호화
녹취 파일은 SEED로 암호화해 NAS에 두고, 청취할 때만 WAS에서 복호화해 스트리밍합니다.
03
EAI 조직 · 인사정보 연동 배치
우리은행 전 직원의 조직 · 인사정보를 매일 EAI 파일로 받아 솔루션 DB에 반영하는 배치를 개발했습니다.
지점 · 부서 이동이나 입 · 퇴사가 다음 날 솔루션 사용자 정보에 그대로 반영됩니다.
Step 01 / 매일 수신
EAI 조직 · 인사 파일 수신
배치 스케줄에 따라 우리은행 전 직원의 조직 · 인사정보 파일을 EAI로 매일 수신합니다.
Step 02 / 파싱
파일 파싱
수신한 파일을 조직 정보와 인사 정보로 파싱해 솔루션 DB 구조에 맞게 변환합니다.
Step 03 / DB 반영
조직 · 사용자 정보 갱신
변환한 데이터를 솔루션 DB에 반영해 지점 · 부서 이동과 입 · 퇴사가 사용자 정보에 적용됩니다.
실패 시 / 장애 통보
은행 관제 장애 문자 → 담당자 전달
배치가 실패하면 은행 관제에서 장애 문자가 발송되고, 이를 담당자에게 전달해 대응합니다.
04
은행 배포 절차에 맞춘 파이프라인
은행 배포 절차(PCMS)에 맞춰 서버별 배포 쉘스크립트와 파이프라인을 구성하고, 테스트 증적을 작성했습니다.
Step 01 / 검증 · 담당
테스트 증적 작성
테스트 시나리오를 만들고, 화면 단위 · 로그 단위로 증적을 작성합니다.
Step 02 / 검증
테스트망 3자 테스트
테스트망에서 제3자 테스트를 진행합니다.
Step 03 / 승인
배포 승인
테스트 결과와 증적을 바탕으로 배포 승인을 받습니다.
Step 04 / 실행 · 담당
PCMS 서버별 쉘스크립트 호출
PCMS에 등록된 서버별로, 각 서버에 구성해 둔 배포 쉘스크립트를 호출합니다.
Step 05 / 반영
반영 · 알림
서버에 반영되면 결과가 알림으로 통보됩니다.
Step 06 / 완료
최종 승인
최종 승인으로 배포를 마무리합니다.
05
트러블슈팅
01은행 CS 인터페이스 메타데이터 오류 추적
문제은행 CS 업무 프로그램이 녹취 화면을 띄울 때 상담 메타데이터를 함께 전송하는데, 인코딩 깨짐과 전문 길이 불일치가 간혹 발생했습니다.
어려움원인이 CS 쪽인지 우리 쪽인지 로그로 가려야 했지만, 동시 접속자가 수십 명이라 로그가 섞여 해당 요청을 찾기 어려웠습니다.
해결로그 포맷을 개선하고, AOP로 인터페이스 수신 구간에서 개발자에게 필요한 로그를 분류해 남기도록 바꿨습니다. grep과 쉘스크립트로 바로 조회할 수 있게 했습니다.
결과원인 구분이 쉬워졌고, 비중이 더 컸던 은행 CS 측 문제는 로그를 근거로 수정 요청하고 우리 쪽 문제는 직접 수정했습니다.
02운영 서버 OOM 개선
문제운영 중 메모리가 계속 늘어 OOM이 발생했습니다.
원인참조가 해제되지 않고 계속 사용 중으로 남아 있는 객체와 변수가 누적되었습니다.
해결디버깅으로 스레드별 점검을 진행해 해제되지 않는 객체·변수를 찾아 정리했습니다.
결과매달 정기점검 주기까지 OOM 없이 운영되도록 개선했습니다.
06
핵심성과
안정성
정기점검 주기까지 OOM 0건
참조가 해제되지 않은 객체·변수를 스레드별로 추적해 정리하고, 매달 정기점검까지 OOM 없이 운영되도록 개선했습니다.
운영
grep · 쉘스크립트로 바로 찾는 로그
로그 포맷 개선과 AOP 분류로, 동시 접속 수십 명 환경에서도 오류 원인을 로그에서 바로 조회할 수 있게 바꿨습니다.
서비스
전 지점 실시간 STT · TA
우리은행 전 지점 상담에서 녹취 음성을 STT 자막과 TA 결과로 바꿔, 상담 중 화면에 바로 보여 주는 흐름을 구축했습니다.