[Infra] 아키텍처

어제 어수선한 분위기 속에 첫날이 마무리되고
두번째 수업이 진행되었습니다.
오늘은 클라우드 개론에 대해 배웠고 까먹지 않기 위해 정리해보고자 합니다.

아키텍처


  • 애플리케이션을 실행할 기반이 되는 온라인 플랫폼을 제공할 목적으로 클라우드 구축에 필수적인 모든 구성 요소 및 기능을 연결하는 방식
  • 서비스를 구축할 때, 클라우드 서비스의 다양한 기능들을 이용하여 인프라 구축 그림을 그리는 것

아키텍처를 그리기 위한 배경지식들


  • OS(Operating System)
    • 하드웨어를 사용하기 위해 필요한 소프트웨어이다.
    • Ex : Windows, Mac, Linux 등
  • 파일시스템
    • 운영 체제에서 HD, SSD 또는 USB 플래시 드라이브와 같은 저장 장치에 있는 파일을 구성하고 관리하는 데 사용하는 구조이다.
    • 클라우드에서도 서버 용량을 붙일 때 HD, SSD로 붙일지 선택하고 Network Block으로 만들어 붙인다. 따라서, VM에 있는 파일시스템 성능과 로컬에 성능은 다를 수 있다.
    • NFS(Network File System), NBD(Network Block Device)와 같은 파일시스템에 대한 가상화도 많이 활용된다.
  • VM (Virtual Machine)
    • 가상화된 서버
    • 보통 OnDemand 형태로 필요한 만큼 사용하거나 1년이나 3년 비용을 미리 할인되 가격으로 내는 Reserved 방식으로 활용한다
    • Spot Instance 형태로 저렴하게 사용 가능 단, 남는 리소스를 잠깐 빌려주는 형태라 강제로 서버가 회수될 수 있다.
  • LB(Load Balancer)
    • 네트워크 트래픽을 여러 서버로 분산시키는 역할
    • 서버 이중화하는 경우 가장 많이 사용한다.
    • 이중화를 통해 HA(고가용성)을 책임진다.
      • HA : 바람직한 정도로 긴 시간동안 지속적으로 운영이 가능한 시스템이나 컴포넌트를 가리킨다.
    • LB도 서비스 이기 때문에 느려질 수 있다.
    • 트래픽 몰릴 것으로 예상되는 시점에 서버도 늘리지만, LB에 미리 부하를 줘서 LB를 구성하는 서버도 미리 늘려놓는다.
      Pre-Warming 또는 Warm-Up이라고 부릅니다.
  • 데이터베이스
    • 데이터를 저장하고 관리하는 서비스
    • 라이센스 규정에 의해 비슷한 서비스를 자체적으로 만들어 공급하는 경우가 많다(Ex : DynamoDB)
    • 오픈소스를 운영하는 경우도 있다(Ex : Amazon RDS for MySQL, Elasticache)
    • AWS는 최신 버전을 업데이트 해주지만 많은 클라우스 서비스들이 버전업, 유지보수를 해주지 않는 경우가 많다.
  • CDN (Content Delivery Network)
    • 자주 바뀌지 않는 리소스들을 캐싱하여 데이터를 전달하는 서비스
    • 서버에서 리소스를 전달하면, 그 만큼 서버의 트래픽이 나가는데 이 트래픽을 CDN이 대신 책임져준다면 서버의 부담이 낮아진다.
    • 캐싱을 사용해 서버가 리소스를 전달하는 것보다 효율적이다. 따라서, 자주 바뀌지 않는 리소스를 올리는게 좋습니다.
  • MSA (Micro Service Architecture)
    • 작은 독립적인 서비스들로 분할하여 운영하는 아키텍처로 VM이나 Container를 이용하여 운영되어야 한다.
    • 보통 VM에 직접 올리는 형태에서 VM에 Container를 올려 운영하다가, 최종적으로는 EKS와 같은 쿠버네티스 시스템을 활용하는 형태로 고도화됩니다.

다층구조


  • 소프트웨어 애플리케이션을 논리적으로 분리된 여러 계층으로 나누어 구성하는 아키텍처 스타일
  • 다층 구조는 보통 프레젠테이션 계층(=프론트엔드 계층), 애플리케이션 계층(=백엔드 계층), 데이터 계층(=데이터베이스 계층)으로 나눈다.(고차원으로 갈수룩 더 다양한 계층이 생길 수 있다.)
  • 다층 구조 종류
    • 1티어 구조
      • 프론트, 백, DB가 하나의 VM에서 돌고 있는 상황이다.
      • VM이 죽는다면 모든 서버가 죽고 VM을 살리면 모든 서버를 살릴 수 있다.
    • 2티어 구조
      • 프론트, 백엔드 서버 구분 없이 하나의 서버에서 DB와 연결된 상황이다.
      • 많이 사용되는 아키텍처, 안정성과 관리가 용이하다.
      • 단점으로는 백엔드에서 나는 에러가 프론트에서도 난다.(Ex: 404페이지, 500페이지 등)
    • 3티어 구조
      • 프론트와 백엔드를 구별하고 백엔드에서 DB에 연결된 상황
      • 인프라 운영 노하우가 있고 제품을 이해하고 있으면 가장 나은 방식이다.
    • N티어 구조
      • 백엔드에 역할을 다양하게 나누어 서로 API 통신하게 만드는 형태
      • 대부분의 SaaS가 해당 형태로 운영된다.
  • 다층구조 핵심
    • 비즈니스 상황을 고려하여 티어를 선택
    • 애플리케이션이 너무 커져서 모듈로 쪼갠다면 데이터 기반이 보편적이다.(결제 시스템, 유저 시스템 등)
comments powered by Disqus
Hugo로 만듦
JimmyStack 테마 사용 중