
1. AM의 정의🔍
반대말은 'PM'
- Application Modernization
- 기존 어플리케이션 내용을 현대화하는 과정을 일컫는다.
- 대표적인 구현 개념으로 클라우드 네이티브가 있다.
1-1. 클라우드 네이티브란?
- 클라우드 환경에 최적화되어 동작할 수 있는 어플리케이션을 개발하는 과정
- 어플리케이션 현대화 과정에서 다양한 변화가 발생한다.
2. 인프라의 변화☁️
| 항목 | 온프레미스 | 클라우드 |
|---|
| 관리 방식 | 전산실 서버 직접 관리 | IT 자산을 대여하여 네트워크 기반으로 관리 |
| 장점 | 데이터 보안 및 물리적 제어 용이 | 비용 효율성 및 확장성 |
| 기술 요소 | 서버 하드웨어 | 인터넷, 가상화 |
2-1. 온프레미스(On-premise)
- 기존에는 회사 내 전산실에서 랙에 서버를 꽂아 안정적으로 동작할 수 있게 관리하는 방법을 사용
- 이후 관리비 절감을 위해 외부(데이터 센터 등)에 위탁하는 온프레미스 환경으로 변화
2-2. 클라우드(Cloud)
- 온프레미스에서 나아가 네트워크 어딘가에 존재하는 IT 자산을 빌려쓰는 개념인 클라우드 개념 발생
- 내가 사용한 만큼만 비용을 지불하면 되므로 비용 효율적
- 클라우드를 구성하는 기술 요소에는 인터넷과 가상화가 있다.
2-2-1. 인터넷
- public network infra
- 인터넷만 있으면 장소에 구애받지 않고 클라우드 IT 자산을 빌려 쓸 수 있다.
2-2-2. 가상화
- virtualization
- 하드웨어를 소프트웨어로 표현하여 File로 관리할 수 있다.
- 가상화의 장점
✅쉽게 복사하고 이동 가능
✅검토(inspection) 가능
✅버전 관리 가능
2-2-3. IaC
- Infrastructure as Code
- 인프라를 프로그램 형식으로 자동화하여 위의 장점들을 극대화해준다.
3. 소프트웨어의 변화🖥️
- 모놀리식에서 MSA로
3-1. 모놀리식(Monolithic)
- 모든 서비스를 단일 어플리케이션으로 빌드하는 방식
- 단위 모듈은 정상 작동 됐지만 통합 빌드 시 오류가 발생하는 경우가 생김
- 빈번한 배포 어려움
3-2. MSA(Micro Service Architecture)
- 독립적인 서비스 단위로 구성해 서로 연계하는 방식
- 쉽게 수정하고 반영 가능하여 비지니스 변화를 적극적으로 수용함
- 서비스별로 조직에 맞는 개발 도구와 환경을 채택하여 사용 가능
4. 방법론🧑💻
- 어플리케이션 현대화 과정에서 발생하는 변화들을 뒷받침 하기 위해 다양한 방법론이 제시되었다.
- 대표적인 방법론으로 애자일이 있다.
4-1. 애자일(Agile)
- 고객의 요구사항을 적극적으로 수용하고 반영한다.
- 이로 인해 고객은 만족하고 개발자는 발전하는 환경이 형성된다.
5. 컨테이너와 자동화🚢
- 변화를 받아들이기 어려웠던 개발 환경에서 변화에 적극적인 환경으로 발전했다.
- 또한 개발한 내용을 쉽게 적용하고 배포하기 위한 기술력이 필요해졌다.
5-1. 컨테이너
- 배포(Deploy)를 용이하게 하는 기술
- 사용자가 쉽게 어플리케이션을 사용할 수 있도록 실행 환경과 소스 코드를 결합하여 배포한다.
- 이를 위해 가상화를 사용하면 가상 머신을 제어하기 위한 운영체제가 필요하며, 이때 사용되는 기술이 바로 컨테이너이다.
- 컨테이너는 호스트가 가지고 있는 운영체제를 빌려 쓰는 개념이다.
- 하나의 가상 머신에서 여러 사용자가 작업할 때 충돌이 발생하지 않도록 구분해주는 격리 기술이 필요하다.
5-2. CI/CD
- 적용을 용이하게 하는 기술
- 변경된 소스 코드를 자동으로 반영해주는 자동화 기술이다.
- 자동화를 사용할 경우 품질에 대한 의구심이 들 수 있으며, 이를 해결하기 위해 애자일 방법론 중 하나인 TDD가 제시된다.
6. 정리🔑
- AM에서 소프트웨어를 개발하기 위한 클라우드 네이티브 핵심 기술
- 독립된 작은 서비스 단위로 개발 ➡️ MSA🧩
- 배포에 용이하도록 컨테이너화 ➡️ 컨테이너📦
- 자동화된 프로세스 ➡️ CI/CD⚙️
- 클라우드 환경에 배포 ➡️ 클라우드☁️