15기 백엔드 투표 어플리케이션
Simple JWT를 이용하여 회원가입과 로그인에 필요한 토큰 발급
access 토큰의 유효기간은 3시간, refresh 토큰의 유효기간은 14일
- 아이디, 이메일, 비밀번호를 입력하여 회원가입
- 이미 존재하는 아이디 혹은 이메일을 입력하면 에러 메세지 반환
- 회원가입 성공 시 access 토큰과 refresh 토큰 발급
- 성공 메세지, 아이디, access 토큰, refresh 토큰 반환
- 아이디, 비밀번호 입력하여 로그인
- 존재하지 않는 아이디 혹은 잘못된 비밀번호를 입력하면 에러 메세지 반환
- 로그인 성공 시 access 토큰과 refresh 토큰 발급
- 성공 메세지, 아이디, access 토큰, refresh 토큰, 투표 여부 반환
- 로그인 상태의 유저에 한하여 투표 허용
- 각 유저는 무조건 한 번씩만 투표 가능
- 투표 후
candidate 모델의 count
증가,user 모델의 is_voted 필드
True로 업데이트 - 투표 성공 시 message, 유저 이름, 투표 여부 반환
- 로그인 상태의 유저에 한하여 후보자 등록 허용
- 이미 등록되어 있는 이름의 후보자는 등록할 수 없음
- 성공 시 message, 등록된 후보자의 id, 이름, 투표수 반환
- 후보자 목록 전체를 count 순으로 내림차순 정렬하여 반환
- 로그인 여부 상관없이 접근 가능하도록 구현
- 각 후보자별 투표자 리스트 반환
-
서버 세팅 후, CORS 에러 해결하기 위해
django-cors-headers
라는 모듈 사용base.py
에서 최대한 위 쪽에 위치해서 세팅해야 cors 에러가 재발하지 않는 것을 알 수 있었음
-
도커의 web 컨테이너에서 어드민을 생성하여 편리하게 관리
sudo docker-compose exec web python manage.py createsuperuser
-
쿠키 설정 후 서버에는 쿠키 반영되지만 프론트 브라우저에서 쿠키가 확인되지 않는 이슈
- 백엔드에서 쿠키 설정 시 samesite 옵션이 지정되어 있으면 chrome 과 같은 브라우저에서 자동으로
samesite=Lax
로 받아들이도록 정책 변경- 참고로 Lax 의 경우 자사 도메인이 아니어도 일부 케이스(GET 요청 등)에서는 접근이 허용되나, POST 요청 등과 같은 경우 접근 불가
- 쿠키를 cross-domain에서 허용하기 위해서는
samesite=None, secure=True
설정 필요samesite=None
사용하기 위해서는 secure 옵션 필수- secure 옵션은 HTTPS 요청만 허용하기 위한 것이므로 HTTPS 설정 필수
- 백엔드에서 쿠키 설정 시 samesite 옵션이 지정되어 있으면 chrome 과 같은 브라우저에서 자동으로
-
HTTPS 설정
- 무료 도메인 발급 후, docker-compose 로 certbot 컨테이너 빌드하여 인증서 발급하려 했으나 실패 → certbot 으로 직접 인증서 발급 완료하여 nginx에서 HTTPS 설정하며 인증 시도했으나 실패
- 원인을 알 수 없어 AWS에서 HTTPS 설정하기로 결정
1. Route 53에서 발급받은 도메인 주소로 호스팅 영역 생성 2. 도메인 발급받은 사이트에 ec2 IP 주소와 위 호스팅 영역에서 생성된 DNS 업데이트 3. ACM(AWS Certificate Manager)에서 인증서 발급 4. HTTP 요청은 HTTPS 로 리디렉션 되도록, HTTPS 요청은 ec2 인스턴스의 HTTP 타겟 그룹으로 연결되도록 로드밸런서 생성 5. Route 53에 위 로드밸런서 추가
- 백엔드 서버에서 HTTPS 적용 확인 후 쿠키 인증 방식으로 최종 리팩토링 필요
- Simple JWT에서 제공하는
TokenVerifyView
,TokenRefreshView
이용하여 토큰 인증, 재발급 기능 구현 필요