Docker
environment disparity 해결
1. 도커를 컴퓨터, 서버에 둘 다 설치
2. docker 파일 생성 -> 구현하고 싶은 환경 설정 (ex. 우분투, 파이썬, 깃)
3. 생성한 docker 파일을 컴퓨터와 서버에게 둘 다 전송
4. docker는 파일을 읽고, 필요한 것을 다운로드 받음
5. docker는 설정한 환경과 같은 버츄얼 컨테이너를 컴퓨터와 서버에 만듦
docker 컨테이너들은 독립적
한 개의 서버에서 각각 다른 환경의 컨테이너를 가질 수 있음
매번 새로운 서비스를 만들 때마다 새로운 서버를 사고, 설정할 필요 없음 (파이썬 서버, 자바 서버, 데이터베이스 서버, ...)
컨테이너를 생성하고 복제하면 됨
Kubernetes
컨테이너를 관리하기 위한 툴
도커를 이용해서 웹 사이트 배포 시 (ex. Node js, Django)
도커 컨테이너 안에 넣어서 AWS로 보내야 할 때
-> 쿠버네티스 필요 없음
1. 컨테이너들의 모니터링 실시: 컨테이너 자동 재시작
특정 컨테이너가 죽으면, 해당 컨테이너를 빨리 재시작 해야함(서비스의 핵심 파트일 수 있음)
쿠버네티스는 컨테이너들을 바라보면서 문제가 있는지 없는지 체크하는 것이 아님
예를 들어, 최소 5개의 컨테이너들이 작동하게끔 할 수 있음
그 중 하나라도 죽으면 쿠버네티스가 해당 컨테이너를 재시작시킴
2.
예를 들어 1만 명의 유저가 접속했지만 웹/앱이 준비되지 않았을 경우
쿠버네티스는 자동으로 새 컨테이너들을 생성
쿠버네티스가 알아서 해당 웹 니즈에 맞춰 컨테이너들을 준비
사람들이 떠나고, 니즈가 줄어들면 컨테이너를 지정해 둔 최소 숫자로 자동으로 조절함
3.
예를 들어, 클라우드에 5개의 컨테이너가 있음
코드 버그를 고치거나 버전을 업데이트 하는 경우
쿠버네티스가 없다면 컨테이너들을 끄고, 새로운 버전을 올리고, 다시 컨테이너들을 켜야 함
-> 웹사이트가 잠시 다운됨
쿠버네티스를 사용하면 컨테이너들의 신규 버전을 차례로 업데이트 함
-> 웹사이트가 다운되는 경우 없음
새로운 버전 배포, 컨테이너 사이즈 조정, 컨테이너 종료 시 재시작 등 컨테이너 관리를 도와줌
DevOps
소프트웨어의 개발(Development)과 운영(Operations)의 합성어
5가지 철학
1. 문화(Culture): DevOps를 통해 하나의 문화를 만들어 나감
2. 자동화(Automation): 자동화를 통해 효율성과 빠른 속도 지향
3. 측정(Measurement): 지표를 측정하여 지속적으로 개선
4. 공유(Sharing): 공유를 통해 함께 발전
5. 축적(File up & Pile up): 기록을 축적하여 자신을 만들어 나감
어떤 요구사항을 효율적으로 만족시키기 위해서
일을 자동화 하며,
변경 사항 지표들을 측정하고, 공유하고,
모든 성공과 실패의 결과물들을 지속적으로 축적해 나아가는 문화를 만들어 나가는
철학, 방법론 내지는 기술
DevOps 엔지니어
: 올바른 DevOps 문화를 위해 서비스 혹은 S/W Life Cycle에서 반복적인 일들을 자동화하고,
기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람
Soft Skill
1. 문제 인식: 문제가 무엇이 있는지, 정확한 원인이 무엇인지 파악해야 함
2. 선택과 집중: 문제를 적합한 방법을 통해 해결하고, 해결의 우선순위를 올바르게 설정
3. 결정: 수 많은 선택지에 대해서, 추측이 아닌 확신을 가지고 빠르게 결정
4. 업의 속성: 제공하는 서비스의 본질과 가치를 이해해야 함
5. 사용자: 사용자를 이해하고, 요구사항에 대해서 빠르게 피드백 해야 함
Technical Skill
1. 프로그래밍: 능숙하게 다룰 수 있는 언어 (ex. Go, Python 등)
2. 운영체제: Linux와 같은 운영체제를 능숙하게 다루는 것과 개념에 대해서 알아야 함 (Linux, Shell, OS metrics, File system, 7 layers 등)
3. 서버관리: 서버를 관리하는 기술과 운영지식을 통해 신뢰할 수 있는 서비스를 구축해야 함. (ex. IaC, CI/CD, API, 가용성, 성능 등)
4. 오픈소스: 인프라를 이루는 S/W 들을 이해하고, 자동화 도구들을 다룰 수 있어야 함. (ex. nginx, Tomcat, MySQL, Redis, Ansible, Terraform 등)
5. 클라우드: 퍼블릭 클라우드를 능숙하게 다루고, 직접 구축 및 설계를 할 수 있어야 함. (ex. AWS, Azure, GCP, Alibaba 등)
Infrastructur as Code: 코드로써의 인프라
인프라를 이루는 서버, 미들웨어, 서비스 등 인프라 구성요소들을 코드를 통해 구축하는 것.
IaC는 코드로써의 장점, 즉, 작성 용이성, 재사용성, 유지보수 등의 장점을 가짐
-> Terraform: 가장 많이 쓰이는 IaC 도구
'오늘 배운 것' 카테고리의 다른 글
스트림(Stream) (0) | 2021.08.21 |
---|---|
람다 (자바의 정석) (0) | 2021.08.20 |
[스프링 핵심 원리 기본] 객체지향 설계와 스프링 (0) | 2021.07.28 |
[스프링 MVC 2] 스프링 타입 컨버터(2), 파일 업로드 (0) | 2021.07.26 |
[스프링 MVC 2] API 예외 처리(2), 스프링 타입 컨버터 (0) | 2021.07.26 |