IT의 중심에서

중년 개발자가 살아 가는 IT 현장 이야기

은행의 IT시스템에 대한 이해

“계정계, 정보계”가 뭐예요?
종종 금융권 쪽에서 일자리를 구하는 친구들이 묻는 질문입니다.
국민은행, 신한은행. 똑같습니다.
그런데 금융권은 특성상 정보를 외부로 공개하지 않죠.
상세한 정보를 얻는데 어려움이 많습니다.

그래서 이 쪽 종사자에겐 ‘기초상식’이지만,
용어조차 생소한 분들을 위해 ‘기본적인 내용’을 정리해 보았습니다.

금융권이라고 하면 화재, 생명, 은행, 상호저축은행 등이 있는데요.
시스템이 조금씩 다 다릅니다.
우선 은행만 정리했습니다.

블로그라 공개정보로만 정리하다 보니 부족한 점이 있습니다.
혹시 잘못된 내용이 있으시면 댓글로 지적을 부탁드립니다.


1. 은행 시스템은 어떻게 구성되어 있을까?

(한국의 금융시장 구조, 한국은행)
(한국의 금융시장 구조, 한국은행)

한국의 금융기관은 ‘여러가지 법’에 의해 통제되고 있습니다.
그래서 ‘은행 업무’가 거의 동일한데요.
크게는 고유업무, 부수업무, 겸영업무로 나뉩니다.

“고유업무”란 뭘까요?
저축을 받아서 돈을 빌려주는 게 고유업무입니다.
은행 본연의 임무이기도 하죠.
상세하게 나누면 수신(저축), 여신(대출), 외환으로 분리할 수 있습니다.

“부수업무”는 고유업무를 하면서 동반되는 업무를 말합니다.
보증을 서주거나 어음을 인수하는 등의 일입니다.

“겸영업무”는 영업을 겸한다는 뜻입니다.
채권회수(추심)를 대행하거나 기업 M&A를 중개하는 등
본업과 거리가 있지만 자본과 관련된 일을 합니다.

모든 은행업무는 금융위원회에 신고하기 때문에,
실제로는 정부의 관리 감독 하에서 영업을 하는 셈입니다.

따라서 은행마다 조금씩 다르긴 하지만
대부분의 시스템이 아래와 같이 구성되어 있습니다.

( 수출입은행 차세대 시스템, bikorea.net, 2014.11 )
( 수출입은행 차세대 시스템, bikorea.net, 2014.11 )

그림을 자세히 보세요.
은행업무가 어떻게 구성되어 있는지 조금 이해가 되시나요?
여기에서 중요한 용어를 설명해보겠습니다.

1) 계정계 (Core Banking)

은행의 전통적인 핵심 업무는 통장이 중심이 됩니다.
이 통장을 계좌, 계정이라고 합니다.
계정을 관리하는 시스템이 모여 있다보니 “계정계”라고 부릅니다.

한 사람이 여러 개의 통장을 만들 수도 있고,
돌아가신 분의 통장도 있기 때문에
기본 데이터가 1억건이 가뿐히 넘습니다.
통장별 거래기록을 포함하면 수백억건의 데이터가 기본적으로 있습니다.

계정계 데이터는 곧 돈과 거래기록이기 때문에,
“시스템장애”는 바로 금전적 피해로 이어집니다.
따라서 데이터를 2중, 3중으로 백업하며
시스템이 매우 보수적으로 운영됩니다.

계정계 시스템은
“공통업무, 수신업무, 신탁업무,
보험업무, 카드업무, 여신업무,
외환업무, 대행업무 시스템” 등으로 구성됩니다.
대부분 마스터테이블인 거대한 원장들이 있고,
다양한 업무를 처리하는 정형화된 트랜잭션들이 있습니다.

원장이란 오래된 용어로 “근원이 되는 장부”라는 뜻입니다.
옛날에는 현장에서 노트로 기록하고,
사무실로 돌아가서 메인 장부에 옮겨 적었거든요.

전산도입 이후에도 “원장”개념은 그대로 사용됩니다.
통장잔액이 중복관리되면 지급오류가 생길 수 있으니까요.

기본적으로 원장에 트랜잭션이 집중되는 구조이기 때문에,
안정적으로 트랜잭션을 처리하기 위한 미들웨어Middleware가 발달해 있습니다.

