« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : Next »

소프트웨어 개발방법론의 함정

소프트웨어 개발방법론의 함정

출처:http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=33801


체계화된 프로세스와 산출물들로 무장한 개발방법론은 회사에 필요한 이상적인 무기를 제공해줄 것 같지만, 개발방법론을 도입해 크게 효과를 본 회사를 찾기는 쉽지 않다. 개발방법론이 개발을 더 지연시키고 개발자들을 번거롭고 힘들게 한다고 하기도 하고 개발방법론을 도입해서 사용하다가 포기하고 다른 방법들을 기웃거리기도 한다. 왜 이렇게 성공적으로 개발방법론을 도입하는 것이 어렵고, 개발방법론을 효과적으로 소프트웨어 개발에 적용하기 위해서는 어떻게 해야 하는지 알아보자.

-------------------------------------------------------------

전규현 gracegyu@gmail.com|데스크톱, 네트워크, 시큐리티 등 다양한 소프트웨어 개발 분야에서 15년 이상의 경험을 쌓았다. 한글과컴퓨터, 안철수연구소 등에서 소프트웨어엔지니어 및 프로젝트관리자로 지냈다. 현재는 소프트웨어 경영/개발 컨설턴트로서 많은 소프트웨어 회사들에게 소프트웨어의 효율적인 개발 방법을 전파하고 있다. 직접 운영하고 있는 소프트웨어 공학 블로그(http://allofsoftware.net)를 통해 효과적이고 실전적인 소프트웨어 공학 경험을 블로거들에게 공유하고 있으며, 저서로 『소프트웨어 개발의 모든 것(페가수스, 2008)』이 있다.

독자들 중에서도 개발방법론들을 경험해 본 사람들이 꽤 있을 것이다. 실제로 개발방법론을 경험해 봤다면 그 개발방법론이 실제 소프트웨어를 개발하는 데 얼마나 도움이 되었는지 묻고 싶다. 즉, 이전에 나름대로의 방법으로 알아서 개발하던 때와 비교하면 얼마나 나아졌는지 묻고 싶다. 진짜 개발이 더 빨라지고 생산성이 높아졌는지? 아니면 개발은 오히려 느려졌고 과거보다 번거로울 뿐이지만 그래도 문서를 남겨야 나중에 정보 공유가 가능하니까 따르는 것인지 묻고 싶다.
필자는 소프트웨어 개발 컨설턴트로서 여러 개발자들이 이러한 질문에 답변하는 내용을 들을 기회가 많다. 그 중에 개발방법론은 고객이 요구하기 때문에 어쩔 수 없이 적용한 경우가 많았고, 실제로 개발하는 데는 필요도 없는 문서를 많이 만들어야 했으며, 그로 인해 개발에 더 많은 시간이 소요되었다는 얘기를 종종 듣게 된다. 하지만 회사에서 시키기 때문에 억지로 하곤 한다고 말한다. 시중에 개발방법론은 넘쳐나는데 왜 개발방법론을 적용해 큰 효과를 봤고 개발 생산성이 크게 향상되었던 경험을 접하기가 어려운 것일까?

개발방법론은 필요하다

회사가 작을 때는 소프트웨어를 개발하는 데 있어서 대부분 확실한 개발 체계 없이 시작한다. 대부분의 경우 이렇게 주먹구구식으로 또는 가내수공업 형태로 소프트웨어 개발을 시작해도 별 문제가 없다. 체계가 없다는 것은 소프트웨어를 개발하는 데 문서를 제대로 만들지도 않고, 정형화된 프로세스 없이 개발자들의 경험에 의해 주먹구구식의 절차를 통해 별도의 개발 시스템 없이 순전히 개발자들의 기억력과 약간의 기록만 가지고 개발하는 것을 의미한다. 그렇게 개발하더라도 대부분 큰 문제에 봉착하지 않는다. 대부분의 정보라는 것도 그리 방대하지도 않아서 개발자들의 머릿속에 잘 저장되어 있고, 시스템도 그리 복잡하지 않아서 몇몇 소수의 개발자들이 머리를 맞대고 개발해도 별 문제가 없다. 또 충성심 가득한 개발자들은 회사에 언제까지나 있을 것 같고, 문제가 발생하면 특공대처럼 문제를 빠르게 해결한다.

이러한 시기에는 오히려 주먹구구 방식이 훨씬 빠르고 비용이 적게 든다고 생각할 수 있다. 실제로 이런 개발 방법이 여타 개발방법론을 적용한 개발 방법보다 효율이 더 높은 경우도 있다. 소수의 개발자에게 너무 많은 부분을 의존하고 있는 이런 방식은 장점인 것처럼 보이지만, 사실은 대단히 큰 위협요소가 된다.

성장하는 회사는 조직이나 소프트웨어의 규모가 점점 커지고, 개발해야 하는 제품의 수와 개발자는 점점 늘어가고, 더 이상 주먹구구식으로는 개발이 어려워진다. 회사는 점점 성장하는데 여전히 주먹구구식으로 개발하고 있다면 개발 과정은 점점 혼란스러워지고 설상가상으로 대부분의 정보를 머릿속에 담고 있는 개발자가 퇴사를 하기도 한다.

개발방법론은 이렇게 소수의 개발자에 편중되어 있는 대부분의 리스크를 시스템적으로 커버할 수 있도록 한다. 문서도 만들어야 하고, 프로세스도 따라야 하기 때문에 당장에는 기존의 주먹구구식의 방식보다는 시간도 많이 들어가고 비용도 많이 들어가는 것처럼 보이지만, 그 대가로 리스크를 줄일 수 있다.

모험심이 가득한 벤처 회사라면 얼마든지 리스크를 감수할 수 있겠지만, 회사가 점점 커지면 리스크보다는 비용을 선택하게 되어 있다. 따라서 주먹구구식으로 시작한 소프트웨어 회사라도 규모가 커지면 자연스럽게 개발방법론에 눈을 돌리게 된다.

이렇게 개발방법론을 시도해보기 위해 개발방법론 도입을 도와주는 컨설팅회사에 의뢰를 하기도 하지만, 대부분은 인터넷이나 책을 통해 개발방법론을 배워보려고 시도한다.

개발방법론을 공짜로 배울 수 있을까?

개발자들은 인터넷에서 수많은 소스 코드 샘플을 보고 개발에 활용해 왔듯이, 개발방법론도 인터넷에서 특정 개발방법론의 템플릿과 샘플 그리고 프로세스를 가져와서 따라하면 개발방법론을 그럴싸하게 흉내 낼 수 있을 것으로 생각하기도 한다. 하지만 실제로 따라해보면 생각만큼 잘 되지 않는 것이 사실이다. 일단 기존에 주먹구구식으로 개발하던 개발자들은 개발방법론에서 제시하는 템플릿을 보게 되면 생전 처음 보는 내용도 많을 뿐더러 왜 그러한 것이 필요한지 진짜 의미를 이해하기 어렵고, 어떻게 작성해야 하는 것인지 파악이 잘 안 되는 것이 일반적이다. 그리고 이것이 정말로 자신의 회사에서 필요한 것인지 또는 필요 없는 것인지 판단이 안 되기도 한다.

그래서 일단 이것저것 시도를 해보고 효과가 신통치 않으면 나중에 “그거 해봤는데 별로더라”라는 자신만의 편협한 평가를 내리기도 한다. 이러한 서투른 시도는 개발방법론에 대한 나쁜 인식만 키워주기 때문에 아니 한 만 못하다.

여러 개발방법론에서 제시한 문서들이 작성하기 부담스럽다고 문서를 적게 작성해도 된다는 XP, 애자일(Agile) 등에 쉽게 눈을 돌리곤 하는데, 이 또한 너무 쉽게 접근해 실패하는 경우도 많다. XP 방법론이 모든 종류의 소프트웨어를 커버하는 것은 아니지만, 나름대로 적절하게 쓰이면 훌륭한 개발방법론인 것은 사실이다. 하지만, 왠지 간편해 보인다고 만만하게 접근하다간 큰 코 다칠 수 있다. 소프트웨어를 개발하는 데 있어서 가장 어려운 것 중에 하나가 무엇을 만드는지 결정하는 일이다. XP 방법론에서는 이러한 스펙 작성의 어려움을 덜고자 다른 접근을 하는데, 이것이 마치 스펙을 작성하지 않아도 되고, 문서를 적게 만들어도 되기 때문에 개발자들에게는 최고의 개발방법론인 것처럼 생각할 수도 있지만, 그리 만만한 것은 아니다. 스펙 대신 테스트를 이용하고 있지만, 이 또한 공짜로 되는 것은 아니다. 기존에 이미 분석 능력을 가지고 있고, 유닛 테스트(Unit test)에 능통한 경우라면 무리 없이 받아들일 수 있지만, 주먹구구 방식에 익숙한 경우라면 이 또한 어려운 도전이 될 수 있다.

즉, 그냥 쉽게 배우고 프로세스, 템플릿을 좀 익혀서 개발방법론을 제대로 적용해 보기는 어렵다. 공짜로 배워보기에는 개발방법론은 그리 만만하지 않다.

몸에 맞지 않은 개발방법론이 문제

그렇다고 컨설팅을 통해 개발방법론을 도입하는 경우도 그렇게 쉬운 것은 아니다. 여기에는 몇 가지 함정들이 도사리고 있다. 자칫하면 이론에 치우치기 쉽고 회사의 역량이나 규모에 걸맞지 않은 무거운 개발방법론을 도입하게 되기도 한다. 개발방법론을 도입하려는 회사는 어떤 개발방법론이 자신의 회사에 알맞은지 직접 판단하기 어려우므로 외부의 전문가의 판단에 의존하는데 외부의 전문가가 실전 경험이 부족한 경우 회사의 특징과 역량 수준을 고려하지 않고 거대 개발방법론을 기계적으로 도입할 수 있다. 이 경우 큰 Learning Curve를 겪게 되고 결국 이를 극복하지 못하고 실패할 가능성이 높다. 따라서 자신의 회사에 알맞은 수준의 개발방법론을 선택해야 하는데, 이렇게 몸에 딱 맞는 개발방법론을 선택하는 것도 쉬운 일은 아니다.

또, 개발방법론을 하나 정해 놓고 회사의 모든 프로젝트에서 그 개발방법론을 무조건 따르게 하는 것도 문제다. 모든 프로젝트는 그 성격이 다른데, 하나의 개발방법론을 무조건 따르게 되면 간단한 프로젝트에서도 과도한 비용을 지불해야 한다. 이는 개발방법론이 자칫 관료화되는 것을 조심해야 한다는 뜻이다. 애초에 개발방법론을 도입한 이유를 망각하고 관리자나 프로세스 부서에서는 무조건적인 강요로 효율성을 떨어뜨리는데, 애초에 개발방법론을 도입할 때 유연하게 적용을 할 수 있는 여지를 남겨 둬야 할 것이다.

방법론의 목적은 효과적인 개발

소프트웨어 개발방법론의 근본 목적은 소프트웨어를 빠른 시간 안에 적은 비용을 들여 요구되는 품질의 소프트웨어를 만들어내는 것이다. 이런 과정에서 개발자들이 혹사되어서는 안 되며 개발자들은 자연스럽게 소프트웨어 전문가로서의 능력이 향상되어야 한다. 즉 프로젝트도 성공하고 개발자에게도 도움이 되어야 진정한 방법론인 것이다. 그렇지 않고 단순히 절차를 지키기 위한 방법론, 개발자는 희생하면서 프로젝트만 어떻게든 성공하기 위한 방법론은 반쪽짜리일 뿐이다. 그럼에 불구하고 개발방법론은 왠지 무겁고 형식적이고 소프트웨어를 개발하는 데 진짜 도움은 되지 않는다는 생각들은 개발방법론 시도 실패에 대한 반작용으로 생겨난 경험담들 때문이다.

국내 현실은 도 아니면 모
국내 대부분의 소프트웨어 회사는 소프트웨어를 개발하는 방법에 있어서 아래 세 가지의 부류로 나눌 수 있다.

첫째, 주먹구구식으로 소프트웨어를 개발하는 회사. 특별한 프로세스 없이 개발자들의 경험에 의존해 자체적으로 약간의 문서를 만들면서 소프트웨어를 개발하고 있는 회사. 주로 작은 회사들이며 개발자가 100명 이상인 중견 기업들도 상당히 많은 회사들이 이 단계에 머물러 있다.

둘째, 거대 방법론을 도입해서 흉내 내는 회사. 이 경우도 상당수가 내부적으로는 주먹구구이나 형식적으로는 방법론을 따라하고 있다. 주로 대기업에 해당하며 이들 기업은 개발 효율성보다 리스크 감소에 더 관심이 많으며 개발자들보다 회사의 힘이 압도적으로 크므로 추진력 강하게 이러한 개발방법론을 도입할 수 있고, 이러한 무리한 도입 과정에서 벌어지는 비효율성은 개발자들이 요령껏 편법을 이용해 피해가는 경우가 많다. 즉, 내용보다는 형식에 치우친 경우라고 할 수 있다. 이 경우 리스크는 줄어드나 개발 효율성도 따라서 줄어들어 일정 수준 이상을 넘을 수가 없다.

셋째, 거대 방법론이 회사에 맞지 않음을 깨닫고, 다시 주먹구구 개발방법으로 되돌아 온 회사. 그러면서 다른 방법이 없을까 고민하고 있는 회사들이다. 이런 실패의 경험이 반복될수록 내부에 불신이 쌓여가므로 쉽게 새로운 시도를 못하고 주먹구구와 개발방법론 사이를 떠도는 경우이다.

물론 이 세 부류에 속하지 않은 회사들도 있다. 그런 회사들은 스스로를 잘 알고 있으므로 별도로 언급할 필요가 없을 것이다. 그리고 그런 회사는 그리 많지 않다. 첫째와 셋째는 ‘도’에 해당하고 둘째는 ‘모’에 해당하는 경우이다. ‘도’도 바람직하지 않고 ‘모’도 소프트웨어를 개발하는 데 비효율적이다. 가장 좋은 경우는 ‘개’나 ‘걸’처럼 회사의 규모와 개발자들의 역량이 같이 성장해 나가면서 그 단계에서 딱 필요한 것들을 차근차근 하나씩 도입해 나가면서 내재화시켜 나가는 것이다.

뭐든지 단계가 있는 법
뭐든지 배우려면 그 단계가 있고, 차근차근 배우고 익혀나가야 한다. 예를 들어서 골프를 배우고 싶다면 어떻게 될까? 소프트웨어를 취미로 개발하고 있는 것은 아니므로 골프로 프로 선수가 되는 것을 목표로 삼는 경우를 예로 들어보자.

골프를 처음 배워나가면서 타이거 우즈가 공을 치는 방법이 가장 완벽하다고 해서 그 방법을 그대로 따라하기란 불가능하다. 타이거 우즈가 그렇게 공을 치기까지는 십 수 년의 훈련이 필요했고, 타이거 우즈에 가장 알맞은 방법으로 진화해 온 것이다. 그런데 타이거 우즈가 그 방법으로 세계에서 가장 골프를 잘 치는 사람이 되었다고 그것을 그대로 흉내 내는 것은 어리석은 짓이다. 사실 그대로 흉내 내는 것 자체도 불가능하다. 타이거 우즈와 똑같이 치는 방법을 책을 쓰면 책 한 권은 넘을 것이다.

하지만 타이거 우즈는 그 방법을 일일이 생각하면서 공을 치지 않는다. 그 방법이 몸에 익었을 뿐이다. 그냥 공을 치면 저절로 되는 것이다. 이를 ‘내재화’가 되었다고 한다. 그 최고의 방법을 모델로 놓고 그대로 따라하고 훈련한다고 해서 그 방법을 익힐 수 있는 것은 아니다. 그러한 단계로 가기 위해서는 기초부터 배워나가는 방법이 따로 있을 것이다. 또 우리 몸에 맞는 모델은 타이거 우즈의 방법이 아닐 수도 있다. 그런데 최고의 방법이 타이거 우즈의 방법이라고 따라하는 것은 무리한 시도이며 대부분 포기하게 될 것이다.

진짜 프로골퍼를 목표로 하고 골프를 배우고 있다면 타이거 우즈가 골프를 치는 것을 그대로 따라하는 것이 좋은 방법이 아님을 누구나 알 수 있을 것이다. 재미로 마구 골프를 쳐보다가는 평생 프로선수가 되지 못할 것이다. 누구나 상식적으로 생각해도 아주 기초부터 차근차근 훈련을 받아나가야 한다는 것을 알 수 있을 것이다.

그런데 소프트웨어 세상에서는 이런 섣부른 시도들이 종종 발생한다. 개발자들의 역량은 아직 기초 수준인데 세계 최고의 방법론들을 도입해서 시도하면 개발자들도 저절로 세계 최고의 역량을 갖출 수 있을 것으로 착각하는 것 같다.

개발방법론이 가르쳐주지 않는 것
개발방법론은 소프트웨어 회사라면 당연히 갖추고 있어야 하는 것은 가르쳐주지 않는다. 즉, 소스 코드를 어떻게 관리하고, 버그는 어떻게 추적할 것이며, 빌드/릴리즈는 어떻게 할지는 크게 상관하지 않는다.

하지만, 이러한 것들이 아직 체계적으로 갖춰지지 않는 회사가 개발방법론을 도입한다고 하면 따라가기만 하는 것도 벅차고 성공적으로 내재화되기는 어려울 것이다. 축구팀이 기초 체력은 갖추지도 못하고 기본적인 드리블이나 슛 실력이 부족한 상태에서, 다양한 전술과 전략을 익혀봤자 말짱 허사일 것이다. 여기서 말하는 기초 역량은 개발자에게 있어서 설계, 코딩 능력을 말하는 것은 아니다. 우리나라 개발자들의 코딩 능력은 전 세계 어디 내놔도 손색이 없을 만큼 뛰어나다. 여기서 말하는 기초 역량은 소프트웨어 회사라만 기본적으로 갖춰야 할 요소들과 설계, 코딩을 제외한 소프트웨어 전문영역의 다양한 지식들을 말한다. 이러한 것들은 워낙 당연한 것들이기 때문에 개발방법론을 만든 사람들은 소프트웨어 회사라만 당연히 보유하고 있어야 하는 것으로 생각한다.

방법론에서는 그러한 것들은 너무나 당연한 것이라 어떤 방법을 사용하든 별 개의치 않는 경우가 많기 때문에, 그러한 기초조차 제대로 갖추고 있지 않은 소프트웨어 회사라면 현재의 수준을 자각하지 못하고 자칫 그럴듯하게 포장된 방법론만 눈에 들어올지도 모른다. 이런 경우 방법론은 공염불이 되기 십상이다. 방법론을 고민하기보다는 기초부터 다져야 하는 경우이다.

개발자들의 역량

기초란 회사에만 적용되는 것은 아니다. 개발자들도 개발방법론을 따라 개발하기 위해서는 필요한 역량이 있다. 가장 먼저 방법론 하면 산출물이 떠오르는데 대부분의 개발자들은 문서를 작성하는 데 익숙하지도 않고 그보다 먼저 문서 작성을 싫어한다. 이러한 상황에서 템플릿만 잔뜩 제공하고 이를 만들어내라고 하면 보통 괴로운 일이 아니다.

그럼 이쯤에서 의문이 생긴다. 과연 개발자가 문서를 잘 작성한다는 것은 무엇을 말하는 것인가? 개발자들 스스로도 본인이 문서를 잘 작성하고 또 잘 작성할 능력이 있는지 알지 못하는 경우도 많다. 개발자들의 문서 작성 능력을 한번에 알아내기는 어렵지만, 아래와 같은 질문을 해보고 싶다.

소프트웨어를 개발하면서 문서를 만드는 이유가 무엇이라고 생각하는가?

1. 고객이 원해서
2. 나중에 유지보수를 위해서
3. 개발 시간과 비용을 단축하려고

이 중에서 1이나 2라고 답하는 사람들은 아직 문서를 제대로 작성할 능력이 낮을 가능성이 높다. 그 동안 문서를 형식적으로 작성해 왔거나, 문서 작성을 거의 하지 않고 개발을 해오면서 문서는 거추장스러운 것이라고 생각하고 있는 경우가 많을 것이다. 이런 상태라면 개발방법론은 정말 거추장스러운 방해밖에 될 수 없다. 3번이라고 자신 있게 답할 수 있는 사람들은 개발하면서 문서들도 진정 필요한 시점에서 필요한 내용으로 작성했을 것이고, 그렇게 오랜 시간 훈련이 되어 필요한 문서 작성에 능숙할 것이다. 하지만 이렇게 3번이라고 자신 있게 답할 수 있는 개발자들이 많지 않은 것이 현실이다.

방법론에서 만들어내는 수많은 문서들은 문서 자체가 목적이 아니다. 모든 문서들은 다음 작업을 진행하는 데 필요하기 때문에 만드는 것이다. 따라서 다른 개발자들이 내가 만들어 놓은 문서들을 보고 그 다음 작업을 진행할 수 있어야 한다. 즉, 내가 작성한 스펙문서를 보고 설계를 담당한 개발자는 설계를 할 수 있어야 한다. 또 테스트팀은 테스트 계획과 테스트 케이스를 만들어낼 수 있어야 한다. 그리고 기술문서팀(Techpub)에서는 스펙문서만 보고도 매뉴얼을 작성할 수 있어야 한다. 또한 빌드/릴리즈팀에서는 빌드 준비를 할 수 있어야 한다. 하지만, 분석 역량이 부족한 개발자에게 템플릿만 제공해 스펙문서를 만들어 낸들 제대로 설계가 가능하고 테스트 케이스를 만들어 낼 수 없다.

그리고 방법론을 도입하고 약간의 교육으로 그런 수준까지 역량을 끌어올리기는 어렵다. 오히려 거대한 방법은 역량을 차근차근 끌어올리기에는 거추장스러운 옷처럼 방해 요소가 될 수 있다. 차라리 방법론 전체보다는 각 회사에 필요한 기초적인 부분을 추출해 조금씩 적용하는 것이 좋을 것이다. 그러한 과정을 거치면서 개발자들의 역량도 같이 키워나가야 한다. 여기서 필요한 것은 분석, 설계, 프로세스, 형상관리, 테스트 등 개발에 필요한 다양한 것들이다. 이러한 지식과 경험은 하루 아침에 배운다고 익힐 수 있는 것이 아니고, 회사에서 일하면서 조금씩 쌓아 나가는 것들이다. 또한 개발자 혼자서 스스로 익힐 수 있는 것도 아니고, 회사와 같이 개발 업무를 해나가면서 계속 배우고 익혀나가야 하는 것들이다.

잘못 사용되는 개발방법론

개발방법론을 사용하는 이유가 고객이 해당 개발방법론을 적용하기를 원해서인 경우가 종종 있다. 이러한 경우 고객들도 목적이 개발방법론은 아니지만, 소프트웨어 개발에 대한 전문지식이 모자라므로 회사의 규정에 의해서든 여러 연유로 인해 개발방법론 적용을 요구하게 된다. 이 과정에서 개발방법론을 효과적으로 추려내서 적용하지 못하고 전체를 그대로 적용해 달라고 요청하는 일이 발생한다.

고객은 개발방법론 교과서에 나온 대로 기계적으로 산출물과 프로세스를 요구하고 소프트웨어 개발사는 비효율적인 것을 알아도 고객이 원하므로 울며 겨자 먹기 식으로 무조건 따라야 하는 경우가 많다. 하지만 우리나라 개발자들이 어떤 개발자인가. 모든 난관은 헤쳐 나가는 방법이 있다. 방법론에서 요구하는 문서는 어쨌든 만들어내고 있다. 다양한 편법을 통해 문서를 만들어 내고 있고, 대부분의 경우 문서들이 실제 소프트웨어를 개발하는 데 도움이 되지 않더라도 고객이 요구하는 문서는 충족하고 있다. 이렇다 보니 문서 작업은 소프트웨어를 개발하는 데 도움이 되기는커녕 시간만 축내는 낭비요소가 되곤 한다. 하지만 고객의 요구사항이기 때문에 따르는 수밖에 없다.

그 결과, 이렇게 만들어 낸 산출물은 고객에게도 실제로는 아무런 쓸모없이 책꽂이만 차지하는 경우가 허다하고 개발자들은 방법론에 대한 부정적인 생각만 키워나가게 된다. 이렇게 잔뜩 만들어낸 산출물은 유지보수 시 매우 유용하게 사용될 것으로 홍보하지만, 막상 유지보수 때는 개발에 참여했던 개발자를 찾게 되고 문서보다도 소스 코드를 가지고 유지보수를 하게 된다. 이런 것들이 반복되면 개발자들은 개발방법론이란 형식적이고 실제 소프트웨어를 개발하는 데는 별 도움이 안 된다고 생각하게 되고 진짜 제대로 된 방법을 더욱 더 배우기 어렵게 만든다.

고객의 무리한 개발방법론 적용 요구

개발 회사는 아무리 개발방법론을 효과적으로 적용하려고 해도 이렇게 고객이 기계적으로 또는 규정에 의해 무리하게 개발방법론을 요구하는 경우에는 어쩔 도리가 없다. 실제로 고객이 개발방법론을 콕 찍어서 **CBD 또는**OOP 방법론을 요구하기도 하는데, 고객을 잘못 만나면 30~40종류 이상의 산출물을 에누리 없이 만들어 내야 하는 경우도 있다. 또 마일스톤마다 산출물을 검사하기도 하기 때문에 프로젝트가 끝나고 밤샘해서 산출물을 만들어 낼 수도 없는 노릇이다.
이러한 경우에는 진짜로 소프트웨어를 잘 개발하기 위해 필요한 문서와 고객의 요구 때문에 어쩔 수 없이 만들어야 하는 문서를 구별할 필요가 있다. 사실 웬만한 규모의 소프트웨어까지는 주요 문서 2, 3개로 충분히 프로젝트를 진행할 수 있고, 그 외의 문서들은 가능하면 최소한의 노력으로 고객의 요구를 만족시켜주는 수준으로만 만들어주는 것이 가장 효율적일 것이다.

이러한 상황에서 진짜 개발에 필요한 문서와 고객의 요구 때문에 어쩔 수 없이 만드는 문서의 구별이 없다면 자칫 모든 문서가 형식적으로 작성될 수도 있다. 이 과정에서 개발자들은 모든 문서에 대한 거부감만 커지고, 방법론을 제대로 적용한 것 같지만 실제 개발은 주먹구구와 다름없게 될 수도 있다. 아니 오히려 주먹구구에다가 문서를 잔뜩 만들어야 하므로 주먹구구만도 못한 경우가 될 수도 있다.

방법이 목적인 개발방법론
이쯤 되면 개발방법론이 진짜 필요한 것인지 오히려 개발을 방해하는 것인지 헷갈리기도 한다. 하지만 서두에서 말했다시피 개발방법론의 목적은 소프트웨어를 적은 비용으로 짧은 시간에 효과적으로 개발하는 데 있다. 하지만 개발방법론을 만든 사람들의 진짜 목적은 돈을 버는 것이다. 방법론을 팔아서 돈을 버는 회사들은 자신들의 개발방법론을 비싸게 많이 팔아야 한다. 그리고 누구나 쉽게 흉내 낼 수 없게 만들어야 한다.

그래서 자신들의 개발방법론을 다른 방법론들과 차별화하기 위해 노력하고 점점 복잡하게 만들게 된다. 그래야 아무나 따라할 수 없게 되고 또 더욱 비싼 값에 팔 수 있다. 이러다 보니 소프트웨어 업계에는 소프트웨어를 개발하는 수많은 개발방법론들이 넘쳐나고 점점 복잡해지고 있다. 그 반작용으로 간단하다고 어필하고 있는 개발방법론이 출현하기도 한다.

이렇게 되니 대부분의 개발방법론 자체가 잘못된 것은 아닐지라도 우리 회사에 알맞은 개발방법론을 찾기란 쉬운 일이 아니게 돼 버렸다. 오히려 잘못된 함정에 빠지기 쉬운 상황이 된 셈이다.

특히 이전에 어느 정도 경험과 기초가 되어 있는 회사들은 개발방법론을 바라볼 때 어느 정도의 판단 능력을 가지고 자신의 회사에 필요한지 그렇지 않은지 판단할 수 있겠지만, 주먹구구에서 시작한 대부분의 소프트웨어 회사들은 그저 혼란스럽기만 할 것이다.



어떻게 해야 하나?

필자의 경험에 의하면 국내의 많은 소프트웨어 회사들은 거대 개발방법론을 당장 도입하기에는 아직 적당한 상황이 아니다. 개발방법론을 거론하기 이전에 소프트웨어 회사라면 필수적으로 갖춰야 할 조직과 시스템을 먼저 갖추고 회사에 필수적인 프로세스를 만들어가면서 회사와 개발자 모두 필수 역량을 갖출 때쯤 그리고 회사가 좀 더 크고 복잡해지면 방법론을 생각해보는 것이 좋겠다.

또, ‘자전거’를 만드는 회사에서 ‘우주선’을 만드는 방법론을 사용해서는 안 된다. ‘자전거’ 정도의 소프트웨어를 만드는 수많은 국내 소프트웨어 회사들은 거대 개발방법론이 필요하지 않다. 고객이 요구해서 방법론을 꼭 적용해야 하는 경우가 아니고 자체적으로 소프트웨어를 잘 개발하는 것이 목적이라면, 회사에 알맞은 작고 가벼운 개발방법론이면 충분할 것이다.

럼 소프트웨어 회사가 갖춰야 할 필수 역량에는 무엇이 있는가? 가장 먼저 소스 코드 관리시스템, 버그 관리시스템, 빌드 자동화 등 기본적인 인프라스트럭처 시스템들은 갖춰야 한다. 물론 이것이 그렇게 쉬운 것은 아니다. 실제로 이들을 사용하는 많은 회사들이 기본적인 기능만 사용하고 있음에도, 전혀 이런 시스템들의 도움을 받지 않고 소프트웨어를 개발하고 있는 회사들보다는 훨씬 나은 형편이다. 이런 시스템들을 사용해 개발하다 보면 자연스레 그러한 시스템들에 묻어 있는 소프트웨어 개발 철학을 익히게 되고 기본적인 개발 프로세스도 배울 수 있게 된다.

또, 조직적인 측면으로는 소프트웨어 개발에 필수적인 전문 조직이 기본적으로 필요하다. 대부분의 소프트웨어 회사는 처음 시작하게 되면 개발자들이 전문성을 가리지 않고 온갖 일들을 다하게 된다. 개발도 하고 테스트도 하고 고객지원도 하고, 심지어는 영업을 하기도 한다. 하지만 회사의 규모가 커져 가는데 소수의 개발자들이 개발하던 방식과 똑같이 개발하고 있다면 효율성은 점점 떨어져 간다. 이럴 때는 꼭 필요한 부분부터 전문화된 팀으로 구분하고 전담자를 둬서 해당 분야의 전문성을 높이고 개발자는 개발에 집중할 수 있도록 해줘야 한다. 이러한 대표적인 분야는 테스트와 빌드/릴리즈다. 아직도 테스트를 전적으로 개발자들이 담당하고 있는 회사들이 많다. 개발자 10명만 있는 조직보다는 개발자 7명과 테스터 3명이 있는 조직이 더 효율적인 경우가 많다. 개발자들은 자신이 개발한 소프트웨어를 잘 테스트하지도 못하는데, 해당 소프트웨어의 스펙을 상세히 아는 사람이 개발자 밖에 없고 별도의 테스터를 뽑아도 개발자만큼 제품을 알아서 테스트하기 어렵다고 개발자에게 테스트를 계속 맡기는 것은 잘 하지도 못하는 일을 비싼 인건비를 주고 계속 맡기는 것과 같다.

테스트를 별도의 조직에 맡기는 것이 제품의 품질을 더 높여주고 비용 효율적이며 개발자는 개발에 더 집중할 수 있게 한다. 또 이와 더불어 빌드/릴리즈팀은 빌드/릴리즈 과정을 자동화하고 효율을 높임으로써 그 동안 보이지 않지만 많은 비용을 차지하던 것을 절약하면서도 개발을 더 원활하게 진행하도록 지원한다.
이런 회사의 기본 역량 확보와 더불어 개발자들은 문서를 작성하는 능력, 리뷰하는 능력, 분석 능력, 설계 능력 등 개발자들이 갖춰야 할 코딩 능력 외의 필수 능력들을 쌓아 나가야 한다. 이들은 학교에서 배울 수도 없고, 실무를 통해 오랜 시간에 걸쳐서 차근차근 쌓아 나가야 하는 것들이다.

이렇게 기본적인 조직, 프로세스, 시스템을 갖춰나가면 소프트웨어 회사가 내적으로나 외적으로 기본적인 역량을 갖추게 된다. 이쯤 되면 어떤 개발방법론을 접하더라도 이전보다는 조금 더 잘 이해할 수 있게 된다. <그림 1>과 같이 개발방법론을 성공적으로 도입하기 위해서는 소프트웨어 회사와 개발자들이 기초 역량을 갖추고 있어야 한다. 회사가 어느 정도 역량을 갖추고 판단력이 생기면 무작정 좋다고 하는 개발방법론을 도입하기보다는 회사의 수준에 알맞은 방법들을 취사선택해서 조금씩 받아들이는 방법을 택하게 될 것이다.

결국 개발방법론의 목적인 소프트웨어를 빠른 시간 내에 적은 비용으로 효율적으로 개발한다는 것에 좀 더 가까워질 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/10/06 18:04 2009/10/06 18:04
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4687

출처 : http://blog.naver.com/checkmate12/10068410716

프로젝트메니지먼트로 계획을 세울 때에 이용되는 수법의 하나로, 프로젝트 전체를 작은 작업 단위로 분할한 구성도이다. [작업분할구성], [작업분해도] 라고 불려진다.

WBS에서는 우선 프로젝트의 성과물을 가능한 한 작은 단위로 분해한다. 그 때, 전체를 큰 단위로 분할하고 난 후, 각각의 부분에 대해 좀 더 작은 단위로 분해하여, 계층적으로 구성화 해 나간다.

성과물의 세분화가 끝나면, 각각의 부분을 구성하는데 필요한 작업(한가지 이상의 작업일 때도 있음)을 생각하여, 최하층에 배치해 간다. 각각의 부분을 구성하는 일련의 작업 단위를 [워크 패키지]라고 한다. WBS의 각각의 워크패키지에 담당인원을 배치하면 프로젝트를 수행하는 조직도가 생성된다. 이것을 OBS(Organization Breakdown Structure)라 한다.



Work Breakdown Structure(이하 WBS)는 프로젝트가 수행해야 하는 업무범위를 계층적 구조로 정의한 문서이다. WBS가 정의되어야 원가, 일정 등 다른 요소들도 정의할 수 있다. PM이 책임을 지고 만들어야 하지만 프로젝트 규모가 큰 경우 모든 업무범위를 PM 혼자서 계획하기란 쉽지 않은 일이다. 이 경우 프로젝트가 완성해야 하는 제품을 시스템과 같은 주요한 단위로 분할하여 각 시스템을 담당하는 PL들에 의해 작성하게 하면 좀 더 효과적으로 WBS를 정의할 수 있다.



PMBOK은 WBS를 산출물 중심의 그룹핑(Deliverable-oriented grouping)으로 정의하고 있다.

산출물 중심의 그룹핑이란 것은 프로젝트에서 고객에게 전달해야 하는 제품이나 서비스를 산출물 단위로 분할 하여 계층적 구조로 정의하라는 것이다. 프로젝트에서 고객에게 전달해야 하는 모든 산출물이 WBS에 포함되어 있으므로 WBS 에 명시되지 않는 산출물은 계약범위를 벗어난 것이 된다. 프로젝트 수행 도중 고객이 추가적인 기능이나 업무를 요청하는 Scope Creep 의 경우 WBS를 확인하여 요청사항이 계약범위 내에 있는지 판단할 수 있다.

프로젝트의 모든 업무범위가 WBS에 포함되기 위해서는 프로젝트에서 수행하는 모든 작업들이 WBS에 나타나야 한다. 많은 프로젝트에서 형상관리, 프로젝트 관리, 사업관리 등 개발과 직접적으로 연관이 없는 작업들을 WBS에 정의하지 않는 경우를 볼 수 있다.

위의 소프트웨어 개발 프로젝트의 WBS를 보면 개발 프로세스 외에 Project Management 라는 카테고리가 따로 존재함을 볼 수 있다. WBS 작성 당시 이러한 관리업무를 고려하지 않는다면 실제로는 수행해야 함에도 불구하고 WBS에는 나타나지 않아 계획 보다 일정이 늦어지고 비용이 늘어나게 된다.





크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/09/30 13:03 2009/09/30 13:03
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4678

IT 노동조합 - it.nodong.net

http://it.nodong.net/

SW신고제 때문에 찾아보다 보니 IT노조가 있더군요.
이걸 이제야 알았다니...

참고합시다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/09/29 10:58 2009/09/29 10:58
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4675

Google'Analytics - (2009.7.14~9.09)











크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/09/09 11:35 2009/09/09 11:35
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4612

PL/SQL
피엘에스큐엘(PL/SQL)은 상용 관계형 데이터베이스 시스템인 오라클 DBMS에서 SQL언어를 확장하기 위해 사용하는 컴퓨터용 프로그래밍 언어 중 하나이다.

주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하는 데 쓰인다. 범용 언어인 C와 C++ 그리고 파스칼 및 포트란 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 오라클의 관계형 데이터베이스(RDBMS)에서만 사용된다는 점이다.


TPS
거래 처리 시스템(Transaction Processing System, 줄여서 TPS)

자재 구입, 상품 판매, 영수증 발행, 급여 지급, 온라인 입·출금, 신용도 관리, 상품의 주문·발송 등 거래와 관련된 데이터가 발생할 때 마다 단말기에서 발신된 데이터를 수신·처리하여 그 결과를 즉시 보내 주는 시스템이다.

OLTP
OLTP [online transaction processing]

온라인 업무의 처리 형태의 하나이다. 터미널에서 받은 메시지를 따라 호스트가 처리를 하고, 그 결과를 다시 터미널에 되돌려주는 방법을 말한다.

네트워크상의 여러 이용자가 실시간으로 데이터베이스의 데이터를 갱신하거나 조회하는 등의 단위 작업을 처리하는 방식을 말한다. 주로 신용카드 조회 업무나 자동 현금 지급 등 금융 전산 관련 부문에서 많이 발생하기 때문에 ‘온라인 거래처리’라고도 한다. 이 방식의 특징은 기존 컴퓨터 통신에서 이용해 온 온라인 방식과 달리 다수의 이용자가 거의 동시에 이용할 수 있도록 송수신 자료를 트랜잭션(데이터 파일의 내용에 영향을 미치는 거래 ·입출고 ·저장 등의 단위 행위) 단위로 압축, 비어 있는 공간을 다른 사용자들이 함께 쓸 수 있도록 한 점이다.

PARTITION PRUNING

Partition Pruning은 파티션 Table에 쿼리를 수행할 경우 Oracle Optimizer는 TABLE 정의에서 Partition에 대한 정보를 읽어와 WHERE 조건의 Partition Key를 보고 필요없는 Partition을 읽지 않고 필요한 파티션만을 읽는 기능을 말한다. 따라서 WHERE 조건에 만족하는 Partition만 Scan 하기 때문에 자원과 시간을 절약할 수 있다.

- Range or List partitioned tables의 경우는 WHERE 조건이 range , = , LIKE , IN 이어야 한다.
- Hash partitioned table의 경우는 WHERE 조건이 IN 이거나 = 경우만 partiton pruning이 실행된다.

- WHERE 조건의 partiton key 가 함수의 적용을 받을 때는 prunnig이 수행되지 않으나 단지 TO_DATE는 예외적으로 가능하다.

CIF
고객 정보 파일(customer information file) : 은행이나 백화점 등에서 고객 관리를 위한 각종 거래 정보가 수록되어 있는 파일

CRM (customer relationship management) ; 고객 관계 관리

CRM[씨알엠]은 기업이 잘 정리된 방법으로 고객관계를 관리해 나가기 위해 필요한 방법론이나 소프트웨어 등을 지칭하는 정보산업계 용어로서, 대개 인터넷 서비스 기능을 가지고 있다. 예를 들면, 기업은 관리계층이나 판매사원들이 서비스를 제공하기 위하여, 자기 고객들에 대한 관계를 설명해줄 수 있을만치 충분히 자세한 데이터베이스를 구축할 수 있을 것이며, 심지어 고객이 요구하는 제품계획과 매출을 부합시키고, 고객의 서비스 요구를 상기시키며, 그 고객이 다른 어떤 제품을 함께 구입했었는지 등을 알기 위해, 고객들이 그 정보에 직접 액세스할 수 있도록 할수도 있을 것이다. 산업계의 일각에 의하면, CRM은 다음과 같은 것들로 구성된다고 한다.

* 기업의 마케팅 부서에서, 자신들의 최고 고객을 식별해내고, 명확한 목표를 가지고 그들을 겨냥한 마케팅 캠페인을 추진할 수 있게 하며, 판매팀을 이끌기 위한 품질을 만들어내는데 도움을 준다.

* 다수의 직원들이 최적화된 정보를 공유하고, 기존의 처리절차를 간소화(예를 들어 무선 단말기를 사용하여 주문을 받는 등)함으로써, 통신판매, 회계 및 판매관리 등을 개선하기 위한 조직을 지원한다

* 고객만족과 이익의 극대화를 꾀하고, 회사에 가장 도움이 되는 고객들을 식별해내며, 그들에게 최상의 서비스를 제공하는 등, 고객들마다 선별적인 관계의 형성을 허용한다.

* 고객에 관해 알아야하고, 고객들의 요구가 무엇인지를 이해하고, 회사와 고객기반 그리고 배송 파트너들과의 관계를 효과적으로 구축하기 위해 꼭 필요한 정보와 처리절차를 직원들에게 제공한다.

ETL - Extract/Transform/Load

기업의 기간 시스템 등에 축적 된 데이터를 추출(extract)하여, 데이터웨어 하우스 등에서 이용하기 쉬운 형태로 가공(transform)하고, 대상이 되는 데이터베이스에 쓰는(load)것을 말한다. 또한, 이들 일련의 처리를 지원하는 소프트웨어이다.

데이터웨어 하우스를 구축하고, 분석을 하기 위해서는 업무 시스템에서 발생한 데이터를 데이터베이스에 수납할 필요가 있다. 종래에는 이 작업은 전용 프로그램을 개발하여야 했기 때문에, ETL작업이 전체 작업의 반절 이상을 차지하기도 했다.

최근에는 ETL툴의 등장에 따라 단기간에 간편히 ETL시스템을 구축할 수 있게 되었다. ETL툴에는 GUI를 사용하여 데이터의 흐름을 가시화하여 구축하는 툴이나, 데이터 형식의 변환기능, 부정 데이터를 배제 한 일정 형식으로 데이터를 수정하는 데이터 클렌징 기능 등이 탑재되어 있다.


.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/09/08 10:53 2009/09/08 10:53
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4606

http://www.textyle.kr/





크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/07/30 09:40 2009/07/30 09:40
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4495

[칼럼]보이는 UI, 보이지 않는 UX

얼마 전 국내 IT기업들이 사상 최대의 흑자라는 실적 발표가 나왔다. IT기업들의 제품들은 반도체, 휴대폰 등 정보통신 기기들이다. 우리나라는 눈에 보이는 기계는 세계적으로도 손색이 없을 만큼 잘 만든다. 하지만 그 기계들 안에서 작동하는 눈에 보이지 않는 SW는 세계적인 것으로 꼽을 만한 것이 별로 없다.



세계적인 게임기 닌텐도의 성공이 SW보다는 HW만 잘 만들면 된다고 믿는 사람들이 많다는 것이 씁쓸함을 더한다. 뿐만 아니라 애플 아이폰의 경쟁력을 오만가지의 SW의 다양성으로 비교하지 않고 하드웨어 스펙만으로 비교하는 것을 보면 우리나라 기업은 눈에 보이지 않는 가치보다는 눈에 보이는 것만 바라보는 수준에 머무른 기업들이 많다.



■ 보이는 UI 보이지 않는 UX

SW처럼 눈에 보이는 HW에 가려서 보이지 않는 것이 있다면 UI에 가려진 UX라고 할 수 있다. 그래서 UX를 다루는 사람들이 가장 경계해야 하는 것은 눈에 보이는 것만 디자인하려고 하고 인정하려는 자세다. 제목에 이미 나타나 있듯이 UI는 눈에 보이는 실체이지만 UX는 눈에 보이지 않는 것이기 때문이다. 다만 UX는 UI 디자인이라는 것으로 실체화되어 일부가 눈에 보일 뿐이다. UX의 실체가 무엇이길래 눈에 보이지 않는단 말인가?



■ 러브액츄얼리식 프로포즈가 먹혔던 이유

필자의 예전 컬럼에서 ‘UX는 러브액츄얼리식 프로포즈’라고 했다. 영화에서 그러한 프로포즈가 먹힌 이유가 무엇일까? 그 남자가 잘생겨서? 돈이 많아서? 아니면 스케치북 그림을 잘 그려서? 핵심은 프로포즈하는 ‘과정’에 있다.



진실한 자세로 그 여자의 마음에 한발한발 다가간 것이 그녀의 마음의 문을 열리게 한 것이다. UX는 프로포즈와 같은 과정이다. 스케치북과 같은 아이템은 UX를 실체화하는 과정에서 사용한 디자인적 도구일 뿐이다.



■ UX의 대상

UI는 보이는 것을 디자인하지만 UX는 보이지 않는 것도 디자인한다. UX는 어쩌면 보이지 않는 부분이 빙산처럼 더 클 수도 있다. 그래서 UX의 대상은 대체로 다음과 같이 정리해볼 수 있다.



1) Interaction: 사용자와 시스템 간의 상호 작용



