본문 바로가기
컴퓨터 공학/소프트웨어 공학

1. 소프트웨어 공학이란?

by devp0tato 2026. 4. 22.

소프트웨어 공학이란 무엇일까요?

단순히 소프트웨어 공학에 대해 그냥 프로그래밍 하는 기법이겠지 라고 생각을 했었습니다. 하지만 그렇지 않았다는거 

소프트웨어 공학이란 코딩, 프로그래밍 뿐만 아니라 프로그램에 관한 문서(system documentation) 그리고 유저에 관한 문서(user documentation)도 포함이 됩니다.

 

I. Software의 종류

소프트웨어의 종류에는 크게 3가지가 있습니다.

  • Generic : 제네릭 소프트웨어는 그 대상이 모든 고객을 대상으로 합니다.
    예를 들어 MS Word 나 CAD같은 소프트웨어는 해당 소프트웨어를 사용하려는 누군든지 구매하여 사용할 수 있습니다.
    이러한 제네릭 소프트웨어는 개발자가 sw의 스펙/기능을 결정합니다.

 

  • Customized : Customized 소프트웨어는 제네릭과 다르게  특정 고객이 대상입니다.
    예를들어 쿠팡과 같이 상품을 추천해주는 e-commerce 소프트웨어를 만든다면 이건 오직 쿠팡만을 대상으로 하기에 Customized software가 되는거죠. 
    이러한 Customized Software는 고객이 sw의 스펙/기능을 결정합니다.
    학교와 관련을 짓자면, 클래스넷이 Customized 소프트웨어에 포함됩니다.

 

  • Hybrid : 하이브리드는 말 그대로 제네릭의 특징도, customized의 특징도 가진 소프트웨어입니다. 즉, 특정 고객층을 대상으로 개발을 했지만 오직 하나의 고객이 아닌 관련된 다른 고객도 사용할 수 있는 소프트웨어입니다.
    예를들어 ERP같은 기업의 자원관리 시스템의 경우 기업을 대상으로 만들어졌지만, 특정한 하나의 기업을 대상으로 만든거는 아니니까요.
    이것도 학교와 관련을 짓자면, 헤이영을 들 수 있습니다. 

 

II. 소프트웨어 공학의 중요성과 demand

먼저 소프트웨어 공학은 끝에 공학이 붙으니 당연히 비용 효율적인 소프트웨어 개발에 관련된 것입니다.

소프트웨어의 복잡성이 날로 커지고 있고, 소프트웨어의 의존도도 커지고 있기에 대규모의 소프트웨어를 빠르게 배포해야 할 필요가 생겼고, 소프트웨어 공학의 기법을 적용함으로써 단순히 토이 프로젝트 하듯이 단순히 개발하는것 보단 장기적으로 봤을때 신뢰성이 확보되고, 비용과 시간이 감소하기에  중요하다고 볼 수 있습니다.

 

III.Software Process

 

Software Process란 소프트웨어의 개발, 유지보수와 관련한 활동의 집합입니다. 크게 4가지로 나뉘는데요 

 

  1. Specification - 개발하려는 소프트웨어의 기능 / 제약 명세
  2. Design / Implementation : 개발하려는 소프트웨어의 설계 / 코드 구현
  3. Validation(Testing) : 기능/요구사항 테스트
  4. Maintenance(Evolution) : 업데이트, 요구사항 변화에 따른  기능 추가/제거, 버그 수정

 

각 단계별 비용(시간)이 차지하는 비율은 어느정도 될까요?

일반적으로는, 60%는 개발과 직접적인 관련이 있는 Specification , Design/ / Implementation, Testing 에 해당되게 되고
코드를 작성하는 Implementaion의 비율은 20%에 불과합니다.

물론 개발하려는 소프트웨어의 종류에 따라 그 비율을 당연히 달라지게 되는데 

예를들어, 보안 / 금융 / 자율주행 과 같은 분야는 시스템 신뢰도를 확보해야 하는 특성상 코드 구현이전 설계 / 요구사항 반영 / 그리고 테스트 하는데 많은 비용이 소모되는 편입니다.

 

그리고 유지보수의 경우 테스트까지 완료되고 난 후 이루어지는 활동으로 Specification -> Test에 해당하는 비율의 몇배에 해당하는 부분을 차지합니다. 

 

Software Process의 비율

 

III. 소프트웨어 공학의 주요 원칙

 

애초에 소프트웨어 라는 분야는 워낙 방대하고 그 유형도 많기에 모든 분야에 적용 할 수 있는 보편적이고 절대적인 소프트웨어 공학 기법은 없습니다. 하지만 몇가지 적용하면 좋은 원칙은 있는데요,

 

  • Software Process 잘 이해하고 관리하기
  • 소프트웨어의 요구사항 잘 이해하고 설계하기
  • 재사용하셈

 

IV. 좋은 소프트웨어의 특징

  • Maintenability - 유지보수가 쉽도록 소프트웨어를 개발할 것 
  • Efficiency - 비용 효율적 (cost - effective)하게 개발할 것 
  • Dependability - 다음 특성들을 제공해야 할 것 
    • Availability : 고객이 항상 이용가능하게 서비스를 유지해야 함
    • Reliability : 서비스가 끊기지 않고 지속되어야 함
    • Security : 해킹과 같은 위험에 대해 보안을 유지해야 함 
    • Safety : 천재지변, 정전, 화재와 같은 재난에 대비가 되어있어야 함
    • Integrity : 서비스를 이용함에 있어 무결성을 만족해야 함
  • Acceptability - 고객 / 유저의 설계 의도를 충족해야 함

전 MEDA로 외웠습니다.. 시험에 나올 수 도 있으니께......메다메다

 

'컴퓨터 공학 > 소프트웨어 공학' 카테고리의 다른 글

6. Requirement Capture - 요구사항 분석  (0) 2026.04.23
5. Modeling Concepts  (0) 2026.04.23
4. 객체 지향 - Object Orientation  (1) 2026.04.23
3. Agile Development  (1) 2026.04.22
2. Software Process  (0) 2026.04.22