프로젝트 구조가 눈에 보이니까 코드가 내 손발 움직이듯 짜여졌던 3번째 커맨드 개발 후기
다음 주 주말에 대구 경북대에서 오픈소스 컨트리뷰션 지역 스프린트 활동이 있고, 6명의 학생들과 커맨드 및 버그 리포트를 작업하는 일들을 함께 수행하게 된다.
그 전에 연습이랄까, 오픈스택에서 배운 것을 스스로 검증하는 시간을 갖는다랄까, 스트레스를 오픈스택에 기여하는 방식으로 푼달까… 틈틈이 커맨드를 개발하고 있고, Glance → Nova 에 이어서 이번엔 Neutron 커맨드를 개발했다.
Glance가 오픈스택에서 OS 이미지를 관리했고, Nova가 가상 컴퓨팅 리소스를 관리했다면, Neutron은 가상 네트워크 자원에 관한 컴포넌트이고 오픈스택의 핵심 컴포넌트 중 하나로 관리가 된다.
솔직히,,, 네트워크 쪽은 자신이 없어서 그냥 스킵하려고 했는데 위에 이미지에서 tag에 관련한 커맨드가 이미 오픈스택 통합 CLI에 구현되어 있고, 한 개가 구현 안된 상태라 이미 구현되어 있는 커맨드들을 보니,,, “이거 또 후딱 구현할 수 있겠는데?”라는 생각이 들어서 바로 개발에 착수했다.
openstack hypervisor uptime 커맨드를 2시간만에 개발하고 나니, 이제 커맨드 하나 개발하는데 어느 정도의 시간이 필요한지 각이 잡혔고, 이번 것도 2시간 내에 해결할 수 있던 것 같다.
1. 커맨드 설명
오픈스택에서는 네트워크 토폴로지를 제공하고 있고, 각 가상 네트워크마다 사설/공인 네트워크 설정이 가능하다.
클라우드에 올려놓은 서비스들이 많아지면 자연스레 사용하는 네트워크가 많아질 것이고, 서로 다른 OpenStack 위치의 네트워크를 논리적으로 동일한 하나의 네트워크에 매핑할 수 있는 기능(특히, Multi site OpenStack의 경우에 해당)을 제공하고 있다.
프로젝트 Kuryr의 경우(이건 잘 모르겠다. 구글링 해보니 도커와 관련된 네트워크 라이브러리로 보인다), 도커 네트워크 ID를 Neutron 네트워크 ID로 매핑하는 등 혼합 환경의 OpenStack 네트워크에 Id를 매핑하는 기능을 제공하며, 배포 도구별로 네트워크에 설정한 태그를 사용하는 것이 가능하다.
운영자가 공급자 네트워크에 대한 정보를 태그할 수 있도록 허용(예: 높은 지연 시간, 짧은 지연 시간 등)하고, Get-me-a-network 또는 유사한 포트 스케줄러와 같은 새로운 기능들은 태그를 기반으로 포트용 네트워크를 선택할 수 있다.
즉, 쉽게 3줄 요약하면
- 네트워크 매핑
- 배포 도구별로 네트워크에서 태그 사용 가능
- 공급자 네트워크 분류 및 포트 네트워크 선택
으로 볼 수 있으며, 가상 네트워크를 사용자 목적에 맞게 분류하고 연결하는 등에 사용할 수 있는 것으로 보인다.
별도의 tag 설정을 안하고 네트워크를 생성하면, 위 이미지에서 보는 것처럼 tag 부분이 비어있다.
그러나 네트워크 생성 시점 또는 오늘 내가 구현한 tag-replace를 사용하면, 아래와 같은 내용들이 보이기 시작한다.
참고로 태그가 다중인 경우도 있기 때문에, 태그를 새로 추가할 때마다 콤마를 기준으로 하나씩 추가된다.
딱 보기에도 복잡해보이지만, 다행스럽게도 tags를 구현하는 부분에 한해서는 내용이 어렵지 않았고, SDK에서 관련 모듈 구현이 다되어 있어서 나는 API로 따오기만 하면 됐다.
2. 코드 구현하기 (기능 & 테스트 코드)
Django 관련해서 내용 처음 배울 때 CRUD에 대해 정말 중요하게 설명했던 기억이 있는데, 사실 이미 존재하는 가상 네트워크 값을 수정하는 것이 Update에 해당하기 때문에 그것과 관련한 코드를 추가했다고 봐도 무방하다.
커맨드를 파싱해서 그 값을 실질적으로 실행되는 take_action에 넘겨줌으로써 네트워크 업데이트를 진행하게 되고, 이를 다시 한 번 테스트 코드로 검증한다.
MockUp 모듈도 처음엔 엄청 생소해서 해맸는데, 이제는 익숙하다. 재밌다.
스트레스 받았던 일들을 커맨드 개발로 풀어내는 느낌이다.
오픈스택이 어떤 디자인 패턴을 이용하는지는 잘 모르겠지만, 프로젝트 구조가 눈에 보이기 시작하면 커맨드 개발하는 것은 API만 잘 활용하면 된다는 것을 크게 이해할 수 있는 부분이었다.
결과적으로 아래처럼 2시간을 기다려서 올린 패치의 CI가 모두 통과한 것을 확인할 수 있다.
3. 후기
파이썬으로 개발하는 것에 대해 자신감이 많이 붙었다.
솔직히 말하면 오픈스택으로 스트레스 풀어내는 느낌이다.
3주 동안 커맨드 하나 개발하는 것도 벅찼던 사람이 최근 며칠 사이에 완전히 다른 사람이 된 느낌이다.
이제 머신러닝 부분에서도 어느 정도 통달하면 이런 재미를 느끼겠지?
스스로 할 수 있을 것이란 자신감이 개발 쪽에서 이렇게 확신이 든 것은 오늘이 처음이다.