[ Essay - Technology, Essay - Intuition ] Chat GTP시대의 도래와 생각하는 방식에 대해

이미지
올해도 드디어 끝이 보이는 듯 싶다. 최근에 회사의 망년회를 끝내고 이래저래 회식이 늘어나는 듯 하다. 지금 시점에서는 개인적인 스케쥴도 마무리 되었기 때문에 이제는 여유롭게 연말을 즐기며 올해를 마무리 하려고 한다. 비교적 최근에 이사한 곳 근처의 스타벅스가 대학 병원 안에 있고 근처에 공원이 있어서 그런지 개를 대리고 산책하는 노인이나  아이를 동반한 가족이 눈에 띄게 보인다. 꽤나 좋은 곳으로 이사한듯 하다. 개인적으로는 올해 드디어 미루고 미루었던 이직을 하였고  그 이후에 비약적인 성장을 이루었으니  분명 안좋은 일도 있었지만 만족할 수 있는 해를 보내지 않았나 싶다. 내가 도달하려고 하는 곳으로 가려면 아직 갈길이 멀지만  궤도에 오른 것만으로도 큰 성과라면 큰 성과 일 것 이다. 어쨋든 이직하고 많은 일들을 맡게 되었는데 그 과정에서 나는 의도적으로 Chat GTP를 활용하고자 하였고 몇 가지 직감을 얻게 되었는데  이 중 한 가지를 글로 작성하려고 한다. 따라서 올해의 마무리 글은 Chat GTP에 대한 이야기로 마무리 하려고 한다. 서론 불과 약 10년전 IT업계는 원하던 원치 않던간에  한번의 큰 패러다임의 변화를 맞이해야만 했다 바로 아이폰의 등장에 따른 스마트폰의 시대의 도래와  이에 따른 IT업계의 패러다임 변화가 그것이다. 내 기억으로는 아주 격변의 시대였던 걸로 기억하는데 왜냐하면 게임은 물론이고 웹과 백신을 비롯한 모든 솔루션의 변화가 이루어졌다. 이 뿐만 아니라 가볍고 한손의 들어오는 이 디바이스는  그 당시에는 조금 비싸다는 인식이 있었지만  감추려고 해도 감출 수 없는 뛰어난 유용성으로 회의론을 금세 종식시켰고 이에 대한 결과로 어린아이 부터 노인 까지 작은 컴퓨터를 가지게 되었고 이는 당연하게도 IT업계의 전체적인 호황을 가져다주었다.  그리고 질서는 다시 한번 재정렬되었다. 이러한 패러다임의 변화의 증거로 언어 또한 변하게 되었는데...

[ Django, Python ] 튜토리얼 예제로 살펴보는 Django 분석 ⑤ : 자동화 테스트(Automated Test) - 2

(View) 수정하기


설문 조사 목록에는 아직 게시되지 않은 설문 조사가 표시될 것이기에

표시되지 않도록 수정해보자.

 

먼저 이전 튜토리얼 4장에서 클래스 기반의 View

다시 작업하였는데



그 부분 중 IndexViewget_queryset 메소드를 수정할 것이다.



현재와 미래를 비교해야만 하기 때문에 

timezone import 해야한다.



원래 코드를 주석처리하고,

빨간색 박스와 같이 코드를 수정한다.

 

여기서

Question.objects.filter( pub_date__lte = timezone.now() )

Timezone.now 보다 pub_date가 작거나 같은 

Question을 반환 하는 코드이다.


여기서 pub_date 이름 뒤에 붙은 

__lte filter[1]조건 키워드로 같거나 작다(<=)를 의미한다.

 

, 지금이거나 과거일 경우 queryset을 반환하게 된다는 이야기 이다.

 

공식 도큐먼트에서는 여기서 끝내버리지만

나는 실제로 잘 작동하는지를 보고 싶기 때문에

미래의 데이터를 넣어 확인한 다음


그 데이터를 과거로 바꿔 

제대로 화면에 출력하는지를 확인할 것이다.


그렇기 위해서는 먼저 shell로 진입해야 한다.



셀로 진입한 후 Question 객체에 미래의 데이터를 넣기로 하자.


데이터를 넣었다면 명령어를 통해 

데이터가 정상적으로 들어가 있는지 확인한다.


그런 후 서버를 가동하고 

브라우저로 데이터가 나타나지 않는지 확인해 보자.


위의 사진과 같이

Shell을 통해 등록했던 

future Question text가 보이지 않는 것을 확인 할 수 있다.

 

그렇다면 역으로 등록했던 것의 날짜를 

바꾼다면 제대로 보이는지 확인해보자.



위와 같이 2020년이였던 것을 과거인 2018로 수정해 서버를 가동후 확인해 보자.


브라우저에는 빨간색 박스와 같이

등록한 데이터가 과거일 경우 정상적으로 출력되는 것을 알 수 있다.


물론 위와 같이 shell에서 

데이터를 추가하고 수정하지 않고도



django에서 제공해주는

 관리자 앱을 사용한다면 좀 더 손쉽게

데이터를 추가 및 수정하여 확인해 볼 수 있다.


관리자 앱에 대한 내용은 

이전 포스팅을 참고하길 바란다.

 

마지막으로 자동화 테스트를 작성할 것이다.

 

이번 자동화 테스트는

1개의 클래스(함수 5)1개의 함수로

6개의 테스트 케이스를 만들 것 이다.

 

먼저 



자동화 테스트 과정 중에 사용할 create_question 함수,

여기서 days인수는 과거의 설문조사와 

