프로젝트 - Pinterest clone

KDG·2020년 7월 19일
4

핀터레스트 클론 프로젝트

핀터레스트(Pinterest)는 이용자가 스크랩하고자 하는 이미지를 포스팅하고 다른 이용자와 공유하는 소셜 네트워크 서비스이다.
핀터레스트의 가장 큰 특징은 이미지 보드에 핀으로 사진을 꽂는 것과 비슷한 개념으로 이미지 파일을 모으고 관리할 수 있다는 점이다. 사이트의 특징을 최대한 살려 클론을 2020.07.06 ~ 2020.07.17 약 2주간 진행했다.

프론트엔드 3명, 백엔드 3명으로 구성되었고, 나는 백엔드 중 한명이었다.

적용 기술

  • Python
  • Django
  • Beautifulsoup, Selenium
  • Bcrypt, JWT
  • MySQL
  • Unittest
  • AWS S3
  • Git, Github

모델링

팀원들과 함께 모델링을 짰는데 1차때보다 수월했고, 생각보다 쉽게 짜여서 뭔가 잘못됐을거라는 의문점을 가졌는데 처음 짠 모델링으로 큰 변화없이 프로젝트를 마쳤다.👏👏

구현한 기능

프로젝트에서 account, board_pin, main_page 세 부분으로 구성했다. main_page는 원래 사진이랑 타이틀 데이터를 우리가 관리하려고 만들었는데 시간적인 문제와 프론트엔드에서 데이터를 굳이 관리할 필요 없을 것 같다해서 구현하지 않았다.

  • Account

    • 유저정보저장
    • 회원가입 / 로그인
      • 회원가입시 유효성 검사
      • 회원가입시 패스워드 암호화
      • 로그인시 JWT Access 토큰 발행
    • 로그인 상태인지 확인하는 데코레이터 함수
    • 카카오톡 소셜 로그인 기능 구현
    • 관심사 저장하는 기능 구현
    • unittest
  • Boardpin

    • 마이페이지 계정 정보 보여주는 기능 구현
    • 마이페이지 저장한 보드 정보 보여주는 기능 구현
    • 마이페이지 저장한 핀 정보 보여주는 기능 구현
    • 선택한 관심사 사진을 메인 페이지에 리스트하는 기능 구현
    • 선택한 관심사의 이미지를 랜덤으로 전송하는 기능 구현
    • 핀 상세 페이지 구현
    • 보드 생성 기능 구현
    • 핀 생성 기능 구현
    • 핀 생성 시 원하는 이미지 파일을 선택해 AWS S3로 이미지 업로드 기능 구현
    • unittest

프로젝트에서 맡은 역할

1차에서 로그인 부분을 맡아서 2차에는 로그인 부분을 하지않았고, 다른 기능에 집중했다.

  • 모델링
  • 데이터 크롤링
  • DB 업로더 제작
  • 마이페이지 계정 정보 보여주는 기능 구현
  • 마이페이지 저장한 보드 정보 보여주는 기능 구현
  • 마이페이지 저장한 핀 정보 보여주는 기능 구현
  • 핀 상세 페이지 구현
  • 핀 생성 기능 구현(AWS S3를 이용한 이미지 업로드 포함)
  • Unittest

기록하고 싶은 코드/함수/로직

1차 때 사용한 코드를 기반으로 안써본 코드를 사용하고 싶었는데 시간에 쫓기느라 완전 새로운 코드를 많이 사용하진 못했다.😭

1. 리스트가 아닌 딕셔너리 형태로 전달


이 부분은 정말 기본적인 건데 1차때부터 프론트에서 리스트에다가 딕셔너리 형태로 담아서 줘라 해서 당연히 그렇게 보내줘야하는지 알았다. 그런데 이번에 보내는 정보가 하나 씩이니 굳이 리스트에 담아서 보내지말고 딕셔너리 형태만 보내면 된다고 했다.😱

그 말을 듣고 생각해보니 너무 당연한 얘기고, 기본기가 확실히 부족하다는 느낌을 받았다. 기본기가 중요하다는 것을 다시 일깨워준 코드여서 기억에 남는다.

2. 로그인 확인 데코레이터 함수


로그인 확인하는 데코레이터 함수는 정말 보면 볼수록 신기했다. 로그인 데코레이터 함수가 토큰을 가지고 있는것을 확인하고, 없으면 알아서 걸러 다음 기능을 못하게 막는다. 그리고 있는 것이 확인되면 토큰을 디코드해서 db에 있는것과 확인하고 그 정보에관한 데이터를 뿌려준다. 저렇게 되면 url이 길어지지도 않고 querystring 형태로 쓸 필요도 없어진다. 정말 간편했고, 아직도 신기하다.👍

3. 이미지업로드

이 부분은 갓준수님의 도움을 굉장히 많이 받았다. 만약 준수님의 도움이 없었으면 이 기능을 구현 못했을지도 모른다. 갓준수님 감사합니다!!!😍😍😍

프론트랑 맞춰서 이미지를 DB에 저장하게 되면 db에는 이미지 url형태로 들어오지 않는다고 한다. 그렇기때문에 AWS S3로 한번 저장하고 DB에 저장하는 방식을 사용했는데 boto3를 임포트하고 AWS 키와 S3 버킷을 받아와 사용한다.

처음에는 이미지가 저장되는 url을 AWS서버 주소 + 사진 이름으로 했는데 사진이름이 한글이면 S3에 인코드되어 저장되고 DB에는 한글 그대로 저장되어 이미지가 깨졌다. 그래서 시간으로 저장했더니 이미지url이 깔끔하게 잘 들어갔다.

