[Oh! 반면교사] 05. 4년제 나온 놈이 데이터베이스를 몰라?!

오씨 이 친구의 진짜 짜증나는 점은 지식의 편중성이다. 지식이 편중되어서 진짜 쓰잘데기 없는 신기술만 쫓기 바쁘고 실제로 제대로 알아둬야 할 기본 기술에 대해서는 전혀 모르거나 그냥 대충 프레임워크로 때려박자 수준의 저레벨 게발자다. 개발자의 실력 향상에 대해서 이야기 할 때 항상 되지 말아야 하는 Expert Beginner에 정확하게 들어맞는다. 이게 뭔지 모르는 분들을 위해 링크도 걸었지만, 신기술들을 위해 여러모로 구현된 프레임워크만 죽어라 파고는 자기는 이 기술 쓸 줄 알아 하는 학생 기분의 개발자도 내가보기엔 저 부류에 들어간다고 본다.

데이터베이스야 여러모로 중요하게 여겨지면서 어딜가나 한번씩은 제대로 배우는 이론이다. 그러다보니 좋건 나쁘건 본인 스스로 한번 설계라는 걸 해본 적도 있을 것이고, 실제로 프로젝트를 진행하다보면 데이터베이스를 안쓰는 특수한 상황이 아닌 이상 한번씩은 꼭 써봤을 것이다. 그리고 꼭 골머리를 썩히는 것이기도 하고…. 몇 년 굴러보면 익숙해진다.

근데 여기서 문제가 발생한다.

데이터가 보이면 코드가 보이기 때문에 데이터베이스와 관련된 부분을 보다보니 EF로 해놨다. 근데 동시성 제어가 안된다. 여러 곳에서 한 DB로 동시에 갖다붙을 수 있는 환경에서 이 짓을 안해놨….

사실 데이터베이스가 진짜로 어려운 건 교재 뒤에 있는 내용들 때문이다. 의외로 ACID 규칙과 트랜잭션과 동시성 제어 이런 부분들은 여러모로 골때리는 상황을 연출하는 데 있어서 최고의 내용들이다.

근데 코드를 보면 이런 부분들을 전혀 이해를 못하고 그냥 짰다.

뭐 그러면 얼마나 좋을까…. 그거야 뭐 데이터베이스 전문가인 기술이사님과 같이 진행하면 금방 끝나는 걸….

근데…..

Relation도 몰라.

게다가 관계도를 몰라서 그냥 m:n 관계로 막 물린 테이블들이 수두룩……

ㅎㅎ………….

ㅆ……..

그 덕에 EF 복습하면서 데이터베이스 구조를 정리했다.

한국에서 경력직이라고 하지 마라 오씨….

[Oh! 반면교사] 04. 인수인계 내용이 있었는데 그걸 지 후임한테 말로 한번 말하고 끝냈냐!

ㅎㅎ… 이때 이건 진짜 생각하면 할수록 열받네…..

인수인계 할 자료 하나도 없고, 소스코드 버전관리는 안되어 있고 그런 상태에서 압축 풀고 시작할 때, 프로그램 실행만 하면 된다고 해서 해봤는데 죽었다고 했었다. 그리고 그게 오라클 DBMS가 없어서 죽은 거라는 걸 실행하고 나서 있던 P군에게 들었다.

이 상황에서 P군에세 그냥 말로 대충 말하고 넘어간 것도 열받는데 더 열받는 일이 있다.

자, 그넘의 오라클을 설치하고 나서 다시 실행을 하는 데 또 멎었다. 이번엔 코드 상에서 멎은 데다가 왜 오류가 나는지도 좀 알겠으니 이젠 코드를 좀 보자 했는데….

뭔가 변수로 만들어지지도 않은 값을 가져다가 불러오는 것이었다.

ㅎㅎ…?

게다가 이게 왠지 모르게 프로그램 실행에 필요한 값인 걸로 보이는데….

좀만 뒤져보니 윈도우의 레지스터 값을 설정해서 그걸 불러오는 것이었다.

뭐, 좋아…

레지스터 쓴다고 욕할 인간은 아니니깐…..

