instargram API 만들기 후기(Django)

gandalfzzing·2020년 5월 31일
0

wecode

목록 보기
6/8

2주 전에 마지막 리뷰를 받고 중단했었는데, 이제서야 올리게 되었다.
구현 부분은 아래와 같다.

-회원가입 기능
-로그인 기능
-POST 작성 기능
-LIKE 기능
-댓글 기능
-자기 Page 보여주는 기능
-로그인 안 했을 때에 랜덤 유저 POST 몇 가지 보여주기
-모바일 환경처럼 자기 Page를 사진형태만 주기
-사진 형태에서 POST 클릭시 URL로 ID값 받아서 해당 POST와 관련 내용 보내주기

진행하면서 배운점

-JSON을 어떻게 뽑아내는지
-Model이 안좋으면 View에서 고생한다.
-어떻게 URL에서 원하는 값을 받아 낼 수 있는지 (str and int)
-jwt를 이용한 token 생성 및 검증
-bcrypt를 이용한 password hash 암호화 하여 저장 및 검증
-전반적인 REST API의 구성과 View 비지니스 로직 만들기
-2번 이상 같거나 쓸 수 있는 로직은 함수로 따로 구현해봄

진행하면서 못한 점

-효율적이지 못한 Query 조작
-간결하지 못한 코드 구성
-완성하지 못한 Full API 기능
-유저 인증을 데코레이터로 안하고 일반 프로그래밍언어 처럼 함수로 사용했음

  • 사용한 대표적인지 못한 효율적인지 못한 Query 조작 코드
def show_content(content, num):
    content_info = []
    username = []
    content_list = []
    image_url = []
    comment_info = []
    like_count = []
    content_info.append(content)
    comment_count = []
    #랜던 넘버를 뽑고, 그에 해당하는 랜덤 넘버 ID에 해당 컨텐츠를 뽑아 두개 전부를 인자로 넘겨준다. 

    username += User.objects.filter(pk=content['user']).values('username', 'avartar')
    image_url.append(list(CONTENT_MODEL.Photo.objects.filter(content=num).values('image_file')))
    comment_user_id  = list(CONTENT_MODEL.Comments.objects.filter(content=num).values('user'))
    comment = list(CONTENT_MODEL.Comments.objects.filter(content=num).values('comment', 'user'))
    like_count.append(CONTENT_MODEL.Like.objects.filter(content=num, isLike=True).count())
    comment_count.append(CONTENT_MODEL.Comments.objects.filter(content=num).count())
    if len(comment) != 0:
        for i in range(len(comment_user_id)):
            if i == len(comment_user_id):
                break 
            i -= 1
            user_id_box = comment_user_id[i]['user']
            comment_user = User.objects.filter(pk=user_id_box).values('username', 'avartar')
            comment[i]['user'] = comment_user[0]['username']
            comment[i]['avartar'] = comment_user[0]['avartar']
            comment_info.append(list(comment))
    for i in range(len(content_info)):
        if i == len(content_info):
            break 
        i -= 1
        print(content_info[i])
        content_info[i]['user_name'] = username[i]['username']
        content_info[i]['user_avartar'] = username[i]['avartar']
        if len(comment) != 0: 
            content_info[i]['comment'] = comment_info[i]
            content_info[i]['comment_count'] = comment_count[i]
        content_info[i]['images'] = image_url[i]
        content_info[i]['like'] = like_count[i]
        dicts = {
                 'content': content_info[i],
                        }
        content_list.append(dicts)

    return content_list
    
    # 이렇게 효율적이지 못하게 하드코딩으로 전부 각각 필요한 내용들을 뽑아서 다시 하나로 깔끔하게 합쳐서 Json으로 넘겨줬다.

3번의 코드리뷰를 받았는데 2번의 코드 리뷰는 반영되었지만 프론트와의 협업이 있게 되어 어쩔 수 없이 API도 수정하고 추가되는 부분도 있었고 마지막 리뷰는 반영도 못했다.
나의 API를 프론트가 연결해보는 시간이였는데 이미 내가 구성한 API보다는, 프론트단에서 이용하려는 API의 기능이 적었고, 또 프론트의 화면에 맞추어 다시 유저 Page내역을 JSON으로 뽑아내야 했다.

지금은 1차 프로젝트로 E커머스 사이트를 만들고 있는데 예전보다 Model를 구성하는 법, View 로직에서의 query 조작이 능숙해졌고, 덕분에 더 간결할 코드 구성이 되었다. 혼자 인스타그램 API를 만들 때에는 역참조, 참조 기능을 제대로 활용하지 못했고 지능형 리스트와 제너레이터 표현식을 쓰지 못했다.

아래는 해당 프로젝트의 대한 깃헙 주소다.
https://github.com/JCSong-89/Django-westar

현재 1주차가 지난 1차 프로젝트에서 구현한 기능은 다음과 같다.

  • 로그인
  • 회원가입
  • 쿼리스트링을 추출하여 결과값과 해당 검색 결과들을 리턴하는 검색어 기능
  • 전체 product 페이지에 존재하는 item과 그 내역을 Json으로 리턴
  • product에서 해당 아이템 클릭시 상세 페이지로 가는데, URL로 PK를 받아 그에 대한 Json 리턴
  • Story라는 페이지의 Json과 상세 Story의 HTML을 Json으로 리턴
  • AWS RDB를 이용하여 연결
  • 로그인 인증 토큰 검증

다음 주차 구현할 기능

  • 카카오, 깃헙 소셜 로그인 및 회원가입 기능
  • 자동 Email 전송 기능
  • 주소록 추가 기능
  • 장바구니 기능
  • 주문 및 주문조회 기능

0개의 댓글