20230731

아홍·2023년 7월 31일

2023.07

목록 보기
12/12

서버리스 컴퓨팅

서버를 직접적으로 관리하지 않는 컴퓨팅 방식
클라우드 제공 업체가 서버 인프라를 관리하고, 개발자는 함수 단위로 애플리케이션을 작성해 애플리케이션을 개발, 배포하는 방식

장점

  1. 서버 관리 불필요
  2. 유연한 확장성
  3. 고가용성
  4. 유휴 용량 없음

마이크로 서비스 MSA:Micro Service Architecture

소프트웨어 아키텍처 디자인 패턴 중 하나
큰 애플리케이션을 작은 단위의 독립적인 서비스로 분할하여 개발, 배포한다
각 서비스는 독립적인 DB와 서버를 갖고, 서로 간의 통신은 API를 통한다 >> 개별 서비스의 장애가 전체 시스템에 큰 영향X
각 서비스가 특정 프로그래밍 언어나 DB에 의존하지 않기 때문에 혼합해서 사용 가능하다

장점

  1. 빠른 개발 및 배포
  2. 확장성 : 서비스 단위로 확장이 가능하다
  3. 혼합 가능한 기술 스택

단점

  1. 운영 부담 : 모놀리식 아키텍처보다 더 많은 운영 부담
  2. 분산 시스템의 복잡성 : 서비스 간의 통신 구조를 잘 설계해야한다. 디버깅이 어려울 수 있다.

정의

  • 유지보수에 유리하고, 테스트할 수 있어야 한다
  • 느슨하게 결합되어야 한다
  • 독립적으로 배포할 수 있다
  • 비즈니스 역량을 중심으로 구성해야 한다
  • 작은 팀에 의해 소유된다

서비스로서의 컴포넌트화

컴포넌트란? 독립적으로 대체하거나 업그레이드할 수 있는 소프트웨어 단위
컴포넌트화란? 시스템을 컴포넌트로 나누고 이를 연결하여 구축하는 것

라이브러리 vs 서비스 컴포넌트

라이브러리서비스
특징프로그램 안에서 링크되어 메모리 상에서 함수 호출을 한다개별적인 프로세스로, 각 프로세스가 HTTP 혹은 RPC로 통신한다
배포 편의성전체 응용 프로그램을 재배포 해야한다서비스 단위로만 재배포 가능하다
컴포넌트간 결합강하다. 프로그램을 작성할 때에는 라이브러리의 코딩 규칙을 따라야하므로 강한 결합이 생긴다.약하다. 원격 호출 메커니즘을 사용하므로 종속 및 결합을 방지한다
호출 비용적다. 프로그램 내에서 링크되어 있고, 메모리 상에서 호출한다.높다. 원격 호출, 종종 네트워크를 통해 호출하므로 비용이 높다

마이크로 서비스 아키텍쳐 구현 단계

항상 마이크로 아키텍쳐가 필요한 건 아니다

Level 0Level 1Level 2Level 3
애플리케이션 아키텍처모놀리식서비스 지향 통합서비스 지향 애플리케이션API 중심
데이터베이스엔터프라이즈 DB엔터프라이즈DB + NoSQL, 경량 DB다중언어를 지원하는 폴리글랏, 서비스로서의 DBData Lake, 준실 시간 분석
인트라스트럭처물리 서버가상화클라우드컨테이너
모니터링인트라스트럭처애플리케이션 + 인트라스트럭처애플리케이션 퍼포먼스(APM)APM + 중앙화된 로그 관리 시스템
개발 프로세스워터폴애자일 & CICI &* CDDevOps

API Gateway

경로와 엔드포인트로 구성되어 정의된 HTTP 서버
각 API 요청의 관문 역할을 한다

각 경로는 해당 경로를 처리하는 리소스와 연결된다

API Gateway의 요청 수신 > 요청과 일치하는 라우터 구성 탐색 > 관련된 FaaS 호출

중요해진 이유

마이크로 서비스 아키텍처를 연결하는 중간 다리 역할을 담당
MSA의 핵심 기능

사용하는 이유

MSA는 개발, 배포, 유지관리를 쉽게 할 수 있게 만들지만 클라이언트의 빠르고 안전한 액세스를 어렵게 만들 수 있다.
API Gateway는 빠르고 안전한 액세스를 돕는다

API Gateway의 기능

  • IP 화이트리스팅
  • 전송 메시지 암호화
  • 속도 제한
  • API 구성 및 라우팅
  • 캐싱
  • 로깅 추적
  • API 버전 관리

장점

  • 트래픽 측정
  • 보안
  • 복원력
  • 작업 모니터링
  • 수명 주기 관리
  • 개발자를 위한 설계
  • 실시간 양방향 통신

AWS Lambda

AWS가 제공하는 서버리스 FaaS 솔루션
함수의 인스턴스를 실행하여 이벤트를 처리한다

FaaS

자체 서버 시스템이나 수명이 긴 서버 애플리케이션을 관리하지 않고 백엔드 코드를 실행하는 것
런타임에 대한 사전 준비가 필요하지 않다
수평적 확장이 완전 자동 & 탄력적 & 공급자가 관리
상태 및 실행 기간과 관련하여 상당한 아키텍처 제한이 있다

서버를 프로비저닝하거나 관리할 필요 없이 작성한 코드를 백엔드 서비스로써 배포할 수 있게 한다
이벤트 트리거만 정의해주면 된다
높은 가용성을 제공한다

AWS Lambda의 단점

  • 24시간 내내 동작하는 상태가 아님
  • 요청이 올 때 람다를 깨우는 데 시간이 소요되기 때문에 응답 속도에 차이가 있음
  • AWS에 지나친 의존

AWS Lambda 함수

람다에서 실행하는 코드
각 함수에는 이름, 설명, 진입점, 리소스 요구 등 구성 정보가 포함된다
Stateless 스타일로 작성되어야 함

트리거

람다 함수를 호출하는 리소스 혹은 구성

0개의 댓글