2) Communication: 사용자와 시스템간의 소통 경로



3) Process: 작업 절차



4) Response: 사용자 조작에 대한 시스템의 메시지, 경고, 알림



5) Method : 인터페이스에 대한 사용 방법
- 출처: 2009.7, 제2회 한국SW아키텍트대회, UX의 X인터넷 적용 발표 中, 옥상훈



따라서 그러한 보이지 않는 것들로부터 것들을 UX를 실체화하기 위해서는 사용자의 행동을 많이 관찰해야 하고 여기서 최적화된 패턴을 도출해내는 작업이 필요하다.



예를 들면 수도꼭지 하나라도 물을 나오게 하는 방법, 물의 양을 조절하는 절차, 물의 온도에 따른 적절한 경고 메시지 등의 다양한 고려사항들이 존재한다. 이러한 것들이 수도꼭지와 관련된 UX의 인터렉션, 커뮤니케이션, 프로세스, 리스판스, 메쏘드에 해당한다.



■ 올바른 과정에서 올바른 결과가 나온다

‘방망이 깎는 노인’에서 보았듯이 충분한 시간을 두고 올바른 과정을 거쳐야 제대로 쓸만한 방망이가 나온다. 설렁탕 국물도 10분 동안 전자레인지에 데워 나온 것과 10시간 넘게 푹 끓여서 나온 국물 맛은 말할 것도 없다.



