Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

장미정원

✨ MSA와 클라우드 인프라 본문

Back-end

✨ MSA와 클라우드 인프라

신희성 2024. 8. 26. 18:29

MSA

MicroService Architecture, 마이크로서비스 아키텍처는 작고, 독립적인 각각의 서비스들이 모여 하나의 애플리케이션을 이루는 아키텍처를 의미합니다.

 

마이크로서비스 아키텍처는 모놀리식 아키텍처와 대비되는데요, 기존에 개발하던 애플리케이션 아키텍처 방식이 모놀리식이라고 볼 수 있습니다. 

 

모놀리식 아키텍터와 MSA

모놀리식 아키텍처

전통적인 시스템 구조인 모놀리식 아키텍처 구조는 하나의 애플리케이션에 모든 비즈니스 서비스를 개발하는 방식입니다. 모놀리식 아키텍처 애플리케이션은 하나의 단일체로서 아무리 작은 변화가 발생해도 애플리케이션 전체를 빌드하고 배포해야합니다.

 

모놀리식 아키텍처는 소규모 프로젝트나 일반적인 프로젝트에서는 합리적인 선택입니다. 하지만 모놀리식 아키텍처는 대규모 서비스, 개발 인력이 수백명 이상인 프로젝트에서는 한계를 보입니다. 모놀리식 아키텍처는 어느 한 부분의 문제 때문에 시스템 전체의 장애로 이어질 수 있고, 사용량 증가에 따른 부분적인 Sclae-out이 어렵습니다. 애플리케이션 전체를 확장하여 사용량 증가에 대응할 수 있지만 특정 서비스에 대한 부분적인 확장이 불가능 하며 데이터베이스가 통합 되어있기 때문에 탄력적으로 대응이 어렵습니다. 또 하나의 언어, 프레임워크에 종속적인 단점이 있는 등 이런 모놀리식 아키텍처의 문제점들을 보안하기 위해 MSA가 등장합니다.

 

MSA

MSA는 위에서도 언급했다시피 서버 애플리케이션이 작고 독립적인 각각의 서비스 조각으로 구성되어 있으며 각 서비스는 별개의 인스턴스에 배포됩니다. 즉 여러 서비스 인스턴스들이 모여 하나의 애플리케이션을 구성한다고 생각할 수 있습니다.

 

서비스가 분리되어 확장이 필요한 서비스를 독립적이고 탄력적으로 확장할 수 있으며, 특정 서비스에 변경사항이 생겼을 때 해당 서비스만 빌드해서 배포하면 됩니다. 또 각 서비스와 데이터베이스가 독립적이기 때문에 각 서비스에 맞는 서로 다른 언어, DBMS를 채택할 수 있습니다.

 

추가로 각 서비스마다의 느슨한 결합으로 확장과 유연한 변경이 가능하며 모놀리식 아키텍처에서는 하지 못했던 다른 서비스간의 장애 전파를 막을 수 있습니다.

 

SOA, MSA

잠깐 MSA와 개념이 비슷한 소프트웨어 아키텍처 하나를 비교하고 넘어가도록 하겠습니다!

Service Oriented Architecture, SOA는 서비스 단위로 개발하고 개발된 서비스를 모듈화시켜 재사용성, 유연성을 확보하는 아키텍처 입니다. 언듯보면 MSA와 유사한 방식이라고 생각할 수 있습니다. 이 두 아키텍터의 차이점을 설명하도록 하겠습니다.

 

재사용성

SOA는 서비스를 개발하고 모듈화하여 이를 최대한으로 재사용하는데 초점이 맞추어져 있습니다. 개발된 서비스를 유연하게 재사용하며 효율성을 추구하는 아키텍처이지만, MSA는 서비스를 공유하는것 보다 독립적으로 실행되는것을 지향합니다. 서비스들의 재사용성이 들어날 수록 서비스간 결합도가 늘어나기 때문에 작고 독립적인 서비스를 구성하여 이들간의 의존관계를 최대한 줄여서 탄력적이고 유연한 구조를 가져갑니다.

 

