redhorse 9

[Backend] 정리 - 3

□ JSONField Test Case 이전 포스트에서 JSONField를 이용하여 2가지 형태를 이용했었습니다. Case 1 : { "data" : [ "취미 1", "취미 2", "취미 3"] } Case 2 : [ "취미 1", "취미 2", "취미 3"] 각각 테스트 케이스를 작성하여 발생했던 문제점을 보겠습니다. 테스트 케이스는 아래와 같이 작성되었습니다. (핵심 코드만 보기 위해 로그인이나 이런 부차적인 것들은 제외시켰습니다.) class UpdateProfileTestCase(APITestCase): def setUp(self): … def test_can_update_profile(self): data = { … "passions": {"data": ["축구", "야구"]}, } respo..

[Backend] 정리 - 2

□ Django User Model 이 부분은 사람마다 의견이 다를 것 같네요. 보통 장고에서 User Model 계획할 때, 3가지 방법을 사용합니다. 기존 User를 Foreign Key로 연결 (OneToOneField 이용) User 모델을 완전 새로 정의 (AbstractBaseUser 상속) User 모델에 필드 추가 (AbstractUser 상속) 제가 일하면서 들었던 조언 중 하나는 장고 프레임워크를 너무 변형시킬 경우, 다른 패키지(3rd party)를 이용할 때 문제 발생할 가능성이 높아진다. 최대한 프레임워크 기초를 건들지말고 있는 그대로 사용하는 것이 좋다. 라는 것이었습니다. 그래서 이 프로젝트도 OneToOneField를 이용하여 Profile 테이블을 만들었습니다. 이 부분에 ..

[Backend] 정리 - 1

앱별로 상세 설명을 진행하려고 하다가 큰 의미가 없는 것 같아서 프로젝트 진행하면서 기록하고 싶은 점이나 특징점을 쓰기로 하였습니다. □ TimeStampedModel class TimeStampedModel(models.Model): updated_datetime = models.DateTimeField(auto_now=True) created_datetime = models.DateTimeField(auto_now_add=True) class Meta: abstract = True 대부분의 모델에서 생성일과 수정일 필드는 존재하기 때문에 추상클래스 TimeStampedModel을 상속받아 모델들을 생성하였습니다. 추상클래스 TimeStampedModel을 상속받은 휴대폰인증 이력 모델 class Ph..

[Backend] env 환경변수

설명이 필요한 환경변수만을 나열하였습니다. □ ENV_MODE 셋팅 파일 이름 (ex: 'local', 'dev', 'prod') 이전 설명에서 배포환경에 따라 셋팅 파일들을 분리하였기 때문에 호출할 때도 동일하게 환경에 따라 다른 셋팅 파일을 호출해야합니다. manage.py, wsgi.py, asgi.py에 환경변수 셋팅하는 코드가 있으므로 매번 3개의 파일을 변경시켜주면 불편하니 'ENV_MODE'라는 환경변수를 만들어 3개 파일에 자동으로 적용시켜주는 방향으로 잡았습니다. □ ADMIN_URL 관리자 접속 URL은 누구나 접근할 수 없어야하므로 기본 /admin/ 주소 말고 별도의 다른 값(uuid와 같은)으로 지정해줍니다. □ BACKEND_DOMAIN ALLOWED_HOSTS에 등록할 백엔드 ..

[Backend] 프로젝트 환경셋팅

프로젝트 폴더 생성 $ mkdir redhorse $ cd redhorse 가상환경 생성 및 활성화 $ virtualenv venv $ . venv/bin/activate 이 프로젝트에서는 가상환경을 virtualenv로 사용하였습니다. 패키지 의존성 + 가상환경까지 관리 및 셋팅할 수 있는 pipenv 또는 poetry 사용을 고민했으나 virtualenv만 익숙하신 분들도 있기 때문에 virtualenv만을 사용하였습니다. Django 설치 및 프로젝트 생성 $ pip install django $ django-admin startproject redhorse . django-extensions 설치 $ pip install django-extensions 저는 두 가지를 목적으로 사용하였습니다. 1..

[Backend] DB 설계

뭔가 FM 방식으로 한다면 기능명세를 보고 분석하여 DB 모델링을 하겠지만 지금은 제가 기획자이자 설계자이니(^_^) 화면 설계 기준으로 보면 필요한 것을 대략적으로 알 수 있으므로 최종 필요한 테이블은 아래와 같이 되겠네요. 회원 계정 관련 테이블 - 회원 / User - 회원 휴대폰번호 / UserPhone - 프로필 / Profile - 프로필 사진 / ProfilePicture 채팅방 및 채팅메시지 테이블 - 채팅방 / ChatRoom - 채팅방 멤버 / ChatRoomMember - 채팅 메시지 / ChatMessage 기타 - (초기 회원가입 시) 휴대폰 인증 이력 / PhoneVerificationHistory - 매칭 / Match - (비밀번호 찾기를 위한) 임시 비밀번호 발급 이력 / ..

[Backend] 화면 설계

이용자 입장에서의 UI 흐름도는 틴더 화면을 참고하였습니다. 구글 프레젠테이션으로 간단하게 만들었지만 그래도 간단해서 이해하기는 쉬울(?)겁니다. 첫 화면은 가운데 말 사진과 함께 회원가입, 로그인 버튼이 있습니다. 로그인 버튼을 누를 경우, 로그인 페이지로 이동합니다. 첫 화면에서 회원가입 버튼을 누를 경우, 휴대폰 인증 화면으로 이동합니다. 여기서부터 회원가입 및 프로필 작성 절차입니다. 휴대폰 인증이 완료되면 아이디 비밀번호를 입력합니다. 회원가입이 끝나고 프로필 작성하기 전 환영인사 페이지입니다. Welcome~! 각종 개인정보를 입력하는 곳입니다. 사람들에게 노출시킬 닉네임부터 시작해서 MBTI도 넣어주었습니다. 처음에 화면 계획할 때, 조금만 넣으려고 했는데 넣다보니 조금 많아졌네요. 마지막 ..

Intro.

안녕하세요? 뼈빌런 블로그의 뼈빌런입니다. 직장에서 퇴사하고 작게나마 토이 프로젝트를 만들어서 관련하여 블로그 글을 써볼까 합니다. 다른 분들에게 도움이 되면 좋지만 저 역시 배웠던 내용도 정리할 겸 나중에 잊어버릴 경우, 다시 찾아보고 빠르게 이해하기도 좋구요. 진행한 프로젝트 대략적인 개요는 아래와 같습니다. 프로젝트명 : Red Horse (Backend) 분류 : 온라인 데이팅 언어 : Python 3.11 프레임워크 : Django 4.2 + Django Rest Framework 3.14 형상주소 : https://github.com/kimfame/redhorse 온라인 데이팅 서비스. 말이 은근 거창해서 부담스럽긴하나 간단하게 매칭해서 채팅방 만들어주는 서비스라고 보면 될 것 같네요. 대규모..