게시글 작성 및 조회 서비스
🧾 요구 사항
- 참여기업 : 원티드
- 기업과제 : 프리온보딩 과제
- SNS(Social Networking Service) 구현
🔑 MVP
사용자는 본 서비스에 접속하여, 게시물을 업로드 하거나 다른 사람의 게시물을 확인하고, 좋아요를 누를 수 있다.
💻 기술 스택
Python
Django
DRF
💡 핵심 구현
1. service / view layer 분리
view
: 요청 및 응답 데이터 처리
service
: 기능별 함수 구현
2. 테스트 코드 작성
django.test.TestCase
를 이용한 service 함수별 테스트 코드 작성
3. 게시글 목록 조회 필터링 구현
view
: 쿼리파라미터를 이용한 필터 데이터 처리
service
:Q 객체
를 통한 쿼리 표현
🔍 고려항목
1. 유저 - 이메일과 유저이름
요구사항에는 이메일을 ID로 사용해야한다고만 나와있지만 게시글 조회 기능에서 작성자 정보를 나타낼 때 사용할 유저이름을 필드로 포함한다.
Instagram처럼 로그인은 이메일로하지만 서비스 이용에는 개인정보로 노출되지않도록하고 유저이름을 사용할 수 있다.
2. 게시글 목록 조회 - 쿼리파라미터
게시글 목록 조회시 쿼리파라미터를 사용하여 각종 옵션을 설정할 수 있다.
orderby
: 정렬할 기준 - 작성일(default)/조회수/좋아요수
reverse
: 정렬시 오름차순, 내림차순(default) 여부
search
: 검색할 단어 - 검색단어가 포함된 모든 게시글
hashtags
: 검색할 해시태그 - 해당 해시태그를 포함한 게시글
page
: 현재 페이지 위치
page_size
: 한 페이지당 게시글 수
is_active
: 게시글 활성화 여부 - 활성화(default)/비활성화 게시글 조회 여부
3. 게시글 목록 조회 - 페이지 기능
게시글 목록 조회시 쿼리파라미터로
page
(현재 페이지 위치)와page_size
(한 페이지당 게시글 수)를 받아서 해당되는 게시글 목록만 응답 데이터에 포함한다.ex) 게시글 수 = 100개 / page = 2, page_size = 30 일 경우
⇒ 페이지당 게시글 수는 30개씩이고 2번째 페이지이기 때문에 100개 중에서 30~59번째 게시글 - 총 30개의 게시글을 응답 데이터로 반환
4. 게시글 상세 조회 - 좋아요 여부
게시글 상세 조회시 유저가 해당 게시글의 좋아요를 누른상태인지 아닌지 확인할 수 있도록
is_liked
속성에 게시글 좋아요 여부를 응답데이터에 포함시킨다.로그인하지않은 사용자의 요청시
False
로 응답한다.
5. 게시글 생성 - 해시태그
게시글 생성시 해시태그를 여러개 포함할 수 있으므로 게시글 모델과 ManyToMany 관계를 가지는 해시태그 모델을 생성한다.
6. 게시글 삭제 & 복구
게시글 삭제시 복구될 수 있도록 실제로 DB에서 삭제되지않고 게시글에
is_active
라는 필드를 통해 비활성화 시킨다.게시글 복구시 유저는 게시글 목록 조회 기능에서
is_active
쿼리파라미터를 통해 삭제된 게시글 목록을 확인할 수 있고 (사용자 인증 필요) 다시 복구할 수 있다.
7. 게시글 좋아요 등록/취소
좋아요 등록/취소 기능은 각각 따로 요청되지않고 좋아요 클릭 이벤트시 요청되어 유저와 게시글의 정보를 받아
- 좋아요를 누른 상태이면 좋아요 취소
- 좋아요를 누르지않은 상태이면 좋아요 등록
기능을 수행한다.