클라우드 네이티브 환경에서 개발자가 꼭 고민하는 이슈와 해결 방안
컨테이너 기반의 빠른 개발환경과, 신속한 개발과 편리한 배포, 서비스 무중단, 마이크로서비스에 적합하고, DevOps 기반의 민첩한 개발 환경을 위해 클라우드 네이티브 환경이 필요합니다.
기본적으로 개발 환경은 여러 서버가 필요 하며 개발팀이 커질 수록 많이 필요합니다.
개발 환경이 늘어는 원인은 다음 배포 버전에 포함되지 않는 기능을 미리 테스트 하기 위한 용도입니다.
QA 1,2 와 같이 기능별로 테스트 서버가 필요 할 수 있는거죠.
개발자 PC 는 Windows 환경으로 일부 테스트가 불가능 상황들도 있고, 본인 이외에 QA 팀에서 함께 테스트 해야 하기 때문 필요한 상황입니다.
그리고 센드박스와 같은 개발자 개인이 실험적인 기능을 테스트 해볼 수 있는 환경도 필요 할 수 있습니다.
하지만 대부분 운영, 스테이징, 개발 테스트 환경 딱 3개만 운영하는 곳이 많은게 현실이죠?
하지만 이러한 테스트 환경 추가는 쉬운 일이 아닙니다.
자원이 부족하다면 하드웨어 도입부터 시작 해서 OS, 미들웨어, 빌드/배포, 기타 인프라 환경 등 복잡한 과정이 있습니다.
따라서 관리 서버가 증가 되므로 인프라 담당자가 기피하는 경우도 많이 있습니다.
하지만 클라우드 네이티브 환경의 컨테이너 자동화 도구를 이용한다면 파이프라인 기반의 자동화 환경을 이용하여 신속한 개발 및 운영 환경을 구축 할 수 있습니다.
필요에 따라 구축과 삭제가 편리하여 테스트 서버 여러 개 만들었다 지우는 것은 일도 아니게 됩니다.
그렇다면 클라우드 네이티브 환경에서 개발팀은 뭘 해야 해야 하나요?
개발하기도 바쁜데 운영팀과 협업을 어떻게 하라는 건지?? 클라우드 환경에서 개발이 뭐가 다른건지?? 감이 오지 않죠.
사실 개발팀 입장에서는 변화되는 것은 없습니다.
하지만 대용량의 견고한 시스템을 위해선 노력이 필요합니다.
바로 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행 할 수 있어야 합니다.
하지만 현실은 괜히 말 꺼냈다가 독박 쓰기 무서워 시도 조차 하지 않는 게 현실입니다.
그래서 일부 기능을 공론화 하기 전에 하나씩 해볼 수 있는 파일럿 환경이 필요하지만 공론화 되지 않은 시스템을 인프라팀에 요청해서 할당 받기란 쉽지 않습니다.
최근 Spring Cloud 의 등장으로 클라우드가 아닌 환경에서 일부긴 하지만 인프라 적인 도움 없이 구축 할 수 있게 되었습니다.
라우팅, Virtual Host 같은 기능은 Zuul 을 활용 할 수 있고,
로드 발란서와 서비스 디스커버리는 Ribbon, Eureka 를 활용 할 수 있습니다. Eureka 의 경우 L4 에서 제공하지 못 하는 오토스케일링에 따른 서비스 디스커버리 또한 자동으로 해줍니다.
설정을 관리 해주는 Config Server 도 있고 기타 Netflix 에서 마이크로서비스를 구성하며 활용했던 기술들을 사용 할 수 있습니다.
OpenShift 의 경우 VM, OS 관리를 할 필요가 없고, 라우팅의 경우 Ingress Router가, 로드 발란서 및 서비스 디스커버리는 Service Object로, 보안에 민감한 운영 설정은 ConfgMap, Securet, 추가 미들웨어는 Helm차트, Operator를 통해서 아주 쉽게 제공 받을 수 있습니다.
AWS 와 같은 Public Cloud 또한 거의 동일하게 제공되지만 파일럿이나 기타 기능 테스트를 하려고 환경을 구성하면 비용이 늘어난 다는 점입니다.
현실적으로 개발자 또는 개발팀에서 공론화하기 전에 소극적으로 사용 할 수 밖에 없는 구조죠.
그렇다고 Spring Cloud를 선택 하게 된다면 개발영역이 아닌 인프라 영역에 대해서 개발팀이 관리하고 책임을 져야 한다는 부담이 있습니다.
따라서 인프라 요소는 OpenShift 와 같은 플랫폼과 인프라팀이 담당해주고 개발팀은 개발에만 집중 할 수 있도록 분담 한다면 더욱 효과적일 것입니다.










