1. 클라우드 네이티브의 개념 및 발전 과정
- 클라우드 네이티브는 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식이다.
- 클라우드 환경에 맞게 최적화되어 만들어진 애플리케이션이 클라우드 네이티브 애플리케이션이다.
- 클라우드의 이점을 최대로 활용한다는 것은 클라우드 환경의 유연성, 확장성, 탄력성을 프로그램 구조 자체에 녹여낸다는 뜻이다.



- 클라우드 네이티브의 핵심적인 요소는 마이크로서비스, 컨테이너, DevOps, CI/CD이다.
2. 마이크로서비스 아키텍처 (MSA)
- 하나의 애플리케이션을 여러 개의 아주 작고 독립적인 서비스로 쪼개서 구성하는 개발 방법이다.
- 과거에 많이 사용되었던 모놀리식 아키텍처는 하나의 커다란 덩어리로 프로그램을 만들었다고 하면 MSA는 레고 블록을 조립하듯이 여러 개의 독립적인 서비스를 연결해 하나의 큰 애플리케이션를 만드는 방식이다.


- 기존 방식에서 하나의 기능에 문제가 생기면 전체 시스템이 멈춰버리는 문제점을 여러 독립된 서비스로 구성하는 방식으로 해결할 수 있다.
- 각 서비스가 분리되어 있어서 하나의 기능만 업데이트 하고 싶을 때 전체 시스템을 건드리지 않고 업데이트하고자 하는 서비스만 새로 배포하면 된다.
- 서비스 간 통신은 표준화된 REST API를 통해 이루어진다.
- 특정 서비스만 유연하게 확장할 수 있으며 서비스 간 장애 격리가 가능해 안정성이 높다.
- 또한 MSA 방법의 개발을 통해 하나의 애플리케이션 개발에 더 많은 개발자들이 동시에 참여하여 개발에 소요되는 시간을 단축시켜 생산성이 증가한다.
- 다만 시스템 구조가 복잡해지고 서비스 간 통신 처리 및 통합 테스트가 어려워질 수 있다.
- 또한 여러 서비스의 네트워크 호출로 인해서 오히려 지연 가능성이 높고 이러한 케이스가 자주 이러난다고 한다.
3. Container