미래의 설문조사를 나누는 일 수를 말한다.


예를 들어

이번 자동화 테스트에서는

이 인수에 미래의 경우 30이 과거의 경우 -30이 들어가는데


오늘 기준 pub_date 30일 후의 경우 

미래에 진행할 설문 조사 목록이며

오늘 기준 pub_date30일 이전에 경우에는 

과거에 끝난 설문조사 목록이 된다.



시행할 설문 조사가 없을 경우,

설문 조사가 없다는 메시지를 출력해주는 test_no_questions 함수



설문 조사 목록 중에 pub_date가 과거인 설문조사를 페이지에 출력하는

Test_past_question함수


설문 조사 목록 중에 pub_date가 미래인 설문조사를 페이지에 출력하는

Test_future_question 함수



설문 조사 목록 중에

과거의 끝난 설문 조사와 미래에 진행할 설문 조사 둘 다 존재할 경우

과거에 끝난 설문조사만 출력하는

Test_future_question_and_past_question 함수



마지막으로

설문 조사 목록 중에서

과거에 끝난 설문 조사와 

미래에 진행할 설문 조사 둘 다 출력하는

Test_two_past_question 함수이다.

 

6가지 함수 중에는 

새롭게 사용되는 메소드들이 있기 때문에

이에 대해 살펴보고 가는 것이 옳을 것이라 생각 된다.

 

하나의 함수만 살펴보고자 하는데,

Test_fufure_question_and_pass_question 함수를 살펴보려고 한다.



Test_future_question_and_past_question 함수는 위와 같으며

먼저 create_question함수부터 살펴보려고 한다.



Create_question 함수는 2가지의 매개변수를 가지고 있는데

매개변수 question_text는 만들고자하는 질문의 텍스트를

매개변수 days는 가산하고 싶은 날의 수를 입력 받는다.

 

지역변수 time에는 현재의 시간과 매개변수 days에 들어있는 수를

더한다.

여기서 datetime.timedelta 함수는 date형을 리턴해주는 함수로

시간을 더 할 때 사용한다.

자세한 것은 아래 링크를 참고하길 바란다.

https://www.geeksforgeeks.org/python-datetime-timedelta-function/

 

Return 값은 model

Question 클래스에 명시되어 있는 코드의 오브젝트를 생성하고,

오브젝트의 지역변수인 question_text에는

매개변수 qeustion_text의 문자열을,

지역변수인 pub_date에는

매개변수 현재 시간에 days를 합산한 시간을 넣는다.

 

따라서 리턴 되는 것은 model에서의 Question 오브젝트이고

이 오브젝트 안에는 질문 문자열과

현재 시각에 매개변수 days에서 받은 일수를 더한 시간 값이 들어 있다.

 

다음으로 지역 변수 response에는



reverse함수를 이용해 urls에서 

이름이 polls로 지정되어 있는 url패턴

안에 이름이 index로 되어있는 경로를 얻어 온다.


코드는 아래와 같다.



그리고 url 패턴을 통해 참조해야하는 View

어떤 Vew인지 알 수 있게 되었는데,

바로 IndexView이다.



위의 사진이 IndexView이다.

빨간색 박스와 같이 이전에 다른 제너릭 뷰 들과는 다르게

Context_object_name이라는 지역변수를 따로 설정해 준적이 있다.

 

IndexView의 경우 많이 사용할 것 같은

View들을 미리 만들어 놓은 제너릭 뷰들 중 하나로

JAVA에서의 인터페이스를

Django에서 제공해준다고 생각하면 이해하기 쉬울 것 이다.

 

어쨌든 IndexViewListView라는 제너릭 뷰 인데,

List 자료형의 변수를 가지고 있는 View이다.


따라서 데이터 입/출력이 필요 할 때

IndexView를 이용하게 될 것이다.

 

작성을 완료했다면,

실제 테스트를 시행해보자.



작성한 자동화 테스트를 시행해보자.

 

이전에 작성한 2개의 자동화 테스트 함수와

이번에 작성한 6개의 자동화 테스트 함수를 합해

8개의 자동화 테스트를 시행한 결과

작성한 코드의 문제가 없음을 확인했다.


DetailView 테스트하기

지금까지 작성한 코드들은 잘 작동된다.

 

하지만 미래에 진행할 설문들은

페이지에 나타나지는 않지만,

 

사용자가 URL을 알고 있거나,

추측한다면 접근할 수 있다.

 

따라서 DetailViewIndexView 때와

마찬가지로 유사한 제약조건을 추가할 필요가 있다.



빨간색 박스와 같은 함수를 추가한다면,

쿼리를 불러올 때 미래의 값들은 불러오지 않는다.



또한 위와 같이

시간이 지난 pub_date 값을 가지고 있는 설문은 표시되고

미래의 pub_date는 표시되지 않는 테스트 케이스도 추가하자.

 

[1] 조건 키워드 :

키워드

설명

__lt / __gt

작다 / 크다

__lt / __gte

작거나 같다/ 작거나 크다

__in

리스트([1,2,3와 같은])

의 데이터와 동일한

검색

__year / __month / __day

, , 일 검색

__isnull

Null인 값 검색

__contains

지정한 문자열을

포함하는 데이터를 검색

__icontains

지정한 문자열을

포함하는 데이터를 대소문자

구별하지 않고 검색

__startswith

지정한 문자열로 시작하는

데이터를 검색

__istartswith

지정한 문자열로 시작하는

데이터를 대소문자

구별하지 않고 검색

__range

문자, 숫자, 날짜의 범위를

지정해 검색



이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )