참고자료
https://www.youtube.com/watch?v=eS9tukmYBLI
[은행시스템 구조]
[FEP(Front-end Processor)]
==대외연계시스템
[FEP의 핵심업무]
일반적으로 TCP프로토콜을 사용한다.
오랫동안 금융권에서 사용되었고 단점이 있다.
모니터링/로깅/배포등의 툴들과의 연동이 안된다.
HTTP를 사용은 할 수 있지만 PATH를 여러개 쓸수없다.
Blocking I/O만 가능하다
FEP의 인스턴스 수가 제한적이기때문에 하나의 인스턴스가 여러 업무를 함 -> 장애 상황이 공유된다.
TOSS에서는 블로킹I/O방식의 기존 FEP솔루션을 자사에 맞게 NonBLockingI/O방식의 ModernFEP를 Kotlin을 활용해서 자체 구현했고 이 과정을 정리/발표하고 있음.
ModernFEP는 토스자체적으로 지은 명칭이다.
ModernFEP를 도입한 구조
ModernFEP는
대외연계측의 TCP통신에서는 Netty를
Service와 FEP연계 측의 HTTP통신에서는 SpringWebFlux와WebClient를 사용.
NonBlockingI/O가 목적이었기떄문
ModernFEP 도입한 구조
이후 Redis서버를 사용해 (여러FEP + TCP)특성으로 발생할수있는 응답누락.. 을 해결. (추가 연구 필요)
대외업무연계당 공통 추상화FEP클래스 를 새로구현함으로써 각각의 세부사항을 쉽게 변경한다.
[요약정리 끝~!]
전체 내용이 궁금하신 분은 영상 참고하세요.
👉🏻 새로운은행을위한Modern대외연계시스템구축기
영상 초입에 나오는 전문 통신 처리 과정에 대한 정리입니다.
전문 처리 과정
Fixed Length Format (고정길이 포맷)주로 사용.
대외업무에서는 전문포맷을 전문 설계서에 명세해둔다.
첫번째 항목은 크기가 4byte라서 8개의 16진법 데이터를 써주면 된다.
각각의 정보를 Charset에 맞게 해석
전문 표현 예시.
다른 두개의 전문 비교
공통정보부는 동일한 것을 알수있다.
이제 코드레벨로 넘어가서 전문을 표현해준다 (Kotlin사용)
먼저 어노테이션으로 각각의 명세를 표현
TelegramInterface를 구현해서 공통정보부 표현(공통헤더인듯)
이제 공통정보부와 데이터부를 함께 표현하는 완전한 전문을 표현
공통정보부를 상속해서 필드를 다 가질수있게 표현
전문명을 써줌
TelegramClass 어노테이션을 붙여줌
이제 전문을 읽고 해석하는 단계
각각 Charset에 맞게 Encode한 값을 모아준다.
Decode
이름은 비슷하지만, Java Reflection과는 다른 라이브러리.