당니의 개발자 스토리
[LG CNS AM Inspire Camp 1기] AM이란 무엇일까? 역사, MSA, Agile - 당니의 개발자 스토리 본문
[LG CNS AM Inspire Camp 1기] AM이란 무엇일까? 역사, MSA, Agile - 당니의 개발자 스토리
clainy 2025. 1. 6. 00:44LG CNS AM Inspire Camp 1기 최종합격을 했다.
부트캠프를 진행하면서 AM의 중요성과 이를 위한 다양한 최신 기술들을 배우게 될 것이다.
그래서 오늘은 AM이 뭔지, 어떻게 AM이 나온 것인지 그 역사에 대해서 정리하고자 한다.
정확히는 첫 수업에 대한 review 하는 내용이 될 것이다.
AM(Application Modernization)은 무엇일까?
먼저 아래의 [LG CNS AM 채용공고]를 보면 AM이 무엇인지 이해하기에 도움이 될 것이다.
AM(Application Modernization) 분야 경력채용 - LG CNS
우리는 이런 일을 합니다. 역량 있는 여러분의 지원을 기다립니다. 접수 기간 : 2023-03-01 ~ 2023-03-31 #Cloud #MSA #CloudNative #Agile #DevOps #TDD
www.lgcns.com
AM 이란?
AM은 Application Modernization의 약자이다.
말 그대로 기존 어플리케이션 환경을 현대화 한다는 의미다.
최근에 나오고 있는 여러가지 개발 트렌드나 아키텍처 등을 반영하여 현대화 하는 과정이라고 이해하면 된다.
AM의 핵심 기술 : 클라우드 네이티브 환경
AM은 Cloud Native (클라우드 네이티브) 와 밀접한 연관이 있다.
클라우드 네이티브란?
클라우드 환경에 최적화 되어서 실행될 수 있는 어플리케이션을 개발하는 것을 말한다.
클라우드 네이티브 어플리케이션은 유연하고 빠른 배포가 가능하며 자동화의 특징을 가진다.
AM이 기존 어플리케이션 환경을 현대화 하는 것이므로, 기존의 전통적인 시스템 환경이 어땠는지 얘기를 빼먹을 수 없다!
옛날에는 회사의 인프라가 전산실 안에다가 서버 랙에 서버 장비를 올려서 안정적으로 동작하도록 직접 관리하는 환경이었다.
시간이 지나면서 비용 절감을 위해 많은 기업들이 외부 데이터 센터에다가 위탁을 시켰다.
그리고 최근에는 클라우드 인프라 라는 개념이 등장하면서 인프라가 네트워크를 통해 IT 자산들을 빌려쓰는 방식으로 바뀌고 있다.
내가 직접 구성하고 관리하는 온프레미스(On-premise) 환경에서 외부에서 IT 자원을 빌려쓰는 클라우드 환경으로 바뀐 것이다.
AM과 클라우드 환경
클라우드는 원하는 시점에 필요한 만큼 자원을 요청하고 제공받은 만큼만 비용을 지불하는 방식으로, 클라우드 환경으로 바뀌고 비용 효율성이 높아졌다.
클라우드를 구성하는 것은 인터넷과 가상화가 있다.
- 인터넷 : 네트워크 퍼블릭 인프라로, 전세계 어디에서든지 인터넷을 이용하면 클라우드 IT 자산을 빌려쓸 수 있다.
- 가상화 : 클라우드를 구성하는 핵심 기술. 가상화는 하드웨어를 소프트웨어로 표현한다. 즉, 하드웨어가 소프트웨어화 되는 것.
소프트웨어로 표현된다는 건 파일로 관리된다는 거다. 하드웨어가 파일 형태로 만들어져서 특정 프로그램을 통해서
그 기능들을 수행하도록 해준다.
이 두 가지가 클라우드 인프라의 구성 요소이다. 인터넷을 통해 클라우드 자원에 접근하고 가상화 기술을 통해 하드웨어 자원을 효율적으로 관리하고 운영할 수 있는 환경이 만들어진 것이다.
자동화와 IaC(인프라스트럭처 코드화)
가상화는 하드웨어 자원을 파일로 관리할 수 있게 해주는데 파일 관리의 장점은 아래와 같다.
- 쉽게 복사, 이동 가능
- 내용을 inspection 할 수 있다.
- 파일은 버전 관리가 가능. 롤백 할 수 있고 이전버전으로 옮길 수 있다.
여기서 IaC(Infrastructure as Code)가 등장하는데, 이러한 파일 관리의 장점을 극대화 시킨 것이다.
IaC는 인프라 환경을 코드로 정의하고 버전을 관리해서 자동화 하는 방식으로 인프라의 설정과 변경을 파일처럼 취급할 수 있게 했다.
아무튼 어플리케이션을 현대화(AM) 한다는 개념에는 이 자동화 라는 개념이 함께 들어간다.
엄청나게 많은 기술 요소들이 축약, 집약되고 빈번하게 바뀌는데 사람이 하면 느려지고 실수 발생 가능성 높아져서 자동화 라는 개념이 나왔다.
AM과 자동화
자동화 기술의 발전은 특히 인프라와 관련이 깊은데, 전통적인 하드웨어 기반 인프라는 자동화의 걸림돌이었다.
하지만 하드웨어 개념이었던 인프라가 소프트웨어적으로 관리되는 방식인 IaC가 등장하면서 하드웨어 자원을 코드로 정의하고, 필요한 자원을 프로그래밍 방식으로 자동으로 구성하고 제어할 수 있게 되었다.
그 결과로 인프라도 자동화되어 효율성과 신속성을 높일 수 있게 되었다.
따라서 어플리케이션을 현대화(AM)한다는 개념은 이러한 인프라 변화와 깊은 연관을 지닌다.
MSA(Microservice Architecture)와 Agile 방법론의 등장
과거에는 소프트웨어가 단위 모듈로 잘 동작해도, 이를 통합해서 하나의 시스템으로 빌드하면 오류가 발생하는 경우가 많았다.
그러다 보니 빈번한 배포가 어려웠다.
이러한 문제를 해결하기 위해 소프트웨어를 독립적인 서비스 단위로 나누어 각 서비스를 독립적으로 관리하는 방식을 고안했는데,
이 방식이 MSA(Microservice Architecture) 이다.
MSA는 전통적인 방식인 시스템을 큰 덩어리로 구성하는 모놀리식 아키텍처에서 벗어나, 하나의 덩어리로 관리되던 서비스들을 독립된 개별 서비스로 분화하고, 서비스들끼리 서로 연계하는 방식이다.
MSA의 장점으로는
먼저, 수정과 빈번한 반영이 쉽다. 독립된 서비스로 분화하다 보니, 크기가 확실히 작아지니까 다른 서비스에 영향을 미치지 않고 빠르게 반영할 수 있다.
만약 내가 온라인 쇼핑몰에서 상품 목록을 바꿨는데 고객의 주문 순서가 바뀌는 사고가 생기지 않는 거다.
이런 무시무시한사고가 생기면 변화를 소극적으로 수용하게 되는데, MSA 방식으로 고객의 요구사항을 적극적으로 받아들이면서 비즈니스 효용이 향상 되었다.
두 번째는 모놀리식 아키텍처에서 하나의 덩어리를 크게 가져갔을 때는 단일한 language나, 데이터베이스나, 프레임워크 등의 종속 되어 있었는데,
MSA는 독립 되어 있기 때문에
언어는 java 베이스로 가고~ 이거는 파이썬 베이스로 가고~ 이거는 db 오라클 쓰고, 이거는 mysql 쓰자!
이렇게 각각 서비스 별로 조직에 맞는 개발 도구나 환경을 자유롭게 채택할 수 있게 됐다.
이러한 MSA를 구현하기 위해서는 여러 가지 방법론이 필요한데,
그 중 대표적인 방법론으로 Agile 이 있다.
애자일은 고객의 요구사항을 빠르게 반영하고 개발자가 더 효과적으로 개발할 수 있는 환경을 제공하는 방법론이다.
즉, 고객의 요구사항들을 적극적으로 수용하는 게 Agile 이다. 애자일 하게 개발하면 고객도 만족하고 개발자도 발전할 수 있다.
쉽게 deploy(배포) 되기 위해서는 실행 환경 하고 소스코드, 즉 실행 환경과 어플리케이션이 결합된 형태가 돼야 한다.
다시 말하면, 내가 프로그램을 만들었는데 이 프로그램이 동작 하기 위해서 필요로 하는 프로그램들이 있는데
그게 하나로 결합 되어서 배포 되어야 쉽게 배포 될 수 있다.
예로 대표적인 게 XML Parser가 있다.
XML 문서를 해석 하는 해석기가 있는데, 그것이 동작 하는 버전과 서버에 따라서 될 때도 있고 안될 때도 있다.
JDK의 버전에 따라서 종류에 따라서 조금씩 차이가 나기 때문이다.
어떤 머신에서든 동작 하면 좋은데, 실행 되지 않을 수도 있기 때문에 이러한 문제를 극복하기 위해서 내가 실행에 필요로 하는 것과 나의 소스코드를 같이 묶어서 배포하자는 거다.
이것을 지원해 주는 기술이 가상화 라는 것과 컨테이너 기술 이다.
가상화의 단점은, 가상 머신을 실행하려면 운영체제가 필요하기 때문에 하드웨어 자원의 낭비가 발생한다는 점이다.
예를 들어, 20MB 크기의 프로그램을 실행하려면 600MB의 운영체제가 있어야 되는 등 리소스 낭비가 심했다. 이를 해결하기 위해 나온 기술이 컨테이너다. 컨테이너는 각 프로그램이 필요로 하는 호스트의 리소스를 격리해서 충돌 없이 실행되도록 만들었다.
컨테이너와 배포 자동화
그래서 배포를 용이하게 하기 위해서는 이러한 컨테이너 기술이 필요했다.
또한 자동화 하는 기술도 필요한데 수정을 하면 어쨌든 그게 반영이 되어야 한다. 그걸 효율적으로 하기 위해서 자동화가 필요하다.
이 자동화를 CI/CD 라고 한다. 지속적으로 변경된 내용을 가지고 오고 자동으로 반영해 주는 거다.
번외로 자동화를 하려다 보니까 품질에 대한 의구심이 들기 시작했는데, 이게 진짜 제대로 동작 하는지 원하는 요구사항이 들어간 건지 확인을 해야 되는거다. TDD(Test-Driven Development) 라는 접근법이 나왔다.
TDD는 우리가 개발을 할 때 테스트 코드를 먼저 작성하고 이를 만족하는 실행 코드를 만드는 방식으로 개발 과정에서의 품질을 보장한다.
다시 돌아와서, AM과 CI/CD, MSA의 관계
결론적으로, 애플리케이션 현대화(AM)는 클라우드 네이티브 환경에서 이루어진다.
이 클라우드 네이티브 환경의 핵심 기술은 MSA, 컨테이너, CI/CD 이다. 이러한 기술들을 통해 유연하고 효율적인 시스템을 구축할 수 있으며, 이것을 지향하는 것이 바로 AM 이다.
'LG CNS > RealVerse 스터디' 카테고리의 다른 글
| 기술면접 대비# 네트워크의 기초: 네트워크, 트래픽, 처리량, 대역폭, RTT (0) | 2025.02.05 |
|---|---|
| [기술 면접 대비] 좋은 객체 지향이란? - 스프링의 핵심 컨셉, SOLID (0) | 2025.01.09 |
| [리액트/LG CNS AM Inspire Camp 1기] ref란 무엇일까? - 당니의 개발자 스토리 (6) | 2025.01.06 |