폴리글랏

특정 서비스를 구축할 때 사용하는 언어, 프레임워크, 데이터베이스를 자율적으로 사용하는 방식을 폴리글랏하다라고 합니다. SOA에서는 애플리케이션을 서비스별로 모듈화하여 분리했지만 각 서비스의 데이터베이스 까지는 분리하지 않았습니다. 따라서 데이터와의 강한 결합 때문에 애플리케이션을 독립적으로 사용하기는 힘들었습니다. 하지만 MSA에서는 각 서비스마다 데이터베이스를 분리하고 다른 서비스의 데이터베이스에 접근하기 위해서는 해당 서비스의 인터페이스를 통해서만 접근을 허용합니다. 이렇게 MSA는 모듈화 방식을 강화했고 SOA와의 차이점입니다.

 

SOA가 클라우드 인프라의 등장으로 서버를 가동시키는 하드웨어를 유연하게 사용할 수 있게 됨에 따라 비로소 성공적으로 증명된 시스템 구조를 MSA라고 할 수 있습니다.

 

클라우드 인프라

클라우드 인프라의 등장으로 MSA가 화두에 올랐습니다. 클라우드 인프라의 발전 덕분에 MSA도 발전할 수 있었습니다. 클라우드 인프라는 원격으로 서버 인프라를 구성할 수 있는 서비스입니다.

 

전형적으로(온프레미스) 시스템 인프라를 구축하기 위해서는 서버 구축을 위한 장비를 구입 후 서버에 운영체제 설치, 애플리캐이션 설치를 진행해야합니다. 이러한 과정은 몇주에서 몇달이 걸릴 정도로 오래 걸리고 서버를 배치할 장소, 그에 따른 비용도 많이 드는 작업입니다.

 

엄청난 아이디어가 떠올라 애플리케이션을 개발해서 런칭하고 싶은데.. 인프라 환경을 구축하기 위해서 많은 시간, 돈이 들어갑니다. 만약 런칭을 성공했는데 서비스가 실패했다면 인프라를 구축하는데 사용된 비용은 회수할 수 없습니다.

 

또 만약에 서비스에 사용량이 급격하게 늘어난다면 인프라 환경을 확장해야합니다. 확장 방법은 서버 컴퓨터의 용량을 늘리는 Scale-up, 서버 컴퓨터를 여러대 배치하여 트래픽을 분산하는 식으로 확장하는 Scale-out이 있습니다. 하지만 인프라 환경을 직접 구성한다면 사용량 증가로 서버 컴퓨터를 확장하고 나서 사용량이 감소한다면 확장한 컴퓨터를 계속 유지하는것도 손해이고 그렇다고 확장한 컴퓨터를 처분하는것도 힘듭니다.

 

이렇게 기존에 온프레미스 방식, 직접 서버 인프라를 구성하는 방식에는 서비스의 유연한 확장, 대처에 한계가 있습니다.

 

그러나 이러한 문제는 클라우드 인프라의 등장으로 해결됩니다. 클라우드 인프라는 간단한 클릭만으로 서버 인프라 구축이 가능하며 특정 서버를 확장하거나 사용하지 않는 자원은 삭제하여 유지 비용을 절약할 수 있습니다.

 

MSA와 클라우드 인프라

이러한 클라우드 인프라의 발전으로 마이크로서비스를 쉽게 배포하고 운영할 수 있게 되었습니다. 확장이 필요한 서비스는 Scale-out으로 클라우드 인프라에서 간단하게 확장하고, 사용량이 감소한다면 확장한 부분을 삭제할 수도 있습니다.

'Back-end' 카테고리의 다른 글

✨ 스프링에서 트랜잭션을 처리하는 방법  (0) 2024.09.09
✨ JPA 이해하기  (0) 2024.09.02
[DB] 인덱스 진짜 이해하기  (1) 2024.08.19
✨ 스프링 AOP  (0) 2024.08.10
✨ GC 이해하기  (0) 2024.08.02