어떤 일이든 과정을 무시하면 그 무시한 것들이 어떻게든 잘못된 결과로 나타나게 되어있다. 급하다고 해서 과정을 무시하고 결과가 중요하다고 해서 과정은 아무렇게나 해도 된다는 생각을 가진 사람에게는 UX는 보이지 않는 허상일 뿐이다.



■ UX는 식스센스

영어 속담 중에 ‘Seeing is Believing’이란 말이 있다. 하지만 UX에서는 이러한 속담은 다음과 같이 고쳐야 맞을 것 같다. ‘Seeing invisible is creative’ 즉 보이지 않는 것을 보는 것은 창조적인 것이다. 영화 식스센스처럼 세상은 보이지 않는 곳에서 보이지 않는 것들간의 인터렉션으로 만들어지는 현상들이 얼마든지 있다.



UX도 단순히 눈에 보이는 아름다운 디자인이라고 간주하는 사람들에게는 시각적인 것에 즐거움에 불과하지만 보이지 않는 인터렉션을 발견하려고 하면 UX를 보는 새로운 식스센스가 움트기 시작할 것이다. 그리고 이 식스센스는 비즈니스적 가치를 발굴해내는 탐지기로 작용할 것이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/07/29 14:04 2009/07/29 14:04
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4491

[칼럼]SaaS, 대세론이 되기위한 조건
박재현 IT칼럼니스트 jaehyunpark.kr@gmail.com
2009.07.15 / PM 02:57SaaS, 클라우드 컴퓨팅

