개요
이 문서는 시스템의 성능, 안정성, 보안, 확장성, 유지보수성과 관련된 비기능적 요구사항을 정의한다. 해당 프로젝트는 개인용으로 시작되며, 예상 사용자 수는 약 100명이다.
1. 성능 (Performance)
항목 |
내용 |
예상 사용자 수 |
약 100명 |
평균 응답 속도 |
조회 및 검색 API는 평균 500ms 이내 |
외부 API 사용 여부 |
외부 API는 직접 호출하지 않음. 최초 검색 시에만 사용하고 이후는 캐시 및 RDB 활용 |
캐시 전략 |
Redis 캐시 사용, TTL 5분 설정. 캐시 존재 시 외부 API 호출 생략 |
검색 처리 흐름 |
Redis → (캐시 미스 시) RDB → (데이터 없을 시) 외부 API |
2. 안정성 (Stability)
항목 |
내용 |
검색 실패 대응 |
Redis, RDB 순으로 조회 후 외부 API 호출. 외부 API 실패 시 명시적 에러 응답 반환 |
데이터 영속화 |
일정 주기 또는 조건에 따라 Redis 데이터를 RDB에 저장 |
예외 처리 및 로깅 |
예외 발생 시 로그 기록. 정상 요청은 필요에 따라 선택적으로 기록 |
3. 보안 (Security)
항목 |
내용 |
API Key 보관 방식 |
.env 파일에 저장 후 환경 변수로 로드. Git에는 포함되지 않도록 .gitignore 처리 |
Swagger 접근 제한 |
개발환경(dev)에서만 접근 가능. 운영 환경에서는 비공개 또는 인증 필요 설정 적용 예정 |
개인정보 보호 |
현재는 개인정보는 저장하지 않음 |
4. 확장성 (Scalability)
항목 |
내용 |
외부 API 확장성 |
네이버 외에도 카카오 등 타 플랫폼 연동이 가능하도록 전략 패턴 기반으로 설계함 |
5. 유지보수성 (Maintainability)
항목 |
내용 |
API 문서화 |
Swagger 기반 자동 문서화 적용. 개발 환경에서만 공개 |
예외 응답 포맷 |
ErrorResponse DTO를 통해 모든 예외 응답을 일관된 형식으로 제공 |
코드 구조 |
도메인 중심 구조를 유지하며, 바운디드 컨텍스트 및 애그리거트 단위로 패키지 분리하여 테스트 및 유지보수가 용이함 |
요약
- 성능: 응답 시간 500ms 목표, Redis TTL 5분 설정