(KOR) 소프트웨어 서비스 설계 방법론
SW Engineering 프로세스
25-1학기 황영숙 교수님 고려대학교 산학캡스톤 강의 자료에 기반하여 작성하였습니다.
- 요구사항 분석 (Requirements Analysis)
- 소프트웨어 설계 (Software Design)
- 소프트웨어 구현 (Implementation)
- 소프트웨어 테스트 (Software Testing)
- 소프트웨어 유지보수 (Maintenance)
1. 요구사항 분석
- Use Case Diagram: 사용자가 서비스와 상호작용하는 프로세스를 다이어그램으로 표현
- Software Requirements Specification (SRS): 서비스 요구사항 명세서
예시 :
ID | 요구사항 | 유형 | 우선순위 |
R1 | 사용자는 로그인 없이 결제를 진행할 수 있어야 한다. | 기능 | 높음 |
R2 | 서비스는 1초 이내 결제 응답을 제공해야 한다. | 비기능 | 높음 |
2. 소프트웨어 설계
- 아키텍처 설계 (Software Architecture Design):
- 서비스 구조 설계
- 클라이언트-서버 모델, 마이크로서비스 아키텍처 등 사용
- 데이터베이스 설계 (ERD, Entity-Relationship Diagram):
- 시퀀스 다이어그램 (Sequence Diagram):
- 서비스 흐름을 단계별로 시각화하여 개발자 간 커뮤니케이션 원활화
3. 소프트웨어 구현
SOLID Principles
- Clean Code Principles: 유지보수성을 고려하여 가독성 높은 코드 작성
- SOLID Principles:
- SRP (Single Responsibility Principle): 단일 책임 원칙
- 모든 클래스나 메소드는 하나의 책임만 가져야 함
- OCP (Open-Closed Principle): 개방-폐쇄 원칙
- 소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 함
- LSP (Liskov Substitution Principle): 리스코프 치환 원칙
- 자식 클래스는 부모 클래스에서 가능한 행위를 수행할 수 있어야 함
- ISP (Interface Segregation Principle): 인터페이스 분리 원칙
- 클래스는 자신이 사용하지 않는 인터페이스를 구현하지 말아야 함
- DIP (Dependency Inversion Principle): 의존성 역전 원칙
- 소스 코드 의존성이 추상에 의존하며 구체에는 의존하지 않아야 함
Version Control
- Git, GitHub/GitLab/Bitbucket
- CI/CD (Continuous Integration/Continuous Deployment)
- GitHub Actions, Jenkins 등을 활용하여 자동 빌드 및 배포 설정
4. 소프트웨어 테스팅
테스팅 기법
- 단위 테스트 (Unit Testing)
- 함수 및 모듈 단위로 독립적인 테스트 수행 (예: PyTest, JUnit)
- 통합 테스트 (Integration Testing)
- UI 테스트 (End-to-End Testing, Selenium, Cypress)
5. 소프트웨어 유지보수
유지보수 기법
- 로깅 및 모니터링 (Logging & Monitoring)
- 서비스 장애 감지를 위해 ELK Stack, Grafana, Prometheus 활용
- 버그 관리 시스템 (JIRA, Trello)