이번에는 미들웨어 상에서 어떠한 툴들을 사용하고 또한 어떠한 스택들을 도입을 할수 있을지에 대해서 생각을 해보기 위해 공부를 한번 해보게 되었다.
젠킨스는 보통 파이프라이닝 ci/cd툴로 많이 쓰인다.
먼저 ci/cd란 지속적인 통합(Continuous Integration), 지속적인 배포(Continuouns Deployment)의 약어로 개발자들이 동시에 작업한 코드 변경사항을 통합하고, 이를 실제 환경에 지속적으로 배포하는 프로세스를 의마한다.
jenkins를 사용하면 코드변경사항이 발생할때마다 자동으로 빌드, 테스트, 배포 과정을 수해할 수 있기 때문에 개발자는 코드 변경에 따른 빌드 및 테스트 과정을 수동으로 수해할 필요가 없어지며, 신속하게 개발에 대한 코드 검증 및 배포할 수 있고, 이 과정에서 휴먼 에러를 방지할 수 있다.
사실 코인에서 배포를 주로하는 자바스프링의 경우 JAR파일을 nohup이나 screenX로 일일히 올리는 것도 가능은 하겠지만 개인 프로젝트를 할때 변경사항 수정시 정말 불편하다는것을 느낄것이다. 그리하여 jenkins와 같은 ci/cd는 꼭 필요하다고 할 수 있다.
jenkins같은 경우 주로 ci/cd를 파이프라이닝 이외에도 iac(infrastructure as code)로 일괄적으로 배포를 할 수도 있다. 이렇게 하면 인프라를 문서화를 통해 나타낼수 있기에 장점이 있다. 현재 bcsd는 5대의 서버를 운용하고 있다. 그런데 만약 서비스가 커지게 되어 서버가 의 숫자를 계속 늘리게 된가면?? 일일히 하나씩 서버에 접속하여 관리를 할 수 없을 것이다. 그래서 이럴 경우를 대비해서 젠킨스로 빌드를 하고 앤서블을 통해 배포하는 방식으로 가는게 현실적이다. 현재는 SSH방식으로 배포를 하는것이 가능한게 쉘스크립트로도 충분히 운용이 가능하기 때문이다.
Asnible은 서버의 설정과 인프라 프로비저닝 등을 자동화 할 수 있는 오픈소스 도구이다. Ansible은 별도의 Agent설치 없이 SSH를 통한 스크립트 실행을 지원한다. 또한 Ansible은 선언적으로 서버 설정을 정의 할 수 있다. 단계별로 작업을 구분할 수 있고, 서비스 및 환경에 따라 변수를 동적으로 적용할 수 있다.
Anisble의 특징으로 Agent-less, State machine, 멱등성 을 지원한다.
특히 이런 프로그램들은 별도의 DSL(Domain Spesific Language)를 갖고 있으며 DSL이 ruby로 되어 있으므로 ruby설치 및 모듈 관리같은 작업이 필요하다.
Ansible은 이런 복잡함을 제거하기 위해 agent가 없으므로 관리 대상인 노드에 별도의 프로그램 설치가 필요없이 기존 it인프라를 활용해서 자동화를 구성할 수 있다.
Ansible에서는 Playbook과 role, inventory를 알아야 한다.
Ansible은 기본적으로 playbook.yml파일을 통해 작업을 정의한다. playbook.yml파일은 실제 실행할 작업을 담고 있다.
인벤토리는 ansible로 관리할 host의 묶음으로 호스트는 그룹에 포함시켜서 관리할 수 있다. 그룹은 하위 그룹을 포함할 수 있으며 한 호스트는 여러 그룹에 포함 될 수 있다. 인벤토리는 windows의 INI형식으로 관리할 수 있으며 web-server라는 그룹과 db-server라는 호스트 그룹을 만들고 다시 이 두그룹을 포함하는 mybiz-server라는 그룹을 생성한다.
[web-servers]
web1.example.com
web2.example.com
[db-servers]
db1.example.com
db2.example.com
[mybiz-servers:children]
web-servers
db-servers
추가로 Invetory를 동적으로도 지정할 수 있다. -i 명령어로 inventory지정이 가능하다.
Ansible에서 role이란 하나의 역할을 가진 작업을 모아놓은 패키지 이다. 프로그램 설치와 같은 작업을 패키지 형태로 관리하는 것이다. A서비스의 playbook에는 Nginx,Redis/ B서비스의 playbook에는 Mysql,Redis가 필요하다고 했을때 각각 다른 Role이 필요하게 된다.
Ansible에서 role을 잘 활용하면 레고블록을 조합해서 모형을 만드는 것처럼 role을 조합해서 서비스를 구현이 가능하다.
Datadog는 saas바탕의 모니터링 툴이다. 학생계정은 pro버전으로 무료로 사용할 수 있다는 장점이 있어 사용하게 되었는데, 메트릭/로그/APM등 다양한 모니터링 지표를 활용하여 개발에 필요한 다양한 정보를 제공 및 알림을 주고 있다. 현재는 데이터독에서 다양한 정보를 바탕으로 서버 모니터링을 강화하고 있다.
출처:
https://brunch.co.kr/@growthminder/66
https://blog.naver.com/alice_k106/221333208746
https://www.lesstif.com/ansible/ansible-22052877.html
Ansible 써보질못해서 뭔가 감이 안잡힌다