[지디넷코리아]SaaS(Software As A Service)는 오프라인을 통해 라이선스 단위로 거래되던 기존 소프트웨어 비즈니스 모델과 달리 온라인을 통해 소프트웨어를 이용하고 사용한 만큼 비용을 지불(Pay as you go)하는 모델이다.



이용자들 입장에서 SaaS는 인트라넷과 IT 시스템을 구축하는데 따른 위험을 줄일 수 있다. 관리 걱정 없이 언제 어디서나 해당 서비스에 접속하여 업무를 수행할 수도 있다. 딴데 신경쓰지 않고 핵심 사업과 업무에 만 집중하면 되는 것이다. 초기 투자 비용을 줄일 수 있으며 사용한 만큼 지불하면 되기 때문에 투자 대비 효과(ROI, Return Of Investment)가 높다는 것도 SaaS의 장점이다.

고객 입장 뿐만 아니라 업체 입장에서도 SaaS는 매력적이다. SaaS 업체는 안정적으로 예측가능한 고정 수익을 확보할 수 있을 뿐만 아니라 항상 고객과 함께 하기 때문에 적기에 시장에서 원하는 서비스나 기능을 추가할 수 있다. 개발과 지원, 판매와 마케팅 비용도 기존 소프트웨어 비즈니스 모델에 비해 저렴하다.



