콘텐츠로 바로가기

Software Engineering & DevOps

고품질 소프트웨어의 생명주기 관리부터 자동화된 빌드/배포 및 안정적 운영 체계를 정의하는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

software-engineering-devopssoftware-engineeringdev-opssdlcrequirementslearningdevopsgit11 min read

1. Overview

소프트웨어 엔지니어링 및 데브옵스(Software Engineering & DevOps, SED)는 요구사항 도출부터 설계, 구현, 검증, 배포, 그리고 지속 가능한 운영에 이르는 **전체 소프트웨어 생명주기(SDLC)**의 자동화와 고도화를 다룹니다. 본 카테고리는 견고한 소프트웨어를 설계하는 공학적 방법론(Clean Code, TDD, Design Patterns)과, 개발(Dev)과 운영(Ops)의 경계를 허물고 신뢰성을 확보하는 기술 체계(CI/CD, IaC, SRE)를 탐구합니다.

CS2023의 Software Development Process (SEP) 지식 영역과 SWEBOK v4.0을 근간으로 삼아, 단순한 기능 구현을 넘어 비즈니스 가치를 안정적이고 신속하게 전달하기 위한 엔지니어링 표준을 체계적으로 다룹니다.

과거의 SED가 코드 작성 규약과 수동 배포에 그쳤다면, 현대의 SED는 플랫폼 엔지니어링(Platform Engineering), 인프라의 완벽한 코드화(IaC), 그리고 SLI/SLO 지표 기반의 데이터 주도 운영을 지향하는 SRE(Site Reliability Engineering) 패러다임으로 진화하고 있습니다. 이는 1~8번 Pillar에서 다룬 개별 기술 요소들을 실제 서비스로 통합하여 고객에게 전달하는 파이프라인(Pipeline) 그 자체입니다.

2. Scope & Boundaries

In-Scope

  • 소프트웨어 프로세스 및 아키텍처: Agile/Scrum 방법론, 도메인 주도 설계(DDD), 클린 아키텍처, SOLID 및 DRY/KISS 원칙.
  • 품질 관리 및 자동화 테스트: 단위/통합/E2E 테스트 피라미드, TDD(Test Driven Development), 정적 코드 분석(SAST, SonarQube).
  • 데브옵스(DevOps) 및 CI/CD: 버전 관리(Git Branching 전략), 빌드 및 배포 자동화(Jenkins, GitHub Actions), 컨테이너화(Docker), 무중단 배포(Blue-Green, Canary).
  • 운영 및 신뢰성(SRE): 인프라 프로비저닝 자동화(Terraform, Ansible), 관측 가능성(Observability: Logging, Metrics, Tracing), 장애 대응(Incident Management).

Out-of-Scope

  • UI/UX 디자인 및 사용자 심리: 와이어프레임 작성이나 A/B 테스트의 심리학적 결과 분석 → 12. HCIG 노드로 위임.
  • 물리적 보안 장비 설정: 방화벽 장비 펌웨어 업데이트나 물리적 망 분리 구성 → 10. SECR 노드로 위임.
  • 언어별 인터널 최적화: 특정 언어(예: Java JVM)의 런타임 메모리 단편화 최적화 상세 → 05. PL&C 노드로 위임.

Boundaries

  • SED는 시스템의 '정적인 결과물(코드 자체)'보다 **'코드가 만들어지고 배포되어 가치를 창출하는 동적 프로세스'**와 **'코드의 지속 가능성(Maintainability)'**을 입체적으로 관리하는 것에 집중합니다.
  • SADS(07)가 '무엇을 어떻게 배치할 것인가(Architecture)'를 결정한다면, SED는 '그 구조를 어떻게 안전하게 릴리스하고 모니터링할 것인가(Pipeline & Ops)'를 책임집니다.

