Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

우리가 감옥에 가지 않도록 델파이는 어떻게 도와주었는가


Recommended Posts

이안 바커 (Ian Barker)"How Delphi Helped Us Stay Out Of Jail" 을 번역했습니다. (원문 작성: 2023년 2월, 최종 번역: 2024년 1월)

내가 아는 바로는, 델파이와 RAD 스튜디오가 기업용 소프트웨어로 가장 많이 쓰이는 분야 중 하나는 은행과 금융 산업이다. 이 분야는 주로 윈도우 앱 개발에 중점을 두고 있다. 그리고 더 자세히 들여다 볼 수록, 그 뒤에서 델파이가 활약하고 있는 것을 더 많이 알 수 있다. 델파이는 강력한 데이터 처리 능력, 확고한 신뢰성과 견고성을 가지고 있다. 이런 특징 덕분에 델파이는 금융 전문가들로 부터 매우 긍정적인 평가를 받는다. 그들은 파생상품, 선물, 은행 간 송금, 자금이 부족할 때 정부가 통화를 더 찍어낼 수 없는 이유 등 소수만 아는 다소 어려운 내용을 이해하는 사람들이다. 은행 업무는 돈을 다루는 일인 만큼, 많은 규칙과 규제가 있다. 이를 준수하지 않으면 엄청난 벌금이 부과될 수 있다. 정말 운이 나쁘면 감옥에서 뜻밖의 휴가를 보내게 될 수도 있다. 만만치 않은 일이다.

오늘의 기고 작성자는 익명을 원했다. 변덕스럽기로 유명한 투자 은행 동료들과의 관계를 지키기 위해서였다. 우리는 작성자의 연락처를 가지고 있기 때문에 이 경연대회에서 수상할 경우 작성자에게 그 알려줄 것이다.

목차


그 기업용 소프트웨어를 만들게 된 배경(background)은?

투자 은행들은 끊임없이 변하는 규정을 따라야 한다. 이 규정들은 복잡하다. 또한 법적 해석을 신중하게 해야 한다. 하지만, 사업 운영팀은 이 규정들을 지원하도록 대비해야 한다. 심지어 법무 부서로부터 명확한 답변을 받기 전이라도 말이다.

규제 기관에서 새로운 규정(예: Dodd Frank-도드 프랭크 월스트리트 개혁 및 소비자 보호법, EMIR-유럽시장 인프라 규제)을 발표하면, 은행은 모든 기존 고객에게 연락하여 서류를 다시 작성해야 한다 (예: 은행은 고객에게 새로운 규정을 알리고 고객은 새로운 동의서에 서명해야 한다). 은행은 정해진 날짜까지 고객으로부터 동의를 받아야 한다. 그렇지 않으면 은행은 이 고객들과 계속 거래할 수 없다(즉, 수백만 달러의 수익 손실이 생실 수 있다).
 

그 기업용 소프트웨어의 요구사항(requirements)은 ?

요구 사항(requirements) 목록은 다음과 같았다.

  1. 연락해야 할 고객 목록 파악한다.
  2. 연락해야 할 고객 목록을 특정 기준에 따라 우선순위를 정한다:
    • 고객 등록을 유지해 온 기간,
    • 최근 12개월동안 사업의 시가(current value),
    • 은행과 거래하는 상품에 따라, (특정 상품을 거래할 때만 규제가 적용 되는 경우가 있음)
    • 최근 6개월 동안 활발하게 거래가 이루어 졌는지, (일부 상품의 경우에는, 2년에 한 번씩 고액의 거래가 이루어 졌는지)
  3. 추적 시스템 작동 - 모든 고객은 각각 한 주기(cycle) 반드시 거쳐야 한다. 그 주기의 단계는 다음과 같아: 최종 후보 명단, 우선 순위 지정, 연락 완료, 검토 중, 서명.
  4. 고객과의 연락/접점을 최소한으로 유지해야 한다. 고객 한 명에게 여러 번 연락이 가지 않도록 한다 - 예: 상품당 연락 대상이어서 그리고 지점당 연락 대상이어서... 
  5. 고객은 은행과의 동의서에 사인을 하거나, 또는 그 대신 정부 기관에 직접 등록한다. 따라서, 우리는 고객의 등록 상태를 얻을 수 있어야 한다. 그러려면, 써드파티 웹사이트에서 그 상태 정보를 받아야 한다.

 

그 기업용 소프트웨어의 당면과제(challenges)는?

