DevCourse TIL Final Project #3 크롤링, Django API 서버

김태준·2023년 8월 14일
0

Data Enginnering DevCourse

목록 보기
85/93
post-thumbnail

✅ crawling 완료

드디어 만개의 레시피 사이트 내 모든 레시피 크롤링 작업하는 코드 작성 완료

최신순을 기준으로 모든 레시피들을 크롤링함에 있어 시간이 지남에 따라 html 코드가 변화하는 것을 발견하여 이를 일일이 에러 사항에 대해 처리하고 적용하는데 있어 시간이 조금 걸렸다.

스키마 구조는 다음과 같다.

  • 게시글 제목(요리제목) String
  • 게시글 대표 이미지 (요리 이미지) String
  • 게시글 조회수 Integer
  • n인분 용량 String
  • 조리시간 String
  • 난이도 String
  • 식재료 대분류 (재료, 양념, 육수 등등) String
  • 식재료 중분류 (재료명 + 단위(정량)) String
  • 레시피 (링크) String
  • 후기수 Integer
  • 댓글수 Integer

이어 작업할 내용은 다음과 같다.
현재 최종프로젝트의 전체 프레임워크를 살펴보면, 사용되는 데이터 소스는 총 3개로 식약처 API, 만개의 레시피 (크롤링), 유튜브 (채널 몇개에 한해 크롤링)

크롤링으로 읽어오는 데이터들에 한해 별도의 API 서버를 구축하는 것이 목표.
Django Rest Framework란 RESTful API 서버를 django 안에서 쉽게 구축하도록 돕는 오픈 소스 라이브러리이다.

RESTful이란 Representational Satate Transfer의 줄임말로 application 개발의 아키텍처 중 하나이다. 직역하면 대표 상태 전송. 또한, HTTP의 URL과 HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 API 사용 가독성을 높인 구조화된 시스템 아키텍처.

해당 라이브러리를 사용함으로써 우리는 하나의 URL로부터 GET(정보 읽기), POST(정보 추가), PUT(정보 업데이트), DELETE(정보 삭제) 등으로 수정을 확보하며 확장성이 보장된 URL 설계가 가능하다. +) 클라이언트/서버 구현 가능, 자바, c# 웹 등으로 클라이언트 제작

🎈 초기세팅

    1. 최종 프로젝트를 진행할 폴더와 project, app들을 만들어준다.
      이후 다음 코드를 실행한다.
# manage.py 실행
$ python manage.py runserver 
# makemigrations : 모델 변경사항 감지 및 기록
python manage.py makemigration
# migrate : 변경사항을 DB에 적용 (django의 경우 sqlite3)
python manage.py migrate
    1. 만들어둔 app의 models.py에 들어가 model 작성하기
from django.db import models
class Recipe(models.Model):
    food_name = models.CharField(max_length = 200)
    food_img = models.URLField(max_length = 200)
    views = models.IntegerField(default = 0)
    volume = models.CharField(max_length=30)
    timer = models.CharField(max_length=20)
    difficulty = models.CharField(max_length=20)
    ingredient_highlevel = models.CharField(max_length=10)
    ingredient_midlevel = models.TextField
    recipe_txt = models.URLField(max_length = 200)
    reviews = models.IntegerField(default = 0)
    comments = models.IntegerField(default = 0)

✍️ model에 들어가는 필드

  • CharField : 제한된 문자열 타입으로 max_length라는 최대 길이옵션 지정 (추가로, 이메일 주소 체크하는 EmailField, IP주소 체크하는 GenericIPAddressField, 콤마로 정수를 분리하는 CommaSeparatedIntegerField, 특정 폴더 파일 경로를 표현하는 FilePathField, URL을 표현하는 URLField등이 있다.
  • TextField : 대용량 문자열
  • IntegerField : 32비트 정수형 필드
  • BooleanField : true/false, null허용 원하면 NullBooleanField
  • DateTimeField : 날짜와 시간을 갖는 필드 (분리 원하면 Date / Time 별도 생성 가능)
  • DecimalField : 소숫점 갖는 필드
  • BinaryField : 바이너리 데이터 저장 필드
  • FileField : 파일 업로드 필드
  • ImageField : 이미지 파일인지 여부 체크
  • UUIDField : GUID 저장하는 필드

해당 필드들을 적용함으로써 DB에 테이블을 생성할 수 있다.

✍️ 이후 작업

serializers.py를 만들어 django model 데이터를 JSON타입으로 변경하고 viewset을 생성하여 Django 모델 데이터 내 기본적인 CRUD 작업을 진행할 수 있다. 추가로 router 즉, URL을 등록하여 작업을 진행한다.

🎈 DRF 사용 이유

일반적으로 Django만 사용하는 경우 DB에서 데이터를 꺼내오면 Queryset 형태로 데이터가 주어진다. 이는 백엔드 상에선 문제가 없지만, 타 프론트엔드와의 확장성을 고려한다면 JSON 타입의 데이터도 Serializer 기능을 통해 구현할 수 있는 DRF를 사용하면 된다.

profile
To be a DataScientist

0개의 댓글