코딩일지/TIL: Today I Learned

20221115 TIL

야언 2022. 11. 15. 20:27

오늘의 한 일

  • 테스트코드 쪽지시험
  • 도커 실무 실습 - 도메인 연결, https 연동

 

테스트코드 쪽지시험

 

 

https://github.com/didjsrne/drf_testcode

 

GitHub - didjsrne/drf_testcode

Contribute to didjsrne/drf_testcode development by creating an account on GitHub.

github.com

 

 

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)

 

쪽지시험은 정말 기초적인 부분을 확인하는거라 굉장히 쉬웠지만, 테스트코드를 복습하는 도중에 또 꽤나 많은 에러들을 겪었는데 이들 중 대부분이 오탈자로 생긴 문제들이였다.. 알고있던거지만 요새 자주 안써버릇하다보니 간만에 느껴보는 답답함이였다.. 타이핑 신경 좀 잘 씁시다

 

 

 

 

 

 

도커 실무 실습 

 

 

 

Freenom - A Name for Everyone

Cost Price Free Special

www.freenom.com

 

 

우선 회원가입을 하려는데 안되길래 뭐지? 싶었는데 이 사이트는 도메인을 구매 하면서 회원가입을 할 수 있는 것이였다.. 특이하네

 

원하는 주소 입력 - 도메인 선택 - 사용기간 선택 - 로그인(회원가입) - 구매 완료

 

 

 

  • 도메인을 사용해 배포 서버에 접속하기

 

AWS의 route53 서비스를 사용해 적용

 

호스팅 영역 생성 클릭

 

구매한 도메인 주소 넣고 생성

 

호스팅 영역에서 도메인을 클릭하고 들어와서 값/트래픽 라우팅 대상에 있는 값들을 확인

확인 후 freenom 페이지로

 

Service → My domains를 눌러 마이페이지에 들어간 후 Manage Domain 버튼을 클릭

 

Management Tools → Nameserver

 

Use custom nameservers을 클릭하고, AWS의 호스팅 영역 에서 확인했던 NS 유형의 값/트래픽 라우팅 대상에 있는 값들을 입력

 

※ 설정 후 도메인이 반영되기까지 짧게는 수십분부터 길게는 24시간까지 걸릴 수 있다

 

 

  • route53 설정하기

 

구매한 도메인에 접속했을 때 지정한 서버로 접속할 수 있도록 설정

 

호스팅 영역 - 도메인 선택

 

레코드 생성 클릭

 

레코드 이름을 빈칸으로 두고, 값에 ec2의 퍼블릭 ip를 입력한 후 레코드 생성 버튼을 클릭

 

동일한 방법으로 레코드 이름에 www를 입력하고, 레코드 유형을 CNAME으로 변경한 후 값에 구매한 도메인을 입력한 후 레코드 생성 버튼을 클릭

 

결과물

 

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 인증서 발급받기

 

 

 

aws - ssl 검색해 Certificate Manager에 접속

 

서비스에 접속 후 인증서 요청 클릭

 

퍼블릭 인증서 요청을 체크

 

도메인 이름에 구매한 도메인 입력 → 이 인증서에 다른 이름 추가 → *.구매한 도메인 이름을 입력한 후 DNS 검증을 선택하고 요청 클릭

 

인증서 목록 화면에서 요청한 인증서의 ID를 클릭

 

** 인증서를 발급받기 위해서는 도메인 인증이 필요합니다. SSL 요청만 한 상태에서는 해당 도메인이 내가 소유한 도메인이라는 것을 검증하지 못하기 때문에 상태가 “검증 대기 중” 으로 나오게 됩니다.

도메인의 소유자라는 것을 증명하기 위해 Route 53에서 레코드 생성 버튼을 클릭합니다.

 

Route 53에서 레코드 생성 클릭

 

도메인을 확인하고 레코드 생성 클릭

 

이후 수분~ 수십분 기다리면..

 

인증서 발급 완료

 

 

 

  • 대상 그룹 설정하기

 

로드밸런서를 설정하기 전, 어떤 서버에 로드밸런서를 사용할지 대상을 지정해 주는 작업이 필요.

 

AWS - ec2 좌측메뉴에서 로드 밸런싱 - 대상 그룹을 클릭

 

Create target group 버튼을 클릭

 

인스턴스를 선택

 

Target group name을 지정

 

Health check path를 입력한 후 Next 버튼을 클릭

 

※ Health check는 로드 밸런서에서 서버가 정상 동작 하는지 확인하는 용도로 사용되며, 서버에 정상적으로 접근하고 http status code 200을 리턴해줄 수 있는 경로를 입력해야 한다.

 

 

로드밸런서에 대상이 될 서버를 지정하고 Include as pending below 버튼을 클릭

 

추가된 대상을 확인하고 Create target group 버튼을 클릭

 

Continue

 

등록한 대상을 확인

 

 

  • 로드밸런서 설정하기

AWS - ec2 좌측 메뉴에서 로드 밸런싱 - 로드밸런서

 

로드 밸런서 생성

 

Application Load Balancer create

 

로드밸런서의 이름을 작성하고 Internet-facing, IPv4 설정

 

Network mapping - ap-northeast-2a, 2b 선택

 

 

Security groupts - default

 

Listeners and routing에서 이전에 생성한 대상 그룹을 지정하고 Add listener

 

Protocol HTTPS, 대상 그룹 동일하게 선택

 

생성한 SSL 인증서 선택

※ Select a certificate에 아무것도 나오지 않는다면 SSL 인증서가 정상적으로 발급 되었는지 확인

 

최종적으로 설정을 확인하고 Create load balancer

 

 

route53 설정하기

 

route53에서 도메인에 접속했을 때 인스턴스로 접속하는것이 아닌 로드밸런서를 통해 접속할 수 있도록 설정

 

 

기존구조

route53 설정 후

 

 

 

AWS → route53 서비스 접속 → 호스팅 영역 → 등록한 도메인 

 

 

유형 A로 등록된 도메인을 선택한 후 레코드 편집

 

별칭 옵션을 활성화 한 후 Application/Classic Load Balancer에 대한 별칭 → 아시아 태평양(서울) → 생성한 로드밸런서를 순서대로 선택한 후 저장 버튼을 클릭

 

 

 

 

http 요청을 https로 redirect 하도록 설정하기

 

 

AWS → ec2 서비스 접속 → 로드밸런서 → 생성한 로드밸런서 클릭

 

리스너 → HTTP : 80에 해당하는 리스너의 규칙 보기/편집 버튼을 클릭

 

상단의 추가(더하기 아이콘) 버튼 → 규칙 삽입 클릭

 

IF의 조건 추가 → 호스트 헤더 선택 → *.구매한도메인이름을 입력한 후 체크 아이콘을 클릭

 

THEN의 작업 추가 → 리디리렉션 대상 선택 → HHTPS 선택 및 443 포트 입력 → 기본 호스트, 301을 각각 선택한 후 체크 아이콘을 클릭

 

 

확인 및 저장

 

 

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?