소프트웨어 공학 기술의 핵심
- 추상화
- 문제를 단순화하기 위해 관련 없는 세부 사항을 제외
- 더 낮은 수준의 추상화를 해결하기 위해 제외된 세부 사항을 고려
- 이와 같은 사항을 반복
- 분할 및 모듈화
- 복잡한 문제를 여러 독립적인 작은 문제로 분할하고 하나씩 해결
- 다양한 작은 구성 요소 간의 상호 작용을 최소화 해야 됨
소프트웨어 개발 수명 주기
- 요구사항 분석
- 제품 요구사항을 명확하게 정의하고 문서화하며, 고객이나 시장 분석가로부터 승인을 받음
- 설계
- 제품의 모든 아키텍처 모듈을 정의하며, 하위 모듈 및 제3자 간의 통신과 데이터 흐름 정의
- 모든 모듈의 내부 디자인은 명확하게 정의되어야 함
- 구현
- 실제 개발이 시작되고 제품은 DDD(Detail Design Document)를 기반으로 구축
- 개발자들은 코딩 가이드라인을 따라야 함
- 테스트
- SRS(소프트웨어 요구사항 명세서)를 기반으로 테스트 수행
- 배포
- 유지보수
DevOps
- 소프트웨어 개발자와 운영자 간의 소통과 협업, 통합을 강조하는 소프트웨어 개발 방법
- 개발과 운영의 상호 의존성을 명확히 함으로써, 제품 혹은 서비스의 신속한 개발을 목표로 함
- 시스템 전체 수명주기에 걸쳐 지속적인 개선을 도모하기 위하여 의사소통과 협업을 증진하기 위한 원리와 실천 사항들의 모임
- 핵심 원리
- 자동화 : 소프트웨어 동작이 배포 및 운영 환경에서도 동일하게 보장될 수 있도록 함.
오류를 신속하고 일관성 있게 해결하기 위해 자동화된 환경을 전체 수명주기에 구축
- 반복
- 자기 서비스 : 자동화 환경을 통해 개발자와 운영자가 독립적으로 일할 수 있도록 지원
- 지속적 개선 : 사용자 피드백을 소프트웨어 운영 환경을 개선하기 위해 활용
- 협업 : 신속하고 신뢰성 있는 소프트웨어 개발, 배포
- 지속적 테스트 : 개발자는 수정된 코드에 대해 단위 테스트를 수행하고, 서버에 전달하여 통합 테스트 수행
- 지속적 통합과 지속적 배포
- 장점
- 제품 출시 기간 단축
- 낮은 위험과 유연한 배포
- 신속한 복구
- 고객 만족도 및 시장 적합도 향상
- In-House 서비스 개발 단계
- 코딩
- 소프트웨어 설계 (알고리즘 개발)
- 소프트웨어 제품 형상 설계, 정의
- 단위 테스트 수행
- 빌드
- 작성된 코드의 통합, 통합 테스트 수행
- 제품 형상 구성
- 배포를 위한 개발 애플리케이션 준비
- 애플리케이션 버전 관리
- 테스트
- 요구사항 만족도 테스트
- 변경, 개선 등이 포함 시 회귀 테스트
- 보안 및 취약성 분석
- 성능 테스트
- 소프트웨어 형상 테스트
- 패키지
- 배포 승인
- 명세된 형상에 따른 패키징
- 애플리케이션 배포
- 릴리스
- 사용자 환경에 설치
- 스토리지, 데이터베잇, 네트워크 등의 인프라 구축
- 설치 과정에서 발생한 문제 복구
- 운영 및 모니터링
- 인프라 구성요소 성능에 대한 지속적인 모니터링
- 사용자 반응 및 경험 추적
- 개발 척도 달성 여부 확인