항상 블로그를 시작하면 Cloud Native에 대해 정리해보고 싶었습니다
할 말이 굉장히 많은 내용이지만
첫 포스팅이니 가볍게 정리해보겠습니다
[핵심 용어]
/*
- Infrastructure/Infra(인프라)
- On-premise(온프레미스)
- Cloud(클라우드)
- Cloud Native(클라우드 네이티브)
- Virtual-Machine(가상머신)
- Container(컨테이너)
- CI/CD
- Microservice
- DevOps
*/
원하는 Software가 동작하기 위해서는
해당 Software를 구동할 장비, 네트워크 환경 등 고려할 것이 많습니다
그러한 시스템 동작에 기반이 되는 환경을 Infrastructure(Infra, 인프라)라고 합니다
기존에 갖고 있는 물리적인 장비에 Infra를 구성하면 On-premise(온프레미스)라 하며
인터넷으로 접근할 수 있지만 어딘가에 사용자가 알 수 없도록 구성되어 원격 장비에 구성된 Infra는 Cloud(클라우드)라 합니다
[Cloud에 대한 잡설]
/*
Cloud는 학생 시절 처음 들으면 무슨 뜬구름 잡는 단어인가 생각이 들었습니다
보이지만 실질적인 무언가 없는 느낌이죠
석사 시절 논문 쓰거나 읽다 보면 설계도 등에서 구름모양이 자주 보입니다
일반적으로 물리적인 장비가 아닌 네트워크 어딘가에 존재하는 컴퓨팅 자원을 의미합니다
(네트워크로 접근할 수 있는 어딘가에 잘 구성된 장비인 거죠!)
즉, '물리적인 장비가 보이진 않지만 인터넷으로 해당 구역에 접근하면 동작하는 컴퓨터가 있다'라는 비유라고 생각을 해봅니다
Cloud는 학생 시절 처음 들으면 무슨 뜬구름 잡는 단어인가 생각이 들었습니다
보이지만 실질적인 무언가 없는 느낌이죠
석사 시절 논문 쓰거나 읽다 보면 설계도 등에서 구름모양이 자주 보입니다
일반적으로 물리적인 장비가 아닌 네트워크 어딘가에 존재하는 컴퓨팅 자원을 의미합니다
(네트워크로 접근할 수 있는 어딘가에 잘 구성된 장비인 거죠!)
즉, '물리적인 장비가 보이진 않지만 인터넷으로 해당 구역에 접근하면 동작하는 컴퓨터가 있다'라는 비유라고 생각을 해봅니다
*/
먼저, 개발자 측면에서 생각해봅시다
사용자는 프로젝트 개발, 테스트 등을 위한 시스템을 구현하고 싶습니다
그럼 소프트웨어를 설치하고 동작하게 할 환경이 있어야 하는데
이왕이면 기존에 사용하던 기기와는 격리된 새로운 환경을 구축하는 것이 side-effect도 줄일 수 있고 배포 측면에서도 이상적인 환경이죠
이때 일반적으로 사용하는 방법이 대표적으로 몇 가지 있습니다
- 물리적인 장비 구성
- 가상 환경 구성
- Cloud 이용
물리적인 장비 구성
기존에 구축된 장비를 정리하거나 구역을 나눠쓰거나
가지고 있는 장비를 모으거나, 필요한 장비들을 다 찾아서 구매하여 조립하고 구축하고
원하는 환경(개발 환경, 테스트 환경 등)을 구성
가상 환경 구성
구축된 장비에 가상으로 자원과 환경을 분할하는
가상머신(Virtual-Machine)을 이용해 격리된 환경을 만들고
OS를 포함한 원하는 환경요소를 설치/설정해 구성
Cloud 이용
어느 회사가 구축한 Cloud Computing을 사용해
원하는 만큼의 컴퓨팅 리소스와 구역을 실시간으로 할당받아 원격으로 바로 사용할 수 있는 환경을 구성
당연히 마우스 몇 번 클릭으로 빠르게 사용할 수 있는 환경을 만들어내는 Cloud 방식이 편하겠죠
근데 돈이 들어갑니다ㅎㅎ
따라서, 개인이나 작은 집단의 상황에서는 1, 2의 방법이 때로는 비용적으로 더 적합하고 효율적인 방법일 수 있습니다
하지만, 규모가 커지거나 유연한 장비 증설/관리, 구성할 장비들의 절대량, 남는 리소스의 낭비 등 비용적인 이유로
3번의 Cloud 이용 방법은 서비스를 제공하는 입장에서 매우 효율적입니다
특히, 인프라 관리는 위에서 언급하는 것보다 훨씬 어렵습니다. 치사량 수준의 공포의 쓴맛입니다...
이를 누가 대신 관리하고 책임져주고
나는 개발에만 집중할 수 있다는 것은 세상 달달합니다(돈 쓰는 맛)
이번엔 Cloud 서비스 제공자 측면에서 생각해봅시다
개발자에게 Cloud Computing 서비스를 제공하기 위해 가장 중요한 것은 높은 가용성!
돈 내고 쓰는데 항상 잘되야지 쓰고 싶을 때 못쓰면 굉장히 씁쓸하겠죠..
사용자는 인터넷만 되어도 해당 Cloud Computing을 사용할 수 있어야 합니다
일반적으로 Container(컨테이너)를 이용해 사용자의 요구에 따라 실시간으로 자원을 나누고 구역을 분할하고
'사용자에게 이 가상 장비를 이 권한으로 쓰면 돼!'라고 알려줍니다
결과적으로 사용자는 물리적인 장비를 구축, 관리할 수고, 걸리는 시간 등의 쓴맛을 면할 수 있으며
돈만내고 제공하는 컴퓨팅 리소스를 달달하게 사용하는 거죠
이러한 원리로 Cloud가 단맛이 난다는 것을 알았습니다
앞에선 간단히 설명했지만 Cloud는 위의 기본적인 형태에서부터 지금은 많은 개념 상승을 이뤘습니다
(알아야 할 것도 많아짐ㅎ)
그중 아래의 4가지가 핵심적입니다
- DevOps
- CI/CD
- Container
- Microservice
이 4가지는 Cloud의 효율을 극대화하며 여러 장점/특징을 제공해줍니다
이것들을 만족하는 형태의 Cloud 기반 App/System인 경우 Cloud Native 한 녀석인 겁니다
즉, Cloud Native(클라우드 네이티브)는 Cloud에 타고난, 태생적으로 클라우드에 맞는 형태를 표현하는 용어!
너란 녀석
토종 클라우드 녀석
클라우드를 위해 태어난 녀석
너가 동작하기에 내 맥북은 너무 소박해... 넌 큰 물(클라우드)에서 놀아야 돼
아래 그림이 구름(Cloud) 안에 위의 4가지를 표현한 모습이죠
Cloud Native란 용어는 리눅스에서 CNCF(Cloud Native Computing Foundation) 재단을 만들고 적극적으로 밀고 있습니다
기존 On-premise 환경에 동작하는 App을 Cloud에 단순히 옮기기만 해서는
위의 Cloud Native 한 특징을 지키지 못하겠죠
말 그대로 태생적으로 Cloud에서 동작하기 위해
4가지 요소(DevOps, CI/CD, Container, Microservice)를 고려하여
설계된 시스템을 Cloud Native 하다라고 하는 거죠!
물론 간단히 그렇다는 거지 Cloud Native는 훨씬 더 깊고 재밌습니다
(App이 Cloud에서 훌륭하게 동작하도록 개발하는 12 Factors를 참고하세요)
분량은 여기서 조절하고
다음엔 'Cloud Native'한 DevOps, CI/CD, Container, Microservice를 포스팅 해보겠습니다
'Cloud > Cloud Native' 카테고리의 다른 글
The Twelve Factors 요약(5분 컷) (0) | 2021.12.22 |
---|---|
The Twelve Factors (0) | 2021.08.12 |
Microservice Architecture(MSA) (0) | 2021.07.15 |