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

과하게 많은 코드 그리고 상상 속의 친구에 대한 이야기


Recommended Posts

이안 바커 (Ian Barker)"The Story Of Too Much Code And An Imaginary Friend" 을 번역했습니다. (원문 작성: 2023년 2월, 최종 번역: 2024년 2월)

기업용 대형 애플리케이션에 대한 기고 경연 대회(Enterprise Article challenge)에 출품된 글들의 주제는 매우 다양했다. 대부분은 델파이 즉 고효율 로우 코드 프로그래밍 언어가 탑재된 RAD 스튜디오의 강점을 보여주는 것들이었다. 몇 가지 글에서는 (FireDAC 등) 컴포넌트 세트와 기술을 소개했었다. 그리고 RAD 서버도 여러 차례 언급되었다. 하지만 상상 속의 친구가 등장하는 글은 이번이 처음이다. Vladimir Timofeev 씨가 그 이야기를 들려준다.

차례


코드가 너무 많은가?

내가 델파이 개발자로서 했던 모든 작업은 기밀 유지 계약과 엄격한 영업 비밀로 가려져 있다. 공개하는 순간 범죄자가 되는 수가 있기 때문에 상상 속 친구의 이야기를 들려주겠다. 그 친구는 꿈속에서 찾아와 오래 전에 자신이 한 일을 들려 주었다. 내가 친구들과 일 이야기만 하는 것처럼 보일지도 모르겠다. 내 친구가 어떤 회사에서 일했던 경험부터 시작하겠다. 그 때의 상황은 다음과 같았다...

내 친구는 대중에게 드러나지 않은 비공개 회사의 회계 프로그램을 개발하는 일을 했다. 그는 회계 소프트웨어와 내부 회계 경리 시스템 개발을 계약하고 있던 회사에서 근무했다. 모든 정보를 저장하는 데이터베이스는 오라클(Oracle)이었다. 클라이언트는 델파이 6 안에서 유지 관리되고 있었으며, 자체 패치를 통해 성능 향상이나 버그 제거를 하고 있었다고 한다 (내 친구는 기억력이 좋지 않다). 개발 환경의 설치와 구성은 (프로그래머 치고는) 나이가 아주 많은 두 명의 전문가가 수행했다. 그리고 오직 그 둘만이 회사 안에서 유일하게 특정 패치의 용도를 알고 있었다. 왜 회사 안에서 이런 성자들이 생기게 되었는지, 오직 매우 일부의 사람들만이 그 상황을 이해할 수 없다고 생각했다. 혼란스러운 이유는 그 회사 안에는 자체 내부 위키가 있었으며, 그 위키에는 모든 정보가 들어 있었고, 누구나 접근할 수 있었기 때문이었다. 일반 프로그래머들은 최악의 상황에 처했을 때만 위키를 읽었다 (예: "선택받은" 첫 번째 성자가 병가 중이고, 두 번째 성자가 멕시코에서 휴가 중일 때). 그 회사에는 자체 SVN 리포지토리를 보유하고 있어서 그곳에 코드를 저장하고 있었으며 TortoiseSVN을 클라이언트로 사용했다.

spacer.png

그 앱은 어떤 기능을 제공했나?

그 앱은 공장 안의 모든 인력과 자산을 꾸준히 추적했다. 그리고 규칙대로 순조롭게 윈도우 XP에서 실행되었다. 몇 년 후에는 델파이 6에서 델파이 2009로 업그레이드되었다. 그때 내 상상속의 친구는 이 일에 지루함을 느꼈고 어려움 없이 퇴사했다.
 

상상의 친구가 그 다음에 간 곳은 어디인가?

짧지만 지루한 구직 후에, 내 친구는 "직원 친화적" 이라고 스스로 말하는 회사에 일자리를 얻었다. 그곳에서 그는 약국과 병원을 위한 의약품 재고 시스템을 구축하는 업무를 담당했다. 그 회사는 전 세계 여러 지역들로 가는 의약품 도매 배송을 조직했다. 그 회사는 의약품 뿐만 아니라 자체 회계 정보 시스템도 제공했다. 공공기관들도 공공 의료 서비스를 위해 이 회사의 의약품을 구매했다. 의사들은 무료 의약품을 처방할 때, 필요한 약이 어느 약국에 있는지 미리 알 수 있었다. 