많은 은행들이 초기엔 IBM Mainframe 을 사용했으며,
2000년대 중반 Unix로 이전하였습니다.
Mainframe 시절엔 COBOL을 사용했지만,
차세대를 통해 대부분 C로 옮겨갑니다.
Java가 최초로 도입된 건 2013년 (전북은행)일 정도로 굉장히 보수적으로 운용됩니다.

반면, 기존시스템 부담이 적은 보험회사는 일찌감치 Java를 도입하기도 합니다.

2) 정보계

정보계. 고객정보, 분석정보 등을 말합니다.
정보가 듬뿍 들어있어서 “정보계”라고 부릅니다.
거래활동 및 성과를 분석하고 측정하기 위한 목적으로 구축되었습니다.

주요시스템으로 데이터웨어하우스를 기반으로 하는
수익관리, 고객관계관리, 성과관리, 위험관리 시스템 등이 있습니다.
정보계는 단순히 궁금증을 해결하는 수준이 아니라,
영업정보에서 기업전략 정보까지 포함하기 때문에
“계정계”만큼 중요한 시스템입니다.

정보계는 1980년대 은행업무가 발전하면서 개념이 등장합니다.
우리나라에선 1993년 금융실명제 도입으로 위상이 급격히 올라갑니다.
한 사람이 몇개의 통장을 가지고 있는지 조회해야 했거든요.
이전에는 그렇게 할 수 없었습니다.
해당 통장이 없으면 돈을 뽑을 수도 없었죠.

기본적으로 정보연계, 통합조회, 통계분석 등을 많이 하기 때문에
관계형 데이터베이스 사용이 필수입니다.
분석을 위한 데이터 동기화기술도 많이 사용됩니다.

비교적 늦게 시작했기 때문에 Java 기반으로 구축된 곳이 많으며,
최근에는 빅데이터기술도 많이 검토되고 있습니다.

(신한은행의 정보계 구성도, bikorea.net, 2014)
(신한은행의 정보계 구성도, bikorea.net, 2014)

3) 대외계

“대외계”란 은행 외부기관과의 연계업무를 처리하기 위한 시스템입니다.
연계업무란 은행간 송금, 수표조회 같은 은행간 업무를 말합니다.
네트워크가 있어야 하기 때문에 1970년대 처음 등장합니다.
지로공과금을 처리하기 위해 금융공동망이 만들어졌죠.
그게 대외계의 시작입니다.
오래된 소스를 열어보면, 그 당시 용어들이 변수이름으로 등장합니다.

주요 연계시스템으로는 인터넷뱅킹, 텔레뱅킹, 펌뱅킹, ATM 등이 있습니다.
단순한 게이트웨이가 아니라 비즈니스 기능을 포함하고 있습니다.
거래내역 기록 및 검증, 프로토콜 변환, 오류시 재전송기능까지 매우 복잡한 구조로 만들어져 있습니다.
주로 대용량처리보다 정확성, 안정성에 중점을 준 트랜잭션 허브들이 도입되어 있습니다.

4) 운영계
운영에 관계된 시스템이 모여있습니다.
통합관제, 네트워크 모니터링 등을 운영계라고 부릅니다.

5) 기타
이 외에 은행이라는 기업을 움직이기 위한 시스템들이 있습니다.
회계, 인사, 세무 시스템 등인데요.
흔히 백오피스라고 부르기도 하고 기업업무 시스템이라고 부르기도 합니다.

2. 기술적 특징들

트랜잭션이 돈 처리를 의미하는 것이기 때문에 오류에 민감합니다.
소수점 처리에도 민감합니다.
0.01원 반올림오류가 1억원의 피해로 이어지기도 합니다.
오류가 일결산에서 확인이 안되고,
월결산이나 연결산에서 발견되기도 합니다.
수십억씩 이자지급이 된 이후라면 회수할 수도 없죠.

따라서 거래 쪽은 빠른 개발이나 배포보다는,
안정적인 개발과 배포를 중요하게 생각합니다.
금융분야는 IT문화도 전체적으로 그렇다고 볼 수 있습니다.

은행업무는 안정되어 있어 변화가 적고 데이터도 정형화되어 있습니다.
그래서 “프로세스설계”와 “데이터설계”가 매우 중요하게 다루어집니다.

