클라우드 네이티브 애플리케이션이 무엇인가?
클라우드(Cloud)란?
--
네이버 클라우드나 구글 클라우드처럼 클라우드는 보통 저장소를 의미한다.
즉, 클라우드는 다른 회사의 저장소를 빌려서 사용하는 것이다.
그러다 보니 직접 서버를 운영할 환경이 안된다면 다른 회사의 컴퓨터(클라우드)를 빌여서 서버를 운영하면 된다.
실제로 클라우드를 사용하여 서버를 운영하면 다양한 문제들을 해결할 수가 있다.
1. 트래픽 변동에 대해 빠르게 대처할 수 있는가? (확장성 Scalability)
직접 서버를 운영하면 내 서버 용량에 맞춰서 설계를 해야 하고
사용 가능한 용량을 넘어서는 트래픽이 증가하면 해당 서버는 다운되고 말 것이다.
클라우드 환경에서는 트래픽이 증가하면 빠르게 서버를 늘리고 트래픽이 감소하면 서버를 줄일 수 있어
상황에 알맞게 대처할 수 있게 된다.
2. 장애 발생 시 빠르게 복구할 수 있는가? (복원력 Resilience)
직접 서버를 운영할 때 해당 서버가 존재하는 위치에 건물에 화재가 났다던가 다양한 변수가 일어나면
다른 예비 서버를 구축한 것이 아니라면 복구하는 데에 시간이 소모하게 된다.
클라우드 환경에서는 백업 및 복구가 빠르게 이루어질 수 있다.
3. 운영 비용을 효율적으로 운영할 수 있는가?
직접 서버를 운영할 때에는 서버의 크기를 미리 정해야 하고 트래픽이 많던 적던 항상 같은 크기의 서버를 운영하기 때문에
효율적이라고 할 수가 없다.
클라우드 환경에서는 트래픽이 많던 적던 그에 알맞은 금액을 지불하기 때문에 운영 비용에 더 효율적이다.
다만 실제로 운영을 하다 보면 비효율적으로 사용해서 비용이 훨씬 비싸게 청구되는 케이스도 많다.
그래서 전문적으로 비용을 최적화하도록 설계할 수 있는 사람이 필요하다.
위의 3번처럼 변수가 일어나는 것은 클라우드가 아닌 애플리케이션에 존재한다.
즉, 효과적으로 서버를 운영할 때에는 애플리케이션을 잘 설계해야 한다.
--
클라우드 네이티브 애플리케이션
--
애플리케이션을 클라우드(서버)에 적합하게 설계하지 않으면 클라우드를 사용하는 것은 크게 의미가 없을 수 있다.
- 클라우드 : 복잡한 애플리케이션이 겪는 다양한 문제들을 클라우드 환경 구성을 통해 해결 가능
- 클라우드 네이티브 애플리케이션 : 클라우드 환경을 더 절 활용할 수 있는 애플리케이션 구조를 의미
클라우드 네이티브 애플리케이션 규칙
MSA (마이크로 서비스 아키텍처)
트래픽 증가에 빠르게 대처하기 위한 구조 방식으로
애플리케이션을 여러 단위로 분리하여 트래픽 증가에 효율적으로 대처하는 소프트웨어 아키텍처이다.
애플리케이션을 개발할 때
기존에는 왼쪽의 모놀리식처럼 모든 기능을 하나의 애플리케이션에 구성을 했었다.
이러한 경우에는 하나의 애플리케이션의 크기가 커지기 때문에
해당 애플리케이션을 실행하는데 시간이 오래 걸릴 수 있고
트래픽이 증가할 때에는
해당 트래픽을 받을 수 있는 새로운 서버를 증가시켜야 하는데
서버의 실행 시간이 길어지게 되고 그만큼 트래픽에 대처할 수 있는 능력도 떨어지게 된다.
만약 주문 기능에 대해서 트래픽이 증가하여 서버를 증가시켜야 한다고 할 때
주문만 따로 증가할 수 없고 전제 기능(서버)을 늘려야 해서 굳이 늘릴 필요 없는 상품관리, 결제 등도 같이 증가시키게 되어
비효율적이게 된다.
그에 반해서 MSA 방식은
도메인 또는 기능별로 모듈을 분리하여 서버를 배포하는데
이 서버들은 각각 트래픽을 수용하기 때문에
주문 트래픽을 늘어날 경우에는 주문 기능을 가진 모듈만 증가시키면 된다.
컨테이너 (Container)
컨테이너를 활용하여 실행 환경에 종속되지 않는 동작이 보장되어야 한다.
즉, 컨테이너의 이미지에는 소프트웨어가 실행하기 위한 환경들이 모두 포함되어 있으므로
해당 이미지를 가지고 있으면 어떠한 환경에서든 동일한 실행을 보장하게 된다.
상태비저장 (Stateless)
애플리케이션 서버는 상태를 가지지 않아야 한다.
여기서 상태를 가지지 않아야 한다는 것은
어떠한 의존 없이 각 요청을 독립적으로 처리하도록 설계를 해야 한다는 것이다.
DevOPs 및 CI / CD
배포가 자동화가 되어야 하며 빠르게 릴리즈가 수행되어야 한다.
모놀로식 아키텍처 vs 마이크로 서비스 아키텍처
항목 | 모놀리식 아키텍처 | 마이크로 서비스 아키텍처 |
구조 | 단일 코드베이스와 애플리케이션 | 기능별로 독립된 서비스 |
배포 | 전체 재배포 필요 | 개별 서비스 독립 배포 |
확장성 | 수직 확장(Scale-Up)을 주로 사용 | 수평 확장(Scale-Out) 용이 |
개발 속도 | 초반 개발 속도 빠름 (코드베이스가 커질 수록 느려짐) |
초기 구성이 복잡하고 오래 걸림 |
장애 영향도 | 전체 애플리케이션 영향 | 영향이 적고 분리 가능 |
기술 스텍 | 일반적으로 하나의 스택 | 서비스별 다양한 스택 가능 |
유지보수 | 전체 코드 이해 필요 | 각 서비스 별로 개발 및 유지보수 |
복잡성 | 낮음 | 서비스 간 통신, 데이터 일관성 유지 등 복잡성이 매우 높음 |
MSA 방식이 상대적으로 개발에 어려움이 있지만
잘만 활용하면 장점이 더 크기 때문에 MSA로 많이 개발하는 추세이다.
MSA는 클라우드 네이티브 애플리케이션에 잘 어울리는 소프트웨어 구조이며
MSA 아키텍처의 장점을 잘 활용하기 위해서는 컨테이너를 활용하는 것이 필수다.
--
참고 및 출처
'Docker' 카테고리의 다른 글
docker 가상 네트워크 포트포워딩과 도커 DNS (+명령어) (0) | 2024.06.26 |
---|---|
Vue.js, Spring Boot, PostgreSQL 컨테이너 구성 및 연결하여 애플리케이션 구현하기 (+실습) (0) | 2024.06.25 |
멀티 스테이지 빌드 (Multi-Stage build) 란? (+실습) (0) | 2024.06.22 |
Dockerfile의 지시어 정리 (0) | 2024.06.21 |
빌드 컨텍스트 (Build Context)란? (0) | 2024.06.20 |