근데 이게 어딜 봐도 초기에 설정하는 곳이 없다.

그래서 P군에게 프로그램 레지스터에 대한 걸 물었다. 혹시나 몰라서…

아니나 다를까….

그전에 테스트용으로 만들었던 인스톨러를 통해서 설치하면 해당 레지스터가 만들어진다고 한다.

….

이 미친 오씨께서 이걸 인스톨러에서 만든 레지스터를 그냥 가져와서 쓰는구나….

왜 이런 내용을 썅 문서로 안만들어 놓는데?!

실행 환경이잖아!

레지스터에 너놨다는 건 어디다가 써먹겠단 거잖아!!!!!

나중에서야 기술팀 담당하는 이사님과 사장님께 들었는데, 프로그램이 초기 설치할 때 선택한 환경에 따라서 실행 환경을 다르게 하고 싶었는데 그걸 그냥 레지스터에 때려박고는 설치 후에 레지스터를 건드리는 방식으로 했다고 한다.

………이 무지하게 중요한 내용을 가지고 어디다가 적어두지도 않아… 문서화도 안해놔…. 그걸 대충 설치하면 알아서 생긴다고 구두 설명만 하고 튀어….

…..그걸 말로 단 한 번 이야기 하고 끝내고 튀었다는 것에서 진짜 오씨에게 살의가 느껴졌었다.

인스톨러 만드는 법 모르겠으면 그냥 모르겠다고 하던가 진짜…. 그걸 개발하면서 말하는 게 그렇게 부끄러워서 저런 지랄을 해두고는 저 내용에 대한 아무 언급도 없이 튀었…

하….. (더 이상 쓰면 욕밖에 못쓸 거 같아서 일단 이 글은 여기까지…)

[Oh! 반면교사] 03. 자기 컴퓨터에다가 회사에서 쓰는 하드웨어 끼워서 도망갔어…?!

지금 우리회사에서 개발하는 프로그램은 몇몇 하드웨어를 이용해야 한다. 그래서 필요한 대표적인 것이 바로 시리얼 포트! USB로 나오는 장비들 널리고 널렸지만 아직 시리얼 포트로 이용해야 하는 그런 장비들도 진짜 많다. (의외로 미국에서는 산업현장, 근로현장에서 새로운 하드웨어 도입하는 것을 극도로 꺼려한다.)

근데 요즘 컴퓨터들은 당연하게도 시리얼 포트를 탑제하지 않은 메인보드들이 엄청나게 많다. 거기에 보드가 좀 싸면 USB도 한정되어 있으니…

이럴 땐 어쩔 수 없다. 확장카드 사야된다.

여기서 우리의 반면교사인 오씨(실제 성씨 아님.)는 미국에 올 때 자기 컴퓨터를 가져왔다고 한다. 그리고 회사에서 그 컴퓨터로 작업을 했다고 한다. 아주 별 지랄을 한다 진짜….

그리고 그 컴퓨터도 당연하게 시리얼 포트가 없다. 그래서 1:8 시리얼 카드를 샀다고 하는데….

산 기록이 분명 회계에는 남아있는데…. 1:8 시리얼 연결하는 문얻다리도 있는데…

카드가 없다.

미친듯 찾았다.

없다. 졸라 쓸데없는 140mm 케이스 쿨러 안쓴 건 졸라 많았다.

알고보니 회사 나갈 때 그 카드를 안빼고 나간 거다.

그리고 만에 하나를 위해서 USB to Serial이 오씨의 컴퓨터에 4개 물려있었다고 한다.

그리고 내가 뒤지면서 찾은 건 0개….

그리고 회사 돈으로 산 4TB 하드 두개….

이걸 전부 자기 컴퓨터에 끼워 쓰다가 퇴사할 때 안빼고 나갔다.

그래서 난 회사 입사하고 얼마 안되어서 이걸 또 구매 청구하고 기술 책임자인 이사분과 회계 겸 디자이너 담당인 여자 팀장님에게 이 사실을 보고했다.

당연히 두 분은 어이없어 했고… 뒷담이 미친 듯 나왔다.

