소프트웨어 요구사항 명세서
소프트웨어 요구사항 명세
- 프로젝트에 있어서 가장 중요한 것
- 개발자의 임무 - 요구사항을 만족하는 소프트웨어를 개발하는 것
- 주의할 점
1. 요구사항은 여러가지 이유로 프로젝트 수행 도중 변경될 수 있음
- 테스트 케이스의 작성은 요구사항을 반영해야 하며, 때로는 전체 구조에 변경이 생기는 경우도 있음
- 고객 요구에 따라 소프트웨어 요구사항을 도출하는 것이 프로젝트의 시작이다.
요구사항 명세서(SRS)
- 소프트웨어 구현물의 기능적/비기능적 요구사항을 기술한 문서
- 기능적 요구사항 : 소프트웨어가 갖추어야 하는 기능
- 비기능적 요구사항 : 성능, 자원 사용량 등에 존재하는 여러 측면의 제약
- 워터폴 모델의 소프트웨어 개발 프로세스에서 필수 산출물로 정의하는 것이지만, 에자일 방법론을 적용하는 경우 민첩성을 높이기 위하여 산출을 생략하는 경우도 꽤 있음
Requirement-driven development 방식을 택하는 경우
- mission critical system등에서는 formal verification 방법과 조합하여 요구사항 만족을 엄격하게 검증하는 것을 중요시하고 있음
- 웹 개발 맥락에서는 흔히 적용하지는 않음
요구사항 명세서의 구성요소
- 기능적 요구사항에 대한 개괄적 설명
- 적용 기술에 대한 지정
- 각 요소에 대한 명세
- 데이터베이스 스키마의 약식 표현
- 백엔드 API세트의 정의
우리의 요구사항 명세
로그인
구분 | 내용 |
---|
요구사항 ID | REQ-01-01 |
요구사항명 | 로그인 |
개요(목적, 내용) | 가입된 이메일과 비밀번호를 이용해 로그인할 수 있다. |
입력 | 로그인 하지 않은 상태에서 서비스 방문 |
출력 | 로그인 화면 표시 |
회원가입
구분 | 내용 |
---|
요구사항 ID | REQ-01-02 |
요구사항명 | 회원가입 |
개요(목적, 내용) | 이메일과 비밀번호를 이용해 회원가입할 수 있다. |
입력 | 로그인 화면에서 회원가입 버튼 클릭 |
출력 | 회원가입 화면 표시 |
로그아웃
구분 | 내용 |
---|
요구사항 ID | REQ-01-03 |
요구사항명 | 로그아웃 |
개요(목적, 내용) | 로그아웃할 수 있다. 로그아웃 성공 후에는 로그인했던 사용자 정보가 유지되지 않아야한다. |
입력 | 화면 상단의 로그아웃 버튼 클릭 |
출력 | 로그아웃 후 로그인 화면으로 복귀됨 |
노트 목록 조회
구분 | 내용 |
---|
요구사항 ID | REQ-02-01 |
요구사항명 | 노트 목록 조회 |
개요(목적, 내용) | 생성일 기준으로 정렬된 노트 목록 표시 |
입력 | 메인 페이지 방문 |
출력 | 화면 사이드바에 클릭 가능한 노트 목록 표시 |
노트 선택
구분 | 내용 |
---|
요구사항 ID | REQ-02-02 |
요구사항명 | 노트 선택 |
개요(목적, 내용) | 노트 목록에서 노트를 선택할 수 있다. |
입력 | 노트 목록에서 선택할 노트 클릭 |
출력 | 노트 목록에서 선택한 노트가 하이라이트됨 |
노트 조회
구분 | 내용 |
---|
요구사항 ID | REQ-02-03 |
요구사항명 | 노트 조회 |
개요(목적, 내용) | 선택한 노트의 내용을 조회할 수 있다. |
입력 | 사이드바 노트 목록에서 노트를 클릭하여 선택 |
출력 | 우측 상단에 노트의 내용이 표시됨 |
노트 생성
구분 | 내용 |
---|
요구사항 ID | REQ-02-04 |
요구사항명 | 노트 생성 |
개요(목적, 내용) | 새 노트를 생성할 수 있다. |
입력 | 화면 상단의 노트 생성 버튼 클릭 |
출력 | 노트 목록의 가장 위에 새 노트가 추가되고, 해당 노트가 선택 및 조회된다. |
노트 편집
구분 | 내용 |
---|
요구사항 ID | REQ-02-05 |
요구사항명 | 노트 편집 |
개요(목적, 내용) | 조회 중인 노트를 편집할 수 있다. |
입력 | 조회 중인 노트의 내용 클릭 |
출력 | 커서가 깜빡이며, 편집 가능한 상태가 된다. |
노트 변경사항 저장
구분 | 내용 |
---|
요구사항 ID | REQ-02-06 |
요구사항명 | 노트 변경사항 저장 |
개요(목적, 내용) | 노트의 변경사항을 저장할 수 있다. |
입력 | 화면 상단의 저장 버튼 클릭 |
출력 | 노트의 변경사항이 저장된다. |
노트 삭제
구분 | 내용 |
---|
요구사항 ID | REQ-02-07 |
요구사항명 | 노트 삭제 |
개요(목적, 내용) | 조회 중인 노트를 삭제할 수 있따. |
입력 | 노트를 조회하고, 화면 상단의 삭제 버튼을 누른다. |
출력 | 노트가 삭제된다. |
응용 구조 설계
Frontend
- React 응용으로 만들어져 UI에 해당하는 부분 서비스
- Backend로 향하는 API호출은 브라우저의 js 실행에 의해 이루어짐
Backend
- Express응용으로 만들어져 데이터베이스를 이용한 데이터 모델을 서비스
- JWT를 이용한 사용자 인증을 통해 데이터 접근을 보호
- CORS 정책을 통해 악의적인 접근을 방지
Database
- "prgms_notes"라는 이름의 데이터베이스에 두 개의 테이블을 포함
로컬 테스트 환경
- 웹 서버를 사이에 두지 않음 (FE/BE 접근 URL 설정에 차이 있음)
- 인터넷을 통하여 접근하는 것이 불가능
- 데이터베이스 인스턴스도 동일한 K8S 클러스터 내에 배치
- SSL 인증없음 (JWT 쿠키 처리 방식에 차이)
Production
- AWS EC2 instance에 minikube를 이용한 k8s 클러스터를 운용
Staging
- Production 환경과 완전히 동일한 셋업 이용
- 같은 region, type의 인스턴스를 같은 사양으로 똑같이 설정
Development
- 로컬 컴퓨터에 docker desktop이 제공하는 single-node cluster 이용
- 약간의 차이에 의해 발생하는 설정 변화를 코드 수정 없이 대응할 수 있도록 구성
개발환경과 배포 환경
개발 환경의 운용
- 개발 단계에서 빠르게 코드의 동작을 확인할 수 있는 것은 중요하다.
- TDD를 적용함으로써 효율을 높일 수 있다.
- 따라서, 코드의 동작을 눈으로 확인할 수 있는 환경을 구축하는 것이 필요하다.
데이터베이스 준비
- 가능한 한 데이터베이스에 의존성을 갖지 않는 상태에서 코드를 개발하는 것이 수월하다.
- 그러나 어느 시점에 이르면 코드의 검증을 위해 데이터베이스의 상태가 필요하다.
- 스키마가 확정되어 있다면 데이터베이스를 조기에 마련하는 것도 좋은 방법이다.
- 로컬 환경에서 테스트에 이용할 수 있는 데이터베이스를 마련하면 좋다.
개발 계획 수립
개발 계획 수립의 중요성
- 프로젝트의 성공
1. 원하는 결과물이 산출되어야 함
- 또한, 결과물이 정해진 기한 내에 산출되어야 함
- 계획을 수립해야 하는 항목들
1. 역할분담
2. 개발 방법, 팀 사이의 인터페이스
3. 프로젝트 일정 및 지연 발생에 대한 대응책
개발 계획
이 프로젝트에서의 원칙
- 순서 및 일정 계획을 세우는 것은 자유롭게 한다.
계획해야 하는 것들
• 활용할 요소기술, 최종 서비스 실행 환경 등
• 개발 프로세스에 적용할 모델
• 코드 및 아티팩트의 유지관리 정책 및 도구
• 코딩 스타일 규약
• 코드 리뷰 계획, 통합 주기와 방법
• 개발 환경과 통합/테스트 도구, 릴리스 정책과 방법
• 서비스 운영 계획, 유지보수 정책과 범위
코드 개발 외의 일들
- 배포 및 운영 구조 설계 및 구현
- 빌드 및 통합 환경에 필요한 요소의 개발
- 코드 품질 확보
- 서비스 운영 모니터링 계획
- 일정 계획
- 문서화 등..