요즘에는 많은 서비스들을 퍼블릭 클라우드에 올려서, 개발자가 서비스 를 운영하기 좋은 상황이다. 그러다 보니 개발자가 고민하고 알아야하는 영역이 점차 확대되었고, 아키텍트와 개발자 역할자 간의 경계가 많이 사라졌다.
개발자도 안정적인 서비스를 운영하기 위해서 고민과 경험을 하는 기회가 많아졌다.
책의 제목은 **인프라 엔지니어의 교과서, 요구사항 분석과 설계**이지만, 독자의 대상을 꼭 인프라 엔지니어로 제한할 필요는 없을 것 같다.
소프트웨어 개발자 관점에서 이 책을 읽고 나서 느낀 점을 공유해보겠다.
누가 이 책을 읽으면 좋을까?
운영 경험이 없는 개발자
지금 회사는 개발과 운영 조직이 나누어져 있다. 개발 조직에서 일을 계속 하다보니, 운영 경험이 부족한 상황이다. 최근에 개발한 서비스를 직접 안정적으로 운영해야 하는 상황인데, 안정적인 서비스를 운영하기 위해서 어떤 준비가 필요한지 고민하게 되었다.
그런 상황에서 이 책을 접하게 되었고, 기존에 경험적으로 조각조각 알고 있었던 내용들을 다시 한번 정리할 수 있었다.
특히 개인적으로 책에서 다음 내용이 만족스러웠다.
- 가용성을 위한 설계 - 부하분산 클러스터, HA
- 성능, 확장성을 위한 설계 - 스케일업, 스케일 아웃
- 운영, 유지보수를 위한 설계 - 백업, 모니터링
물론 이 책은 각 설계에 대한 이론적인 개념을 훑고 지나가는 정도이지, 이런 설계를 위해서 구체적으로 어떤 작업을 해야하는지 세세하게 알려주지는 않는다. 책을 읽어보고 고민해야하는 영역이 어딘지 키워드를 얻을 수 있지만, 그 이후에 구체적인 고민은 독자의 몫이다.
개발을 이제 시작한 사람들
개발을 시작하고 몇년 동안을 돌아보면, 구현 관점에서 주로 새로운 방법들을 익히고, 성숙도를 높이는 방법에서만 고민을 했던 것 같다. 그러다보니 내가 개발한 서비스가 유지보수하기 좋고, 안정적으로 서비스를 운영하기 위해서 어떤 작업이 필요한지 까지는 생각이 확장되지 못했다.
개발하면서 이런 과정이 당연할 수도 있겠지만, 운영에서 어떤 일들이 필요한지 간접적으로라도 알 수 있다면 어플리케이션 영역안에서 개발하면서도 유지보수 하기 좋거나, 안정적인 운영을 위한 소프트웨어 개발을 고민할 수 있을 것 같다.
책을 읽기 전에 미리 알아둘 것
요즘은 AWS, Google GCP등 퍼블릭 클라우드에서 서비스 운영을 하는 경우가 많다. 이 책은 퍼블릭 클라우드 기반에서 설명을 하거나 하지 않는다.
엔터프라이즈 환경 또는 SI 프로젝트에서 내부에 서버 인프라를 사용하는 환경에서 인프라 엔지니어가 하는 일 위주로 설명이 되어있다.
소프트웨어 개발자가 본문에 하드웨어 관점에서 이중화, 확장성을 다루는 내용은 몰입이 떨어질 수 있다. 하지만 내용이 너무 깊게 다루어지거나 이런 것은 아니기 때문에 IT 교양 정보로 알아도 괜찮을 것 같다.
마무리
책의 내용이 많은 편이 아니기 때문에 가볍게 읽을 수 있는 것이 이 책의 가장 큰 장점이다. 인프라 엔지니어 관점에서 안정적인 운영을 위해서 고민해야 하는 관점을 간접적으로 얻을 수 있는 것은 만족스럽다.
책의 구성이 딱딱한 글만 있는 것이 아니라, 다양한 그림과 이미지를 바탕으로 설명이 되어있어서 이해하기도 쉽고, 자연스럽게 읽히는 것도 좋았다.
마지막으로 자체적으로 서버를 구축하여 서비스를 운영하고 있는 팀에서 일하는 개발자라면 읽어봐도 좋을 것 같다. 운영 경험이 없는 상황에서 운영할 때 어떤 점을 고려해야 하는지 인사이트가 필요한 개발자라면 읽어보는 것을 추천한다.