회사 컴 맞춰서 개발하고 회사 컴에다가 꼽아 쓰고 나올 땐 다 두고 나와야지 저게 뭐하는 짓이야 진짜…..

[Oh! 반면교사] 02. 버전관리를 왜 안해! 미쳤어?!

규링이 대학원에서 석사 과정 중에 여러모로 TA(수업조교)를 했었다. 그거라도 좀 벌어서 연구실 친구들하고 밥먹고 그랬다. 그 돈 모아봤자 뭐 얼마나 된다고… (그때 외주돌리던 게 좀 더 벌렸었다 솔직히..)

뭐 일단, 조교를 하는 과목 중에 모바일 앱 개발을 한번도 안해본 친구들이나 해보고 싶은 친구들을 위해 열린 강의에서 버전관리 솔루션인 git을 알려주고 해보길 권장했었다. 사실 수업으로 알려주기 전까지 git을 못쓰고 했던 친구들이라면 솔직히 했어도 좀 개판으로 했다. 그거 안다. 당연히 안다. 그래도 한번 알고 해보길 원했었다. 학부생 레벨의 코드야 구현환경 알아보고 해당 환경 구축방법과 도큐먼트 한번 쭉 보고 나서 학생 코드 눈으로 쭉 훓어보면 대략 95%는 머릿속에서 컴파일 되고 하는 그런 코드들이 대부분이니깐 이런 것이라도 더 알고 몸에 익히면 좋겠다는 생각으로 했다… (학회나 동아리 활동 등으로 배워온 예외도 있다. 근데 그런 친구들은 이런 수업 잘 안들어서…)

그들에게는 다른 거 요구 안한다. 그냥 지속적으로 어떤 작업을 하나 했으면 그 작업에 대한 커밋만 해달라고만 한다. 브랜치 따고 뭐 하고 하는 거 첨에 하면 어려운 개념으로 들어오니깐… 그러면 16주 강의수업중에 짜는 코드라 그렇게 많은 커밋은 없어도 각 기능마다 커밋 잘 따라오는 친구들은 따라온다. 계중에는 그냥 그날그날 커밋하는 친구도 있고… 과제 몰아서 했는지 며칠만에 커밋이 쫙 쌓인 경우도 있고 아예 안한 경우도 있고…. 하다보면 어떤 식으로 과제를 했는지에 대한 게 보인다. 그리고 그건 아무래도 그 학생의 과제 하는 방식과도 관련이 있다.

하물며 학생도 좀 시켜보면 어떤 식으로 개발하고 얼마나 개발하고 도중에 기능 바뀌거나 수정해야 하면 어떤 방식으로 했는지도 몇 안되는 커밋으로도 보이는데 이걸 실부 개발자들이 안했다? 미친거죠? 장난해요?

개발하는 데 있어서 여러모로 자산들이 있다. 그 중에서도 소프트웨어 코드는 엄청난 자산이다. 죽어라 관리해도 모자란 판에 소스코드를 버전관리 안해? 미쳤어?!

게다가 이전 글에서도 적었지만, 진짜로 소스코드는 P군에게 압축파일로 대강 받은 게 전부다. 소스코드를 뭐 날짜별로 압축파일을 만들었다던가 시디에라도 구워뒀다라던가 라도 해놓았으면 별 상관이 없었지만 그것도 안했다. github? gitlab? bitbucket? 이런 건 진짜 날초보 개발자인 P군은 학교 다닐 때 동아리에서 들어본 게 전부란다. 이전 개발자 사수님은 그런 거 안썼단다. (이녀석은 진짜 초보 개발자인데 이녀석 이야기는 좀 나중에 적겠다. 지금은 아니지만 옛날에는 오씨의 작품 중 하나다.)

(ㅡㅅㅡ^)=3

이게 얼마나 위험한 짓인지 모르는 분들에게 부가 설명을 하자면, 만에 하나 오씨가 회사 때려친 시기와 내가 입국해서 회사 입사하는 시기 사이에 만에 하나라도 P군의 PC가 작살나기라도 했으면 소스코드 전부 싹 다 날려먹는 판국이 벌어지는 것이었다.

