개요 테스트 코드. 테스트에 대한 중요성은 굳이 말 하지 않아도 잘 알수 있다. 내가 개발한 코드가 의도된 대로 작성되었는지 검증하는 것은 무엇보다 중요하다. 테스트 주도 개발(TDD) 라는 개발 방법론까지 있는 데다가, 기업의 과제 테스트나 면접 등에서 테스트에 관한 이야기는 빼놓을 수 없을 정도다. Django에서도 이런 테스트 코드를 잘 작성할...
서버에서 클라이언트로 이벤트를 보내는 방법
개요 서버에서 클라이언트로 이벤트를 보내는 방법 웹 애플리케이션은 Client와 Server 구조의 모델에서 시작되었다. 클라이언트가 필요한 리소스를 서버로 요청하고, 서버는 이에 대한 응답을 보내는 식이다. 대부분의 동작들이 이러한 구조이지만, 개발을 하다보면 다른 구조가 필요해질 때가 있다. 가장 간단한 예시로 알람 기능이 있을 것이다. 사용...
DRF의 추가 기능 구현하기
개요 DRF에서 제공하는 ViewSet은 기본적인 CRUD 기능 대부분을 제공한다. 하지만 기능을 구현하다 보면 추가적인 기능을 필요로 한다. 프로젝트를 진행하면서 생긴 요청 사항 중 이런 기능이 있었다. 게시판에 다른 사람이 등록한 옷 조합(이하 코디)를 볼 수 있다. 이를 내 코디 리스트에 복사하고 싶다. 복사된 코디는 내 마음대로 ...
DRF에서 복합키로 instance 찾기
개요 Django Rest Framework의 API에서 DB의 데이터에 접근하는 메소드는 두 가지가 있다. UPDATE와 DELETE가 그 예시이다. 해당 메소드의 코드를 보면, 다음과 같이 데이터에 접근하는 것을 볼 수 있다. ... instance = self.get_object() ... 처음부터 get_object 메소드를 호출하여 데이터...
Django Settings.py 분리하기
개요 프로젝트에 도커 적용하면서 개발환경과 배포환경 분리의 필요성을 느꼈다. 배포 환경에서는 debug를 False로 변경하고, ALLOWED_HOSTS를 추가하여야 했다. 하지만 배포 환경 settings.py로는 로컬에서 테스트가 되지 않기 때문에 일일히 개발 환경 상태로 값을 고치고 작업하였다. 이런 번거로움을 덜기 위한 작업이 바로 set...
DRF에서 Swagger 문서 작성
개요 OpenAPI란 API 스펙을 json, yaml로 표현한 명세이다. 직접 소스코드나 문서를 보지 않고 서비스를 이해할 수 있다. 오늘날에는 RESTful API 스펙의 사실상 표준으로 사용되고 있다. 현재 가장 사용되는 버전은 3.0으로, 구 버전인 2.0에 비해 재사용성이 향상되었다. DRF에서도 이러한 OpenAPI 3.0을 손쉽게 만들...
Django ORM의 Q와 F에 대해서
Q() objects django.db.models.Q는 데이터베이스 관련 작업에 사용할 수 있는 SQL 조건문을 의미한다. Q와 연산자를 통해 조건을 결합할 수 있다. Django ORM에서 filter를 여러개 연결하는 것은 AND 조건을 계속 추가하는 것과 같다. 또한, filter의 여러 패러미터도 SQL 쿼리의 AND로 처리된다. Q()는...
DRF에서 Authentication과 Permission
개요 DRF에는 인증과 권한 개념이 있다. 서버로 들어오는 요청을 기반으로 자격 증명을 진행하는 것이 인증 그리고 현재 접근에 대한 통과 여부를 결정하는 것이 권한 DRF에서는 이러한 인증과 권한이 어떻게 구성되어 있는지 알아보자. 그리고 알아낸 정보를 바탕으로 커스텀 권한을 만드는 방법을 알아보자 인증(Authentication) DRF에서 ...
DRF에서 논리삭제 구현
프로젝트 진행 중에 특이한 요구사항이 발생했다. Django ORM을 활용하면 손쉽게 데이터를 삭제할 수 있다. 하지만 이런 데이터가 추후 데이터를 쌓고 분석하는데 사용하려면 사용자에게만 삭제된 것 처럼 보이는 추가 구현이 필요해졌다. 개요 물리삭제와 논리삭제 데이터베이스에서 데이터를 삭제하는 방법은 물리삭제와 논리삭제가 있다. 물리삭제는 SQL의...
DRF에서 JWT 기반 인증 사용하기
개요 JWT는 토큰을 기반으로 사용자를 식별하는 인증이다. 기존의 세션 방식의 인증은 서버의 메모리에 정보가 저장된다. HTTP 프로토콜은 상태 정보를 기억하지 않기 때문에 여러번의 세션 검증이 이루어지는데, 이는 곧 서버의 부하로 이어진다. JWT는 토큰 자체에 사용자의 정보들이 들어있으며, 서버에서의 서명을 통해서 간단하게 사용자를 특정할 수 ...