그만 두길 잘했다는 생각도 들긴 하지만, 한 편으로는 '그것 밖에 되지 않는 나 자신'이라고 스스로 냉철한 비판을 하기도 했다. 커머스 계통은 일이 많고 힘들다고 만류했던 친구의 제안을 뿌리치고 간 것이라서 그런지 자존심이 더 많이 상했다. 한 마디로 정신적으로 만신창이가 된 셈이다.
내가 들어간 곳은 다섯 손가락에 꼽히는 나름 유명한 쇼핑몰이다. 그래서 그런지 필기시험도 봤고 면접도 4번이나 보면서 입사하는데도 적지 않은 시간이 걸렸다.
면접에서 하나같이 물어보는 것이 바로 '프레임워크의 사용'에 대한 내용이었다. 사용자가 많아 서버의 부하가 많이 걸리는데도 프레임워크를 고집해야 하는 것인가에 대해 집중적으로 물어봤다.
그에 대해 나는 프레임워크는 개발방법에 대한 일종의 규칙에 이점이 더 많이 있고, 경량화도 되어서 그리 큰 부담을 주지 않을거라고 했다. 만약 프레임워크를 버리고 단순한 Model1 방식으로 돌아간다면, 유지보수 하는 비용을 무시할 수 없을 것이고, 그럴바에는 기존 소스를 유지하면서 서버를 더 늘리는 것이 나은 방법이라고 논리를 펼쳤다.
그러면서 반론으로 내세우는 말이, 자신들이 만든 라이브러리(프레임워크라는 단어 자체를 싫어하는 듯 했다)가 있어서 편하게 개발할 수 있다고 자랑했다. 그러한 무거운 프레임워크 따위는 필요하지 않다면서 프레임워크를 강하게 부정했다.
그리고 입사 후 소스를 훑어보게 되었고, 다음과 같은 사실을 발견했다.
- Database Connection 수동 닫기.
- String과 +연산자로 쿼리연결.
- Servlet을 직접 등록하여 사용하는데, 내부에 동기화 설정 없음.
- 과도한 상속으로 인한 중복 소스의 분산 및 기능 이해의 어려움.
- 인터페이스는 거의 없으며, 그나마 있는 인터페이스도 쓸만한 것이 없음.
- 한글로 된 메소드.
- 쓸만한 유틸리티가 없음. (있는 유틸리티 마져도 중복된 것이 너무 많음)
- javascript의 남용으로 페이지 로딩의 저하.
- 유지보수가 어려운 UI 스크립트.
- 자주 쓰는 팝업창에 callback function을 정의할 수 없음. (하드코딩 되어있어서 필요할 때마다 만들어야 함)
- 관리되지 않은 수 많은 데이터베이스 기반의 함수, 프로시져, 테이블들. (테이블 구조 및 명세 없음)
- 이미 오픈소스로 또는 언어자체에서 구현되어 있는 것을 상속받아서 오버라이드 해서 사용.
여기서 Servlet에서 동기화 설정이 없다는 것은 큰 문제이다. Servlet에서는 HttpServletRequest를 제외한 나머지 Servlet 관련 객체들이 Thread Safe하지 않아서, 반드시 동기화처리를 해 줘야 한다. 오류가 많다는 소문이 날 만도 하다.
맨 마지막에 있는 것이 좀 크다면 큰 문제인데, 데이터베이스 커넥션도 자신들이 상속받아서 직접 만들어 쓰고 있었고, 멀티파트 객체도 자신들이 오래전에 만들어서 계속 쓰고 있어서 다른 오픈소스 코드와 어울리기 힘들었다. 사실 이 문제는 의존성 문제도 걸리는데, 원래는 인터페이스나 추상클래스를 인자로 쓰고 구현체는 팩토리 객체에서 가져오도록 했어야 하는 거였는데, 계속 상속받은 구현체로만 사용하는 것을 보니, 유지보수 및 새로운 개발 시 마이너스 요소로 작용할 것은 뻔한 일이었다.
기획자들은 자신이 알고 있는 회사 서비스 정책을 잘 알고 있지만, 그 내용을 문서화해 놓지 않았고, 개발자나 서비스에 관련한 사람들에게 교육도 하지 않고 있었다. 그래서 내가 새로 투입된 프로젝트에서는 정책을 모르고 개발에 임할 수 밖에 없었다. 중간에 정책을 몰라서 부탁한 뒤 설명을 들었지만, 그 들은 내가 원하는 대답을 대부분 해 주지 못했으며, 히스토리 관리가 안된 개발자 탓만 지적했다.
회사를 나온 지금까지도 정확한 정책을 모른다. 그리고 프로젝트를 하면서 깊게 데이터베이스 구조를 바꾸었기 때문에 프로젝트의 기간은 점점 늘어날 수 밖에 없었지만, 그러한 것을 쉽게 용납해주지 않았다. (분명 오류가 속출 할 것이다)
내가 들어간 프로젝트는 2개월짜리 프로젝트였는데, 기획부서에서 의견을 조율 및 정책의 수립에 있어서 거의 대부분을 사용하고 개발팀에 넘긴 기간은 고작 10일이었다. 그래서 프로젝트는 겉으로 성공했을지 모르지만, 사실 실패한 프로젝트였다.
더욱이 나는 인수인계도 없이 무작정 일을 했고, 프로젝트에도 투입된 케이스였다. 그래도 프로젝트를 마치긴 했지만, 어마어마한 스트레스에 시달려야 했다. 소스를 보고 알 수 있는 것과 그렇지 않은 것이 있기에 매일 잘 모르면서 개발하는 것이 대다수였기 때문이었다. 개발하는 일이 이렇게 재미없는 건지 여기서 깨달았다.
결국 나는 퇴사하는 마지막날까지 새벽까지 야근하다가 퇴사했다. 그것도 부모님이 회사앞에까지 차를 끌고 오신걸 알고 나서야 보내줬다. 퇴사자에게 야근을 강요하는 회사, 내가 이런 곳을 그렇게 오래도록 고민하고 들어왔다니 씁쓸한 느낌을 피할 수가 없다.
급한 개발일정과 잘 모르는 정책, 그리고 지저분한 코드를 만들 수 밖에 없는 구조로 인해 정신적으로 그리고 육체적으로 지치게 되었다. 개발자의 길이 보람있고 좋았는데, 이 회사를 거치면서 처음으로 회의를 느껴봤다.
경력관리 이것으로 엉망이 되었다. 난 이제 큰일이다. 앞으로 마음을 굳게 먹어야 할 것 같다.
그런데 대부분의 회사가..그래요. ㅠ_ㅠ
답글삭제6,8,9,11은 좀 너무..했네요.(나머지 부분은 어느 정도 규모가 잡힌 Site라면 다들 있는 문제..)
자 이제 컨설팅 시장으로 뛰어드시는 겁니(퍽퍽)
꾸우님 힘내세요. ㅎㅎ
답글삭제