3. Counterexample

  • 단순한 빌드 도구 튜토리얼 따라하기: JenkinsGitHub Actions 템플릿을 복사하여 빌드에 성공하는 것은 도구 활용 단계입니다. 코드 커밋 시점부터 프로덕션 배포까지의 **인도 소요 시간(Lead Time)**을 측정하고, 파이프라인의 병목 지점을 진단하여 테스트 병렬화를 설계하는 것이 SED의 핵심입니다.
  • 기능 구현 위주의 맹목적 코딩: '동작하는 코드'를 만드는 것만으로는 부족합니다. 3년 뒤에 입사한 동료가 읽고 안전하게 수정할 수 있도록, **응집도(Cohesion)**를 높이고 **결합도(Coupling)**를 낮춘 설계(예: 의존성 주입)를 코드 리뷰를 통해 검증해야만 엔지니어링입니다.
  • 인프라 템플릿의 수동 조작: 클라우드 콘솔 창에서 마우스를 클릭해 서버를 배포하는 것은 수작업입니다. 동일한 서버 100대를 1분 만에 오차 없이 띄울 수 있도록 모든 설정을 **코드화(IaC: Terraform)**하고 버전으로 관리(GitOps)해야 합니다.

4. Prerequisites

  • 기초 프로그래밍 패러다임 (Basic): 객체 지향 프로그래밍(OOP) 특성과 다형성(Polymorphism)을 통한 추상화 개념 이해. (P1)
  • 운영체제 및 시스템 (Recommended): 프로세스 고립, 파일 시스템 권한 메커니즘 및 자동화를 위한 셸 스크립팅(Bash) 기초. (P1)
  • 네트워크 기초 (Practical): HTTP 상태 코드, 로드 밸런서(L4/L7) 역할, DNS 라우팅 구조 등 무중단 배포 네트워크 환경 파악. (P1)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 SDLC & Agile Methodology 소프트웨어 기획부터 배포까지의 전체 생명주기(SDLC)를 이해하고, 애자일(Agile)/린(Lean) 방법론을 통해 피드백 루프와 인도 소요 시간(Lead Time)을 단축합니다. P2
2 Requirements & Architecture Design 비즈니스 요구사항을 추상화하여 명확한 엔지니어링 명세로 변환하고, 도메인 주도 설계(DDD)와 UML을 활용해 결합도가 낮은 시스템 구조를 설계합니다. P2/Design
3 Code Quality & QA Automation 클린 코드 원칙과 TDD(Test Driven Development), 테스트 피라미드를 적용하여 결함을 사전에 검증하고 코드 변경 시 부수 효과를 차단합니다. P2
4 DevOps Pipeline & SRE CI/CD 파이프라인과 코드형 인프라(IaC)를 통한 배포 자동화를 구현하고, SLI/SLO 지표 기반의 관측 가능성(Observability)으로 서비스 신뢰성을 공학적으로 보장합니다. P5
5 VCS & Technical Debt Management 브랜치 전략(GitFlow, Trunk-based)을 통한 대규모 협업 효율을 극대화하고, 레거시 시스템 리팩토링 및 기술 부채를 체계적으로 관리합니다. P2
6 Software Assurance & Evolution 정적/동적 보안 취약점 스캐닝(SAST/DAST) 도구를 통합하고, 유의적 버전(Semantic Versioning) 정책을 통해 하위 호환성을 유지하며 소프트웨어를 안전하게 진화시킵니다. Industry/Compliance

6. Learning Topics

Basic

Core Topic 01: 소프트웨어 생명주기와 프로세스 (SDLC & Methodology)

  • Why to Learn: 소프트웨어가 아이디어에서 실제 가치로 변환되는 전체 흐름(Value Stream)을 가시화하여 개발 프로세스의 병목 구간을 제거하고 시장 진입 속도를 높이기 위함입니다.
  • What to Learn:
    • Concepts: Waterfall 모델의 한계, Agile 선언문, Lean/Kanban의 지속적 흐름(Continuous Flow)과 WIP(Work In Progress) 제한, 스크럼(Scrum) 프레임워크.
    • Skills: 스프린트 플래닝(Sprint Planning) 및 백로그(Backlog) 관리, 인도 소요 시간(Lead Time) 및 주기 시간(Cycle Time) 측정과 개선.
    • Tools: Jira, Linear, GitHub Issues, Agile Metrics Dashboard.
    • Trade-offs: 계획 위주의 엄격한 관리(예측 가능성 증대) vs 변화 수용 위주의 애자일(초기 요구사항 변동성에 따른 일정 지연 위험).
  • How to Learn:
    • 1단계: 개인 또는 팀 프로젝트에 칸반(Kanban) 보드를 도입하여 기능별 상태(To-do, Doing, Review, Done)를 정의하고 특정 열(Column)에 병목이 생기는 현상을 분석합니다.
    • 2단계: 피드백 루프의 길이를 단축하기 위해 일일 스탠드업(Daily Stand-up) 미팅과 회고(Retrospective)의 공학적/조직적 효과성을 워크플로우에 적용합니다.
  • Implement: 기획부터 배포까지의 흐름을 정의하고 WIP 한계가 설정된 팀 애자일 프로세스 운영 가이드.

