클라우드

코드형 인프라란 , Infrastructure as Code? IaC

게임이 더 좋아 2022. 9. 18. 19:15
반응형
728x170

요즘 회사에서는 인프라를 구축하고 운영하는 일을

정말 컴퓨터를 사고, 방화벽을 구축하고, 제공하는 것을 직접 하지 않는다.

직접 인프라를 구현하는 것보다는 모든 것을 클라우드와 자동화 기술을 사용해서 짧은 시간 안에 더 안정적으로 작업할 수 있는 환경을 구성하는 것에 심혈을 기울인다.

하지만 그렇게 쉬운 일은 아니다.

 

인프라 리소스의 규모, 복잡성, 다양성이 증가하면서 힘들어졌다.

그니까 더욱 클라우드 인프라 자동화 기술이 더 중요해졌다.

단순히 자동화 도구 및 클라우드 플랫폼의 도입만으로는 부족하다.

그래서 코드형 인프라라는 것이 나왔다.

 

특징은 3가지 정도로 추릴 수 있다.

1. 모든 것을 코드로 정의한다.

 

2. 코드를 지속적으로 테스트하고 딜리버리한다.

 

3. 시스템을 작고 간단하게 빌드한다.

 

그에 대한 배경부터 천천히 알아보자

 


 

 

클라우드 시대가 도래한 만큼 인프라를 빠르게 만들 수 있는 것은 사실이다.

하지만 이러한 기술만으로 시스템을 쉽게 관리하고 확장가능한 것은 아니다.

다시 말하면 기술 부채가 있는 기존의 시스템이 제약 없는 클라우드로 바로 마이그레이션 된다면 혼란만 더 가중될 뿐이다.

즉, 클라우드로 넘어가기 위해서는 전통적인 프로세스 자체를 고려해볼 필요가 있다.

또한 빠르게 변화하는 클라우드 시대에 맞추오 새로운 사고 방식도 필요해진다.

위험 감소와 품질 향상을 위해서 더 빠르게 발전하는 기술을 활용할 수 있는 클라우드 환경으로 넘어가야 한다는 말이다.

이를 위해서는 근본적인 접근 방식의 변화와 인프라 변경 및 위험에 대한 새로운 사고가 필요하다.

 

결국 코드형 인프라는 클라우드 시대에 높은 안정성과 품질 확보를 할 수 있는 관리 방식이라고 할 수 있다.

 


 

코드형 인프라는 소프트웨어 개발론에서 나온 실행 방법을 기반으로 하는 인프라 자동화 방법이다.

즉, 시스템과 설정을 프로비저닝하고 변경하기 위해 일관되고 반복 가능한 루틴을 강조한다.

변경 내용을 코딩하면 변경 내용이 자동으로 테스트된 후 배포된다.

 

이것은 TDD, CI, CD 와 관계가 깊은 이야기다.

즉, 코드형 인프라로 저 3가지에서 얻을 수 있는 이점을 똑같이 얻을 수 있다는 말이다.

 

1. 인프라로 신속한 배포 가능

2. 인프라 변경에 따른 노력과 에러 감소

3. 인프라 사용자에게 필요한 리소스 지원

4. 개발, 운영, 관리 간에 공통 도구 제공

5. 거버넌스, 보안, 규정 준수 제어를 시각화

6. 장애 해결과 문제 분석 속도 향상

 


 

무엇인가 바꾼다는 것은 위험하다는 일이기도 하다.

하지만 변경은 피할 수 없다.

다만 어떻게 변경할 것이며 어떻게 위험을 대처할 것인가가 문제다.

오히려 변경을 하는 위험을 피하느라 현재에 체류해있는 것이 더 비효율적일 수 있다.

 

하지만 코드를 통한 인프라 자동화라고 해서 변경에서 자유로운 것은 아니다.

인프라를 제공한다고 해서 끝이 아니다.

리소스가 필요할 때도 있고, 뭐 여러가지 이유가 있다.

예를 들면 DB를 추가하고 싶다. 서버의 성능을 업그레이드하고 싶다.

더 많은 리소스가 필요하다. 보안 패치를 해야 한다.

등 여러가지 너무 많다.

만약 이러한 변경에 대한 안정성을 제공하기 위해서는 어떻게든 관리해야 한다.

여러 책들은  코드로 관리하는 방법을 제시하고 있다.

 

 


 

그렇다. 피할 수 없는 일이라면 해야 한다.어떻게 할까?

 

처음에 3가지 특징을 설명했다.첫번째부터 보자

 

1. 모든 것을 코드로 정의한다.

 

코드로 정의하는 것은 빠르고 안정적인 변경을 위한 핵심 중 하나이다.코드로 정의하는 것은 3가지 특징을 가진다.

 

1. 재사용성모든 것을 코드로 정의할 경우 인스턴스 단위로 빠르게 수정 후 빌드를 할 수 있다. 다른 사용자 역시 같은 인스턴스라면 바로 만들 수 있다.=> 코드는 변하지 않으니까

 

2. 일관성코드를 사용한 것은 항상 같은 방법을 사용한다.같은 인스턴스라도 다르게 만들 경우가 있지만 코드로 만든다면 같아진다.시스템이 예측가능해지며 테스트도 더욱 안정적으로 진행이 가능하고 CI/CD가 가능해진다.

 

 

3. 투명성코드를 보면 시스템이 어떻게 구축되어 있는지 알 수 있다. 코드로 되어있기 때문에 검토가 가능하고 리뷰도 가능하다.다른 코드에서 우리의 문제를 해결할 인사이트를 찾을 수도 있다.

 

두번째를 보자

2. 코드를 지속적으로 테스트하고 딜리버리한다.

효율적인 인프라팀은 테스트에 엄격하다.

자동화를 사용하여 시스템의 각 컴포넌트를 배포하고 테스트하며 진행 중인 모든 작업을 통합한다.

다시말해서 모든 것을 완료한 후 테스트가 가능한 것이 아니라 작업을 진행하면서도 테스트가 가능하다.CI에서는 개발 과정에서 모든 사람의 코드를 병합하고 테스트하는 작업을 한다면CD에서는 합쳐진 코드가 프로덕션 환경에서 배포 가능한지 테스트 한다.

 

 

세번째를 보자

3. 시스템을 작고 간단하게 빌드한다.

작고 간단하게 만든다는 원칙은 좋다.크게 만들수록 결합도가 높아지고 변경이 어렵고 망가지기 쉽다.각 컴포넌트 별로 이해하기 쉽고 간단하게 정의된 인터페이스를 가지게 하는 것이 좋다.

이를 통해 각 컴포넌트가 분리된 환경에서 테스트와 배포가 진행되는 것이다.

 


 

클라우드와 인프라 자동화는 지금에서는.. 뗄레야 뗄 수 없는 사이이다.하지만 클라우드라는 환경에 맞는 사고 방식이 있으니... 그것은 바로속도를 이용하여 품질을 향상시키고품질을 향상시켜 속도를 얻는 것이다.

 

인프라 자동화는 많은 노력과 비용이 든다.하지만 이러한 노력은 이 시대에 맞는 흐름에 적응하기 위한 물장구라고 볼 수 있겠다.발을 바삐 움직이지 않으면 가라앉게 된다.

 

**품질을 테스트하는 것이 아니라. 테스트를 통해 품질을 구축하는 것이다.

 

 

 

 

반응형
그리드형

'클라우드' 카테고리의 다른 글

AWS, 아마존 웹 서비스 탐구(Cloud Front, EC2, EBS)  (4) 2022.11.07