소프트웨어 아키텍처
IT 시스템의 역사
- 1960 ~ 1980 : Fragile(깨지기 쉬운 시스템) , Cowboys
- MainFrame, Hardware - 하드웨어가 중심이 되었던 시기
- 1990 ~ 2000 : Robust, Distributed(분산)
- Changes
- 서비스가 안정성 있고 성능이 높아짐
- 2010 ~ : Resilient(탄력적인)/Anti-Fragile, Cloud Native
- Flow of value의 지속적인 개선
- 시스템은 로컬 → 클라우드로 이전 → 안전성과 확정성이 증가
- 지속적인 변경 및 개선이 생기더라도 탄력적으로 운용 가능


- 안티 프레즐은 다른 개발 시스템이나 환경보다 시스템의 변화가 적고, 바로 적용가능하고 비용 저렴
Anti-Fragile의 특징
- Auto Scaling
- 사용량에 따라 인스턴스의 변화 가능
- 관리자나 운영자에 의해 수작업 X → 사용량에 따라 자동으로 변화
- Microservices
- 클라우드 네이티브 어플리케이션의 핵심
- 전체 서비스를 구축하는 모듈이나 기능을 독립적으로 개발/배포/운용하는 것
- chaos engieering
- 시스템이 급격하게 예측하지 못한 상황이라도 견딜 수 있고 신뢰성있게 운용하는 규칙
- 안정적인 서비스로 구축한다는 의미
- Continuous deployment
클라우드 네이티브 아키텍처
클라우드 네이티브 아키텍처의 특징
- 확장 가능한 아키텍처
- 시스템의 수평적 확장에 유연
- 확장된 서버로 시스템의 부하 분산, 가용성 보장
- 시스템 또는, 서비스 애플리케이션 단위의 패키지 (컨테이너 기반 패키지)
- 모니터링
- 탄력적 아키텍처
- 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축
- 분활된 서비스 구조
- 무상태 통신 프로토콜
- 서비스의 추가와 삭제 자동으로 감지
- 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리)