기존 시스템을 쉽게 폐기할 수 없기 때문에,
계속 확장을 통해 기능을 구현하는 편입니다.
이기종 DB나 복잡하게 시스템이 얽혀 있는 N-Tier 환경이 대부분이죠.
그래서 ORM이 오래전부터 사용되었습니다.

인터넷 뱅킹이 24시간*365일로 운영되긴 하지만,
대부분 주간에는 금융거래 중심의 트랜잭션들이 일어나고,
야간에는 대형 배치처리, 시스템간 데이터 전송이 많이 일어납니다.

사소한 변경이 큰 금전적 피해로 이어질 수 있기 때문에,
수정사항이 있더라도 영향도를 체크한 후에 움직이는 편이며,
가능하면 시스템수정은 기피하는 경향이 있습니다.

유지보수가 중요하기 때문에 기술지원이 안정적인 솔루션들과,
피해를 책임질 수 있는 전문업체를 선호하는 경향이 있습니다.
그래서 신기술 도입이 더딥니다.

덩치는 큰데 빠르게 움직이고 싶은게 숙제입니다.
그래서 SOA 패턴을 제일 먼저 시도한 분야기도 합니다.

데이터 작업이 많고 처리 속도가 중요한 편이라,
서버작업에는 Oracle과 Pro*C 가 많이 사용됩니다.
최근에는 계정계를 제외하고는 Java가 많이 도입되어 있습니다.

꼭 필요하지 않으면 도전적인 기술을 사용하지 않기 때문에,
기술보다는 ‘은행 업무’를 얼마나 잘 이해하고 있느냐가
경력자 채용의 중요한 기준이 됩니다.
은행업무를 모르면 비즈니스 로직을 짤 수 없기 때문입니다.
(일일히 가르쳐 줄 수도 없고)

3. 차세대 시스템이 뭐죠?

(금융 시스템의 발전단계,한국은행, 2007)
(금융 시스템의 발전단계,한국은행, 2007)

세계적으로 은행에 IT가 도입이 된 건 1970년대였습니다.
이 때 최첨단 기술은 메인프레임 방식이었습니다.
1대의 큰 시스템에 여러 대의 먹통터미널만 붙여서 썼지요.
이후 전화기, ATM, 무역금융 등이 커지면서
은행 전산시스템도 꾸준히 고도화됩니다.

2000년대 들어서자 이 시스템을 전반적으로 고도화할 필요가 생겼는데,
변경 범위가 너무 커서 “차세대 프로젝트”라고 부르기 시작했습니다.
한번에 다 끝났냐?
아니오, 요즘 IT환경이 너무 빨리 변해서,
끝날 때쯤 다시 고도화의 필요성이 생겼습니다.
그래서, 새로운 프로젝트는 “POST 차세대”라고 부르고 있습니다.

(차세대 시스템 전후의 전산환경 변화, 위키, 2010)
(차세대 시스템 전후의 전산환경 변화, 위키, 2010)

“차세대”라는 용어는 보험, 증권회사 등에도 널리 사용되고 있지만,
모두 같은 시스템을 지칭하는 게 아닙니다.

4. 실패로부터 배운 교훈들

변경범위가 워낙 커서 많은 차세대들이 실패했으며, 이 과정에서 차세대프로젝트들은 개발자들에게 Hell Project로 일컬어지기도 했습니다.

( 중단된 차세대 프로젝트들, 전자신문, 2009 )
( 중단된 차세대 프로젝트들, 전자신문, 2009 )

대부분 SI프로젝트가 겪을 수 밖에 없는 한계점이 극명하게 드러나면서,
관련 종사자들에게 많은 교훈을 남겼습니다.
하지만 속 시원한 대안이 없어 아직도 많은 회사들이 시행착오를 겪고 있습니다.

☞ 주요 기사들

5. 다른 차세대들은 어떤가요?

아래 시스템은 “메리츠 종금증권”의 차세대 시스템입니다.
당연한 이야기지만 아래 시스템에서 수신(예금저축)은 찾아볼 수 없고,
대신 주식을 사고파는 “증권 서비스”가 있습니다.
그리고 “여신”과 “신탁” 이 있죠.
이렇게 시스템을 보면 증권사의 업무를 짐작할 수 있습니다.

( 메리츠 화재의 차세대 시스템)
( 메리츠 화재의 차세대 시스템)

6. 왜 금융권에서는 Java를 많이 사용할까?

