ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [아키텍처] 시스템 아키텍처 간단하게 알아보자.
    Programming 2021. 9. 7. 22:11

    프로젝트 교육을 받는 중 시스템 아키텍처를 짜는 시간이 있었습니다.

    아키텍처란 말만 나와도 아직은 감이 안잡혀 간단하게 정리해 봤습니다. 

     

     

    1-1. 시스템 아키텍처

    • HW와 SW 기반으로 시스템이 서비스를 제공하기 위한 아키텍처이다.
    • 시스템 구성 및 동작 원리를 나타낸다.
    • 시스템 전체에 대한 논리적인 기능 체계와 그것을 실현하기 위한 구성방식이다.
    • 시스템의 전체적인 최적화를 목표로 한다.

    아래 그림은 아마존에서 제공하는 AWS 서비스의 시스템 디자인입니다. 바로 이것이 시스템 아키텍처 입니다. 이 그림이 필요한 이유는 시스템 목적을 달성하기 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지, 정보가 어떻게 교환되는지를 설명하기 위해서 입니다. 

     

    Design a system that scales to millions of users on AWS           (출처 : https://github.com/donnemartin/system-design-primer#domain-name-system)

     

    1-2. 시스템 아키텍처 설계시 고려사항

     

    6가지 항목이 있습니다. 이 항목들의 요구사항에 잘 맞는 시스템을 구성하는 것이 목표이며 이로 인해 아래 소개할 여러 개념들이 등장했습니다.

     

    • Scalability (확장성): 10만 명의 요청을 처리할 수 있는 시스템과 1000만 명의 요청을 처리할 수 있는 시스템은 다릅니다. 확장성을 고려한 시스템은 앞으로 클라이언트 수가 늘어났을 때 무리 없이 모든 요청을 처리할 수 있을 겁니다.
    • Performance (성능): 속도와 정확성을 말합니다. 요청한 내용을 정확하고 빠르게 돌려주어야 합니다.
    • Latency (응답 시간): 모든 요청은 클라이언트가 불편해하지 않을 정도로 빠른 시간 안에 돌려주어야 합니다.
    • Throughput (처리량): 같은 시간 안에 더욱 많은 요청을 처리한다면 좋은 시스템입니다.
    • Availability (접근성): 사용자가 언제든지 시스템에 요청을 보내서 응답을 받을 수 있어야 합니다. 비록 서버 장비 한두 대가 문제가 생겨 제 기능을 하지 못하더라도 사용자는 그 사실을 몰라야 합니다.
    • Consistency (일관성): 사용자가 서버에 보낸 요청이 올바르게 반영되어야 하고, 일정한 결과를 돌려주어야 합니다. 요청을 보낼 때마다 불규칙한 결과를 돌려준다면 믿을 수 없는 서비스가 될 것입니다.

     

    2. 시스템 아키텍처 구성 요소 

     

    1. DNS(Domain Name System)

     

    서버의 도메인 이름으로부터 해당 서버의 IP 주소를 알려준다. 도메인 이름에 대한 질의를 하고, 해당 도메인 이름이 DNS 'A Record'형태로 등록되어 있다면 도메인 이름에 해당하는 IP 주소를 응답으로 돌려준다.

     

     

    2. Web Service(Web Server)

     

    웹서버는 웹서비스에서 필요로 하는 다양한 요청과 그에 대한 응답을 제공한다. 클라이언트가 요청한 작업을 하는 장소이다.

     

     

    3. API(Application Programming Interface)

     

    서버는 미리 정의되지 않은 요청에는 대응하지 못합니다. 약속한 요청을 보내면 약속한 방식으로 응답하는 명세를 제공합니다. 약속한 요청으로 데이터를 보내면 데이터를 정제하고, 처리된 데이터를 약속한 방식으로 내보냅니다.  웹서버는 정의된 API 맞춰 요청과 응답을 합니다.

     

    또한 웹서버에 요청이 폭증하면 과부하가 일어날 있습니다. 이에 페이지에 뿌려줄 데이터만을 관리하는 역할을 하도록 API 서버가 담당을 합니다. 

     

     

    4. Load Balancer

     

    서버가 여러 존재할 서버에 일을 적절히 분배해주는 역할을 해줍니다. 트래픽이 많을 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등의 문제를 해결합니다.

     

     

    5. CDN(Content Delivery Network)

     

    웹서버가 클라이언트 요청에 의해 응답결과를 돌려줬을 , 클라이언트 화면에 렌더링할 이미지와 같은 콘텐츠들이 있습니다. 콘텐츠들을 웹서버에서 전부 주기에 데이터의 용량이 경우 서버에 부담이 있습니다. CDN 용량이 콘텐츠(이미지, 비디오 ) 빠른 속도로 제공하기 위한 데이터 저장 서버입니다. 콘텐츠를 전송할 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화 합니다. CDN 지역에 캐시 서버(PoP, Points of presence) 분산 배치해, 근접한 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달합니다.

     

     

    6. Database

     

    서비스를 제공하다보면 클라이언트의 다양한 데이터를 다루게 됩니다. 수많은 데이터를 웹서버에 전부 저장하고 사용하기에 저장 공간이 부족하고, 데이터를 원하는 모양대로 정제하기 어렵습니다. 그래서 데이터만을 저장하고 관리하는 데이터베이스 서버가 따로 존재하게 됩니다.

     

     

    7. Replication

     

    데이터베이스가 만약 정상적으로 동작하지 못하는 경우가 생기는 경우 클라이언트가 원하는 정보를 제공하지 못하는 일이 일어납니다. 데이터베이스를 복제해놓았다면 이를 해결할 있습니다. 또한 하나의 데이터베이스로 변경, 읽기 다루게 경우 어떤 일을 수행하는 동안 다른 요청들은 기다려야 합니다. 요청을 분산하기 위해 Master-Slave 데이터베이스를 나눕니다. Master CRUD 모두 가능하지만 Slave R(Read) 가능합니다.

     

     

    결론

    개념을 보았지만 직접 설계도를 그리면서 확인하는 것이 가장 좋을듯합니다. 단순히 프로그래밍만 하면 될줄 알았는데 여러가지 알아야할 것이 많네요. IT라는 분야는 참 많은 정성이 녹아있는 것 같습니다. 화이팅입니다 !

     

     

    참고출처

    http://labs.brandi.co.kr/2018/08/03/ohyj.html

    댓글

Designed by Tistory.