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

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

[ Django, Python ] 튜토리얼 예제로 살펴보는 Django 분석 ② : Model 생성 과 마이그레이션 생성, 활성화, 적용

DB 설치


Settings.py 파일에는 Django의 설정을 모듈 변수로 표현한 Python 모듈이다.

기본적으로 SqLite를 사용하도록 구성되어 있다.

따라서 데이터베이스를 처음 경험해보거나, Django를 처음 사용해본다면
Django에서 기본적으로 제공하는 SQLite를 사용하는 것도 나쁘지 않은 선택이다.

다만, 나중에 데이터베이스를 교체하느라 골치 아플지도 모르기 때문에, 좀 더 확장성이
있는 데이터베이스를 사용하는 것이 좋다.

이번은 튜토리얼 이기 때문에 SQLite를 사용하도록 하겠다.

settings.py - TIME_ZONE 변수


먼저 Settings.py 파일에 TIME_ZONE 변수를 시간대에 맞춰서 설정해 줄 것이다.
단, 이번과 같이 가상서버로 서버를 구동한다면 defalut값인 UTC를 사용해야 한다.

특히 윈도우라면 본인 운영체제에 맞는 시간을 사용해야 한다.



이에 대해 공식 도큐먼트에서는 위와 같이 설명한다.




나는 한국의 서울 기준으로 하기로 했다.



settings.py – USE_I18N 변수


Django의 변역 시스템을 활성화 할지를 결정하는 부울 변수이다.

이 값이 False로 설정되어 있으면, Django가 번역을 하지 않도록 해
프레임워크를 최적화 할 수 있다.


settings.py – USE_L10N 변수 


나라에 맞게 로케일 된 데이터 형식을 사용할지를 결정하는 부울 변수이다.


이 값이 True로 설정되어 있으면, TIME_ZONE의 로케일 형식을 사용하여 숫자와 날짜를 표시한다.

settings.py – INSTALLED_APPS 변수 

프로젝트를 생성한 후에, INSTALLED_APPS 변수에는 기본적으로 포함된다.

해당 앱의 내용은 아래의 사진과 같다.


이런 앱들 중 하나 이상의 데이터베이스 테이블을 사용하므로 
데이터베이스에서 테이블을 사용하기 때문에 
마이그레이션을 작성해야 사용할 수 있다.

마이그레이션 생성은 아래와 같은 명령어를 입력해야 한다.

python manage.py migrate

migrate명령어은 INSTALLED_APPS설정을 확인하고 
settings.py파일의 데이터베이스 설정 및 앱과 함께 제공된 
[1]데이터베이스 마이그레이션(the database migrations)에 따라 필요한 데이터 베이스 테이블을 만든다.

또한 적용되는 각 마이그레이션에 대한 메시지가 표시된다.


실제 migrate 명령어를 실행해보면 위의 사진과 같이 로그가 화면에 표시된다.

모델 만들기

이제 모델을 정의해 보려고한다.

여기서 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조를 말한다.

Django는 고유한 개념 및 데이터는 단 한 번, 단 한 곳에 존재하는 DRY라는 원칙의
철학을 강조한다.

따라서 데이터 모델을 한곳에서 정의하며, 이것으로부터 자동으로 무언가를 유도하는
것이 목표라고 한다.

또한 Django는 모델(Model) Ruby On Rails와 달리 마이그레이션이 포함된다.

따라서 이 마이그레이션은 모델 파일에서 파생되며, 
기본적으로 Django는 현재 모델과 일치하도록 데이터베이스 스키마를 업데이트 하기 위해 
롤 오버(roll through)할 수 있다.

여기서는 설문 조사앱에 질문선택이라는 두 가지 모델을 만들 것 이다.

질문에는 질문출판 날짜가 있고, 선택에는 선택 텍스트투표 집계라는
각 두 가지 필드가 존재한다.

이 모델들은 아래와 같이 python 클래스로 프로그래밍 되어진다.



여기서 각 모델은 django.db.models.Model을 서브 클래스하는 클래스로 표시된다.

여기서 각 모델에는 여러 클래스 변수가 있으며, 각 변수는 모델의 데이터베이스 필드를 나타낸다
, 이 변수명을 데이터베이스에서는 컬럼명으로 사용할 것 이다.

따라서 Question클래스의 경우는 question_text(char ), pub_date(DateTime )이 데이터베이스 필드가,

Choice 클래스의 경우는 question, choice_text(char ), votes(Integer )가 데이터베이스 필드가 된다.

Field클래스의 경우 첫번째 매개변수를 전달하여 사람이 읽기 편하도록 이름을 지정할 수도 있다.


만약 이 매개변수를 지정하지 않으면, 컴퓨터가 읽기 좋은 형식의 이름을 사용하게된다.



이 예제에서는 Question.pub_date만 정의하도록 하겠다.


몇몇 Field클래스는 반드시 매개변수를 설정해야 하는 Field들이 있다.
CharField의 경우 반드시 max_length를 입력해주어야 한다.


또한 다양한 선택적 매개변수들을 가질 수도 있는데, 이 예제에서는
Default로 하여금 votes의 기본값을 0으로 설정하였다.

마지막으로 ForeignKey를 사용한 관계설정에 대한 경우이다.
이 예제에서는 각각의 Choice클래스가 Question클래스에 관계된다는 것을 Django에 알
려준다.

따라서 Django는 다대일(many to one), 다대다(many to many), 일대일(one to one)과 같은
모든 일반 데이터베이스의 관계들을 지원할 수 있다.

모델 활성화하기

모델(Model)의 짧은 코드가 실제 Django에게는 많은 양의 정보를 전달하게 된다.

Django는 이 정보를 가지고 아래와 같은 작업을 할 수 있다.


