소프트웨어 개발은 소프트웨어 설계, 구축, 배포, 지원하는 일련의 프로세스 활동을 말합니다.
소프트웨어 자체는 컴퓨터에 수행할 작업을 알려주는 일련의 지침 또는 프로그램입니다. 하드웨어와 독립적으로 작동하며, 컴퓨터를 프로그래밍할 수 있습니다. 소프트웨어의 유형은 기본적으로 다음과 같이 세 가지입니다.
시스템 소프트웨어는 운영 체제, 디스크 관리, 유틸리티, 하드웨어 관리, 기타 운영 필수 요소와 같은 핵심 기능을 제공합니다.
프로그래밍 소프트웨어는 텍스트 편집기, 컴파일러, 링커, 디버거 및 기타 코드 작성 툴과 같은 툴을 프로그래머에게 제공합니다.
애플리케이션 소프트웨어(애플리케이션 또는 앱)은 사용자가 작업을 수행하는 데 도움을 줍니다. 오피스 생산성 제품군, 데이터 관리 소프트웨어, 미디어 플레이어, 보안 프로그램 등이 여기에 속합니다. 또한 애플리케이션은 Amazon.com에서 쇼핑하거나 Facebook으로 소셜 활동을 하거나 Instagram에 사진을 게시하는 데 사용되는 웹 및 모바일 애플리케이션을 가리킵니다.1
네 번째 유형을 꼽자면 임베디드 소프트웨어를 들 수 있습니다. 임베디드 시스템 소프트웨어는 통신 네트워크, 자동차, 산업용 로봇 등, 일반적으로는 컴퓨터로 간주되지 않는 기계 및 장치를 제어하는 데 사용됩니다. 이러한 장치와 해당 소프트웨어는 사물인터넷(IoT)의 일부로 연결할 수 있습니다.2
소프트웨어 개발은 주로 프로그래머, 소프트웨어 엔지니어, 소프트웨어 개발자가 수행합니다. 이러한 역할은 상호 작용하고 겹치기도 하며, 개발 부서와 커뮤니티에 따라 역할 간의 역학 관계가 매우 다양합니다.
프로그래머 또는 코더는 데이터베이스 병합, 온라인 주문 처리, 통신 라우팅, 검색, 텍스트 및 그래픽 표시와 같은 특정 작업을 위해 컴퓨터를 프로그래밍하는 소스 코드를 작성합니다. 프로그래머는 보통 소프트웨어 개발자 및 엔지니어의 지시를 해석하고, C++ 또는 Java와 같은 프로그래밍 언어를 사용해 지시를 실행합니다.
소프트웨어 엔지니어는 공학적 원리를 적용해 소프트웨어와 시스템을 구축하여 문제를 해결합니다. 이들은 단순히 특정 인스턴스나 클라이언트를 위한 솔루션이 아닌, 문제에 일반적인 방식으로 적용할 수 있는 솔루션을 모델링 언어 및 기타 툴을 사용하여 고안합니다. 소프트웨어 엔지니어링 솔루션은 과학적 방법을 준수하며 교량 또는 엘리베이터처럼 현실 세계에 적용할 수 있어야 합니다. 마이크로프로세서, 센서, 소프트웨어가 제품에 추가되어 점점 더 지능화됨에 따라 엔지니어의 책임도 커졌습니다. 시장 차별화를 위해 소프트웨어에 의존하는 제품이 늘어나고 있을 뿐만 아니라, 소프트웨어 개발은 제품의 기계 및 전기 개발 작업과도 조화를 이루어야 합니다.
소프트웨어 개발자는 엔지니어에 비해 공식적인 역할이 적지만, 코드 작성 등 특정 프로젝트 영역에 밀접하게 관여할 수 있습니다. 동시에 요구 사항을 기능으로 구현하고, 개발 팀과 프로세스를 관리하며, 소프트웨어 테스트 및 유지 관리를 수행하는 등 전반적인 소프트웨어 개발 수명 주기를 주도합니다.3
소프트웨어 개발 업무는 코더 또는 개발팀에만 국한된 것이 아닙니다. 과학자, 기기 제작자, 하드웨어 제조업자와 같은 전문가도 본업이 소프트웨어 개발자가 아니더라도 소프트웨어 코드를 작성합니다. 소프트웨어나 반도체 사업과 같은 전통적인 정보 기술 산업에만 국한되지도 않습니다. 실제로 Brookings Institute(ibm.com 외부 링크)에 따르면 '소프트웨어 개발을 수행하는 기업의 절반 미만'만이 전통적 의미의 정보 기술 부문 기업이라고 합니다.
상업용 소프트웨어 개발이 아닌 맞춤형 소프트웨어 개발이라는 점이 중요한 차이점입니다. 맞춤형 소프트웨어 개발은 특정 사용자, 기능 또는 조직을 위한 소프트웨어를 설계, 생성, 배포, 유지 관리하는 프로세스입니다. 이와 달리 상업용 기성 소프트웨어(COTS)는 광범위한 요구 사항에 맞게 설계되므로 패키지화하여 상업적으로 판매 및 배포할 수 있습니다.
서비스형 데스크톱(DaaS)을 통해 기업이 온프레미스에 애플리케이션을 배포하는 것과 동일한 수준의 성능과 보안을 달성할 수 있는 방법을 알아보세요.
하이브리드 클라우드 가이드 등록
소프트웨어 개발은 일반적으로 다음과 같은 단계를 거칩니다.
소프트웨어 개발 프로세스의 단계는 애플리케이션 수명 주기 관리(ALM)에 적합합니다. IBM 엔지니어링 관리 솔루션은 기계, 전기, 소프트웨어 개발을 병렬로 관리할 수 있게 해주는 ALM의 상위 집합입니다.
소프트웨어 개발 프로세스 단계는 수명 주기의 단계로 분류할 수 있지만, 수명 주기의 중요한 특징은 지속적인 개선을 위해 재활용된다는 점입니다. 예를 들어 유지보수 및 지원 단계에서 발견된 사용자 문제는 다음 주기가 시작될 때 요구 사항이 될 수 있습니다.
소프트웨어 개발은 널리 퍼져 있기 때문에 중요합니다. IBM 부사장이자 블로거인 Dibbe Edwards는 "소프트웨어는 자동차에서 세탁기, 온도 조절기에 이르기까지 많은 제품에서 핵심 차별화 요소로 부상했으며, 이러한 제품들을 연결하는 사물인터넷이 성장하면서 더욱 중요해지고 있습니다."라고 지적합니다.
예를 들면 다음과 같습니다.
소프트웨어 개발을 통해 브랜드를 차별화하고 경쟁 우위를 확보하려면 소프트웨어 배포, 품질, 효율성을 가속화하는 기법과 기술을 자유자재로 활용할 수 있어야 합니다.
고품질 소프트웨어와 시스템을 신속하게 공급하게 해주는 모델링과 설계 활동을 위한 입증된 솔루션입니다.
개인과 팀을 위한 고급 소프트웨어 버전 제어, 작업 공간 관리, 분산 소스 제어 및 병렬 개발 지원은 아티팩트 변경 사항을 자동으로 추적하여 생산성을 향상합니다. 이 소프트웨어는 사실상 무제한의 일시 중단 및 재개 기능을 통해 작업 중단을 처리할 수 있습니다.
소프트웨어의 버전 제어를 관리하기 위해 IBM Engineering Lifecycle Management 툴과 Git, GitLib, GitHub와 같은 타사 툴 간의 연결을 제공합니다.
1 소프트웨어, Techopedia(ibm.com 외부 링크)
2 임베디드 소프트웨어, Wikipedia(ibm.com 외부 링크)
3 소프트웨어 엔지니어 및 소프트웨어 개발자 비교 - 차이점은 무엇인가요? Fullstack Academy(ibm.com 외부 링크)
4 Forrester Wave: AD&D 전문가를 위한 로우 코드 개발 플랫폼, 201년 4분기 John R. Rymer, Forrester Research, Inc. 2017년 10월 23일(ibm.com 외부 링크)