diff --git a/DATABASE_INSPECTION_GUIDE.md b/DATABASE_INSPECTION_GUIDE.md deleted file mode 100644 index bb72093..0000000 --- a/DATABASE_INSPECTION_GUIDE.md +++ /dev/null @@ -1,388 +0,0 @@ -# ๐Ÿ” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์ธ ๊ฐ€์ด๋“œ (Docker ํ™˜๊ฒฝ) - -Docker ํ™˜๊ฒฝ์—์„œ Redis์™€ MongoDB์— ์ง์ ‘ ์ ‘์†ํ•˜์—ฌ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. - ---- - -## ๐Ÿ“‹ ๋ชฉ์ฐจ -1. [Docker ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘](#1-docker-์ปจํ…Œ์ด๋„ˆ-์‹œ์ž‘) -2. [Redis ๋ฐ์ดํ„ฐ ํ™•์ธ](#2-redis-๋ฐ์ดํ„ฐ-ํ™•์ธ) -3. [MongoDB ๋ฐ์ดํ„ฐ ํ™•์ธ](#3-mongodb-๋ฐ์ดํ„ฐ-ํ™•์ธ) -4. [GUI ๋„๊ตฌ ์‚ฌ์šฉ](#4-gui-๋„๊ตฌ-์‚ฌ์šฉ) - ---- - -## 1. Docker ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ - -### ๊ฐœ๋ฐœ ํ™˜๊ฒฝ -```bash -# Redis์™€ MongoDB๋งŒ ์‹œ์ž‘ -docker-compose -f docker-compose.dev.yml up -d - -# ๋˜๋Š” ์ „์ฒด ์„œ๋น„์Šค ์‹œ์ž‘ -docker-compose up -d -``` - -### ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ -```bash -docker ps -``` - -**์˜ˆ์ƒ ์ถœ๋ ฅ:** -``` -CONTAINER ID IMAGE PORTS NAMES -xxxxxxxxxxxx redis:7-alpine 0.0.0.0:6379->6379/tcp novisit-redis -xxxxxxxxxxxx mongo:7 0.0.0.0:27017->27017/tcp novisit-mongodb -``` - ---- - -## 2. Redis ๋ฐ์ดํ„ฐ ํ™•์ธ - -### ๋ฐฉ๋ฒ• 1: Docker exec๋กœ Redis CLI ์ ‘์† - -```bash -# Redis ์ปจํ…Œ์ด๋„ˆ ์ ‘์† -docker exec -it novisit-redis redis-cli -``` - -### Redis ๊ธฐ๋ณธ ๋ช…๋ น์–ด - -```bash -# 1. ๋ชจ๋“  ํ‚ค ์กฐํšŒ -KEYS * - -# 2. ํŠน์ • ํŒจํ„ด์˜ ํ‚ค ์กฐํšŒ -KEYS token:* # ๋ชจ๋“  ํ† ํฐ ํ‚ค -KEYS token:*:kakao:* # ์นด์นด์˜ค ํ† ํฐ๋งŒ -KEYS token:*:discord:* # ๋””์Šค์ฝ”๋“œ ํ† ํฐ๋งŒ - -# 3. ํŠน์ • ํ‚ค์˜ ๊ฐ’ ์กฐํšŒ -GET token:12345:kakao:accessToken - -# 4. ํ‚ค ๊ฐœ์ˆ˜ ํ™•์ธ -DBSIZE - -# 5. ํ‚ค ํƒ€์ž… ํ™•์ธ -TYPE token:12345:kakao:accessToken - -# 6. ํ‚ค TTL(๋งŒ๋ฃŒ ์‹œ๊ฐ„) ํ™•์ธ -TTL token:12345:kakao:accessToken - -# 7. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ (์ฃผ์˜!) -FLUSHALL - -# 8. Redis CLI ์ข…๋ฃŒ -exit -``` - -### ๋ฐฉ๋ฒ• 2: PowerShell์—์„œ ์ง์ ‘ ๋ช…๋ น ์‹คํ–‰ - -```powershell -# ๋‹จ์ผ ๋ช…๋ น ์‹คํ–‰ -docker exec novisit-redis redis-cli KEYS "*" -docker exec novisit-redis redis-cli GET "token:12345:kakao:accessToken" -docker exec novisit-redis redis-cli DBSIZE -``` - -### ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (Redis) - -ํ”„๋กœ์ ํŠธ์—์„œ Redis๋Š” ์ฃผ๋กœ **์ธ์ฆ ํ† ํฐ ์ €์žฅ**์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค: - -``` -ํ‚ค ํ˜•์‹: token:{userId}:{provider}:accessToken -์˜ˆ์‹œ: token:user123:kakao:accessToken -๊ฐ’: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... - -ํ‚ค ํ˜•์‹: token:{userId}:{provider}:refreshToken -์˜ˆ์‹œ: token:user123:kakao:refreshToken -๊ฐ’: def50200abc... -``` - -**์‹ค์ œ ํ™•์ธ ์˜ˆ์‹œ:** -```bash -redis-cli> KEYS token:* -1) "token:67890:discord:accessToken" -2) "token:12345:kakao:accessToken" -3) "token:12345:kakao:refreshToken" - -redis-cli> GET token:12345:kakao:accessToken -"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI..." -``` - ---- - -## 3. MongoDB ๋ฐ์ดํ„ฐ ํ™•์ธ - -### ๋ฐฉ๋ฒ• 1: Docker exec๋กœ MongoDB Shell ์ ‘์† - -```bash -# MongoDB ์ปจํ…Œ์ด๋„ˆ ์ ‘์† (mongosh ์‚ฌ์šฉ) -docker exec -it novisit-mongodb mongosh -``` - -### MongoDB ๊ธฐ๋ณธ ๋ช…๋ น์–ด - -```javascript -// 1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก ์กฐํšŒ -show dbs - -// 2. ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ -use novisit - -// 3. ์ปฌ๋ ‰์…˜ ๋ชฉ๋ก ์กฐํšŒ -show collections - -// 4. notices ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ -db.notices.find() - -// 5. ๋ณด๊ธฐ ์ข‹๊ฒŒ ํฌ๋งทํŒ… -db.notices.find().pretty() - -// 6. ์ตœ์‹  5๊ฐœ ๊ณต์ง€์‚ฌํ•ญ ์กฐํšŒ (ํฌ๋กค๋ง ์‹œ๊ฐ„ ๊ธฐ์ค€) -db.notices.find().sort({ crawledAt: -1 }).limit(5) - -// 7. ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ -db.notices.find({ source: "PKNU" }) -db.notices.find({ number: "721861" }) -db.notices.find({ title: /์ค‘์–ด๊ถŒ/ }) // ์ œ๋ชฉ์— '์ค‘์–ด๊ถŒ' ํฌํ•จ - -// 8. ๊ณต์ง€์‚ฌํ•ญ ๊ฐœ์ˆ˜ ํ™•์ธ -db.notices.countDocuments() - -// 9. ํŠน์ • ํ•„๋“œ๋งŒ ์กฐํšŒ -db.notices.find({}, { title: 1, number: 1, _id: 0 }) - -// 10. ๊ฐ€์žฅ ์ตœ์‹  ๊ณต์ง€์‚ฌํ•ญ 1๊ฐœ -db.notices.find().sort({ number: -1 }).limit(1).pretty() - -// 11. ํŠน์ • ๋‚ ์งœ ์ดํ›„ ํฌ๋กค๋ง๋œ ๊ณต์ง€์‚ฌํ•ญ -db.notices.find({ - crawledAt: { $gte: new Date("2025-10-10") } -}) - -// 12. users ์ปฌ๋ ‰์…˜ ์กฐํšŒ (์‚ฌ์šฉ์ž ์ •๋ณด) -db.users.find().pretty() - -// 13. ์ธ๋ฑ์Šค ํ™•์ธ -db.notices.getIndexes() - -// 14. MongoDB Shell ์ข…๋ฃŒ -exit -``` - -### ๋ฐฉ๋ฒ• 2: PowerShell์—์„œ ์ง์ ‘ ๋ช…๋ น ์‹คํ–‰ - -```powershell -# ๋‹จ์ผ ๋ช…๋ น ์‹คํ–‰ -docker exec novisit-mongodb mongosh --eval "use novisit; db.notices.countDocuments()" -docker exec novisit-mongodb mongosh --eval "use novisit; db.notices.find().limit(5)" -``` - -### ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (MongoDB) - -#### 1. **notices ์ปฌ๋ ‰์…˜** (๊ณต์ง€์‚ฌํ•ญ) -```json -{ - "_id": ObjectId("67890abcdef..."), - "number": "721861", - "title": "2026-1ํ•™๊ธฐ ์ค‘์–ด๊ถŒ ํŒŒ๊ฒฌ ๊ตํ™˜ํ•™์ƒ ์ถ”๊ฐ€๋ชจ์ง‘ ์„ ๋ฐœ์•ˆ๋‚ด", - "link": "https://www.pknu.ac.kr?action=view&no=721861", - "source": "PKNU", - "postedAt": "2025-10-10", - "crawledAt": ISODate("2025-10-11T00:43:39.123Z") -} -``` - -#### 2. **users ์ปฌ๋ ‰์…˜** (์‚ฌ์šฉ์ž ์ •๋ณด) -```json -{ - "_id": ObjectId("12345abcdef..."), - "email": "user@example.com", - "username": "ํ™๊ธธ๋™", - "provider": "kakao", - "providerId": "1234567890", - "createdAt": ISODate("2025-10-01T12:00:00.000Z") -} -``` - -**์‹ค์ œ ํ™•์ธ ์˜ˆ์‹œ:** -```javascript -novisit> db.notices.find().limit(2).pretty() -[ - { - _id: ObjectId("671234567890abcdef123456"), - number: '721861', - title: '2026-1ํ•™๊ธฐ ์ค‘์–ด๊ถŒ ํŒŒ๊ฒฌ ๊ตํ™˜ํ•™์ƒ ์ถ”๊ฐ€๋ชจ์ง‘ ์„ ๋ฐœ์•ˆ๋‚ด', - link: 'https://www.pknu.ac.kr?action=view&no=721861', - source: 'PKNU', - postedAt: '2025-10-10', - crawledAt: ISODate('2025-10-11T00:43:39.456Z') - }, - { - _id: ObjectId("671234567890abcdef123457"), - number: '721773', - title: 'ใ€Œ๋ถ€๊ฒฝ์ปค๋ฆฌ์–ด๋ฉ˜ํ† ๋‹จ ์„ ๋ฐฐ์™€ ํ•จ๊ป˜ํ•˜๋Š” ๋ฉ˜ํ† ๋ง ์บ ํ”„:๋Œ€๊ธฐ์—…ํŽธใ€ ์ฐธ์—ฌ์ž ๋ชจ์ง‘ ์•ˆ๋‚ด', - link: 'https://www.pknu.ac.kr?action=view&no=721773', - source: 'PKNU', - postedAt: '2025-10-09', - crawledAt: ISODate('2025-10-11T00:43:39.789Z') - } -] -``` - ---- - -## 4. GUI ๋„๊ตฌ ์‚ฌ์šฉ - -### Redis GUI ๋„๊ตฌ - -#### 1. **Redis Insight** (์ถ”์ฒœ) -- ๋‹ค์šด๋กœ๋“œ: https://redis.io/insight/ -- ์—ฐ๊ฒฐ ์ •๋ณด: - - Host: `localhost` - - Port: `6379` - -#### 2. **RedisInsight Desktop** -```bash -# Windows -winget install Redis.RedisInsight - -# ๋˜๋Š” Docker๋กœ ์‹คํ–‰ -docker run -d --name redisinsight -p 8001:8001 redislabs/redisinsight:latest -# ์ ‘์†: http://localhost:8001 -``` - -#### 3. **Another Redis Desktop Manager** -- GitHub: https://github.com/qishibo/AnotherRedisDesktopManager - -### MongoDB GUI ๋„๊ตฌ - -#### 1. **MongoDB Compass** (๊ณต์‹, ์ถ”์ฒœ) -- ๋‹ค์šด๋กœ๋“œ: https://www.mongodb.com/products/compass -- ์—ฐ๊ฒฐ URI: `mongodb://localhost:27017/novisit` - -#### 2. **Studio 3T** -- ๋‹ค์šด๋กœ๋“œ: https://studio3t.com/ -- ๋ฌด๋ฃŒ ๋ฒ„์ „ ์‚ฌ์šฉ ๊ฐ€๋Šฅ - -#### 3. **NoSQLBooster** -- ๋‹ค์šด๋กœ๋“œ: https://nosqlbooster.com/ - ---- - -## 5. ํฌ๋กค๋ง ํ›„ ๋ฐ์ดํ„ฐ ํ™•์ธ ์›Œํฌํ”Œ๋กœ์šฐ - -### ์‹œ๋‚˜๋ฆฌ์˜ค: ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ ํ›„ ๋ฐ์ดํ„ฐ ํ™•์ธ - -```bash -# 1. ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ ์‹คํ–‰ -node server/src/test/scheduled-crawl-test.js - -# 2. MongoDB์—์„œ ์ €์žฅ๋œ ๊ณต์ง€์‚ฌํ•ญ ํ™•์ธ -docker exec -it novisit-mongodb mongosh - -# MongoDB Shell์—์„œ: -use novisit -db.notices.countDocuments() # ์ „์ฒด ๊ฐœ์ˆ˜ -db.notices.find().sort({ crawledAt: -1 }).limit(10) # ์ตœ๊ทผ 10๊ฐœ -exit - -# 3. Redis์—์„œ ์ €์žฅ๋œ ํ† ํฐ ํ™•์ธ (์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํ›„) -docker exec -it novisit-redis redis-cli - -# Redis CLI์—์„œ: -KEYS * # ๋ชจ๋“  ํ‚ค -KEYS token:* # ํ† ํฐ๋งŒ -exit -``` - ---- - -## 6. ์œ ์šฉํ•œ ์Šคํฌ๋ฆฝํŠธ - -### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” (๊ฐœ๋ฐœ ํ™˜๊ฒฝ) - -```bash -# MongoDB ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ -docker exec novisit-mongodb mongosh --eval "use novisit; db.dropDatabase()" - -# Redis ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ -docker exec novisit-redis redis-cli FLUSHALL - -# ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ -docker-compose restart -``` - -### ๋ฐ์ดํ„ฐ ๋ฐฑ์—… - -```bash -# MongoDB ๋ฐฑ์—… -docker exec novisit-mongodb mongodump --out /tmp/backup -docker cp novisit-mongodb:/tmp/backup ./mongodb-backup - -# Redis ๋ฐฑ์—… -docker exec novisit-redis redis-cli SAVE -docker cp novisit-mongodb:/data/dump.rdb ./redis-backup.rdb -``` - -### ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง - -```bash -# Redis ์‹ค์‹œ๊ฐ„ ๋ช…๋ น์–ด ๋ชจ๋‹ˆํ„ฐ๋ง -docker exec novisit-redis redis-cli MONITOR - -# MongoDB ํ˜„์žฌ ์ž‘์—… ํ™•์ธ -docker exec novisit-mongodb mongosh --eval "use novisit; db.currentOp()" -``` - ---- - -## 7. ๋ฌธ์ œ ํ•ด๊ฒฐ - -### ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด ์•„๋‹Œ ๊ฒฝ์šฐ -```bash -docker-compose ps -docker-compose up -d -``` - -### ํฌํŠธ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ -```bash -# ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ (Windows) -netstat -ano | findstr :6379 -netstat -ano | findstr :27017 - -# ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ (PID ํ™•์ธ ํ›„) -taskkill /PID /F -``` - -### ๊ถŒํ•œ ์˜ค๋ฅ˜ -```bash -# ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ PowerShell ์‹คํ–‰ ํ›„ ์žฌ์‹œ๋„ -``` - ---- - -## ๐Ÿ“ž ์ถ”๊ฐ€ ์ •๋ณด - -- **Redis ํฌํŠธ**: 6379 -- **MongoDB ํฌํŠธ**: 27017 -- **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„**: `novisit` (๋˜๋Š” `novisit_dev`) -- **์ฃผ์š” ์ปฌ๋ ‰์…˜**: `notices`, `users`, `domains` -- **Redis ํ‚ค ํŒจํ„ด**: `token:{userId}:{provider}:{tokenType}` - ---- - -## ๐Ÿ’ก ํŒ - -1. **MongoDB Compass**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด GUI๋กœ ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -2. **Redis Insight**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Redis ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -3. ๊ฐœ๋ฐœ ์ค‘์—๋Š” `KEYS *` ๋Œ€์‹  `SCAN` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (์„ฑ๋Šฅ). -4. MongoDB์—์„œ `.pretty()`๋ฅผ ๋ถ™์ด๋ฉด ๋ณด๊ธฐ ์ข‹๊ฒŒ ํฌ๋งทํŒ…๋ฉ๋‹ˆ๋‹ค. -5. ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ ํ›„์—๋Š” `crawledAt` ํ•„๋“œ๋กœ ์ •๋ ฌํ•˜๋ฉด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- - -**์ž‘์„ฑ์ผ**: 2025-10-11 -**ํ”„๋กœ์ ํŠธ**: Novisit - ๋ถ€๊ฒฝ๋Œ€ ๊ณต์ง€์‚ฌํ•ญ ์•Œ๋ฆผ ์„œ๋น„์Šค - diff --git a/DATABASE_QUICKSTART.md b/DATABASE_QUICKSTART.md deleted file mode 100644 index 1766b9a..0000000 --- a/DATABASE_QUICKSTART.md +++ /dev/null @@ -1,307 +0,0 @@ -# ๐Ÿš€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ - -## 1๏ธโƒฃ Docker ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ - -```bash -# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์‹œ์ž‘ (Redis + MongoDB) -docker-compose -f docker-compose.dev.yml up -d - -# ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ -docker ps -``` - -**์˜ˆ์ƒ ์ถœ๋ ฅ:** -``` -CONTAINER ID IMAGE PORTS NAMES -xxxxx mongo:7 0.0.0.0:27017->27017/tcp novisit-mongodb-dev -xxxxx redis:7-alpine 0.0.0.0:6379->6379/tcp novisit-redis-dev -``` - ---- - -## 2๏ธโƒฃ Redis ํ™•์ธํ•˜๊ธฐ - -### ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ -```bash -docker exec novisit-redis-dev redis-cli PING -# ์ถœ๋ ฅ: PONG -``` - -### Redis CLI ์ ‘์† -```bash -docker exec -it novisit-redis-dev redis-cli -``` - -### ๊ธฐ๋ณธ ๋ช…๋ น์–ด (Redis CLI ์•ˆ์—์„œ) -```bash -# ๋ชจ๋“  ํ‚ค ์กฐํšŒ -KEYS * - -# ํ† ํฐ ํ‚ค๋งŒ ์กฐํšŒ -KEYS token:* - -# ํŠน์ • ํ‚ค์˜ ๊ฐ’ ์กฐํšŒ -GET token:user123:kakao:accessToken - -# ํ‚ค ๊ฐœ์ˆ˜ -DBSIZE - -# ์ข…๋ฃŒ -exit -``` - -### PowerShell์—์„œ ์ง์ ‘ ์‹คํ–‰ -```powershell -# ๋ชจ๋“  ํ‚ค ์กฐํšŒ -docker exec novisit-redis-dev redis-cli KEYS "*" - -# ํŠน์ • ํ‚ค ๊ฐ’ ์กฐํšŒ -docker exec novisit-redis-dev redis-cli GET "token:user123:kakao:accessToken" - -# ํ‚ค ๊ฐœ์ˆ˜ -docker exec novisit-redis-dev redis-cli DBSIZE -``` - ---- - -## 3๏ธโƒฃ MongoDB ํ™•์ธํ•˜๊ธฐ - -### ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ -```bash -docker exec novisit-mongodb-dev mongosh --eval "db.version()" -# ์ถœ๋ ฅ: 7.0.25 -``` - -### MongoDB Shell ์ ‘์† -```bash -docker exec -it novisit-mongodb-dev mongosh -``` - -### ๊ธฐ๋ณธ ๋ช…๋ น์–ด (MongoDB Shell ์•ˆ์—์„œ) -```javascript -// ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก -show dbs - -// novisit ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ -use novisit_dev - -// ์ปฌ๋ ‰์…˜ ๋ชฉ๋ก -show collections - -// notices ์ปฌ๋ ‰์…˜์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ -db.notices.find() - -// ๋ณด๊ธฐ ์ข‹๊ฒŒ ํฌ๋งทํŒ… -db.notices.find().pretty() - -// ๊ณต์ง€์‚ฌํ•ญ ๊ฐœ์ˆ˜ -db.notices.countDocuments() - -// ์ตœ์‹  5๊ฐœ ๊ณต์ง€์‚ฌํ•ญ -db.notices.find().sort({ crawledAt: -1 }).limit(5) - -// ํŠน์ • ๋ฒˆํ˜ธ๋กœ ๊ฒ€์ƒ‰ -db.notices.find({ number: "721861" }) - -// ์ œ๋ชฉ์œผ๋กœ ๊ฒ€์ƒ‰ -db.notices.find({ title: /์ค‘์–ด๊ถŒ/ }) - -// ์ข…๋ฃŒ -exit -``` - -### PowerShell์—์„œ ์ง์ ‘ ์‹คํ–‰ -```powershell -# ๊ณต์ง€์‚ฌํ•ญ ๊ฐœ์ˆ˜ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.countDocuments()" - -# ์ตœ์‹  3๊ฐœ ์กฐํšŒ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.find().sort({ crawledAt: -1 }).limit(3)" - -# ์ „์ฒด ์กฐํšŒ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.find()" -``` - ---- - -## 4๏ธโƒฃ ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ ํ›„ ๋ฐ์ดํ„ฐ ํ™•์ธ - -### Step 1: ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ ์‹คํ–‰ -```bash -node server/src/test/scheduled-crawl-test.js -``` - -### Step 2: MongoDB์—์„œ ๊ฒฐ๊ณผ ํ™•์ธ -```bash -# MongoDB Shell ์ ‘์† -docker exec -it novisit-mongodb-dev mongosh - -# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ -use novisit_dev - -# ๊ณต์ง€์‚ฌํ•ญ ๊ฐœ์ˆ˜ ํ™•์ธ -db.notices.countDocuments() - -# ์ตœ์‹  10๊ฐœ ์กฐํšŒ -db.notices.find().sort({ crawledAt: -1 }).limit(10).pretty() - -# ํŠน์ • ์‹œ๊ฐ„ ์ดํ›„ ํฌ๋กค๋ง๋œ ๊ณต์ง€์‚ฌํ•ญ -db.notices.find({ - crawledAt: { $gte: new Date("2025-10-11") } -}).pretty() -``` - ---- - -## 5๏ธโƒฃ ์œ ์šฉํ•œ ๋ช…๋ น์–ด ๋ชจ์Œ - -### Redis ๋ช…๋ น์–ด -```bash -# ๋ชจ๋“  ํ‚ค ์‚ญ์ œ (์ฃผ์˜!) -docker exec novisit-redis-dev redis-cli FLUSHALL - -# ํŠน์ • ํŒจํ„ด ํ‚ค ์กฐํšŒ -docker exec novisit-redis-dev redis-cli KEYS "token:*:kakao:*" - -# ํ‚ค ํƒ€์ž… ํ™•์ธ -docker exec novisit-redis-dev redis-cli TYPE "token:123:kakao:accessToken" - -# TTL ํ™•์ธ -docker exec novisit-redis-dev redis-cli TTL "token:123:kakao:accessToken" -``` - -### MongoDB ๋ช…๋ น์–ด -```bash -# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.dropDatabase()" - -# ํŠน์ • ์ปฌ๋ ‰์…˜๋งŒ ์‚ญ์ œ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.drop()" - -# ์ธ๋ฑ์Šค ํ™•์ธ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.getIndexes()" - -# ์ปฌ๋ ‰์…˜ ํ†ต๊ณ„ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.stats()" -``` - ---- - -## 6๏ธโƒฃ GUI ๋„๊ตฌ๋กœ ํ™•์ธํ•˜๊ธฐ - -### Redis GUI - Redis Insight -1. ๋‹ค์šด๋กœ๋“œ: https://redis.io/insight/ -2. ์—ฐ๊ฒฐ ์ •๋ณด: - - **Host**: `localhost` - - **Port**: `6379` - -### MongoDB GUI - MongoDB Compass -1. ๋‹ค์šด๋กœ๋“œ: https://www.mongodb.com/products/compass -2. ์—ฐ๊ฒฐ URI: `mongodb://localhost:27017/novisit_dev` - ---- - -## 7๏ธโƒฃ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ - -```bash -# ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ -docker-compose -f docker-compose.dev.yml down - -# ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ -docker-compose -f docker-compose.dev.yml restart - -# ๋กœ๊ทธ ํ™•์ธ -docker logs novisit-redis-dev -docker logs novisit-mongodb-dev - -# ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ณด๊ธฐ -docker logs -f novisit-mongodb-dev -``` - ---- - -## 8๏ธโƒฃ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์˜ˆ์‹œ - -### Redis ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ -``` -ํ‚ค: token:user123:kakao:accessToken -๊ฐ’: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... - -ํ‚ค: token:user123:kakao:refreshToken -๊ฐ’: def50200abc... -``` - -### MongoDB ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ -```json -{ - "_id": ObjectId("671234567890abcdef123456"), - "number": "721861", - "title": "2026-1ํ•™๊ธฐ ์ค‘์–ด๊ถŒ ํŒŒ๊ฒฌ ๊ตํ™˜ํ•™์ƒ ์ถ”๊ฐ€๋ชจ์ง‘ ์„ ๋ฐœ์•ˆ๋‚ด", - "link": "https://www.pknu.ac.kr?action=view&no=721861", - "source": "PKNU", - "postedAt": "2025-10-10", - "crawledAt": ISODate("2025-10-11T00:43:39.456Z") -} -``` - ---- - -## ๐Ÿ’ก ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ - -### ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•  ๋•Œ -```bash -# 1. Docker ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ -docker-compose -f docker-compose.dev.yml up -d - -# 2. ์—ฐ๊ฒฐ ํ™•์ธ -docker exec novisit-redis-dev redis-cli PING -docker exec novisit-mongodb-dev mongosh --eval "db.version()" - -# 3. ํฌ๋กค๋ง ํ…Œ์ŠคํŠธ -node server/src/test/scheduled-crawl-test.js -``` - -### ๋ฐ์ดํ„ฐ ํ™•์ธํ•  ๋•Œ -```bash -# MongoDB ์ตœ์‹  ๊ณต์ง€์‚ฌํ•ญ ํ™•์ธ -docker exec novisit-mongodb-dev mongosh --eval "use novisit_dev; db.notices.find().sort({crawledAt:-1}).limit(5)" - -# Redis ์ €์žฅ๋œ ํ‚ค ํ™•์ธ -docker exec novisit-redis-dev redis-cli KEYS "*" -``` - -### ๊ฐœ๋ฐœ ๋๋‚  ๋•Œ -```bash -# ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ -docker-compose -f docker-compose.dev.yml down -``` - ---- - -## ๐Ÿ“ž ๋ฌธ์ œ ํ•ด๊ฒฐ - -### ํฌํŠธ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ -```bash -# Windows์—์„œ ํฌํŠธ ์‚ฌ์šฉ ํ™•์ธ -netstat -ano | findstr :6379 -netstat -ano | findstr :27017 - -# ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ -taskkill /PID /F -``` - -### ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ -```bash -# ๋กœ๊ทธ ํ™•์ธ -docker logs novisit-redis-dev -docker logs novisit-mongodb-dev - -# ์ปจํ…Œ์ด๋„ˆ ์žฌ์ƒ์„ฑ -docker-compose -f docker-compose.dev.yml down -docker-compose -f docker-compose.dev.yml up -d --force-recreate -``` - ---- - -**๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ `DATABASE_INSPECTION_GUIDE.md`๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”!** - diff --git a/DUMMY_DATA_USAGE.md b/DUMMY_DATA_USAGE.md deleted file mode 100644 index 4be5d62..0000000 --- a/DUMMY_DATA_USAGE.md +++ /dev/null @@ -1,90 +0,0 @@ -# MongoDB ๋”๋ฏธ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๊ฐ€์ด๋“œ - -์ด ํŒŒ์ผ์€ MongoDB์— ์ง์ ‘ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. - -## ํŒŒ์ผ ์œ„์น˜ -- `dummy-data-for-mongodb.json` - -## ์‚ฌ์šฉ ๋ฐฉ๋ฒ• - -### ๋ฐฉ๋ฒ• 1: MongoDB Shell์—์„œ ์ง์ ‘ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ - -```bash -# 1. MongoDB Shell ์ ‘์† -mongosh - -# 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ -use novisit - -# 3. ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… -db.domains.insertMany([ - { "_id": ObjectId("652f001b2ee0ad2547eaaa12"), "name": "๋น„๊ต๊ณผ", "url_list": ["https://www.pknu.ac.kr/main/163"], "keywords": ["๋น„๊ต๊ณผ", "ํ”„๋กœ๊ทธ๋žจ"], "setting_ids": [] }, - { "_id": ObjectId("652f002d2ee0ad2547eaaa13"), "name": "์žฅํ•™", "url_list": ["https://www.pknu.ac.kr/main/163"], "keywords": ["์žฅํ•™", "์žฅํ•™์ƒ"], "setting_ids": [] }, - { "_id": ObjectId("652f00392ee0ad2547eaaa14"), "name": "์ฑ„์šฉ", "url_list": ["https://www.pknu.ac.kr/main/163"], "keywords": ["์ฑ„์šฉ", "๋ชจ์ง‘"], "setting_ids": [] }, - { "_id": ObjectId("652f00462ee0ad2547eaaa15"), "name": "๊ตํ™˜ํ•™์ƒ", "url_list": ["https://www.pknu.ac.kr/main/163"], "keywords": ["๊ตํ™˜ํ•™์ƒ", "๊ตญ์ œ"], "setting_ids": [] }, - { "_id": ObjectId("652f00522ee0ad2547eaaa16"), "name": "์ทจ์—…", "url_list": ["https://www.pknu.ac.kr/main/163"], "keywords": ["์ทจ์—…", "์ง„๋กœ"], "setting_ids": [] } -]) - -# 4. ์œ ์ € ๋ฐ์ดํ„ฐ ์‚ฝ์ž… -db.users.insertMany([ - { "_id": ObjectId("user1id12345678900001"), "email": "hong1@pknu.ac.kr", "name": "ํ™๊ธธ๋™", "providers": [{ "provider": "kakao", "providerId": "kakao_userid_1", "email": "hong1@pknu.ac.kr", "name": "ํ™๊ธธ๋™", "talk_message_enabled": true }], "createdAt": ISODate("2024-10-01T00:00:01.000Z"), "updatedAt": ISODate("2024-10-01T00:00:01.000Z") }, - { "_id": ObjectId("user2id98765432100002"), "email": "kim2@pknu.ac.kr", "name": "๊น€์ฒ ์ˆ˜", "providers": [{ "provider": "kakao", "providerId": "kakao_userid_2", "email": "kim2@pknu.ac.kr", "name": "๊น€์ฒ ์ˆ˜", "talk_message_enabled": true }], "createdAt": ISODate("2024-10-12T11:11:11.000Z"), "updatedAt": ISODate("2024-10-12T11:11:11.000Z") } -]) - -# 5. ์„ธํŒ… ๋ฐ์ดํ„ฐ ์‚ฝ์ž… -db.settings.insertMany([ - { "_id": ObjectId("set1user1janghak"), "user_id": "user1id12345678900001", "domain_id": "652f002d2ee0ad2547eaaa13", "name": "์žฅํ•™๊ธˆ ์•Œ๋ฆผ", "url_list": ["https://www.pknu.ac.kr/main/163"], "filter_keywords": ["์žฅํ•™", "์‹ ์ž…์ƒ"], "channel": ["kakao"], "messages": [], "created_at": ISODate("2024-10-15T10:00:00.000Z") }, - { "_id": ObjectId("set2user1chaeyong"), "user_id": "user1id12345678900001", "domain_id": "652f00392ee0ad2547eaaa14", "name": "์ฑ„์šฉ์ •๋ณด ์•Œ๋ฆผ", "url_list": ["https://www.pknu.ac.kr/main/163"], "filter_keywords": ["์ฑ„์šฉ", "๋ชจ์ง‘"], "channel": ["kakao"], "messages": [], "created_at": ISODate("2024-10-15T10:05:00.000Z") }, - { "_id": ObjectId("set3user2chweup"), "user_id": "user2id98765432100002", "domain_id": "652f00522ee0ad2547eaaa16", "name": "์ทจ์—… ์•ˆ๋‚ด", "url_list": ["https://www.pknu.ac.kr/main/163"], "filter_keywords": ["์ทจ์—…", "์ง„๋กœ"], "channel": ["kakao"], "messages": [], "created_at": ISODate("2024-10-15T11:00:00.000Z") } -]) -``` - -### ๋ฐฉ๋ฒ• 2: Docker ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ - -```bash -# MongoDB ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์† -docker exec -it novisit-mongodb-dev mongosh novisit - -# ์œ„ ๋ช…๋ น์–ด๋“ค์„ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ -``` - -### ๋ฐฉ๋ฒ• 3: mongoimport ์‚ฌ์šฉ (JSON ํŒŒ์ผ์ด ์ผ๋ฐ˜ JSON ํ˜•์‹์ธ ๊ฒฝ์šฐ) - -```bash -# JSON ํŒŒ์ผ์„ ์ผ๋ฐ˜ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ํ›„ -mongoimport --db novisit --collection domains --file domains.json --jsonArray -mongoimport --db novisit --collection users --file users.json --jsonArray -mongoimport --db novisit --collection settings --file settings.json --jsonArray -``` - -## ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ - -์‚ฝ์ž… ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ํ™•์ธ: - -```bash -# MongoDB Shell์—์„œ -db.domains.find().pretty() -db.users.find().pretty() -db.settings.find().pretty() - -# ๊ฐœ์ˆ˜ ํ™•์ธ -db.domains.countDocuments() -db.users.countDocuments() -db.settings.countDocuments() -``` - -## ๋ฐ์ดํ„ฐ ์ •๋ฆฌ (ํ•„์š”์‹œ) - -```bash -# ๋ชจ๋“  ์ปฌ๋ ‰์…˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ -db.domains.deleteMany({}) -db.users.deleteMany({}) -db.settings.deleteMany({}) -``` - -## ํฌํ•จ๋œ ๋”๋ฏธ๋ฐ์ดํ„ฐ - -- **Domain**: 5๊ฐœ (๋น„๊ต๊ณผ, ์žฅํ•™, ์ฑ„์šฉ, ๊ตํ™˜ํ•™์ƒ, ์ทจ์—…) -- **User**: 2๊ฐœ (ํ™๊ธธ๋™, ๊น€์ฒ ์ˆ˜) -- **Setting**: 3๊ฐœ (ํ™๊ธธ๋™: ์žฅํ•™๊ธˆ ์•Œ๋ฆผ, ์ฑ„์šฉ์ •๋ณด ์•Œ๋ฆผ / ๊น€์ฒ ์ˆ˜: ์ทจ์—… ์•ˆ๋‚ด) - diff --git a/client/src/features/notice/CreateNotice.tsx b/client/src/features/notice/CreateNotice.tsx index 886c19d..4cce559 100644 --- a/client/src/features/notice/CreateNotice.tsx +++ b/client/src/features/notice/CreateNotice.tsx @@ -1,5 +1,6 @@ import React, { useState, FormEvent, useEffect, useMemo } from "react"; import { createPortal } from "react-dom"; +import { useNavigate } from "react-router-dom"; import "../../../public/assets/style/_flex.scss"; import "../../../public/assets/style/_typography.scss"; import "./CreateNotice.scss"; @@ -34,7 +35,8 @@ const CreateNotice: React.FC = ({ onCreated, existingSettings = [], }) => { - const { logout } = (useAuth() as any) ?? {}; + const { user, logout } = (useAuth() as any) ?? {}; + const navigate = useNavigate(); const { show } = useToast(); const [open, setOpen] = useState(false); @@ -125,6 +127,27 @@ const CreateNotice: React.FC = ({ const toggle = (key: Channel) => setSelected((prev) => ({ ...prev, [key]: !prev[key] })); + const handleDiscordToggle = (isEnabling: boolean) => { + // Discord๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งŒ ๊ฒ€์ฆ + const isDiscordLinked = (user as any)?.isDiscordLinked; + + if (isEnabling && !isDiscordLinked) { + const confirmMessage = + "๋””์Šค์ฝ”๋“œ ๊ณ„์ •์„ ๋จผ์ € ์—ฐ๋™ํ•ด์ฃผ์„ธ์š”.\n์„ค์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"; + + if (window.confirm(confirmMessage)) { + setOpen(false); // ๋ชจ๋‹ฌ ๋‹ซ๊ธฐ + navigate("/my"); // ๋งˆ์ดํŽ˜์ด์ง€๋กœ ์ด๋™ + return; + } + // ์‚ฌ์šฉ์ž๊ฐ€ ์ทจ์†Œํ•˜๋ฉด ํ† ๊ธ€ํ•˜์ง€ ์•Š์Œ + return; + } + + // ์—ฐ๋™๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ์ •์ƒ ํ† ๊ธ€ + toggle("discord"); + }; + const handleOpenModal = () => { // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ์ด ์—†์œผ๋ฉด Toast ํ‘œ์‹œ if ( @@ -304,7 +327,7 @@ const CreateNotice: React.FC = ({ className={`chip ${ selected.discord ? "chip--active" : "" } channel discord`} - onClick={() => toggle("discord")} + onClick={() => handleDiscordToggle(!selected.discord)} > ๋””์Šค์ฝ”๋“œ diff --git a/dummy-data-for-mongodb.json b/dummy-data-for-mongodb.json deleted file mode 100644 index d0b329e..0000000 --- a/dummy-data-for-mongodb.json +++ /dev/null @@ -1,118 +0,0 @@ -[ - { - "collection": "domains", - "data": [ - { - "_id": { "$oid": "652f001b2ee0ad2547eaaa12" }, - "name": "๋น„๊ต๊ณผ", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "keywords": ["๋น„๊ต๊ณผ", "ํ”„๋กœ๊ทธ๋žจ"], - "setting_ids": [] - }, - { - "_id": { "$oid": "652f002d2ee0ad2547eaaa13" }, - "name": "์žฅํ•™", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "keywords": ["์žฅํ•™", "์žฅํ•™์ƒ"], - "setting_ids": [] - }, - { - "_id": { "$oid": "652f00392ee0ad2547eaaa14" }, - "name": "์ฑ„์šฉ", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "keywords": ["์ฑ„์šฉ", "๋ชจ์ง‘"], - "setting_ids": [] - }, - { - "_id": { "$oid": "652f00462ee0ad2547eaaa15" }, - "name": "๊ตํ™˜ํ•™์ƒ", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "keywords": ["๊ตํ™˜ํ•™์ƒ", "๊ตญ์ œ"], - "setting_ids": [] - }, - { - "_id": { "$oid": "652f00522ee0ad2547eaaa16" }, - "name": "์ทจ์—…", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "keywords": ["์ทจ์—…", "์ง„๋กœ"], - "setting_ids": [] - } - ] - }, - { - "collection": "users", - "data": [ - { - "_id": { "$oid": "user1id12345678900001" }, - "email": "hong1@pknu.ac.kr", - "name": "ํ™๊ธธ๋™", - "providers": [ - { - "provider": "kakao", - "providerId": "kakao_userid_1", - "email": "hong1@pknu.ac.kr", - "name": "ํ™๊ธธ๋™", - "talk_message_enabled": true - } - ], - "createdAt": { "$date": "2024-10-01T00:00:01.000Z" }, - "updatedAt": { "$date": "2024-10-01T00:00:01.000Z" } - }, - { - "_id": { "$oid": "user2id98765432100002" }, - "email": "kim2@pknu.ac.kr", - "name": "๊น€์ฒ ์ˆ˜", - "providers": [ - { - "provider": "kakao", - "providerId": "kakao_userid_2", - "email": "kim2@pknu.ac.kr", - "name": "๊น€์ฒ ์ˆ˜", - "talk_message_enabled": true - } - ], - "createdAt": { "$date": "2024-10-12T11:11:11.000Z" }, - "updatedAt": { "$date": "2024-10-12T11:11:11.000Z" } - } - ] - }, - { - "collection": "settings", - "data": [ - { - "_id": { "$oid": "set1user1janghak" }, - "user_id": "user1id12345678900001", - "domain_id": "652f002d2ee0ad2547eaaa13", - "name": "์žฅํ•™๊ธˆ ์•Œ๋ฆผ", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "filter_keywords": ["์žฅํ•™", "์‹ ์ž…์ƒ"], - "channel": ["kakao"], - "messages": [], - "created_at": { "$date": "2024-10-15T10:00:00.000Z" } - }, - { - "_id": { "$oid": "set2user1chaeyong" }, - "user_id": "user1id12345678900001", - "domain_id": "652f00392ee0ad2547eaaa14", - "name": "์ฑ„์šฉ์ •๋ณด ์•Œ๋ฆผ", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "filter_keywords": ["์ฑ„์šฉ", "๋ชจ์ง‘"], - "channel": ["kakao"], - "messages": [], - "created_at": { "$date": "2024-10-15T10:05:00.000Z" } - }, - { - "_id": { "$oid": "set3user2chweup" }, - "user_id": "user2id98765432100002", - "domain_id": "652f00522ee0ad2547eaaa16", - "name": "์ทจ์—… ์•ˆ๋‚ด", - "url_list": ["https://www.pknu.ac.kr/main/163"], - "filter_keywords": ["์ทจ์—…", "์ง„๋กœ"], - "channel": ["kakao"], - "messages": [], - "created_at": { "$date": "2024-10-15T11:00:00.000Z" } - } - ] - } -] - diff --git a/server/src/services/noticeFilterService.ts b/server/src/services/noticeFilterService.ts index b48dce7..95bea5c 100644 --- a/server/src/services/noticeFilterService.ts +++ b/server/src/services/noticeFilterService.ts @@ -207,7 +207,7 @@ export async function sendNotifications( for (const setting of settings) { try { // ํฌ๋กค๋งํ•œ ์ด๋ฏธ์ง€ URL์ด ์žˆ์œผ๋ฉด ์‚ฌ์šฉ, ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ - const imageUrlForMessage = imageUrl || crawlResult.imageUrl || 'https://upload.wikimedia.org/wikipedia/ko/a/a2/PKNU_Logo.png?20210915113624'; + const imageUrlForMessage = imageUrl || crawlResult.imageUrl || 'https://raw.githubusercontent.com/pknu-wap/Novisit/main/hosting-image.png'; let messageContent = ''; if (setting.summary) {