Core Topic 02: 요구사항 명세 및 시스템 설계 (Requirements & Architecture)

  • Why to Learn: 모호한 요구사항 해석으로 인한 대규모 재작업(Rework) 비용을 막고, 미래의 요구사항 변경에 유연하게 대응할 수 있는 가독성 높은 시스템 구조를 설계하기 위함입니다.
  • What to Learn:
    • Concepts: 기능적(Functional) vs 비기능적(Non-functional) 요구사항, UML(Unified Modeling Language) 모델링, 도메인 주도 설계(DDD), 유비쿼터스 언어(Ubiquitous Language).
    • Skills: 요구사항의 모호성 제거(Clarification) 기법, 컴포넌트 간 결합도(Coupling) 최소화 및 응집도(Cohesion) 극대화 설계.
    • Tools: Flowcharts(draw.io, Mermaid), Sequence Diagrams, ADR(Architecture Decision Records).
    • Trade-offs: 상세한 업프론트(Up-front) 설계(초기 시간 소모) vs 문서 없는 민첩한 개발(장기적 기술 부채 축적).
  • How to Learn:
    • 1단계: 텍스트로 서술된 복잡한 비즈니스 정책(예: 환불 규정)을 보고 시스템의 행위와 예외 상황을 시퀀스 다이어그램으로 완결성 있게 표현해 봅니다.
    • 2단계: 의사결정의 배경과 대안, 최종 선택의 이유(Trade-offs)를 논리적으로 기록하는 ADR 문서를 직접 작성하여 설계 히스토리를 자산화합니다.
  • Implement: 신규 피처(Feature) 도입 시 관련 도메인 엔티티의 상태 변화를 정의한 시스템 설계 명세서 및 OpenAPI 스펙(Swagger).

Practical

Core Topic 03: 코드 품질, QA 및 테스트 자동화 (Code Quality & QA)

  • Why to Learn: 수동 검증의 한계와 휴먼 에러를 극복하고, 기존 코드를 수정할 때 발생하는 의도치 않은 부수 효과(Side-effect)를 자동화된 방식으로 사전에 차단하기 위함입니다.
  • What to Learn:
    • Concepts: Clean Code 원칙(가독성, 의도 표출), SOLID 원칙, 테스트 피라미드(Unit, Integration, E2E), TDD(Test Driven Development) 사이클(Red-Green-Refactor).
    • Skills: Mocking/Stubbing을 통한 외부 의존성 고립화 단위 테스트 작성, 효과적인 코드 리뷰(Code Review) 가이드라인 수립.
    • Tools: JUnit/Pytest/Jest 등 단위 테스트 프레임워크, SonarQube(정적 분석), Playwright/Cypress(E2E).
    • Trade-offs: 높은 테스트 커버리지 유지(개발 리소스 및 유지보수 비용 증가) vs 빠른 기능 출시(결함 검출 지연 및 버그 픽스 비용 기하급수적 증가).
  • How to Learn:
    • 1단계: 기존의 레거시 로직에 대해 엣지 케이스(Edge Case)를 포함한 단위 테스트를 작성하여 커버리지를 80% 이상으로 끌어올립니다.
    • 2단계: 정적 분석 도구(SonarQube)를 파이프라인에 연결하여 품질 임계량(Quality Gate)을 준수하지 못한(예: 복잡도가 너무 높은) PR(Pull Request)을 봇(Bot)이 차단하게 만듭니다.
  • Implement: 핵심 결제 모듈의 모든 예외 케이스를 커버하고 CI 파이프라인에서 1분 내에 수행되는 자동화된 테스트 슈트.

