Learning
토픽 15 / 21·과목별 관계도

소프트웨어공학 관계도

💡

이 관계도는 전체 토픽의 구조와 연결 관계를 보여줍니다. 학습 전에 전체 흐름을 파악하세요.

토픽 마인드맵
mindmap
  root((소프트웨어공학<br/>136개 토픽))
    소프트웨어공학 기초
      소프트웨어공학
      소프트웨어 위기
    SDLC
      전통적 방법론
        SDLC
        폭포수 모델
        V-Model
        나선형 모델
        프로토타이핑 모델
        반복적/점진적 개발
        RAD
        개발방법론 테일러링
      애자일
        애자일
        애자일 선언문
        스크럼
          스크럼
          스크럼 역할
          스크럼 이벤트
          스크럼 산출물
          스토리 포인트
          번다운 차트
          Definition of Done
          INVEST
        칸반
        XP
        린 소프트웨어 개발
        가치 흐름 매핑
        확장 애자일 프레임워크
      DevOps
        DevOps
        IaC
        SRE
        CI
        CD
        배포 전략
        무중단 배포 전략
        피처 플래그
        피처 토글
        DORA Metrics
        Trunk-Based Development
    요구공학
      요구공학
      요구사항 도출
      요구사항 명세서
      유스케이스
      사용자 스토리
      비기능 요구사항
      요구사항 추적 매트릭스
      요구사항 변경 관리
    아키텍처/설계
      소프트웨어 아키텍처
      4+1 View
      이벤트 기반 아키텍처
      계층형 아키텍처
      UML
        UML
        클래스 다이어그램
        시퀀스 다이어그램
        활동 다이어그램
        상태 다이어그램
      디자인 패턴
      GoF 디자인 패턴 심화
      SOLID 원칙
      MVC / MVP / MVVM
      DI / IoC
      응집도와 결합도
      Clean Architecture
      아키텍처 평가 방법론
    테스트
      테스트 기본
        소프트웨어 테스트
        테스트 수준
        블랙박스 테스트
        경계값 분석 / 동등 분할
        화이트박스 테스트
        테스트 피라미드
        E2E 테스트
        테스트 커버리지
      테스트 자동화
        테스트 자동화
        TDD
        TDD 사이클
        BDD
        SIL/HIL 테스팅
      고급 테스트
        Property-Based Testing
        계약 테스트(Contract Testing)
        Mutation Testing
        카오스 엔지니어링(Chaos Engineering)
        소프트웨어 테스트 심화
    품질
      소프트웨어 품질
      ISO 25010
      CMMI
      코드 리뷰
      코드 리뷰 베스트 프랙티스
      기술 부채
      리팩토링
      리팩토링 기법
      3R
      소프트웨어 영향평가
      UX 설계 / 사용성 평가
      Code Smell
      Static Code Analysis
      SW 안전성 분석
      SAST/DAST
      SonarQube
      소프트웨어 메트릭
      QC 7도구
      정형 기법
    형상관리
      형상관리
      형상 통제 위원회(CCB)
      Git
      Git 브랜치 전략
      Monorepo vs Polyrepo
    마이크로서비스/API
      마이크로서비스 아키텍처
      API Gateway
      서킷 브레이커
      API 설계
        API 설계
        API Versioning
        OpenAPI
      DDD
        DDD
        DDD 전략적/전술적 설계
        Bounded Context / Context Map
      12-Factor App
      Event Storming
    표준/인증
      국제 표준
        ISO 12207
        ISO 15504
        ISO 9001
        IEEE 830
        IEEE 1471
      국내 표준/인증
        소프트웨어진흥법
        SW사업 대가산정 가이드
        기능점수
        COCOMO
        GS인증
        SP인증
        전자정부 표준프레임워크
        전자정부법
        오픈소스 라이선스
    프로그래밍 패러다임
      프로그래밍 패러다임
      객체지향 프로그래밍
      함수형 프로그래밍
      타입 시스템
      리액티브 프로그래밍
      DSL
    최신 기법
      페어 프로그래밍(Pair Programming)
      몹 프로그래밍(Mob Programming)
      기술 스파이크
      로우코드/노코드
      시민 개발자
      조합성
      내부 개발자 플랫폼(IDP)
      그린 소프트웨어 엔지니어링

