본문 바로가기

소프트웨어개발자의 삶/개발일기

SI 기업 취업은 피하는 게 좋다. 어떻게 생각하시나요?

okky.kr에 위와 같은 질문이 올라와서 덧글을 달았다.
아래 화면에 원문 캡쳐다. 주저리 주저리 덧글을 달았는데 약간 정리를 해서 남겨둔다.

 

1. SW 시장의 2가지 축

 SW 시장에는 크게 두가지 분류가 있다. 범용 SW과 커스텀 SW 혹은 수평시장과 수직시장 이 존재한다. 

범용 SW란?

 우리가 자주 사용하는 windows, word, excel ... 등등의 SW를 범용 SW라고 한다. 범용 SW는 수평시장을 타겟으로 한다. 즉, 어떤 특정한 비지니스 상황에 놓이거나 그런 류의 해결을 위해서 존재하는게 아니라 불특정한 사람들이 두루두루 넓은의미에서의 공통성만 가지는 SW를 말한다. 네이버의 검색서비스도 어쩌면 검색분야에 범용 SW라고 할 수 있다. 구글의 검색기능도 마찬가지 일 것이다.

커스컴 SW란?

 특정 문제를 해결하기 위한 SW 이다. ERP, XX 관리 프로그램들이 그런 SW에 해당된다. 커스텀 SW는 수직시장을 타켓으로 나가는 방향성을 지니고 있다. 커스텀 SW가 수직시장을 무조건 타켓으로 하는 것은 아니다. 보통 특정한 문제를 해결해주는 SW를 개발하고 공급하면 그런 비슷한 문제를 해결하고자 하는 수요를 만나게 된다. 그러면 비슷한 문제를 해결해가는 솔루션으로 발전을 하면서 수직시장을 타켓으로 나아간다.

2. 커스텀 SW 특징

범용 SW는 내부에서 요구를 수집하고 내부에서 목표를 정하고 개발을 하면서 나아간다. 물론 버전이 올라가면서 사용자들의 요구사항도 듣고 여러가지 통로를 이용해서 개선사항을 파악하고 때로는 시장의 비지니스적인 환경에 맞춰가며 개발이 이루어진다.

하지만 커스텀 SW는 모든 시작은 고객에게서 시작된다. 고객이 해결하고자 하는 문제를 해결해주는 것을 목표로 하기 때문에 해결의 대상도 고객의 요구가 목표가 되고 그 완수의 시기도 고객과 협의한 시기가 목표가 된다. SW가 만들어진 결과도 고객의 요구를 기반으로 충족을 하는지 파악을 하고 이후 사용을 하게 된다.

이 고객의 요구는 보통 계약에 의해서 성립이 된다. 어떤 특정한 상황을 해결하고자 하는 고객의 욕구가 있고 그것을 해결해주는 SW 개발회사에서 어떻게 그런 문제를 해결해주겠다 하며 제안을 하고 서로 합이 맞으면 계약이 성립되고 프로젝트가 진행된다. 

이 계약단위로 프로젝트가 성립되기 때문에 많은 문제의 시작이 발생한다고 생각한다. 물론 깨닭음을얻어서 문제를 일으키지 않을 수도 있지만 대다수가 여기서 시작을 한다고 보는게 맞지 않나 하는 생각을 해본다.

3. 커스텀 SW의 폐단

계약 완수가 최우선

커스텀 SW 모든 과정이 고객과 개발회사와 계약에 의해서 프로젝트가 진행되고 발전해 나가기 때문에 계약의 완수가 프로젝트의 완수이다. 그렇기 때문에 계약을 완수하는 것. 즉, 고객의 요구사항을 SW 기능적으로 만들어서 고객에게 인도하고 그것으로 모든 일이 끝나는 것이다. 

이후 유지관리를 위한 단계를 가면서도 계약에 의해서 유지관리의 절차를 밟아나간다. 그렇기 때문에 많은 폐해가 일어나는데 대표적인 상황이 SW의 질적인 부분에 신경을 쓰지 않는 다는 것이다. SW의 1가지 기능은 내부적으로 수많은 방식으로 구현이 가능하다. 하지만 수많은 방식이 항상 변화에 기민하게 대응하는 것이 아니다.

