일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트
- MS-SQL
- 애니메이션
- Maui
- 깃허브
- 플러터
- Flutter
- page
- AnimationController
- JavaScript
- 닷넷
- React JS
- Animation
- 리엑트
- typescript
- 바인딩
- MVVM
- 파이어베이스
- Firebase
- spring boot
- .NET
- GitHub
- 오류
- db
- 마우이
- listview
- 함수
- Binding
- HTML
- MSSQL
- Today
- Total
개발노트
대용량 트래픽 처리 관련 용어 정리 본문
분산처리에 들어가기 전 알아야할 용어들(급식에 비유)
1. 로드 밸런싱 (Load Balancing)
비유: 급식 줄에 줄 서기
- 상황 설명: 급식 줄이 너무 길어서 한 번에 모든 학생들이 급식을 받기 어려운 상황입니다. 이때, 학생들이 자동으로 여러 줄로 나뉘어서 줄을 서게 하면 더 빨리 급식을 받을 수 있습니다. 이것이 로드 밸런싱입니다.
내용: 로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시키는 기술로, 트래픽 부하를 균등하게 나누어 서버의 과부하를 방지하고, 고가용성을 제공합니다. 로드 밸런싱 방법은 다음과 같습니다.
- 라운드 로빈 (Round Robin): 순서대로 각 서버에 요청을 배분합니다.
- 최소 연결 (Least Connections): 현재 연결이 가장 적은 서버에 요청을 배분합니다.
- IP 해시 (IP Hash): 사용자의 IP 주소를 해싱하여 특정 서버에 요청을 배분합니다.
2. 자동 확장 (Auto Scaling)
비유: 급식 줄이 급격하게 늘어날 때 새로운 줄을 열기
- 상황 설명: 급식 줄이 예상보다 많이 길어지면, 급식실 직원이 추가적인 줄을 열어서 학생들이 더 빨리 급식을 받을 수 있도록 합니다. 이렇게 자동으로 줄을 늘리는 것이 자동 확장입니다.
내용: 자동 확장은 서버 자원을 자동으로 확장하거나 축소하는 기술로, 클라우드 환경에서 자주 사용됩니다. 트래픽 증가 시 서버 인스턴스를 추가하고, 트래픽 감소 시 불필요한 인스턴스를 제거하여 비용 효율성을 높입니다.
3. 캐싱 (Caching)
비유: 미리 준비된 간식 상자
- 상황 설명: 급식 줄이 길 때, 학생들이 일일이 급식을 받기보다 미리 준비된 간식 상자를 가져와서 더 빨리 먹을 수 있습니다. 이 간식 상자는 한 번 준비되면 여러 번 사용할 수 있으며, 이것이 캐싱입니다.
내용: 캐싱은 자주 조회되는 데이터를 메모리나 고속 저장소에 저장하여, 빠르게 제공하는 기술입니다.
- 클라이언트 캐시: 브라우저 캐시를 활용하여 정적 콘텐츠를 로컬에 저장합니다.
- CDN 캐시: 전 세계에 분산된 CDN 서버에 정적 콘텐츠를 저장하여 빠르게 제공합니다.
- 서버 캐시: Redis, Memcached 등을 사용하여 데이터베이스 조회 결과나 계산 결과를 캐싱합니다.
4. 데이터베이스 최적화
비유: 효율적인 요리 재료 관리
- 상황 설명: 급식 줄이 매우 길어져서 요리 준비가 느릴 때, 요리를 할 때 필요한 재료들을 미리 정리하고 잘 준비해 두면 요리가 더 빨리 진행됩니다. 이런 효율적인 재료 관리가 데이터베이스 최적화입니다.
내용: 대용량 트래픽을 처리하기 위해 데이터베이스 최적화는 필수적입니다.
- 인덱스 최적화: 자주 사용되는 쿼리에 대해 적절한 인덱스를 설정하여 조회 성능을 향상시킵니다.
- 쿼리 최적화: 복잡한 쿼리를 단순화하고, 불필요한 데이터 조회를 최소화합니다.
- 데이터 분할: 데이터베이스 샤딩을 통해 데이터를 여러 서버에 분산 저장합니다.
4-1. 데이터베이스 샤딩 (Database Sharding)
비유: 급식 줄이 너무 길어져서 한 번에 모든 학생들이 급식을 받기 어려운 상황에서, 학생들을 학년별로 나누어 각 학년마다 별도의 줄을 만들어 줄어든 시간 안에 모든 학생들이 급식을 받을 수 있도록 합니다.
기술적 설명: 데이터베이스 샤딩은 대규모 데이터베이스를 여러 부분으로 분할하여 저장하는 기술입니다. 각 샤드는 독립적으로 관리되고, 데이터베이스의 성능 및 확장성을 향상시킵니다.
- 수평 샤딩 (Horizontal Sharding): 데이터를 특정 기준에 따라 행 단위로 분할하여 여러 서버에 분산 저장합니다.
- 수직 샤딩 (Vertical Sharding): 데이터를 열 단위로 분할하여 서로 다른 테이블에 저장하거나, 특정 열을 기준으로 분할하여 저장합니다.
5. 메시지 큐 (Message Queue)
비유: 주문서를 제출하는 번호표 시스템
- 상황 설명: 급식 줄이 너무 길어서 한 번에 모든 학생들이 주문을 할 수 없는 상황에서, 학생들은 번호표를 받고 기다립니다. 직원이 번호표 순서대로 주문을 처리하여 학생들이 차례대로 급식을 받을 수 있습니다. 이것이 메시지 큐입니다.
내용: 메시지 큐는 비동기식 통신을 위해 사용되며, 대량의 요청을 큐에 저장하고 순차적으로 처리합니다. 이를 통해 트래픽 급증 시에도 시스템이 안정적으로 운영될 수 있습니다.
- RabbitMQ, Apache Kafka: 대표적인 메시지 큐 시스템으로, 높은 처리량과 확장성을 제공합니다.
6. 마이크로서비스 아키텍처 (Microservices Architecture)
마이크로서비스 아키텍처는 애플리케이션을 작은 독립적인 서비스로 분리하여 관리하는 방식입니다. 각 서비스는 독립적으로 배포, 확장 및 운영될 수 있어 트래픽 증가에 유연하게 대응할 수 있습니다.
7. 컨텐츠 전송 네트워크 (CDN)
비유: 학생들에게 간식을 배달하는 특별한 창구
- 상황 설명: 급식 줄이 너무 길어져서 모든 학생이 급식을 받기 어려울 때, 학생들에게 간식을 특별한 창구에서 직접 배달하여 빠르게 제공하는 것입니다. 이 특별한 창구가 전 세계에 분산된 CDN 서버를 의미합니다.
내용: CDN은 정적 파일을 전 세계에 분산된 서버에 저장하여, 사용자에게 가장 가까운 서버에서 콘텐츠를 제공함으로써 응답 속도를 향상시키고 서버 부하를 줄입니다.
8. 데이터베이스 리플리케이션 (Database Replication)
비유: 여러 요리사가 같은 요리를 동시에 만들기
- 상황 설명: 급식 줄이 너무 길어져서 한 명의 요리사가 요리를 준비하기에는 많이 부담스러울 때, 여러 요리사가 같은 요리를 동시에 준비하여 더 빠르게 제공하는 것입니다. 이것이 데이터베이스 리플리케이션입니다.
내용: 데이터베이스 리플리케이션은 데이터를 여러 데이터베이스 서버에 복제하여 읽기 요청을 분산시킵니다. 이를 통해 데이터베이스의 성능과 가용성을 높일 수 있습니다.
- 마스터-슬레이브 리플리케이션: 읽기 요청은 슬레이브에서 처리하고, 쓰기 요청은 마스터에서 처리합니다.
- 마스터-마스터 리플리케이션: 여러 마스터 서버가 서로 데이터를 복제하여 읽기 및 쓰기 요청을 분산 처리합니다.
9. 애플리케이션 성능 모니터링 (APM)
비유: 급식 줄의 혼잡도를 실시간으로 확인하는 시스템
- 상황 설명: 급식 줄이 길어지면, 관리자는 현재 줄의 상태를 실시간으로 모니터링하여 어떤 부분에서 병목이 발생하고 있는지 파악할 수 있습니다. 이와 같은 상황 모니터링이 애플리케이션 성능 모니터링입니다.
내용: APM 도구를 사용하여 애플리케이션의 성능을 모니터링하고, 병목 지점을 파악하여 최적화합니다. 대표적인 APM 도구로는 New Relic, Datadog, AppDynamics 등이 있습니다.
10. 지연 시간 최소화 (Latency Minimization)
지연 시간을 줄이기 위한 여러 기술들을 사용합니다.
- TCP 연결 유지: 지속적인 연결을 유지하여 연결 설정 시간을 줄입니다.
- 압축: 데이터 전송 시 압축을 사용하여 전송 시간을 단축합니다.
- 지연 로드: 필요할 때만 데이터를 로드하여 초기 로딩 시간을 줄입니다.
11. 스케일 인 (Scale In)
비유: 급식 줄이 줄어들 때 줄의 수를 줄이기
- 상황 설명: 점심 시간이 끝나면 급식 줄이 길어있는 경우, 추가로 열어둔 줄을 몇 개 없애서 자원을 절약하고 줄을 적절하게 유지하는 것이 스케일 인입니다.
- 기술적 설명: 스케일 인은 시스템에서 불필요한 자원을 줄이는 것을 의미합니다. 예를 들어, 서버의 인스턴스 수를 줄이거나, 가상 머신의 리소스를 줄이는 것입니다. 이는 트래픽이 감소하거나 자원 사용 효율을 높이기 위해 사용됩니다.
12. 스케일 아웃 (Scale Out)
비유: 급식 줄이 길어질 때 추가로 줄을 열기
- 상황 설명: 예상치 못한 학생들의 몰림으로 급식 줄이 길어지면, 급식실 직원이 추가적인 줄을 열어서 학생들이 더 빨리 급식을 받을 수 있도록 하는 것이 스케일 아웃입니다.
- 기술적 설명: 스케일 아웃은 시스템에서 필요에 따라 자원을 추가하는 것을 의미합니다. 예를 들어, 서버의 인스턴스 수를 늘리거나, 클라우드 환경에서 가상 머신을 추가하는 것입니다. 이는 트래픽이 증가하거나 부하를 분산하기 위해 사용됩니다.
데이터베이스(DB) 대응
- 데이터베이스 스케일링
- 수평 스케일링(Sharding): 데이터를 여러 데이터베이스 서버에 분산 저장하여 부하를 분산시킵니다.
- 수직 스케일링: 서버의 하드웨어 성능을 업그레이드하여 처리 능력을 향상시킵니다.
- 데이터 캐싱
- 메모리 캐시 사용: Redis, Memcached 등을 사용하여 자주 조회되는 데이터를 캐시해 DB 부하를 줄입니다.
- 인덱스 최적화
- 자주 사용되는 쿼리에 대해 인덱스를 최적화하여 조회 속도를 향상시킵니다.
- 데이터베이스 리플리케이션
- 마스터-슬레이브 리플리케이션: 읽기 요청을 슬레이브 서버에서 처리하여 마스터 서버의 부하를 줄입니다.
- 마스터-마스터 리플리케이션: 여러 마스터 서버를 사용하여 데이터 쓰기와 읽기 부하를 분산합니다.
- 쿼리 최적화
- 쿼리를 최적화하여 불필요한 데이터 액세스를 최소화하고, 필요한 데이터만 조회하도록 합니다.
- 쿼리를 최적화하여 불필요한 데이터 액세스를 최소화하고, 필요한 데이터만 조회하도록 합니다.
서버(Server) 대응
- 서버 스케일링
- 수평 스케일링: 로드 밸런서를 통해 여러 서버에 트래픽을 분산시켜 서버 부하를 줄입니다.
- 수직 스케일링: 서버의 CPU, 메모리, 디스크 등 하드웨어 자원을 업그레이드합니다.
- 로드 밸런싱
- 하드웨어 로드 밸런서: 전용 장비를 사용하여 트래픽을 분산합니다.
- 소프트웨어 로드 밸런서: Nginx, HAProxy 등을 사용하여 트래픽을 분산합니다.
- 세션 관리
- 무상태 세션: 세션 정보를 서버에 저장하지 않고 클라이언트에서 유지하도록 합니다(예: JWT).
- 세션 스토리지: Redis 같은 인메모리 데이터베이스에 세션을 저장하여 세션 관리를 중앙화합니다.
- 컨텐츠 전송 네트워크(CDN)
- 전세계에 분산된 서버를 통해 사용자에게 정적 파일(이미지, 동영상, CSS, JS 등)을 빠르게 전송합니다.
- 마이크로서비스 아키텍처
- 기능별로 서비스를 분리하여 독립적으로 배포하고 확장할 수 있도록 합니다.
- 기능별로 서비스를 분리하여 독립적으로 배포하고 확장할 수 있도록 합니다.
클라이언트(Client) 대응
- 프리로딩 및 프리페칭
- 게임 실행 초기에 필요한 리소스를 미리 로드하거나, 사용자가 필요로 할 리소스를 미리 페칭하여 로드 시간을 단축합니다.
- 에셋 최적화
- 이미지, 오디오, 비디오 등의 에셋을 압축하고 최적화하여 전송 시간을 줄입니다.
- 로컬 스토리지 활용
- 브라우저의 로컬 스토리지나 IndexedDB를 활용하여 자주 사용되는 데이터를 클라이언트에 저장하고, 불필요한 네트워크 요청을 줄입니다.
- 네트워크 효율화
- 데이터 압축: 전송되는 데이터를 압축하여 네트워크 사용량을 줄입니다.
- 지연시간 최소화: 필요한 데이터만 요청하고, 비동기 처리를 통해 사용자 경험을 향상시킵니다.
- 유저 익스피리언스(UX) 최적화
- 로딩 화면, 진행 상태 표시기 등을 사용하여 사용자가 기다리는 동안에도 긍정적인 경험을 유지하도록 합니다.
- 로딩 화면, 진행 상태 표시기 등을 사용하여 사용자가 기다리는 동안에도 긍정적인 경험을 유지하도록 합니다.
통합 전략
- 모니터링 및 로깅
- 서버, 데이터베이스, 클라이언트의 상태를 실시간으로 모니터링하고, 로그를 수집하여 문제를 빠르게 발견하고 대응합니다.
- 자동화 도구 사용
- CI/CD 파이프라인을 구축하여 코드 배포를 자동화하고, 테스트를 자동화하여 품질을 유지합니다.
- 트래픽 예측 및 테스트
- 트래픽을 예측하고 부하 테스트를 통해 시스템의 한계를 파악하며, 필요에 따라 시스템을 조정합니다.
대기열 서버를 따로 두고 이를 구현한다면?
대기열 시스템 구현
- 대기열 시스템의 필요성
- 한꺼번에 많은 사용자가 접속할 경우 서버가 감당할 수 없는 부하가 발생할 수 있습니다.
- 대기열 시스템을 통해 순차적으로 사용자 요청을 처리함으로써 서버 부하를 관리할 수 있습니다.
- 대기열 시스템 구성 요소
- 큐(queue): 접속 요청을 저장하는 데이터 구조입니다. Redis나 RabbitMQ 같은 메시지 큐를 사용할 수 있습니다.
- 대기열 관리 서버: 큐를 관리하고, 사용자를 순차적으로 서버에 접속시키는 역할을 합니다.
- 세션 관리: 대기열에 있는 사용자에게 대기열 위치를 알려주고, 서버에 접속할 차례가 되면 알림을 보내는 시스템입니다.
- 대기열 예시 구현
- 사용자가 접속을 시도하면 요청을 대기열에 추가합니다.
- 대기열 관리 서버는 일정 시간 간격으로 큐에서 요청을 꺼내어 처리 가능한 서버에 전달합니다.
- 대기 중인 사용자에게 대기열 위치와 예상 대기 시간을 알려줍니다.
요청 분산 처리
- 로드 밸런싱
- 여러 서버에 트래픽을 분산시켜 서버 부하를 균등하게 분배합니다.
- 하드웨어 로드 밸런서: F5, Citrix ADC 등을 사용하여 트래픽을 분산합니다.
- 소프트웨어 로드 밸런서: Nginx, HAProxy 등을 사용하여 트래픽을 분산합니다.
- 컨텐츠 전송 네트워크(CDN)
- 전 세계에 분산된 서버를 통해 정적 파일(이미지, 비디오, CSS, JS 등)을 사용자에게 빠르게 전송합니다.
- CDN을 사용하여 정적 자원에 대한 요청을 분산시킵니다.
- 세션 분산
- 세션 스티키니스: 동일한 사용자의 요청을 항상 동일한 서버로 보내도록 설정하여 세션 데이터를 유지합니다.
- 세션 클러스터링: Redis 같은 중앙화된 세션 저장소를 사용하여 세션을 공유합니다.
- 데이터베이스 리플리케이션 및 샤딩
- 읽기 요청을 여러 슬레이브 데이터베이스로 분산시키고, 쓰기 요청은 마스터 데이터베이스에서 처리합니다.
- 샤딩을 통해 데이터를 여러 데이터베이스 서버에 분산 저장하여 부하를 줄입니다.
예시
게임 오픈 당시 접속자 대기열 예시
- 사용자 접속 시도
- 사용자가 게임에 접속을 시도하면 대기열 관리 서버로 요청이 전달됩니다.
- 대기열 추가
- 대기열 관리 서버는 요청을 Redis 큐에 추가합니다.
- 사용자에게 대기열 위치와 예상 대기 시간을 반환합니다.
- 큐 처리
- 대기열 관리 서버는 일정 시간 간격으로 큐에서 요청을 꺼냅니다.
- 꺼낸 요청을 처리 가능한 서버에 전달합니다.
- 접속 승인
- 요청을 받은 서버는 사용자 접속을 승인하고, 게임 서버에 접속할 수 있도록 합니다.
- 사용자에게 접속 가능 알림을 전송합니다.
- 세션 유지
- 세션 관리를 통해 사용자의 게임 진행 상태를 유지합니다.
- Redis 같은 중앙화된 세션 저장소를 사용하여 여러 서버 간 세션을 공유합니다.
로드 밸런싱과 CDN 예시
- 정적 파일 요청 분산
- 사용자가 게임 클라이언트를 통해 정적 파일을 요청하면, CDN이 가장 가까운 서버에서 파일을 제공하여 응답 시간을 줄입니다.
- 트래픽 분산
- 사용자 접속 요청이 로드 밸런서에 도달하면, 로드 밸런서는 요청을 여러 게임 서버에 분산시켜 처리합니다.
- 세션 스티키니스
- 동일한 사용자가 보내는 요청은 항상 동일한 서버로 전달되어 세션 일관성을 유지합니다.
- 데이터베이스 부하 분산
- 읽기 요청은 여러 슬레이브 데이터베이스로 분산되고, 쓰기 요청은 마스터 데이터베이스에서 처리됩니다.
이와 같은 전략들을 통해 게임 오픈 시 대규모 접속자로 인한 서버 과부하를 방지하고 안정적인 서비스를 제공할 수 있습니다.
클라우드를 사용한다면 좀 더 쉬울까?
클라우드는 아래와 같은 것들을 제공함, 사용한 만큼 비용을 지불함
- 자동 확장 (Auto Scaling):
- 상황 비유: 급식 줄이 예상보다 많이 길어질 때, 급식실이 자동으로 추가적인 줄을 열어 학생들이 더 빨리 급식을 받을 수 있도록 하는 것입니다.
- 기술적 설명: 클라우드 플랫폼에서는 자동 확장 기능을 통해 서버 인스턴스를 자동으로 추가하거나 축소하여 트래픽 변화에 유연하게 대응할 수 있습니다. 예를 들어, AWS의 Auto Scaling 기능을 활용하면 CPU 사용률이나 네트워크 트래픽 등을 모니터링하여 필요할 때 인스턴스를 자동으로 증가시키거나 감소시킬 수 있습니다.
- 로드 밸런싱 (Load Balancing):
- 상황 비유: 급식 줄이 너무 길어져 한 번에 모든 학생들이 급식을 받기 어려운 상황에서, 여러 개의 급식 직원이 학생들에게 공평하게 급식을 나누어 주는 것과 유사합니다.
- 기술적 설명: 클라우드 환경에서는 로드 밸런서를 통해 서버에 가해지는 부하를 여러 대의 서버로 분산시킴으로써 서버의 과부하를 방지하고, 가용성을 높이며 안정성을 제공합니다. AWS에서는 ELB(Elastic Load Balancing) 서비스를 사용하여 여러 대의 EC2 인스턴스에 트래픽을 분산시킬 수 있습니다.
- 컨테이너화 기술:
- 상황 비유: 급식 줄이 길어질 때 추가적인 급식 창구를 즉시 준비할 수 있도록, 준비된 여러 개의 표준화된 급식 상자를 사용하는 것과 유사합니다.
- 기술적 설명: Docker와 Kubernetes 같은 컨테이너 오케스트레이션 도구를 사용하여 애플리케이션을 컨테이너화하고, 클라우드 환경에서 유연하고 확장 가능하게 배포하고 관리할 수 있습니다. 컨테이너는 가벼우며, 빠르게 배포할 수 있어 클라우드 기반 환경에서 빠른 스케일링과 관리가 가능합니다.
- 서버리스 컴퓨팅 (Serverless Computing):
- 상황 비유: 급식 줄이 짧아지면 급식 직원들이 자동으로 줄을 줄이고, 필요할 때만 다시 줄을 늘립니다.
- 기술적 설명: 서버리스 컴퓨팅은 애플리케이션을 실행하기 위한 서버 인스턴스를 명시적으로 관리하지 않고, 필요한 순간에 자동으로 관리 및 확장됩니다. AWS의 Lambda, Azure Functions 등의 서버리스 플랫폼을 사용하여 코드 실행에 필요한 인프라 관리를 최소화하고 트래픽 변동에 신속하게 대응할 수 있습니다.
- 클라우드 데이터베이스 서비스:
- 상황 비유: 급식 재료를 중앙에서 효율적으로 관리하고 각 급식 직원들에게 필요한 만큼 배분하는 것과 유사합니다.
- 기술적 설명: 클라우드 데이터베이스 서비스를 사용하면 관리형 데이터베이스 솔루션을 통해 데이터베이스의 확장성, 가용성, 보안을 쉽게 관리할 수 있습니다. 예를 들어, AWS의 RDS(Relational Database Service)는 MySQL, PostgreSQL, Oracle 등의 관계형 데이터베이스를 관리형으로 제공하며, DynamoDB는 NoSQL 데이터베이스를 제공합니다.
콘텐츠 전송 네트워크(Content Delivery Network, CDN)
사용자에게 콘텐츠를 보다 빠르고 안정적으로 제공하기 위해 전 세계에 분산된 서버 네트워크를 이용하는 시스템입니다. CDN의 주요 기능과 동작 방식은 다음과 같습니다.
CDN의 주요 기능
- 정적 콘텐츠 캐싱
- CDN은 이미지, CSS 파일, 자바스크립트 파일, 비디오 등 변경되지 않는 정적 콘텐츠를 캐싱하여 사용자가 요청할 때 가까운 서버에서 제공함으로써 전송 속도를 향상시킵니다.
- 전송 속도 향상
- CDN은 사용자의 지리적 위치에 가장 가까운 서버를 통해 콘텐츠를 제공하여 전송 거리와 지연 시간을 최소화합니다.
- 부하 분산
- CDN은 여러 서버에 트래픽을 분산시켜 특정 서버에 과도한 부하가 걸리지 않도록 합니다. 이를 통해 서비스 안정성을 높이고 서버 다운타임을 줄입니다.
- 대역폭 절감
- CDN은 콘텐츠를 캐싱하고 분산 서버를 통해 제공함으로써 원본 서버의 대역폭 사용량을 줄입니다.
- 보안 강화
- CDN은 DDoS 공격 방지, SSL/TLS 암호화 지원, 웹 애플리케이션 방화벽(WAF) 등의 보안 기능을 제공하여 콘텐츠 전달의 안전성을 높입니다.
CDN의 동작 방식
- 콘텐츠 요청
- 사용자가 웹사이트에 접속하여 특정 콘텐츠를 요청하면, 요청은 DNS(Domain Name System)를 통해 CDN으로 전달됩니다.
- 가장 가까운 서버 선택
- CDN은 사용자의 지리적 위치를 기반으로 가장 가까운 엣지 서버(Edge Server)를 선택합니다. 엣지 서버는 전 세계에 분산된 CDN 서버 중 하나입니다.
- 캐시 확인 및 제공
- 엣지 서버가 요청된 콘텐츠를 캐시에 보유하고 있으면, 캐시에서 해당 콘텐츠를 즉시 제공하여 전송 속도를 높입니다.
- 엣지 서버에 요청된 콘텐츠가 없으면, 엣지 서버는 원본 서버(오리진 서버)에서 콘텐츠를 가져와 사용자에게 전달하고, 동시에 해당 콘텐츠를 캐시에 저장하여 다음 요청 시 빠르게 제공할 수 있도록 합니다.
예시
이미지 파일 요청의 CDN 동작 방식
- 사용자 요청
- 사용자가 웹사이트에서 이미지 파일 example.com/images/picture.jpg를 요청합니다.
- DNS 조회
- DNS는 example.com 도메인을 CDN의 엣지 서버 IP 주소로 변환합니다.
- 엣지 서버 확인
- 사용자 요청이 가장 가까운 엣지 서버로 전달됩니다. 엣지 서버는 picture.jpg 파일이 캐시에 있는지 확인합니다.
- 캐시 응답
- 엣지 서버에 picture.jpg 파일이 캐시에 있으면, 이를 사용자에게 즉시 전달합니다.
- 원본 서버 요청
- 엣지 서버에 picture.jpg 파일이 캐시에 없으면, 엣지 서버는 원본 서버에서 파일을 가져와 사용자에게 전달하고, 동시에 파일을 캐시에 저장합니다.
이와 같은 방식으로 CDN은 웹사이트의 로딩 속도를 크게 향상시키고, 서버 부하를 줄이며, 사용자 경험을 개선합니다. 대표적인 CDN 제공 업체로는 Cloudflare, Akamai, Amazon CloudFront, Microsoft Azure CDN, Google Cloud CDN 등이 있습니다.