<오늘 한 일/>
- 데일리 과제[Django 50문 50답]
- Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오
- SerializerMethodField()를 사용하면 모델에 필드가 있지 않아도 관련된 테이블에서 해당 정보를 계산해서 가져올 수 있습니다.
- 시리얼라이저에서 가져오고 싶은 정보를 담을 필드를 serializers.SerializerMethodField()로 선언 후, 해당 정보를 가져오도록 get_<필드명>(self, obj) 메서드를 정의합니다.
- 예를 들어, 작가 모델과 책 모델이 있고, 책 모델에 작가 필드가 작가 모델을 참조하는 외래키로 정의되어 있을 때, 작가의 정보 조회 시 해당 작가가 작성한 책 목록을 가져오고 싶은 경우, 작가 정보 조회에 쓰이는 시리얼라이저에 books = serializers.SerializerMethodField() 작성 후, get_books() 메서드를 책 객체에서 작가가 해당 작가와 같은 책들을 가져와서 반환하도록 정의하면 됩니다.
- Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오
- 2가지 방법을 알고 있습니다.
- SerializerMethodField(), 자식 시리얼라이저 활용입니다.
- 먼저 SerializerMethodField()를 사용해서 원하는 정보를 담을 필드를 정의합니다. 그리고 get_<필드명>() 메서드로 필요한 정보를 담을 수 있는 로직을 구현합니다. get_<필드명>() 메서드 파라미터로는 obj가 들어가며 obj는 해당 시리얼라이저가 참조하는 모델 객체를 가리킵니다. 해당 모델에 정의된 필드의 related_name을 활용하여 역참조할 수 있습니다.
- 다음은 자식 시리얼라이저 활용입니다. 책 모델과 작가 모델이 있을 때, 책 모델에 작가 필드를 외래키로 정의하고, 작가 모델을 참조한다면 작가 모델은 부모 모델, 책 모델은 자식 모델이 됩니다. 부모 모델에서 자식 모델을 참조하는 것을 역참조라고 합니다. 시리얼라이저도 마찬가지로 먼저 자식 시리얼라이저인 책 시리얼라이저를 정의한 후, 그 아래에 작가 시리얼라이저를 정의하면서 책 시리얼라이저를 참조하는 책 필드를 정의하면 됩니다. 그러면 작가 정보 조회 시 해당 작가가 쓴 책 목록이 함께 나옵니다.
- 과제 외 Django 50문 50답
- Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있습니까?
- 목적: Django는 웹 페이지 및 애플리케이션 구축을 목적으로 하며, 템플릿 시스템이 내장되어 화면 개발을 쉽게 해줍니다. 반면, DRF는 웹 API 개발을 목적으로 하며, 주로 다양한 클라이언트 애플리케이션(모바일, 프론트엔드, 다른 서버와 시스템)과 데이터를 교환하는 데 사용됩니다.
- 데이터 전달 형식: Django는 주로 HTML을 생산하여 사용자에게 정보를 전달하지만, DRF는 JSON, XML 등의 데이터 형식을 사용하여 클라이언트에 정보를 전달합니다.
- 인증 및 권한: 두 프레임워크 모두 인증 및 권한을 지원하지만, DRF는 처리를 위해 별도의 레이어를 제공합니다. 이를 통해 API 클라이언트에 대한 인증 및 권한 관리가 더욱 세분화되고 효율적입니다.
- HTTP Method: Django는 HTTP 요청에 대한 처리가 주로 뷰에 의존하지만, DRF는 HTTP 메소드(GET, POST, PUT, DELETE 등)에 따라 각각의 액션을 처리하는 클래스 기반 뷰를 지원합니다. 이로 인해 코드 구조가 더욱 명확해지고 유지 보수가 쉽습니다.
- DRF Serializer는 무엇이며, 어떤 기능을 수행합니까?
- Django Rest Framework (DRF)의 Serializer는 주로 두 가지 기능을 수행합니다.
- 데이터 변환: Serializer는 클라이언트와 서버 간에 주고받은 데이터를 변환하는 역할을 합니다. 일반적으로 서버에서 반환되는 데이터는 파이썬 객체(예: 모델 인스턴스 등)이며, 이것을 JSON, XML 등의 형태로 바꾸어 클라이언트에 전달하기 위해 사용됩니다. 이러한 변환 과정을 "직렬화(Serialization)"라 합니다. 반대로 클라이언트가 보낸 데이터를 서버에서 처리할 수 있는 파이썬 객체로 변환할 때도 Serializer를 사용하며, 이 과정을 "역직렬화(Deserialization)"라 합니다.
- 데이터 유효성 검사: Serializer를 사용하면 클라이언트에서 받은 데이터의 유효성을 검사할 수 있습니다. 예를 들어, 데이터의 타입, 길이, 값 범위 등을 확인하여, 유효하지 않은 데이터의 경우 오류 메시지를 반환할 수 있습니다. 이렇게 하면 서버에서 데이터에 대한 처리가 안전하고 효율적으로 이루어질 수 있습니다.
- CPU 아키텍처(출처)
- 대표적인 CPU 제조 회사: Intel, AMD, ARM
- x86: Intel 기반 32bit CPU, 현존하는 대부분의 PC가 x86 아키텍처를 지원함, Windows, Mac OS, Linux 등
- x86_64(amd64): Intel 기반 64bit CPU, AMD에서 만듦, x86과 호환됨, Windows, Mac OS, Linux 등
- arm: arm 기반 32bit CPU, x86과 호환 안 됨, Mac OS, Linux, Android, iOS, 기타 소형기기
- arm (arm64/v8): arm 기반 64bit CPU. 32bit arm과 호환됨, Mac OS, Linux, Android, iOS, 기타 소형기기
- arm cpu는 초반에 저렴하고 저전력을 소모해 소형기기에서 많이 활용됨. 지금은 pc 수준의 속도를 낼 수 있음. 삼성 핸드폰의 엑시노스가 arm cpu임
- Grabiton: AWS에서 자체 개발한 arm CPU로 만든 서버 인스턴스
- M1 Mac: Apple이 자체 개발한 arm 기반 CPU인 M1칩이 들어간 Mac 노트북
- 누구든 ARM을 기반으로 커스텀한 칩을 팔아도 됨
- arm 서버 환경에서 intel 기반 서버에서 빌드된 라이브러리를 사용하려면 애뮬레이터를 사용하면 됨
- 일종의 번역기인데, 그렇게 사용하면 프로그램 성능이 떨어짐
- 결론: 내가 사용하고자 하는 라이브러리가 어떤 서버를 기반으로 빌드되었는지 알아야 하고, 내가 지금 어떤 cpu 서버를 사용하는지 알고, 그에 맞는 라이브러리를 찾아 써야 함
- 프로젝트 코드 수정
수정하는 이유
- Django 50문 50답을 채우면서 찾아보다가 StringRelatedField()에 대해 알게 됐다. 이제 안 건 아니고 DRF 초반에 배울 때 이런 필드도 있다~ 하고 배우긴 했었는데 실제 프로젝트에 적용을 한 번도 안 했었다
- 그동안 게시글 조회 시 작성자를 SerializerMethodField()를 이용해서 닉네임을 가져왔었는데, 그러려면 get_user() 메서드도 정의해서 써야 했었다.
- 근데 찾아보니 StringRelatedField를 쓰면 한 줄로 가능하다는 거다..!!
- 그래서 그동안의 프로젝트에서 그 부분을 다 수정하고자 한다!
수정된 코드
<느낀 점/>
- 갈 길이 멀다
<내일 목표/>
- 알고리즘 문제 풀이
- 이력서 수정
- 기업 3군데 지원