주요 카테고리별 토픽 수

카테고리토픽 수주요 기술
소프트웨어공학 기초2개소프트웨어공학, 소프트웨어 위기
SDLC - 전통적 방법론8개폭포수, V-Model, 나선형, 프로토타이핑, RAD, 테일러링
SDLC - 애자일14개애자일, 스크럼, 칸반, XP, 린, VSM, 확장 애자일
SDLC - DevOps11개DevOps, IaC, SRE, CI/CD, 배포 전략, 무중단 배포, DORA Metrics, Trunk-Based
요구공학8개요구사항 도출, SRS, 유스케이스, 사용자 스토리, RTM, 변경 관리
아키텍처/설계14개아키텍처, 4+1 View, EDA, UML, 디자인 패턴, GoF, SOLID, MVC/MVP/MVVM, DI/IoC, Clean Architecture
테스트14개테스트 수준, BVA/EP, TDD, BDD, SIL/HIL, 테스트 피라미드, E2E, 카오스 엔지니어링
품질18개ISO 25010, CMMI, 코드 리뷰, 리팩토링, 3R, SAST/DAST, SonarQube, QC 7도구, 정형 기법
형상관리5개Git, 브랜치 전략, CCB, Monorepo
마이크로서비스/API10개MSA, API Gateway, 서킷 브레이커, DDD, 12-Factor App, Event Storming
표준/인증 - 국제5개ISO 12207, ISO 15504, IEEE 830
표준/인증 - 국내9개GS인증, SP인증, 기능점수, COCOMO, 오픈소스 라이선스
프로그래밍 패러다임6개OOP, FP, 타입 시스템, 리액티브, DSL
최신 기법8개페어/몹 프로그래밍, 기술 스파이크, 로우코드/노코드, IDP, 그린 SW

총 136개 토픽: (기존 90개 대비 46개 추가)

핵심 연관 관계

SDLC 진화

폭포수 모델 (순차적)
    ↓
V-Model (테스트 강조)
    ↓
나선형 모델 (위험 관리)
    ↓
반복적/점진적 개발
    ↓
애자일 (고객 중심, 빠른 피드백)
    ↓
DevOps (개발+운영 통합)
    ↓
SRE (신뢰성 엔지니어링)

애자일 방법론

애자일 선언문 (원칙)
    ↓
스크럼 (프레임워크)
  ├─ 역할: Product Owner, Scrum Master, Dev Team
  ├─ 이벤트: Sprint, Daily Standup, Retrospective
  └─ 산출물: Product Backlog, Sprint Backlog, Increment

칸반 (시각화, WIP 제한)
  └─ 가치 흐름 매핑 (VSM)

XP (Extreme Programming)
  ├─ Pair Programming / Mob Programming
  ├─ TDD
  └─ Continuous Integration

린 (낭비 제거)
  └─ 가치 흐름 매핑 (VSM)

확장 애자일 (SAFe, LeSS, Nexus)

DevOps 파이프라인

코드 작성
    ↓
CI (Continuous Integration)
  ├─ 자동 빌드
  ├─ 자동 테스트
  └─ 코드 품질 검사 (SonarQube, SAST/DAST)
    ↓
CD (Continuous Delivery/Deployment)
  ├─ 배포 전략 (Blue-Green, Canary, Rolling)
  ├─ 무중단 배포
  └─ 피처 플래그
    ↓
IaC (Terraform, Ansible)
    ↓
모니터링 / 피드백
  ├─ SRE (SLI/SLO/SLA)
  └─ DORA Metrics

요구공학 프로세스