(X~X);;;

그리고 내가 소스코드 건네받고 환경 설정과 각종 자료 뒤지기를 위해서 일주일을 소비하던 때에 실제로 P군의 PC는 스스디가 작살났다. (그리고 새로 맞췄다.)

(………………)

신경질이 났다.

근데 이걸 위의 개발을 담당하는 총괄자 분이 몰랐을까? 여기 사장님도 옛날에 국책연구소에서 임베디드랑 백본 네트워크 솔루션 개발하던 분이었고, 여기 기술팀 담당하는 이사분도 웹 솔루션과 대용량 DB 시스템 구축하는 데 일가견 있는 분이다. 이런 분들이 버전 관리의 중요성을 모를 리가 없다. git이 아니라 svn이던 뭐던 이용했을 분들이었다. 근데 그분들에게 들은 이야기는 진짜 가관이었다.

“자기는 완벽한 관리를 하고 있기 때문에 소스코드가 날아가는 상황은 있을 수 없다라고 하면서 우리가 모르게 관리하고 있었다.”

“이런 이야기 하면 신경질을 내면서 자기 못믿냐고 했다.”

………………………………윗분들의 손으로 뭐 어떻게 할 수 있는 그런 오씨가 아니었던 거다. (이 이야기는 나중에 할 꺼임. 할 말 진짜 많음. 반면교사의 본보기임.)

그 말 듣고 소스코드 파일을 열었다. git 폴더가 있다. git을 만들기는 했네.

그리고 git log를 당연하게 쳤는데….

커밋이 총 9개 되어있다. 그것도 커밋한 시점이 이 프로젝트 시작할 시점인 3년 전 날짜이며 커밋 메시지가 “first commit”, “AA 구현”, “BB 구현”, “CC 구현”, “BB 수정”, “commit”, “커밋”, “오늘 커밋”, “commit” 이다. 정확하게 9개 다 기억한다.

리모트? 그런 게 있을 거 같나요? 커밋을 저딴 식으로 하는 새끼가 소스코드를 리모트 서버에 관리를 한다????!? ㅎㅎㅎ… 그런 거 없음. 진짜로….

그리고 자기 부하인 P군에게도 이런 걸 하나도 가르치지 않았다.

제대로 글러먹었습니다.

git이나 svn 못써서 개발자 아니라고 하는 거 아니다. 나도 처음 할 때에는 저런 거 잘 몰라서 소스코드 압축파일 날짜별로 만들고 해당 날짜에 뭐 개발하고 했는지 워드파일로 만들어서 안에 넣어두고 DVD로 굽고 했던 시기가 있었다. git과 svn 같은 버전관리 솔루션들을 알고나서부터 소스코드 관리하는 난이도가 미친듯이 쉬워진거지….

그래도 어려운 거고, 그래도 중요한 거다. 날려먹고 복구 못하면 그게 뭔 짓이야!!!! 니가 그러고도 경력 있는 개발자냐!!!!

그래서 내가 코드 사이에 스페이스 바 하나 추가해서 기존까지 오씨가 자기 이메일주소와 자기 영문이름으로 커밋한 것 뒤에 내 git 정보를 이용해서 커밋하고 이 시점부터 미친듯한 커밋을 하고 미친 분량의 브랜치를 만들어 작업을 했다.

또한 사내에서만 쓰는 용도로 gitlab-ce를 빈 서버 하드웨어에 구축했다. 적당한 제온 4코어 쌈마이와 램 16기가, 하드 2테라 4개가 RAID-5로 묶인 델 타워서버가 걍 굴러다녀서 그걸로 잘 쓰는중…. 하드야 날려도 된다고 했고, 어차피 우리에겐 만능의 리눅스인 우분투가 존재하잖아…? 내 옆자리에 갖다놓고 우분투 서버 구축해두고 gitlab-ce며 redmine이며 뭐며 미친듯 설치하고 손에 좀 놀려보니 이런 거 안해본 P군을 위해서는 종합선물세트 같은 gitlab이 더 나을 꺼 같아서 gitlab으로 잘 쓰고 있다. 그리고 P군에게도 git 사용법을 가르치면서 열심히 체크하고 갈구고 습관 만들고 한 결과 P군은 지금 버전관리와 이슈 관리와 위키 채우기에 맛들려서 조금씩 무럭무럭 개발하고 있다.

