오늘의 한 일
- 테스트코드 쪽지시험
- 도커 실무 실습 - 도메인 연결, https 연동
테스트코드 쪽지시험
https://github.com/didjsrne/drf_testcode
users - test.py
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from users.models import User
class UserRegistrationAPIViewTestCase(APITestCase):
def test_registration(self):
url = reverse("user_view")
user_data = {
"username": "testuser",
"fullname": "테스터",
"email": "test@testuser.com",
"password": "password",
}
response = self.client.post(url, user_data)
self.assertEqual(response.data['message'], "가입 완료!!")
test.py 사용법으로 가장 기본적인 방법을 테스트하는 시간이였다.
조건2를 충족시키기 위해 response의 status_code가 아니라 data['message']로 지정
users - models.py
class UserView(APIView):
# 회원가입
def post(self, request):
serializer = UserSignupSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({"message": "가입 완료!!"})
else:
return Response({"message": f'${serializer.errors}'}, 400)
쪽지시험은 정말 기초적인 부분을 확인하는거라 굉장히 쉬웠지만, 테스트코드를 복습하는 도중에 또 꽤나 많은 에러들을 겪었는데 이들 중 대부분이 오탈자로 생긴 문제들이였다.. 알고있던거지만 요새 자주 안써버릇하다보니 간만에 느껴보는 답답함이였다.. 타이핑 신경 좀 잘 씁시다
도커 실무 실습
- 도메인 구매 - https://www.freenom.com/
우선 회원가입을 하려는데 안되길래 뭐지? 싶었는데 이 사이트는 도메인을 구매 하면서 회원가입을 할 수 있는 것이였다.. 특이하네
원하는 주소 입력 - 도메인 선택 - 사용기간 선택 - 로그인(회원가입) - 구매 완료
- 도메인을 사용해 배포 서버에 접속하기
AWS의 route53 서비스를 사용해 적용
확인 후 freenom 페이지로
※ 설정 후 도메인이 반영되기까지 짧게는 수십분부터 길게는 24시간까지 걸릴 수 있다
- route53 설정하기
구매한 도메인에 접속했을 때 지정한 서버로 접속할 수 있도록 설정
nginx/default.conf
server {
listen 80;
server_name www.spartacodingclub.tk; # www.spartacodingclub.tk 도메인으로 들어오는 요청을 처리해줍니다.
location / {
proxy_pass http://backend:8000/;
}
location /static/ {
alias /static/;
}
location /media/ {
alias /media/;
}
}
server {
listen 80;
server_name spartacodingclub.tk; # www가 없는 url로 요청 했을 때
return 301 http://www.spartacodingclub.tk$request_uri; # www를 붙인 url로 redirection 해줍니다.
}
- https 적용하기
https란?
웹 서버에서 데이터를 전송하기 위한 http 프로토콜에 보안을 의미하는 secure를 붙여
http 통신을 더 안전하게 할 수 있도록 해주는 프로토콜.
보안적인 특성 때문에 배포를 하는 서비스에는 https를 필수적으로 적용한다.
https를 적용하기 위해서는 SSL 인증서를 발급받고 웹서버에서 인증서를 지정해주는 과정이 필요
SSL 인증서 발급받기
** 인증서를 발급받기 위해서는 도메인 인증이 필요합니다. SSL 요청만 한 상태에서는 해당 도메인이 내가 소유한 도메인이라는 것을 검증하지 못하기 때문에 상태가 “검증 대기 중” 으로 나오게 됩니다.
도메인의 소유자라는 것을 증명하기 위해 Route 53에서 레코드 생성 버튼을 클릭합니다.
이후 수분~ 수십분 기다리면..
- 대상 그룹 설정하기
로드밸런서를 설정하기 전, 어떤 서버에 로드밸런서를 사용할지 대상을 지정해 주는 작업이 필요.
AWS - ec2 좌측메뉴에서 로드 밸런싱 - 대상 그룹을 클릭
Health check path를 입력한 후 Next 버튼을 클릭
※ Health check는 로드 밸런서에서 서버가 정상 동작 하는지 확인하는 용도로 사용되며, 서버에 정상적으로 접근하고 http status code 200을 리턴해줄 수 있는 경로를 입력해야 한다.
- 로드밸런서 설정하기
AWS - ec2 좌측 메뉴에서 로드 밸런싱 - 로드밸런서
Network mapping - ap-northeast-2a, 2b 선택
※ Select a certificate에 아무것도 나오지 않는다면 SSL 인증서가 정상적으로 발급 되었는지 확인
route53 설정하기
route53에서 도메인에 접속했을 때 인스턴스로 접속하는것이 아닌 로드밸런서를 통해 접속할 수 있도록 설정
기존구조
route53 설정 후
AWS → route53 서비스 접속 → 호스팅 영역 → 등록한 도메인
http 요청을 https로 redirect 하도록 설정하기
AWS → ec2 서비스 접속 → 로드밸런서 → 생성한 로드밸런서 클릭
django settings.py 설정해주기
# CORS 허용 목록에 도메인 서버를 추가합니다.
CORS_ORIGIN_WHITELIST = ['https://www.$domain', ]
# CORS_ORIGIN_WHITELIST = ['https://www.$domain', ]
# CSRF 허용 목록을 CORS와 동일하게 설정합니다.
CSRF_TRUSTED_ORIGINS = CORS_ORIGIN_WHITELIST
더 해봐야 할 것
- 실제 장고 프로젝트로 실습해보기 (settings.py 보안 신경써서)
- 컨테이너에 장고 프로젝트 집어넣기 - 기본 설정하는법만 나와있음, 컨테이너 들어가서 git clone?