어떤 대학생들이 이렇게 묻더군요.
‘node.js나 python이 최신 유행이라고 해서 배웠는데, 막상 취업하려고 하니 모두 Java Spring을 할 줄 아냐고 묻더라요. 왜 다들 Java Spring을 쓰나요?’

글쎄요. 은행시스템에도 스크립트 언어가 사용되는 곳이 있습니다.
다만, 구현할 비즈니스 특성에 따라 언어가 달라지는거죠.

처음엔 C/C++을 사용했습니다.
OS에서 직접 컴파일 되는 시스템 언어로
CPU 성능을 100%까지 끌어낼 수 있죠.
Full Stress Test를 해보면 CPU 사용률이 100%까지 가는 걸 볼 수 있습니다.
Java 는 VM 메커니즘 때문에 그렇게 되진 않습니다.

하지만 C 는 OS가 달라지면 재컴파일해야 합니다.
OS 마다 시스템함수가 다를 수 있습니다.
그래서 꽤 많은 부분을 수정코딩해야 합니다.
다른 시스템을 재활용할 때 OS가 달라서 안돌아가기도 합니다.
서로 다른 기종끼리 묶어 하나로 운영하기도 어렵습니다.
우아한 말로 “이식성”이 떨어진다고 합니다.

서버가 100대가 넘어가면 관리상태나 노후상태가 모두 다르고,
무거운 Batch처리나 가벼운 조회트랜잭션이 막 섞일 수 밖에 없습니다.
주로 기업환경, Enterprise 환경에서 이런게 허다하다보니
하드웨어 특성에 관계없이 Server가 운영될 필요가 생깁니다.
정답이 Java Spring 이죠.

하지만, 하드웨어를 Full Power로 사용하려면 여전히 C 언어를 쓰기도 합니다.

참고로 금융환경에서 많이 등장하는 이슈와 Java 특성을 잘 이야기한 글이 있어 추천 드려봅니다.
초급자 분들이라면 꼭 한 번 정독하셨으면 좋겠습니다.

물론 이론적으로 이렇다고 해도 실제 상용화될 때는,
기대한대로 움직이지 않는 경우가 적지 않습니다.
그래서 꼭 참고만 하세요.

7. 핀테크란 뭔가요?

저도 현재 열심히 공부하고 있는 중입니다.
결제수단의 기술적 진화와 함께 금융분야의 변화도 함께 일어나야 할 것 같은데요.
올해 들어 인터넷전문은행의 설립에 대한 이야기가 굉장히 활발합니다.
SK C&C 문용준 부장님이 Fi-ntechkorea.com에서 발표하신 자료를 첨부해봅니다.

그려주신 자료를 보면 최근의 시스템은 전통적인 분류와 좀 다릅니다.
계정계, 정보계, 대외계를 굳이 나누기 보다,
업무, 기능별로 분류하고 있음을 알 수 있습니다.

(인터넷 전문은행, 문용준 SK C&C, 2015.03)
(인터넷 전문은행, 문용준 SK C&C, 2015.03)

☞ update :
– 2015.05.13 : 7번 항목 내용 추가
– 수출입은행과 신한은행의 사례가 대표성이 떨어진다는 지적이 있었으나, 공개된 자료가 그것밖에 없네요.

끝.

은행의 IT시스템에 대한 이해”에 대한 116개의 댓글

  1. 익명의학부생
    2020년 11월 29일

    취업을 준비하는 컴퓨터 공학 학부생으로서 큰 도움을 받았습니다. 감사드립니다. 제가 현재 증권사 최종면접을 앞두고 있는 입장에서 질문을 좀 드리고 싶은데 메일로 드려도 괜찮을까요?

    • subokim
      2020년 11월 29일

      넵. 제가 아는 한도 내에선 최대한 설명드리겠습니다.

  2. 익명
    2020년 10월 16일

    잘보고갑니다^^정리 너무 잘해주셔서 감사합니다

    • subokim
      2020년 10월 16일

      도움이 되신다니 감사합니다. ^^:

  3. 최미경
    2020년 9월 9일

    궁금했었는데 이렇게 알려주셔서 감사합니다!

    • subokim
      2020년 9월 9일

      에고. 조금이라도 도움이 되었다면 다행입니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

정보

이 엔트리는 2015년 5월 11일에 님이 IT 산업이야기에 게시하였으며 , , , , , 태그가 지정되었습니다.

내비게이션

%d 블로거가 이것을 좋아합니다: