파인만 4단계 교육 방법
1. 내가 배우고 싶은 것을 정해서 영상(유튜브), 글을 알아서 찾아본다.
2. 내가 배운 것을 어린아이들도 이해하기 쉬울 정도로 간단한 내용으로 정리를 해본다.
3. 그중에서 내가 잘모르는 부분이나 지식의 빈틈을 찾아본다.
4. 해당 부분에 대해서 추가로 조사를 한다.
이렇게 1,2,3,4 단계를 계속 반복해 가면서 새로운 지식을 계속 찾아서 배워가는 방법을 이용해서 학습을 하게 되는 것이 좋다고 합니다.
오늘 코딩을 하면서 궁금했던 것이 있는데 CORS에 대해서 무슨 의미인지는 알겠는데 정확한 뜻을 알아볼려고 합니다.
cdn
CORS란?
cors는 웹 브라우저에서 이루어지는 보안기능으로 현재 사용중인 도메인 과 다른 출처의 자원에 접근을 할 때에 (나 같은 경우에 s3에 접근을 할려고 할 때)에 발생하는 제약 관리 방법입니다.
서버가 특정 출처의 요청을 허용할 수 있도록 조정하는 것이며,
SOP( Same-Origin Policy) 라는 기능을 하는 친구가 접근을 막고 있는데 여기서 이 리소스 요청을 열어줄 수 있도록 하는 것이 CORS입니다.
그렇기에 리소스요청을 허락하기 위해서는 서버에서 특정 출처에 대해서 허용을 해주어야 하며, 여러가지
웹 프레임 워크
- Express.js (Node.js): cors 미들웨어를 사용하여 쉽게 CORS를 설정할 수 있습니다.
- Django: django-cors-headers 패키지를 사용하여 CORS를 설정할 수 있습니다.
- FastAPI: fastapi.middleware.cors.CORSMiddleware를 사용하여 CORS를 설정할 수 있습니다.
에서는 이것들을 설정하는 값이 따로 정해져 있습니다. 일반적인 사용으로는 " * "를 사용하여 전체 접근을 허용할 수 있으며, GET, POST, PUT, DELETE.와 같이 특정 메소드만 허용하거나 사용할 수 있는 사용자만 따로 정의 할 수 있습니다.
예시)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
CORS요청은 기본적으로 브라우저가 서버에 options이라는 메서드로 Preflight 요청을 보내고 이 요청은 서버가 실제 요청을 처리 할 수 있는 지 확인하고 그 다음 기존의 메서드를 받을 수 있도록 합니다.
CDN이란?
CDN(Contents Delivery Network)은 콘텐츠 전송 네트워크로, 웹 콘텐츠를 사용자에게 보다 빠르고 효율적으로 전달하기 위해 설계된 분산 서버 네트워크입니다.
cdn은 웹페이지, 이미지, 비디오를 저장하고 빠르게 제공을 하기 위해서 제공을 하고 있는 것이며, 이런 부분을 운영하는 회사의 기능을 이용하여 사용 할 수 있습니다.
cdn을 이용하므로 오는 이점은 호스트 하나에 운영하는 것이 아리나 각 지역 서버에 분산을 시켜 해당에 맞는 클라이언트 요청을 바로바로 처리할 수 있어 호스트pc의 부담을 줄여 줄 수 있고 이러한 부분에서 캐싱이라는 기술을 통해 알맞는 서버를 맞추어 설정해 줄 수 있습니다.
각 서버는 각각의 기능을 할 수 있기 때문에 하나의 서버가 문제가 생겨도 다른 서버에 요청을 보내면 되기 때문에 부하를 분산하고 DDos와 같은 공격에도 보호 할수 있는 대비 책이 생깁니다.
그리고 정적파일 같은 경우는 미리 캐시하여 원본 서버에까지 갈 필요 없이 미리 받아서 사용할 수 있습니다.
CDN의 예시
- Cloudflare: 보안 기능과 함께 빠른 콘텐츠 전송을 제공하는 CDN 서비스입니다.
- Akamai: 대규모 네트워크를 가진 전통적인 CDN 서비스 제공업체입니다.
- Amazon CloudFront: AWS에서 제공하는 CDN 서비스로, 유연한 배포 및 보안 기능을 갖추고 있습니다.
웹 서버 소프트웨어랑 비슷한데???
Nginx의 CDN 유사 기능
- 정적 콘텐츠 캐싱: Nginx는 정적 파일(CSS, JavaScript, 이미지 등)을 캐시하여 빠르게 제공할 수 있습니다. 이 기능은 CDN의 캐싱과 유사합니다.
- 리버스 프록시: Nginx를 리버스 프록시 서버로 설정하면, 요청을 다른 서버로 전달하고 응답을 클라이언트에게 전달할 수 있습니다. 이를 통해 로드 밸런싱을 구현할 수 있습니다.
- 압축 및 최적화: Nginx는 콘텐츠 압축(Gzip 등)과 최적화를 통해 응답 속도를 개선할 수 있습니다.
- SSL/TLS 처리: Nginx는 HTTPS를 통해 안전한 데이터 전송을 처리할 수 있어 CDN이 제공하는 보안 기능과 유사한 역할을 할 수 있습니다.
그러나 Nginx는 웹 서버로서 많은 기능을 제공하며, CDN은 전 세계에 분산된 서버를 활용하여 콘텐츠를 최적화하고 제공하는 데 중점을 둡니다.
웹서버란?
웹 서버(Web Server)는 클라이언트(주로 웹 브라우저)로부터 HTTP 요청을 받아들이고, 요청된 웹 페이지, 이미지, 비디오와 같은 콘텐츠를 클라이언트에 전송하는 소프트웨어 또는 하드웨어를 말합니다. 웹 서버는 웹 애플리케이션을 호스팅하고, 사용자가 웹 콘텐츠에 접근할 수 있도록 하는 중추적인 역할을 합니다.
웹서버는 클라이언트에서 오는 요청을 최전방에서 수신하는 역할을 하는데. was로 넘겨 주는 부분에서 자신이 해결할 수 있는 정적파일( HTML 파일, 이미지, CSS, JavaScript )이나 보안, 로그, 로드밸런싱과 같은 기능을 앞단에서 처리함으로 서버의 부담을 줄여줄 수 있습니다.
보안
SSL/TLS: HTTPS 프로토콜을 사용하여 클라이언트와 서버 간의 데이터 전송을 암호화합니다.
방화벽: 웹 서버는 방화벽 규칙을 설정하여 특정 IP 주소나 포트에서의 접근을 제한할 수 있습니다.
인증 및 권한 부여: 사용자 인증(로그인) 기능을 통해 특정 리소스에 대한 접근을 제한할 수 있습니다.
DDoS 방어: 분산 서비스 거부 공격(DDoS)으로부터 보호하기 위한 다양한 방법(예: 트래픽 제한, 캡차 등)을 사용할 수 있습니다.
소프트웨어:
- 다양한 웹 서버 소프트웨어가 있으며, 그 중 가장 유명한 것들은 다음과 같습니다:
- Apache: 오픈 소스 웹 서버로, 유연성과 모듈성으로 인기가 높습니다.
- Nginx: 고성능 웹 서버로, 리버스 프록시와 로드 밸런서로도 사용됩니다.
- Microsoft IIS: Windows 기반 서버에서 주로 사용되는 웹 서버입니다.
- LiteSpeed: 높은 성능과 효율성을 제공하는 상용 웹 서버입니다.
캐싱:
- 웹 서버는 정적 콘텐츠를 캐시하여 동일한 요청에 대해 더 빠른 응답을 제공합니다. 클라이언트 또는 서버 측 캐싱을 사용할 수 있습니다.
로드 밸런싱:
- 여러 서버에 트래픽을 분산시켜 부하를 줄이고 서비스의 가용성을 높입니다. Nginx와 같은 웹 서버는 로드 밸런서로도 기능할 수 있습니다.
압축:
- HTTP 응답을 Gzip와 같은 압축 방식으로 압축하여 데이터 전송량을 줄이고 로딩 속도를 향상시킵니다.
여기서 많이 사용하는 건 아파치와 엔진x인데 아파치의 경우는 자바의 환경에서 많이 사용을 하며 대규모 안정적 작업을 하는 경우에 많이 사용이 되며 가볍고 빠른 작업을 위한 엔진x도 최근 많이 사용이됩니다. django를 만들었을 때에는 nginx를 사용해서 만들었습니다.
'코딩 교육 TIL' 카테고리의 다른 글
2024-10-11 TIL (5) | 2024.10.11 |
---|---|
2024-10-10 QA TIL (6) | 2024.10.10 |
2024.09.20 TIL (1) | 2024.09.20 |
2024-06-14 AI 코딩 TIL (0) | 2024.06.14 |
2024-06-13 AI 코딩 TIL (0) | 2024.06.13 |