<오늘 한 일/>
- Django 50문 50답
- Django 프로젝트를 배포할 때, 시크릿키를 노출하지 않는 방법에 대해서 설명하시오
- 설정 파일 분리를 통해 시크릿키를 노출하지 않을 수 있습니다.
- .env 파일이나 secret.json, my_settings.py 파일에 시크릿키를 저장하고, 프로젝트 폴더에 있는 settings.py에서 해당 파일의 내용을 읽어오면 됩니다.
- 이때 시크릿키가 들어있는 또다른 설정 파일은 Git 등의 소스 코드 버전 관리 시스템에 노출되지 않도록 주의해야 합니다.
- .gitignore 파일을 생성 후 해당 설정파일명을 저장하면 GitHub로 commit 되는 걸 막을 수 있습니다.
- Django 프로젝트 진행 시 발생하는 CORS 오류를 처리하는 방법에 대해서 설명하시오
- Django 프로젝트에서 CORS(Cross-Origin Resource Sharing) 오류가 발생하면, 이는 웹 애플리케이션에서 다른 도메인에서 자원을 요청하려 할 때 발생합니다. 이를 해결하기 위해, Django에서 django-cors-headers 라이브러리를 사용하여 CORS 정책을 허용하도록 설정할 수 있습니다.
- 먼저 django-cors-headers 라이브러리를 설치합니다
- settings.py의 INSTALLED_APPS에 'corsheaders'를 추가합니다
- MIDDLEWARE에서 'django.middleware.common.CommonMiddleware' 위에 'corsheaders.middleware.CorsMiddleware'를 추가합니다.
- 모든 도메인에서 오는 요청을 허용하고자 하는 경우 CORS_ALLOW_ALL_ORIGINS = True를 추가합니다
- 특정 도메인에서 오는 요청만 허용하고자 하는 경우 CORS_ALLOWED_ORIGINS = [] 입력 후, 리스트 안에 원하는 도메인을 입력합니다. 이 경우 CORS_ALLOW_ALL_ORIGINS는 False로 설정하거나 해당 코드를 지워야 합니다.
- Django 프로젝트에서 CORS(Cross-Origin Resource Sharing) 오류가 발생하면, 이는 웹 애플리케이션에서 다른 도메인에서 자원을 요청하려 할 때 발생합니다. 이를 해결하기 위해, Django에서 django-cors-headers 라이브러리를 사용하여 CORS 정책을 허용하도록 설정할 수 있습니다.
- Django 프로젝트를 배포할 때 Allow Host에 * 가 들어가면 안되는 이유는?
- Django 프로젝트를 배포할 때 ALLOWED_HOSTS에 '*'를 사용하게 되면, 이것은 우리의 애플리케이션이 어떤 도메인(웹 사이트 주소)에서든지 오는 요청을 받아들일 준비가 되어 있다는 것을 의미합니다. 이렇게 설정하는 것은 안전하지 않아서 권장되지 않는데요, 그 이유는 악의적인 사용자가 어떤 도메인에서든지 우리의 애플리케이션에 접근할 수 있기 때문입니다. 이로 인해 우리의 애플리케이션이 불필요한 공격에 쉽게 노출될 수 있습니다. 그래서 배포할 때는 ALLOWED_HOSTS에 정확한 도메인 이름(즉, 올바른 웹 사이트 주소)을 명시해서, 허용되는 도메인에서만 요청을 처리하도록 설정해야 합니다. 이렇게 하면 프로젝트의 보안이 강화되고, 불필요한 공격으로부터 보호할 수 있습니다.
- Django 프로젝트를 배포할 때 사용되는 Gunicorn이 무엇이며, WSGI를 왜 사용해야 하는지 설명하시오
- Gunicorn은 Green Unicorn의 줄임말로, 파이썬 WSGI(Web Server Gateway Interface) 웹 서버입니다. Django 프로젝트를 배포하기 위해서 사용됩니다. Gunicorn은 파이썬 WSGI 애플리케이션을 서비스하기 위한 간단한, 빠르고 신뢰할 수 있는 웹 서버로, 굳건한 성능과 높은 병렬 처리 능력으로 유명합니다. WSGI는 웹 서버와 파이썬 웹 애플리케이션 사이의 표준 인터페이스입니다. WSGI는 웹 서버가 웹 애플리케이션에게 요청을 전달하고, 웹 애플리케이션은 응답을 생성한 다음 웹 서버를 통해 사용자에게 전달하는 프로세스를 정의합니다. 즉, WSGI는 웹 서버와 파이썬 웹 애플리케이션 사이의 일관된 규칙을 제공합니다. 실제로 웹 애플리케이션 프레임워크인 Django를 웹 서버(예: Nginx, Apache)와 연결하는데 필요한 역할인 WSGI를 Gunicorn이 수행하기 때문에 사용해야 합니다. 이 표준 인터페이스를 사용하면 웹 서버와 웹 애플리케이션을 손쉽게 교체하거나 조합할 수 있습니다.
- Django 프로젝트를 배포할 때 Gunicorn을 사용하면 다음과 같은 이점이 있습니다:
- 효율적인 멀티프로세싱 아키텍처를 활용해 굳건한 성능을 제공합니다.
- Django 애플리케이션과 웹 서버 간의 통신 규칙을 WSGI 표준을 따르기 때문에 연결이 원활합니다.
- 배포 프로세스를 간소화해주며, 다양한 웹 서버(Nginx, Apache)와 호환됩니다.
- 많은 종류의 워크로드를 처리하도록 구성 가능합니다.
- 손쉬운 설정과 커스터마이징을 할 수 있어서 유연성이 높습니다.
- 요약하자면, Gunicorn은 파이썬 웹 애플리케이션을 배포하기 위한 신뢰할 수 있는 WSGI 웹 서버로서, 웹 서버와 Django 웹 애플리케이션을 원활하게 연결해주는 역할을 수행합니다.
- Django 프로젝트를 배포할 때 사용되는 NGINX가 무엇이며, 웹서버를 왜 사용해야 하는지 설명하시오
- NGINX는 고성능, 고안정성, 낮은 메모리 사용량 및 단순한 구성을 목표로 하는 웹 서버, 리버스 프록시 서버, 그리고 이메일 프록시 서버입니다. Django 프로젝트를 배포할 때 주로 리버스 프록시 서버로 사용됩니다.
- 웹 서버를 사용하는 이유는 다음과 같습니다:
- 정적 파일 제공: 웹 서버는 정적 파일(예: 이미지, CSS, JavaScript)을 효과적으로 처리하고 제공합니다. 만약 Django 애플리케이션 서버가 정적 파일 처리를 직접 담당하면 성능이 떨어질 뿐 아니라 응답 시간도 길어져 사용자 경험이 좋지 않을 수 있습니다. 웹 서버를 사용하면 정적 파일 제공에 최적화된 성능을 얻을 수 있습니다.
- 부하 분산 및 리버스 프록시: 웹 서버(예: NGINX)는 일반적으로 리버스 프록시로서 기능하며, 들어오는 요청을 여러 백엔드 애플리케이션 서버(예: Gunicorn으로 실행되는 Django 애플리케이션)로 전달합니다. 이 기능을 통해 서버 간의 연결 구성을 단순화하고, 부하 분산을 가능하게 해서 고가용성과 확장성을 제공합니다.
- 성능 최적화: 웹 서버는 다양한 성능 최적화 기능을 제공합니다. 요청 처리 시간을 줄이기 위해 HTTP 압축, 캐시, SSL 터미네이션 등의 기능을 지원합니다. 이를 통해 사용자 요청에 대한 빠른 응답을 가능하게 합니다.
- 보안 강화: 웹 서버는 애플리케이션 서버와 클라이언트 사이에서 요청을 전달하는 데 사용되기 때문에, 보안을 강화할 수 있는 기회를 제공합니다. 웹 서버는 요청 필터링, 접근 제어, DDos 공격 방어 등 다양한 보안 기능을 활용하여 애플리케이션 서버를 안전하게 보호할 수 있습니다.
- 결국 웹 서버는 웹 애플리케이션을 배포할 때, 정적 파일 제공 및 성능 최적화, 리버스 프록시 및 부하 분산, 그리고 보안 강화와 같은 여러 가지 역할을 수행합니다. 이로써 웹 애플리케이션 서버에 직접적인 부담을 덜어주는 동시에 사용자들에게 원활한 서비스를 제공할 수 있게 됩니다.
- Django에서 PostgreSQL을 선호하는 이유는 무엇입니까?
- 장고와의 통합: PostgreSQL은 Django의 어플리케이션과 원활하게 통합되며, 다양한 Django 패키지와 호환됩니다. Django에서 제공하는 기능인 Object-Relational-Mapper(ORM)은 PostgreSQL 데이터베이스와 동작하는데 필요한 유틸리티를 포함합니다.
- 높은 확장성과 성능: PostgreSQL은 확장성이 뛰어나고 성능이 좋습니다. 이로 인해 웹 애플리케이션의 사용자가 증가하더라도 데이터베이스 시스템이 고품질의 서비스를 계속 제공할 수 있습니다.
- 자료형과 인덱스 지원: PostgreSQL은 다양한 데이터 유형(JSON, Arrays, HStore 등) 지원을 통해 복잡한 데이터 구조를 유연하게 처리할 수 있습니다. 또한, 다양한 인덱스 타입(B-tree, GiST, GIN, SP-GiST, KNN 등)을 지원하여 쿼리 성능 최적화에 큰 도움을 줍니다.
- 트랜잭션 관리와 ACID 컴플라이언스: PostgreSQL은 동시성 제어와 견고한 트랜잭션 관리를 제공합니다. 또한, ACID(원자성, 일관성, 독립성, 지속성) 이론에 부합하여 데이터 무결성과 일관성을 확보합니다.
- 커뮤니티와 지원: PostgreSQL은 적극적인 개발 커뮤니티가 있어 다양한 패키지와 플러그인을 제공합니다. 여기에는 기능 향상, 관리 도구, 백업 도구 등이 포함됩니다.
- HTTP가 아닌 HTTPS로 배포했을 때의 장점에 대해 설명하시오
- 보안: HTTPS는 HTTP를 안전한 버전으로 확장한 것으로, SSL/TLS 프로토콜을 사용하여 전송되는 데이터를 암호화합니다. 이 암호화는 중간자 공격(Man-in-the-middle attack)으로부터 사용자와 웹 애플리케이션 간 교환되는 데이터를 보호합니다. HTTPS를 사용하면 민감한 정보(로그인 자격 증명, 신용카드 정보 등)가 인터넷 상에서 도난당하는 것을 방지할 수 있습니다.
- 신뢰도: HTTPS를 사용하는 웹 사이트는 이용자에게 웹 사이트의 신원을 확인할 수 있는 SSL/TLS 인증서를 제공합니다. 이 인증서를 통해 사용자는 자신이 방문하는 웹 사이트가 올바른 업체에서 제공된 것임을 확인할 수 있습니다. 이로 인해 사기나 피싱 웹 사이트로 인한 피해를 예방할 수 있습니다.
- SEO 및 랭킹 개선: 구글 및 기타 검색 엔진들은 HTTPS를 사용하는 웹 사이트에 더 높은 검색 순위를 부여합니다. 따라서 SEO 최적화 및 웹 사이트 랭킹 개선을 위해 HTTPS를 사용하는 것이 좋습니다.
- 웹 브라우저 호환성 개선: 최신 브라우저들은 HTTPS를 지원하며, 일부 웹 기능들은 SSL/TLS를 사용하는 경우에만 작동합니다. 이로 인해 사용자가 모든 웹 기능을 올바르게 사용하고 최상의 경험을 얻을 수 있게 됩니다.
- HTTP/2 지원: HTTP/2는 새로운 세대의 HTTP 프로토콜로, 성능 개선과 효율성 향상을 약속하고 있습니다. HTTP/2는 기본적으로 HTTPS와 함께 사용됩니다. 따라서 HTTPS를 사용하면 HTTP/2를 활용하여 웹 사이트의 로딩 시간을 줄이고 사용자 경험을 개선할 수 있습니다.
- UUID
- "Universally Unique Identifier의"의 약자로, 범용 고유 식별자를 의미함
- UUID는 128비트의 숫자로 구성되며, 난수와 타임스탬프 등을 기반으로 생성되어 전 세계적으로 고유한 값을 보장하기 위한 목적으로 사용됨
- UUID를 표현할 때는 보통 8-4-4-4-12 형식의 32개 문자로 구성되는 하이픈 포함 36자리 표현식을 사용함
- (과제에 UUID를 사용해서 url을 구성하라고 했는데 UUID가 그냥 ID인가보다~ 하고 안일하게 생각했다 이런....)
- UUID란?
- python에서 UUID 생성하는 방법
- UUID를 PK값으로 설정하는 방법
<느낀 점/>
- 요구사항 제대로 확인도 안 하고 어벙하게 과제를 수행했는데 면접 기회를 받다니...난 운이 좋은 사람이군
- 면접 가서는 과제한 것처럼 허술하게 보이면 안 되는데...후 떨리는군
- 그리고 드뎌 장고 50문 50답을 다 채웠다~!!! (이제 남은 건 달달 외우기 뿐..)
- 내일은 cs 개념 정리 한 번 하고, 이력서 내용 다시 훑어보고 프로젝트 다시 한 번 들춰보며 면접 준비를 해야겠군!!
<내일 목표/>
- 면접 준!비!