본문 바로가기

django14

[Django] Unit 테스트 코드 작성하기 테스트 코드 그동안 PostMan으로 하나씩 API테스트의 수고로움을 덜기 위해 Django는 자동화된 테스트 도구들을 제공한다. 자동화된 테스트를 적용하면 직접 테스트하는 것보다 빠르고 정확하게 테스트를 진행할 수 있다. 테스트 코드 작성하는 것은 Django Shell을 사용하는 것과 다르지 않다. 그렇다면 테스트 코드를 한번 작성해보자. 테스트를 만들어야 하는 자세한 이유는 공식문서↗를 보면 자세히 나와있다. 테스트 코드는 테스트 주도 개발(TDD)라는 방법론이 있을 정도로 백엔드 개발에서 중요한 부분이다. 그러나 반드시는 아니다. 테스트 개발 방법론에 대한 설명은 해당 포스팅↗을 참고 하면 된다. 만약 프로젝트의 단위가 큰 프로젝트라면 자동적으로 생성되는 `tests.py`를 수정할 필요 있다. .. 2024. 1. 10.
[Django] 커스텀 Admin 페이지 Django는 사이트 편리하게 모델을 관리할 수 있도록 관리자 기능 페이지를 기본적으로 제공한다. 오늘은 Admin 페이지를 활용하는 방법에 대해 알아보려고 한다. Admin 페이지 접속하기 우선, Admin 페이지에 접속하려면, `superuser`(관리자)를 생성해야 한다. 다음 `createsuperuser` 명령어를 입력해서 Admin 페이지에 접근한다. python manage.py createsuperuser 사용자 이름(Username) : admin 이메일 주소: Password: Password (again): Superuser created successfully. 초기에 관리자 사이트에 들어가게 되면 user와 Groups만 볼 수 있다. 사전에 작성한 모델을 올려보도록 하자. 사전에.. 2024. 1. 10.
Django Rest Framework - (1 : API 테스트 해보기) DRF Django에서 RestAPI를 쉽게 구축할 수 있게 도와주는 프레임워크이다. 그렇다면 왜 Django가 아니라 REST한 프레임워크인 DRF를 사용하게 된 것일까? 예전에는 브라우저만으로 웹 서비스를 접근할 수 있었지만 스마트폰, 태블릿 PC등이 생기면서 여러가지 플랫폼에서도 웹/앱 서비스를 접근할 수 있어야한다는 중요성이 생기게 되었다. 그래서 Django Rest Framework가 필요해지게 된 것이다. Restful한 API를 개발할 수 있다는 이야기는 한마디로 사용자가 원하는 것을 잘 찾을 수 있게 정리해놓은 것을 말한다. 예를 들어, 클라이언트가 커피를 주문하면 `order/1` 이런식으로 찾아 줄 수 있는 것이다. DRF의 자세한 내용은 공식 문서를 참고하면 된다. DRF 설치하기 .. 2023. 12. 25.
[Django] DB 쿼리 최적화를 다양한 방법들을 정리해보았다. 지난 쿼리셋 포스팅에 이어서 최적화를 하는 다양한 방법에 대해 적어보려한다. 데이터 성능을 개선시키는 메서드들 `only()`메서드를 활용하자. 기본적으로 우리가 어떠한 데이터들을 가져온다고 가정했을 때 `Track.objects.all()`와 같은 식으로 쿼리한다. 해당 쿼리는 track 데이터의 모든 필드를 가져오는 명령어로 만약 우리가 전체 컬럼이 아닌 특정한 필드를 가져오고 싶다면 위와 같이 사용하지 않아도 된다. `only()`메서드를 이용하면 지정된 필드만 가져올 수 있게 설정할 수 있다. 만약 같은 `title`이란 필드만 조회한다고 가정하면 쿼리에 사용할 수 있는 메모리를 줄여 DB 부하를 줄여줄 수 있지 않을까 한다. 하지만 장점만 가지고 있는 것은 아니다. 만약 다음 코드와 같이 지정해.. 2023. 12. 20.
[Django] 쿼리셋으로 데이터 조회하기 먼저 이전에 예시 프로젝트를 생성하여 가상의 음원플랫폼으로 Spotify Developer 사이트에서 앨범, 트랙, 아티스트 API 요청으로 데이터를 가져와 DB에 넣었다. 쿼리셋(QuerySet) 먼저 쿼리셋은 무엇일까? 쿼리셋은 일반적으로 데이터베이스를 조회하기 위한 기능을 제공하는 개념을 의미한다. ORM을 통해 DB와 상호작용하는 인터페이스를 제공한다. ORM에 대한 개념은 이전에 작성했던 글을 참조하면 된다. 아래 그림을 보면 데이터를 조회하기 위해 필터링하는 구간까지가 쿼리셋을 의미하고 [0] 인덱싱으로 인스턴스를 얻을 수 있다. READ 먼저, 기본적으로 쿼리셋을 통해 데이터를 가져오는 실습을 진행해보자. 데이터를 가져올 때는 `all(), get(), filter(), exclude(), .. 2023. 12. 20.
[프리온보딩] Docker Compose Docker Compose 도커 컴포즈(Docker Compose)는 단일 서버에서 여러 개의 컨테이너를 하나의 서버스로 묶어 관리할 수 있는 환경을 제공한다. 예를들어, Django을 Docker에 띄우기 위해선 SQL 서버와 같이 띄어야한다는 것이다. 지난 포스팅에서는 도커 네트워크를 통해 워드프레스를 띄우는 연습을 진행했다. 작업을 해본 결과 순서에 맞게 올리지 않으면 오류가 발생되는 문제가 있었다. 이번에는 Docker Compose를 통해 워드프레스를 올려보기로 했다. Docker Compose는 컴포즈 파일을 Docker CLI로 번역하여 올리게 된다. 그럼, 컴포즈 파일을 어떻게 만들까? 컴포즈 파일은 `yaml`파일을 통해 만들 수 있다. 먼저 Docker와 연결할 위치에 `docker-c.. 2023. 12. 14.
Django에서의 CSRF, XSS 금일 포스팅에서는 웹 개발에서 알아두어야할 XSS, CSRF 보안 문제에 대해서 포스팅할 예정이다. XSS(Cross Site Scripting) XSS 공격은 웹 사이트에 스크립트를 삽입하여 쿠키나 개인정보를 빼돌리는 해킹 기법이다. 주로 사용자의 입력 데이터를 검증하지 않을 때 발생하며 게시판 앱을 제작할 때 발생하는 보안 문제점이다. 이외에도 유저를 삭제하는 API를 호출한다거나 특정 웹사이트로 이동시키는 등 공격을 한다. 그렇다면 위 문제를 어떻게하면 해결할 수 있을까? 이스케이프(Escape)를 활용한다. 만약 공격자가 악의적인 목적으로 스크립트를 작성했을 때, 렌더링 시 자동으로 이스케이프를 하게 만들 수 있다. 즉, 게시물을 렌더링 할 때, `` 태그를 문자 형태로 만들어버리는 방법이다. f.. 2023. 12. 3.
Django - 객체 참조 관계 🚩 문제 발생 우선, 제가 부딪혔었던 이슈는 다음과 같습니다. 유저가 게시글을 생성하는 요청을 할 때, 카테고리를 설정하지 않으면 기본 값으로 '기타'라는 값으로 저장하려고 했습니다. 문제는 '기타'라는 값은 애초에 DB 저장된 값이 아니기 때문에 NOT NULL 문제가 발생하게 된 것이죠. models.py class Article(CommonModel): author = models.ForeignKey("users.User", on_delete = models.CASCADE, related_name="articles",) title = models.CharField(max_length=100, blank=False, null=False) context = models.TextField() catego.. 2023. 11. 29.
[Django] CRUD 구현 오늘은 Django에서 모델을 만들어 보고, 실제로 CRUD 처리를 구현하는 연습을 포스팅하려고 한다. 모델 생성 먼저, 데이터를 처리하기 위해 모델을 생성해야 한다. SQL를 통해 이전 하는 방법도 직접 Model을 작성하는 방법도 있다. 여기서, 특별한 건, `ForeignKey`(외래키)를 사용했다는 것이다. 외래키 작성의 파라미터로 참조할 테이블, 개체 관계 이름, 개체시 동작을 넣는다. 참조할 테이블 : 연결할 모델 클래스를 가리키며 해당 외래키에서 어떤 테이블을 참조할지를 의미한다. 관계상 이름(related_name) : 개체 관계에 사용할 이름을 나타내는데 역방향에서 참조할 때 사용하는 이름이다. Categoty 테이블에서 category 속성을 통해 Memo의 category를 역참조한다.. 2023. 11. 29.