본문 바로가기

IT 정보

개인으로도 실현할 수 있는 DevOps!

 

 

  • 어디에 주목해야 할까?

팀 개발을 실시하는 분들은 상황에 따른 다양한 경우가 있다고 생각하지만, 어떤 상황이라 할지라도 시스템 개발과 운용의 흐름은 대략적으로 다음과 같습니다.

 

1. 기획·요건 정의
2. 설계·구현
3. 테스트
4. Release
5. 운용


비즈니스 가치 향상을 위해서는 품질을 떨어뜨리지 않는 상태로 위의 사이클을 고속으로 돌리고, 서비스를 지속적으로 제공하는 것이 필요합니다. 최종적으로는 이러한 공정들을 포괄적으로 생력화(Laborsaving)하고, 이것을 팀으로 진행해야만 사이클을 고속으로 돌릴 수 있으며 DevOps로서 가치를 발휘할 수 있게 됩니다. 여기서는 우선 개인 차원에서 할 수 있는 범위로 초점을 맞추고 개인 개발(Dev)에 대하여 생력화하는 방안을 생각해 보겠습니다.


방금 전 말한 대로, 우선 DevOps를 개인으로 구현하는 방법을 생각해 봅시다. 구체적으로는 다음과 같은 흐름으로 생력화를 진행해 갑니다.


1. VirtualBox를 사용하여 개인 개발 환경을 만든다.
2. Vagrant를 사용하여 인프라를 Code화 함으로써 간단하게 개인 개발 환경을 만든다.

3. Ansible을 사용하여 구축 및 설정 정보를 Code화 함으로써 개발 환경 구축과 설정을 효율적으로 수행한다.
4. Serverspec을 사용하여 구축 대상을 Code화 함으로써 구축 및 설정 테스트를 효율적으로 수행한다.
5. Git을 사용하여 그동안의 Code를 효율적으로 관리한다.


여기서부터 설명하는 것은 여러분의 환경에 따라서 다양한 경우가 존재할 수 있습니다.


따라서 여러분의 환경과 유사한 문제가 있다고 생각되는 것을 떠올리면서 읽어 주세요.

 

 

  • Local 개발 환경 구축

실제 운영 환경과 동일하게 Local 환경으로 구성

 

자신의 Local 환경에 소규모 개발 환경을 만드는 것을 목표로 합니다. 그전에 먼저 개발 환경이 있을 때의 장점을 알아보겠습니다.


개발 환경이 있음으로써 실제 운영 환경에서의 작업이나 절차를 안전하게 확인할 수 있고, 나아가서 서비스에 대한 영향을 최소한으로 유지할 수 있게 됩니다. 그러나 실제로는 팀으로 공유하는 개발 환경의 수는 한정되어 있으며, 또한 항상 자유롭게 이용할 수 없는 경우도 종종 있습니다.


혹시 제한된 환경 때문에 서버 사이드(Server Side) 어플리케이션의 Deploy나 인프라 설정 변경, 테스트 등의 작업 수행을 다른 독점적인 작업이나 조작이 끝날 때까지 기다려야 하는 경우는 없었나요? 예를 들면 미들웨어의 설정 변경 작업이나 서버를 재기동하기 위하여 작업을 중단하게 되거나, 성능 테스트를 하기 위하여 관련되지 않은 사람의 접근이 금지되는 경우입니다. 개발이나 테스트를 하고 싶은데 환경이 없어서 수행할 수 없는 상황은 효율적이라고 할 수 없습니다. 개발과 테스트를 가능한 효율화하고 신속하게 대응할 수 있도록 해야 합니다.


이 문제를 해결하려면 개발 환경의 수를 늘릴 필요가 있습니다. 그러기 위해서 지금까지는 인프라 엔지니어가 개발 환경을 부지런히 구축하여 어플리케이션 개발자에게 제공하는 작업이 필요했습니다. 이럴 경우 개발 환경의 수에 따라서 유지 보수도 필요하고, 또한 그 만큼의 서버(Machine) 자원을 항상 확보해 두어야 합니다. 이것은 실질적으로 인력과 비용
의 관점에서도 현실적이지 않습니다.

 

이러한 상황에서, 개인 PC인 Local 환경에 소규모 개발 환경을 만들 수 있다면 어떨까요? 이 소규모 개발 환경은(어플리케이션 개발자가 보았을 때) 인프라 엔지니어를 번거롭게 하지 않고 자체 구축할 수 있으며, 팀의 공유 환경인 서버 자원을 독점하지도 않습니다. 어플리케이션 개발자가 개인 개발 환경을 만들어 그 안에서 개발할 수 있게 됨으로써 개발을 위한 대기 시간도 단축되어 전체적으로 간소화로 이어집니다.


필자의 경험으로 보았을 때, 지금까지 팀의 공유 개발 환경에서 했던 작업 중에서 반드시 실제 운영 환경과 완전히 똑같지 않아도 되는(즉, Local 개발 환경에서 수행해도 상관없는) 경우가 있습니다. 팀의 공유 개발 환경과 Local 개발 환경에 적합한 사례를 비교하면 다음과 같습니다.

 

 

<팀의 공유 개발 환경이 적합한 경우>
 Release 전 마지막 확인
 성능 시험
 로드 밸런서(Load balancer)나 스위치 등 서버에서 완결되지 않는 처리의 확인
 ASP, API 등 시스템 외부와의 인터페이스 확인
 데이터베이스 등 그 환경에만 존재하는 자원을 이용하는 처리


<Local 개발 환경에 적합한 경우>
 어플리케이션 개발의 초기 단계, 단위 테스트 수준
 프로토타입(Prototype)으로 구축
 위험이나 파급되는 영향이 큰 변경의 초기 조사
 환경을 완전히 독점하여 해야 하는 작업의 확인

 


이처럼 Local 개발 환경을 이용함으로써 보다 효율적으로 개발할 수 있는 경우가 있습니다. 이러한 개발 및 테스트 등의 작업은 서비스 개발에서 몇 번이고 실시하게 됩니다. 따라서 단순히 Local 개발 환경을 준비하는 것뿐만이 아니라, 그 가운데서 진행되어야 하는 개발이나 테스트도 가능한 효율화를 함께 도모해야 합니다. 이 환경은 누구에게도 영향을 주지 않고 효율적으로 개발할 수 있는 최고의 환경이 됩니다.

 

VirtualBox를 이용해서 실제로 Local 개발 환경을 구축하는 방법을 소개하는 방법은 《IT 운용 체제 변화를 위한 DevOps》 도서를 통해 설명하겠습니다 :)

 

 

《IT 운용 체제 변화를 위한 데브옵스》

 

예스24 / 교보문고 / 알라딘 / 인터파크

반응형