HashiCorp는 Vagrant, Packer, Consul, Terraform등의 도구를 만든 회사인데 이 글은 HashiCorp의 사상을 설명하는 The Tao of HashiCorp의 내용을 번역한 글이다. HashiCorp의 제품을 많이 쓰고 있지는 않지만 HashiCorp의 제품에 깊은 인상을 받을 때가 많았다가 지난 달에 HashiCorp에 놀러가서 설명을 듣다가 더 맘에 들어서 허락을 받고 번역을 했다.
HashiCorp의 도(The Tao of HashiCorp)
2014년 12월 8일 Mitchell Hashimoto, Armon Dadgar
HashiCorp의 도는 우리의 비전과 로드맵, 제품 설계를 이끄는 기반이 된다. HashiCorp의 제품을 사용하거나 기여하려고 생각하고 있다면 우리가 하는 작업의 동기와 의도를 이해하는 것이 가치 있을 것이다.
기술이 아닌 작업흐름
HashiCorp는 기반을 두는 기술이 아니라 최종 목표와 작업 흐름에 집중해서 접근하고 있다. 소프트웨어와 하드웨어는 계속해서 발전하고 개선될 것이므로 가능한 한 가장 합리적인 사용자 경험을 제공하면서 새로운 도구를 간단하게 도입할 수 있게 하는 것이 우리의 목표이다. 제품 설계는 설정한 목표를 달성하기 위해 상상한 작업 흐름에서 부터 시작된다. 작업 흐름을 간단하게 만들 수 있는 기존의 도구를 살펴볼 것이고 만족할만한 도구가 없다면 만들기 시작할 것이다. 이러한 접근을 통해 근본적으로 기술에 종속되지 않는 시각을 얻을 수 있으므로 해당 문제를 해결할 수 있는 가장 최적의 기술을 사용할 것이다. 기술이 발전하고 더 좋은 도구가 나타나기 때문에 이상적인 작업흐름도 이러한 기술을 사용해서 갱신되어야 한다. 기술은 바뀌지만 최종 목표는 같다.
간단하고, 모듈화되고, 조합할 수 있는
소프트웨어는 간단하고 모듈화되고 조합할 수 있다는 장점을 전파하는 유닉스 철학은 잘 알려졌다. 이 접근방법은 다른 컴포넌트와 함께 사용할 수 있도록 범위가 잘 정의된 작은 컴포넌트를 많이 만드는 것을 선호한다. 다른 접근으로는 단일형(monolithic) 접근이 있는데 이는 새로운 기능과 능력을 커버할 수 있는 넓은 범위를 가진 하나의 도구를 의미한다. 우리는 컴포넌트를 새롭고 혁신적인 방법으로 조합할 수 있으면서 자신만의 기능을 가지고 있는 블록처럼 생각하기를 선호한다.
간단하고 모듈화되고 조합할 수 있다는 접근을 통해 고수준으로 추상화한 제품을 만들 수 있다. 문제 전체를 해결하는 대신 구성요소별로 나누어서 해결한다. 각 문제의 범위에서 가능한 최선의 해결책을 만들고 이 블록을 합쳐서 하나의 전체 솔루션을 구성한다.
연결된 단계와의 통신
간단하고 모듈화되고 조합할 수 있는 소프트웨어에 대한 신념이 있다면 각 조각을 하나의 연결된 시스템으로 만드는 여러 가지 견해가 생긴다. 연결된 단계와의 통신(CSP, Communicating Sequential Processes)은 네트워크로 연결된 자율적인 단계가 서로 통신할 수 있는 계산 모델이다. 서비스 지향 아키텍처(Service Oriented Architecture)에서 복잡성을 관리하고 신뢰할 수 있으면서 확장도 가능한 시스템을 만들려면 CSP 접근이 필수라고 생각한다. 각 서비스는 개별적인 단계가 되어야 하고 API를 통해 다른 서비스와 통신할 수 있어야 한다.
CSP는 소프트웨어를 관리하고 하나의 시스템으로 서비스를 구성하는 방법 중 가장 잘 알려진 방법이다. 자연이 가장 좋은 예시를 제공하는데 사람의 몸 조차도 호흡 기관, 심장혈관, 신경, 면역 등 서로 연결된 서비스들의 하나의 시스템이다.
불변성
불변성은 변경할 수 없는 속성으로 많은 단계에 적용할 수 있는 개념이다. 가장 익숙한 불변성의 구현체가 버전 관리 시스템으로 일단 코드를 커밋하면 커밋은 영원히 고정된다. git 같은 버전 관리 시스템이 많은 이점을 제공하므로 널리 사용되고 있다. 코드의 버전을 관리할 수 있게 되므로 롤백이나 재적용이 가능하고 코드를 원자적으로 검사하고 작성할 수 있다. 버전을 사용하면 검사할 수 있고 어떻게 현재 상태에 이르렀는지를 보여주는 깔끔한 히스토리를 만들 수 있다. 무언가 문제가 발생한다면 버전 히스토리를 통해 언제부터 오류가 발생했는지 알 수 있다.
불변성의 개념을 애플리케이션 소스, 애플리케이션 버전, 서버의 상태 등 많은 인프라스트럭처의 관점으로 확장할 수 있다. 불변 인프라스트럭처를 사용하면 더 간단하고 신뢰할 수 있는 운영, 디버깅, 버전 관리, 시각화가 가능한 시스템을 만들 수 있다고 생각한다.
성문화(Codification)를 통한 버전관리
성문화는 모든 과정을 코드로 작성하고 저장해서 버전 관리를 해야 한다는 신념이다. 역사적으로 운영팀은 인프라스트럭처를 어떻게 구성하고 업그레이드하고 분해하는지에 대한 지식을 구전으로 전달하는 방식을 사용했다. 하지만 이 정보는 쉽게 없어지거나 정말 필요한 사람들은 찾아볼 수 없게 되었다. 자동으로 저장되고 버전 관리가 가능한 과정으로 핵심 지식을 문서로 만들면 정보를 공유하고 데이터의 손실을 막을 수 있다.
HashiCorp 제품은 모두 지식의 성문화 개념을 따르도록 설계했다. 사용자가 만든 모든 변경사항이 버전 관리가 되고 저장돼서 각 단계의 깔끔한 히스토리를 유지할 수 있다.
성문화를 통한 자동화
보통 시스템 관리자는 운영자가 수동으로 인프라스트럭처를 변경하도록 요구해서 그 위치에서 맡은 일을 확장하기 어렵게 만든다. 관리하는 인프라스트럽처의 크기는 계속해서 증가하고 수동 시스템 관리 기술은 새로운 크기에 맞추기 위해서 고군분투하고 있다. 더 적은 노력으로 더 많은 시스템을 관리하는 자동화가 유일한 선택지이다.
자동화에 관해 많은 접근이 있지만 우리는 성문화를 선호한다. 성문화는 기계가 지식을 실행할 수 있게 하면서 운영자도 읽을 수 있게 한다. 자동화된 도구는 운영자의 생산성을 높이고 더 빨리 바꿀 수 있게 하고 사람의 실수를 줄인다. 기계는 자동으로 이슈를 탐지하고 분배하고 해결할 수 있다.
회복력 있는 시스템
회복력 있는 시스템은 예측하지 못한 입력과 출력에 잘 견디도록 만들어진다. 이를 이루려면 시스템이 원하는 상태, 현재 상태에서 정보를 수집하는 메서드, 자동으로 현재 상태를 원하는 상태로 조정하는 메커니즘을 가져야 한다.
인프라스트럭처에 이러한 종류의 시스템 엄격함을 적용하는 것이 가장 높은 수준의 신뢰성을 확보하는 핵심이라고 생각한다. HashiCorp 제품은 항상 정리된 지식으로 원하는 상태를 인지할 것이고 기능적으로 독립된 컴포넌트를 통해 실시간 정보를 수집할 것이다. 그리고 HashiCorp 제품은 자연 치유하고 자동 복구하는 도구를 제공할 것이다.
실용주의
어떤 문제에 접근하더라도 실용주의의 가치를 크게 믿고 있다. 불변성, 성문화, 자동화, CSP처럼 우리가 믿는 많은 원리는 우리가 열망하는 이상이면서 우리가 독단적으로 적용하는 요구사항이 아니다. 현실적인 해결책이 우리의 이상을 다시 고려하게 만드는 상황이 많이 존재한다.
실용주의로 우리는 새로운 아이디어와 접근방법, 기술을 평가할 수 있고 HashiCorp의 모범 사례를 개선하기 위해 이러한 아이디어나 접근방법 , 기술을 도입하는 방법을 평가할 수 있다. 이는 첫 번째 원리와 타협하는 실수가 아니고 우리가 잘못할 수도 있다고 받아들이는 겸손이고 열린 마음이다. 적응하는 능력이 혁신의 핵심이고 우리가 자랑스럽게 선택하는 것이다.
번역 감사합니다 :) 앞으로 hashicorp 얘기 나오면 이 글 보여줘야겠네요 ㅎㅎ.
번역 이상한 부분 있으면 언제든 얘기해 주세요. ㅎ