요구사항 도출 (Elicitation)
  ├─ 인터뷰, 설문, 관찰
  └─ 브레인스토밍
    ↓
요구사항 분석
  ├─ 유스케이스 (Use Case)
  └─ 사용자 스토리 (User Story)
    ↓
요구사항 명세 (SRS)
  └─ 비기능 요구사항
    ↓
요구사항 검증
  └─ 요구사항 추적 매트릭스 (RTM)
    ↓
요구사항 변경 관리

UML 다이어그램

구조 다이어그램
  ├─ 클래스 다이어그램 (정적 구조)
  ├─ 객체 다이어그램
  ├─ 컴포넌트 다이어그램
  └─ 배치 다이어그램

행위 다이어그램
  ├─ 시퀀스 다이어그램 (시간 순서)
  ├─ 유스케이스 다이어그램
  ├─ 활동 다이어그램 (흐름)
  └─ 상태 다이어그램 (상태 전이)

아키텍처 패턴

소프트웨어 아키텍처
  ├─ 4+1 View Model
  ├─ 계층형 아키텍처 (Layered)
  ├─ 이벤트 기반 아키텍처 (EDA)
  ├─ Clean Architecture
  └─ MVC / MVP / MVVM

아키텍처 평가 방법론 (ATAM, SAAM)

SOLID 원칙

S: Single Responsibility (단일 책임)
O: Open-Closed (개방-폐쇄)
L: Liskov Substitution (리스코프 치환)
I: Interface Segregation (인터페이스 분리)
D: Dependency Inversion (의존성 역전)
  └─ DI / IoC (의존성 주입)

테스트 레벨

단위 테스트 (Unit Test)
    ↓
통합 테스트 (Integration Test)
    ↓
시스템 테스트 (System Test)
    ↓
인수 테스트 (Acceptance Test)

테스트 피라미드: Unit(많음) → Integration(중간) → E2E(적음)

테스트 주도 개발

TDD (Test-Driven Development)
  1. Red: 실패하는 테스트 작성
  2. Green: 테스트 통과하는 최소 코드
  3. Refactor: 코드 개선

BDD (Behavior-Driven Development)
  └─ Given-When-Then (시나리오 기반)

품질 모델

ISO 25010 (SQuaRE)
  ├─ 기능 적합성
  ├─ 성능 효율성
  ├─ 호환성
  ├─ 사용성
  ├─ 신뢰성
  ├─ 보안성
  ├─ 유지보수성
  └─ 이식성

SW 안전성 분석
  ├─ FTA (결함 수 분석)
  ├─ FMEA (고장 모드 영향 분석)
  └─ HAZOP (위험성 및 운전 분석)

CMMI 성숙도 레벨

Level 1: Initial (초기)
    ↓
Level 2: Managed (관리)
    ↓
Level 3: Defined (정의)
    ↓
Level 4: Quantitatively Managed (정량 관리)
    ↓
Level 5: Optimizing (최적화)

코드 품질 관리

기술 부채
  ├─ Code Smell (감지)
  ├─ Static Code Analysis (자동 분석)
  │   ├─ SonarQube
  │   └─ SAST/DAST
  ├─ 코드 리뷰 (수동 검토)
  │   └─ 코드 리뷰 베스트 프랙티스
  └─ 리팩토링 (개선)
      └─ 리팩토링 기법

소프트웨어 메트릭 (정량 측정)
정형 기법 (수학적 검증)

Git 브랜치 전략

