개발 환경에서 우리는 기능적 요구사항을 충족하기 위해 개발에 착수 하지만 개발 중, 혹은 이후에 확인되어야 할 사항들이 바로 비기능적 요구사항들이다.
비기능적 요구를 충족시키는 이유는 기능적 요구사항을 비즈니스 팀에서 제시해 주는것이 아닌 개발팀에서 해줘야 하는 뒤따르는 기능들이기 때문이다.
개발자 입장에서 보는 비 기능적 요구사항에는 크게 다음과 같은 항목들이 있다.
- 성능 - 해당 기능을 사용할 때 성능에 문제가 없어야 한다.
- 확장성 - 다중 인스턴스로 확장할 때, 충돌이 없거나 데이터 중복과 같은 문제가 없어야 한다.
- 보안 - 당연하게 CORS, XSS, CSRF, LOG visiblity, Hard coded credentials 와 같은 문제들을 배포 전에 없에야 한다.
- 유용성과 편리함 - 코드를 작성했는데 해당 기능 위주로 작성하여 비슷한 기능을 구현할 때 이전 코드를 재사용 할 수 없게 되거나 번거롭게 리팩토링을 해야 하는 것을 사전 방지 하는 것이다. 대체로 Abstraction & Generics, 혹은 Static 으로 해결.
- 유지보수 - 버그가 자주 발생되면 안되며 다른 기능이 추가되거나 업데이트 될 때 문제가 없어야 한다. 만약 추가 기능을 구현 할 때 해당 코드가 문제가 되어 지속적으로 리펙토링 해주거나, 성능에 문제가 있으면 지속적으로 돌아와 코드 관리를 해주는데 유지보수는 유용성 항목과 밀접한 연결이 되어 있다.
이 문제들을 해결 하기 위해서는 다음과 같은 방법들이 존재한다.
성능 테스트 방법 - 기능의 프로세스를 극한적으로 사용하게 하는 테스팅을 진행하는데 이때 비지니스 환경에 따라 수용 가능한 한계를 설정 한다. 프로세스 테스트의 예시로, API나 프론트 엔드 관련 테스팅에서는 페이지 Request에 대한 Response가 1000ms 이하만 인정하게 설정하고 테스트를 진행한다. Automation 위주로 세팅을 하여 반복적인 프로세스를 진행하면 발견하기 쉽다.
확장성 테스트 방법 - Kubernetes의 인스턴스들을 늘리고 각 인스턴스에서 다량의 프로세스들이 어떻게 처리되는지 모니터링한다. 이 또한, 중복 케이스나 다량의 입력값을 자동화하여 문제점을 발견할 수 있다.
보안 테스트 방법 - 이부분은 경험 많은 개발자들이 코드리뷰를 통해 잡아내고 이후에도 보안 팀과 보안 프로그램이 코드를 돌려본 뒤 사전에 잡아낸다. 본인은 VeraCode 코드 스캐너를 사용 했었는데.... 문제가 False trigger가 다소 있던것 같다. XSS를 예로 Swagger 단계에서 사용자 입력 데이타 타입을 LocalDate로 제한했지만 코드에서는 그 값을 따로 처러하지 않았기 때문에 여전히 보안 결함으로 떴었다. 결국 우리가 추가로 Script 문들을 필터링 하는 함수를 따로 돌려야 비로서 보안 결함 체크에 없어지는 번거로운 일을 했다.
영문 설명: https://security.snyk.io/vuln/npm:swagger-ui:20160720
Snyk Vulnerability Database | Snyk
The most comprehensive, accurate, and timely database for open source vulnerabilities.
security.snyk.io
유용성과 편리함 테스트 방법 - 이것은 테스트를 통해 알아내는 것이 아닌 개발자들이 코드 리뷰를 할 때 잡아줘야 한다. 그래야 이후에 업무하는 개발자가 편하다.
유지보수 테스트 방법 - 마찬가지로 유닛 테스트를 할 때 Edge cases들을 더 많이 생각해내서 버그를 줄 일 수 있지만 개발자들이 코드 리뷰를 할 때 잡아줘야 한다. 이후에 구현될 추가 기능까지 알고 있는 개발자면 잠재적 버그를 잡아낼 수 있기도 한다.
'경험 일지' 카테고리의 다른 글
똑똑하게 코드 작성 하기 (0) | 2024.02.20 |
---|---|
Kubernetes의 Liveness 그리고 Readiness probes (0) | 2024.01.22 |
Use case 이해의 중요성 (0) | 2024.01.15 |
분산 컴퓨팅의 오류 (Fallacies of distrubuted computing) (4) | 2024.01.04 |
System Integration(SI) / System Management(SM) 경험 (0) | 2024.01.02 |