이 부분은 좀 더 공부해봐야하지만 새로 배운 부분이라 재밌었고, 다음에는 스스로 해결해볼것이다.

4. 유닛테스트


이번 프로젝트에서 유닛테스트를 처음 적용해봤다.
유닛테스트를 처음 해보라고 했을때 뭘 어떻게 해야 하는지 감이 전혀 오지않았다. 그래서 그냥 나중에 하자 미뤘는데 미루고 진짜 써야할 때 공부하고 해봤는데 생각보다 그렇게 어렵지 않았다. 그래서 좀 변형되도 금방 하겠다 했는데 좀 변형되니 완전 어렵게 느껴져 많은 시간을 잡아먹었다.

그 부분이 윗 부분인데 사진을 폼데이터로 업로드할때 바이트 형식으로 들어와서 저렇게 바이트형태로 바꿔줘야 하는데 처음에는 뭔소린지 몰라서 많이 헤맸다.

또 토큰을 적용한 유닛테스트를 할 때도 많이 헤맸다. 희연님과 준수님의 도움으로 이 문제를 해결할 수 있었다. 정말 감사하고, 이 부분에 대해서 더 공부해야겠다.

느낀점

잘한점

  • 무엇보다 1차때보다 2차때는 많이 성장을 받은 느낌이다. 자신감도 좀 생겼고, 문제를 혼자 해결할 수 있다는 느낌을 받았다. 물론 팀원들의 도움을 많이 받아서 가능한 거였지만 많이 성장한 느낌이다.😄😄

  • 하루도 빠짐없이 스탠드업 미팅을 진행했다. 각자의 진행상황과 할거, 힘든점들을 잘 얘기했다.

  • 각 기능이 구현될때마다 유닛테스트를 진행해 코드가 잘 작동되는지를 확인했다. 처음 써보는거라 많이 헤맸지만 기능 구현한 것들에 대해서 전부 유닛테스트를 적용했다.

  • 포스트맨을 잘 활용한 것이다. 1차때는 포스트맨을 어떻게 활용하는지 잘 몰랐는데 2차때 포스트맨을 활용하면서 코드가 잘 작동되는지 어떤식으로 프론트에게 전달되는지 잘 확인할 수 있었다. 덕분에 일이 수월했다.

아쉬운점

  • 1차 때와 마찬가지로 기초가 부족해 기능을 구현하는데 어려움을 겪었다. 기본이 가장 중요하다는 것을 뼈저리게 느끼고있다.

  • 프론트와의 소통이다. 이번에는 소통이 많이 부족했고, 시간의 문제도 있었지만 소통의 문제로 발표전에 전체적으로 맞춰보지도 못했고, 결국 발표 때 구현한 기능을 보여주지 못하는 결과가 나왔다.

  • 이 역시 1차때도 같은 문제인데 기간의 문제로 더 많은 기능을 구현하지 못했고, 너무 여유를 부려 마지막에 초조하게 됐고, 하고싶었던 기능을 구현하지 못했다.

  • 역할을 분담하고 작업해서 내가 맡은 부분은 제대로 이해하지 않고 넘어갔다. 이 역시도 1차때와 마찬가지이다. 내가 맡은 부분을 진행하느라 소셜로그인 같은 부분은 완전 모르고 넘어갔다. 시간남을때 꼭 공부해야겠다.

  • 이번에는 유닛테스트의 핑계??로 첫 PR을 목요일이 되서야 했다. 이 부분은 너무 후회된다. 당장 금요일이 마감인데 목요일에 올렸으니 멘토님들도 제대로 확인 안 할거 아닌가...ㅠㅠ 결국 제대로된 커멘트를 받지 못하고 어영부영 넘어갔다... 코드에 문제가 많을텐데 정말 아쉽다.

해결/개선 방법

  • 기초 공부를 차근차근 다시 하기

  • 최대한 나혼자의 힘으로 문제 해결하기

  • 역할 분담해도 다른 팀원이 한거 잘 이해하고 넘어가기

  • 너무 자만하지 말고, 너무 여유를 부리지도 말아야 한다. 마감이 다돼서 후회하지말고 미리미리 해야한다!!

  • 이제는 불가능하겠지만 다음번에 기회가 되면 기능구현하고 바로 PR하고 코멘트 받기

  • 프론트와의 소통과 팀원들과의 소통을 잘하자 소통이 안되면 한것도 못 구현하는 사태가 발생한다.

이로써 위코드에서의 1차,2차 팀프로젝트가 끝났다😫😫
후련하지않고 아쉬움만 남는다. 좀만 더 열심히할걸, 좀만 더 일찍 나와서 할걸, 좀만 더 소통잘해서 기능 구현 제대로 할걸, 놀러다니지 않고 좀만 더 집중할걸... 또 이제 기업협업을 나가기 때문에 동기들과 떨어져야 한다니 참 아쉽고 슬프다

월요일부터 기업협업을 아조아라 라는 기업으로 간다. 기술을 배우고 처음나가는 기업이니 처음 배우는 것을 겁먹지 말고, 긍정적으로 배워나가야겠다. 힘들어도 포기하지 말고 최선을 다하자!!

2개의 댓글

comment-user-thumbnail
2020년 7월 19일

핀터레스트 짱 멋잇엇어여👍 !! 기업협업도 화이링~~🌟😊🌟

1개의 답글