Git Flow
  ├─ main (프로덕션)
  ├─ develop (개발)
  ├─ feature/* (기능)
  ├─ release/* (릴리스)
  └─ hotfix/* (긴급 수정)

GitHub Flow (간소화)
  ├─ main
  └─ feature 브랜치 → PR → main

Trunk-Based Development
  └─ main (짧은 수명 브랜치)

Monorepo vs Polyrepo (저장소 전략)

마이크로서비스 아키텍처

모놀리식 (단일 배포 단위)
    ↓
마이크로서비스 (독립 배포)
  ├─ 서비스 분해 (Domain-Driven Design)
  │   ├─ 전략적 설계 (Bounded Context, Context Map)
  │   └─ 전술적 설계 (Entity, Aggregate, Repository)
  ├─ API Gateway
  ├─ 서킷 브레이커 (장애 격리)
  ├─ 서비스 간 통신 (REST, gRPC, 이벤트)
  ├─ Event Storming (도메인 발견)
  └─ 12-Factor App

DDD (Domain-Driven Design)

전략적 설계
  ├─ Bounded Context (경계 컨텍스트)
  ├─ Ubiquitous Language (공통 언어)
  └─ Context Map

전술적 설계
  ├─ Entity, Value Object
  ├─ Aggregate (집합체)
  ├─ Repository
  └─ Domain Event

Event Storming (도메인 이벤트 발견)

API 설계 진화

REST API
    ↓
API Versioning (v1, v2)
    ↓
OpenAPI (Swagger) - 명세 표준화
    ↓
API Gateway (라우팅/인증/제한)

소프트웨어 표준

국제 표준
  ├─ ISO 12207 (소프트웨어 생명주기)
  ├─ ISO 15504 (SPICE, 프로세스 평가)
  ├─ ISO 9001 (품질 경영)
  ├─ IEEE 830 (SRS 표준)
  └─ IEEE 1471 (아키텍처 기술)

국내 표준
  ├─ GS인증 (Good Software)
  ├─ SP인증 (Software Process)
  ├─ 전자정부 표준프레임워크
  └─ 전자정부법

규모 산정
  ├─ 기능점수 (Function Point)
  └─ COCOMO (비용 산정)

오픈소스 라이선스 (GPL, MIT, Apache 등)

프로그래밍 패러다임

객체지향 프로그래밍 (OOP)
  ├─ 캡슐화, 상속, 다형성, 추상화
  └─ SOLID 원칙

함수형 프로그래밍 (FP)
  ├─ 순수 함수, 불변성, 고차 함수
  └─ 모나드, 펑터

리액티브 프로그래밍
  └─ 비동기 스트림, 백프레셔

타입 시스템 (정적/동적, 강타입/약타입)

DSL (도메인 특화 언어)

DORA Metrics

DevOps 성과 측정 4대 지표
  ├─ Deployment Frequency (배포 빈도)
  ├─ Lead Time for Changes (변경 리드 타임)
  ├─ Change Failure Rate (변경 실패율)
  └─ Time to Restore Service (서비스 복구 시간)

최신 개발 기법

페어 프로그래밍 (2인 1조)
    ↓
몹 프로그래밍 (팀 전체)

기술 스파이크 (불확실성 해소)

로우코드/노코드 → 시민 개발자

조합성 (Composability)
내부 개발자 플랫폼 (IDP)
그린 소프트웨어 엔지니어링

학습 순서 추천

1단계: 기초

1. 소프트웨어공학 개요

2. 소프트웨어 위기

3. SDLC

2단계: 전통적 방법론

4. 폭포수 모델

5. V-Model

6. 나선형 모델

7. 프로토타이핑 모델

8. 개발방법론 테일러링

3단계: 애자일

9. 애자일 선언문

10. 스크럼 (역할, 이벤트, 산출물)

11. 칸반

12. XP

13. 린 소프트웨어 개발, 가치 흐름 매핑

14. 확장 애자일 프레임워크 (SAFe, LeSS)

4단계: DevOps

15. DevOps 개념

16. CI/CD

17. 배포 전략, 무중단 배포

18. IaC, SRE

19. DORA Metrics, Trunk-Based Development

5단계: 요구공학

20. 요구사항 도출

21. 유스케이스, 사용자 스토리

22. SRS, 비기능 요구사항

23. 요구사항 추적 매트릭스, 변경 관리

6단계: 설계

24. 소프트웨어 아키텍처, 4+1 View

25. UML (클래스, 시퀀스, 활동, 상태)

26. 디자인 패턴, GoF 심화

27. SOLID 원칙, DI/IoC

28. 응집도와 결합도

29. MVC/MVP/MVVM

30. Clean Architecture, 계층형/이벤트 기반 아키텍처

31. 아키텍처 평가 방법론

7단계: 테스트

32. 테스트 수준, 테스트 피라미드

33. 블랙박스/화이트박스, 경계값 분석

34. TDD, BDD

35. E2E 테스트, 테스트 커버리지

36. SIL/HIL 테스팅

37. Property-Based Testing, Contract Testing, Mutation Testing

38. Chaos Engineering

8단계: 품질

39. 소프트웨어 품질, ISO 25010

40. CMMI

41. 코드 리뷰, 코드 리뷰 베스트 프랙티스

42. 기술 부채, Code Smell

43. 리팩토링, 리팩토링 기법

44. Static Code Analysis, SAST/DAST, SonarQube

45. 소프트웨어 메트릭, QC 7도구

46. SW 안전성 분석, 정형 기법

47. 3R, 소프트웨어 영향평가

48. UX 설계 / 사용성 평가

9단계: 형상관리

49. 형상관리, CCB

50. Git, Git 브랜치 전략

51. Monorepo vs Polyrepo

10단계: 마이크로서비스/API

52. 마이크로서비스 아키텍처

53. API Gateway, 서킷 브레이커

54. DDD, 전략적/전술적 설계, Bounded Context

55. 12-Factor App

56. API 설계, API Versioning, OpenAPI

57. Event Storming

11단계: 표준/인증

58. ISO 12207, ISO 15504, ISO 9001

59. IEEE 830, IEEE 1471

60. GS인증, SP인증

61. 기능점수, COCOMO

62. 전자정부 표준프레임워크, 전자정부법

63. 소프트웨어진흥법, SW사업 대가산정 가이드

64. 오픈소스 라이선스

12단계: 프로그래밍 패러다임

65. 프로그래밍 패러다임 개요

66. 객체지향 프로그래밍

67. 함수형 프로그래밍

68. 타입 시스템

69. 리액티브 프로그래밍

70. DSL

13단계: 최신 기법

71. 페어 프로그래밍, 몹 프로그래밍

72. 기술 스파이크

73. 로우코드/노코드, 시민 개발자

74. 조합성, 내부 개발자 플랫폼 (IDP)

75. 그린 소프트웨어 엔지니어링

시험 출제 포인트

고빈도 주제

  • 폭포수 vs 애자일: 차이점, 장단점
  • 스크럼: 역할(PO, SM, Dev Team), 이벤트(Sprint, Daily, Retrospective)
  • CI/CD: 개념, 차이점, 도구
  • 유스케이스 vs 사용자 스토리: 형식, 사용 시점
  • SOLID 원칙: 5가지 원칙 의미
  • TDD: Red-Green-Refactor 사이클
  • Git 브랜치 전략: Git Flow, GitHub Flow, Trunk-Based
  • 개발방법론 테일러링: 기준, 절차, 적용 사례

중요 개념

  • V-Model: 테스트와 개발 단계 매핑
  • 나선형 모델: 위험 분석 중심
  • 칸반: WIP 제한, 풀 시스템
  • 요구사항 명세서 (SRS): IEEE 830 표준
  • 요구사항 추적 매트릭스 (RTM): 추적성 확보
  • UML: 클래스, 시퀀스, 활동, 상태 다이어그램
  • 테스트 레벨: 단위→통합→시스템→인수
  • CMMI: 5단계 성숙도 레벨
  • 응집도와 결합도: 높은 응집도, 낮은 결합도
  • 4+1 View: 논리뷰, 개발뷰, 프로세스뷰, 물리뷰, 시나리오
  • DI/IoC: 의존성 주입, 제어 역전
  • MVC/MVP/MVVM: UI 아키텍처 패턴 비교

고급 주제

  • 마이크로서비스: 서비스 분해, API Gateway, 서킷 브레이커
  • DDD: Bounded Context, Aggregate, Event Storming
  • 12-Factor App: 12가지 원칙
  • 배포 전략: Blue-Green, Canary, Rolling, 무중단 배포
  • 피처 플래그: 기능 토글, A/B 테스트
  • DORA Metrics: DevOps 성과 측정
  • Chaos Engineering: 장애 주입 테스트
  • IaC: Terraform, Ansible, 선언적 vs 명령적
  • SRE: SLI/SLO/SLA, Error Budget
  • Clean Architecture: 의존성 규칙
  • 이벤트 기반 아키텍처: EDA, 이벤트 소싱
  • 아키텍처 평가: ATAM, SAAM

테스트 심화

  • 테스트 피라미드: Unit → Integration → E2E
  • 경계값 분석 / 동등 분할: 테스트 케이스 설계
  • SIL/HIL: 시뮬레이션 기반 테스트
  • Property-Based Testing: 속성 기반 자동 테스트
  • Contract Testing: API 계약 검증
  • Mutation Testing: 테스트 품질 측정
  • 테스트 커버리지: 구문, 분기, 조건 커버리지

품질/코드 관리

  • 기술 부채: 원인, 관리, 상환 전략
  • Code Smell: 감지 패턴, 리팩토링 연계
  • SAST/DAST: 보안 테스트 자동화
  • SonarQube: 정적 분석 도구
  • 3R: 역공학, 재공학, 재사용
  • SW 안전성 분석: FTA, FMEA, HAZOP
  • 정형 기법: Z 명세, Petri Net
  • 소프트웨어 메트릭: 복잡도, 크기, 품질 측정

표준/인증

  • ISO 12207: 소프트웨어 생명주기 프로세스
  • ISO 25010: 품질 특성 8가지
  • GS인증: Good Software 인증
  • 기능점수: FP 기반 규모 산정
  • COCOMO: 비용 산정 모델
  • 전자정부 표준프레임워크: 공통 컴포넌트
  • 오픈소스 라이선스: GPL, MIT, Apache 차이

프로그래밍 패러다임

  • 객체지향 vs 함수형: 패러다임 비교
  • 타입 시스템: 정적/동적, 강타입/약타입
  • 리액티브 프로그래밍: 비동기 스트림, 백프레셔
  • DSL: 내부/외부 DSL, 적용 사례

최신 기법

  • Trunk-Based Development: 짧은 브랜치 수명
  • 페어/몹 프로그래밍: 협업 개발 기법
  • Static Code Analysis: 정적 분석 도구
  • 기술 스파이크: 불확실성 해소 기법
  • 로우코드/노코드: 시민 개발자, 플랫폼
  • 내부 개발자 플랫폼 (IDP): 플랫폼 엔지니어링
  • 그린 소프트웨어: 탄소 효율적 소프트웨어

마인드맵 활용 팁:

  • SDLC는 폭포수→애자일→DevOps→SRE 진화 관점에서 학습
  • 스크럼은 역할-이벤트-산출물 3축으로 암기
  • SOLID 원칙은 예제 코드와 함께 이해
  • TDD는 실제 코드 작성으로 연습
  • Git 브랜치 전략은 프로젝트 규모별 선택 기준 파악
  • 마이크로서비스는 모놀리식과 비교하여 학습
  • 표준/인증은 국제(ISO/IEEE)와 국내(GS/SP) 구분
  • 테스트는 레벨(단위→인수)과 피라미드(Unit→E2E) 함께 이해
  • 품질 관리는 감지(Code Smell)→분석(Static Analysis)→개선(Refactoring) 흐름으로 학습
  • 프로그래밍 패러다임은 OOP vs FP 비교 중심으로 정리
  • 최신 기법은 기존 개념과 연계하여 출제 트렌드 파악