전체 글
CGI와 FastCGI 외부 애플리케이션과 웹 서버(nginx, apache)를 연결할 때 사용하는 interface는 보통 CGI. CGI는 Coomand Gateway Interface의 약자로 웹 서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다. 그러나 CGI는 클라이언트의 요청이 발생할 때마다 프로세스를 추가로 생성/삭제 하게 된다. → 성능저하 FastCGI는 몇 번의 요청이 들어와도 하나의 프로세스만을 가지고 처리하게 된다. → CGI에 비하여 오버헤드가 월등하게 감소 하지만 Python 에서는 이러한 WAS가 별도로 존재하지 않으며 그 대신 Python만의 Gateway Interface가 존재한다. WSGI란? Web Server Gateway Interface의 약자 CGI와 동일..
Web server란? Client 로부터 HTTP 요청을 받아 정적 컨텐츠를 제공하는 프로그램 정적 컨텐츠란? 어느 사용자 요청이든 항상 동일한 컨텐츠(ex html, image 등) 웹 서버의 기능 클라이언트로부터 HTTP 요청을 받을 수 있다. 정적 컨텐츠 요청 시 → 정적 컨텐츠 제공 동적 컨텐츠 요청 시 → WAS(Web Application Server)로 전달하여 WAS가 처리한 결과를 클라이언트에 전달 대표적인 웹서버 Nginx Nginx는 웹 서버이며 리버스 프록시, 로드밸런서, HTTP cache로도 쓰일 수 있는 대표적인 웹 서버이다. 이벤트 기반 구조(event driven)를 채택하여 다수의 요청을 빠르게 처리하며 CPU 자원 소모가 적다. 클라이언트의 request에 맞추어 co..
Django Exception Handling Django에서는 exception을 어떻게 handling 하고 있을까? 공식 문서에서 살펴보면 detail에 에러 메시지를 return 하는 방식으로 error response를 주고 있다. 하지만 error response를 custom 하고 싶다면? 잘 알려진 jsend의 error response를 보자. https://github.com/omniti-labs/jsend GitHub - omniti-labs/jsend: JSend is a specification for a simple, no-frills, JSON based format for application-level communicat JSend is a specification for ..
프로젝트를 배포 후 테스트 하던 중 정말 이상한 에러가 보이게 된다. 다른 모든 요청에는 잘 응답하던 api가 어떤 특정한 요청에만 CORS 에러를 뱉는 것. POST [https://api.~~~.com::ERR_FAILED](https://api.%7E%7E%7Enet::ERR_FAILED/) 413 Access to XMLHttpRequest at 'https://api.~~' from origin 'https://www.~~' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. django CORS 관련 모든 설정들을 마친 상황이었기에, 심지어 어떤 특..
Django에서 User Password 변경할 때 user.set_password(password) user.save() django에서 user password를 set할 때 django.contrib.auth에서 제공되는 set_password Method 를 사용하여 비밀번호를 설정한다. 그리고 이렇게 설정된 user의 비밀번호는 장고의 default 암호화 알고리즘에 의해 암호화되어 저장된 것을 확인할 수 있다. 나는 장고의 비밀번호 암호화 알고리즘은 무엇인지, 그리고 다른 암호화 알고리즘에는 또 무엇이 있는지 궁금해졌고 이를 찾아보았다. 비밀번호 암호화 알고리즘 보통 비밀번호를 저장할 때 단순 텍스트 자체로 이를 저장하지 않는다.(이는 범죄나 다름없다고 함!) ‘단방향 해시 함수의 다이제스트(..
Framework와 Library의 차이점 Framework란? 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대 ex) Spring, Django, Vue.js Library란? 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구 ex) pip으로 설치한 module, npm으로 설치한 module, c++ STL, React.js, jquery Framework와 Library의 차이점 제어 흐름의 권한이 어디에있는가에 의해 결정된다. 라이브러리를 사용할 때 사용자는 코드의 흐름을 직접 제어함. 반면 프레임워크는 애플리케이션의 코드가 프레임워크에 의해..
캐싱이란? 캐시의 데이터는 일반적으로 RAM(Random Access Memory)와 같이 빠르게 액세스 할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수 있다. 캐시의 주요 목적은 더 느린 기본 스토리지 계층에 액세스 해야하는 필요를 줄임으로써 데이터 검색 성능을 높이는 것 RAM 및 인 메모리 엔진 : RAM 및 인 메모리 엔진에서 지원하는 높은 요청 비율 또는 IOPS(초당 입력/출력 작업) 덕분에 캐싱을 사용하면 대규모로 데이터 검색 성능이 향상되고 비용이 절감됩니다. 적용: 캐시는 운영 체제, 네트워킹 계층(콘텐츠 전송 네트워크(CDN), DNS 등), 웹 애플리케이션 및 데이터베이스를 비롯한 다양한 기술 계층에 걸쳐 적용되고 활용될 수 있습니다. 캐싱의 이점 애플리케이션..
Proxy Server 서버와 클라이언트 간의 중계 서버로서 통신을 대신 수행하는 역할 프록시 서버는 클라이언트의 대리 역할을 하기도 하고 서버의 대리 역할을 하기도 한다. Forward Proxy 클라이언트 대신 서버에 요청을 보내주는 역할 Reverse Proxy 서버 대신 클라이언트에 응답을 보내주는 역할 네트워크 곳곳에 프록시 배치 가능! 왜 Proxy를 사용할까? 필터 학생들에게 유해 사이트들을 차단하는 필터링 프록시를 사용 접근제어 회원가입된 user만 페이지 접근 가능 캐싱 서버까지 거치지 않고 바로 프록시에서 캐싱된 정보를 이용해 응답할 수 있다. 익명화 프록시를 통해 익명화되어 공통 식별 정보 헤더를 포함하지 않는다. 로드밸런싱 -> 리버스 프록시가 수행 출처: https://www.yo..
끝난 플젝도 다시보자 프로젝트에서의 상황 backend를 ec2로 배포 후 도메인까지 적용 시킨 상황이었다. 이미 AWS amplify로 배포된 frontend에 바뀐 backend url을 적용시키니 api 통신 과정에서 Mixed Content error가 발생했다. Mixed Content: The page at '' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ''. This request has been blocked; the content must be served over HTTPS. 구글링을 하니 aws에 다음과 같은 링크를 확인할 수 있었다. aws question link Amplify Console은..