하지만 계약이 중요하기 때문에 변화에 기민한 방식의 개발에는 등한시 하는 경우가 있다. 현실에서 자주 하는 이야기 '돌아가면 됐어' 라는 이야기이다. 이미 SW는 진화를 거듭하며(유지보수) 수정이나 유지비용이 기하급수적으로 늘어난다는 것을 많은 지표들을 통해서 입증이 되었다. 그런 문제를 해결하기 위해서 수정에 유연한 구조를 만드는 것이 좋은 SW를 만드는 것이라고 SW 공학에서 이야기를 해온다. 어떻게 하면 이런 구조를 만들 수 있을까 고민하며 나온 책, 논문도 부지기수이며 어떻게 이런 SW 만들 수 있도록 문화를 만들고 인프라를 만들어야 될까? 하는 고민을 하는 책과 논문도 많다. 

현실에서는 계약의 완성이 눈에 들어나는 가장 중요한 목표이기 때문에 저런 신경은 쓰지 않는 경우가 종종 발생하게 된다. 문제가 시작되는 것이다. 하지만 항상 현실적인 계약이야기가 나오면서 SW 실제 내부에는 개발자만 관심을 두고 심지어 PM도 PL도 일정 쫓기만 하는 상황이 발생하게 된다.

계약을 완수하는 것만이 진짜 중요할까? SW 내부 구조와 프로젝트의 진행과정은 정말 중요하지 않을까? 범용 SW를 개발하는 회사는 내부의 구조와 프로젝트 진행과정이 얼마나 양질의 SW를 만드는데 영향을 주는지 이미 체득을 했기 때문에 높은 수준의 SW를 만들기 위해서 소위 눈에 보이지 않은 투자를 한다. 왜냐하면 SW 수준이 낮으면 결국 문제가 되고 이는 회사 제품의 신뢰성과 연관되기 때문에 각별히 신경을 쓰지 않을 수 없다. 특히나 불특정 다수를 상대하는 수평시장을 목표로 하는데 문제가 발생할 경우 어떻게 고객과의 소통으로 문제 해결을 할 것인가? 수천억개의 라이선스가 이미 팔렸는데 발생한 버그의 조치는 어떻게 할 것인가? 고민하지 않을 수 없다.

커스텀 SW는 쓰는 고객이 계약 대상이 정하는 수에 한정될 가능성이 높기 때문에 사용자 수의 측면에서 불특정 다수가 되기보다 특정 소수가 되는 가능성이 높다. 그렇기 때문에 관리가능하다고 생각을 할 수도 있다. 여기서 신뢰성에 대한 느슨한 마음가짐을 쉽사리 가질 수 있다. 

정말 계약만 완수하면 될까?

사실 계약만 완수하면 모든 것이 끝난다고 생각하기 쉽지만 현실은 그렇게 돌아가지 않는다. 대부분의 커스텀 SW는 그 유지보수를 개약을 한 회사가 하게 되는 경우가 많다. 정부기관의 프로젝트의 경우도 행정이나 문서상으로는 다른 회사가 유지보수를 할 수 있고 입착을 붙인다. 하지만 실무담당자의 마음에서는 당연히 만들어보고 개발을 해보고 자신들과 대화를 하면서 문제를 풀어본 사람들이 유지관리를 해주는 것이 더 편하다고 생각을 할 수 밖에 없다.

대다수의 커스텀 SW는 만든 회사에서 유지관리를 한다. 즉, 자신들이 만든 SW의 생애주기에 자신들이 적극적인 참여를 하게 된다는 것이다. 그렇다면 실제 계약에서 끝날 것 처럼 다시는 안 볼 것 같은 SW 소스나 구조들이 다 나의 책임으로 다시 돌아오게 된다는 것이다.

커스텀 SW를 만드는 회사 중에 내가 만든 제품의 유지관리를 자신들이 수행할 것이고 하고 싶다고 생각하지 않고 개발에 뛰드는 업체가 얼마나 될까? 대부분의 회사는 자신들이 만들 SW의 유지관리에도 자신들이 수행하는 것을 대전제로 사업을 진행을 한다. 그렇다면 실제 현실에서 '작동만 하면돼' 는 눈가리고 아웅하기로 끝나는 시점이 오래 가지 않는 다는 것이다.

이후 유지관리를 하며 지속적으로 인력이 투입되며 시간을 잡아 먹는 다는 것이다. 그렇게 전체 과정을 놓고 보면 SW 개발을 할때 어떻게 기능하나만 달성하면 된다고 단정할 수 있을까?

