전체 글 121

[DRF] 게시판 기능(CRUD) 구현하기

이전에 ViewSets을 하면서 models.py에 아래와 같이 title과 body field를 생성했었다. from django.db import models from django.conf import settings # Create your models here. class Blog(models.Model): title = models.CharField(max_length=100) body = models.TextField() 하지만 블로그에는 이보다 더 많은 기능이 필요하기 때문에 기능을 더 추가하는 코드를 작성해보고자 한다. 게시글의 id값, 제목, 작성일, 작성자, 본문을 추가하는 코드는 다음과 같다. ✅ models.py from django.db import models from djang..

Python/DRF 2023.01.17

추상클래스(Abstract)와 인터페이스(Interface)의 공통점과 차이점

✅ 추상 클래스 - 객체들의 공통 특성들을 모아놓은 클래스 추상 클래스는 여러 자식들이 가지고 있는 공통된 속성들을 뽑아서 하나의 클래스를 만들어 놓은 것을 뜻한다. 그래서 하위 클래스에서도 extends(상속)이라는 키워드를 사용하여 이 추상 클래스를 상속받아 객체를 구체화시켜간다. 이때 상속의 의미는 ~의 한 종류 라는 의미를 가지게 된다. 추상 클래스는 클래스라는 이름에서 알 수 있듯 엄연한 객체이다. 단독으로 생성하지는 못하지만 객체이기에 생성자도 사용할 수 있다. abstract class 클래스이름 { public abstract void 메서드이름(); } 🔎 추상 클래스 정리 추상클래스는 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스 추상클래스는 다중 상속이 불가능하여 단일 상속만..

Computer Science 2023.01.15

[DRF] 커스텀 유저 구현하기(회원가입/로그인)

Django에서는 기본적으로 사용자 모델인 User 모델을 제공하고 있다. 하지만 임의로 원하는 필드(Nickname, birthday 등)을 가진 사용자 모델을 사용하기 위해서는 custom user 모델을 구현해야 한다. custom user 모델을 구현하기 위해서는 BaseUserManager과 AbstractBaseUser 클래스를 상속받아서 새롭게 구현해야 한다. 여기에서 BaseUserManager는 유저를 생성하는 역할을 하는 헬퍼 클래스이고, AbstractBaseUser는 실제 모델이 상속받아 생성하는 클래스이다. 유저생성을 위해 accounts라는 이름의 앱을 생성해준다. python manage.py startapp accounts ✅ settings.py 앱을 생성 후 setting..

Python/DRF 2023.01.14

깃(Git)과 깃허브(Github)

✅ 버전 관리(Version Control System) 깃과 깃허브의 차이점에 대해 알아보기 전에 버전 관리에 대해서 간단하게 살펴볼 필요성이 있다. 버전 관리란 시간에 따라 파일의 변경사항을 추적하고 기록하는 것이다. 버전 관리 시스템은 이전 버전으로 복구하거나 조회할 수 있는 기능을 제공한다. 버전 관리는 프로젝트의 수정이 있을 때마다 snapshot을 찍는다. 따라서 필요한 것을 복구하거나 비교할 때 다양한 버전들을 확인할 수 있다. 만약에 프로젝트를 하다가 코드가 망가졌다고 하더라도 버전 관리 시스템을 통해 이전 버전을 불러오고 잘못된 부분을 바로잡으면 된다. ✅ Git Git은 '본인'의 코드와 이력을 기록하고 관리하도록 돕는 버전 관리 시스템(VCS)이다. Git은 클라우드가 아닌 본인의 로..

Computer Science 2023.01.13

[DRF] Generic CBV로 CRUD 구현하기

APIView와 Mixins를 사용한 CRUD는 불필요한 중복이 발생했었다. 이번에는 Generic CBV (Class Based Views)의 상속을 통해 코드의 중복을 좀 더 줄여보고자 한다. ✅ models.py from django.db import models from django.conf import settings # Create your models here. class Blog(models.Model): title = models.CharField(max_length=100) body = models.TextField() 이전에 사용했던 모델과 동일하게 만들어준다. ✅ serializers.py from .models import Blog from rest_framework import ..

Python/DRF 2023.01.12

[DRF] APIView로 CRUD 구현하기

APIview의 기본적인 골격은 아래와 같다. class Class_name(APIView): def method_name(self, request, format=None): # 해당 HTTP method를 어떻게 동작시킬지 정의 method_name으로는 HTTP method인 get, post, delete 등이 존재한다. APIView를 상속 받아서 원하는 기능을 구현하기 위한 HTTP method를 구현하면 된다. ✅ models.py from django.db import models from django.conf import settings # Create your models here. class Blog(models.Model): title = models.CharField(max_leng..

Python/DRF 2023.01.12

[DATABASE] Transaction과 ACID

✅ 트랜잭션(Transaction) 트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료된다. 만약 하나의 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 이 트랜잭션에 속한 모든 작업을 실패한 것으로 판단한다. 다시 말해 작업이 하나라도 실패를 하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공이다. 즉 트랜잭션은 성공 또는 실패라는 두 개의 결과만 존재한다. 계좌이체를 예를 들면, A에게 10만원을 보내면 나의 계좌에서 10만원을 뺴고, A의 계좌에 10만원을 추가하는 종합적인 과정이 트랜잭션이다. 만약 내 계좌에서 10만원이 빠졌는데, A의 계좌..

Computer Science 2023.01.12

SOLID란? 객체지향 설계 5원칙(Python)

✅ SOLID란? SOLID란 로버트 마틴이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙을 마이클 페더스가 원칙의 앞 글자를 따서 다시 SOLID라는 이름으로 소개했다. SOLID의 5대 원칙은 다음과 같다. 단일 책임 원칙(Single responsibility principle) : SRP 개방 폐쇄 원칙(Open/closed principle) : OCP 리스코프 치환 원칙(Liskov substitution principle) : LSP 인터페이스 분리 원칙(Interface segregation principle) : ISP 의존관계 역전 원칙(Dependency inversion principle) : DIP ✅ 1.SRP (Single Responsibility) 단..

Computer Science 2023.01.11
728x90