우리가 확인한 잠재적인 문제는 다음과 같았다:

  • 고객 식별의 문제- 고객 한명이 여러 고객 기본 정보 안에 등록되어 있을 수 있다. 그 은행 전체 안에서 그리고 여러 지역에 걸쳐서 그럴 수 있다
  • 중복되어 있는 고객 기록이 있다.
  • 일부 고객은 법적 위계 구조가 복잡하다. 때문에 '자식' 수준보다 '부모' 수준에서 작업하는 것이 좋다.
  • 에이전트(또는 대리인) 등의 일부 고객은 다른 고객을 '대리'한다. 따라서 절차를 완료해야 하는 실제 '법률적 주체'는 그 대리인이 아닐 수 있다.
  • 하지만, 일부 에이전트는 자신이 대리하는 고객을 대신하여 서명할 수 있는 권한을 가진다. 따라서 그 점을 올바로 알아낼 수 있어야 한다.
  • 고객이 거래하는 상품 데이터의 품질이 좋지 않다. 상품마다 플랫폼이 다르고 상품명이 애플리케이션마다 일관되지 않기 때문이다.
  • 거래 시스템에서 거래 정보를 얻는 것이 복잡하다. 왜냐하면 거래량이 많기 때문이다 (하지만, 정말 필요한 데이터는 일정 기간 동안 이루어진 총 거래의 집계 정보다).
  • 써드파티 웹사이트에서 등록 정보를 검색하고 우리의 추적 기록을 업데이트한다. 이를 통해 이미 필요한 절차를 완료한 고객의 경우에는 연락이 가지 않도록 한다.

 

기존 절차를 연구했는데, 어떻게 조사했는가?

우리는 20명에서 30명 정도의 임시 데이터 분석가를 고용해야 했다. 그들에게 기존 기업용 비즈니스 애플리케이션에서 추출하도록 요청했다.  그들은 다양한 데이터 소스를 한곳으로 통합한다. 보통 매우 복잡한 매크로가 포함된 여러 개의 엑셀 파일로 만든 다음 MS Acess 데이터베이스에 로드한다. 그 후, 수작업으로 고객 목록을 검토하고, 데이터 품질 문제를 해결하고, 연락 진행 상황을 추적한다. 그 작업은 공유 엑셀 파일들을 사용했다. 따라서 동기화가 쉽지 않았고, 파일 손상으로 인한 데이터 손실이 잦았다. 엑셀은 선택할 수 있는 유일한 방법이었다. 왜냐하면, 해당 규정 변경을 기존 기업용 애플리케이션 안에 구현하는데는 3개월에서 6개월 정도가 걸리기 때문이었다. 그리고 심지어 해당 규정이 안정화 될 때까지는 작업을 시작할 수도 없었다.

 

그 기업용 소프트웨어 솔루션에 바라는 기준들이 있었다면 무엇이었는가?

우리는 기준을 다음과 같이 정리했다.

  • 다양한 출처에서 데이터를 가져올 수 있어야 한다. 출처로는 다양한 고객 기본 정보, 상품 기본 정보, 거래 시스템들, 써드파티 외부 웹사이트 등이 해당된다.
  • 모든 데이터를 가져와 데이터베이스 하나 안에 저장한다.
  • 데이터 품질 문제를 해결한다.
  • 고객이 이미 써드파티 웹사이트에서 절차를 완료했는지 확인하고, 완료했다면 연락할 필요가 없다 (하지만, 추적은 계속해야 한다).
  • 우선순위가 자동으로 정해진 목록을 분석가에게 보내면, 분석가는 우선순위를 수작업으로 다시 지정할 수 있어야 한다.
  • 고객 연락 상태를 추적한다.
  • 상급 이해관계자를 위한 대시보드가 필요하다. 그래야 업데이트를 제공하고 방해 요소를 제거할 수 있다.

 

설계 고려사항(considerations)들로는 무엇이 있었나?

솔루션은 "민첩"해야 한다. 왜냐하면 일반적으로 규정은 정확히 정의 되어 있지 않고 해석에 따라 내용이 달라질 수 있기 때문이다. 따라서, 획득해야 하는 필드들/데이터 품질 규칙/우선순위 지정 규칙 역시 자주 변경될 수 있다 - 우리는 1~2일 이내에 변경 사항을 반영할 수 있어야 한다. 보안 (고객 데이터와 수익 데이터를 함께 모아서 다루기 때문에) 접근 제한이 매우 중요하다.

 

왜 델파이가 탑재된 RAD 스튜디오를 사용해서 그 기업용 소프트웨어를 만들기로 결정했는가?

우리가 델파이로 구축하기로 한 것은, 다음과 같은 기능을 가진 애플리케이션을 원했기 때문이다.

  • 엑셀과 유사한 사용자 인터페이스- 사용자 교육을 최소화 할 수 있다.
  • 데이터셋/워크시트 패러다임- 모든 데이터는 (폼 아니라) 데이터셋의 형태로 획득한다.
  • 출시 기간 단축- 새 규정에 대한 지원을 신속하게 추가한다.
  • 중앙 데이터베이스- 엔터프라이즈 수준의 데이터베이스(엑셀이나 MS Access 대신).
  • 감사(Audit)/버전 관리(versioning), 작업흐름(Workflow ) - 누가 언제 무엇을 수정했는지 알 수 있다.
  • 용이한 배포- 사용자에게는 실행 파일 하나만 있으면 되도록 한다.
  • 대용량 데이터- 화면 성능 저하 없이 대용량 데이터를 처리할 수 있어야 한다.
  • 사용자 간 작업을 할당한다.
  • 보안- 행/데이터셋 수준 보안
  • 리포트- 시각화 도구와 통합한다.
  • ETL- 데이터 수집 및 비즈니스 로직을 위해 사용

 

