네이버 Expert를 모티브로 한 프로젝트 - 2차

hyo_·2021년 7월 4일
0

프로젝트

목록 보기
3/3
post-thumbnail

네이버 Expert 모티브로 한 프로젝트

🔅 프로젝트 정보🔅

✏  주제 : 네이버 expert 사이트만 보고, 기획/모델링 등을 진행
✏  개발 기간: 2021/06/21 ~ 2021/7/02
✏  개발 인원 : 프론트 2명/ 백엔드 3명
✏  github : https://github.com/hyo-jin-jeong/WeExpert-backend
✏  Scrum : 일주일 단위 sprint, 매일 아침 daliy meeting 진행

프로젝트 시연 영상

기술 스택

Front

  • HTML/CSS
  • JavaScript(ES6+)
  • React
  • React Router
  • Styled Component
  • Kakao API

Backend

  • Python 3.8
  • Django
  • Mysql
  • PyJWT
  • Kakao API
  • Docker

ETC

프로젝트 기능

✏   Kakao 소셜 로그인/회원가입 🙋‍♀️
✏   카테고리 별 상품, 카테고리 별 expert 목록
✏   목록 필터링
✏   상품 상세페이지
✏   결제
✏   expert 등록 🙋‍♀️

🖐 내가 구현하게 된 기능들

1. 소셜 로그인/회원가입

  1. 프론트에서 받아온 kakao api access_token으로 사용자 정보 요청
  2. 받아온 회원번호로 사용자 식별(존재하면 get, 없는 사용자면 create)
  3. database의 user id를 jwt를 사용하여 암호화(우리 서비스의 access_token 생성)
  4. response message와 함께 access_token return

2. expert 등록 기능

Category, Expert, HashTag, SellerInfo 등의 모델을 사용하여 expert 등록기능 구현.

Expert, SellerInfo, HashTag 세 개의 모델을 Create 하기 위해, Transaction 사용 -> django에서는 메소드 단위로 트랜잭션이 생성 되기 때문에 구문 단위로 나누어 주려면 atomic이 필요하다.

            with transaction.atomic():
                seller_info = SellerInfo.objects.create(
                    address      = data['seller_info']['address'],
                    phone_number = data['seller_info']['phone_number'],
                    email        = data['seller_info']['email']
                )
                expert = Expert.objects.create(
                    user_id      = user,
                    position_id  = data['position_id'],
                    seller_info  = seller_info,
                    introduction = data['introduction'],
                    image        = data['image'],
                    name         = data['name'],
                )
                category.expert.add(expert)
                hash_tags        = set(data['hash_tag'])
                hash_tag_objects = [HashTag(name = tag_name, expert = expert) for tag_name in hash_tags]
                HashTag.objects.bulk_create(hash_tag_objects)

django의 트랜잭션 구문을 만드는데 두 가지 방식이 있다.

  • 데코레이터를 사용한 방식 ➞ @transaction.atomic
  • with 구문을 통한 방식 ➞ with transaction.atomic()

두 방식의 차이점

@transaction.atomic
method 단위로 atomic이 생겨난다.

with transaction.atomic()
내가 원하는 부분만 atomic으로 지정 가능 하다.

공통점

  • 자동으로 rollback, commit이 된다.

일단 데코레이터, with 구문 두 방법 다 사용해보고 일부러 rollback 돼야 할 상황을 만들었다. with 구문은 자동으로 rollback 되었지만, 데코레이터 방식은 그렇지 않았다.
다시 처음부터 django 문서를 찾아본 결과 아래와 같은 답을 찾을 수 있었다.

내가 method 전체에 try, catch를 해주었기 때문에 django가 정상 종료로 판단하여 rollback 시키지 않았던 것이다.

다시한번 깨달았다. documentation 분석을 게을리하지 말자!!

이번 프로젝트를 통해 얻어간 점 ✍

문서 분석을 게을리하지 말자!!

바로 위에 말했던 것처럼 documentation 분석을 열심히 하자!

Unit test 중요성

프로젝트에 unit test를 제대로 적용해본 건 이번이 처음이었는데, API 테스트만 시행했을 때보다 좀 더 코드의 세세한 부분까지 신경 쓰게 되었다.(이렇게 하면 단위테스트 하기 편리할까..? 한 메소드에 너무 많은 기능을 담은건 아닐까?..등등 )
무엇보다 작성할 때는 시간이 좀 걸리지만 한번 작성해놓고 난 뒤 서버를 구동하지 않고도 실행해 볼 수 있는 점이 편리했다!( 코드 변경이 일어났을 때도 test 실행만 하면 되니 무엇이 잘못되었는지 파악하기 쉬웠던 것 같다. )

API documentation

1차 프로젝트 때도 프론트 분들과 end point, data 형식 등을 공유하긴 했었지만 Trello, notion 백엔드 끼리는 postman 이렇다 보니 처음부터 한번에 관리했었으면 좋았겠다! 라는 아쉬움이 있었다. 이번 2차 프로젝트에서는 처음부터 postman documentation 기능을 사용하여 팀원들과 함께 공유했는데, 확실히 한곳에 모아져 있으니 관리가 편해졌다!

마치며

2차 프로젝트는 중간중간 프로젝트 이외에 개인적인 여러 힘든일들이 많았지만, 끝까지 포기하지 않고 마무리해서 뿌듯하다! 2차 프로젝트를 통해서 소셜로그인 ,unit test, docker 등 여러 기술을 적용해 볼 수 있었고 다시 한번 전체적인 프로젝트 흐름을 익힐 수 있었다. 2달동안 고생많이 했고 남은 기업협업도 화이팅ㅎ

profile
🎓의지적인 삶을 살자!😊

0개의 댓글