정처기 준비를 하면서 공부한 내용을 정리합니다
1. 상용 소프트웨어
- 판매를 목적으로 개발된 소프트웨어.
- 소스 코드는 포함되지 않음.
- 다양한 라이선스를 통해 배포 및 기술 지원 제공 (프리웨어, 쉐어웨어, 애드웨어 등).
분류 체계:
- 범용 소프트웨어: 일반적인 목적으로 사용 (예: 시스템 SW, 미들웨어 등).
- 특화 소프트웨어: 특정 산업에 맞춰 제작 (예: 자동차, 항공 등).
핵심: 판매 중심의 소프트웨어.
2. 응용 소프트웨어
- 특정 업무나 작업을 처리하도록 설계된 소프트웨어.
- "애플리케이션" 또는 "솔루션"이라는 이름으로도 불림.
분류 체계:
- 기업용 소프트웨어: ERP, SCM 등 업무 중심 소프트웨어.
- 영상 처리 소프트웨어: 영상 편집, 스트리밍 등.
- CG/VR 소프트웨어: 3D 스캔, 모델링, 가상현실 관련.
- 콘텐츠 배포 소프트웨어: 콘텐츠 관리, 보호, 유통.
- 자연어 처리 소프트웨어: 검색, 의사결정 지원, 언어 분석.
- 음성 처리 소프트웨어: 음성 인식, 합성, 처리.
핵심: 특정 작업 수행 중심의 소프트웨어.
3. 시스템 소프트웨어
- 사용자가 쉽게 컴퓨터 시스템을 활용하도록 돕는 소프트웨어.
- 하드웨어 제조사에서 제공되며, 대표적으로 운영체제가 있음.
주요 구성 요소:
- 입력(Input): 처리할 데이터를 전달 (예: 키보드, 마우스).
- 처리(Process): 데이터를 계산하거나 변환.
- 출력(Output): 처리 결과를 보여주거나 저장 (예: 모니터, 프린터).
- 제어(Control): 장치가 제대로 작동하도록 제어.
- 피드백(Feedback): 오류 발생 시 수정하고 작업 반복.
- 성능 평가 기준:
- 처리능력(Throughput): 일정 시간 내 처리 가능한 작업량.
- 반환 시간(Turnaround Time): 작업 요청부터 처리 완료까지의 시간.
- 사용 가능도(Availability): 필요할 때 즉시 사용 가능한 정도. = 가용성
- 신뢰도(Reliability): 문제를 정확히 해결할 수 있는 정도.
핵심: 하드웨어와 소프트웨어 간의 연결을 돕는 기본적인 소프트웨어.
4. 플랫폼(Platform)
- 소프트웨어나 서비스가 실행될 수 있는 기반 환경.
- 스마트폰 운영체제: 안드로이드, iOS (앱 실행 환경 제공).
- 웹 서비스 플랫폼: 카카오톡, 유튜브 (서비스 제공 환경).
역할:
- 기반 제공: 소프트웨어나 서비스 실행 환경 제공.
- 연결 역할: 사용자와 소프트웨어 간의 다리 역할.
- 성능 평가 기준:
- 가용성(Availability): 언제든지 사용할 준비가 되어 있는지. = 사용 가능도
- 응답 시간(Response Time): 얼마나 빠르게 반응하는지.
- 정확성(Accuracy): 결과가 얼마나 올바른지.
- 사용률(Utilization): 자원을 얼마나 효율적으로 사용하는지.
핵심: 소프트웨어나 서비스가 실행되는 기반 환경.
출처 입력
5. 소프트웨어 공학
- 최소 비용과 개발 기간으로 높은 품질의 소프트웨어를 만드는 기술.
목표:
- 비용과 기간 예측.
- 소프트웨어 품질 보증.
- 하드웨어 및 기술 발전 반영.
- 기본 원칙:
- 현재 기술과 기법의 지속적 적용.
- 품질에 대한 지속적 검증.
- 개발 단계별 산출물 기록 유지.
핵심: 품질과 생산성을 높이는 소프트웨어 개발 방법론.
1. 모듈(Module)
- 프로그램의 기능을 작은 단위로 나누어, 각각을 독립적으로 개발하고 재사용할 수 있도록 만든 구성 요소.
특징:
- 프로그램의 일부분을 나눠서 개발자가 원하는 대로 구체화 가능.
- 다른 프로그램에서도 독립적이거나 연관된 기능으로 재사용 가능.
- 예: 로그인 기능을 하나의 모듈로 만들어 여러 프로젝트에서 사용.
2. 라이브러리(Library)
- 특정 작업이나 기능을 쉽게 구현할 수 있도록 미리 작성된 코드의 집합.
특징:
- 개발자가 자주 사용하는 기능을 포함해 코드 작성 시간을 줄여줌.
- 내장 라이브러리: 프로그래밍 언어 자체에서 제공 (예: Python의 math 모듈).
- 외부 라이브러리: 별도로 설치해 사용하는 라이브러리 (예: JavaScript의 Lodash).
3. 디자인 패턴(Design Pattern)
- 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 일반적인 해결책.
특징:
- 구체적인 코드가 아닌, 문제를 해결하는 방법론을 제공.
- 개발자들이 반복적으로 겪는 문제를 효율적으로 해결.
- 예: 싱글톤 패턴은 하나의 객체만 생성되도록 보장.
4. 프레임워크(Framework)
- 모듈과 디자인 패턴을 조합해 개발에 필요한 기본 구조와 기능을 제공하는 틀.
특징:
- 개발자가 핵심 기능만 추가하면, 나머지 구조는 프레임워크가 자동으로 처리.
- 코드 표준화가 쉬워지고, 유지보수와 협업에 유리.
5. 소프트웨어 아키텍처(Architecture)
- 여러 프레임워크와 기술을 체계적으로 구성한 소프트웨어의 큰 설계와 구조.
역할:
- 소프트웨어가 어떻게 작동할지, 어떤 방식으로 설계되고 업그레이드될지에 대한 지침 제공.
- 시스템의 안정성과 확장성을 고려해 전체적인 큰 그림을 설계.
- 예: 마이크로서비스 아키텍처, MVC 아키텍처 등.
6. 컴포넌트(Component)
- 독립적으로 작동하면서 재사용 가능한 소프트웨어의 작은 단위.
특징:
- 특정 기능을 수행하며, 다른 컴포넌트와 상호작용 가능.
- 안정적이고 독립적으로 실행 가능.
- 예: 버튼, 입력창 같은 UI 컴포넌트.
활용 조건:
- 특정 플랫폼(예: 웹, 모바일)에 맞게 설계되어야 함.
- 설계된 환경에서만 정상적으로 작동 가능.
재사용 방식:
- 합성(Composition): 기존에 만든 여러 컴포넌트를 조합해 새로운 기능을 만듦.
예: 로그인 페이지에 여러 컴포넌트(입력창, 버튼)를 조합.
- 생성(Generation): 추상적인 아이디어를 구체적인 형태로 만들어 사용.
예: AI 모델을 학습해 새로운 결과를 생성.
모듈과 라이브러리: 재사용 가능한 코드 조각.
디자인 패턴과 프레임워크: 문제를 해결하기 위한 구조적 틀.
아키텍처: 전체적인 소프트웨어 설계의 큰 그림.
컴포넌트: 소프트웨어의 작고 독립적인 부분으로, 재사용과 조합이 가능.
1. 소프트웨어 개발 수명 주기 (SDLC)
- 소프트웨어 개발 방법론을 바탕으로 한 단계별 개발 과정.
특징:
- 각 단계별로 명확한 산출물이 존재.
- 체계적이고 점진적인 개발을 진행.
2. 개발 모델별 특징
1) 폭포수(Waterfall) 모델
- 가장 전통적인 방식으로, 단계별 순차 진행.
- 이전 단계로 되돌아갈 수 없음.
- 문서화와 계획이 매우 중요.
- 단계:
- 계획 → 요구분석 → 설계 → 구현 → 테스트 → 유지보수
- 구별 포인트: 단계를 순서대로 진행하며, 한 번 지나간 단계는 수정 불가.
2) 프로토타입(Prototype) 모델
- 폭포수 모델의 단점을 보완.
- **시제품(Prototype)**을 제작해 사용자 피드백을 반영.
- 사용자와 시스템 간 인터페이스 설계 중점.
- 구별 포인트: 시제품을 기반으로 고객의 피드백을 받아 설계 조정.
3) 나선형(Spiral) 모델
- 폭포수와 프로토타입 모델을 결합.
- 위험 분석과 고객 평가를 반복적으로 수행.
- 점진적으로 소프트웨어를 완성.
- 구별 포인트: 위험 분석을 강조하며, 반복적으로 개발.
4) 애자일(Agile) 모델
- 고객과의 소통 및 피드백 중심.
- 짧은 개발 주기를 반복하며 유연하게 변화에 대응.
- 사용 사례: Scrum, XP, Kanban, FDD(기능 주도 개발) 등.
- 가치: 소통, 협력, 변화 대응, 지속적 개선.
3. 애자일 모델의 세부 유형
1) 스크럼(Scrum) 모델
- 작업을 2~4주 단위의 **스프린트(Sprint)**로 나누어 진행.
- 팀원 간 협력을 강조.
구성 요소:
- 제품 책임자(Product Owner):
- 제품 목표와 우선순위 설정.
- 사용자 요구사항(백로그) 작성 및 관리.
2. 스크럼 마스터(Scrum Master):
- 작업이 원활히 진행되도록 지원 및 문제 해결.
3. 개발팀(Development Team):
- 개발, 디자인, 테스트 등 모든 작업 수행.
2) XP(Extreme Programming) 모델
- 짧은 개발 주기(1~3주 단위) 반복.
- 고객 피드백을 적극 반영하여 빠른 개선.
XP의 가치:
- 의사소통: 팀원 및 고객과 원활한 소통.
- 단순성: 필요한 것만 설계.
- 용기: 문제 해결을 두려워하지 않음.
- 존중: 팀원과 고객 간 상호 존중.
- 피드백: 작업 결과에 대해 빠르게 평가 및 수정.
개발 과정:
- 스파이크(Spike): 새로운 기술 검증.
- 릴리즈 계획: 고객 피드백 기반 계획 수립.
- 이터레이션(Iteration): 1~3주 단위 개발 및 개선.
- 테스트: 새로 개발된 기능 검증.
- 릴리즈: 고객에게 결과물 제공.
XP의 주요 원리:
- 작고 자주 릴리즈.
- 테스트 중심 개발(TDD).
- 페어 프로그래밍(2명이 협력해 코딩).
- 코드 공동 소유.
핵심 요약:
- 폭포수 모델: 순차적 개발로, 각 단계 완료 후 다음 단계로 이동.
- 프로토타입 모델: 시제품을 만들어 피드백 반영.
- 나선형 모델: 위험 분석을 통해 반복적으로 개발.
- 애자일 모델: 고객과의 소통과 유연한 대응을 중시.
- 스크럼: 스프린트 단위로 작업.
- XP: 짧은 주기로 반복 개발, 피드백 반영.
2. 소프트웨어 개발 방법론
- 소프트웨어를 효과적으로 개발하기 위해 사용하는 방법, 절차, 기법.
- 개발 전 과정에서 생산성과 품질을 향상시키는 것이 목적.
목표:
- 효율적 개발: 시간과 비용을 절약하면서 고품질 소프트웨어를 제작.
- 품질 보장: 고객 요구를 충족시키는 결과물을 제공.
개발 과정의 단계:
- 분석:
- 개발할 소프트웨어의 요구사항과 시스템 구조를 조사.
- 예: 고객이 원하는 기능을 파악.
2. 설계:
- 소프트웨어의 구조와 상세 설계를 정의.
- 예: 어떤 데이터가 필요하고, 화면 디자인은 어떻게 될지 결정.
3. 구현:
- 코드를 작성하고 실제 기능을 만들어 실행.
- 예: 프로그래밍으로 설계한 내용을 구현.
4. 시험(테스트):
- 만든 소프트웨어가 제대로 작동하는지 확인.
- 예: 오류가 있는지 확인하고 수정.
1. 소프트웨어 개발 방법론의 종류
(1) 구조적 방법론
- 1970년대 개발된 방식으로, 프로그램의 논리적 구조를 명확히 설계.
- 구조적 분석을 통해 고객의 요구사항을 자료 흐름도로 표현
- DFD(자료 흐름도): 데이터가 시스템 내에서 어떻게 흐르는지를 표현.
절차:
- 요구사항 분석
- 구조적 분석
- 구조적 설계
- 구조적 프로그래밍
(2) 정보공학 방법론
- 1980년대 등장한 방법론으로, 업무 프로세스를 중심으로 분석.
- 데이터 모델링 도구(ERD)를 사용해 시스템 설계.
설계 단계:
- 정보 전략 계획: 장기적 목표와 전략 수립.
- 업무 영역 분석: 데이터와 프로세스 분석.
- 시스템 설계 및 구축.
(3) 객체지향 방법론
- 현실 세계를 "객체"로 나누어 각각의 역할을 부여.
- 재사용성과 유지보수성이 높음.
- 데이터를 은닉하고, 객체 간 메시지를 통해 상호작용.
객체지향의 주요 원칙:
- 캡슐화: 데이터와 기능을 하나로 묶음.
- 상속성: 상위 객체의 특성을 하위 객체가 물려받음.
- 다형성: 하나의 기능을 다양한 형태로 구현.
(4) CBD(Component Based Development) 방법론
- 소프트웨어를 구성요소(컴포넌트)로 나누어 개발.
- 컴포넌트를 재사용해 효율성과 표준화를 높임.
단계:
- 요구사항 분석
- 컴포넌트 설계
- 컴포넌트 구현
- 컴포넌트 시험
(5) 애자일 방법론
- 고객 요구사항과 변화에 유연하게 대응.
- 소규모 팀이 짧은 주기로 작업을 반복하며 개발.
(6) 제품 계열 방법론
- 특정 제품에서 적용하고 싶은 공통된 기능을 개발하는 방법론
- 영역 공학(분석, 설계)과 응용 공학(구체적 설계 및 구현)으로 나뉨.
2. 소프트웨어 보안 개발 방법론
(1) 정의
- 소프트웨어 보안 취약점을 최소화하기 위해 체계적으로 설계된 개발 방법론.
(2) 대표적 방법론
- MS-SDL:
- 마이크로소프트가 개발한 보안 중심 개발 모델.
2. Seven Touchpoints:
보안을 위해 필요한 7가지 활동:
- 코드 검토
- 아키텍처 위험 분석
- 침투 테스트
- 위험 기반 보안 테스트
- 악용 사례
- 보안 요구
- 보안 운영
쉽게 정리하자면:
- 구조적 방법론은 논리적인 데이터 흐름을 설계.
- 정보공학 방법론은 업무 데이터를 분석해 설계.
- 객체지향 방법론은 현실 세계를 객체로 나누어 설계.
- CBD 방법론은 컴포넌트를 재사용해 개발.
- 보안 개발 방법론은 보안 취약점을 예방하며 소프트웨어를 개발하는 방식
이 페이지는 CLASP와 CWE라는 보안 관련 개념에 대해 다룹니다. 아래에 내용을 쉽고 자세히 정리했습니다:
3. CLASP (Comprehensive, Lightweight Application Security Process)
- 소프트웨어 개발 초기 단계에서 보안을 강화하기 위한 절차.
- 역할 기반의 프로세스로, 이미 운영 중인 시스템에도 적용 가능.
특징:
- 활동 기반으로 보안 작업을 분리.
5가지 관점:
- 개념: 보안 관련 기본 원칙과 개념.
- 역할: 각 작업의 책임과 담당자 정의.
- 활동 평가: 작업의 효과를 점검.
- 활동 구현: 실제 작업 실행.
- 취약성 관리: 시스템의 취약점을 분석하고 개선.
2. CWE (Common Weakness Enumeration)
- 소프트웨어의 보안 취약점을 체계적으로 분류하고, 개발자들이 이를 예방하도록 돕는 방식.
주요 취약점과 원인:
- 입력 데이터 검증 및 표현:
- 사용자의 입력값을 올바르게 검사하지 않아 발생.
2. 보안 기능 부족:
- 암호화 또는 인증 기능이 제대로 구현되지 않음.
3. 시간 및 상태 관리 미흡:
- 시스템이 병렬적으로 작동할 때 시간 및 상태를 적절히 관리하지 못함.
4. 에러 처리 문제:
- 에러 처리 중 중요한 정보가 노출될 위험.
5. 코드 유출:
- 코드에 민감한 데이터가 포함되었거나, 불필요한 로그가 포함됨.
6. 캡슐화 부족:
- 중요한 데이터가 충분히 보호되지 않아 외부에 노출됨.
7. API 오용:
- 취약한 API 설계 또는 잘못된 사용으로 인해 보안 문제가 발생.
요약
- CLASP는 초기 개발 단계에서 보안을 체계적으로 적용할 수 있도록 돕는 프로세스.
- CWE는 소프트웨어의 보안 취약점을 분류하고 문제를 예방하도록 가이드라인을 제공.
총정리
아래는 앞서 정리한 내용을 좀 더 쉽게 풀어쓴 설명입니다.
1. 소프트웨어의 종류와 역할
- 상용 소프트웨어
돈을 벌기 위해 만들어진 프로그램입니다.
- 예시: 우리가 사용하는 워드나 엑셀처럼, 회사에서 판매하는 프로그램들이에요.
- 특징: 보통 소스 코드(프로그램 내부의 코드는) 포함되지 않고, 라이선스(사용 권한)를 통해 배포됩니다.
- 응용 소프트웨어
특정한 작업을 쉽게 할 수 있도록 도와주는 프로그램입니다.
- 예시: 게임, 사진 편집 프로그램, 업무용 프로그램(ERP 등)이 이에 속해요.
- 특징: 어떤 일을 수행하기 위해 만들어졌기 때문에 목적이 분명해요.
- 시스템 소프트웨어
컴퓨터 자체를 관리하고 운영하는 프로그램입니다.
- 예시: Windows, macOS 같은 운영체제가 대표적이에요.
- 특징: 컴퓨터의 하드웨어(실제 부품)와 소프트웨어(프로그램)가 잘 작동하도록 연결해줍니다.
- 플랫폼 (Platform)
소프트웨어나 서비스가 실행되는 기반 환경입니다.
- 예시: 스마트폰의 Android나 iOS, 또는 웹서비스 환경(유튜브, 카카오톡 등)
- 특징: 프로그램들이 실행될 수 있도록 “무대”를 제공하는 역할을 해요.
2. 소프트웨어의 구성 요소와 구조
- 모듈 (Module)
프로그램을 여러 개의 작은 부품(조각)으로 나눈 것
- 예시: 로그인 기능만 따로 모듈로 만들어 여러 사이트에서 재사용하는 경우
- 특징: 한 부분만 수정해도 전체 프로그램에 영향을 줄 수 있어요.
- 라이브러리 (Library)
자주 사용되는 기능들을 미리 만들어 놓은 코드 모음
- 예시: 수학 계산, 날짜 처리 등을 도와주는 코드들
- 특징: 개발자가 일일이 코드를 작성하지 않아도 되게 만들어 시간을 절약해줘요.
- 디자인 패턴 (Design Pattern)
프로그램을 만들 때 자주 발생하는 문제를 해결하기 위한 “정해진 방법”
- 예시: 싱글톤 패턴(하나의 객체만 생성하도록 보장하는 방법)
- 특징: 문제 해결을 위한 좋은 습관이나 규칙처럼 생각하면 돼요.
- 프레임워크 (Framework)
프로그램을 만들 때 기본 뼈대를 제공해주는 도구
- 예시: 웹사이트를 쉽게 만들 수 있게 도와주는 리액트나 Vue 같은 도구
- 특징: 개발자가 핵심 기능에 집중할 수 있게 반복되는 작업은 대신 처리해줘요.
- 소프트웨어 아키텍처 (Architecture)
프로그램 전체의 설계도, 큰 그림이라고 생각하면 돼요.
- 특징: 프로그램이 어떻게 구성되고, 나중에 어떻게 확장될지 미리 계획하는 단계예요.
- 컴포넌트 (Component)
독립적으로 작동할 수 있는 작은 부품
- 예시: 웹페이지의 버튼, 입력창 같은 UI 요소
- 특징: 여러 컴포넌트를 조합해서 하나의 완성된 프로그램을 만들 수 있어요.
3. 소프트웨어 개발 과정과 방법론
- 소프트웨어 개발 수명 주기 (SDLC)
프로그램을 만들 때 거치는 단계들을 말해요.
단계:
- 계획 및 요구분석: 어떤 프로그램을 만들지, 필요한 기능은 무엇인지 조사해요.
- 설계: 프로그램의 전체 구조와 각 부분의 역할을 정해요.
- 구현 (개발): 실제 코드를 작성해 프로그램을 만들어요.
- 시험 (테스트): 프로그램이 제대로 작동하는지 확인하고, 문제를 찾아내서 고쳐요.
- 유지보수: 프로그램이 사용되는 동안 발생하는 문제들을 해결하고 업데이트해요.
개발 모델
- 폭포수 모델: 각 단계를 차례대로 진행해, 한 번 끝나면 다시 돌아가기 어려워요.
비유: 계단을 한 단계씩 올라가는 느낌.
- 프로토타입 모델: 작은 시제품(프로토타입)을 만들어 보고, 사용자 의견을 반영해 수정해요.
비유: 초안 그림을 그려보고, 수정해 최종 그림을 완성하는 것.
- 나선형 모델: 위험이나 문제점을 미리 분석하면서 반복적으로 조금씩 완성해요.
비유: 미끄럼틀을 탈 때, 여러 번 연습하면서 안전하게 타는 것.
- 애자일 모델: 짧은 기간(몇 주)마다 조금씩 만들어보고, 계속 개선해요.
예시: 스크럼이나 XP 같은 방법들이 있어요.
- 스크럼은 팀 전체의 작업 관리와 협업을 강화하는 데 중점을 두고,
- XP는 실제 코딩 방식과 기술적 실천을 통해 소프트웨어 품질을 높이는 데 집중한다고 볼 수 있습니다.
비유: 레고 블록을 하나씩 쌓으면서 완성해 가는 느낌.
4. 소프트웨어 보안 개발
- 프로그램이 해킹이나 오류로부터 안전해야 하기 때문에, 처음부터 보안에 신경 써서 개발해야 해요.
주요 보안 개발 방법
- MS-SDL: 마이크로소프트에서 만든 보안에 집중한 개발 방법이에요.
- CLASP: 프로그램을 만들 때, 처음부터 “보안”이라는 부분을 나누어 맡은 사람들이 책임지고 작업하게 하는 방법이에요.
- CWE: 프로그램에서 발생할 수 있는 보안 취약점을 목록으로 만들어서, 개발자가 어떤 문제를 조심해야 하는지 알려줘요.
'정처기' 카테고리의 다른 글
UI 요구사항 (0) | 2025.02.11 |
---|---|
UML (0) | 2025.02.11 |
요구사항 확인 (0) | 2025.02.11 |
소프트웨어 개발 환경 분석 (0) | 2025.02.11 |
소프트웨어 개발 방법론 테일러링 (0) | 2025.02.11 |