1. 회원관리 기능
가입 (/user/signup/)
MyUser 테이블에 유저생성할 때, username, nickname, password를 필수로 입력받도록 함수를 create_user 함수를 재정의했습니다.
Email을 username으로 사용하고, 패스워드는 6자리 이상으로 입력해 가입합니다.
로그인 (/user/login/)
유저 정보의 유효성을 확인해 토큰 키를 생성합니다.
- Framework : rest_framework.authtoken
로그아웃 (/user/logout/)
유저의 권한을 확인해 토큰 키를 삭제합니다.
- Framework : rest_framework.authtoken
2. 책 검색 기능
전체 책 검색 (/book/search/)
데이터는 ‘Google Book API’와 ‘다음카카오 책 검색 API’를 이용합니다.

검색 API를 호출하면
- 먼저 SooBook 데이터베이스에서 검색합니다.
- 데이터가 없을 경우, 외부 API에 요청을 보내 SooBook 데이터베이스에 저장합니다.
- 최초 요청은 실시간으로 이루어집니다.
- Framework : requests
속도 개선을 위해 다음과 같이 보완했습니다.
- DB 쿼리문 개선
- 여러번의 쿼리로 INSERT하는
create를 - 한번의 쿼리로 INSERT하는
bulk_create로 변경 - UPDATE시, WHERE절 사용
- 여러번의 쿼리로 INSERT하는
- 비동기 처리
- 유저가 검색했던 키워드를 저장해 외부 서버에 요청을 보내 데이터를 수집 (Celery + AWS SQS)
- Framework : django_celery_results, django_celery_beat
내 책 검색 (book/mybook/search/)
추가한 책에 대한 검색기능을 구현했습니다. 입력받은 키워드로 Book 테이블의 title, author, publisher 컬럼을 검색해 결과를 반환합니다.
- Framework : django_filters
검색결과를 페이지네이션해서 보내줄 때, 이전 페이지와 다음페이지 주소를 http가 아닌 https로 반환하도록 정규표현식을 사용했습니다.
3. 책 평가 기능
내 책
- 추가 (
book/mybook/)- 요청한 유저와 책정보의 유효성을 판단
MyBook테이블에 INSERTstatus code 201응답을 반환- 특이사항 :
MyBook테이블에 추가한 후 해당 정보로BookStar테이블에 INSERT (기본값 0)
- 삭제 (
book/mybook/)- 요청한 유저와 책정보의 유효성을 판단
MyBook테이블에서 삭제status code 200응답을 반환
- 리스트 (
book/mybook/) : 요청한 유저정보를 이용해MyBook테이블에서 검색해 최근 추가한 책부터 리스트로 반환 - 디테일 (
book/mybook/detail/) : 요청한 유저와 책정보를 이용해MyBook테이블에서 검색해 반환
한줄 평가
저장한 책 1권에 대해 1개의 한줄 평가를 등록합니다.
- 추가 및 업데이트 (
book/comment/)- 요청한 유저와 내 책정보의 유효성을 판단
BookComment테이블에 INSERTstatus code 201응답을 반환- 특이사항 : 내 책정보가 동일하면
BookComment테이블을 UPDATE한 후status code 200응답을 반환
- 삭제 (
book/comment/)- 요청한 유저와 한줄 평가 정보의 유효성을 판단
BookComment테이블에서 삭제status code 200응답을 반환
별점 평가
저장한 책 1권에 대해 1개의 별점 평가를 등록합니다.
- 업데이트 (
/book/star/)- 요청한 유저와 내 책정보의 유효성을 판단
BookStar테이블을 UPDATEstatus code 200응답을 반환- 특이사항 : 요청한 별점이 0에서 5사이인 double형인지 유효성체크를 합니다.
- 리스트 (
/book/star/)- 요청한 유저정보의 유효성을 판단
MyBook테이블에서 유저가 가진 책 정보를 리스트로 생성BookStar테이블에서 해당 책에 대한 별점 정보를 검색해 리스트로 반환
책속 글귀
저장한 책 1권에 대해 여러 개의 책속 글귀를 등록합니다.
- 추가 (
/book/mark/)- 요청한 유저와 내 책정보의 유효성을 판단
BookMark테이블을 INSERTstatus code 201응답을 반환- 특이사항 : 내 책정보가 동일하나 컨텐츠만 변경해 요청할 경우,
BookMark테이블을 UPDATE한 후status code 200응답을 반환
- 업데이트 (
/book/mark/)- 요청한 유저와 책속 글귀 정보의 유효성을 판단
BookMark테이블을 UPDATEstatus code 200응답을 반환
- 삭제 (
/book/mark/)- 요청한 유저와 책속 글귀 정보의 유효성을 판단
BookMark테이블에서 삭제status code 200응답을 반환