소프트웨어 공학은 최소의 비용과 시간을 통해 높은 품질의 소프트웨어를 도출하기 위한 모든 수단과 도구들을 일컫는 말입니다.
그렇다면 소프트웨어란 무엇이고 어떤 것들이 있을까요?
1. 소프트웨어
소프트웨어의 사전적 정의는 컴퓨터 시스템을 효율적으로 운영하기 위해 개발된 프로그램의 총칭으로, 크게 응용, 시스템 소프트웨어로 나눕니다. 상업적 목적이나 판매를 목적으로 개발되는 상용 소프트웨어, 하드웨어를 제어하는 작은 규모의 소프트웨어인 펌웨어도 존재합니다. 응용 소프트웨어는 특정 업무나 기능을 처리하기 위한 소프트웨어 입니다. 우리가 보통 애플리케이션이라고 하는 것들이 이에 해당합니다.
응용 소프트웨어는
- 기업용 소프트웨어
- 영상 처리 소프트웨어
- CG/VR 소프트웨어
- 콘텐츠 배포 소프트웨어
- 자연어 처리 소프트웨어
- 음성 처리 소프트웨어
로 나눌 수 있습니다.
마이크로소프트의 워드, 엑셀 / 어도비의 프리미어 프로, 포토샵 / 리그 오브 레전드, 오버워치 같은 것들을 응용 소프트웨어라고 할 수 있는 것 입니다.
특히 자연어 처리 소프트웨어의 경우, 컴퓨터가 인간의 말을 이해할 수 있는 응용 소프트웨어로 ChatGPT, Gemini 등이 이에 해당한다고 할 수 있습니다.
시스템 소프트웨어는 사용자가 쉽고 효율적으로 컴퓨터 시스템을 사용하도록 돕는 소프트웨어 입니다.
여기서 시스템이란, 특정 업무를 수행하기 위해 중앙처리장치(CPU, Central Proceesing Unit)을 중심으로 구성된 하드웨어 및 소프트웨어를 말합니다.
기본적으로
- 입력 - 시스템 처리가 필요한 데이터, 제어요소 전달
- 처리 - 입력된 값을 처리하여 결과 도출
- 출력 - 처리 결과를 출력장치 및 저장장치로 전달
- 제어 - 각 장치들의 기능 수행 제어
- 피드백 - 잘못된 기능 수행으로 처리과정을 다시 반복
와 같은 기능을 수행하는 장치들이 존재합니다.
시스템의 성능을 평가하는 기준에는 처리능력, 반환시간, 사용가능도, 신뢰도가 있습니다.
처리능력은 같은 시간 동안 얼마나 많은 작업을 처리할 수 있느냐를,
반환시간은 작업이 의뢰된 시점부터 완료까지 걸린 처리 시간을,
사용가능도는 필요할 때 즉시 사용한 정도가 얼마나 되느냐를,
신뢰도는 주어진 문제를 정확하게 해결하는 정도를 평가합니다.
특정 시스템을 바탕으로 제공되는 운영체제 및 운영 환경을 플랫폼이라고 하며, 어떤 관점으로 바라보냐에 따라 달라질 수 있습니다.
| 예시 | 플랫폼 |
| 응용 프로그램 관점 | Windows, Android, iOS |
| 채팅 서비스 이용자 관점 | 카카오톡, Discord, 텔레그램 |
플랫폼 성능 측정 기준으로는
- 가용성
- 응답시간
- 정확성
- 사용률
가 있으며, 이때 응답시간은 명령에 반응하는 시간으로, 처리시간과는 다릅니다.
앞서 소프트웨어 공학이란 최소한의 비용과 시간으로 양질의 소프트웨어를 도출하기 위한 것이라고 했는데요. 이를 위해선 기능이 완성된 함수나 코드를 재사용하거나, 이미 만들어진 특정 패턴을 이용해 개발하는 것이 중요합니다.
2. 모듈
프로그램을 기능별로 나누어 재사용이 가능하도록 한 것을 모듈이라고 합니다. 개발자는 모듈을 통해 구현하고 싶은 기능을 구체화합니다.
파이썬에서 원주율을 구하는 math.pi, 제곱근을 계산하는 math.sqrt 등이 대표적인 예시입니다.
3. 라이브러리
라이브러리는 관련 있는 모듈들을 모아놓은 것인데요, math.pi, math.sqrt를 모아놓은 것이 바로 math 라이브러리입니다. 표준 라이브러리는 프로그래밍 언어를 설치할 때 기본으로 제공되는 라이브러리이고, 외부 라이브러리는 사용자가 외부에서 설치를 해 사용하는 라이브러리입니다. 개발자는 기본으로 제공되거나 직접 설치한 라이브러리를 통해 모듈을 이용해 구현하는 것이죠.
4. 디자인 패턴
디자인 패턴은 특정 기능에 대해 지속적으로 제기되는 문제를 해결하기 위한 추상적인 가이드라인을 제시한 것입니다. 이미 만들어져 있는 구조로 빠른 개발을 가능하게 하는 것이죠. 크게 생성 패턴, 구조 패턴, 행위 패턴으로 구분 짓습니다.
5. 프레임워크와 아키텍처
이러한 디자인 패턴에 모듈의 장점과 기능을 결합해 실제적인 개발의 틀을 제공하는 것을 소프트웨어 개발 프레임 워크라고 합니다. 개발자가 프로그램의 프름을 주도하는 일반적인 제어의 흐름과 반대로, 프레임워크가 프로그램의 기본 틀을 제공하고, 개발자가 기능을 구체화 하도록 합니다. 프레임워크를 사용하면 품질, 예산, 유지보수에 있어 이점을 가지게 되고, 상호 운용성과 개발 및 변경이 용이해집니다. 다수의 프레임워크를 체계적으로 구성하는 구조체를 소프트웨어 아키텍처라고 합니다.
6. 컴포넌트
컴포넌트는 독립적으로 기능함과 재사용성에 있어서 모듈과 비슷한 점을 가지지만, 모듈보다는 더 확장된 개념입니다. 레고처럼 컴포넌트와 컴포넌트를 결합해 하나의 큰 시스템을 구현할 수 있습니다. 쉽게 설명하면 모듈은 (조이는 기능) 나사 또는 (전류를 보내는 기능)전선 같은 부품, 컴포넌트는 전선과 나사 같은 부품들을 조립해 만든 하나의 (차량용 네비게이션과 같은)완성품이라고 할 수 있습니다. 이러한 컴포넌트가 모여 큰 시스템(자동차)를 만들어나가는 것이죠. 컴포넌트는 모듈과 다르게 그 자체로 소프트웨어의 역할을 수행할 수 있습니다.
'Software Engineering' 카테고리의 다른 글
| [소프트웨어 공학] 소프트웨어 개발 방법론 (0) | 2025.12.22 |
|---|---|
| [소프트웨어 공학] 소프트웨어 개발 수명 주기 (0) | 2025.12.22 |