'엑셀과 같은' 사용자 인터페이스 요구사항을 어떻게 구현하였나?

우리에게 허용된 라이선스 안에서 선택해야 했다. 그래서 표준 그리드 컴포넌트를 사용해 엑셀 스타일 인터페이스를 만들었다. 하지만 TNextGrid (Bergsoft.net)를 사용하는 것이 더 좋았을거라 생각한다. 훨씬 더 많은 기능이 들어 있기 때문이다. 

사용자는 한 번에 한 행씩 작업한다. 대체로, 하나의 행은 하나의 고객을 나타낸다. 데이터는 개별 셀에 입력 된다. 데이터 타입에 따라 입력이 다르다 - 사용자는 숫자, 문자열, 날짜를 입력할 수 있다. 경우에 따라, 드롭다운을 제공해서 주어진 항목 중에서 사용자가 선택할 수 있도록 한다. 그리고 조회 테이블에 대해 값의 유효성 검사도 가능하다.

 

데이터셋/워크시트 패러다임이라고 했는데 무슨 뜻인가?

폼(form)이 아니라 데이터셋의 형태로 데이터를 획득하고 작업하기 위한 의도적인 결정이었다. 폼 스타일의 인터페이스를 생성했다면, 우리 작업이 느려졌을 것이다. 따라서 모든 실제 목적들에서, 데이터셋 하나는 데이터베이스 안에 있는 하나의 테이블에 대응한다. 새 데이터를 획득하기 위해 필드가 하나 더 필요한 경우에는:

  • 기반이 되는 데이터베이스 안의 테이블에 새 컬럼을 하나 추가한다,
  • 그리고 데이터 입력 규칙을 정의하는 메타데이터 몇 가지를 구성한다.

 

더 빠르게 출시한다고 했는데, 어떻게 가능했나?

새 규정에 대한 지원을 추가하는 것은 이제 쉽다. 아래 작업들만 하면 된다. 새 테이블을 데이터베이스 안에 만들고, 데이터가 각 필등 안에 어떻게 획득되는지 그 규칙을 구성하고, 사용자들을 새 테이블에 할당하고, 마지막으로 그 테이블을 최초로 채우는 작업을 한다 - 이 작업은 엑셀 파일에서 로드하거나 ETL 작업 사용한다.
 

중앙 데이터베이스에 대해 자세히 설명해 줄 수 있나?

현재 솔루션은 데이터 분석가 각자 자신의 로컬 엑셀 파일에서 작업을 한 후 한사람에게 전송하면, 그 사람이 하나의 MS Access 데이터베이스 안에 적재했다. 예상할 수 있듯이, 여기에는 많은 문제가 있었다.

우리는 델파이 애플리케이션이 오라클을 중앙 데이터 리포지토리로 사용하도록 설계했다. 테이블 하나 하나가 생길 때마다, 우리는 몇 가지 시스템 컬럼들을 추가했다. 이 시스템 컬럼들은 감사 이력(Audit history), 행 잠금(row locking)에 사용된다.

 

작업흐름(workflow), 감사(audit), 데이터 무결성(data integrity)을 위해 특별히 고려해야 할 사항은 무엇이었나?

동시 실행 관리는 행 잠금(row locking)을 사용했다. - 사용자가 행 편집을 시작하는 순간 그 행은 그 사용자에 의해 잠긴다. 그리고, 그 행의 작업흐름 상태는 "진행 중"이 된다. 사용자가 행에 대한 모든 편집을 완료하면, "검토" 단계로 넘어간다. 검토자는 해당 행을 "승인"(잠금 해제)하거나, "거부"(데이터를 이전상태로 되돌림) 할 수 있다.

추가로, 별도의 로그 테이블을 만들어 모든 사용자가 각 셀에서 수행한 모든 편집 내용을 기록했다. 이 정보는 감사에 사용되었다. 또한 행을 이전 상태로 되돌릴 때도 사용되었다.

 

델파이 앱이 다른 솔루션에 비해 배포가 쉽다는 것을 알게 되었다고 했나?