[Oh! 반면교사] 01. 소스코드만 건네면 인수인계냐?!

미국 왔을 때, 나한테 코드 넘겨서 같이 개발하기로 되어있던 개발자는 자리에 없었다. 그리고 그의 후임 개발자(완전 초보) P군(근데 이 친구는 내 개발과는 전혀 상관없는 솔루션 개발중인 녀석임.)이 나한테 소스코드 압축된 거 하나만 딸랑 주고는 “그게 전부라고 했습니다” 라고 했다.

황당했다. 정작 몇년간 개발했던 프로그램인데도 불구하고 아무 자료도 없었다. 심지어 버전관리도 안되어 있었다. 진짜다. 게다가 나한테 코드 넘기기로 했던 개발자 오씨는 이 회사 오기 전에도 경력자로 들어왔던 사람이다. 거짓말 같죠? 실제상황입니다.

다행히도 프로그램은 돌아갔습니다. 그냥 돌리면 돌아간다고 합니다.

그래서 비주얼 스튜디오를 설치하고, 솔루션을 열고 이제 실행을 하니….

실행 안됩니다.

변수를 몾찾습니다. 근데 그 변수… 레지스터값입니다.

ㅡㅅㅡ

레지스터 값을 프로그램 시작하기 전에 설정해야 하는데 코드에 설정하는 곳은 없습니다. 다시 P군을 불렀죠. 레지스터 정보에 대해서 물어봤습니다. 근데 그건 설치되면 자동으로 만들어 진답니다.

ㅇㅅㅇ?

그러더니 나한테 그전까지 테스트용으로 만들었던 인스톨러를 또 줍니다. 그 인스톨러를 설치했습니다. 인스톨러가 레지스터값을 만드네요. 좋아요. 그건 좋아요. 근데 그걸 왜 인수인계용 자료로 안만들어 놓는데요?!

설치된 인스톨러의 레지스터 값을 가지고 이제 실행을 하는데… 데이터베이스를 몾찾겠다고 하면서 에러 내고 죽습니다. 그래서 다시 P군에게 물었죠. 그제서야 전 이 회사 솔루션에 오라클이 필요하다는 사실을 알았습니다.

X_X

내가 미국 오는 사이에 뭔 일 있어서 나간 오씨… ㅆㅂ….

너무 어이가 터졌습니다. ㅠㅠ

자기가 개발하면서 여러모로 설정하고 만들었던 내용에 대해서 문서화 시키거나 어디 사내 위키라도 만들어서 관리하고 그러면 어디 덧나요? 그러면 누가 죽여요?

참고로 이 사람 신입 아닙니다. 경력 3년이나 있는 상태에서 이 회사에서 3년이나 더 일하고 나간 개발자입니다. 경력 있다는 개발자가 이 짓을 하고 나갔는데 진짜 어이가 털려서…..

이런 걸 인수인계라고 하고 나간다고 생각하면 진짜….

그러나 이건 시작입니다.

p. s. 제목처럼 01입니다. 저 숫자가 세자리가 되느냐 마느냐에 따라서도 제가 연재하기 나름입니다.

[Oh! 반면교사] 시작하기…

원래는 개발 이론적인 것이나 뭐 여러모로 올리고 싶은데…

많이 바쁩니다…ㅠㅠ

근데 거기에 한술 더 떠서…

제가 10개월간 인수인계랍시고 대충 받은 압축된 소스코드와 이 개발 비하인드땜에 화병도 나네요…

게다가 제발 개발자들 이야기 하고 하다보면 하지 말라는 병신짓은 다 해놓고 간 지라…

아무래도 좀 이 사례를 공유하려 합니다.

제발 이렇게 하지 말았으면 합니다. 여러분이 더 이상 개발자 하기 싫다 하시면 이 시리즈대로 따라하시면 됩니다. 어디서도 다 싫어하실 겁니다.