내 친구가 알기로, 지금은 그런 기술이 잊혀졌다고 한다 (이 모든 것은 제약 회사가 군수 산업보다 수익성이 좋아지기 훨씬 전에 일어났었다). 우리가 아는 것이라고는 델파이 2009오라클 데이터베이스가 사용된다는 정도뿐이었다. 아마 SQL 호환 데이터베이스라면 어떤 데이터베이스로 했어도 잘 되었을 것이다. 애플리케이션에는 두가지 인터페이스가 있었다: 하나는 약국용이고, 또 다른 하나는 병원용이었다. (FastReport 등) 써드-파티 라이브러리들이 할인 처방전을 인쇄하는데 사용되었다. 만들어진 PDF 처방전 안에는 처방 내용과 바코드가 들어 있었다.

어떤 하드웨어가 사용되었나?

일반 휴대용 스캐너와 키보드 인터페이스가 코드를 스캔하는데 사용되었다. 스캐너가 데이터를 읽는 즉시, 그 데이터는 커서가 놓인 필드 안에 즉시 입력되었다. 따라서, 해당 바코드는 어떤 상품 회계 프로그램에든 빠르게 입력될 수 있었다. 약국에서는 이 처방전을 이용해 바코드를 스캔하고 그에 맞는 약을 내어 주었다. 의사들과 약사들이 사용하는 개인용 컴퓨터에 설치된 윈도우 버전은 서로 달랐다. 하지만 이 시스템은 운영되는 동안 호환성 문제가 전혀 없었다. 이런 이유로, 내 친구는 현대 안드로이드 개발자들에게 이런 기술에 대해 이야기하는 것을 꺼린다. 대부분의 수고가 개발에 투입된 시기는 주(main) 관리자가 데이터베이스 안에 있는 모든 테이블들의 이름을 바꾸자는 아이디어를 냈을 때였다. 이미 그 때는 프로젝트가 테스트의 영역에 들어가 있었는데 말이다. 그 일이 있고 나서, 프로그래머들은 두 달 동안 클라이언트 프로그램 안에 있는 쿼리를 다시 작성했다. 기존에 작업했던 테이블들이 없어졌기 때문이었다.

그제서야 비로소 그 직원들은 '직원 친화적 기업'이라는 단어의 의미를 완전히 이해할 수 있었다. 왜냐하면, 그 프로그래머들은 할인된 가격으로 약을 구해서 신경계를 회복할 수 있었기 때문이다.

너무 심한 것 같다. - 그래서 그 다음에 무슨 일이 생겼나?

그 후, 우리 친구는 좀 더 분위기가 차분한 회사로 이직하기로 결정했다. 그 일자리에서는 오라클 데이터베이스용 통계 시스템을 개발했다. 그 통계는 다양한 고객층을 위한 마케팅 프로그램을 구축하는 데 사용되었다. 고객의 등급은 구매 실적과 제품 주문 시스템과의 상호 작용을 바탕으로 분류되었다. 매달 고객 등급은 다시 계산되었는데, 그 근거는 이전 달의 활동이었다. 매달 현금을 받을 당첨자를 고객 중에서 추첨했다.

그 앱을 위해 무슨 기술을 사용했나?

클라이언트 개발을 위해 델파이 XE2를 사용하여 SQL 쿼리들을 클라이언트 안에 채워 넣었다. 그 쿼리 묶음이 실행되고 나면, 가져온 데이터들을 OleObject를 통해 마이크로소프트 엑셀 표들 안에 넣었다. 내 친구는 마케팅 부서를 위한 대규모 리포트 3 개를 매일 생성하는 일을 맡았다. 처음에는, 매일 출근할 때마다 실행했다. 총 한 시간 정도 걸렸다. 나중에는, 그 클라이언트 프로그램을 다시 작성하여 그의 회사 컴퓨터의 잠금 해제 화면에서 바로 실행되도록 했다. 그 다음부터, 그의 일상은 PC를 켜고 윈도우 계정의 비밀번호를 입력한 후 주방에 커피를 마시러 가는 루틴으로 시작되었다. 자리에 돌아오면 이미 보고서들은 로컬 네트워크의 공유 폴더 안에 들어 있었다. 그때는 아직 유튜브가 유행하지 않았었다. 그래서 그는 근무가 끝날 때까지 고양이가 나오는 재미있는 사진을 보며 시간을 보냈다. 곧 내 친구는 그런 사진들이 지겨워졌고 일 다운 일을 하고 싶어졌다.

그 다음 앱은 무엇이었나?

