본문 바로가기

continuousdelivery

(18)
Continuous Integration 지속적 통합(Continuous Integration)은 짧은 주기로 소프트웨어(Software)를 개발하고, 사용자에게 빠르게 전달한 다음, 개선사항을 제안받아 다음 번 개발에 반영함으로써 지속적이고 주기적으로 소프트웨어를 개선해 나가는 개발 방법을 말한다. 이렇게 하면 사용자의 요구사항이 변경되더라도 쉽고 유연하게 맞춰나갈 수 있다. 보통 소프트웨어 개발은 설계, 개발, 검증, 배포의 과정으로 진행하는데, 전통적으로 전 과정에서 각 단계는 분리되어 있었고 뒤로 되돌아 가기 어려웠다. 그래서 보다 꼼꼼하게 설계하고 많은 시간을 설계 문서 작성에 공을 들였다. 일부의 경우 이러한 방법이 잘 맞았다. 요구사항의 변화 폭이 크지 않은 경우엔 충분히 설계를 검토하고 문서를 꼼꼼하게 잘 만들수 있었고, 검증도 ..
Continuous Delivery 지속적 전달(Continuous Delivery)은 짧은 주기로 소프트웨어를 개발하고, 언제든지 안정적으로 배포할 수 있도록 하는 소프트웨어 공학(Software Engineering)이다. 모든 변경사항은 언제라도 운영가능한 상태(Production-ready)가 되도록 만드는 것이다.작은 규모의 소프트웨어를 짧은 시간동안 개발해서 즉각적으로 사용자에게 전달하겠다는 도전은 도달하기 쉽지 않은 목표이지만, 이를 통해서 사용자(소비자, 고객)의 만족을 높일 수 있으므로 매우 중요하다. 그래서 지속적 전달이라는 용어가 정립되기 전에도 같은 목표(애자일 철학)을 이루기 위한 여러 시도가 있었다. 바로, 지속적 통합이다. 지속적 통합을 통해서도 사용자의 피드백을 지속적으로 반영하고 개선하는 노력을 하였고, 주로..
About Pull Requests 코드 리뷰(Code Review)의 목적에 대해서 이야기해 본 적이 있다. 코드 리뷰의 목적에 대해 말하면서 다음 번에는 코드 리뷰를 잘 하는 방법에 대해 이야기 하기로 했다. 그래서 코드 리뷰를 잘하기 위한 방법에 대해 공유해 보고자 한다. 가장 먼저 하고 싶은 이야기는 '숙제 검사 이야기'다. 코드 리뷰를 처음 접하는 사람들이 리뷰를 숙제 검사로 받아들이는 경우가 많았다. 어떤 일이 주어지면 그 것에 대한 기능을 개발하고나서 결과를 검사해 달라는 의미로 리뷰를 요청하였다. 보통 이런 경우는 몇 가지 특징이 있다. 예상 일정의 마감 직전에 풀 리퀘스트(PR; Pull Request)가 올라온다. 그리고 거기에는 꽤 많은 양의 코드가 포함되어 있다. 또한 코드에 대한 설명이 별로 없다. 보통 이런 코드 ..
Version Control System 버전 관리(Version Control)는 문서, 프로그램, 웹 페이지 등 어떠한 형태의 정보 집합이든지 그 변화를 기록하고 관리하는 것을 뜻한다. 이렇게 변화의 내용을 관리하면, 결과물의 편집본과 최종본을 쉽게 관리할 수 있으며, 여러 사람이 함께 공동으로 작업할 수 있게 해준다. 아마도 대부분의 사람들이 파일(File)의 이름을 바꿔가면서 이력관리 해본 경험이 있을 것이다. 이 방법이 가장 직관적이며 쉽게 떠올 릴 수 있는 방법이기 때문이다. 그러나 회사에서 여러 사람들과 공동의 작업을 진행하는 경우에도 같은 방법을 사용하게 되면 많은 불편함을 겪게 된다. 누가 작업하고 있는 것이 최종인지 확인이 어렵기 때문이다. 취합본이라는 메일을 받아 본 기억을 떠올려 보자. 현재 자신이 작업 중인 문서와 메일로..
Spinnaker Update: 스핀에커(Spinnaker)를 생성하고 관리할 수 있는 테라폼 모듈 프로젝트 저장소(https://github.com/Young-ook/terraform-aws-spinnaker) 에서 구체적인 내용을 확인할 수 있다. 스핀에커 테라폼 모듈 외에도 AWS 계정을 스핀에커에서 관리할 수 있도록 등록하는 방법, Amazon EKS 클러스터를 생성하고 스핀에커에서 관리할 수 있도록 등록하는 방법, 카오스 엔지니어링을 위한 카오스 몽키(Chaos Monkey) 연동방법 등 스핀에커 모범 사례 예제가 제공된다. 넷플릭스(Netflix)에서 2016년에..
Terraform 테라폼(Terraform, https://www.terraform.io)은 클라우드(Cloud) 인프라스트럭처(Infrastructure)를 소스 코드로 관리할 수 있도록 하시코프(HashiCorp)에서 만든 도구이며, 이러한 개념을 인프라스트럭처 애즈 코드(Infrastructure as Code, IaC)라고 부른다. 테라폼이라는 단어는 지구와 비슷한 행성을 사람이 살 수 있는 환경으로 만든다는 뜻을 가지고 있는데, 하시코프 창업자가 새로운 IaC 프로젝트의 이름을 고민하던 중 인프라스트럭처를 구축한다는 점이 비슷하다고 생각해서 이름을 지었다고 한다. 보통 인프라스트럭처라고 부르는 것에는 부하 분산기(Load Balancer), 데이터베이스(Database), 방화벽(Security Firewall)..
Immutable Infrastructure 몇 년 전, IoT 과제에 참여했을때 Immutable Artifact (변경불가능한 결과물) 또는 Immutable Infrastructure에 대해 겪은 것을 이야기를 하려고 한다. IoT과제는 지속적 전달(Continuous Delivery)과 불변의 인프라스트럭처(Immutable Infrastructure) 를 도입하였다. 그러나 안타깝게도 대부분의 사람들은 그 개념이 무엇인지 잘 몰랐다. 기존 엔지니어들이 하던 방식을 그대로 따르려고만 했고 일정 압박을 핑계로 운영 환경에서의 긴급 변경을 수 없이 요청했다. 테스트(Test)를 충분히 할 생각은 하지않고 버그는 항상 있을 수 있다는 핑계로 운영 환경에서 발견된 결함을 그 자리에서 바로 고치길 원했다.어느 날, 주말에 문제가 발생했다. 역시나 개..
CI/CD Pipeline 파이프라인(Pipeline)이 갖는 가장 큰 의미는 자동화를 통하여 위험요소를 사전에 차단한다는 것이다. 파이프라인을 이용하여 석유나 가스를 옮기는 것을 생각해보자. 우리는 미리 정해진 통로를 이용하여 원하는 위치로 석유를 옮길 수 있다. 또한 이동 중간에 어떠한 불순물이나 위험요소가 들어오지 못하도록 차단할 수 있다.소프트웨어 서비스(Software Service Application) 를 개발하고 배포하는 과정도 이와 같이 외부의 개입을 최소화하여 정해진 순서대로 흘러가도록 한다면 개발자(생산자)가 만든 결과물이 그대로 소비자에게 전달될 것이다. 중간에 불필요한 간섭이나 개입으로 인한 부작용이 사라지기 때문에 서비스 품질을 유지할 수 있다. 그래서 파이프라인은 지속적 전달(Continuous Deli..