본문 바로가기

Web/Django12

[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.
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.
User Model 커스텀 하기 회원 가입, 로그인 기능을 구현하기 위해 인증 기능이 필요하고 이 인증 기능을 구현하기 위해 `User` 정보가 필요하다. 기본적으로, Django에서는 User모델을 제공한다. 하지만, User 정보에 전화 번호나 생년월일을 추가하고 싶을 때가 있다. 이렇게 직접 User 클래스를 생성하는 커스텀 유저 모델을 생성하기 위해 몇가지 방법이 존재한다. AbstractUser : 해당 User 클래스의 필드에서 추가 필드만 생성하는 방식 AbstractBaseUSer : 완전히 User 클래스를 커스터마이징 하는 방식 이외에도, 모델 그대로를 상속받는 Proxy Model과 1:1 관계를 유지하는 OnetoOne 모델이 있지만 1:1은 두가지 모델을 서로 참조하기 때문에 느리다는 단점이 있다. 프로젝트를 시.. 2023. 11. 28.
Static 파일 관리하기 with AWS S3 연동하기 Static Files 웹사이트를 구현하려면 이미지나 CSS, Javascript 파일도 같이 제공해야한다. Django에서는 이런 파일을 staticfile이라고 하는데 통상적으로도 정적파일(Static File)이라 부르는 건 마찬가지다. 그럼 정적 파일은 어떻게 관리해야 할까? 정적파일 구성에 관해서는 `settings.py` 하단 쯤에 다음과 같이 정의된 코드들을 볼 수 있다. `STATIC_URL`은 정적 파일이 저장된 경로를 의미한다. 만약 template 태그로 `{% static 'css/style.css' %}`라고 설정해두면 `static/css/style.css` 경로로 호출될 것이다. # Static files (CSS, JavaScript, Images) # https://docs.. 2023. 11. 27.