또한 Django의 앱(polls와 같은)들은 뺐다꼈다할 수 있다.
, 앱을 다수의 프로젝트에서 사용할 수도 있고 배포 할 수도 있다.

따라서 특정 Django프로젝트에 앱들이 묶여있지 않아도 되는 것 Django가 추구하고자
하는 철학이다.

하지만, 가장 먼저 현재 프로젝트에게 polls앱이 설치되어 있다는 것을 알리는게 우선이다.

현재 앱을 프로젝트에 포함시키기 위해서는 (polls)의 클래스에 대한 참조를

setting.py 파일의 INSTALLED_APPS 변수에 추가해야 한다.


해당 클래스는 polls/apps.py내에 존재한다.


따라서 변수에 추가 할 코드는 'polls.apps.PollsConfig' 가 된다.

이제 Djangopolls앱이 포함된 것을 알게 됐다.
그럼 이제 다른 명령어를 내려보자.

python manage.py makemigrations polls

실행해보면 아래와 같은 로그를 볼 수 있다.


Makemigrations을 실행시켜, 모델을 변경한 사실과 이 변경사항을 migration으로 저장하고
싶다는 것을 Django에게 알려주었다.

여기서 마이그레이션은 Django가 모델(및 데이터베이스 스키마)에 대한 변경 사항을 디스
크에 저장하는 방식을 말한다.

원하는 경우 새 모델의 마이그레이션을 읽을 수 도 있다.


예제의 경우 polls/migrations/polls/0001_initial.py 파일이다


Django가 변경하는 방식을 수동으로 조정하려는 경우에는 사용자가 편집 할 수 있도록
설계되어 있기 때문에 Django를 만들 때 마다 읽을 필요는 없다.

Django에는 이 migration들을 실행시켜줘서 자동으로 데이터베이스 스키마를 관리해주는
migrate명령어가 있다.

sqlmigrate명령어는 migration 이름을 인수로 받아 실행된 SQL문을 보여준다.

이번 예제는 0001_initail.pymigration을 실행할 것이며, 명령어는 아래와 같다.


python manage.py sqlmigrate polls 0001


성공 시, 위의 사진과 같은 화면을 볼 수 있으며
이 로그들은 실제 모델안에서 데이터들의 코드를 기반으로 Create되어지는 테이블들이 된다.


또한 공식 도큐먼트에서는 위의 사진에 대해 아래와 같은 참고 사항을 적어뒀다.

(외래키의 관게는 FOREIGN KEY 제약 조건에 명시된다.

다만, 트랜잭션이 끝날 때까지 외래 키를 적용하지 않도록 PostgreSQL에 지시하기 때문에 
DEFERRABLE 부분에 대해 걱정하지 않아도 된다.)


(sqlmigrate 명령은 실제로 데이터베이스에서 마이그레이션을 실행하지 않는다.

다만, Django가 필요하다고 생각하는 것을 화면에 출력한다.

이는 Django가 수행 할 작업을 확인 또는 변경을 위해 
SQL 스크립트가 필요한 데이터베이스 관리자가 있는지 확인하는 데 유용합니다.)

관심이 있다면 python manage.py check 명령어를 통해 마이그레이션을 수행하거나,
데이터베이스를 건드리지 않고도 프로젝트의 문제를 확인 할 수 있다.

모델 적용하기

이제 실제 migrate 명령어를 통해 데이터베이스에 모델과 관련된 테이블을 생성해보자.
해당 실행문은 아래와 같다.

python manage.py migrate




실제 실행하면 위의 사진과 같이 로그가 나오며 마지막에 OK라는 로그가 나온다.

migrate 명령은 아직 적용되지 않는 마이그레이션을 모두 수집해 이를 실행하여,
결과적으로 모델(Model)에서의 변경 사항들과 데이터베이스 스키마의 동기화가 이루어진다.

이 마이그레이션은 매우 강력한 기능이며, 마치 프로젝트를 개발할 때 처럼 데이터베이스나
테이블에 손대지 않고도 모델을 변경할 수 있게 해준다.

또한 동작 중인 데이터베이스를 데이터 손실없이 업그레이드 하는 데 최적화 있기 때문
Django는 개발자들에게 큰 힘이 되어 줄 것이다.

따라서 모델 변경 및 추가를 하고 싶다면 아래와 같은 과정을 거치면 된다.

    모델(model.py)을 변경 및 추가 한다.

    python manage.py makemigration 명령어를 통해
     변경 및 추가에 대한 마이그레이션을 만든다.

    python manage.py migrate 명령어를 통해 변경 및 추가에 대한 마이그레이션을 적용한다.





위의 사진은 python manage.py makemigrations 명령어를 사용 할 때 참고되는 0001_initial.py파일이다.

실제 0001_initial.py 파일은 위의 사진과 같이 프로그래밍 되어져 있는데

이전에 models.py파일에 프로그래밍한 class 이름으로 각각의 테이블들이 설정되있는 것과
해당 class안의 변수들이 컬럼명으로 지정되어 있는 것을 확인 할 수 있다.



---------------------------------------------------------------------------------------------------------------------- 

[1] : 데이터베이스 마이그레이션 이란, 데이터베이스 스키마의 버전을 관리하기 위한
하나의 방법으로 개발 시스템에서 데이터베이스 스키마가 변경되었지만

운영 시스템의 데이터베이스 스키마가 변경되지 않았을 경우 마이그레이션을 수행한다.

마이그레에션은 보통 한 운영체제로부터 다른 운영체제로 옮기는 작업을 말한다.

---------------------------------------------------------------------------------------------------------------------- 

참고

첫 번째 장고 앱 작성하기, part 2 :


이 블로그의 인기 게시물

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

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

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