차오주
332
2019-02-11 22:42:57 작성 2019-02-11 22:45:08 수정됨
1
590

은행 차세대 플젝에서 기술샘플 한개 cc이체


CC이체일자 ,  center cut 의 약자인데 ,  일상에서 많이  씁니다. 내통장에서 은행이 돈 빼는 날이죠 

센터컷관련 단지 한개의 예를 들어서 일반적 설명입니다.

센터컷 관련 가장 흔한 샘플을 아래처럼 들수 있습니다
여러분이 은행에서 마이너스 통장을 만들면 창구 텔러가 
자동이체일을 알려줍니다. --> 이게 C/C일 (Center Cut) 입니다

결국 시중 5대 은행에서 평이한 마이너스 통장의 C/C일은 
은행별로 한달에 한번 날짜FIX 되어 있습니다.  매월 세째주 화요일 이렇게요
물론 금융상품에 따라서 감액되는 분할상환 이렇게 부가 조건이
딸린 마이너스 통장들은 감액되는 날짜에 C/C 돌겠죠

아뭏든 원금/이자 상환 관련 로직은 꽤 복잡합니다.
수백만건이 되는 계좌의 이자계산하고 관련 테이블 update/insert하고
로그 테이블에도 넣고 이런 센터켓 배치가 여러 종류가 있고
서버의 자원을 많이 잡아 먹기때문에 민감한 이슈이고 
대기업SI에서는 금융권 차세대를 많이 해서 노우하우를 보유하고
있습니다. (외부 대외계를 갖다오는 EAI파트처럼 리소스에 민감한 부분)

1. 오라클 C api를 이용해서 드라이빙 테이블의 array fetch를 만건 단위로 하고 next fetch 돌때 마다 1초정도 걸린다면

 전체 시스템에서 해당 C/C가 종료해야할 시간을 맞출수 있을겁니다 , 백만개 계좌처리하면 100초 걸리는겁니다.

--> 만건단위로 fetch 가 돌기에 매우 빠릅니다. 


 1개 계좌 처리할때, 관련 테이블의 PK값 채번, 로그, 계산률 테이블 조회, 검증로직등
 해야할것이 의외로 많습니다.  한정된 시간에 작업을 마치는것 이것이  은행차세대의 핵심 

-- 중요한건 각 배치 잡별로 끝내야할 시간이 정해져 있고 업무프로그래머는 
그것을 지키기 위해서 프로그램을 짜야 합니다.

-- 중간에 에러났을경우.. 그 프로그램 그냥 단순히 다시돌릴지, 앞에서 작업한것을  clean하고 할지 이런것을 작업중에 어떤식으로 표시를 할지 (log파일에 기록할지등)
소스코딩을 어떻게 defensive할것인가? 이슈

-- 배치 잡돌때 항상 최악의 시나리오를 상상하면서 (과거 경험을 상기하면서) 코딩을 해야 합니다.

2. 튜닝 : 업무, 기술 두가지 관점에서 해야 합니다.
업무를 잘 아는 프로그래머는 이자계산프로그램을 효율적으로 작성 하겠죠

3. 만건을 array fetch헤서 array insert/update 할때
- 채번, 각종테이블의 돈계산, 로그 이런 드라이빙 테이블의 1개의 row를
처리할때 수십개의 CRUD 작업이 일어 날수 있으니 배열/포인터등에 값을 담어놓고 
다루는 요령이 필요합니다.

- 저같은 경우는 만건을 배열에 담아 놓고 ,,, 모든것을 끝낸후 각 테이블에 dump 하듯이
 커밋하는 스타일을 선호하는데 

지금까지 한 3개의 은행 차세대에서 제게 부여된 배치잡 시작-종료 시간을 모두 지켰습니다.

0
0
  • 댓글 1

  • joomn11
    10
    2019-02-19 20:18:31

    신기하네요 

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.