요즘 관심 있는 분야가 웹, 빅데이터, 인프라, AI인데, 이 포스팅은 인프라 관련된 내용! 

보통 개발자가 개인 피시에서 개발을 하고, 개발한 소프트웨어를 운영서버에 올리게 된다.

개발서버와 운영서버는 환경이 다르기에, 개발서버에서 설치한 소프트웨어들을 운영서버에도 설치해줘야 하고, 코드에 문제가 있을 시 다시 배포해줘야 한다. 
위 작업들이 실제 개발을 할 때, 생각보다 많은 비용(시간)이 소요될 수가 있다. 

또한, 이러한 작업을 사람이 직접 여러 서버에 하다 보면, 실수가 발생하여 서버 간 환경이 조금씩 달라질 수 있다. 이를 snowflake 서버라고 한다.  눈송이를 보면 다 똑같은 모양처럼 느껴지지만 실제론 다들 조금씩 다르다. 
( 모든 서버에 똑같이 설치된 거 같지만, 실제론 약간씩 다르다 ) 



운영하는 입장에서  가장 껄끄러운 게 오래된 서버라고 한다. 조금씩 다른 서버에 ( snowflake서버 ) 무슨 문제가 일어날지 모르기 때문에 .. 


이래서 나온 게 phoenix서버 !  
피닉스 서버는 말 그대로 불사조! 다시 살아나는 서버 ( 말 그대로 서버를 아예 비우고, 다시 설치함 [Immutable Server] )

기업들은 이러한 작업들을 자동화(생산성 향상) 하는 방안들에 대해 고민을 하게 되었다. 
그래서 나온 게  Infrastructure as Code 수작업으로 해오던 인프라 구축이나 변경 작업을 코드로 자동화하는것. 이러한 작업으로 인프라에 반복성과 확장성을 부여한다. 
이러한 Tools로 나온 게 Ansible, Chief, puppet, Terraform, AWS Cloudformation

위와 같은 자동화 기술이 발전하면서 Immutable Infrastructure( 서버가 배포된 후에 수정되지 않는 인프라 )란 말도 같이 이슈도 떠올랐다. 

Immutable Infrastructure : 아예 인프라 구축이나 변경 작업을 모두 자동화하자! 

이런 것을 가능하게 해주는 도구가 여러 가지가 있다. 
먼저 개발 환경과 동일한 환경을 이미지로서 제공해주는 Docker와 이를 관리하기 위한 Kubernetes, Docker Swarm, Apache Mesos 등의 도구가 있다. 
( bare metal서버 환경은 안 변하고 이미지만 교체하여 컨테이너로 띄우기 때문에 snowflake서버 같은 문제를 피할 수 있음 )

또한, 개발자가 코드를 commit 하면 빌드, 테스트, 배포 과정을 UI로서 제공하고, 특정 step에서 문제 발생 시 committer에게 알려주는  CI/CD Pipeline 툴인 Jenkins와 Spinnaker도 있다. 
( 코드를 빌드 하면 테스트와 배포하는 과정을 자동화함으로써 비용을 절감 )

예) jenkins 화면



이러한 기술의 발전으로 Dev + Ops( 개발팀과 운영팀 사이의 소통, 협업을 강조하는 S/W 개발 방법론 ) 가 가능해졌고, 많은 기업들이 도입하고 있다. 
DevOps를 잘하고 있는 기업으로는 Netflix, Facebook 가 대표적으로 떠오르고 있다. 
빠른 배포 주기를 통해 더욱 효율적으로 작업하고 더 빠르게 혁신하며 기업과 고객을 대상으로 더 큰 가치를 제공할 수 있도록 돕는다.



'apps > docker' 카테고리의 다른 글

쿠버네티스란 무엇인가?  (0) 2018.08.18
도커란 무엇인가?  (0) 2018.08.04
flannel을 통한 pod간 통신  (2) 2018.07.03
도커에서 nodejs+mongodb 테스트  (0) 2018.07.01
kubernetes에서 gpu pod생성( nvidia-docker2 )  (2) 2018.05.30

+ Recent posts