하드웨어 성능 증가와 가격 하락, 네트워크의 급속한 보급 등에 따른 클라우드 컴퓨팅 기술의 발전은 지금껏 SaaS의 미래를 장밋빛으로 예측하는데 부족함이 없었다. 실제 2003년 가장 최초로 SaaS라는 용어를 사용했던 가트너를 비롯해 여러 시장 예측 기관들은 앞다투어 SaaS 의 성공을 예견했었다.



그러나 현실은 순탄치만은 아닌 것 같다.



작년 12월 가트너가 미국과 영국에 있는 기업 333개를 대상으로 하여 조사해 이번에 발표한 'SaaS 사용 현황과 전망 보고서'에 따르면 향후 2년간 조사 대상 333개 기업중 58%가 현수준을 유지, 32%가 확장하겠다고 했으며 5%가 축소, 5%는 중단하겠다고 한다. 서비스를 확장하겠다는 기업보다 유지하겠다는 기업이 많다는 것은 현재 제공되는 SaaS 서비스에 문제가 있다는 것을 의미한다.



실제 가트너 보고서에 따르면 이러한 원인이 예상보다 높은 비용(42%), 그리고 기존 레거시 애플리케이션과 통합의 어려움(38%), 기술적 요구를 만족시키지 못함(33%) 등 사용자 만족도 측면에 있다고 분석했다.



