스타트업과 운영 엔지니어
많은 스타트업이 IT 운영 엔지니어 없이 서비스를 운영하고 있습니다. 서비스 품질이 중요하다는 것을 알고 있지만 운영 엔지니어의 역할을 개발자가 대신할 수 있는 것 같기도 하고 다른 직무에 있는 직원들의 노력으로도 서비스를 운영할 수 있을 것 같기도 합니다. 하지만 운영 엔지니어의 역할이 그리 단순하지 않기 때문에 스타트업이 성장하는 과정에서 운영 엔지니어의 빈자리는 점점 커지고 결국은 스타트업 성장에 발목을 잡게 됩니다. 그렇다면 스타트업은 언제 운영 엔지니어를 채용해야 할까요? 이 질문에 대답하기 위해 먼저 소프트웨어 생애 주기에 대해 이야기하려 합니다.
소프트웨어 생애 주기
소프트웨어 생애 주기는 기업의 개발 문화에 따라서 다양하게 만들 수 있습니다. 하지만 스타트업에서 많이 사용하는 데브옵스 기반의 소프트웨어 생애 주기는 “계획 > 코드 > 빌드 > 테스트 > 릴리즈 > 배포 > 운영 > 감시”의 단계를 반복적으로 거치게 됩니다.
- 계획
- 작업 및 일정을 구성합니다. 사용자 스토리를 사용하여 작업을 계획할 수도 있으며 아키텍처 설계 구성 및 변경을 계획할 수도 있습니다.
- 코드
- 개발자가 코드 작업 및 코드 검토를 수행합니다. 코드 병합도 이 과정에서 발생할 수 있습니다.
- 빌드
- 소스코드를 빌드하여 인프라의 특정 위치에서 컴파일, 테스트 및 배포합니다. 일련의 과정은 개발 계정에서 발생합니다. 이 단계에서 지속적인 통합(CI) 및 지속적인 배포(CD)를 위한 도구들이 사용됩니다.
- 테스트
- 초기에는 수동 테스트를 진행합니다. 하지만 버그를 줄이기 위해서는 자동 테스트 환경을 구성해야 합니다.
- 릴리즈
- 패키징 되어 배포할 준비가 되었습니다.
- 배포
- 최종 고객이 사용하는 기능을 프로덕션에 배포합니다. 자동화를 통한 지속적인 배포 프로세스를 구축합니다.
- 운영
- 운영은 크게 인프라를 구성하고 관리하는 작업과 서비스 환경을 구성하고 관리하는 작업으로 이루어집니다.
- 모니터링
- 다양한 도구들을 사용하여 프로덕션의 현재 상태를 감시합니다. 운영 모니터링 대상으로는 서버, 클라우드, 컨테이너, 애플리케이션, 데이터베이스가 있으며 보안 및 비즈니스 관련 모니터링도 포함됩니다.
데브옵스 기반의 소프트웨어 생애 주기를 보면 개발은 전체 생애 주기의 일부분으로 보입니다. 개발이 완료되면 개발과 스테이징 그리고 프로덕션 환경에 이르는 배포와 통합 과정을 연결해야 하며 테스트해야 합니다. 그리고 이렇게 배포된 서비스를 다시 최적화하여 운영하고 모니터링 해야 하며 이 데이터들을 기반으로 다시 계획하고 개발합니다.
스타트업에서 운영 엔지니어가 하는 일
소프트웨어 생애 주기를 보면 알 수 있듯이 개발은 일부분이며 좋은 서비스를 만들기 위해서 해야 하는 일들은 아주 많습니다. 스타트업의 운영 엔지니어는 IT 전략 계획, 서비스 운영, 서비스 데스크, 지속적 서비스 개선, 설계 구축을 포함하여 전체 수명 주기에 걸쳐 IT 서비스를 관리하기 위한 업무를 수행합니다. 스타트업에서 운영 엔지니어가 하는 일들을 정리하면 아래와 같습니다.
- 시스템 설계와 운영
- 트래픽 급증에 상관없이 안정적이고 효율적으로 동작하는 시스템을 설계하고 운영하고 개선합니다. 또한 시스템을 이중화 하고 재해 복구를 위한 대책을 마련합니다. 지속적인 시스템 개선을 통해 안정성을 높이는 동시에 시스템의 비용 효율성을 높입니다. 또한 네트워크 보안을 위해 시스템에 접근해야 하는 사람들만 접근이 가능하게 인프라를 구성하고, 악의적인 접근을 방지하기 위해서 시스템의 퍼블릭 영역과 프라이빗 영역을 구분하거나 연결하는 일을 합니다.
- 지속적인 통합
- 개발 유연성을 높이기 위해 소프트웨어 개발자가 자신의 코드를 현재 상태로 공유 저장소에 언제든지 통합할 수 있도록 자동화하고 관리합니다. 이를 통해 다음 개발 과정에서 발생하는 수많은 문제를 해결하고 수정할 수 있습니다.
- 지속적인 배포
- 개발 생산성을 증진시키기 위한 배포 파이프라인을 구축하고 고도화를 진행합니다. 지속적인 배포 작업을 통해 개발과 운영에 필요한 적절한 유연성을 제공합니다. IT 운영팀은 소프트웨어 개발 주기 전체에 걸쳐 활동하기 때문에 개발과 비즈니스 팀이 본인의 역할에 더욱 충실해질 수 있습니다.
- 지속적인 테스트
- 지속적인 배포를 위해 지속적인 테스트는 가장 중요한 업무입니다. 지속적인 테스트 과정없는 지속적인 배포는 품질이 보장되지 않은 코드를 고객에게 전달하는 것과 같습니다. DevOps 파이프라인에서 테스팅 과정을 자동화하면 수동 테스팅 업무를 줄일 수 있고 최소한의 품질 기준을 충족하지 못하는 빌드과정에 시간을 뺏기지 않는 효과도 있습니다.
- 상시 운영
- 고객이 불편을 격지 않도록 서비스를 상시 운영합니다. 높은 수준의 서비스 품질을 위해 서비스 폭주가 발생하면 트래픽을 핸들링 하고 트래픽을 견딜 수 있도록 시스템 스케일을 변경하고 상시 대응이 가능하도록 해당 기능들을 자동화합니다. 뿐만 아니라 조직이 핵심 비즈니스에 집중할 수 있도록 소프트웨어 생애 주기 전반에 걸쳐 반복 작업들을 자동화합니다. 자동화 가능한 테스트 환경을 유지하여 기존에 발견한 문제가 반복되지 않도록 합니다. 백업의 경우 데이터를 무결성으로 안전하게 유지하기 위해 백업을 자동화하고 복원 프로세스를 계획합니다. 이를 통해 데이터 손실 문제를 사전에 방지하고, 사고가 발생하더라도 기존 스냅샷에서 백업을 복원하여 데이터의 손실을 최소화합니다.
- 지속적인 모니터링
- 고객 만족과 서비스 품질 개선을 위해 소프트웨어 생애 주기 전반에 걸친 모니터링을 진행합니다. 장애가 발생하면 원인을 분석하고 장애 발생 환경을 구성하여 개발자가 대부분의 오류를 즉시 해결 가능하도록 지원합니다. 오류 인스턴스에 대한 자동화 경고를 고도화하여 잠재적인 버그를 추적합니다. 모니터링 시스템은 서비스를 운영하면서 발생하는 많은 데이터를 파악할 수 있도록 시각화합니다. 모니터링된 데이터들을 통해서 데이터 기반의 의사결정을 가능하게 함으로써, 시스템을 보완하거나 앞으로의 방향성을 위한 통찰력에 도움을 줍니다.
마무리
스타트업에 운영 엔지니어가 없는 이유는 운영 엔지니어가 얼마나 많은 일들을 전문적으로 진행하는지 모르기 때문일 수 있습니다. 하지만 서비스가 출시되었고 개발자들이 소프트웨어 생애 주기에서 빌드, 테스트, 릴리즈, 배포, 운영, 모니터링 업무에 많은 시간을 사용하고 있다면 반드시 운영 엔지니어를 합류시켜야 합니다. 운영 엔지니어는 소프트웨어 생애 주기 전반에 걸쳐 다양한 일들을 해야 합니다. 이를 통해 개발 효율성을 증대시킬 뿐 아니라 인프라를 효율적으로 사용하면서도 고객의 서비스 만족도를 높일 수 있습니다. 와탭랩스는 모니터링과 스타트업에 많은 관심을 가지고 있는 국내 최고의 IT 통합 모니터링 서비스를 제공하고 있습니다. 서비스 운영과 모니터링에 관심이 있다면 언제든 연락 주세요.