DevOps
소프트웨어의 개발과 운영의 합성어
어떤 요구사항을 효율적으로 만족시키기 위하여, 일을 자동화하며 변경사항 지표들을 측정하고,
공유하고, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철학, 방법론, 기술.
어려워 보이지만, 단지 마음을 움직이는 것이 어려울 뿐.
그저 매 순간순간 나의 일이, 우리의 일이 올바르게 가고 있는지 방향성만 맞추어 나가면 됨.
현대의 서비스는 너무나도 복잡함.
수많은 문제들을 데브옵스를 통해 해결해나갈 수 있음.
DevOps 엔지니어
올바른 DevOps 문화를 위해 서비스 혹은 S/W LifeCycle에서 반복적인 일들을 자동화하고,
기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람
DevOps 엔지니어의 요구 스킬
1. 소프트 스킬
문제 인식 - 정확한 문제 인식, 정확한 원인이 무엇인지 파악해야 함
선택과 집중 - 문제를 적합한 방법을 통해 해결하고, 해결의 우선순위를 올바르게 설정
결정 - 확신을 가지고 빠르게 결정
업의 속성 - 서비스의 본질과 가치를 이해
사용자 - 사용자를 이해하고, 요구사항에 대해서 빠르게 피드백해야, 빠르게 적용해야
2. 테크니컬 스킬
프로그래밍 - Go, Python 등 능숙하게 다룰 수 있는 언어는 큰 강점이 됨
운영체제 - 리눅스와 같은 운영체제를 능숙하게 다루는 것과 개념을 반드시 알아야 함 (생활이 되어야 함)
ex. Shell, OS metrics, File System, 7 layers
서버 관리 - 서버를 관리하는 기술과 운영지식을 통해 신뢰할 수 있는 서비스를 구축해야 함
ex. IaC, CI/CD, API, 가용성, 성능 등
오픈 소스 - 인프라를 이루는 S/W들을 이해하고, 자동화 도구들을 다룰 수 있어야 함
ex. nginx, Tomcat, MySQL, Redis, Ansible, Terraform 등
클라우드 - 퍼블릭 클라우드를 능숙하게 다루고, 직접 구축 및 설계를 할 수 있어야
ex. AWS, Azure, GCP, Alibaba 등
Infrastructure as Code
IaC
코드로써 인프라를 얘기
인프라를 이루는 서버, 미들웨어, 서비스 등의 인프라 구성 요소들을 코드를 통해 구축하는 것
코드로서의 장점을 다 가지고 있음 -> 작성하는 게 빨라짐, 작성용이성, 재사용성, 유지보수 등의 장점
Terraform
가장 많이 쓰이는 IaC 도구
Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently
테라폼은 인프라를 효율적으로 만들고, 변경하고, 기록하고, 버전 관리를 할 수 있는 IaC를 위해 만들어진 도구이다.
.tf 형식의 파일 형식을 가진다.
AWS, Azure, GCP 같은 퍼블릭 클라우드뿐만이 아닌 다양한 서비스들 역시 지원한다.
Terraform 기본 구성 요소
구성 요소 | 설명 |
provider | 테라폼으로 생성할 인프라의 종류 |
resource | 테라폼으로 실제로 생성할 인프라 자원 |
state | 테라폼을 통해 생성한 자원의 상태 (파일 형태로 남음, 실제 테라폼 명령어 실행의 결과값, 실제 인프라의 상태는 아님, 스테이트 파일과 현재 인프라의 상태를 똑같이 유지하는 게 키포인트, state는 원격 저장소인 'backend'에도 저장될 수 있음) |
output | 테라폼으로 만든 자원을 변수 형태로 state 파일에 저장하는 것 |
module | 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것 (재사용 시 강점이 있음. moudle은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용됨.) |
remote | 다른 경로의 state파일을 참조하는 것. output 변수를 불러올 때 주로 사용 (원격 참조 개념으로 이해하면 좋음) |
공부 방법
커뮤니티부터 가입하라!
발표에도 주시하고 진중한 고민을 담은 질문을 해라
지금 당장 설치하고 작성해서 무언가를 만들어봐라!
먼저 가까워지는 게 더 중요하다.
Junior라면, 처음 시작하는 사람이라면 일단 설치하고 작성해서 무언가를 만들어봐라.
Terraform 기본 명령어
명령어 | 설명 |
init | 테라폼 명령어 사용을 위해 각종 설정 진행 |
plan | 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측결과를 보여줌 (가장 많이 쓰이는 명령어. 기본적으로 plan에 문제가 없어야 apply에 문제가 없을 확률이 높음. 습관화해야 하는 명령어) |
apply | 테라폼 코드로 실제 인프라를 생성하는 명령어 (실제 자원 생성. 실제 인프라에 영향을 끼치는 명령어이므로 주의깊게 실행해야 함) |
Import | 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어 |
state | 테라폼 state를 다루는 명령어. 하위 명령어로 mv, push와 같은 명령어 |
destroy | 생성된 자원들 state 파일 모두 삭제하는 명령어 |
Process
Init -> Plan -> Apply
Init
작성한 코드에서 Init 명령어를 입력함
테라폼의 다른 명령어들을 위한 설정을 진행
내부적으로는 provider와 state, module 설정 등이 있음
Plan
실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어
가장 많이 쓰이는 명령어
기본적으로 plan에 문제가 없어야 apply에 문제가 없을 확률이 높음
Apply
실제로 작성한 코드로 명령어 생성하는 명령어
실제 인프라에 영향을 끼치는 명령어이므로 주의깊게 실행을 해야 함
DevOps 로드맵
OS에 대한 지식 매우매우 중요
컨테이너를 이해하는 것뿐만 아니라 왜 컨테이너를 사용하고 왜 컨테이너가 중요해졌는지 사상을 이해하는 게 매우 중요함!
(관련해서) Immutable Infra Structure를 꼭 이해했으면 함.
중요한 것은 뭘 써도 능숙하게 쓸 줄을 알아야 함
정확하게 각 솔루션이 제공하는 사상을 이해하고 기능을 이해해서 정확하게 쓰는 게 매우 중요함.
'DevOps > Terraform' 카테고리의 다른 글
[DevOps] AWS, Terraform - AWS IAM (0) | 2023.06.19 |
---|---|
[DevOps] AWS, Terraform - AWS S3 (0) | 2023.06.18 |
[DevOps] AWS, Terraform - Terraform으로 AWS 리소스 생성하기 (0) | 2023.06.18 |
[DevOps] AWS, Terraform - AWS EC2 및 SSH 활용 (0) | 2023.06.15 |
[Infra] Terraform (0) | 2023.06.11 |