소프트웨어 아키텍처
- 소프트웨어 아키텍처는 소프트웨어를 구성하는 요소와 요소 간의 관계를 정의한 청사진
- 소프트웨어의 전체적인 구성 관계인 구성요소와 구성요소간의 포함 관계, 호출 관계 등을 표현
- 소프트웨어 구성 전체를 조망하고 이해하는 데 유용
- 소프트웨어 설계자, 개발자, 사용자 등 관련된 이해관계자들이 기술 구조를 이해, 소통 도구 역할
모놀리식 아키텍처
- 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스
- 한 곳에 모인 데이터를 참조하여 서비스하는 것이 일반적인 형태
- 비즈니스의 변화가 빠르고 수시로 애플리케이션을 변경해서 적용해야 하는 환경에서는 유연하게 대처할 수 없음
- 단일 애플리케이션 중 일부 프로그램만 수정하려 해도 관련 없는 기능들까지 빌드, 배포 해야함
위와 같은 문제들로 새롭게 변화하는 환경에 민첩하게 대응할 수 있는 새로운 아키텍처의 필요성이 생겼습니다.
마이크로서비스 아키텍처
- 아주 작은 단위로 동작하는 서비스가 구동되도록 시스템 및 소프트웨어의 구성과 구성 요소 간의 관계를 정의한 아키텍처
- 서비스 중심의 아키텍처❗️
- 단위의 기준이 필요한데 그 기준을 서비스를 중심으로 나누게 된다.
- 아키텍처의 구성 요소는 서비스와 이를 실행할 수 있게 하는 여러 기술적 환경
서비스 중심의 설계를 하면, 객체 중심의 설계를 하게 됩니다. 이는 곧 데이터 -> 서비스 로 이동함을 의미하고 데이터 모델링의 중요성이 낮아지게 됩니다. 이러한 이유로
NoSQL 등의 DB로 개발을 하게 되는 것 입니다.
서비스지향 아키텍처(SOA)
- 대규모 시스템에서 업무 처리 단위를 각각의 서비스로 반영하여 데이터 중심이 아닌 전체 시스템을 서비스 중심으로 설계하는 아키텍처 스타일
- 서비스의 생성과 활용을 높여서 비즈니스 환경 변화와 업무 변화에 민첩하게 대응
SOA와 마이크로서비스 아키텍처의 차이점
- 비즈니스 변화 대응을 위한 서비스 중심의 아키텍처라는 점에서 공통점
- SOA는 비즈니스 측면에서의 서비스의 재사용성을 강조하는 반면, 마이크로 서비스는 한 가지 작은 서비스에 집중하기를 강조
- SOA는 많은 서비스의 공유를 위해 서비스 채널을 이용하여 서비스를 공유하고 재사용하는데 초점을 맞춘다면, 마이크로서비스는 각각의 서비스가 독립되어 실행되는 것을 지향
클라우드 서비스
IaaS(Infrastructure as a Service)
- 서버를 운영하기 위해서 서버자원 IP, Network, Storage 등 인프라 구축을 제공
- 기존 서버 호스팅보다 하드웨어 확장성이 좋고 탄력적이며 빠른 제공을 할 수 있는 가상화 기술
PaaS(Platform as a Service)
- 서비스를 개발할 수 있는 안정적인 환경(Platform)과 그 환경을 이용하는 프로그램을 개발할 수 있는 API까지 제공
SaaS(Software as a Service)
- Cloud 환경에서 동작하는 응용프로그램을 서비스 형태로 제공
- 메일서비스, 회원가입서비스 등
지속적인 통합과 배포(CI: Continuous Integration)
- 지속적인 통합은 개발 환경에서 개발중인 코드를 통합하고 필요에 따라 테스트로 병행 수행하는 일련의 프로세스를 의미
- 지속적인 통합을 구성요소로 통합 서버(CI), 소스관리(SCM), 빌드 도구(tool), 테스트 도구
- 가장 많이 알려진 빌드 도구로 젠킨스(Jenkins)가 있음
데브옵스
- 데브옵스(DevOps)는 애플리케이션과 서비스 개발에서 배포 운영까지 빠르게 제공하기 위한 조직의 협업 문화를 의미
- 마이크로서비스 개발하고 운영하기 위한 팀의 구성과도 매우 밀접한 관계를 가짐
- 개발에서 운영까지를 하나의 파이프라인으로 형성하여 소스코드의 배포가 필요할 때 즉시 반영되는 게 목표
- 가장 이상적인 팀 구성 모델은 서비스의 기획, 설계, 개발, 배포 및 운영까지 서비스 생명주기가 한 팀으로 같은 작업 공간에서 결정되고 수행
컨테이너
- 컨테이너(Container) 의미는 선박에 보다 효율적으로 화물을 수송하기 위해 규격화 된 틀
- 격리된 공간으로 잘 봉인되어 컨테이너 내 물건들이 외부의 환경에 영향을 받지 않음
- 컨테이너 단위의 독립된 공간 단위로 서비스를 패키지 할 수 있으므로 격리된 만큼 필요한 자원을 할당하여 경량화된 서비스를 구성 할 수 있음
- 격리된 공간은 다른 서비스에 영향을 주지 않고 자유롭게 배포할 수 있음
- 마아크로서비스는 컨테이너 단위로 묶어서 즉시 필요한 시점에 배포할 수 있는 장점
쿠버네티스
- 2014년 구글에서 컨테이너를 관리하는 오픈소스를 발표
- 쿠버네티스는 컨테이너를 대규모로 조율하고 전체 애플리케이션 스택을 관리하는 역할
- 여러 개의 컨테이너, 앤드포인트, 데이터를 애플리케이션 스택과 서비스로 묶어는 핵심 요소를 제공해 높은 차원의 오케스트레이션 관리를 제공