[기업협업] 퀀텀AI -Day 16-

제갈창민·2022년 1월 11일
0

기업협업[퀀텀AI]

목록 보기
10/18

쉽게 쉽게 생각해, 깊게 깊겐 피곤해

[ Clover, "An Oppa I Know" ]

D

드높게 늘어선 빌딩숲 사이로 다시금 눈꽃이 흩날렸다. 서울와서 벌써 두번째 눈이다. 부산에선 몇 년에 한번도 보기 힘든 눈이지만, 지금은 반가워할 겨를이 없는게 문제다. 협업 3주차, 평일로만 따진다면 출근일이 6일밖에 안남았다. 한달동안 DRF에 대해서 확실하게 기초 개념을 잡을 수 있겠지라고 생각했던게 2주전이란 뜻인데... 이쯤에서 스멀스멀 피어오르는 자기비판을 억누르며 출근길에 올랐다.

R

RoadPic. 현재 우리가 개발중이고 베타버전으로 배포중인 앱 이름이다(앱 이름 정도는 홍보차원에서 말해도 괜찮지 않을까). 오후에는 이 앱에 대해서 전체 회의가 있었는데, 영업팀에서 보내준 피드백 자료도 같이 보면서 자유롭게 의견을 나눴다. 직원분들이 착하셔서 그런건지 진짜 의미가 있는 의견이었는지는 모르지만, 우리들이 낸 의견도 잘 경청해주시고 좋은 의견이다라거나 전에 한번 나왔다가 보류중인 건이다 라는 식으로 적극 소통해주셨다. 마치 1, 2차 프로젝트 때처럼 편안한 분위기에서 자유롭게 의견을 주고받는게 신기하면서도 상당히 재밌는 시간이었다.

F

Figma 라는 그래픽툴로 여러가지 형태의 레이아웃과 추가될 기능들의 위치를 대략적으로 잡은 뒤 회의내용을 요약한 후 2시간에 걸친 회의는 끝이 났다. 회의가 있기전까지 프론트와 통신을 하면서 postman으로 필요한 키 값들을 정리한 API문서를 각자 만들고 통합했다. 그리고 어제부터 매달린 Test Code 짜기에 남은 시간을 모두 투자했는데, 도무지 진전이 없었다. 사수님도 여기서 Test Code를 만들어 본 적이 없으셨고, 레거시 코드마저도 없는 상황이라 꽤나 막막했다. 하루 종일 구글을 헤엄쳐다니고, 여러 깃헙들을 파고들었지만 어제보다 코드가 나아지질 않았다. 그래서 사수님과 긴급회의를 한 결과, 위코드데이인 내일까지 한번 연구해보고 정 안된다면 다른 기능을 해보는 걸로 하자고 결론을 내렸다.

TIL

아래는 온라인강의를 들으면서 참고한 Testcode 이다. DRF에서 제공하는 APITestCase를 사용했고, Factoryboy 나 Faker, Baker와 같은 라이브러리는 사용하지 않았다. 특이한 점으로는 'token'을 위한 fake model을 만든 것인데, 아직 'auth.user' 와 'auth.token'의 개념이나 사용법을 정확히 몰라서 완전히 이해하지는 못했다. 또한 settings.py'rest_framework.authtoken',을 INSTALLED_APPS에 추가해 줘야한다. 참고한 StackOverflow 에서는 migration도 해야한다고 했지만, 안해도 딱히 상관은 없었다.

models.py
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

Tests.py
class StreamPlatformTestCase(APITestCase):

    def setUp(self):
        self.user = User.objects.create_user(username="example", password="Password@123")
        self.token = Token.objects.get(user__username=self.user)
        self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)

        self.stream = models.StreamPlatform.objects.create(name="Netflix", 
                                about="#1 Platform", website="https://www.netflix.com")

    def test_streamplatform_create(self):
        data = {
            "name": "Netflix",
            "about": "#1 Streaming Platform",
            "website": "https://netflix.com"
        }
        response = self.client.post(reverse('streamplatform-list'), data)
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
    
    def test_streamplatform_list(self):
        response = self.client.get(reverse('streamplatform-list'))
        self.assertEqual(response.status_code, status.HTTP_200_OK)
    
    def test_streamplatform_ind(self):
        response = self.client.get(reverse('streamplatform-detail', args=(self.stream.id,)))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

아래는 어제와 같은 실패한 테스트 코드이다.

def test_school_create(self):
        data = {
            'school_name' : '서울대',
            'address' : '서울시 강남구',
            'description' : '서울대입구 역에서 3Km'
        }
        response = self.client.post(reverse('institution/school'), data)
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

APITestCase를 사용할 때 APIRequestFactory 를 사용하는 방법도 있어서 한참 RequestFactory에 대해 찾아보다가 회의에 들어가게 되어서 마무리는 짓지 못했다. 게다가 reverse 메소드에서 발목이 단단히 잡혔는데, 우선 이 메소드의 역할과 기본 형태에 대해서부터 알아봐야 할 것 같다. 참고하고 있는 사이트 몇 가지를 남긴다. 내일의 나는 좀 더 낫기를.

APITestCase 에서 API 를 요청하는 두가지 방법

endcode github: DRF의 각종 기능별 예제 코드가 많은 곳

APITestCase 사용 예제 github

APIRequestFactory 사용 예제 github

우리 사이는 특별해, 스타들보다 스페셜해

[ 클로버, "An Oppa I Know" ]

profile
자기계발 중인 신입 개발자

0개의 댓글