오늘은 DevOps에 대해서 알아보려고 한다. EC2 기반 DevOps 에 특징에 대해 알아보려고 한다.
DevOps란?
- 소프트웨어 개발(Development)과 운영(Operation)을 결합한 용어
- 개발, 배포, 운영의 전 과정을 자동화하고 최적화하여,
신속하고 안정적으로 소프트웨어를 제공하는게 목표
- 개발팀과 운영팀 간의 통합을 의미
- 실시간 모니터링으로 문제를 빠르게 파악하고 개선
- 상호 협력 강화
CI/CD
- 지속적 통합(Continuous Integration, CI)
- 지속적 배포(Continuous Delivery, CD)
- 새로운 코드를 지속적으로 통합하고 테스트하여 자동으로 배포되는 방식
- 코드 변경 사항이 빠르고 안정적으로 반영할 수 있음
- 관련 S/W
- CI: Github Action, Gitlab CI, Jenkins
- CD: ArgoCD, FluxCD, Jenkins
DevOps S/W
- CI/CD 도구: Jenkins, GitLab CI, Github
- 컨테이너 및 오케스트레이션: Docker, Kubernetes
- 자동화 도구: Ansible, Terraform
- 모니터링 도구: Prometheus, Grafana, Datadog
EC2 기반 DevOps 방식
-
On-Premise 운영도 이와 비슷
-
EC2마다 CPU, Memory, Disk, IP(Private, Public)을 모두 관리
- 1번 서버는 MySQL이고 2번 서버는 Spring이고 3번 서버는…
- LB가 어떤 서버를 바라보고 있는지도 관리가 필요
EC2 기반 DevOps 방식
- Github: 코드 관리
- Jenkins: CI/CD
- Ansible: 서버 환경 구성 자동화 도구(IaC)
- Grafana: 모니터링 솔루션

EC2 기반 DevOps 방식의 문제
- Deprecation되는 요소
- 물리적인 서버: 일반적으로 서버 장비의 워런티(warranty)는 3년
- S/W: CentOS , Python 2.7, Java 8, Node.js 14, MySQL 5.7
- 장애 발생시 수작업이 필요
- 서버가 죽었다? -> failover가 된다해도 죽은 서버를 살려야함
- 작업 후 명세 변경 필요(1번이 Slave였는데 지금은 Master…)
- 서버 자원을 효율화
- CPU는 많이 쓰는데 메모리가 남음 / Disk 용량은 별로 안쓰는데 I/O 작업은 많이 발생
- 명세화(문서화)하지 않는다면…?
- 누군가에게 시스템을 종속되는 문제가 발생
- 누군가 퇴사했을때 인수인계되지 않는 포인트가 존재
- 휴가를 가도 연락도 받아야하고 노트북을 챙겨야한다
- 서비스의 히스토리가 공유되지 않아서 발생하는 문제가 발생한다
- 인프라 작업에 대해서 모든걸 문서화하기는 쉽지 않음
- config를 A -> B로 변경함
- /var/log/nginx에 rotate 적용
- 보안
- 서버 권한: Linux, DB User 생성 및 접근 권한 관리
- ID/PW vs SSH Public Key
- 개발팀 / 운영팀 / 관리자 권한 관리
- 네트워크
- IP 기반 방화벽 관리
- VDI(Virtual Desktop Infrastructure) vs VPN
- 개발 / 상용 환경 분리
AWS Managed Service 기반 DevOps 방식
주로 먼저 검토하는 서비스
- RDS: DB 서비스. DB버전 및 부하테스트를 주로 검증
- Lambda: 서버 인프라 없이 코드를 실행할 수 있는 서비스(Serverless)
- S3: 객체 스토리지 서비스(Serverless)
- CloudWatch: 로그 및 리소스 모니터링 서비스
- Route53: DNS 서비스
- ECS: Container Application 배포 및 관리 서비스
- Elastic Beanstalk: Application 배포 및 인프라 관리 서비스
Managed Service의 장점
- 제공되는 서비스를 잘 사용하면 DevOps에 필요한 요소들을 직접 구축할 필요가 없다
- CI/CD
- 모니터링
- Auto Scaling: 서비스를 빠르고 유연하게 확장하거나 축소할 수 있는 방식(서비스)
Managed Service의 단점
- 비용이 매우 비싸다
- SSD 2TB: 10만원에 사서 3~5년 사용
- EBS 2TB: 매달 $160. 성능은 별도 과금
- Custom
- 정해진 스펙(가이드)로만 작업이 가능
- 예) Lambda에서 python이랑 js를 같이 사용 불가능. 15분 이내로 처리가 필요함
- 러닝커브
- 진입 장벽은 낮은 편이지만 갈수록 높아짐

러닝커브(Learning curve)
- 너무도 어려운 클라우드
- 너무나도 다른 이론과 현실
- RDS: 완전관리형이라고 하지만 실제론 설정하나 잘못 바꾸면 클러스터 장애 발생
- Lambda: 서버리스라고 하지만 서버처럼 돌아줬으면 좋겠음(ex - 최대 실행 시간 15분)
- S3: 너무 비쌈. 내가 자원을 얼마나 쓰고 있는지 알기 어려운 구조
- VPC: 한번 설정하면 설정을 바꾸기 어려워서 평생 써야함
EC2 기반 서비스 vs 서버리스 서비스
-
EC2 기반 서비스
- Elastic Beanstalk
- ECS
- RDS
- Elastic Load Balancer
- EBS, EFS
AWS Managed Service 기반 DevOps 방식
-
서버리스 서비스
- Lambda
- Fargate
- RDS Aurora serverless
- API Gateway
- S3
- DynamoDB
- SQS
서버리스 오픈소스
- Lambda에 오픈소스 프레임워크(Spring, Flask…)를 올려서 쓸 수 없을까…?
- Python
- Node.js
- Claudia.js, Architect (ARC)
- 범용
피할 수 없는 요소
- 벤더 락인(Vendor lock-in)
- 서비스 제공업체의 기술에 너무 의존하여, 다른 업체의 서비스로 쉽게 이전하기 어려운 현상
- 대표적인 예시
- SAP
- ERP
- 오라클DB
- 클라우드(AWS, GCP, Azure…)