더불어 고객사의 계약단위를 떠나서 비슷한 구조의 프로젝트를 개발하면 비슷하게 반복적인 구조와 코드와 대응이라는 패턴이 들어나게 된다. 세상의 모든 일은 비슷한 류를 해보면 패턴이라는게 들어나게 되어있다. 패턴을 따르면 일정수준의 내용이 완성이 되는 것이다. 실제 프로젝트의 세부적인 내용은 비지니스마다 다르겠지만 그 안에서 실제 코드나 구조적인 측면에서도 패턴이 들어나게 되어있다. 그렇다면 그 패턴은 그냥 따라주면 되는 것이다. 소스코드의 구조에서 따라줘야 되는 것은 라이브러리화 혹은 프레임워크화를 통해서 극복해 낼 수 있다.

이런 과정이 생산성의 극복과정이고 이윤추구를 하는 회사의 이윤극대화 과정이다. 하지만 이런 과정은 SW를 이해하고 좋은 개발환경과 문화를 만들어가야 점진적으로 굴러가기 시작하고 무르익는 결실을 볼 수 있다.

결국 커스텀 SW라도 SW적인 가치와 노력을 해야된다는 것이다. 하지만 현실에서는 이런 단계로 진행하기 보다 계약완수만이 목적이 되어서 굴러나는 커스텀 SW회사들이 많다. 조금씩 개선되어가고 발전하고 있지만 한번 굳은 생각은 쉽사리 바뀌지 않는다. 특히 나이를 먹을 수록 자신의 생각을 바꾸는 것은 힘들다. 하지만 조직은 나이를 먹은 사람들이 의사결정을 하는 위치에 많이 포진해 있기 때문에 쉽사리 바뀌지 않는 것일지도 모른다.

4. 그래서 SI 가야돼? 말아야돼?

그럼 결국 이런 결론에 도달하게 된다. 범용 SW든 커스텀 SW든 SW개발의 과정과 가치가 개선 등이 매우 중요하다. 하지만 양쪽에서 그런 가치가 지켜질 확률로서는 범용SW쪽이 높다는 것이다. 확률적으로 그렇다는 것이니 우리는 그 확률을 확인을 해야 한다.

입사하고자 하는 회사에 질문을 해야 한다. 회사도 나를 면접하지만 나도 회사를 면접한다 생각하고 질무을 해야 한다. 우선적으로 자신이 맡게 되는 직무와 환경에 대한 설명을 들어야 할 것이다. 그리고 두번째로는 이제 저런 가치를 어떻게 다루고 있는지 몇가지 리트머스 시험지 같은 질문을 해야된다.

이 회사는 이슈관리는 어떤 방식으로 하나요? 그런 툴을 사용합니까?
이 회사는 소스를 보관및 관리를 어떻게 하나요? 그런 툴을 사용합니까?
이 회사는 소스 리뷰는 어떻게 하나요? 그런 툴을 사용하나요?
이 회사는 CI/CD 어떻게 하나요? 그런 툴을 사용합니까?
이 회사는 테스트는 어떻게 하나요? 그런 툴을 사용합니까? 혹은 그런 일을 전담하는 조직이 있습니까?
이 회사는 프로젝트 회고 관리하고 공유하나요? 혹은 절차나 과정을 공식적으로 가지고 있습니까?
이 회사는 개발자에게 지급되는 컴퓨터의 수준은 어떤가요?
이 회사는 개발자에게 지급되는 개발툴의 지원은 어떤가요?
.
.
.
SW 개발 과정에 발생하는 많은 부분에 대해서 하나하나 질문을 해보는 것이 좋을 것이다. 그리고 거기에 걸맞는 툴을 사용하는지 같이 곁들여 질문해보면 좋을 것이다.

이런 질문을 통해서 SW 개발과정에 고민한 흔적들이 있고 그런 노하우가 축적되어 있는지를 확인하기 위한 과정이다. SW개발이 그냥 돌아가는 프로그램 하나 만드는 과정이라고 뭉쳐서 생각하는 회사가 아직도 많다. 최소한 저런 질문을 통하면 이 회사가 SW개발과정 전체에서 어떤 시각을 가지고 있는지 간접적으로 경험해 볼 수 있는 좋은 기회이다.

이 정도 질문만 해봐도 걸러야 될 회사는 들어 날 것이다.