Core Topic 04: 데브옵스 파이프라인 및 신뢰성 공학 (DevOps & SRE)

  • Why to Learn: 배포 과정의 인위적 실수를 방지하여 시장 출시 속도를 높이고, 운영 중인 서비스의 가용성(Availability)을 감(Feeling)이 아닌 데이터(Data) 기반으로 관리하기 위함입니다.
  • What to Learn:
    • Concepts: CI/CD 파이프라인 아키텍처, IaC(Infrastructure as Code), 불변 인프라(Immutable Infrastructure), SRE(Site Reliability Engineering), SLI/SLO/SLA 지표, 에러 버짓(Error Budget).
    • Skills: 무중단 배포(Blue-Green, Canary, Rolling) 파이프라인 설계, 로그/메트릭 기반 관측성(Observability) 대시보드 구축.
    • Tools: GitHub Actions/GitLab CI, Docker/Kubernetes, Terraform(IaC), Prometheus/Grafana, Datadog.
    • Trade-offs: 배포 파이프라인의 고도화된 롤백(Rollback) 및 테스트 자동화(인프라 복잡도 증가) vs 수동 스크립트 배포(운영자 피로도 및 인적 오류 위험).
  • How to Learn:
    • 1단계: 코드 푸시부터 린트(Lint), 빌드, 테스트, 컨테이너 레지스트리 푸시, 서버 반영까지 전 과정을 사람이 개입하지 않는 완전 자동화 파이프라인으로 구현합니다.
    • 2단계: 서비스의 골든 시그널(Latency, Traffic, Errors, Saturation)을 모니터링 시스템에 정의하고, SLO를 위반했을 때 Slack으로 경고(Alert) 시스템을 구축합니다.
  • Implement: Terraform으로 프로비저닝된 인프라 환경 위에서 동작하는 무중단 CI/CD 파이프라인 및 서비스 상태 모니터링 대시보드.

Advanced

Core Topic 05: 형상 관리 및 운영 품질 고도화 (VCS & Maintenance)

  • Why to Learn: 수십 명 이상의 개발자가 동시 다발적으로 코드를 수정하는 대규모 조직에서 충돌을 최소화하고, 노후화된 레거시 시스템의 기술 부채(Technical Debt)를 체계적으로 상환하기 위함입니다.
  • What to Learn:
    • Concepts: Trunk-based Development vs GitFlow, Git 내부 스토리지 모델(Blob, Tree, Commit), 코드 스멜(Code Smell), 기술 부채의 사분면 모델.
    • Skills: 대규모 코드베이스의 점진적 리팩토링(Strangler Fig Pattern), 충돌 없는 머지(Merge)와 리베이스(Rebase) 전략 수립.
    • Tools: Advanced Git CLI(git bisect, git rebase -i), SonarGraph(의존성 분석), Feature Toggles(LaunchDarkly).
    • Trade-offs: 엄격한 브랜치 전략/코드 프리즈(안정성) vs 트렁크 기반 개발/피처 플래그(통합 비용 감소 및 배포 빈도 증가).
  • How to Learn:
    • 1단계: 복잡하게 얽힌 Git 히스토리를 대화형 리베이스(Interactive Rebase)를 통해 의미 단위로 정리하고 깔끔한 커밋 로그 스트림을 유지하는 실습을 합니다.
    • 2단계: 정적 분석기를 통해 코드 기여도와 수정 빈도(Churn rate)를 분석하여 기술 부채가 가장 심각한 '핫스팟(Hotspot)'을 찾아 개선 과제로 도출합니다.
  • Implement: 조직 규모에 최적화된 Git 브랜치 전략 설계안 및 레거시 모듈 현대화(Application Modernization) 로드맵.

