장고

Django

장고 SECRET_KEY 관리 방법: 환경 변수와 로컬 파일 설정

장고에서는 프로젝트 생성 시 settings.py에 자동으로 SECRET_KEY를 생성해줍니다. 이는 세션, 메시지, 토큰, 암호화된 서명 등에 사용되므로 외부로 유출되지 않게 잘 관리해야 합니다. 특히나 프로젝트 협업을 진행할 때 사용하는 깃을 통해 직접 SECRET_KEY나 데이터베이스의 암호, AWS 정보, 각종 소셜 로그인 API 키 등을 업로드해 공유할 경우 유출되어 큰 문제가 발생할 수 있습니다. SECRET_KEY를 프로젝트 파일과 구분하여 관리하는 방법으로는 1. 환경 변수 설정 2. 로컬 파일 생성이 있습니다. 환경 변수 설정 환경 변수란 운영 체제(OS)에서 프로세스를 실행하기 위해 참조하는 변수를 의미합니다. 즉, 프로세스가 컴퓨터에서 작동하는 데 영향을 미치는 글로벌 환경의 동적인 ..

Django

장고 개발 환경에 따라 settings.py 분리하는 방법

장고에서는 개발 환경에 따라 settings.py를 구분하여 목적에 맞게 서버 환경을 설정할 수 있습니다. 환경을 분리하는 이유는 원활한 협업, 코드의 유지 보수, 공개/비공개 처리, 라이브러리 및 데이터베이스 관리 등을 위해서입니다. 개발 환경에는 기본적으로 서버에 연결하지 않으나 공통 사항들을 공유하는 local과 base가 있으며, AWS S3, RDS 등에 연동한 development, 이를 실제로 배포하는 production이 있습니다. 장고 settings.py 분리하는 방법 settings.py가 있는 로컬 환경에서 settings 디렉토리를 생성합니다. mkdir settings 이를 패키지화 해서 사용할 것이므로 __init__.py를 생성해줍니다. cd settings touch __i..

Django

장고 get_or_create()와 race condition 문제

