일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- 창의충전소
- web view
- React Natvive
- Project Bee
- 이영직
- 완전탐색
- 버튼 활성화
- 티스토리챌린지
- multipart upload
- 오블완
- react
- BFS
- 백준 1992
- 해외 대외활동
- 자료구조
- React Native
- 상속 관계 매핑
- 원복
- 폴더구조
- 구현
- 노마드코더
- 휴대폰 기기
- bfs dfs
- service 테스트
- 경우의 수
- ReactNative
- Navigation
- 비트마스킹
- FlatList
- Today
- Total
유미의 기록들
[최종 프로젝트] CDN 적용하여 강의 컨텐츠 조회 성능 최적화 본문
💡 배경
강의 서비스 도메인을 담당하면서 대용량 영상 파일에 접근할 때, 사용자에게 빠른 접근성을 보장할 필요가 있었다. 특히 여러 지역에서 강의를 시청하는 사용자가 많을 경우, 파일 전송 속도와 안정성에 문제가 발생할 가능성이 있다. 따라서 최대한 물리적으로 가까운 서버에서 파일을 받을 수 있도록 CDN을 적용해보려고 한다.
📝 CDN (Content Delivery Network)
지리적으로 분산된 서버들을 연결한 네트워크
웹 컨텐츠의 복사본을 사용자에 가까운 곳에 두거나 동적 컨텐츠의 전달을 활성화하여 웹 성능 및 속도를 향상할 수 있게 한다
어떤 사용자가 웹사이트에 방문할 때, 사용자가 원본 서버로부터 멀면 멀수록 웹사이트는 천천히 로드될 것이다. 따라서 사용자에게 가장 가까운 Edge 서버라고 불리는 CDN 서버가 웹 컨텐츠 (HTML 파일, 이미지 등) 일부의 복사본을 저장해서 전달하게 되면 웹사이트 로딩 시간을 개선할 수 있다.
쉽게 예를 들면, 사용자는 본사에 직접 가지 않아도 사용자와 가장 가까운 체인점에서 빠르게 원하는 것을 얻을 수 있다는 말이다.
CDN의 장점
- 대역폭 사용량 감축: CDN은 사용자와 더 가까운 곳에서 복사본을 저장함으로써 원래 서버로부터의 데이터 전송량을 줄인다
- 트래픽 급증에 더 효과적으로 대응: 이벤트로 인해 컨텐츠의 수요가 급증할 때, CDN에서는 로드 밸런싱을 사용하여 수요를 여러 서버에 분산시킴으로써 하나의 서버에 과부하가 일어나는 것을 방지한다
- 보안 강화 : CDN에서는 분석 및 자동화 툴을 활용하여 DDoS 공격, MITM 공격, 방화벽 공격을 방지할 수 있다
CDN의 동작원리
1.사용자 A가 이미지 URL을 통해 image.png에 접근한다.
2. CDN 서버의 캐시에 해당 이미지가 없으면, 원본 서버에 요청하여 파일을 가져온다. (원본 서버는 웹서버 일 수도 있고, S3와 같은 저장소일 수도 있음)
3. 원본 서버가 CDN서버에 파일을 반환한다. (응답 HTTP 헤더에는 TTL 값이 들어있음)
4. CDN 서버는 파일을 캐시하고 사용자 A에게 반환한다. (이미지는 TTL시간이 끝날 때까지 캐시됨)
5. 사용자 B가 같은 이미지에 대한 요청을 CDN서버에 전송한다.
6. 만료되지 않은 이미지에 대한 요청은 캐시를 통해 처리된다.
*TTL : 파일이 얼마나 오래 캐시될 수 있는 지
CDN 사용 시 고려해야 할 사항
- 비용 : CDN으로 들어가고 나가는 데이터 전송 양에 따라 요금을 낸다. 따라서 자주 사용되지 않는 콘텐츠는 캐싱을 하지 않는 것이 좋다
- 적절한 만료시간 설정 : 너무 길면 콘텐츠의 신선도가 떨어지고, 너무 짧으면 원본 서버의 데이터 전송량이 늘어난다
- CDN 장애에 대한 대처 : 일시적으로 CDN이 응답을 하지 않을 경우, 해당 문제를 감지하여 원본 서버로부터 직접 콘텐츠를 가져오도록 클라이언트를 구성하는 것이 필요할 수도 있다
- 캐싱 무효화 : 콘텐츠가 업데이트되면, CDN의 캐시에 저장된 오래된 데이터가 전달될 수 있다. 이를 방지하기 위해 캐싱을 무효화하여 최신 데이터를 가져오도록 해야 한다 (CDN 서비스 사업자가 제공하는 API에 강제로 무효화하는 기능 제공)
AWS에서 제공하는 CDN서비스인 CloudFront를 S3와 연동하려고 한다.
🚀 AWS CloudFront 연동
1. CloudFront 배포 생성
Origin domain에 S3 도메인을 선택한다 그리고 제어 설정을 선택한다
정책복사를 클릭하면 필요한 IAM 권한이 복사된다
`버킷` > `권한` > `버킷정책` 에 권한을 붙여 넣기 한다
그럼 기존 S3 객체 URL로 직접 접근할 경우, 접근이 불가능해진다.
CloudFront 배포 도메인을 통해 접근하면 정상적으로 파일을 불러오는 것을 확인할 수 있다.
다음은 유료로 제공되는 강의 영상이 모든 사용자에게 무제한으로 노출되는 것을 방지하기 위해 제한된 시간 동안만 유효한 URL을 생성하는 SignedURL을 적용해보려고 한다.
'대외활동 기록 > 내일배움캠프' 카테고리의 다른 글
Multipart Upload 방식 vs Pre-signedURL 방식 (0) | 2024.11.14 |
---|---|
[최종 프로젝트] Signed URL 적용 (0) | 2024.11.13 |
[최종 프로젝트] SpringBoot 프로젝트 EC2 배포 (2) | 2024.11.11 |
[최종 프로젝트] Reflection을 이용한 테스트 코드 (1) | 2024.11.10 |
[최종 프로젝트] AWS Multipart Upload로 대용량 파일 업로드 (0) | 2024.11.09 |