spacer.png다음 직장에서 맡은 업무는 매우 흥미로웠다. 임대할 무료 광고를 미리 설정된 기준에 따라 선택하는 업무였다. 이 작업은 운영자들이 수작업으로 수행했다. 그래서 내 친구는 그것을 자동화하자고 제안했다. REST 클라이언트 라이브러리를 활용하면 된다고 말했다. 필요한 요청들과 유용한 답변들의 목록은 오래된 마이크로소프트 액세스 안에 잘 저장되었다. 그 서버로부터 받은 답변들은 TJSONObject를 통해 분석되었고, 그 내용에 따라 선택된 다음에 작성되었다. 필터링 할 단어 목록도 역시 그 마이크로소프트 액세스의 별도의 테이블 안에 보관되었다. 데이터베이스 업데이트 절차는 하루에 세 번 실행되었다. 따라서, 그 회사는 언제나 시장에서 가장 최신의 아이템들을 가지고 있었다. 이렇게 유용한 유틸리티를 만든 후, 내 친구는 "정말 고맙다"는 인사를 받았다. 그리고 새 업무를 찾아보라는 제안을 받았다.

그 친구는 그 밖에 또 어떤 일을 했나?

그 다음 회사에서 그는 마케팅 부서의 애널리스트로 일하게 되었다. 그 회사는 의욕이 넘치는 영업사원들의 네트워크를 통해 화장품을 판매하는 곳이었다. 영업의 경우, 모든 영업사원은 카탈로그에 있는 각 판매된 상품 당 굉장히 후한 수수료를 받았다. 화장품 자체의 원가는 매우 저렴했다. 하지만 이런 마케팅 비용 때문에 가격은 훨씬 더 비쌌다. 화장품 카탈로그는 전년도 영업을 바탕으로 구성되었다. 이것은 마케팅 부서가 책임지는 업무였다. 그 회사는 오라클, MS SQL, PostgreSQL 등등 매우 다양한 데이터베이스를 사용하고 있었다. 그리고 각 데이터베이스에 연결된 클라이언트들 역시 모두 제각각이었다. 델파이 XE 역시 그 중 하나였다. 내 상상 속 친구는 리포트를 생성하는 프로그램을 개발하되 마음대로 해도 좋다는 허락을 받았다. 그는 자신이 가장 좋아하는 도구인 OleObject마이크로소프트 엑셀을 이용해 진행했다. 그 회사 물류 창고에서는 각 주문에 맞춰 작업자들이 컨베이어 벨트에서 수작업으로 포장을 해서 최종 패키지를 만들었다. 주문서의 상품 조합은 화면에 표시되었다. 작업자는 박스 안에 필요한 화장품 샘플들을 담았다. 우리 친구는 그의 다음 회사에서 이보다 훨씬 더 복잡한 시스템으로 이런 기계 노동을 하는 것을 보게 된다 - '몽키 인터페이스'라는 이름의 시스템이었다.

spacer.png

그 회사는 전세계를 대상으로 하는 온라인 상점의 재고 및 배송을 관리하는 시스템을 개발하고 유지 보수하고 있었다. 오라클+윈도우+델파이라는 익숙한 조합이 사용되었다. 작성된 클라이언트는 겨우 몇 개로 충분했다. 아니 더 정확히 말하면 클라이언트의 인터페이스 화면은 시스템 운영자 역할에 따라 변하도록 되어 있었다. 물류 창고에서는, 최종 주문을 수집하는 작업자들이 "몽키 인터페이스"를 사용했다. 그런 이름으로 불리는 이유는 작업자들이 그 작업을 수행할 때 바코드 스캐너 하나만 있으면 되었기 때문이다.  바코드 20개를 인쇄해 놓고 그것만 사용하면, 마우스나 키보드를 조작하지 않아도 그 프로그램 전체의 인터페이스를 조작할 수 있었다. 왜냐하면 키보드와 마우스 입력은 "키보드를 무력화시키는" 이 휴대용 스캐너로 입력하는 명령어들과 완전히 중복되기 때문이었다.

이야기를 마치고 나서, 상상 속 내 친구는 커피를 마시고 컴퓨터를 껐다. 그리고 이제 그만 잠에서 깰 때가 되었다고 말했다. 그래서 나는 그 이야기를 기록할 수 있었다. 그의 추억이 나 말고 다른 사람들에게도 흥미롭기를 바란다.

이 글은 기업용 대형 애플리케이션에 대한 기고 경연 대회(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...

중요한 정보

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