코드로 우주평화

위스타그램 스터디(백엔드) 정리 본문

나는 이렇게 성장한다/활동

위스타그램 스터디(백엔드) 정리

daco2020 2021. 11. 20. 20:04

인스타그램 클론코딩(이하 위스타그램) 13가지의 미션이 주어졌다.

하지만 서비스를 구현하는 프로젝트는 처음이다보니 이 서비스의 목적이 무엇인지, 프로젝트를 통해 내가 무엇을 배울 수 있는지 과제의 의도와 의미를 파악하기가 힘들었다. 그래서 주어진 미션만 하나씩 해결해나가지 말고 동료들과 함께 이번 프로젝트를 전체적으로 분석해보기로 했다. 

 

주말을 이용해 동료를 모아 1시간 조금 넘게 스터디를 진행했다.

스터디 내용은 아래와 같다. 현재 파이썬을 조금 익히고 장고를 배운지 2주차 밖에 안되었기 때문에 틀린 정보가 많을 수 있으니 감안해서 보기를 바란다.

 

스터디 목적

  • 위스타그램 미션에 대한 의견을 공유하면서 프로젝트에 대한 이해도를 높이기 위함
  • 장고 API 프로세스를 복기하고 위스타그램 프로젝트의 전체 과정을 머릿속에 그려보기 위함
  • 단순 코드 공유가 아닌 서비스 자체에 대해 생각해보고 우리가 배우는 것이 무엇인지 생각해보기 위함

 

스터디 내용

(시간순으로 작성)

장고 초기세팅의 어려움

  • 초기세팅을 하기 위해 노션 페이지를 왔다갔다 하다보니 누락되는 것도 생기고 비효율이 발생하였다.
  • 아직은 그냥 따라치는 것 같다. 이해를 못해도 일단 넘어가는데 이게 맞는 것인지 모르겠다.
  • 모델과 뷰의 역할이 무엇인지 요청과 응답이 어떻게 오고가는지를 명확히 파악해야 세팅을 수월하게 할 수 있을 것 같다.
  • 초기세팅을 미리 하나의 글로 싹 정리해두는 것을 추천한다. 단, 모든 프로젝트가 동일하지 않으므로 어떤 부분이 달라져야하는지는 파악할 수 있어야 한다.
  • 지난 세션을 틈틈이 복기하면서 참고하는게 좋은 것 같다. 특히 다른 팀의 세션영상이 도움이 되더라.

 

장고 프로세스 복기

  • models 란?
    • 모델은 서비스의 기능과 데이터의 관계성을 고려해야한다고 생각한다.
    • 모델이 결국 비즈니스의 시작이 아닐까 생각한다.
  • views 란?
    • 요청과 응답을 수행하는 통로가 아닐까?
    • 비즈니스의 로직이 담겨있는 곳이라고 생각한다. 클라이언트에게 무엇이 필요한지, DB로 부터 데이터를 어떻게 가져올지에 대한 고민이 담겨 있다.
  • cors header 란?
    • 프론트엔드와 백엔드가 서로 소통할 수 있도록 해주는 다리 같다고 생각한다.
    • 참고 블로그 : https://cholol.tistory.com/524

 

에러 경험 공유

  • httpie 로 요청할때 body 내용을 ',' 로 구분해서 입력하면 에러가 뜬다. 콤마가 아닌 띄어쓰기만 사용하자.

 

위스타그램 로그인 기능

  • 로그인 기능은 POST로 구현해야하는가? GET으로 구현해야하는가?
  • 참고 블로그 : https://velog.io/@songyouhyun/Get과-Post의-차이를-아시나요
  • 로그인 기능 중, 인풋 값(아이디, 패스워드)이 사용자의 오타 등으로 회원가입 당시의 정규표현식에 맞지 않는 값을 입력한 경우, 굳이 DB까지 갈 필요없이 뷰 단계에서 걸러내는 것이 더 효율적이지 않을까?

 

게시글 - 댓글 - 대댓글

  • 게시글 → 댓글 → 대댓글은 순서대로 1대다의 관계이다.
  • 유저는 게시글, 댓글, 대댓글과 각각 1대다의 관계이다.
    추가의견 > 댓글과 대댓글의 테이블을 분리할 필요없이 자기 테이블을 self로 참조할 수 있다. 

 

'좋아요'와 '팔로우'는 어떻게 구현할 수 있을까?

  • '좋아요'의 경우, 게시글에만 사용한다는 가정하에 테이블을 분리하여 '유저'와 '게시글'의 fk를 받아와 구현.
  • '팔로우' 또한 테이블을 분리하여 '유저'의 fk를 받아와 구현
    • 팔로우가 참조하는 유저의 fk는 [유저 본인]과 [팔로우 유저]가 각각 필요하기 때문에 '유저'를 두번 가져와야함. 이때문에 fk를 중복으로 가져올 수 있는지 서로 의견이 오고 감.
  • '좋아요'와 '팔로우'는 'True' 와 'False' 값으로 저장

 

위스타그램의 서비스 목표는?

  • 필수미션 : 사용자의 정보를 조건에 맞게 안전하게 저장하는 것
  • 선택미션 : 사용자가 게시물과 댓글, 대댓글, 좋아요와 팔로우 기능을 사용함으로써, 소셜네트워크 공간을 구축하는 것

 

프로젝트를 통해 우리가 얻을 수 있는 것은?

  • 사용할 기능에 따라 테이블 관계도를 파악하는 능력 → ERD
  • 디비에 적절한 테이블을 생성할 수 있는 능력 (테이블 관계, 컬럼의 속성) → models
  • 회원가입과 로그인 기능을 구현하는 능력 → 인증인가(암호화 & 액세스토큰)
  • 게시물과 댓글을 저장할 수 있는 능력 → views
  • 좋아요와 팔로우기능을 구현할 수 있는 능력 → views
  • 수정 및 삭제 기능을 구현할 수 있는 능력 → views

 

*스터디 사진