get_or_create 메소드 설명 장고의 get_or_create 함수는 특정 kwargs로 데이터베이스 객체를 탐색하고 이를 불러오거나 존재하지 않는 경우 새롭게 생성하는 간편한 메소드입니다. 메소드 실행 결과 (object, created) 튜플이 반환됩니다. object는 불러온 객체이거나 생성된 객체이며, created는 불리언 값입니다. 이는 중복된 객체가 생성되는 것을 방지하고, 다음과 같은 로직을 한번에 처리할 수 있는 메소드입니다. try: obj = Person.objects.get(first_name='John', last_name='Lennon') except Person.DoesNotExist: obj = Person(first_name='John', last_name='Lenn..

Django

장고 Q를 활용한 필터링, 정렬, 검색 방법

장고의 filter()에서 처리하는 키워드 아규먼트는 기본적으로 & (AND) 형식입니다. | (OR)와 같은 보다 복잡한 쿼리를 처리하려면 Q 객체를 사용할 수 있습니다. Q 객체(django.db.models.Q)는 키워드 아규먼트를 처리하기 위한 객체입니다. Q 객체 사용 방법 Q 객체를 사용하기 위해서는 장고의 모델에서 제공하는 Q를 임포트해야 합니다. from django.db.models import Q 각 키워드 아규먼트를 차례로 Q 객체에 넘겨줄 수 있습니다. 이때 Q 객체의 각 아규먼트는 | (OR)로 구분되지 않는 경우, & (AND)로 이어지게 됩니다. Poll.objects.get( Q(question__startswith='Who'), Q(pub_date=date(2005, 5, ..

Django

장고에서 HTTP GET, POST 요청 처리하는 방법

장고에서는 뷰 파일과 url을 설정하여 클라이언트로부터 들어오는 HTTP GET 및 POST 요청을 처리할 수 있습니다. HTTP 요청에는 크게 GET과 POST가 존재하며, 둘의 가장 큰 차이점은 바디(body)의 존재 유무입니다. GET 요청에는 헤더만 있고 바디가 없으며, POST 요청에는 헤더와 바디가 모두 존재합니다. HTTP GET 요청 처리 HTTP GET 요청은 URL에 쿼리 파라미터를 추가하여 전송합니다. 즉, 다음과 같이 URL의 마지막에 ?를 붙인 다음 파라미터와 값을 넣어 요청을 전송합니다. http://127.0.0.1:8000/skin/products?id=1 만약, 두 개 이상의 파라미터를 전송하려고 한다면 다음과 같이 &을 사용합니다. http://127.0.0.1:8000/..

Django

장고 ORM과 쿼리셋의 개념

장고는 ORM을 통해 데이터베이스와 '간편히' 상호작용할 수 있는 방법을 제공해줍니다. 여기서 '간편히'라는 의미가 생각보다 중요한데요. 이는 장고의 ORM 방식이 아닌 다른 방식으로 데이터베이스와 상호작용하는 기존의 방법을 대체한다는 의미를 내포하고 있습니다. ORM과 SQL 먼저, ORM에 대해 살펴보도록 하겠습니다. ORM은 무엇일까요? ORM(Objcet Relational Mapper)은 객체 관계형 매핑을 의미하며, 객체를 관계형 데이터베이스와 연결해주는 개념입니다. 이렇게 되면 구조화된 쿼리 언어인 SQL(Structed Query Language)을 사용하지 않고도 파이썬만으로 데이터베이스 쿼리 요청을 처리할 수 있게 됩니다. 간단히 정리하자면, 장고의 ORM 방식은 SQL을 사용하지 않고..

Django

장고, 파이썬 csv 파일 처리 방법

장고 모델링을 통해 데이터베이스를 생성했다면, 파이썬에서 제공하는 csv 모듈을 사용하여 데이터를 저장할 수 있습니다. 이를 위해서는 먼저, csv 파일을 모델링 양식을 따라 생성하고 스크립트를 통해 데이터베이스에 추가하는 과정을 거쳐야 합니다. 1. csv 파일 생성 방법 csv 파일은 콤마로 구분되는 값(Comma Seperated Value, CSV)으로 구성되며, 다양한 방식으로 생성할 수 있습니다. 사용하는 에디터에서 csv 확장자를 갖는 파일을 직접 생성할 수도 있고, 노션이나 구글 스프레드시트를 통해 데이터를 추가하고 다운받을 수도 있습니다. 중요한 것은 장고 모델링을 통해 만든 모델의 양식을 준수해야 한다는 것입니다. 이번 포스팅에 사용하기 위해 제가 작성한 SubCategory 모델은 다..

TIL

장고 마이그레이션 초기화 방법 - TIL 10

장고에서는 모델링 작업을 완료한 후 마이그레이션을 통해 이를 데이터베이스에 반영합니다. 그러나 불필요한 마이그레이션 히스토리를 지워야 할 때도 있습니다. 직접 마이그레이션 파일을 삭제할 수도 있겠지만, 히스토리가 얽혀 오류가 발생할 수도 있습니다. 다음 방법을 사용하면 마이그레이션이 히스토리를 초기화하여 처음 상태로 되돌아갈 수 있습니다. 장고 마이그레이션 초기화 방법 다음의 명령어를 입력하면 __init__.py를 제외한 마이그레이션 디렉토리 내 모든 파일이 제거되고 마이그레이션 상태가 최초 상태로 돌아가게 됩니다. find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -dele..

Django

장고 프론트엔드와 통신 방법: HTTP POST, GET request 처리하기

장고 모델(model) 작업과 url, 뷰(view) 작업을 마쳤다면 HTTP 요청(request)을 통해 프론트엔드와 통신을 테스트할 수 있습니다. 통신의 흐름 장고에서 백엔드와 프론트엔드의 기본적인 통신 흐름은 다음과 같습니다. 백엔드는 장고 서버를 실행하고 프론트엔드에게 엔드포인트와 서버의 ip 주소를 전달합니다. 프론트엔드는 해당 엔드포인트로 원하는 값을 body에 담아 POST 요청을 전달합니다(보통 생성 및 업데이트). GET방식으로도 요청을 진행할 수 있습니다. 이 때는 body가 따로 필요하지 않습니다(보통 데이터를 받아오는 경우). request 형식이 올바르다면 이에 해당하는 response가 상태 코드와 함께 반환됩니다. 통신 설정 방법 외부 서버를 통한 통신이 아니기 때문에 동일한 ..

Django

장고 추상 모델 클래스 생성과 상속 방법

장고 모델에서 추상 모델 클래스(Abstract 속성)을 사용하면, 다른 클래스 모델에서 이를 상속받아 활용할 수 있습니다. 추상 모델 클래스는 자체적인 데이터베이스 테이블을 생성하지 않으며, 상속받는 클래스의 테이블에 함께 추가됩니다. 추상 모델 클래스 생성 추상 모델 클래스는 데이터베이스의 생성 시각이나 수정 시각과 같이 여러 테이블에서 공통적으로 사용되는 내용을 상속시키고자 할 때 유용할 수 있습니다. 다음과 같이 Base 모델을 만들어 추상 모델 클래스로 지정할 수 있습니다. from django.db import models class Base(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = mode..

휘 Hwi
'장고' 태그의 글 목록