제가 아주 예전에는 기술면접때 “좋은 코드 / 소프트웨어란 무엇이라고 생각하는지“를 물어보곤 했었어요. 요즘은 의미없는 질문이라고 생각해서 잘 안하지만…
대부분 읽기 쉬운 코드라고 대답하시는데, 실제 업무나 코드리뷰 하면서 제가 코멘트하는 것들을 가만히 보니, 소프트웨어 아키텍처 품질속성들(testability, reusability, modifiability, scailability, …)에 해당하는 것들을 많이 얘기하고 있더라고요.
그래서, 만들고 있는 소프트웨어를 각 속성의 관점에서 균형있게 점검해보면 유익하더라고요.
- Availability: 돌다가 죽지는 않는가? 항상 가동되어 있는 상태로 잘 돌아가는가?
- Modifiability: 수정하기 용이한가? 수정(동작이나 기능 추가, 변경)할 때 수정이 필요한 부분이 산탄총 수술이나 비엔나 소세지처럼 줄줄이 엮이는 현상은 없는가?
- Performance: 속도나 throughput은 잘 나오나?
- Security: 안전한가? 보안적으로.
- Usability: 사용하기 편한가?
- Testability: 테스트하기 용이한가/쉬운가?
- Interoperability: 다른 제품과 맞물려 돌아가기 쉽게 되어있나?
- Reliability: 시스템이 신뢰할만한가? 정확한가? 안정적인가?
- Maintainability: 유지보수하기 쉬운가? 업데이트 방법은? 설치하기 쉬운가?
- Scalability: 부하가 늘어날 때, 늘어난 부하에 확장하며 대응 가능한 구조인가?
- Reusability: 코드나 부분들이 재사용 가능하게 되어있나?