새로운 기능 개발시 생각해볼 것.
1. 해당 기능구현을 위해서 필요한 데이터들을 현재의 DB에서 저장되고 관리되는데 문제가 없는가?
- 문제가 발생하여 해결하기 위한 방법으로 데이터를 조금 변형해도 되는가?
- 데이터 변형이 불가능하다면 기능 타협을 통해서 구현이 가능한가?
- 기능타협이 불가능하다고 하더라도 새로운 DB종류를 사용한다던지 하여 개발할 수 있는가?
2. 기능 개발에 필요한 라이브러리가 기존의 프로젝트의 프레임워크, RDB, 자바버전 등등 과 호환이 가능한가?
- 호환이 불가능해도 구현할 수 있는가? (라이브러리의 기능을 자체개발 한다던지 등)
- 기존의 프레임워크를 교체할 수 있는가? 교체할 필요성이 있는가?
3. 새로운 기능이 시스템의 전반적인 성능에 영향을 미치는가?
- 해당 기능으로 인해 발생하는 DB에 대한 요청수가 얼마나 될 것인가?
- 해당 기능으로 인해 발생하는 네트워크 부하가 얼마나 될 것인가?
- 해당 기능이 메모리나 CPU 자원을 많이 소모하는 작업이지는 않는가?
(ex : 이미지, 비디오 데이터 처리, 스트리밍 데이터 처리, 실시간 데이터 수집, SSL 통신에서 일어나는 암호화, 복호화 과정 등)
26년 이후 추가 작성 부분
4. 확장성 (Scalability & Asynchrony)
- 이 기능이 트래픽이 10배, 100배 늘어났을 때도 버틸 수 있는가?
- 동기(Sync)로 처리해야만 하는가, 아니면 메시지 큐(Kafka, RabbitMQ 등)를 통해 비동기(Async)로 격리할 수 있는가?
5.관측 가능성 (Observability)
- 이 기능이 오작동할 때 로그나 메트릭으로 바로 인지할 수 있는가? (ELK, Prometheus 등)
- 문제가 생겼을 때 전체 시스템을 죽이지 않도록 차단기(Circuit Breaker)를 달 수 있는가?
6.보안 (Security - DevSecOps)
- 새로운 기능이 기존의 권한 체계(AuthN/AuthZ)를 우회하지는 않는가?
- 입력 데이터에 대한 검증(Validation)은 라이브러리 레벨과 DB 레벨에서 이중으로 이루어지는가?
'Backend' 카테고리의 다른 글
| 폐쇠망에서 maven에 라이브러리 추가하고 빌드하는 방법 (0) | 2023.09.13 |
|---|---|
| 빌드 관리도구 - Maven과 Gradle (0) | 2023.01.22 |
| Maven과 Gradle 차이점 (0) | 2022.01.05 |
| WAS란 무엇인가? + Servlet 이란? (0) | 2021.12.27 |