1. 도급계약 vs 위임계약
통상 컴퓨터프로그램 등 소프트웨어를 개발하여 납품하는 계약은 도급계약으로 볼 수 있습니다. 도급계약은 당사자 일방이 일을 완성할 것을 약정하고 상대방이 그 일의 결과에 대하여 보수를 지급할 것을 약정함으로써 성립하는 계약입니다(민법 제664조). 즉, 도급은 일의 완성을 목적합니다. 특정 목적의 소프트웨어 프로그램 개발공급 계약에서 수급인 개발자의 급부의무는 도급인 발주자의 주문 사양에 맞추어 하자 없이 주문한 기능을 가진 프로그램을 개발하여 공급하는 것입니다.
판례도 “소프트웨어 개발·공급계약은 일종의 도급계약”이라고 하고, (발주자 – 도급인 vs 개발자 – 수급인 구도) 수급인은 원칙적으로 일을 완성하여야 보수를 청구할 수 있다고 판시하고 있습니다. 도급계약에서는 일의 완성 여부가 매우 중요한 핵심 사항입니다.
판결은 일단 완성되었다면, “발주자 도급인이 프로그램 내용에 대하여 불만을 표시하며 수급인의 수정 제의를 거부하면서 계약해제 통보를 하는 등 특별한 사정이 있다면 수급인은 당시까지의 보수를 청구할 수 있다”고 판시합니다.
반면, 컴퓨터프로그램의 납품에 중점이 있는 것이 아니고 전문가로서 개발업무를 수행하는 것 자체에 중점이 있는 경우라면 도급계약이 아니라 위임계약으로 볼 수도 있습니다. 위임계약의 대표적 예를 들면, 의사가 환자를 치료하고 대가를 받는 관계입니다.
2. 분쟁원인 - 프로그램 개발완성 여부
소프트웨어 프로그램 개발공급계약에서 완성여부에 대한 채무불이행 여부가 문제되는데, 수급인 개발자가 채무이행을 제대로 하였는지 여부는 당사자가 합의한 계약내용을 기준으로 판단될 것입니다.
그런데 소프트웨어 프로그램 개발공급계약은 실무상 합의내용을 구체적으로 명확하게 계약서에 반영하는 것이 상당히 어렵습니다. 개발대상 프로그램이 크고 복잡한 경우 그 요구조건, 사양, 내용, 시스템 등을 계약에 명확하게 반영하기 어렵습니다. 그 결과 계약내용에 대해 당사자 사이에 이해내용상 상당한 차이가 발생할 수도 있습니다. 그 결과 개발진행 후 일의 완성 여부에 대한 분쟁이 자주 발생하는 것입니다.
3. 프로그램개발의 완성 또는 미완성 판단기준
소프트웨어 개발납품 계약서에서 정한 기준에 따라 완성여부를 판단합니다. 계약서 문언에 따라 계약에 포함되어 있는 사양과 기능을 갖춘 제품의 개발, 그 이행 제공, 관련한 자료, 당시 관련 당사자들의 태도 등 제반 사정을 종합하여 판단합니다. 따라서 발주자와 개발자는 계약서에 프로그램의 목적과 기능을 구체적으로 특정하고, 정확하고 구체적으로 기재해야 하는 것이 바람직합니다. 통상 계약서에 첨부하는 ‘개발사항 명세서’에 관련 사항을 가능하면 상세하게 작성하여야 합니다.
소프트웨어 프로그램 개발 및 공급계약에서 일의 완성으로 보려면 계약상 예정된 최후의 공정까지 종료하였음과 함께 프로그램의 주요기능 부분이 약정된 대로 개발되어 사회통념상 일반적으로 요구되는 성능을 갖추고 있어야만 합니다. 또한 계약상 예정된 최후의 공정이 종료하였는지 여부는 개발자 수급인의 주관적인 주장이 아니라 개발 및 공급계약의 구체적 내용과 신의성실의 원칙에 비추어 객관적으로 판단해야 합니다.
개발자가 소프트웨어 개발의 일을 완성하고 이를 인도하면 발주자는 해당 소프트웨어 프로그램이 계약상 사양과 내용대로 완성되었는지 점검하여 수령하게 되는데, 법원은 제작물공급계약에서 목적물의 인도는 완성된 목적물에 대한 단순한 점유의 이전만을 의미하는 것이 아니라 도급인이 목적물을 검사한 후 그 목적물이 계약내용대로 완성되었음을 명시적 또는 묵시적으로 시인하는 것까지 포함한다고 봅니다.
그런데, 실무상 개발 납품한 프로그램이 계약상 요구사항을 모두 충족하였지만 발주자가 원하는 성능을 충분히 구현하지 못한다고 불만을 표시하면서 개발대금을 지급하지 않고 과도하게 보완을 계속 요구하는 경우가 있습니다. 이와 같은 하자 주장은, 법적으로 일의 완성과는 구별되는 다른 개념입니다. 하자가 있더라도 일이 완성되었다면 수급인은 도급인에게 보수의 지급을 청구할 수 있습니다.
하자여부도 일의 완성여부 판단, 그 완성도의 판단기준이 매우 중요합니다. 계약서에서 요구사항 각 항목을 특정하고, 목적하는 기능, 사용용도, 개발동기 등 배경사실을 기재하였거나 프로그램의 기능이 어떻게 구현되어야 하는지 등을 구체적으로 기재해 두었다면 완성여부 및 완성도를 판단하는데 큰 문제가 없을 것입니다.
발주자 도급인은 하자보수청구권을 가지므로 하자담보책임에 기한 항변을 행사하여 하자에 대한 보수 또는 그에 갈음하는 손해배상의 지금에 대한 대금의 지급을 거절할 수 있습니다. 그러나 하자를 이유로 대금 전부의 지급을 거절할 수는 없습니다.
정리하면, 발주한 소프트웨어 프로그램의 개발이 미완성인 때에는 대금지급을 거절할 수 있지만, 완성되었으나 하자가 있는 경우에는 발주자 도급인은 일의 완성을 요구하면서 대금지급을 거절할 수는 있습니다. 다만, 하자의 정도에 따라 대금감액 또는 손해배상을 청구할 수는 있습니다.
4. 완성된 소프트웨어 프로그램의 하자 관련 쟁점
소프트웨어 개발 및 공급의 도급계약에 있어서의 하자는 완성된 일이 계약에서 정하거나 보증한 내용이 아니거나, 그 경제적 사용가치 또는 교환가치를 감소시키는 결함이 있거나, 또는 당사자가 미리 정한 사양 또는 기능을 가지지 못하는 등 결함을 말합니다. 그러나 하자의 정의는 모호하고 추상적이라 개별 사건마다 당사자간의 계약 내용을 검토하는 것이 중요합니다. 또한 계약상 합의된 사양과 내용과 함께 통상적인 용도에 적합한지 여부도 중요한 기준입니다.
납품 및 검수 후의 소프트웨어 버그에 대한 리포트를 받고 이를 즉시 보수하거나 도급인과 협의하여 상당한 조치를 취한 때에는 하자라고 보지 않을 것입니다. 그러나 도급인이 요구하는 구체적인 업무나 기능이 제대로 작동되지 않는 경우, 통신 및 인터넷과 연계된 컴퓨터 프로그램이 통신 및 네트워크와 연결하여서는 제대로 작동되지 않은 경우나, 컴퓨터 안에 보존된 다른 데이터 등을 잃어 버리는 경우 등은 하자에 해당합니다.
5. 최종 완성 전 개발 정도의 중간점검 및 계약변경시 입증자료 구비 필요
컴퓨터 프로그램의 납품 후 계약에 따른 완성 여부를 다투거나 하자를 다투는 것보다 중간에 미리 점검하고 확인하는 것이 바람직합니다. 개발단계에 따라 단계별로, 또는 모듈별로 개발정도를 점검하거나 또는 기간에 따라 정기적으로 점검하는 것이 바람직합니다. 만약 당초 계약내용을 변경하거나 수정, 보완해야 한다면 중도에 추가 계약서를 작성하는 등 명시적 자료를 남기는 것이 좋습니다.
이때 게약사항의 수정, 변경으로 개발비용이 추가되는지 여부도 명확하게 결정해야 합니다. 그렇지 않으면 추가 비용의 부담에 관한 분쟁원인이 될 것입니다.