이 개념은 정보처리기사 공부를 할 당시, 예전 인턴을 떠올리며.. 기억에 남았던 개념이다.
간단하게 짚어보자.
기능 요구사항은 시스템이나 소프트웨어가 수행해야 하는 특정 기능이나 작업을 말한다. 시스템의 기능적인 측면에 대한 명세.
만약, SI에 외주를 맡기는 상황이라면, 업체에 이런거 해주세요~ 하는 것들이 주로 기능 요구사항이 될 것 이다.
ex) 사용자 인증 - 사용자는 아이디와 비밀번호를 사용하여 시스템에 로그인 할 수 있어야함.
비기능 요구사항은 시스템이나 소프트웨어의 품질, 성능, 보안, 사용성 등과 관련된 요구사항으로, 시스템이 어떻게 동작해야 하는지에 대한 특성을 기술.
주로 인프라 엔지니어가 다루는, 실제로 기술적인 부분에 대한 명세를 뜻함.
ex) 보안 - 사용자 데이터는 암호화되어 저장되어야 하며, 시스템은 보안 취약점에 대한 적절한 대응을 해야함.
실제 현업에서는 해당 과정이 굉장히 중요하다고 한다. 본인도 실제로 이 요구사항들을 서로 맞추는 과정에서 소통의 중요성을.. 깨달은 경험이 있기 때문에..
이외에도 비기능 요구사항 항목들은 다양하다.
가용성이란 시스템에서 서비스를 지속적으로 이용할 수 있는 요구사항.
시스템의 신뢰성을 의미.
내결함성은 시스템 장애의 내성에 대한 요구사항으로, 서버, 단말기, 네트워크 장비와 구성 요소등을 어느 수준에서 이중화할지, 백업과 그 복원 대상의 범위는 어디까지 할지 등을 검토
성능이란 서비스를 제공할 때 시스템에서 리소스를 효율적으로 사용할 수 있는지를 나타내는 것
성능 요구 사항이 불명확하면, cpu나 메모리 등의 리소스가 부족하여 업무 처리가 늦어져서 전혀 사용할 수 없는 시스템이 될 수 있다. 하지만, 필요 이상의 리소스를 가진 거대한 서버를 준비하고 극히 일부 리소스만 사용하는 경우, 반대로 불필요한 투자로 이어지는 상황도 발생할 수 있다.
특히 시스템 이용이 피크일 때 이러한 요구사항들을 충분히 검토해야 한다.
확장성이란 시스템이 가동을 시작한 후 시스템 리소스가 부족할 때를 대비한 대책으로, 주로 두가지 구현 방법이 있다.
스케일업은 메모리, cpu 등 리소스를 더 큰 것으로 교체하는 것
스케일아웃은 서버 장비 자체를 증설하여 리소스를 강화하는 것
스케일업과 스케일아웃의 경우, 어느쪽이 정답이라고 말하기 굉장히 어려울 것 같다.
미래는 알 수 없기에.. 동시 사용자 수, 데이터의 양, 배치 처리 건수 등을 잘 확인, 분석하여 대책을 세우는 것이 그나마 정답이라고 할 수 있겠다.
운영 및 유지보수성에서는 시스템을 안정적으로 가동하는 것을 목적으로 시스템 운영과 유지보수 서비스에 대한 요구사항을 정의

백업 관련 용어인 rpo(Recovery Point Objective)와 rto(Recovery Time Objective)는 비즈니스 연속성 및 재해 복구 전략에서 중요한 개념이다.
ex) RPO가 1시간인 경우, 장애가 발생한 시점까지의 최신 백업 데이터가 복구되어야 합니다. 이는 시스템이나 데이터베이스의 변경 사항이 발생한 후 1시간 내에 복구되어야 함을 의미합니다.
ex) RTO가 4시간인 경우, 장애가 발생한 후 4시간 이내에 시스템이나 서비스가 다시 가동되어야 합니다.
위의 사진을 보면 알겠지만, 더 짧은 rpo를 가지면 데이터 손실이 적어진다. 하지만, 비용이 더 많이 들고, 더 복잡한 백업 솔루션을 사용해야 한다. 그리고 rto가 짧을수록 중단시간은 감소하지만, 이 역시 마찬가지로 더 빠르고 효율적인 복구 절차가 갖추어져 있어야한다.
이러한 백업 시스템을 갖추는건 비용 문제와 직결되기 때문에, 기업의 비즈니스 요구사항, 서비스 중요도 등을 고려하여 전략을 세워야한다.
둘 다 어느정도 표면적인 느낌은 알고있지만, 정확한 차이가 알고싶어 찾아봤다. GPT가 설명을 너무 잘 해준 것 같아서, 그대로 가져왔다.
목적: 시스템이나 소프트웨어를 실제 운용하고, 사용자에게 서비스를 제공하는 것이 목적입니다.
활동:
시스템 운영 및 모니터링: 시스템을 지속적으로 운영하고, 성능을 모니터링하여 사용자에게 안정적인 서비스를 제공합니다.
사용자 지원 및 문제 해결: 사용자의 요청이나 문제에 대응하고, 서비스의 원활한 이용을 지원합니다.
성능 최적화: 시스템의 성능을 모니터링하고 최적화하여 사용자에게 효과적이고 빠른 서비스를 제공합니다.
목적: 시스템이나 소프트웨어를 현재 상태로 유지하고, 변경 또는 개선을 수행하여 기능 추가, 버그 수정, 보안 업데이트 등을 제공합니다.
활동:
버그 수정: 사용자가 신고한 버그를 수정하거나, 시스템에서 발견된 문제를 해결합니다.
기능 개선 및 업그레이드: 새로운 기능을 추가하거나, 기존의 기능을 향상시키는 작업을 수행합니다.
보안 패치 및 업데이트: 보안 취약점을 해결하고, 시스템의 보안성을 유지하기 위한 업데이트를 수행합니다.
목적의 차이: 운영은 시스템을 안정적으로 운용하고 사용자에게 서비스를 제공하는 것을 목적으로 하며, 유지보수는 시스템을 현재 상태로 유지하고 개선하여 기능을 업데이트하는 것을 목적으로 합니다.
활동의 차이: 운영은 주로 시스템의 실제 운용 및 모니터링에 중점을 두며, 유지보수는 버그 수정, 기능 개선, 업그레이드 등을 수행합니다.
주기적 성격의 차이: 운영은 지속적이고 주기적인 활동이며, 유지보수는 주로 필요에 따라 이루어지는 반응적인 활동입니다.
두 단계는 협력하여 소프트웨어나 시스템의 수명 주기 전반을 관리합니다.
ex) 실패 사례
야간에 업무를 배치하는 처리 시간이 예상보다 더 많이 필요해서 야간 백업을 매일 수행할 수 없다는 것을 확인했다. 그래서 매일이 아닌 한 달에 한 번만 백업을 진행했다. 이 때문에 시스템에 장애가 발생했을 때 복구 목표 시점(rpo)은 24시간 이내가 아닌 1개월 이내로 변경되었고, 데이터 손실 분량은 더 커져서 리스크가 확대되는 것을 허용할 수밖에 없었다.