diff --git a/200_core_design/230_감정윤리_필터_LLM후처리와_정체성.md b/200_core_design/230_감정윤리_필터_LLM후처리와_정체성.md
index e97af66..12b16b0 100644
--- a/200_core_design/230_감정윤리_필터_LLM후처리와_정체성.md
+++ b/200_core_design/230_감정윤리_필터_LLM후처리와_정체성.md
@@ -373,7 +373,7 @@ def evolve_personality(feedback_history, interaction_patterns):
personality.reinforce_trait(feedback.related_trait)
# 사용자 선호 패턴 학습
- preferred_style = analyze_user_preferences(interaction_patterns)
+ preferred_style = analyze_user_preference(interaction_patterns)
personality.adapt_to(preferred_style, learning_rate=0.1)
# 경험 기반 성숙
diff --git a/300_architecture/320_Slack_기반_인터페이스_설계.md b/300_architecture/320_Slack_기반_인터페이스_설계.md
index 065c9c3..f933c15 100644
--- a/300_architecture/320_Slack_기반_인터페이스_설계.md
+++ b/300_architecture/320_Slack_기반_인터페이스_설계.md
@@ -68,7 +68,7 @@ user_uuid = await get_user_uuid(slack_id) # DB에서 UUID 조회
#### 사용자 데이터 구조
```sql
-- users 테이블
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY, -- slack_user_mapping에서 조회
username VARCHAR(50), -- slack_U0925SXQ 형태
email VARCHAR(255),
diff --git a/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md b/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md
index 3c92c3e..ba7346d 100644
--- a/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md
+++ b/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md
@@ -118,7 +118,7 @@ conn = psycopg2.connect('postgresql://robeings:robeings@localhost:5433/main_db')
cur = conn.cursor()
# 쿼리 실행
-cur.execute("SELECT * FROM users LIMIT 5")
+cur.execute("SELECT * FROM user LIMIT 5")
rows = cur.fetchall()
for row in rows:
@@ -134,7 +134,7 @@ conn.close()
# SQL Injection 방지를 위해 항상 파라미터 바인딩 사용
user_id = 'b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0'
cur.execute(
- "SELECT * FROM users WHERE id = %s",
+ "SELECT * FROM user WHERE id = %s",
(user_id,) # 튜플로 전달
)
```
@@ -145,7 +145,7 @@ cur.execute(
### 1. users 테이블
```sql
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR UNIQUE,
name VARCHAR,
@@ -164,7 +164,7 @@ CREATE TABLE users (
```sql
CREATE TABLE gmail_token (
id SERIAL PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
slack_id VARCHAR(100), -- Slack 사용자 ID (새로 추가)
is_equipped BOOLEAN,
has_token BOOLEAN, -- token_data 존재 여부
@@ -195,7 +195,7 @@ CREATE TABLE conversation_log (
intent VARCHAR,
confidence DOUBLE PRECISION,
timestamp TIMESTAMP,
- user_id UUID REFERENCES users(id), -- NULL 허용으로 변경됨
+ user_id UUID REFERENCES user(id), -- NULL 허용으로 변경됨
slack_user_id VARCHAR(100) -- Slack ID 직접 저장 (새로 추가)
);
```
@@ -206,7 +206,7 @@ CREATE TABLE slack_user_mapping (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL,
slack_workspace_id UUID,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
workspace_member_id UUID,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
@@ -236,7 +236,7 @@ query = """
g.token_data,
g.scopes
FROM gmail_token g
- JOIN users u ON g.user_id = u.id
+ JOIN user u ON g.user_id = u.id
ORDER BY g.created_at DESC
"""
@@ -303,7 +303,7 @@ def add_gmail_token(slack_user_id, email, access_token, refresh_token):
try:
# 1. users 테이블에 사용자 추가 (없으면)
cur.execute("""
- INSERT INTO users (id, email, username, created_at)
+ INSERT INTO user (id, email, username, created_at)
VALUES (%s, %s, %s, NOW())
ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email
""", (user_uuid, email, slack_user_id))
@@ -367,14 +367,14 @@ import uuid
# 방법 1: 직접 캐스팅
cur.execute(
- "SELECT * FROM users WHERE id = %s::uuid",
+ "SELECT * FROM user WHERE id = %s::uuid",
('b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0',)
)
# 방법 2: uuid 객체 사용
user_uuid = uuid.UUID('b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0')
cur.execute(
- "SELECT * FROM users WHERE id = %s",
+ "SELECT * FROM user WHERE id = %s",
(str(user_uuid),)
)
```
diff --git a/300_architecture/database/relationships.md b/300_architecture/database/relationships.md
index 45cdaae..c9ca627 100644
--- a/300_architecture/database/relationships.md
+++ b/300_architecture/database/relationships.md
@@ -78,7 +78,7 @@ SELECT
wm.robeing_id,
sum.slack_user_id,
gt.is_equipped as gmail_equipped
-FROM users u
+FROM user u
LEFT JOIN workspace_member wm ON u.id = wm.user_id
LEFT JOIN slack_user_mapping sum ON u.id = sum.user_id
LEFT JOIN gmail_token gt ON u.id = gt.user_id
@@ -94,7 +94,7 @@ SELECT
u.name,
u.email
FROM slack_user_mapping sum
-JOIN users u ON sum.user_id = u.id
+JOIN user u ON sum.user_id = u.id
WHERE sum.slack_user_id = 'U0925SXQFDK';
```
@@ -107,7 +107,7 @@ SELECT
gt.equipped_to,
rs.level,
gt.scopes
-FROM users u
+FROM user u
JOIN gmail_token gt ON u.id = gt.user_id
LEFT JOIN robeing_stats rs ON u.id = rs.user_id
WHERE gt.is_equipped = true;
@@ -123,7 +123,7 @@ SELECT
wm.robeing_id
FROM workspaces w
JOIN workspace_member wm ON w.id = wm.workspace_id
-JOIN users u ON wm.user_id = u.id
+JOIN user u ON wm.user_id = u.id
WHERE w.name = 'Ivada Robeing';
```
@@ -220,7 +220,7 @@ COMMIT;
```sql
BEGIN;
-- 1. users 테이블
-INSERT INTO users (id, email, name, username)
+INSERT INTO user (id, email, name, username)
VALUES (?, ?, ?, ?);
-- 2. workspace_member 추가
diff --git a/300_architecture/gateway_proxy_patterns.md b/300_architecture/gateway_proxy_patterns.md
index 6820f8e..7a43262 100644
--- a/300_architecture/gateway_proxy_patterns.md
+++ b/300_architecture/gateway_proxy_patterns.md
@@ -49,7 +49,7 @@ sequenceDiagram
Gateway->>Gateway: username 추출
Note over Gateway: JWT payload에서
- Gateway->>DB: SELECT id FROM users WHERE username = ?
+ Gateway->>DB: SELECT id FROM user WHERE username = ?
DB-->>Gateway: UUID
Gateway->>Service: 요청 전달
@@ -87,7 +87,7 @@ sequenceDiagram
class GatewayProxy:
async def convert_username_to_uuid(self, username: str) -> str:
"""Username을 UUID로 변환"""
- query = "SELECT id FROM users WHERE username = $1"
+ query = "SELECT id FROM user WHERE username = $1"
result = await self.db.fetchone(query, username)
if not result:
@@ -438,7 +438,7 @@ class RobeingGateway:
async def get_user_uuid(self, username: str) -> str:
async with self.db_pool.acquire() as conn:
row = await conn.fetchrow(
- "SELECT id FROM users WHERE username = $1",
+ "SELECT id FROM user WHERE username = $1",
username
)
if not row:
diff --git a/300_architecture/sequences/auth_login_sequences.md b/300_architecture/sequences/auth_login_sequences.md
index bc23fb5..0ce42cd 100644
--- a/300_architecture/sequences/auth_login_sequences.md
+++ b/300_architecture/sequences/auth_login_sequences.md
@@ -50,7 +50,7 @@ sequenceDiagram
Auth->>Google: GET /oauth2/v2/userinfo
Google-->>Auth: email, name, picture
- Auth->>DB: SELECT * FROM users WHERE email=?
+ Auth->>DB: SELECT * FROM user WHERE email=?
DB-->>Auth: 사용자 없음
Auth->>Auth: UUID 생성 (uuid.uuid4())
@@ -94,13 +94,13 @@ sequenceDiagram
Note over Auth,Google: OAuth 플로우 (1.1과 동일)
- Auth->>DB: SELECT * FROM users WHERE email=?
+ Auth->>DB: SELECT * FROM user WHERE email=?
DB-->>Auth: 사용자 정보 (기존 UUID)
- Auth->>DB: UPDATE users SET last_login=NOW()
+ Auth->>DB: UPDATE user SET last_login=NOW()
Auth->>DB: username 조회
- Note over DB: SELECT username FROM users
WHERE id = ?
+ Note over DB: SELECT username FROM user
WHERE id = ?
DB-->>Auth: username
Auth->>Auth: JWT 토큰 생성
@@ -148,10 +148,10 @@ sequenceDiagram
alt 매핑 존재
DB-->>Auth: user_id (UUID)
- Auth->>DB: SELECT * FROM users WHERE id=?
+ Auth->>DB: SELECT * FROM user WHERE id=?
Note over DB: UUID로 사용자 정보 조회
DB-->>Auth: 사용자 정보
- Auth->>DB: UPDATE users SET last_login=NOW()
+ Auth->>DB: UPDATE user SET last_login=NOW()
else 매핑 없음 (신규)
Auth->>Auth: UUID 생성 (uuid.uuid4())
Auth->>Auth: username 생성
@@ -189,7 +189,7 @@ sequenceDiagram
Note over Gateway: JWT payload에서 username
Gateway->>DB: username → UUID 변환
- Note over DB: SELECT id FROM users
WHERE username = ?
+ Note over DB: SELECT id FROM user
WHERE username = ?
DB-->>Gateway: user_id (UUID)
Gateway->>Service: 요청 전달
@@ -237,7 +237,7 @@ flowchart TD
```sql
-- users 테이블
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255),
@@ -250,7 +250,7 @@ CREATE TABLE users (
-- 예시 데이터
-- 테스트 사용자 (하드코딩 UUID)
-INSERT INTO users VALUES
+INSERT INTO user VALUES
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'goeun2dc@gmail.com', '김종태', 'happybell80'),
('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', '0914eagle@gmail.com', '전희재', 'eagle0914'),
('dddddddd-dddd-dddd-dddd-dddddddddddd', 'test@example.com', 'Test User', 'test_user');
diff --git a/300_architecture/sequences/chat_history_flow.md b/300_architecture/sequences/chat_history_flow.md
index 09d2bc2..27e6a46 100644
--- a/300_architecture/sequences/chat_history_flow.md
+++ b/300_architecture/sequences/chat_history_flow.md
@@ -167,7 +167,7 @@ const observer = new IntersectionObserver((entries) => {
### 6.1 users 테이블
```sql
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE,
username VARCHAR(50) UNIQUE,
@@ -178,7 +178,7 @@ CREATE TABLE users (
### 6.2 workspace_member 테이블
```sql
CREATE TABLE workspace_member (
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
workspace_id UUID,
robeing_id VARCHAR(50) -- rb8001, rb10508_micro 등
);
@@ -192,7 +192,7 @@ CREATE TABLE conversation_log (
message VARCHAR,
response VARCHAR,
timestamp TIMESTAMP,
- user_id UUID REFERENCES users(id)
+ user_id UUID REFERENCES user(id)
);
```
diff --git a/300_architecture/sequences/email_sequences.md b/300_architecture/sequences/email_sequences.md
index 197b94a..36d7450 100644
--- a/300_architecture/sequences/email_sequences.md
+++ b/300_architecture/sequences/email_sequences.md
@@ -195,7 +195,7 @@ sequenceDiagram
Note over Gateway: username 추출
Gateway->>DB: username → UUID 변환
- Note over DB: users 테이블 조회
SELECT id FROM users
WHERE username = ?
+ Note over DB: users 테이블 조회
SELECT id FROM user
WHERE username = ?
DB-->>Gateway: user_id (UUID)
Gateway->>RB: 이메일 발송 요청
@@ -269,7 +269,7 @@ sequenceDiagram
Auth-->>RB: UUID 반환
RB->>DB: UUID로 사용자 조회
- Note over DB: SELECT * FROM users
WHERE id = '매핑된 UUID'
+ Note over DB: SELECT * FROM user
WHERE id = '매핑된 UUID'
DB-->>RB: user_id, name: "김종태"
RB->>Monitor: Gmail 아이템 상태 확인
diff --git a/300_architecture/uuid_conversion_system.md b/300_architecture/uuid_conversion_system.md
index 8668650..c3f408b 100644
--- a/300_architecture/uuid_conversion_system.md
+++ b/300_architecture/uuid_conversion_system.md
@@ -52,7 +52,7 @@ class GoogleAuthHandler:
async def create_or_get_user(self, email: str, name: str):
# 기존 사용자 확인
user = await self.db.fetchone(
- "SELECT * FROM users WHERE email = $1",
+ "SELECT * FROM user WHERE email = $1",
email
)
@@ -63,7 +63,7 @@ class GoogleAuthHandler:
new_user_id = str(uuid.uuid4())
await self.db.execute("""
- INSERT INTO users (id, email, name, username, oauth_provider)
+ INSERT INTO user (id, email, name, username, oauth_provider)
VALUES ($1, $2, $3, $4, 'google')
""", new_user_id, email, name, self.generate_username(email))
@@ -102,7 +102,7 @@ class SlackUserHandler:
# 기존 사용자 확인
user = await self.db.fetchone(
- "SELECT * FROM users WHERE id = $1",
+ "SELECT * FROM user WHERE id = $1",
user_uuid
)
@@ -112,7 +112,7 @@ class SlackUserHandler:
# 신규 사용자 등록
username = f"slack_{slack_user_id[:8]}"
await self.db.execute("""
- INSERT INTO users (id, username, email, name, oauth_provider)
+ INSERT INTO user (id, username, email, name, oauth_provider)
VALUES ($1, $2, $3, $4, 'slack')
""", user_uuid, username,
slack_user_info.get('email', ''),
@@ -138,7 +138,7 @@ sequenceDiagram
Gateway->>Gateway: JWT 검증
Gateway->>Gateway: username 추출
- Gateway->>DB: SELECT id FROM users WHERE username = ?
+ Gateway->>DB: SELECT id FROM user WHERE username = ?
DB-->>Gateway: UUID
Gateway->>Service: Request + X-User-Id (UUID)
@@ -163,7 +163,7 @@ class GatewayUUIDConverter:
# DB 조회
async with self.db_pool.acquire() as conn:
row = await conn.fetchrow(
- "SELECT id FROM users WHERE username = $1",
+ "SELECT id FROM user WHERE username = $1",
username
)
@@ -192,7 +192,7 @@ class GatewayUUIDConverter:
```sql
-- 테스트 사용자 (고정 UUID)
-INSERT INTO users (id, username, email, name) VALUES
+INSERT INTO user (id, username, email, name) VALUES
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'happybell80', 'goeun2dc@gmail.com', '김종태'),
('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'eagle0914', '0914eagle@gmail.com', '전희재'),
('cccccccc-cccc-cccc-cccc-cccccccccccc', 'test_user', 'test@example.com', 'Test User');
@@ -226,7 +226,7 @@ ALTER TABLE gmail_token ADD COLUMN user_uuid UUID;
-- 2. UUID 매핑
UPDATE gmail_token gt
SET user_uuid = u.id
-FROM users u
+FROM user u
WHERE gt.user_id = u.username;
-- 3. 기존 컬럼 제거 및 이름 변경
@@ -236,7 +236,7 @@ ALTER TABLE gmail_token RENAME COLUMN user_uuid TO user_id;
-- 4. 외래키 제약 추가
ALTER TABLE gmail_token
ADD CONSTRAINT fk_user_id
-FOREIGN KEY (user_id) REFERENCES users(id);
+FOREIGN KEY (user_id) REFERENCES user(id);
```
---
@@ -298,7 +298,7 @@ async def get_current_user(request: Request):
async def debug_uuid(username: str):
"""개발 환경에서만 사용"""
user = await db.fetchone(
- "SELECT id, username, oauth_provider FROM users WHERE username = $1",
+ "SELECT id, username, oauth_provider FROM user WHERE username = $1",
username
)
@@ -343,7 +343,7 @@ GROUP BY uuid_type;
-- Username-UUID 매핑 확인
SELECT username, id, oauth_provider
-FROM users
+FROM user
WHERE username = 'happybell80';
-- Slack 사용자 UUID 검증
diff --git a/400_growth/410_레벨업_알고리즘과_사용자_피드백.md b/400_growth/410_레벨업_알고리즘과_사용자_피드백.md
index 96336ae..e35ad56 100644
--- a/400_growth/410_레벨업_알고리즘과_사용자_피드백.md
+++ b/400_growth/410_레벨업_알고리즘과_사용자_피드백.md
@@ -217,12 +217,12 @@ class FeedbackAnalyzer:
})
# 사용자별 선호도 프로파일
- user_preferences = self.build_user_preference_profile(feedback_history)
+ user_preference = self.build_user_preference_profile(feedback_history)
return {
"trend": trend,
"patterns": strengths_weaknesses,
- "user_preferences": user_preferences,
+ "user_preference": user_preference,
"recommendations": self.generate_improvement_recommendations(
strengths_weaknesses
)
diff --git a/700_for_robeing/720_자기_상태_체크하기.md b/700_for_robeing/720_자기_상태_체크하기.md
index 740631a..2cc4baa 100644
--- a/700_for_robeing/720_자기_상태_체크하기.md
+++ b/700_for_robeing/720_자기_상태_체크하기.md
@@ -16,7 +16,7 @@ def check_my_level():
query = """
SELECT level, experience,
next_level_exp - experience as exp_needed
- FROM robeings
+ FROM robeing
WHERE id = self.id
"""
return database.execute(query)
diff --git a/_archive/docs/architecture/auth-server-database-schema.md b/_archive/docs/architecture/auth-server-database-schema.md
index e4af3b5..c05ca1c 100644
--- a/_archive/docs/architecture/auth-server-database-schema.md
+++ b/_archive/docs/architecture/auth-server-database-schema.md
@@ -39,7 +39,7 @@ CREATE TABLE company (
### 2. slack_workspaces (Slack 워크스페이스 연동)
```sql
-CREATE TABLE slack_workspaces (
+CREATE TABLE slack_workspace (
id uuid PRIMARY KEY,
company_id uuid NOT NULL REFERENCES company(id),
team_id varchar(100) NOT NULL UNIQUE,
diff --git a/_archive/docs/architecture/로빙_아키텍쳐_설계_경량.md b/_archive/docs/architecture/로빙_아키텍쳐_설계_경량.md
index df71d10..13dc016 100644
--- a/_archive/docs/architecture/로빙_아키텍쳐_설계_경량.md
+++ b/_archive/docs/architecture/로빙_아키텍쳐_설계_경량.md
@@ -130,7 +130,7 @@ CREATE TABLE company (
updated_at TIMESTAMP DEFAULT NOW()
);
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
company_id UUID REFERENCES company(id),
slack_user_id VARCHAR(50),
@@ -142,7 +142,7 @@ CREATE TABLE users (
);
CREATE TABLE user_skills (
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
skill_id VARCHAR(50),
level INTEGER DEFAULT 1,
usage_count INTEGER DEFAULT 0,
@@ -153,7 +153,7 @@ CREATE TABLE user_skills (
CREATE TABLE skill_growth_logs (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
skill_id VARCHAR(50),
old_level INTEGER,
new_level INTEGER,
diff --git a/_archive/gpt_docs/06_레벨업_UI_인터페이스_변화.md b/_archive/gpt_docs/06_레벨업_UI_인터페이스_변화.md
index 40b5761..4dae4a6 100644
--- a/_archive/gpt_docs/06_레벨업_UI_인터페이스_변화.md
+++ b/_archive/gpt_docs/06_레벨업_UI_인터페이스_변화.md
@@ -180,7 +180,7 @@ function levelUpTransition(fromLevel, toLevel) {
```python
class AdaptiveUI:
def __init__(self):
- self.user_preferences = {}
+ self.user_preference = {}
self.interaction_history = []
def learn_preferences(self, interaction):
diff --git a/ideas/250810_auth_system_analysis.md b/ideas/250810_auth_system_analysis.md
index 7419895..1493277 100644
--- a/ideas/250810_auth_system_analysis.md
+++ b/ideas/250810_auth_system_analysis.md
@@ -309,7 +309,7 @@ email ↔ slack_id ↔ username
-- 2. slack_workspaces: 단순화
-- 3. user_robeings: 사용자-로빙 직접 연결
CREATE TABLE user_robeings (
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100), -- rb10508_micro 등
is_primary BOOLEAN
);
@@ -318,7 +318,7 @@ CREATE TABLE user_robeings (
CREATE TABLE slack_users (
slack_user_id VARCHAR(100), -- U0925SXQFDK
slack_team_id VARCHAR(100),
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100) -- Slack별 로빙 지정 가능
);
```
diff --git a/ideas/250812_claude_Slack_메시지_처리_아키텍처_분석.md b/ideas/250812_claude_Slack_메시지_처리_아키텍처_분석.md
index 0e3047f..39f8637 100644
--- a/ideas/250812_claude_Slack_메시지_처리_아키텍처_분석.md
+++ b/ideas/250812_claude_Slack_메시지_처리_아키텍처_분석.md
@@ -90,7 +90,7 @@ CREATE TABLE slack_user_mapping (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL, -- U04KJHGLS
slack_workspace_id VARCHAR(100), -- T1234567
- user_id UUID REFERENCES users(id), -- 우리 시스템 사용자
+ user_id UUID REFERENCES user(id), -- 우리 시스템 사용자
robeing_id VARCHAR(100), -- rb10508_micro
created_at TIMESTAMP,
UNIQUE(slack_user_id, slack_workspace_id)
@@ -327,8 +327,8 @@ class SlackItem(APIItem):
CREATE TABLE slack_user_mapping (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slack_user_id VARCHAR(100) NOT NULL,
- slack_workspace_id INTEGER REFERENCES slack_workspaces(id),
- user_id UUID REFERENCES users(id),
+ slack_workspace_id INTEGER REFERENCES slack_workspace(id),
+ user_id UUID REFERENCES user(id),
workspace_member_id UUID REFERENCES workspace_member(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
@@ -358,7 +358,7 @@ ChromaDB: rb10508_micro_{user_id}_episodic
-- happybell80을 Slack 사용자와 연결
INSERT INTO slack_user_mapping (slack_user_id, slack_workspace_id, user_id)
SELECT 'U0925SXQFDK', sw.id, u.id
-FROM users u, slack_workspaces sw
+FROM user u, slack_workspaces sw
WHERE u.username = 'happybell80'
AND sw.team_name = 'GoodGang Labs';
```
diff --git a/ideas/250818_conversation_logs_및_robing_stats_활용_계획.md b/ideas/250818_conversation_logs_및_robing_stats_활용_계획.md
index 0a39749..1968bf0 100644
--- a/ideas/250818_conversation_logs_및_robing_stats_활용_계획.md
+++ b/ideas/250818_conversation_logs_및_robing_stats_활용_계획.md
@@ -219,7 +219,7 @@ async def on_task_success(task_type: str, difficulty: int):
CREATE TABLE robeing_settings (
id UUID PRIMARY KEY,
robeing_id VARCHAR(100) UNIQUE,
- user_preferences JSON,
+ user_preference JSON,
system_settings JSON,
skill_settings JSON,
created_at TIMESTAMP,
@@ -274,7 +274,7 @@ class SettingsManager:
### 4.3 설정 예시
```python
# 사용자 선호 설정
-user_preferences = {
+user_preference = {
"response_style": "formal", # formal/casual/friendly
"response_length": "detailed", # brief/normal/detailed
"language": "ko",
diff --git a/ideas/250828_dynamic_system_prompt_memory.md b/ideas/250828_dynamic_system_prompt_memory.md
index f1d413f..af4afeb 100644
--- a/ideas/250828_dynamic_system_prompt_memory.md
+++ b/ideas/250828_dynamic_system_prompt_memory.md
@@ -26,7 +26,7 @@ system_prompt = base_prompt + user_rules[user_id] + dynamic_rules[session_id]
```sql
CREATE TABLE dynamic_prompts (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(50),
rule_type ENUM('never', 'always', 'prefer', 'avoid'),
content TEXT,
diff --git a/ideas/250909_RAG_file_processing_architecture.md b/ideas/250909_RAG_file_processing_architecture.md
index 8fb848d..aa7f6e4 100644
--- a/ideas/250909_RAG_file_processing_architecture.md
+++ b/ideas/250909_RAG_file_processing_architecture.md
@@ -143,7 +143,7 @@ socket.on('processing_update', (data) => {
```sql
CREATE TABLE user_documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
filename VARCHAR(255),
file_hash VARCHAR(64),
file_size BIGINT,
diff --git a/ideas/250909_attendance_management_system.md b/ideas/250909_attendance_management_system.md
index 91681de..ac65920 100644
--- a/ideas/250909_attendance_management_system.md
+++ b/ideas/250909_attendance_management_system.md
@@ -91,7 +91,7 @@ def process_attendance_message(text):
-- 근태 기록
CREATE TABLE attendance_records (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
date DATE NOT NULL,
check_in_time TIMESTAMP,
check_out_time TIMESTAMP,
@@ -104,7 +104,7 @@ CREATE TABLE attendance_records (
-- 휴가 신청
CREATE TABLE leave_requests (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
leave_type VARCHAR(20), -- 'annual', 'sick', 'personal'
start_date DATE,
end_date DATE,
@@ -119,7 +119,7 @@ CREATE TABLE leave_requests (
-- 연차 잔여
CREATE TABLE leave_balances (
- user_id UUID PRIMARY KEY REFERENCES users(id),
+ user_id UUID PRIMARY KEY REFERENCES user(id),
total_days DECIMAL(3,1),
used_days DECIMAL(3,1),
remaining_days DECIMAL(3,1),
diff --git a/plans/250831_unified_id_system_implementation_roadmap.md b/plans/250831_unified_id_system_implementation_roadmap.md
index 4305c64..9f97c66 100644
--- a/plans/250831_unified_id_system_implementation_roadmap.md
+++ b/plans/250831_unified_id_system_implementation_roadmap.md
@@ -30,7 +30,7 @@
#### 1.1 테이블 스키마 업데이트
```sql
-- users 테이블 (이미 UUID 있음, 제약조건 추가)
-ALTER TABLE users
+ALTER TABLE user
ADD CONSTRAINT users_uuid_unique UNIQUE(id);
-- slack_user_mapping 인덱스 추가
@@ -39,7 +39,7 @@ CREATE INDEX idx_slack_user_mapping_slack_user ON slack_user_mapping(slack_user_
-- gmail_passports UUID 참조 추가
ALTER TABLE gmail_passports
-ADD COLUMN user_uuid UUID REFERENCES users(id);
+ADD COLUMN user_uuid UUID REFERENCES user(id);
-- 기존 slack_user_id 기반 데이터 마이그레이션
UPDATE gmail_passports gp
@@ -53,7 +53,7 @@ SET user_uuid = (
-- workspace_member UUID 확인
ALTER TABLE workspace_member
ADD CONSTRAINT fk_workspace_member_user_id
-FOREIGN KEY (user_id) REFERENCES users(id);
+FOREIGN KEY (user_id) REFERENCES user(id);
```
#### 1.2 데이터 검증 스크립트
@@ -70,7 +70,7 @@ def verify_uuid_consistency():
cur.execute("""
SELECT sum.*, u.id
FROM slack_user_mapping sum
- LEFT JOIN users u ON sum.user_id = u.id
+ LEFT JOIN user u ON sum.user_id = u.id
WHERE u.id IS NULL
""")
orphaned = cur.fetchall()
diff --git a/plans/250831_workspace_unification_plan.md b/plans/250831_workspace_unification_plan.md
index 2d4bec7..d38970e 100644
--- a/plans/250831_workspace_unification_plan.md
+++ b/plans/250831_workspace_unification_plan.md
@@ -37,13 +37,13 @@ FROM company
WHERE id NOT IN (SELECT id FROM workspaces);
-- 2. slack_workspaces 테이블 수정
-ALTER TABLE slack_workspaces
+ALTER TABLE slack_workspace
ADD COLUMN workspace_id UUID;
-UPDATE slack_workspaces
+UPDATE slack_workspace
SET workspace_id = company_id;
-ALTER TABLE slack_workspaces
+ALTER TABLE slack_workspace
DROP COLUMN company_id,
ADD CONSTRAINT slack_workspaces_workspace_id_fkey
FOREIGN KEY (workspace_id) REFERENCES workspaces(id);
@@ -102,7 +102,7 @@ SELECT
sw.team_name,
w.name as workspace_name,
w.robeing_port
-FROM slack_workspaces sw
+FROM slack_workspace sw
JOIN workspaces w ON sw.workspace_id = w.id;
```
diff --git a/plans/250911_main_db3_migration_plan.md b/plans/250911_main_db3_migration_plan.md
index 1ac9eb2..3b00708 100644
--- a/plans/250911_main_db3_migration_plan.md
+++ b/plans/250911_main_db3_migration_plan.md
@@ -27,7 +27,7 @@
| workspaces | team | 구조 변환 필요 |
| workspace_member | workspace_member | user_id 매핑 |
| slack_workspaces | slack_workspace | team_id 매핑 |
-| user_preferences | user_preference | slack_user_id 제거됨 |
+| user_preference | user_preference | slack_user_id 제거됨 |
| conversation_log | conversation_log | robeing_id 컬럼 없음 |
| gmail_token | gmail_token | 구조 동일 |
| robeing_stats | robeing | product_id, team_id 추가 |
@@ -71,9 +71,9 @@ SELECT id, user_id, role::user_role, is_active, joined_at FROM main_db3.workspac
INSERT INTO slack_workspace (id, team_id, slack_team_id, bot_token, is_active)
SELECT id, workspace_id, team_id, bot_token, is_active FROM main_db3.slack_workspaces;
--- 6. user_preferences → user_preference (slack_user_id 제거)
+-- 6. user_preference → user_preference (slack_user_id 제거)
INSERT INTO user_preference (user_id, news_keywords, email_filter, briefing_enabled)
-SELECT user_id, news_keywords, email_filter, briefing_enabled FROM main_db3.user_preferences;
+SELECT user_id, news_keywords, email_filter, briefing_enabled FROM main_db3.user_preference;
-- 7. gmail_token → gmail_token
INSERT INTO gmail_token SELECT * FROM main_db3.gmail_token;
diff --git a/plans/completed/250812_auth_db_테이블_단순화_방안.md b/plans/completed/250812_auth_db_테이블_단순화_방안.md
index a0a88fb..0bab301 100644
--- a/plans/completed/250812_auth_db_테이블_단순화_방안.md
+++ b/plans/completed/250812_auth_db_테이블_단순화_방안.md
@@ -47,7 +47,7 @@ slack_workspaces: 2개 (GoodGang Labs, test)
```sql
-- 사용자 테이블
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(50) UNIQUE,
@@ -61,7 +61,7 @@ CREATE TABLE users (
-- 사용자별 로빙 할당
CREATE TABLE user_robeings (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100) NOT NULL, -- rb10508_micro, rb8001 등
robeing_port INTEGER,
is_primary BOOLEAN DEFAULT false,
@@ -74,7 +74,7 @@ CREATE TABLE slack_user_mapping (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL, -- U04KJHGLS
slack_team_id VARCHAR(100), -- T035VFRKCN6
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
bot_token TEXT, -- 워크스페이스별 봇 토큰
created_at TIMESTAMP,
UNIQUE(slack_user_id, slack_team_id)
@@ -88,7 +88,7 @@ CREATE TABLE slack_user_mapping (
```sql
-- 기존 users 테이블 유지
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(50) UNIQUE,
@@ -103,7 +103,7 @@ CREATE TABLE users (
);
-- Slack 워크스페이스 (단순화)
-CREATE TABLE slack_workspaces (
+CREATE TABLE slack_workspace (
id UUID PRIMARY KEY,
team_id VARCHAR(100) UNIQUE NOT NULL,
team_name VARCHAR(255),
@@ -119,7 +119,7 @@ CREATE TABLE slack_workspaces (
-- 사용자-로빙 연결
CREATE TABLE user_robeings (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100) NOT NULL,
robeing_port INTEGER,
robeing_host VARCHAR(255) DEFAULT '192.168.219.52',
@@ -132,8 +132,8 @@ CREATE TABLE user_robeings (
CREATE TABLE slack_users (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL,
- slack_team_id VARCHAR(100) REFERENCES slack_workspaces(team_id),
- user_id UUID REFERENCES users(id),
+ slack_team_id VARCHAR(100) REFERENCES slack_workspace(team_id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100), -- 이 Slack 사용자가 대화할 로빙
created_at TIMESTAMP,
updated_at TIMESTAMP,
@@ -154,7 +154,7 @@ CREATE TABLE slack_users (
```sql
-- 사용자 (모든 정보 통합)
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(50) UNIQUE,
@@ -224,7 +224,7 @@ CREATE TABLE slack_users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slack_user_id VARCHAR(100) NOT NULL,
slack_team_id VARCHAR(100),
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
@@ -235,8 +235,8 @@ CREATE TABLE slack_users (
#### Phase 3: 기존 테이블 정리
```sql
-- Foreign key 제약 제거 후 테이블 삭제
-ALTER TABLE slack_workspaces DROP CONSTRAINT slack_workspaces_company_id_fkey;
-ALTER TABLE slack_workspaces DROP COLUMN company_id;
+ALTER TABLE slack_workspace DROP CONSTRAINT slack_workspaces_company_id_fkey;
+ALTER TABLE slack_workspace DROP COLUMN company_id;
DROP TABLE workspace_member;
DROP TABLE workspaces;
@@ -295,7 +295,7 @@ SELECT * FROM user_robeings WHERE user_id = ? AND is_primary = true
# 신규
SELECT u.*, sr.robeing_id
FROM slack_users sr
-JOIN users u ON sr.user_id = u.id
+JOIN user u ON sr.user_id = u.id
WHERE sr.slack_user_id = ? AND sr.slack_team_id = ?
```
@@ -354,7 +354,7 @@ WHERE sr.slack_user_id = ? AND sr.slack_team_id = ?
```sql
CREATE TABLE user_robeings (
id UUID PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100) NOT NULL,
robeing_port INTEGER,
robeing_host VARCHAR(255) DEFAULT '192.168.219.52',
@@ -374,7 +374,7 @@ CREATE TABLE slack_users (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL,
slack_team_id VARCHAR(100),
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
robeing_id VARCHAR(100),
display_name VARCHAR(255), -- Slack 표시 이름
slack_timezone VARCHAR(50), -- 사용자 시간대
diff --git a/plans/completed/250812_로컬개발자_Slack사용자매핑_구현계획.md b/plans/completed/250812_로컬개발자_Slack사용자매핑_구현계획.md
index 448518e..d3796bc 100644
--- a/plans/completed/250812_로컬개발자_Slack사용자매핑_구현계획.md
+++ b/plans/completed/250812_로컬개발자_Slack사용자매핑_구현계획.md
@@ -114,7 +114,7 @@ async def get_user_mapping(
u.email,
wm.robeing_id
FROM slack_user_mapping sum
- JOIN users u ON sum.user_id = u.id
+ JOIN user u ON sum.user_id = u.id
LEFT JOIN workspace_member wm ON u.id = wm.user_id
WHERE sum.slack_user_id = :slack_user_id
"""
@@ -228,8 +228,8 @@ async def route_slack_message(
CREATE TABLE IF NOT EXISTS slack_user_mapping (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slack_user_id VARCHAR(100) NOT NULL,
- slack_workspace_id INTEGER REFERENCES slack_workspaces(id),
- user_id UUID REFERENCES users(id) NOT NULL,
+ slack_workspace_id INTEGER REFERENCES slack_workspace(id),
+ user_id UUID REFERENCES user(id) NOT NULL,
workspace_member_id UUID REFERENCES workspace_member(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
@@ -249,7 +249,7 @@ SELECT
'U0925SXQFDK',
sw.id,
u.id
-FROM users u, slack_workspaces sw
+FROM user u, slack_workspaces sw
WHERE u.username = 'happybell80'
AND sw.team_name = 'GoodGang Labs';
```
diff --git a/plans/completed/250819_claude_사용자구분및ChromaDB격리문제.md b/plans/completed/250819_claude_사용자구분및ChromaDB격리문제.md
index d2010ee..e409b07 100644
--- a/plans/completed/250819_claude_사용자구분및ChromaDB격리문제.md
+++ b/plans/completed/250819_claude_사용자구분및ChromaDB격리문제.md
@@ -92,8 +92,8 @@ collection_name = f"robeing_rb8001_{user_id}_memories"
#### 1. 사용자 관리 일원화
```sql
-- PostgreSQL users 테이블 확장
-ALTER TABLE users ADD COLUMN slack_user_id VARCHAR(20);
-CREATE INDEX idx_slack_user_id ON users(slack_user_id);
+ALTER TABLE user ADD COLUMN slack_user_id VARCHAR(20);
+CREATE INDEX idx_slack_user_id ON user(slack_user_id);
-- 매핑 테이블
CREATE TABLE user_identity_mapping (
diff --git a/plans/completed/250828_slack_integration_level3_plan.md b/plans/completed/250828_slack_integration_level3_plan.md
index 09da635..02fc634 100644
--- a/plans/completed/250828_slack_integration_level3_plan.md
+++ b/plans/completed/250828_slack_integration_level3_plan.md
@@ -120,8 +120,8 @@ Slack → @robeing 또는 /robeing → rb8001 → 응답
### 필요 컬럼 추가
```sql
-ALTER TABLE users ADD COLUMN slack_user_id VARCHAR(50);
-ALTER TABLE users ADD COLUMN slack_team_id VARCHAR(50);
+ALTER TABLE user ADD COLUMN slack_user_id VARCHAR(50);
+ALTER TABLE user ADD COLUMN slack_team_id VARCHAR(50);
ALTER TABLE conversation_log ADD COLUMN thread_ts VARCHAR(20);
ALTER TABLE conversation_log ADD COLUMN channel_type VARCHAR(20);
```
diff --git a/troubleshooting/250730_happybell80_프론트백엔드연결및workspace전환.md b/troubleshooting/250730_happybell80_프론트백엔드연결및workspace전환.md
index b3f4466..15ebf40 100644
--- a/troubleshooting/250730_happybell80_프론트백엔드연결및workspace전환.md
+++ b/troubleshooting/250730_happybell80_프론트백엔드연결및workspace전환.md
@@ -95,7 +95,7 @@
**새로운 테이블 구조**:
```sql
-- users 테이블
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255),
@@ -106,7 +106,7 @@ CREATE TABLE users (
-- workspace_member 테이블
CREATE TABLE workspace_member (
workspace_id UUID REFERENCES workspaces(id),
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
role VARCHAR(50),
robeing_id VARCHAR(100), -- 할당된 로빙
...
diff --git a/troubleshooting/250809_happybell80_robing-gateway구현.md b/troubleshooting/250809_happybell80_robing-gateway구현.md
index 3b15196..72928ca 100644
--- a/troubleshooting/250809_happybell80_robing-gateway구현.md
+++ b/troubleshooting/250809_happybell80_robing-gateway구현.md
@@ -238,7 +238,7 @@ https://ro-being.com/gateway/api/chat
```sql
-- 잘못된 형식 (문자열을 UUID 컬럼에 삽입 시도)
INSERT INTO workspaces (id, ...) VALUES ('ws-ivada-001', ...);
-INSERT INTO users (id, ...) VALUES ('user-happybell80', ...);
+INSERT INTO user (id, ...) VALUES ('user-happybell80', ...);
```
**두 번째 시도 - role 값 오류**:
@@ -254,7 +254,7 @@ INSERT INTO workspace_member (..., role, ...) VALUES (..., 'OWNER', ...); -- O
INSERT INTO workspaces (id, ...) VALUES
('11111111-1111-1111-1111-111111111111'::uuid, ...);
-INSERT INTO users (id, email, name) VALUES
+INSERT INTO user (id, email, name) VALUES
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid, 'goeun2dc@gmail.com', '김종태'),
('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid, '0914eagle@gmail.com', '전희재'),
('cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid, 'hhyong91@gmail.com', '황한용');
diff --git a/troubleshooting/250809_happybell80_username시스템구축.md b/troubleshooting/250809_happybell80_username시스템구축.md
index 3895506..bb35fbc 100644
--- a/troubleshooting/250809_happybell80_username시스템구축.md
+++ b/troubleshooting/250809_happybell80_username시스템구축.md
@@ -35,7 +35,7 @@
```sql
-- users 테이블에 username 필드 추가
-ALTER TABLE users ADD COLUMN username VARCHAR(50) UNIQUE;
+ALTER TABLE user ADD COLUMN username VARCHAR(50) UNIQUE;
```
**파일 수정:**
diff --git a/troubleshooting/250811_happybell80_ChromaDB메모리손실.md b/troubleshooting/250811_happybell80_ChromaDB메모리손실.md
index 4187de0..f4a0c65 100644
--- a/troubleshooting/250811_happybell80_ChromaDB메모리손실.md
+++ b/troubleshooting/250811_happybell80_ChromaDB메모리손실.md
@@ -100,7 +100,7 @@ async def get_robeing_info(username: str):
query = text("""
SELECT ...
FROM workspace_member wm
- JOIN users u ON wm.user_id = u.id
+ JOIN user u ON wm.user_id = u.id
WHERE u.username = :username
""")
```
diff --git a/troubleshooting/250811_happybell80_Gateway필드변환문제.md b/troubleshooting/250811_happybell80_Gateway필드변환문제.md
index 3e1614e..6879413 100644
--- a/troubleshooting/250811_happybell80_Gateway필드변환문제.md
+++ b/troubleshooting/250811_happybell80_Gateway필드변환문제.md
@@ -35,7 +35,7 @@ async def get_robeing_info(username: str):
query = text("""
SELECT ...
FROM workspace_member wm
- JOIN users u ON wm.user_id = u.id
+ JOIN user u ON wm.user_id = u.id
WHERE u.username = :username
""")
```
diff --git a/troubleshooting/250812_slack_user_mapping_구현.md b/troubleshooting/250812_slack_user_mapping_구현.md
index 64f750e..6d37782 100644
--- a/troubleshooting/250812_slack_user_mapping_구현.md
+++ b/troubleshooting/250812_slack_user_mapping_구현.md
@@ -27,8 +27,8 @@
CREATE TABLE slack_user_mapping (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slack_user_id VARCHAR(100) NOT NULL,
- slack_workspace_id UUID REFERENCES slack_workspaces(id),
- user_id UUID REFERENCES users(id) NOT NULL,
+ slack_workspace_id UUID REFERENCES slack_workspace(id),
+ user_id UUID REFERENCES user(id) NOT NULL,
workspace_member_id UUID REFERENCES workspace_member(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
diff --git a/troubleshooting/250818_happybell80_대화히스토리구현.md b/troubleshooting/250818_happybell80_대화히스토리구현.md
index c35ce03..da22151 100644
--- a/troubleshooting/250818_happybell80_대화히스토리구현.md
+++ b/troubleshooting/250818_happybell80_대화히스토리구현.md
@@ -147,13 +147,13 @@ def resolve_username(user_id: str) -> str:
```sql
-- 잘못된 예: 테스트용 UUID 하드코딩 (250809_happybell80_robeing-gateway구현.md)
-INSERT INTO users (id, email, name) VALUES
+INSERT INTO user (id, email, name) VALUES
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid, 'goeun2dc@gmail.com', '김종태'),
('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid, '0914eagle@gmail.com', '전희재'),
('cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid, 'hhyong91@gmail.com', '황한용');
-- 올바른 방법: gen_random_uuid() 사용
-INSERT INTO users (id, email, name, username) VALUES
+INSERT INTO user (id, email, name, username) VALUES
(gen_random_uuid(), 'goeun2dc@gmail.com', '김종태', 'happybell80');
-- 실제 UUID 생성: 'e7a9f3c2-8b4d-4f2e-a1b3-9c8d7e6f5a4b'
```
@@ -394,12 +394,12 @@ localStorage.removeItem('user_id');
### 8. **PostgreSQL UUID 올바른 사용법**
```sql
-- ❌ 잘못된 방법: 하드코딩
-INSERT INTO users (id) VALUES ('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa');
+INSERT INTO user (id) VALUES ('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa');
-- ✅ 올바른 방법: 함수 사용
-INSERT INTO users (id) VALUES (gen_random_uuid());
+INSERT INTO user (id) VALUES (gen_random_uuid());
-- 또는 테이블 정의 시 DEFAULT 설정
-CREATE TABLE users (
+CREATE TABLE user (
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
);
```
diff --git a/troubleshooting/250823_happybell80_Gmail_OAuth_토큰_갱신_시스템_구축.md b/troubleshooting/250823_happybell80_Gmail_OAuth_토큰_갱신_시스템_구축.md
index 4dfa4bf..f096935 100644
--- a/troubleshooting/250823_happybell80_Gmail_OAuth_토큰_갱신_시스템_구축.md
+++ b/troubleshooting/250823_happybell80_Gmail_OAuth_토큰_갱신_시스템_구축.md
@@ -61,7 +61,7 @@ Google Cloud Console에 추가:
# auth-server/app/providers/gmail_passport.py
async def get_uuid_from_username(username: str, conn) -> str:
row = await conn.fetchrow("""
- SELECT id::text FROM users WHERE username = $1
+ SELECT id::text FROM user WHERE username = $1
""", username)
if row:
return row['id']
diff --git a/troubleshooting/250825_gmail_token_expired_daily_briefing_fix.md b/troubleshooting/250825_gmail_token_expired_daily_briefing_fix.md
index 6449017..e3fe58c 100644
--- a/troubleshooting/250825_gmail_token_expired_daily_briefing_fix.md
+++ b/troubleshooting/250825_gmail_token_expired_daily_briefing_fix.md
@@ -122,7 +122,7 @@ psql -h localhost -U robeings -d main_db -c \
"SELECT u.username, gt.access_token IS NOT NULL as has_token,
gt.expires_at < extract(epoch from now()) as is_expired,
gt.metadata->>'email' as email
- FROM users u
+ FROM user u
LEFT JOIN gmail_token gt ON u.id = gt.user_id
WHERE u.username IN ('happybell80', '0914eagle', 'cdctfm');"
```
diff --git a/troubleshooting/250825_happybell80_UI개선및개인화준비.md b/troubleshooting/250825_happybell80_UI개선및개인화준비.md
index b3e6dce..5748e77 100644
--- a/troubleshooting/250825_happybell80_UI개선및개인화준비.md
+++ b/troubleshooting/250825_happybell80_UI개선및개인화준비.md
@@ -248,7 +248,7 @@ interface TaskSettings {
### 📋 후속 작업 필요
1. **백엔드 API 구축**
- - user_preferences 테이블 생성
+ - user_preference 테이블 생성
- 키워드 기반 필터링 로직
- 사용자별 설정 저장/조회 API
@@ -290,7 +290,7 @@ interface TaskSettings {
- ~~Gmail 토큰 갱신 크론잡 설정~~ (필요없음 - 자동갱신 구현됨)
2. **단기 (백엔드)**
- - user_preferences API 구현
+ - user_preference API 구현
- 키워드 필터링 로직 개발
3. **중기 (통합)**
diff --git a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md
index 5209181..3787364 100644
--- a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md
+++ b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md
@@ -122,7 +122,7 @@ SELECT DISTINCT
u.id,
sum.slack_user_id,
wm.robeing_id
-FROM users u
+FROM user u
LEFT JOIN slack_user_mapping sum ON u.id = sum.user_id
LEFT JOIN workspace_member wm ON u.id = wm.user_id;
```
@@ -167,7 +167,7 @@ DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db
2. ✅ gmail_token의 slack_user_id 컬럼 확인 (이미 존재, slack_id 컬럼 없음 - 2025-08-27 확인)
3. ✅ **뉴스 키워드 하드코딩 제거** (2025-08-26 21:00 완료)
- rb8001/app/skills/dm_skill.py 수정 (커밋: aed931e)
- - user_preferences 테이블 활용
+ - user_preference 테이블 활용
- 사용자별 맞춤 키워드 설정 가능
4. ✅ **이메일 요약 프롬프트 수정** (2025-08-26 21:00 완료)
- Slack mrkdwn 형식으로 변경 (커밋: 7103599)
@@ -203,7 +203,7 @@ SELECT
u.username,
wm.robeing_id
FROM slack_user_mapping sum
-JOIN users u ON sum.user_id = u.id
+JOIN user u ON sum.user_id = u.id
LEFT JOIN workspace_member wm ON u.id = wm.user_id;
```
diff --git a/troubleshooting/250826_slack_id_column_standardization.md b/troubleshooting/250826_slack_id_column_standardization.md
index da2fa20..c9ce6fb 100644
--- a/troubleshooting/250826_slack_id_column_standardization.md
+++ b/troubleshooting/250826_slack_id_column_standardization.md
@@ -46,12 +46,12 @@ CREATE INDEX idx_gmail_token_slack_user_id ON gmail_token(slack_user_id); --
- ~~rb8001이 `["AI", "기술", "IT"]`만 사용 (dm_skill.py:309)~~
- ~~매일 같은 뉴스 반복~~
-### ✅ 구현 완료: user_preferences 테이블 (생성 확인됨)
+### ✅ 구현 완료: user_preference 테이블 (생성 확인됨)
```sql
-CREATE TABLE user_preferences ( -- ✅ 테이블 생성 완료
+CREATE TABLE user_preference ( -- ✅ 테이블 생성 완료
id SERIAL PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
slack_user_id VARCHAR(100),
news_keywords VARCHAR(128)[], -- ✅ 배열 타입 적용됨
email_filter VARCHAR(128)[], -- ✅ 배열 타입 적용됨
@@ -64,7 +64,7 @@ CREATE TABLE user_preferences ( -- ✅ 테이블 생성 완료
### ✅ rb8001 코드 수정 완료 (커밋: aed931e, 7103599)
- dm_skill.py의 get_news_content() 메서드에서 사용자별 키워드 조회 구현
- _get_user_news_keywords() 메서드 추가
-- user_preferences 테이블에서 조회, 없으면 기본값 사용
+- user_preference 테이블에서 조회, 없으면 기본값 사용
- send_daily_summary_dm()에서 사용자별 뉴스 제공
### ⏳ 슬랙 명령어 설계 (추후 구현 예정)
@@ -81,13 +81,13 @@ CREATE TABLE user_preferences ( -- ✅ 테이블 생성 완료
#### 구현 방법
1. rb8001이 메시지에서 "뉴스 키워드 설정:" 패턴 감지
-2. user_preferences 테이블에 키워드 저장 (INSERT ON CONFLICT UPDATE)
+2. user_preference 테이블에 키워드 저장 (INSERT ON CONFLICT UPDATE)
3. 다음 브리핑부터 해당 키워드로 뉴스 검색
### 프론트엔드 연동
-- ActivityPanel 설정 UI에서도 동일하게 user_preferences 수정
+- ActivityPanel 설정 UI에서도 동일하게 user_preference 수정
- Gateway API 엔드포인트로 CRUD 구현
-- **⚠️ 구조 불일치 문제 발견**(일부 환경 DB 미반영으로 오류 가능): [상세 문서](/home/happybell/projects/ivada/DOCS/troubleshooting/250827_frontend_backend_user_preferences_mismatch.md) 참조
+- **⚠️ 구조 불일치 문제 발견**(일부 환경 DB 미반영으로 오류 가능): [상세 문서](/home/happybell/projects/ivada/DOCS/troubleshooting/250827_frontend_backend_user_preference_mismatch.md) 참조
---
@@ -98,7 +98,7 @@ CREATE TABLE user_preferences ( -- ✅ 테이블 생성 완료
- gmail_token.slack_id → slack_user_id 변경 완료
- 인덱스 idx_gmail_token_slack_user_id 생성됨
-2. **user_preferences 테이블 생성** (2025-08-27 DB 확인)
+2. **user_preference 테이블 생성** (2025-08-27 DB 확인)
- 테이블 존재 확인됨
- news_keywords, email_filter 배열 타입 적용됨
diff --git a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md
index b76511c..7f04797 100644
--- a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md
+++ b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md
@@ -132,7 +132,7 @@ jwt_token = create_access_token(data={
```python
# database.py:170-199 이미 완벽 구현
async def get_user_by_username(username: str):
- # SELECT id::text as user_id FROM users WHERE username = :username
+ # SELECT id::text as user_id FROM user WHERE username = :username
# username으로 UUID 조회 정상 작동
# JWT sub가 UUID로 바뀌면 이 변환 불필요해짐
```
@@ -166,7 +166,7 @@ username = payload.get("username") # username
### 5.1 현재 상태 확인 (51123 검증 완료)
```bash
# Users 테이블 확인 (51123)
-SELECT id, username FROM users WHERE username='happybell80';
+SELECT id, username FROM user WHERE username='happybell80';
# id: 1e16e9d5-59f3-54da-a661-8abeabff4230 (정상 UUID4)
# username: happybell80
diff --git a/troubleshooting/250827_frontend_backend_preferences_API_연동_완료.md b/troubleshooting/250827_frontend_backend_preferences_API_연동_완료.md
index 264832e..0cdacba 100644
--- a/troubleshooting/250827_frontend_backend_preferences_API_연동_완료.md
+++ b/troubleshooting/250827_frontend_backend_preferences_API_연동_완료.md
@@ -31,13 +31,13 @@
- 스케줄 설정 (매일/평일/주말/커스텀)
- 포함 항목 선택 (이메일/뉴스/캘린더/슬랙)
-### 2.2 Backend (user_preferences 테이블)
+### 2.2 Backend (user_preference 테이블)
- **위치**: PostgreSQL main_db
- **구조**:
```sql
- CREATE TABLE user_preferences (
+ CREATE TABLE user_preference (
id SERIAL PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
slack_user_id VARCHAR(100),
news_keywords VARCHAR(128)[], -- 뉴스 키워드 배열
email_filter VARCHAR(128)[], -- 이메일 필터 (미사용)
@@ -48,7 +48,7 @@
```
### 2.3 rb8001 사용 현황
-- **dm_skill.py**: user_preferences에서 news_keywords 조회
+- **dm_skill.py**: user_preference에서 news_keywords 조회
- **사용자별 맞춤 뉴스**: 정상 작동 중
- **브리핑 시간**: briefing_time 사용 중
@@ -58,7 +58,7 @@
### 3.1 데이터 모델 불일치
-| Frontend TaskSettings | Backend user_preferences | 불일치 내용 |
+| Frontend TaskSettings | Backend user_preference | 불일치 내용 |
|---------------------|------------------------|------------|
| keywords: string[] | news_keywords VARCHAR(128)[] | ✅ 호환 가능 |
| scheduleTime: string | briefing_time TIME | ⚠️ 타입 변환 필요 |
@@ -176,12 +176,12 @@ Response: 403 Forbidden - "Can only access your own preferences"
### 4.1 단기 해결책 (최소 수정)
1. **Backend 스키마 확장**
```sql
- ALTER TABLE user_preferences ADD COLUMN schedule_type VARCHAR(20);
- ALTER TABLE user_preferences ADD COLUMN schedule_days VARCHAR(10)[];
- ALTER TABLE user_preferences ADD COLUMN include_email BOOLEAN DEFAULT true;
- ALTER TABLE user_preferences ADD COLUMN include_news BOOLEAN DEFAULT true;
- ALTER TABLE user_preferences ADD COLUMN include_calendar BOOLEAN DEFAULT false;
- ALTER TABLE user_preferences ADD COLUMN include_slack BOOLEAN DEFAULT false;
+ ALTER TABLE user_preference ADD COLUMN schedule_type VARCHAR(20);
+ ALTER TABLE user_preference ADD COLUMN schedule_days VARCHAR(10)[];
+ ALTER TABLE user_preference ADD COLUMN include_email BOOLEAN DEFAULT true;
+ ALTER TABLE user_preference ADD COLUMN include_news BOOLEAN DEFAULT true;
+ ALTER TABLE user_preference ADD COLUMN include_calendar BOOLEAN DEFAULT false;
+ ALTER TABLE user_preference ADD COLUMN include_slack BOOLEAN DEFAULT false;
```
2. **robeing-monitor에 CRUD API 추가**
@@ -199,7 +199,7 @@ Response: 403 Forbidden - "Can only access your own preferences"
```sql
CREATE TABLE scheduled_tasks (
id SERIAL PRIMARY KEY,
- user_id UUID REFERENCES users(id),
+ user_id UUID REFERENCES user(id),
task_type VARCHAR(50), -- 'daily_briefing', 'weekly_report' 등
title VARCHAR(255),
schedule_type VARCHAR(20),
@@ -257,7 +257,7 @@ Gateway (8100) + JWT 인증
↓
robeing-monitor (9024)
↓
-PostgreSQL user_preferences 테이블
+PostgreSQL user_preference 테이블
```
### UUID 체계
diff --git a/troubleshooting/250827_happybell80_긴급이슈점검및코드업데이트.md b/troubleshooting/250827_happybell80_긴급이슈점검및코드업데이트.md
index 00be29b..abf8cd4 100644
--- a/troubleshooting/250827_happybell80_긴급이슈점검및코드업데이트.md
+++ b/troubleshooting/250827_happybell80_긴급이슈점검및코드업데이트.md
@@ -37,7 +37,7 @@
- Mock 데이터 하드코딩
// Backend (dm_skill.py)
-- PostgreSQL user_preferences 테이블 사용
+- PostgreSQL user_preference 테이블 사용
- 사용자당 1개 설정만 저장
- news_keywords만 활용
```
@@ -47,7 +47,7 @@
- API 엔드포인트 미구현
- 다중 작업 관리 불가
-**관련 문서:** `/DOCS/troubleshooting/250827_frontend_backend_user_preferences_mismatch.md`
+**관련 문서:** `/DOCS/troubleshooting/250827_frontend_backend_user_preference_mismatch.md`
#### B. Gmail 토큰 관련 코드 확인 ✅
**현황:**
@@ -138,7 +138,7 @@ rb8001이 모든 사용자 대화를 하나의 ChromaDB 컬렉션에 저장:
- ~~기존 데이터 마이그레이션~~
2. **Frontend-Backend 연동 재설계**
- - user_preferences 테이블 구조 확장
+ - user_preference 테이블 구조 확장
- API 엔드포인트 구현
- 다중 작업 관리 지원
@@ -170,7 +170,7 @@ rb8001이 모든 사용자 대화를 하나의 ChromaDB 컬렉션에 저장:
## 7. 참고 문서
-- [Frontend-Backend 불일치 분석](./250827_frontend_backend_user_preferences_mismatch.md)
+- [Frontend-Backend 불일치 분석](./250827_frontend_backend_user_preference_mismatch.md)
- [51124 서버 핵심 이슈 (ChromaDB/토큰)](./250827_51124_critical_issues.md)
- [ID 체계 표준화](./250826_slack_id_column_standardization.md)
- [보안 공격 차단](./250826_security_attack_detection.md)
diff --git a/troubleshooting/250831_rb8001_context_race_condition_fix.md b/troubleshooting/250831_rb8001_context_race_condition_fix.md
index c0265e2..ec2d427 100644
--- a/troubleshooting/250831_rb8001_context_race_condition_fix.md
+++ b/troubleshooting/250831_rb8001_context_race_condition_fix.md
@@ -69,7 +69,7 @@ async def get_user_mapping(identifier: str, db: Session = Depends(get_db)):
# UUID로 직접 조회
query = text("""
SELECT u.id as user_id, u.username, u.email, wm.robeing_id
- FROM users u
+ FROM user u
LEFT JOIN workspace_member wm ON u.id = wm.user_id
WHERE u.id = :user_id
""")
diff --git a/troubleshooting/250901_hongtaeju_slack_oauth_mapping_failure.md b/troubleshooting/250901_hongtaeju_slack_oauth_mapping_failure.md
index 548b0cd..152480c 100644
--- a/troubleshooting/250901_hongtaeju_slack_oauth_mapping_failure.md
+++ b/troubleshooting/250901_hongtaeju_slack_oauth_mapping_failure.md
@@ -18,7 +18,7 @@
-- 확인 결과: 모두 0 rows
SELECT * FROM slack_user_mapping WHERE user_id = '237494f7-061c-484c-a4f7-f500611e32f1'; -- ❌
SELECT * FROM workspace_member WHERE user_id = '237494f7-061c-484c-a4f7-f500611e32f1'; -- ❌
-SELECT * FROM user_preferences WHERE user_id = '237494f7-061c-484c-a4f7-f500611e32f1'; -- ❌
+SELECT * FROM user_preference WHERE user_id = '237494f7-061c-484c-a4f7-f500611e32f1'; -- ❌
```
## 3. 근본 원인
@@ -26,7 +26,7 @@ auth-server의 Slack OAuth 콜백(`/auth/slack/login/callback`)에서:
1. ✅ users 테이블 생성/업데이트
2. ❌ slack_user_mapping 생성 안 함
3. ❌ workspace_member 추가 안 함
-4. ❌ user_preferences 초기화 안 함
+4. ❌ user_preference 초기화 안 함
## 4. 영향
- workspace_member 자동 추가 구현됨(9/11), 기본 robeing 할당 정상
@@ -36,7 +36,7 @@ auth-server의 Slack OAuth 콜백(`/auth/slack/login/callback`)에서:
## 5. 즉시 해결 (수동)
```sql
-- 1. username 설정
-UPDATE users SET username = 'hongtj' WHERE id = '237494f7-061c-484c-a4f7-f500611e32f1';
+UPDATE user SET username = 'hongtj' WHERE id = '237494f7-061c-484c-a4f7-f500611e32f1';
-- 2. workspace_member 추가 (team_id 확인 필요)
INSERT INTO workspace_member (user_id, workspace_id, robeing_id)
diff --git a/troubleshooting/250903_slack_multi_workspace_token_issue.md b/troubleshooting/250903_slack_multi_workspace_token_issue.md
index 9d07e67..b4bb4e3 100644
--- a/troubleshooting/250903_slack_multi_workspace_token_issue.md
+++ b/troubleshooting/250903_slack_multi_workspace_token_issue.md
@@ -62,7 +62,7 @@ async def slack_proxy(request: Request):
# DB 조회 (team_id 인덱스 활용)
token = await db.fetch_one(
- "SELECT bot_token FROM slack_workspaces WHERE team_id = ?",
+ "SELECT bot_token FROM slack_workspace WHERE team_id = ?",
team_id
)
diff --git a/troubleshooting/250911_happybell80_PostgreSQL_테이블명_단수형_통일.md b/troubleshooting/250911_happybell80_PostgreSQL_테이블명_단수형_통일.md
index 9786959..de9519b 100644
--- a/troubleshooting/250911_happybell80_PostgreSQL_테이블명_단수형_통일.md
+++ b/troubleshooting/250911_happybell80_PostgreSQL_테이블명_단수형_통일.md
@@ -33,11 +33,11 @@
| 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------|
| auth-server/app/models/user.py | 21-35 | 테이블 모델 정의 (picture 컬럼) |
-| auth-server/app/providers/gmail_passport.py | 178 | SELECT id FROM users WHERE username = $1 |
-| auth-server/app/providers/gmail_passport.py | 187 | SELECT username FROM users WHERE id = $1 |
+| auth-server/app/providers/gmail_passport.py | 178 | SELECT id FROM user WHERE username = $1 |
+| auth-server/app/providers/gmail_passport.py | 187 | SELECT username FROM user WHERE id = $1 |
| robeing-gateway/app/database.py | 98-112 | JOIN 쿼리 (workspace_member, workspaces와 함께) |
-| robeing-gateway/app/database.py | 182-191 | SELECT * FROM users WHERE username = $1 |
-| robeing-gateway/app/database.py | 321-328 | SELECT * FROM users (전체 조회) |
+| robeing-gateway/app/database.py | 182-191 | SELECT * FROM user WHERE username = $1 |
+| robeing-gateway/app/database.py | 321-328 | SELECT * FROM user (전체 조회) |
| robeing-gateway/app/models.py | 11-24 | 테이블 모델 정의 (avatar_url 컬럼) |
### 2.2 company/team 테이블 (실제 DB: company+team, 코드: workspaces 참조)
@@ -85,8 +85,8 @@
|-----------|-----------|-----------|
| auth-server/app/models/workspace.py | 43-62 | 테이블 모델 정의 (현재 company_id로 정의됨) |
| auth-server/migrations/add_user_workspace_tables.sql | 60-76 | ALTER TABLE 정의 (company_id → workspace_id 변경) |
-| robeing-gateway/app/main.py | 522-525 | SELECT bot_token FROM slack_workspaces WHERE team_id = $1 |
-| robeing-gateway/app/main.py | 567-570 | SELECT bot_token FROM slack_workspaces WHERE team_id = $1 |
+| robeing-gateway/app/main.py | 522-525 | SELECT bot_token FROM slack_workspace WHERE team_id = $1 |
+| robeing-gateway/app/main.py | 567-570 | SELECT bot_token FROM slack_workspace WHERE team_id = $1 |
### 2.6 gmail_token 테이블 (실제 DB: gmail_token, 3건)
**실제 DB 컬럼**: user_id(FK), token_data(jsonb), oauth_config(jsonb), created_at, updated_at
@@ -158,7 +158,7 @@
### 2.11 user_preference 테이블 (실제 DB: user_preference, 0건)
**실제 DB 컬럼**: user_id(FK), slack_user_id, news_keywords[], briefing_enabled, briefing_time, created_at, updated_at
-**코드 모델**: user_preferences 참조 (복수형 차이)
+**코드 모델**: user_preference 참조 (복수형 차이)
| 파일 경로 | 라인 번호 | 작업 내용 |
|-----------|-----------|-----------|