진행 사항 - 2
Database
- 사용자
- Postgresql 사용하여 데이터베이스, 스키마를 설정
- 초기에 DB 사용자를 생성후 초기 슈퍼계정에서 권한을 설정받습니다.
1
2
3
4
5
6
7
8
9
10
11
CREATE DATABASE chat_db;
GRANT ALL PRIVILEGES ON DATABASE chat_db TO chat_app_user;
\c chat_db;
GRANT USAGE ON SCHEMA public TO chat_app_user;
GRANT CREATE ON SCHEMA public TO chat_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO chat_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO chat_app_user;
버전이 15이상일떄 public에 대한 권한이 세분화 되어서 CREAT도 부여하는 형식이라고 합니다. 그리고 LLM에 물어보니 그냥 public의 소유권과 권한을 전부 넘기는 방식이 더 간단하고 확실하다고 하네용.
- DB 테이블
최대한 간단하게 구성했습니다.
- 사용자
- 채팅방
- 메시지
ERD
erDiagram
users {
BIGINT id PK "GENERATED ALWAYS AS IDENTITY"
VARCHAR_50 username "UNIQUE, NOT NULL"
TIMESTAMP created_at "DEFAULT CURRENT_TIMESTAMP"
TIMESTAMP deleted_at
}
rooms {
BIGINT id PK "GENERATED ALWAYS AS IDENTITY"
VARCHAR_100 room_name
TIMESTAMP created_at "DEFAULT CURRENT_TIMESTAMP"
TIMESTAMP deleted_at
}
messages {
BIGINT id PK
BIGINT room_id FK "REFERENCES rooms(id)"
BIGINT sender_id FK "REFERENCES users(id)"
TEXT content "NOT NULL"
TIMESTAMP created_at "DEFAULT CURRENT_TIMESTAMP"
}
rooms ||--o{ messages : "has many"
users ||--o{ messages : "sends"
Docker 배포
서버, DB등 각 컨테이너로 구성 Docker Compose로 구동하여 네트워크로 묶어 구성
- API Server
- MQTT Broker
- Webhook
- Database
마무리
이것 저것 자세히 설명을 하려 했으나 상당히 기본적인 것들이고 수정 할 수 있는 부분도 많아서 간략하게만 설명했습니다. 많은 부분 LLM에게 도움을 받아 작성해서 동작을 모르고 사용한 부분도 있을것 같아서 한버도 둘러보게 된 정리였습니다.
이제 인증 관련 부분이나 캐싱, UI정리등으로 마무리를 해봐야겠습니다.