테스트 기반 개발과 테스트
2023. 5. 1. 21:45
Python/Django
취업 공고를 찾아보면 테스트 코드를 써본 경험이 있는 사람, 테스트 기반 개발에 익숙한 사람... 과 같은 문구를 우대사항에 쉽게 찾아볼 수 있는데, 이것이 무엇인지 또 왜 중요한지 알아보면서 drf에서는 어떻게 쓰는지 간단히 정리하고자 한다. 우선 테스트 기반 개발(TDD)은 소프트웨어 개발 방법론 중 하나로, 코드 작성에 앞서 테스트 케이스를 먼저 작성하고 이를 통과하는 실제 코드를 구현하는 방식이다. TDD는 다음과 같은 과정을 거친다: 실패하는 테스트 작성: 새로운 기능이나 수정이 필요한 기능에 대해 실패하는 테스트 케이스를 작성한다. 이 단계에서는 아직 해당 기능을 구현하지 않았기 때문에 테스트는 실패할 것이다. 테스트 통과를 위한 코드 작성: 작성한 테스트가 통과할 수 있도록 최소한의 코드를 ..
DRF serializer 추가) nested field, method field
2023. 4. 24. 20:26
Python/Django
지난 글에서 Serializer의 기본 개념을 다루었으나, 이번 글에서는 실제 프로젝트에서 모델 간의 관계가 복잡하고, 요구사항이 다양한 경우에 대처하기 위한 고급 기능을 소개하고자 한다. 이에 대해 Nested fields와 Method fields라는 두 가지 방법을 활용하여 Serializer를 더욱 풍부하고 유연하게 만드는 방법을 알아볼 것이다. 1. Nested Field. Nested field는 하나의 serializer 안에 다른 serializer를 중첩하여 포함하는 것을 말한다. 이를 통해 여러 개의 작은 serializer를 사용하여 하나의 통합된 serializer를 구성할 수 있다. from rest_framework import serializers from .models imp..
DRF : ModelViewSet
2023. 4. 23. 21:56
Python/Django
앞선 포스트에서 api view들을 다시 압축한 modelviewset 이 있음을 미리 밝혔는데, 오늘은 이 modelviewset에 대해서 자세히 해보는 시간을 가지고 싶다. https://scarlet0star.tistory.com/49 django : generic view django에서 가장 편한 기능을 꼽으라고 한다면 그 중 하나는 나는 generic views 라고 말하고 싶다. generic views는 웹개발시 사용되는 반복되는 패턴을 쉽게 처리할 수 있도록 미리 클래스를 만들어둔거 scarlet0star.tistory.com https://scarlet0star.tistory.com/58 DRF : Serializer 우리는 Representational State Transfer (R..
DRF : Serializer
2023. 4. 23. 21:25
Python/Django
우리는 Representational State Transfer (REST)의 개념을 이해하면서, RESTful한 웹 어플리케이션을 만들기 위하여 서버와 클라이언트를 분리해야 함을 깨달았다. 서버와 클라이언트는 Application Programming Interface (API)를 통해 데이터를 통신한다. 서버에서는 API를 통해 데이터를 처리하여 전송하고 클라이언트는 이를 사용자에게 적절한 형태로 출력하거나 입력받는다. 이러한 연결고리에서 데이터는 JSON, XML 같은 웹에서 교환하기 쉬운 형태로 주고 받는 것이 좋다. 이것이 Serializer가 필요한 이유이다. Django를 생각해보면, Django는 모델과 QuerySet이라는 복잡한 객체로 데이터를 주고 받기 때문에 웹에 전송하기에는 많은 ..
django : generic view
2023. 4. 17. 10:59
Python/Django
django에서 가장 편한 기능을 꼽으라고 한다면 그 중 하나는 나는 generic views 라고 말하고 싶다. generic views는 웹개발시 사용되는 반복되는 패턴을 쉽게 처리할 수 있도록 미리 클래스를 만들어둔거고 이를 상속받아 사용하면 짧은 코드로 설정을 빠르고 쉽게 웹페이지를 만들 수 있는 것이 특징이다. TemplateView: 특정 템플릿을 렌더링하는 데 사용 ListView: 데이터베이스에서 객체 목록을 가져와 렌더 DetailView: 데이터베이스에서 단일 객체를 가져와 렌더 CreateView: 새로운 객체를 생성하고 저장한 후, 성공 시 리디렉션 UpdateView: 기존 객체를 수정하고 저장한 후, 성공 시 리디렉션 DeleteView: 객체를 삭제한 후, 성공 시 리디렉션 F..
django : Signal
2023. 4. 17. 04:47
Python/Django
시그널이란 것을 접하게 된 것은 참 우연찮은 기회인데, 구글 소셜 로그인을 사용하려고 시도했을 당시에 소셜 계정이 생성되는 것은 확인했으나 관련된 모델 인스턴스가 생성되지 않아 어떻게 할지 방법을 찾기 위해서였다. User 모델에 소셜 계정의 정보가 담기긴 했지만, User 모델 생성시 실행되는 save() 메서드가 호출되지 않아 Profile 모델이 생성되지 않았는데 이유는 잘 모르겠지만 allauth 와 같은 모듈에서 소셜 계정 생성시 User 모델의 save() 메서드를 직접 호출하지 않는다고 판단했다. 그때 찾은 방법이 signal 이었다. signal는 디자인 패턴의 옵저버 패턴을 따른다고 한다. 시그널이 좋은 점은 각 컴포넌트들이 이벤트나 변경 사항을 서로에게 통보하기 때문에 느슨하게 코드를 ..
Django : 역참조, queryset
2023. 4. 7. 00:18
Python/Django
python Django를 쓰는 좋은 이유중 하나는 아마 Django의 강력한 ORM(Object Relational Mapping) 덕분도 있을 것이다. 나도 자세히는 모르고 그냥 그렇구나라고 알고만 있었지만 직접 검색해보니 내가 알고 있던 것 이상으로 Django는 개발자에게 유용했다. 이번 글을 통해 Django의 강점인 QuerySet과 관련 구문에 대해서 정리하고 그 장점들을 남겨볼까한다. 모델 클래스,필드를 통한 관계, 마이그레이션, 나도 잘 모르는 매니저 등등 다양한 Django ORM 요소들이 있다. 그렇지만 특히 쿼리셋과 관련된 구문은 이전에 이 구문들을 활용했으면 가독성을 증가시키고 코드를 더 짧게 쓸 수 있었을텐데.. 라는 생각이 먼저 들정도로 다양하고 강력한 기능들을 지녔다. 1. ..

나의 첫 Django Project : community - 5 -
2023. 3. 23. 20:46
Python/Django
솔직히 말하자면 여기서 부터는 내가 한 것이 거의 없다. 남이 만든 코드들을 보면서 내용을 추론하고 기여붙인 것 밖에 없다. 이게 정상적인 과정인지도 잘 모르고, 무슨 일이 일어날지 모른다. 다만 작동 자체는 문제 없었다. 미리 보여주는 최종 디렉토리 구성. django project와 mysql, nginx를 각각 분리하였고, docker-compose.yml은 최상위 디렉토리에, Dockerfile은 각 디렉토리에 배치했다. db 폴더속에 .env는 db 연결시 필요한 계정 정보를 분리한 것이다. nginx 폴더에 있는 두 .conf 파일은 서버 설정을 위해 작성한 것이다. 프로젝트를 만들 당시에 이게 무슨 의미일지 알아볼 생각도 못했으나 지금은 이해할 수 있는 범위까지 무슨 의미인지 살펴볼 것이다...