[2차 프로젝트] - 3일차

Kiyong Lee·2021년 10월 20일
0

2차프로젝트

목록 보기
3/8

[2차 프로젝트] - 3일차

RDS를 재부팅중 쓰는 글입니다

고등학교 1학년부터 군대 전역할 때까지 (거의) 매일 일기를 썼는데

오랜만에 그 때로 돌아간 기분이 듭니다

오늘 해야 했던 일은 총 4개입니다.

  1. DB 설계도에 맞는 models.py 작성
  2. faker library를 이용한 db_uploader.py 작성
  3. EC2로 만든 퍼블릭IP 장고에 적용
  4. 카카오 로그인 읽어보기

추가로 팀원들의 궁금증(?) 해결까지

1. models.py 작성

정확히 말하면 models.py는 모델링 종료 후 바로 PR을 올렸는데

멘토님과 의견을 나눌(?) 부분이 생겨서 아직 OK가 안됐기 때문입니다.

한 유저가 여러 책에 별점을 줄 수 있고, 한 책은 여러 유저에게 별점을 받으므로

다대다 관계가 성립하여, ManyToMany가 되는데 이 부분에 대한 이야기였습니다.

하지만 제가 생각했을 때, 책은 유저가 아닌 작가들이 쓰는 것이기 때문에

직접적으로 연결할 고리가 없었습니다.

저 또한 ManyToMany에 대해 겉핥기 식으로만 알고 있기 때문에, 다룰 수 있을 때 해보면

좋다고 생각해서, 멘토님께 책-작가 관계는 중간 테이블을 만들 수 있으니

그렇게 관리해보겠다고 했습니다.

class Book(TimeStampModel) :
   ...
   author        = models.ManyToManyField(Author, through='BookAuthor', related_name='book_author')
   ...  
    class Meta :
        db_table = 'books'

class BookAuthor(TimeStampModel) :
    book   = models.ForeignKey(Book, on_delete=models.CASCADE)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

그래서 책-작가 사이에 ManyToMany 관계로 인해 중간 테이블이 생겨 관리하게 되었습니다.


2. db_uploader.py

1차 때도 데이터 생성을 제가 했는데, csv파일로 엄청 노가다했었던.. 기억이 납니다.

이번엔 faker 라이브러리를 사용해보려고 했습니다

import os
import django
import sys

os.environ.setdefault("DJANGO_SETTINGS_MODULE","ridibooksl.settings")

django.setup()

from products.models import *
from faker import Faker

from django.db import transaction

#fake = Faker('ko_KR')
fake = Faker()

#카테고리 리스트
category_list = ['한국소설', '영미소설']

#메뉴/카테고리/작가/출판사/썸네일
with transaction.atomic() :
    # Menu(
    #     name='소설'
    # ).save()

    # for i in category_list :
    #     Category(
    #         menu_id = 1,
    #         name = i
    #     ).save()
    
    author_list = [Author(name=fake.name(), country=fake.country(), birthdate=fake.date_of_birth(minimum_age=30, maximum_age=65)) for i in range(15)]
    Author.objects.bulk_create(author_list)

    # publisher_list = [Publisher(name = fake.company()+' 출판사') for i in range(5)]
    # Publisher.objects.bulk_create(publisher_list)

    # thumbnail_list = [Thumbnail(image_url=fake.image_url()) for i in range(30)]
    # Thumbnail.objects.bulk_create(thumbnail_list)
'''
1. 한국소설 생성 시 14번째 줄의 ko_kr / 영미소설 시 ko_kr 제거
2. 한국소설 생성 시, 국적은 한국으로 통일 / 외국소설은 fake.country()
'''

bulk_create 개굿!

이런식으로 faker 라이브러리를 install 후, import하여 데이터들을 생성했습니다.

맘같아선 한 번에 생성하고 싶었는데, 생각보다 세세하게 나뉘는 게 많았던 게 아쉬웠습니다.

아마 더 효율적이게 데이터를 추가할 방법이 있을텐데, 실력이 많이 부족하네용


BooRok..

RDS에 처음에 저장했을 때 한글이 계속 ??로 나왔었습니다

분명히 나는 파라미터그룹에서 설정 다 해줬고, 파라미터그룹도 utf8mb4 이렇게

잘 나왔는데! 구글에서 alter database .. 어쩌구 하는 명령어도 다 해봤는데

서버도 껐다켜도, 새로 데이터를 등록해도 ???로 나왔습니다

저에겐 정말 ??? 하는 상황이었죠

그래서 큰 맘먹고 인스턴스 삭제 후 다시 생성하려고 삭제를 누른 뒤, 기다리는 중에..

제 인스턴스의 파라미터 그룹이 제가 만든 그룹이 아니라 디폴트 그룹으로 되어있더군요?

아.. 디폴트그룹의 변수를 내가 만든 파라미터그룹의 변수로 바꿔주면 되는데

이미 삭제는 된 상태라서 너무 슬펐습니다

이거 때매도 2시간 정도 쓴 거 같은데 ㅎㅎ


3. EC2 장고에 적용

첫 이미지엔 RDS 재부팅과 연관이 있습니다..

어제 키페어랑 우분투로 접속까지는 완료했고, 우분투에서 서버를 키면 됐었습니다.

그런데..

django.db.utils.OperationalError
: (2003, "Can't connect to MySQL server on 
'ridibooksl.cc3p5ig8chi6.ap-northeast-2.rds.amazonaws.com' (timed out)")

계속 타임아웃됐다고 떠서, 보안그룹도 바꿔보고 변수도 바꿔보고 다 했는데도

그대로라서 재부팅까지.. 하고 있는 상황입니다 ㅠㅠ

글쓰는 지금까지도 재부팅중이네용..


4. 카카오 로그인

돌아가는 방향은 얼추 이해했고, 애플리케이션 생성 후 REST API KEY와 REDIRECT URI는
프론트 담당 팀원에게 전달했습니다.

다만, 127.0.0.1이 아닌 EC2의 퍼블릭IP로 줘서 만약 3번 오류를 해결하지 못 하면
REDIRECT URI를 바꿔야 하는 귀찮음이..

내일 꼭 서버해결하고, 카카오 로그인 성공해서 소켓해보고 싶네용 ^0^

profile
ISTJ인 K-개발자

0개의 댓글