또 SaaS 도입시 기업이 가장 중요시 여기는 점은 기술적 요구 사항 지원(46%), 보안(33%) 그리고 통합 용이성(29%), 사업부의 요구 사항 지원(29%)순으로 조사되었다.



지금껏 SaaS 업계는 비용적인 측면에서 SaaS가 기존 방식보다 저렴하며 , OpenAPI와 통합 플랫폼을 통해 기존 애플리케이션과 쉽게 통합할 수 있다고 주장해 왔다. 또 간단한 설정과 개방된 개발 환경을 통해 사용자가 원하는 요구 사항을 손쉽게 반영할 수 있다고 강조해왔다.



가트너 보고서에 따르면 이러한 SaaS업계의 주장이 현실과 괴리가 있음을 알 수 있다. 과연 이러한 문제를 어떻게 해석하고 해결해야 할까.



먼저 , 비용측면에서 SaaS 업체는 서비스 총소유비용(TCO,Total Cost of Owbership)을 줄여야 한다. 실제 소프트웨어 1종을 구매하면 해당 라이선스 구매 비용, 관리 비용, 업그레이드 비용, 기술 지원 비용, 유지보수 비용 등 전체 TCO는 구매 비용의 3~4배 정도가 된다고 알려져 있다. 이에 비해 SaaS는 라이선스 구매 없이 사용한 만큼 비용을 지불하면 될 뿐 관리,업그레이드,기술지원 등의 부가 비용 지불은 발생하지 않는 것이 정상적이다.



그러나 실제 현실은 그렇치 않은 것 같다. 많은 SaaS 업체들은 컨설팅 비용 등의 명목으로 고가의 비용을 요구하는 것으로 알려져 있다. 이러한 비용을 줄이거나 없애야 한다. 이를 통해 고객에게 직접적인 비용 절감 효과를 제공해야 한다.



기술적으로 고객의 레거시 애플리케이션과 통합할 수 있는 현실적인 방안도 제공해야 한다. 기업이 보유하고 있는 많은 레거시 애플리케이션은 보통 비표준 API를 사용한다. 이러한 애플리케이션을 SaaS 서비스에 보다 손쉽게 연결할 방법을 제공해야 한다. 단순히 SOAP과 Rest 방식의 OpenAPI 를 제공하는 것만으로는 통합이 어렵다.



과거 대용량 메일 발송 SaaS 서비스를 이용한 적이 있었다. 이 서비스를 이용하기 위해서는 고객 DB를 연계해야 만 했는데 가능한 방법이 2가지였다. 하나는 배치 방법으로 스프레드시트에 고객 파일을 넣어서 FTP로 보내는 방법이었고 다른 하나는 고객 DB를 열어 주는 것 이었다. 별 수 없이 고객 DB를 열어 줄 수 없어 배치 방법을 사용했지만 정말 황당한 상황에 끔찍한 결정이었다.



만약 이런 경우 해당 업체가 레거시 시스템을 연동하기 위한 서비스 연계 모듈을 제공했다면 쉽게 해결 할 수 있었을 것이다. 이 연계 모듈을 고객 방화벽내에 설치한 후 레거시 DB 시스템을 연계하고 아웃바운드 보안 연결을 통해 고객 정보를 전달할 수 있다. 특히, 해당 고객 정보를 별도로 저장하지 않고 바로 활용한 후 삭제함으써 보안성을 높일 수 도 있다. 이렇듯 고객의 현실에 기반한 해결 방안을 제공해야 한다.



빌링 SaaS 서비스 업체인 OpSource는 바로 이러한 방법을 사용하여 레거시 응용 시스템을 빌링 서비스와 연계한다. Opsource는 고객에게 에이전트 SW를 제공한다. 이 에이전트 SW는 고객 방화벽 내에 위치하면 레거시 시스템으로 부터 고객 정보와 고객의 사용 정보 등을 안전하게 빌링 서비스에 제공하여 빌링 요청을 처리한다. 이처럼 기존의 레거시 애플리케이션을 효율적으로 통합할 창의적인 방법을 제공해야 한다.



SaaS 입장에서 고객의 기술적 요구를 만족시키지 못한다는 것은 동전의 양면일 수 밖에 없다. SaaS는 규모의 경제가 달성됐을 때 성공한다. 다시 말해, 고객이 어느 정도 수준에 도달했을 때 수익을 내며 그 임계치를 넘는 순간 수익율은 가파르게 증가한다.



그러나 증가하는 고객에 비례해서 증가하는 고객의 기술적 요구 사항에 따라 시스템에 손을 댈 수 도 없다. 개별 요청에 따라 시스템에 손을 대는 순간 일관되게 서비스를 개발하느 것이 어려워진다. 마치 과거 SI에 기반한 솔루션 구축 사업과 별 차이가 없어진다.



현재 SaaS에서는 이러한 고객 요구 사항을 수용할 방법으로 사용자가 원하는 데이터 필드를 서비스에 추가하여 자신이 원하는 서비스를 구성할 수 있게 해주는 메타 데이터 기술을 제공한다. CRM 업체인 Salesforce와 Netsuite 같은 업체들은 자신의 SaaS 서비스와 데이터를 기반으로 한 개발 플랫폼을 제공하기도 한다.



그러나 이러한 방법은 자신의 플랫폼을 중심으로 애플리케이션을 개발하는 것이지 고객의 SaaS 서비스 자체에 대한 기술적 요구사항을 수용하기 위한 방법은 아니다. 그러나 긍정적인 면에서 이러한 고객의 기술적,기능적 요구 사항을 수용하는 과정은 SaaS 서비스를 강화하는 데 있어 큰 밑거름이 될 것이다.



실제, 이 달 7월 12일 베타 꼬리표를 뗀 구글 앱스는 2년 동안 175만 개의 기업이 사용하는 과정에서 많은 시행착오를 겪었다. 이 과정에서 구글앱스는 중소기업 뿐 만 아니라 대기업에서 구글 앱스를 사용할 때 필요한 기능과 기업이 이미 사용하고 있는 레거시 애플리케이션과의 통합을 위한 기능을 추가했다. 실제 , LDAP 동기화 기능인 구글 앱스 디렉터 싱크 기능을 제공함으로써 기존 익스체인지 서버나 도미노 서버의 사용자 정보를 연동 가능하게 해주었다. 이 기능은 과거 구글이 합병한 이메일 보안 및 아카이빙 전문업체인 포스티니를 통해서 개발한 것이다.



물론 구글 앱스가 기업의 모든 기술적 요구사항을 만족시킨다고 말할 수는 없다. 하지만 기존의 기업 고객이 원하는 것을 미리 파악하고 이 부분을 해결하기 위한 노력이 없다면 결코 고객을 만족시킬 수 없으며 다가갈 수 없다는 것을 잘 보여준다고 할 수 있다. 이러한 측면에서 구글은 아주 영리한 SaaS 공급자이다.



이구동성으로 국내 소프트웨어 업계의 고사위기에 대해 이야기 하고 있다. SaaS야 말로 기존 대형 SI 회사들의 거미줄에 걸려있는 국내 소프트웨어 업체들이 정당한 대가를 받고 자립할 수 있는 대안중 하나이다. 그러나 성공적인 SaaS 서비스를 위해서는 "개방 전략"이 필요하다. 업체간에 연동과 기술 공유, 그리고 기존 레거시 시스템 연동을 위해 플랫폼을 개방(Open)하며 실제 이를 이루기 위해 진정한 위한 오픈 마인드를 가져야 한다.



과거 필자는 국내 그룹웨어 시장의 대부분을 차지하고 있던 업체와 결제 시스템을 연동하기 위한 제휴를 진행한 적이 있었다. 막대한 개발비를 요구하였으며 고압적인 자세때문에 협상에 애를 먹었었다. 결론적으로 울며 겨자먹기 식으로 상당한 금액을 주고 SDK를 받아 연동을 했었다. 얼마 후 반대의 상황이 발생했었다.



필자가 경영하던 회사의 제품을 사용하던 고객이 해당 그룹웨어를 도입했는데 이 때는 반대로 해당 그룹웨어를 필자의 제품에 연동을 해야 했었다. 마치 복수하듯이 기존에 요청했던 금액보다 휠씬 많은 금액을 요구했었다. 실제 곰곰히 생각해 보면 어느 누구도 얻은 것 없었다. 물론, 대형 SI 회사는 여전히 수익을 챙겼었지만.



만약 서로 간에 합리적인 제휴를 통해 솔루션을 연계하고 이를 바탕으로 고객에게 보다 질 높은 솔루션을 제공했다면 분명 더 많은 것을 얻었을 것이다. 마찬가지로 지금 태동하는 SaaS도 무엇보다도 앞서 언급한 것들이 요구된다 할 수 있다. 분명 SaaS의 미래는 밝으나 그 아침은 그냥 오는 것은 아니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/07/19 14:05 2009/07/19 14:05
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4459

[칼럼]사용자 통지를 사소하게 다루는 IT조직들-1
최영석BSI코리아 심사위원 YoungSug.Choi@bsigroup.com
2009.07.17 / AM 09:38최영석

[지디넷코리아]국내 IT조직들을 관찰하면서 꼭 다루고 싶었던 문제점들 중에 하나가 ‘사용자 통지’에 대한 것들이다. 사용자 통지를 단순히 IT조직의 ‘친절함’을 사용자들에게 과시하는 정도로만 이해하고 있는 IT조직들이 아직도 많다.



통지를 제때 받지 못하거나, 전달에 실패하는 경우, 사용자들은 IT를 이용해서 본인의 업무를 처리하는 데 큰 불편을 겪거나, 불필요한 시간을 허비하게 된다. IT를 비즈니스와 연결시키는 큰 그림도 중요하지만, 실제 비즈니스 활동을 수행하는 사용자들이 IT를 사용함에 있어 겪는 불편함을 최소화하는 것도 중요하다는 것을 강조하고 싶다.



통지 시점, 통지 내용, 통지 대상자 및 통지 방법 등의 통지 활동 전반에 산재해 있는 문제들로 인해 사용자들을 지속적으로 소외(?)시키거나, 불만을 제기하게 만들고 있는 일부 IT조직에 대해 알아보자.
지면상 2회로 나누어서 다루어 보겠다.



■통지란 무엇인가?



통지(Notification)는 필요한 사람들에게 적절한 시기에 약속된 방법으로 정보를 알려주는 활동이다.



서비스 분야에서는 주로 접수 여부와 처리 결과를 알려주는 활동을 얘기하지만, IT분야에서는 장애와 변경과 같은 사건들이 발생하는 경우에도 통지가 일어나게 되므로, 일반적인 서비스 분야보다는 좀더 넓고 복잡하다고 할 수 있다.



통지는 발생하는 동기에 따라서 수동적인(Reactive) 통지와 적극적인(Proactive) 통지로 나누어 볼 수 있다.
수동적인 통지는 사용자의 요청이나 장애가 발생한 이후에 확인(confirmation)이나 정보공유의 목적으로 정보를 사용자에게 전달하는 것을 의미한다. 적극적인 통지는 사용자의 요청이나 장애가 발생하지 않았더라도, 사용자에 영향을 주는 사건이 발생했거나 발생할 것으로 예측되는 경우, 사용자들에게 미리 정보를 알려주는 적극적인 활동이다.



IT를 둘러싸고 발생하는 ‘사건’에 따라서는 ‘사용자 요청’에 대한 통지와 ‘변경 및 장애’에 대한 통지로도 나누어 볼 수 있다. ‘사용자 요청’에 대한 통지는 사용자에게 접수 확인, 진행 상태 및 이슈사항에 관련된 정보를 전달하는 것을 의미한다.



‘변경 및 장애’에 대한 통지의 경우는 사용자들에게 변경과 장애의 발생 사실, 진행 상태 및 이슈사항에 관련된 정보를 전달하는 활동으로 볼 수 있겠다.



■‘확인’ 통지가 부실한 경우



수동적인 통지이면서 사용자 요청에 관련된 ‘확인(confirmation)’ 통지는 가장 기본적인 통지 활동이라고 볼 수 있다. 패밀리레스토랑에 가서 주문을 할 때, 또는 계산할 때 우리는 ‘확인’ 통지를 경험한다. 주문한 내용을 접수하는 종업원이 주문내용을 ‘다시 한번’ 불러주거나, 계산 시 현금을 받은 경우 얼마를 받았다라고 굳이(!) 알려준다.



이렇게 귀찮을 정도로 확인을 해주는 이유는 무엇일까?



‘확인’ 통지는 요청자가 본인이 요청한 내용이 접수되었는지를 확신하게 해주는 좋은 실행사례 중의 하나다. 식당에서 추가적인 주문을 했을 때 종업원의 ‘확인’ 통지가 없는 경우, 계속 기다려야 하는 지 아니면, 다시 한번 외쳐야(!)하는지 고민한 경험을 떠올려 보면 이해를 할 수 있다.



‘확인’ 통지와 관련하여 국내IT조직의 현실을 살펴보자. 우선 사용자 요청을 전문적으로 처리하는 ‘서비스데스크(Service desk)’의 유무에 따라 ‘확인’ 통지의 적용 여부가 극명하게 갈린다.



서비스데스크가 없는 IT조직의 경우, 통지 활동 전반이 불규칙적이다. 이들 조직은 사용자의 요청을 접수하는 IT담당자가 ‘개발자’나 ‘운영자’와 같은 엔지니어인 경우가 대부분이고, 사용자 요청을 접수하고 통지하는 활동들을 대부분 ‘구두’로 처리하고 있다.



국내정서로 볼 때, IT엔지니어가 사용자 요청에 대해 친절하게 확인을 해주는 모습은 여전히 어색하며, 구두로 처리되는 접수 및 통지 활동은 IT담당자의 기억력이나 꼼꼼함에 의존할 수 밖에 없다.



서비스데스크가 있는 IT조직도 ‘확인’ 통지가 원활하지 않는 경우가 있다. 이들 조직의 대부분은 사용자 요청의 전 과정을 IT시스템으로 관리하고 있다. 하지만 일부 IT조직들은 IT시스템에는 ‘확인’ 통지 기능이 없거나, 있어도 사용하지 않고 있다는 사실을 발견하게 된다. 그 이유를 살펴보면, ‘확인’ 통지의 필요성을 이해하지 못하거나, ‘그런 것까지, 왜?’라는 다소 시니컬한 인식이 깔려있다는 것을 느끼게 한다.



■사용자 문의와 통지 관련 사례

사용자 문의에 대한 IT조직의 ‘통지’ 활동이 실제 어떻게 일어나고 있고 문제점이 무엇인지를 간단한 사례를 통해 알아보자. 한 사용자가 IT조직으로 전화를 했다. 본인이 사용하는 응용시스템에서 특정 값을 입력하면 에러가 발생한다고 한다. 입력기능이 처리가 되어야만 자신의 업무가 종료된다는 말을 덧붙였다.



접수한 IT직원은 사용자에게 접수내역에 대한 ‘확인’통지를 하고 IT조직의 내부의 개발자에게 문의한 결과 임시로 처리할 수 있는 방법을 알아냈으며, 이 문제를 근본적으로 해결하기 위해서는 응용시스템의 수정이 필요하다는 것을 확인했다.



IT직원은 임시로 처리할 수 있는 방법과 향후 응용시스템에 대한 수정될 것이라는 사실을 사용자에게 통지한 후, 요청 건을 종료 처리하였다.



1주일 후 동일한 사용자로부터 또 전화가 왔다. 언제까지 임시 처리 방법으로 사용해야 하는 지를 문의하였다. 상담원은 다시 개발자에게 확인하였고, 이미 응용시스템의 수정이 이틀 전에 완료되었다는 사실을 알게 되었고 정상적인 방법으로 응용시스템을 사용하면 된다는 내용으로 사용자에게 ‘통지’하였다.



■통지의 ‘연속성’ 문제



위의 사례에서, IT직원은 기본적인 ‘확인’ 통지와 ‘임시 처리 방법’에 대한 통지를 정상적으로 수행했다. 하지만 사용자가 임시 처리 방법을 언제까지 사용할 것인지, 즉 IT내부적으로 응용시스템의 수정이 완료되는 시점에 대해서는 미리 ‘통지’하지 않았다.



여기에서 통지의 ‘연속성’문제가 발생한다. 통지의 ‘연속성’은 ‘사용자 입장’에서의 궁금함과 불편함이 완전히 종료될 때까지, 필요한 정보를 적절한 시점에 사용자에게 전달하는 것을 의미한다.



위의 사례의 경우, 통지의 연속성을 보장하기 위해서는 ‘확인’통지-> ‘임시처리방법’통지->’문제완전해결’통지까지를 연속적으로 사용자에게 제공하여야 한다. 이 사용자는 언제까지 임시처리방법의 불편함을 감수해야 하는지가 궁금했으나, 이에 대한 IT조직의 통지가 없어서 이틀간의 업무 손해(?)를 떠안은 후에 결국 전화를 하게 된 사례다.



이처럼 사용자입장에서 연속적이지 않는 통지는, 또 다른 불만을 야기하거나, 기존 통지를 위한 IT조직의 ‘노력’을 평가절하시킬 수 있다.



■통지의 연속성을 어떻게 보장할 것인가?



IT내부의 프로세스를 잘 이해하고 있는 사람은 눈치챘겠지만, 위와 같은 통지의 연속성 문제를 해결하기 위해서는, IT 내부적으로 두 가지 문제를 해결해야 한다.



첫째는, 위와 같은 사용자 문의 건은 ‘문제완전해결’통지 전까지는 IT직원이 해당 요청 건을 종료하지 않아야 한다. 접수한 IT직원과 상위 관리자는 항상 ‘열려’있는 상태의 요청 건에 대해서만 관심을 가지고 처리하기 때문이다. 사용자 통지가 원시(!)적인 IT조직의 경우는 ‘확인’통지 이후 사용자 문의 건을 종료시키기도 한다.



둘째는, 사용자 문의 건을 해결하기 위해 응용시스템 수정이 완료되었다는 사실이, 접수한 IT직원에게 적절한 시기와 방법으로 ‘통지’되어야 한다. 이것은 IT조직내의 ‘사용자 요청 프로세스’와 ‘변경 프로세스’간의 인터페이스가 긴밀해야만 가능하다. IT직원을 통해 사용자 요청이 변경프로세스로 전달되고, 사용자 요청을 해결하기 위한 변경이 진행되며, 이 과정에서 변경의 ‘상태’를 포함한 정보가 다시 사용자 요청 프로세스를 거쳐, 최초 접수한 IT직원에게 전달되는 흐름이 일관성 있게 유지되어야 한다.



언급한 사례 이외에도 다양한 통지의 연속성 문제들을 만나게 된다. 이들 사례들을 근본적으로 해결하기 위해서는 IT내부 프로세스를 긴밀하게 가져갈 수 밖에는 없다는 사실을 알아야 한다. 다음 칼럼에서는 ‘통지로부터 ‘소외’되는 사용자’에 대한 이야기를 해 보겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/07/19 13:54 2009/07/19 13:54
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4458

Google'Analytics - (2009.6.01~7.13)







크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/07/14 11:29 2009/07/14 11:29
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/4447

« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/04   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
Statistics Graph

Site Stats

Total hits:
182702
Today:
91
Yesterday:
607