전체 글
-
[Django] Django의 search path for tests 설정django 2022. 6. 14. 14:42
# 문제 상황 : 한 앱의 여러 directory를 만들고 별도의 models.py와 serializers.py, views.py, tests.py 등을 관리하는 형태로 코드를 짜다가, python manage.py test 명령어를 입력하자, 여러 directory에 있는 tests.py를 실행하지 않고, 앱 단위로 tests.py를 search하는 난관에 부딪혔다. manage.py나 settings.py에 따로 test path를 지정해줘야 하나? 자료를 찾아보던 중 좋은 해결법을 찾아서 공유한다. 다음은 필자가 관리하던 app의 directory 구조이다. project - core - __init.py__ - lecture - tests.py - models.py - views.py ... - ..
-
[개념 정리] Custom Permission 구현과 has_permission과 has_object_permission의 차이django 2022. 3. 24. 14:14
# Custom Permission : 종종 REST framework에서 view class에 permission_classes를 이용하여 permission을 관리할 때, 기존에 있는 AllowAny, IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly 등으로는 구현할 수 없어 Custom Permission을 직접 정의하여 설정해줘야 할 때가 있다. 예를 들어 위의 4가지 permission class로는 로그인한 유저가 다른 유저의 object id를 통해 이를 마음대로 수정하거나 삭제하는 행위를 막을 수 없다. 따라서 이 경우 유저가 object에 접근하려 할 때, 해당 object의 주인과 요청을 보내는 유저가 동일한지 확인하는 로직이 필요한데,..
-
[개념 정리] Django 페이지네이션의 종류와 차이django 2022. 2. 23. 03:44
# 페이지네이션의 종류 1. PageNumberPagination : 요청 시, 원하는 페이지(page) 번호를 정해서 가져오는 가장 기본적인 방법 예시) 2. LimitOffsetPagination : 요청시, 원하는 지점(offset)과 그 지점으로부터 데이터 개수(limit)를 정해서 가져오는 방법이다. 3. CursorPagination : 요청 했던 데이터를 ordering 기준으로 앞, 뒤로만 이동할 때 사용한다. 예시) 페이스북, 인스타그램 # PageNumberPagination vs LimitOffsetPagination : 둘 다 데이터 조회 시 offset과 limit을 활용하지만, PageNumberPagination은 offset이 limit의 배수 단위고, LimitOffsetP..
-
[개념 정리] HTTP 메서드 종류와 속성, 차이django 2022. 2. 22. 18:39
# HTTP 메서드란? : 클라이언트가 웹서버에게 요청의 목적이나 종류를 알리는 수단이다. # HTTP 메서드의 종류 : HTTP 메서드의 종류는 총 9가지, 그중 주로 사용되는 메서드는 5가지이다. - 주로 사용- GET : 리소스 조회 POST : 신규 리소스를 등록 / 생성 PUT : 리소스를 대체, 없으면 생성 PATCH : 리소스를 일부만 변경 DELETE : 리소스 삭제 - 기타 - HEAD: GET과 동일하지만 메시지 바디 부분을 제외하고, 상태 줄과 헤더만 반환 OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용) CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정 TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행 사이트 회..
-
[개념 정리] HTTP의 개념과 특징django 2022. 2. 20. 18:52
인터넷 주소를 보면 http://, https://를 한번쯤 봤을 것이다. 오늘은 백엔드 개발자도 기본적으로 알고 있어야 된다고 하는 HTTP개념에 대해서 정리해보았다. # HTTP? HTTPS? : HyperText Transfer Protocol의 약자로, 텍스트 기반의 통신 규약, 즉 인터넷에서 데이터를 웹 브라우저와 웹 서버간에 주고받을 수 있는 프로토콜 (규칙)을 말한다. HTTP는 정보를 텍스트로 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 원하지 않는 데이터 유출이 발생할 수 있다. 이러한 보안 취약점을 해결하기 위한 프로토콜이 HTTP에 S(Secure Socket)가 추가된 HTTPS이다. HTTPS는 기본 골격이나 사용 목적 등은 HTTP와 거의 동일하지만, 데이터를 ..
-
[개념 정리] Custom Manager vs Custom Querysetdjango 2022. 2. 19. 18:17
# Manager란? : Manager는 장고 모델에 데이터베이스 쿼리 작업을 제공해주는 인터페이스다. Manager는 파이썬을 이용해서, sql을 쓰지 않고 DB로부터 데이터를 가져올 수 있게 해준다. 기본적으로 장고는 모든 클래스에 objects라는 이름의 Manager를 추가한다. 장고 모델마다 기본적으로 사용되는 기본 관리자는 django.db.models.Manager이다. class User(models.Model): ... >> User.objects.all() class CustomUser(models.Model): ... people = models.Manager() >> CustomUser.people.all() # O >> CustomUser.objects.all() # X (Attr..
-
[개념 정리] Django의 ORM과 Lazy-Loading, N+1 Problems, Eager-Loadingdjango 2022. 2. 18. 04:50
# ORM이란? : ORM은 Object-Relational Mapping의 약자로, 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 의미한다. 쉽게 말하면 장고의 ORM은 파이썬과 DataBase의 SQL 사이의 통역사 역할을 해준다. 개발자는 장고 ORM을 통해 별도의 SQL 쿼리 없이 파이썬 코드만으로 DB를 조작할 수 있다. # 예시 # ORM 문법 queryset = Book.objects.all() # .query를 문자열로 출력하면 실제 SQL 문을 확인할 수 있다. print(str(queryset.query)) # SQL 문법 >> SELECT "appname_book"."id", "appname_book"."tit..
-
[개념 정리] 쿠키/세션, 그리고 JWTdjango 2022. 2. 15. 04:40
# Cookie와 Session은 언제 쓰이는가? : 기본적으로 웹 브라우저와 서버가 HTTP 프로토콜을 통해서 하는 모든 커뮤니케이션은 stateless 한 특징이 있다. stateless란 통신이 끝나면 상태를 유지하지 않는다는 의미로, 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다. 이러한 특징 때문에 유저는 로그인을 한 후에도 페이지를 이동할 때마다 매번 로그인을 해주어야 한다. 쿠키와 세션을 이용하면, 위와 같이 stateless 한 특징으로 인해 발생하는 인증 문제를 해결해준다. 예를 들어 우리가 어떤 프라이빗한 축제에 초대받아 참석했다고 하자. 주최 측에서 우리를 초대받지 않은 사람들과 구분하기 위해선 우리에게 인증 팔찌를 채워주거나, 일지에 우리..