사용자가 애플리케이션을 사용하기 위해 필요한 것은 실행 파일과 오라클 클라이언트 라이브러리들뿐이다. OCI 라이브러리들은 우리 사내 앱 스토어에서 사용자가 요청할 수 있다. 그리고 실행 파일은 해당 팀의 SharePoint에서 다운로드 할 수 있다. 따라서 실행 파일에 새 업데이트를 보내는 것이 매우 쉬웠다. 우리는 FireDAC을 사용하여 오라클과 데이터베이스의 연결했다.

spacer.png

 

어떤 종류의 데이터 볼륨을 다루었나?

엑셀은 백만 개의 행을 지원한다. 하지만 큰 시트인 경우에는 작업 성능이 떨어지고 데이터 손상이 잦았다. 이제는 데이터가 오라클 데이터베이스에 있기 때문에 데이터 볼륨은 더 이상 중요하지 않았다. 사용자 인터페이스 관점에서 볼 때, 화면에 수백 개의 행만 보여주면 되었다. 왜냐하면, 주로 한 번에 한 행씩만 작업하기 때문이다.

고객의 기록이 데이터셋 안에 로드되면, 모든 기록이 "할당되지 않음(Unassigned)" 상태가 된다. 사용자가 편집을 시작하면, 그 사용자에게 자동으로 할당된다. 그 기록을 다른 사용자가 작업할 필요가 있을 경우, 다른 팀원을 지정할 수 있다.

 

보안(security)과 안정성(reliability)이 귀사의 델파이 기업용 앱 경험에서 중요한 요소였나?

보안은 매우 중요했다. 처음에는 데이터셋 수준에서 구현되었다. 왜냐하면 주로 한 팀이 하나의 규정을 작업하고, 그 팀 전체가 동일한 수준의 액세스 권한을 갖기 때문이었다. 그러나 데이터셋에 대한 추가 애트리뷰트(attribute)를 확보하여 리포트 시점에 행 수준 보안이 가능 하도록 했다.

 

어떤 기업용 소프트웨어 리포트 도구를 사용했나?

기본적인 리포트 용으로는, TChart 컴포넌트를 사용하여 '진행 중인 총 행', '완료된 총 행'을 표시했다. 우리는 실시간 대시보드를 만들 수 있었다. 그래서 작업 상태와 고객 연락 상태를 추적 할 수 있었다. 데이터베이스 뷰와 Tableau 같은 시각화 도구를 사용했는데, 고위 경영진들은 우리가 제공하는 투명성 수준에 깊은 인상을 받았다 (이전까지 제공되던 불투명한 엑셀 기반 리포트와 비교되었다). 사용자와 리포트가 동일한 테이블에서 생성되었기 때문에 리포트에는 실시간 정보가 반영되었다.

마지막으로, 사용자 편집에 덧붙여, Informatica와 같은 ETL 도구를 사용했다. 이 도구들은 외부 웹사이트 또는 다른 애플리케이션에서 데이터를 가져와 데이터셋 안에 있는 일부 컬럼들을 채웠다. 이 기타 컬럼들은 데이터 분석가가 고객 데이터를 검토하고 의사 결정을 내리는 데 필요한 정보를 제공했다. ETL 도구는 일반 작업들도 실행했다. 그 작업들은 데이터베이스의 데이터를 사용하고, 일부 비즈니스 로직을 실행하고, 리포트를 생성하고, 심지어 데이터를 다운스트림으로 보냈다.

spacer.png

 

프로젝트는 성공했는가?

이 최종 사용자 애플리케이션은 큰 성공을 거두었다. 최종 사용자들은 매우 만족했다. 더 이상 엑셀과 씨름할 필요가 없고, 주로 실제 비즈니스 요구 사항에만 집중할 수 있게 되었기 때문이었다.

경영진도 만족했다. 속도, 보안, 투명성을 확보했기 때문이었다. 그리고 외부 규제 기관에 보고할 때 자신들의 데이터를 신뢰할 수 있게 되었다. 우리는 이 애플리케이션을 사용하여 5 가지 규정에 대한 고객 연락 상태를 확인하는 작업을 지원했다. 각 규정이 안정화되었을 때, 그에 필요한 기능은 우리의 엔터프라이즈 애플리케이션으로 이전되었고, 일상 업무처럼 운영되었다.

한동안, 우리는 심지어 이 델파이 애플리케이션을 패키지화 해서 사내 앱 스토어에서 받을 수 있도록 했다.

 

이 글은 기업용 대형 애플리케이션에 대한 기고 경연 대회(Enterprise Article challenge)에 제출된 것이다. 만약 여러분도 델파이, C++빌더 또는 RAD 스튜디오를 사용하여 만든 훌륭한 엔터프라이즈 제품과 프로젝트에 대해 이야기하고 싶은 성공 사례가 있다면 연락을 주기 바란다.

한국 개발자는 데브기어의 델파이 사례 기고 행사에 참여하세요!

이 댓글 링크
다른 사이트에 공유하기

  • 2주 후...

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.