<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ProjectManagement | 포트폴리오</title><link>https://ansangah.github.io/tags/projectmanagement/</link><atom:link href="https://ansangah.github.io/tags/projectmanagement/index.xml" rel="self" type="application/rss+xml"/><description>ProjectManagement</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>ko</language><lastBuildDate>Fri, 17 Oct 2025 00:00:00 +0000</lastBuildDate><image><url>https://ansangah.github.io/media/sharing.png</url><title>ProjectManagement</title><link>https://ansangah.github.io/tags/projectmanagement/</link></image><item><title>소프트웨어공학</title><link>https://ansangah.github.io/blog/subjects/se/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/se/</guid><description>&lt;h2 id="1-소프트웨어공학-개요"&gt;1. 소프트웨어공학 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;소프트웨어공학(Software Engineering)은 &lt;strong&gt;복잡한 소프트웨어 시스템을 체계적·공학적으로 개발&lt;/strong&gt;하기 위한 학문.&lt;/li&gt;
&lt;li&gt;목표: 예측 가능한 비용과 일정으로 &lt;strong&gt;품질 높은 제품&lt;/strong&gt;을 전달하며, 유지보수와 진화를 고려한 구조를 설계.&lt;/li&gt;
&lt;li&gt;핵심 축: &lt;strong&gt;프로세스(How)&lt;/strong&gt;, &lt;strong&gt;방법론(Method)&lt;/strong&gt;, &lt;strong&gt;도구(Tool)&lt;/strong&gt;, &lt;strong&gt;품질(Quality)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-소프트웨어-개발-생명주기sdlc"&gt;2. 소프트웨어 개발 생명주기(SDLC)&lt;/h2&gt;
&lt;h3 id="21-전통적-폭포수requirements--design--implementation--verification--maintenance"&gt;2.1 전통적 폭포수(Requirements → Design → Implementation → Verification → Maintenance)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;각 단계를 순차적으로 진행. 문서 기반 계약, 변경 비용이 큰 프로젝트에 적합.&lt;/li&gt;
&lt;li&gt;장점: 명확한 문서화, 관리 용이.&lt;/li&gt;
&lt;li&gt;단점: 요구 변경에 취약, 피드백이 느림.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-반복증분-모델"&gt;2.2 반복·증분 모델&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기능을 반복적으로 설계/구현/검증. 위험을 조기에 발견하고 사용자 피드백을 반영.&lt;/li&gt;
&lt;li&gt;대표: Spiral Model (위험 중심), RUP, Incremental Model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-애자일agile"&gt;2.3 애자일(Agile)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;고객 협업과 빠른 반복을 강조. &lt;strong&gt;스크럼(Scrum)&lt;/strong&gt;, &lt;strong&gt;칸반(Kanban)&lt;/strong&gt; 등이 포함.&lt;/li&gt;
&lt;li&gt;스프린트 기간 동안 기획→개발→리뷰→회고를 반복.&lt;/li&gt;
&lt;li&gt;문서보다 작동하는 소프트웨어를 우선하지만, 최소한의 문서는 유지한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-요구공학requirements-engineering"&gt;3. 요구공학(Requirements Engineering)&lt;/h2&gt;
&lt;h3 id="31-요구-사항-종류"&gt;3.1 요구 사항 종류&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능 요구(Functional)&lt;/strong&gt;: 시스템이 수행해야 할 기능, 유스케이스.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비기능 요구(Non-functional)&lt;/strong&gt;: 성능, 보안, 가용성, 규제 준수 등 품질 속성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도메인 요구&lt;/strong&gt;: 특정 산업/업무 규칙.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-요구-수집-기법"&gt;3.2 요구 수집 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;인터뷰, 워크숍, 설문, 관찰, 프로토타이핑.&lt;/li&gt;
&lt;li&gt;사용자 스토리(As a … I want … so that …)로 요구를 표현하면 애자일에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-요구-분석-및-명세"&gt;3.3 요구 분석 및 명세&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;요구 상충 해결, 우선순위화(MoSCoW, WSJF).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML Use Case Diagram&lt;/strong&gt;, &lt;strong&gt;문장 템플릿&lt;/strong&gt;, &lt;strong&gt;SRS(Software Requirements Specification)&lt;/strong&gt; 문서화.&lt;/li&gt;
&lt;li&gt;요구 변경 관리: Change Control Board(CCB), 버전 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-시스템소프트웨어-설계"&gt;4. 시스템·소프트웨어 설계&lt;/h2&gt;
&lt;h3 id="41-아키텍처-설계"&gt;4.1 아키텍처 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;품질 속성을 달성하기 위한 구조와 구성 요소 정의.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;아키텍처 패턴&lt;/strong&gt;: Layered, Client-Server, Microservices, Event-Driven 등.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;아키텍처 스타일&lt;/strong&gt;: REST, SOA, Pipe-and-Filter.&lt;/li&gt;
&lt;li&gt;대표 산출물: 아키텍처 다이어그램(C4 Model 레벨), ADR(Architecture Decision Record).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-상세-설계"&gt;4.2 상세 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모듈, 클래스, 인터페이스, 데이터 구조 정의.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML&lt;/strong&gt;: 클래스, 시퀀스, 상태, 활동 다이어그램.&lt;/li&gt;
&lt;li&gt;설계 원칙: SOLID, DI, GoF 디자인 패턴(Strategy, Observer, Factory 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-소프트웨어-재사용"&gt;4.3 소프트웨어 재사용&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;라이브러리, 컴포넌트, 프레임워크 활용. 구성요소 기반 개발(Component-Based Development).&lt;/li&gt;
&lt;li&gt;소프트웨어 제품 라인(SPL) 접근: 공통 자산 기반으로 변형 제품군 생성.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-프로젝트-계획과-관리"&gt;5. 프로젝트 계획과 관리&lt;/h2&gt;
&lt;h3 id="51-일정-및-비용-추정"&gt;5.1 일정 및 비용 추정&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;COCOMO II&lt;/strong&gt;, &lt;strong&gt;Function Point&lt;/strong&gt;, &lt;strong&gt;Story Point&lt;/strong&gt; 기반 추정.&lt;/li&gt;
&lt;li&gt;거버넌스: WBS(Work Breakdown Structure), Gantt Chart, Critical Path Method.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-리스크-관리"&gt;5.2 리스크 관리&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;위험 식별 → 분석(발생 확률, 영향) → 대응 전략(회피, 완화, 전가, 수용).&lt;/li&gt;
&lt;li&gt;특히 인력, 일정, 기술적 불확실성에 집중.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-형상관리configuration-management"&gt;5.3 형상관리(Configuration Management)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;코드·문서·빌드 결과물에 대한 버전/변경 이력 추적.&lt;/li&gt;
&lt;li&gt;도구: Git, SVN. 브랜칭 전략(Git Flow, Trunk-based)과 코드 리뷰 프로세스.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-구현-및-품질-향상-기법"&gt;6. 구현 및 품질 향상 기법&lt;/h2&gt;
&lt;h3 id="61-코딩-표준과-코드-품질"&gt;6.1 코딩 표준과 코드 품질&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;명명 규칙, 코드 스타일 가이드(PEP8, Google Style).&lt;/li&gt;
&lt;li&gt;정적 분석(Static Analysis), 린터, 포매터를 활용해 품질 자동화.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-리팩터링refactoring"&gt;6.2 리팩터링(Refactoring)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기능 변경 없이 구조 개선. Bad Smell 제거: Long Method, Large Class, Feature Envy 등.&lt;/li&gt;
&lt;li&gt;CI 파이프라인에서 테스트 통과를 기준으로 안전성 확보.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-성능-개선"&gt;6.3 성능 개선&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로파일링으로 병목 확인. 캐싱, 비동기 처리, 데이터 구조 최적화.&lt;/li&gt;
&lt;li&gt;Amdahl’s Law, Little’s Law 등 이론 기반 분석.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-테스트와-품질-보증qa"&gt;7. 테스트와 품질 보증(QA)&lt;/h2&gt;
&lt;h3 id="71-테스트-레벨"&gt;7.1 테스트 레벨&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;단위 테스트(Unit Test)&lt;/strong&gt;: 함수·클래스 단위. TDD(Test-Driven Development) 기반 작성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;통합 테스트(Integration Test)&lt;/strong&gt;: 모듈 간 상호작용 검증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시스템 테스트(System Test)&lt;/strong&gt;: 전체 시스템 기능 및 비기능 요건 검증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인수 테스트(Acceptance Test)&lt;/strong&gt;: 사용자 요구 만족도 확인. UAT(User Acceptance Testing).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-테스트-기법"&gt;7.2 테스트 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;화이트박스(경로 테스트, 분기 커버리지), 블랙박스(동등 분할, 경계값 분석).&lt;/li&gt;
&lt;li&gt;정적 검토: 코드 리뷰, 워크쓰루, 인스펙션.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="73-자동화와-cicd"&gt;7.3 자동화와 CI/CD&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;테스트 자동화 프레임워크(JUnit, pytest, Cypress).&lt;/li&gt;
&lt;li&gt;CI 도구(GitHub Actions, Jenkins)로 빌드·테스트·배포 자동화.&lt;/li&gt;
&lt;li&gt;테스트 커버리지, 품질 게이트(예: SonarQube) 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-운영과-유지보수"&gt;8. 운영과 유지보수&lt;/h2&gt;
&lt;h3 id="81-유지보수-유형"&gt;8.1 유지보수 유형&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;수정 보수(Corrective)&lt;/strong&gt;: 결함 수정.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적응 보수(Adaptive)&lt;/strong&gt;: 환경 변화 대응.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;완전 보수(Perfective)&lt;/strong&gt;: 성능 개선, 기능 강화.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;예방 보수(Preventive)&lt;/strong&gt;: 잠재 문제 제거.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-devops"&gt;8.2 DevOps&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;개발·운영 통합 문화. CI/CD + 모니터링 + IaC(Infrastructure as Code).&lt;/li&gt;
&lt;li&gt;도구: Docker, Kubernetes, Terraform, Prometheus, Grafana.&lt;/li&gt;
&lt;li&gt;지속적 피드백 루프: 로그 분석, APM(Application Performance Monitoring), 피처 플래그.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-품질-모델과-표준"&gt;9. 품질 모델과 표준&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ISO/IEC 25010&lt;/strong&gt;: 기능 적합성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성, 보안성, 호환성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CMMI&lt;/strong&gt;: 조직 프로세스 성숙도 모델. 레벨 1~5 단계로 프로세스 개선 로드맵 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISO/IEC 12207&lt;/strong&gt;: 소프트웨어 생명주기 프로세스.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IEEE 표준&lt;/strong&gt;: SRS(IEEE 830), 테스트 문서(IEEE 829) 등 문서 템플릿 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="10-도구-및-협업-전략"&gt;10. 도구 및 협업 전략&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;요구 추적: Jira, Azure DevOps, Trello.&lt;/li&gt;
&lt;li&gt;문서화: Confluence, Notion, MkDocs. 다이어그램은 PlantUML, Mermaid.&lt;/li&gt;
&lt;li&gt;코드 협업: GitHub, GitLab. Pull Request 리뷰, Pair Programming, Mob Programming.&lt;/li&gt;
&lt;li&gt;품질 측정 지표: 결함 밀도, 평균 고장 간격(MTBF), 결함 발견율, 리드 타임(Lead Time).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="11-윤리와-프로페셔널리즘"&gt;11. 윤리와 프로페셔널리즘&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;소프트웨어 엔지니어는 ACM/IEEE Code of Ethics 등을 준수해야 한다.&lt;/li&gt;
&lt;li&gt;개인정보 보호, 접근성, 알고리즘 편향 최소화, 라이선스 준수.&lt;/li&gt;
&lt;li&gt;프로젝트 실패 원인 분석(Postmortem, RCA)로 조직 학습 강화.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>