AI Chatbot 만들다!

Django Model 작성 / Migration과 결과 확인 / DB 확인 (PostgreSQL의 pgAdmin 4, Django Admin 기능)

wy-family 2024. 11. 5. 18:05

Model을 작성하려면,

관계형 DB에 대한 이해가 필요하다

Model 에는 data type을 정의해야 하고, 그들의 관계를 정의해야 한다.


지금 만들어보려고 하는 건, AI Chatbot.

메시지를 주고 받는 것이 기본이니,

메시지라는 데이터 타입이 있다.

- 이거는 본인이 만들 것에 대해서 설계를 하는 것이니 정답이 있는 건 아님.

 

<메시지>

- 발신자

- 내용

- 발신 날짜 시각

- 채팅방의 FK

 

<채팅방 >

- 채팅방이름

- 만들어진 날짜 시각 (채팅방이 만들어진 시간 순서대로 보여주려면 필요)

 

채팅방 - 메시지 : 1:N 관계

즉, 메시지는 채팅방에 FK 를 가져야 함.


class - object의 관계는

Schema - record 의 관계랑 같은 관계.

django 가 그걸 적극적으로 이용하는 것

table, shema table을 정의한다는 건,

class를 정의하는 거랑 똑같은 것.

그래서 class 를 정의한다.

세부적으로 들어가서 하나하나씩 다 따지고 들어가면 모르는 것 투성이다.

거의 다 모른다고 봐야 한다. 그렇지만 끝까지 가보는 것.


Migration을 할것인데, Migration 이란, 작성한 Model 코드를 실제 DB에 반영을 하는 과정.

Migration을 하지 않으면 코드만 존재하는 것. 청사진, 디자인만 가지고 있는 것이 되기 때문에 해야함.

DB에다가, 이걸 만들어줘 라고 해야 표를 만들어서 가지고 있게 해줘야 한다.

그게, Migration 이라고 이해하자.

이거는, mysite 에서,

python manage.py migrate 라고 해야 함.

그러면, postgreSQL에, Django 내용들이 반영이 되는 것.

postgreSQL을 보여주는 GUI 프로그램이 있다고 했었다.

pgAdmin 4 라는 프로그램이다.

migrate 을 하기 전에는 없던 Table (표) 가 생겼을 것.

DB에 django와 관련된 table 이 생겨난 것.

그런데,

 

python manage.py migrate 라고 하면, chatbot 에 대한 DB가 형성되는 건 아니라고 함.

앱에 대한 table을 만들려면 다른 명령어가 필요함.

python manage.py makemigrations 앱이름

을 써야 한다.

python manage.py makemigrations chatbot

근데, 앱이 설치된 적이 없다고 한다.

그렇다, 앱이 설치된 걸 모른다.

왜 모를까.

앱을 생성했었는데, 그 앱이라는 건, chatbot 이라는 폴더다.

폴더가 생성되었다는 걸, mysite의 urls.py 에서, chatbot.urls 가 있었기 때문에 알긴 안다.

그런데 설치된 앱도, 전체 django 앱에게 (mysite)에게, 내가 무슨 무슨 앱을 사용 중이야, 라고 리스트업을 해줘야 한다.

그  리스트 업을 해주는 곳이, mysite 의 settings.py 에서 한다.

기본 앱 목록이 이렇게 있다.

여기에 생성한 앱을 넣어줘야 한다.

chatbot 이라는 앱의 apps.py 가 있고, 그 파일 안에 자동으로 생성된 ChatbotConfig 라는 설정이 있어서,

그걸 추가해주는 것.

그러고 나면, 이제 terminal에서 다시 python manage.py makemigrations chatbot 하면 된다.

Message, ChatRoom 이라고 만들었던 class 가 같이 보인다.

그런 테이블을 이제 만들었다는 뜻이니 잘 이루어진 것. 굿.

하지만, pgAdmin 4 를 확인해보면, table이 만들어져있지 않음.

왜 그럴까?

 

그러니까, python manage.py migrate 를 하면, 리스트업 되어 있는 것들 중에 migration이 안 된 것들을

table을 만들어주는 것이다.

그러니까 리스트업을 해주고 난 뒤에, 저 명령어를 한 번 더 입력해줘야 한다는 것.

 

즉, 순서가,

1. 앱을 만들었다.

2. 만든 앱을 settings.py 에 리스트업을 해야 한다.

3. 그리고 나서 migration 준비를 위해 python manage.py makemigrations chatbot 이라고 하면은,

4. 실제 DB 서버에 반영을 하는 건, 최종적으로 migrate 을 해줘야 진짜 table 만드는 것까지 되는 것.

 

이렇게 몇번의 과정을 거쳐야만 되는 이유는, Schema를 바꾸는 건 꽤 큰 일이다.

잘못하면 앱/프로그램이 망가질 수도 있는 일이라서 위험할 수 있으니 그런 것.

 

pgAdmin 4를 들어가서 확인해보면 제대로 잘 만들어져 있다.


pgAdmin 말고, 다른 방법으로 DB 만든걸 확인할 수 있는데, Django는 Admin 이라는 걸 제공함.

이렇게 superuser 라는 걸 만들고 나서, 다시 runserver를 하고

그리고 웹사이트를 통해서 확인하는 방법이 있다.

아까, path() 에서, admin/ 이 있었던 걸 기억할 것이다.

거기로 가보자.

 

가보면, django는 기본적으로 admin 이라는 걸 제공해서,

user 정보에 대한 것도 확인 가능함. Table 정보를 확인할 수 있다는 것.

 

Django Admin 에서 Message 랑 ChatRoom 에 대한 DB 정보도 확인할 수 있도록 할 수 있다.

 

mysite에서 chatbot 폴더에 보면 admin.py 파일이 있다.

거기에,

chatbot의 모델에서, Message, ChatRoom을 가지고 올 것. 왜? 등록할 거니까.

그리고 나서 다시 runserver 해서 사이트 들어가서 확인해보면 반영이 된 걸 확인할 수 있음.

pgAdmin 4 라는, postgreSQL 의 DB를 보여주는 GUI 프로그램에서도 볼 수 있지만,

Django가 제공하는 Admin이라는 View(웹사이트)에서도 DB 를 볼 수가 있고 수정이 가능한 것.


그런데, Message 에 Chatroom의 FK를 가지고 와야 한다.

그걸 Model을 작성할 때 집어넣지를 않았다.

그래서 집어넣어야 한다.

foreignkey 를 가지고 올 건데, 만약 chatroom이 삭제가 되면, 도미노(CASCADE) 처럼 메시지도 삭제가 되도록.

수정을 했으니,

runserver는 종료하고,

 

1. 앱을 만들었다.

2. 만든 앱을 settings.py 에 리스트업을 해야 한다.

3. 그리고 나서 migration 준비를 위해 python manage.py makemigrations chatbot 이라고 하면은,

4. 실제 DB 서버에 반영을 하는 건, 최종적으로 migrate 을 해줘야 진짜 table 만드는 것까지 되는 것.

 

이걸 해줘야 한다.

그리고 다시 runserver를 해줘야 함.

굿굿굿