Core Topic 06: 소프트웨어 보증 및 진화 (Assurance & Evolution)

  • Why to Learn: 보안 및 규제 준수가 필수적인 엔터프라이즈 환경에서 소프트웨어의 공급망(Supply Chain) 안전성을 증명하고 하위 호환성을 유지하며 서비스 생태계를 진화시키기 위함입니다.
  • What to Learn:
    • Concepts: DevSecOps, 소프트웨어 공급망 보안(SBOM), 보안 코딩 가이드라인(OWASP), 유의적 버전(Semantic Versioning), API 하위 호환성(Backward Compatibility).
    • Skills: 릴리스 노트(Changelog) 자동화 생성, 정적(SAST)/동적(DAST) 보안 취약점 스캐닝을 파이프라인에 통합.
    • Tools: Dependabot/Renovate, Snyk, Checkmarx, Semantic Release.
    • Trade-offs: 개발 초기부터 강제되는 엄격한 보안 스캐닝(빌드 시간 지연) vs 프로덕션 배포 후 발견되는 치명적 제로데이(Zero-day) 취약점 패치 비용.
  • How to Learn:
    • 1단계: 프로젝트에 의존성 업데이트 자동화 봇(Renovate)과 SAST 툴을 연동하여 오픈 소스 라이브러리의 취약점을 탐지하고 자동으로 PR을 생성하는 워크플로우를 적용합니다.
    • 2단계: Semantic Versioning 원칙에 따라 기존 API 클라이언트가 깨지지 않도록 Deprecation 정책을 적용하며 API 버전을 올리는 과정을 문서화합니다.
  • Implement: 배포 전 파이프라인에 통합된 보안 검증 리포트 시스템(SBOM 포함) 및 자동화된 유의적 버전 릴리스 관리 체계.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
TDD (Test Driven Dev) 요구사항을 검증하는 테스트를 먼저 설계한 뒤 이를 충족하는 실제 코드를 구현하는 방식입니다. 권장 품질 보증 Regression vs. BDD 단순히 테스트 코드를 사후에 많이 짜는 것으로 혼동함 Primary core
CI/CD 코드를 지속적으로 공유 저장소에 통합하고 자동화된 검즈을 거쳐 배포하는 체계입니다. 실무 프로세스 가속 Pipeline DevOps 특정 도구(예: Jenkins)의 옵션 설정법으로만 오해 Primary core
DDD (Domain Driven Design) 핵심 비즈니스 로직(도메인)을 컴포넌트의 중심에 두고 구조를 설계하는 방법론입니다. 실무 아키텍처 Context Map Microservices 기술적 아키텍처(Layer)를 나누는 것만으로 오인함 Industry Evans core
Observability, 관측 가능성 지표, 로그, 추적 정보를 유기적으로 결합해 시스템 내부 상태를 즉각 파악하는 능력입니다. 심화 운영/안정성 Metrics, Trace vs. Monitoring 단순한 하드웨어 수치 대시보드 구축과 동일시함 Industry core

8. References

Primary References

  • [P1] CS2023: SEP — Software Development Process.
  • [P2] SWEBOK v4.0 — Guide to the Software Engineering Body of Knowledge.
  • [P5] SFIA v9: DLMG — 시스템 개발 프로세스 관리 및 현대화 역량.

Secondary References

  • [Clean Code] Robert C. Martin — 애자일 소프트웨어 장인정신과 코드의 내적 품질.
  • [The DevOps Handbook] Gene Kim — 데브옵스 원칙과 조직적 실무 적용 사례.

Industry References

  • [Google SRE Book] — 대규모 전산 시스템의 운영 및 신뢰성 공학 표준.
  • [Accelerate] Nicole Forsgren — 고성능 소프트웨어 팀을 정의하는 4가지 성과 메트릭(DORA).

9. Final Checklist

Primary Checklist

  • 제품 구현 전 요구사항 명세가 명확한지 검토하고 이를 검증할 자동화된 테스트 시나리오를 갖췄는가? (P2)
  • 의미 있는 협업을 위해 커밋 메시지 규칙과 브랜치 전략(예: GitFlow)을 구성원들과 합의했는가? (P1-SEP)

Secondary Checklist

  • 특정 기능 변경이 기존 서비스의 다른 영역에 미치는 영향(Side effects)을 테스트 코드로 즉시 잡아낼 수 있는가?
  • 도메인 모델과 실제 소스 코드 간의 불일치를 최소화하기 위해 유비쿼터스 언어(Ubiquitous Language)를 사용했는가?

Industry Checklist

  • 코드 푸시부터 배포까지의 전 과정에서 수동 개입이 수반되는 병목 구간을 자동화로 해소했는가?
  • 배포 실패 상황에 대비한 자동 롤백 프로토콜과 장애 복구 런북(Runbook)을 문서화하고 적용했는가?

SDLC & Requirements

8 / 8