diff --git a/.env b/.env index d972166..ec4bf3e 100644 --- a/.env +++ b/.env @@ -4,3 +4,5 @@ DB_HOST=localhost DB_USER=root DB_PASSWORD=45278434 DB_NAME=PM_proto +DB_PORT=3307 + diff --git a/ANALYSIS_REPORT.md b/ANALYSIS_REPORT.md deleted file mode 100644 index 9588e19..0000000 --- a/ANALYSIS_REPORT.md +++ /dev/null @@ -1,60 +0,0 @@ -# ๐Ÿ“Š ์‹œ์Šคํ…œ ์šด์˜ ์ž์‚ฐ ๊ฐ€์น˜ ๋ถ„์„ ๋ณด๊ณ  (Sabermetrics Report) - -๋ณธ ๋ณด๊ณ ์„œ๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ˆ˜์ง‘๋œ ํ™œ๋™ ๋กœ๊ทธ ๋ฐ ์ž์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต๊ณ„์ /AI ๊ธฐ๋ฒ•์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ, ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ์šด์˜ ํ™œ๋ ฅ๊ณผ ์กฐ์ง ๊ธฐ์—ฌ๋„๋ฅผ ์ •๋Ÿ‰ํ™”ํ•œ ์ง€ํ‘œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. - ---- - -## 1. ์šด์˜ ํ™œ๋ ฅ ์ง€์ˆ˜ (AVI, Activity Vitality Index) -ํ”„๋กœ์ ํŠธ๊ฐ€ ํ˜„์žฌ ์–ผ๋งˆ๋‚˜ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ๊ฐ€๋™๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” **'๋””์ง€ํ„ธ ์ž์‚ฐ ์ƒ์กด ์ง€ํ‘œ'**์ž…๋‹ˆ๋‹ค. - -### 1.1 ์‚ฐ์ถœ ๊ณต์‹ -$$AVI = e^{-\lambda \times Stagnant\_Days} \times Quality \times 100$$ - -### 1.2 3๋Œ€ ํ•ต์‹ฌ ๋ณ€์ˆ˜ ์ƒ์„ธ ์„ค๋ช… - -#### โ‘  ์ง€์ˆ˜ ๊ฐ์‡„ ๋ชจ๋ธ ($e^{-\lambda \times t}$) : "๊ฐ€์น˜์˜ ์‹œํ•œํญํƒ„" -์ž์‚ฐ์€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ๊ฐ„์ด ํ๋ฅผ์ˆ˜๋ก ๊ฐ€์น˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์†Œ๋ฉธํ•œ๋‹ค๋Š” **'์ •๋ณด ํœ˜๋ฐœ์„ฑ'** ์›๋ฆฌ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. -* **Stagnant Days (์ •์ฒด ์ผ์ˆ˜)**: ๋งˆ์ง€๋ง‰ ์œ ํšจ ํ™œ๋™ ๋กœ๊ทธ ๊ธฐ๋ก์ผ๋กœ๋ถ€ํ„ฐ ์˜ค๋Š˜๊นŒ์ง€ ๊ฒฝ๊ณผ๋œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. -* **ํŠน์ง•**: ์ •์ฒด ์ดˆ๊ธฐ์—๋Š” ์ ์ˆ˜๊ฐ€ ๋น ๋ฅด๊ฒŒ ํ•˜๋ฝํ•˜๋‹ค๊ฐ€, ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ํ•˜๋ฝ ํญ์ด ๋‘”ํ™”๋˜๋ฉฐ 0์— ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ด€๋ฆฌ๊ฐ€ ์ค‘๋‹จ๋œ ์งํ›„์˜ ์ •๋ณด ๋ง์‹ค ์œ„ํ—˜์ด ๊ฐ€์žฅ ํฌ๋‹ค๋Š” ์‹ค๋ฌด์  ๊ฒฝํ—˜์„ ๋ฐ˜์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. - -#### โ‘ก ์œ„ํ—˜ ๊ฐ€์† ๊ณ„์ˆ˜ ($\lambda$) : "๋Œ€ํ˜• ์ž์‚ฐ์˜ ๋†’์€ ๊ด€๋ฆฌ ๋น„์šฉ" -๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” ์ž์‚ฐ ๊ทœ๋ชจ์— ๋”ฐ๋ผ '๋Š™์–ด๊ฐ€๋Š” ์†๋„'๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. -* **๊ณต์‹**: $\lambda = 0.04 + \log_{10}(Files + 1) \times 0.008$ -* **๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง**: ํŒŒ์ผ์ด ๋งŽ์€ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก ๊ด€๋ฆฌ ๋ถ€์žฌ ์‹œ ์กฐ์ง์— ๋ฏธ์น˜๋Š” ํƒ€๊ฒฉ์ด ํฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก $\lambda$ ๊ฐ’์ด ์ปค์ง€๋ฉฐ, ์†Œํ˜• ํ”„๋กœ์ ํŠธ๋ณด๋‹ค **ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋กœ AVI๊ฐ€ ํ•˜๋ฝ**ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๋Š” ๋” ์ž์ฃผ ๊ด€๋ฆฌํ•ด์•ผ ์ ์ˆ˜๊ฐ€ ์œ ์ง€๋จ) - -#### โ‘ข ํ™œ๋™ ํ’ˆ์งˆ ๊ฐ€์ค‘์น˜ ($Quality$) : "ํ–‰์ •๊ณผ ์‹ค๋ฌด์˜ ๊ตฌ๋ถ„" -๋‹จ์ˆœํžˆ ์ ‘์†ํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ๊ฐ€ ์ฐํ˜”๋‹ค๊ณ  ํ•ด์„œ ํ™œ๋ ฅ์ด 100% ํšŒ๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AI๊ฐ€ ๋กœ๊ทธ ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ™œ๋™์˜ **'์ง„์ •์„ฑ'**์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. -* **High (1.0)**: **์„ฑ๊ณผ๋ฌผ ์ค‘์‹ฌ ํ™œ๋™** (ํŒŒ์ผ ์—…๋กœ๋“œ, ์ˆ˜์ •, ๋“ฑ๋ก, ์—…๋ฐ์ดํŠธ ๋“ฑ) -* **Medium (0.7)**: **๊ตฌ์กฐ์  ์œ ์ง€ ํ™œ๋™** (ํด๋” ์ƒ์„ฑ, ์‚ญ์ œ, ์ด๋™ ๋“ฑ) -* **Low (0.4)**: **๋‹จ์ˆœ ํ–‰์ • ํ™œ๋™** (๊ถŒํ•œ ๋ณ€๊ฒฝ, ๋ฉ”์ผ ํ™•์ธ, ์ฐธ๊ฐ€์ž ์ถ”๊ฐ€ ๋“ฑ) - ---- - -## 2. ์ž์‚ฐ ๊ฐ€์น˜ ๊ธฐ์—ฌ๋„ (VCI, Value Contribution Index) -์•ผ๊ตฌ์˜ **WAR(Wins Above Replacement)** ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ, ์ „์ฒด ํฌํŠธํด๋ฆฌ์˜ค ํ‰๊ท  ๋Œ€๋น„ ๊ฐœ๋ณ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์กฐ์ง ๊ฐ€์น˜์— ์–ผ๋งˆ๋‚˜ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. - -### 2.1 ์‚ฐ์ถœ ๊ณต์‹ -$$VCI = (Individual\_AVI - Portfolio\_Avg\_AVI) \times Asset\_Weight$$ -* **Asset Weight (ํŒŒ์ผ ๊ทœ๋ชจ ๊ฐ€์ค‘์น˜)**: $max(0.2, \frac{Individual\_Files}{Portfolio\_Avg\_Files})$ - -### 2.2 ์ง€ํ‘œ์˜ ์˜๋ฏธ: "ํ‰๊ท (0.0)์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์ƒ๋Œ€ ํ‰๊ฐ€" -* **0.0 (ํ‰๊ท )**: ์กฐ์ง ๋‚ด ํ‰๊ท ์ ์ธ ๊ด€๋ฆฌ ์ˆ˜์ค€๊ณผ ๊ทœ๋ชจ๋ฅผ ๊ฐ€์ง„ ํ‘œ์ค€ ํ”„๋กœ์ ํŠธ. -* **(+) ์ ์ˆ˜**: ํ‰๊ท  ์ด์ƒ์˜ ํ™œ๋ ฅ์œผ๋กœ ์กฐ์ง์˜ ๋””์ง€ํ„ธ ์ž์‚ฐ ๊ฐ€์น˜๋ฅผ ์ฆ๋Œ€์‹œํ‚ค๋Š” ํ”„๋กœ์ ํŠธ. -* **(-) ์ ์ˆ˜**: ํ‰๊ท  ์ดํ•˜์˜ ๋ฐฉ์น˜๋กœ ์ธํ•ด ์กฐ์ง์— ์ž ์žฌ์  ๊ธฐํšŒ๋น„์šฉ ์†์‹ค์„ ์ž…ํžˆ๋Š” ๋ฆฌ์Šคํฌ ํ”„๋กœ์ ํŠธ. -* **์ƒ๋Œ€ ๊ฐ€์ค‘์น˜**: ์กฐ์ง์˜ ํ‰๊ท  ํŒŒ์ผ ์ˆ˜๋ณด๋‹ค ํฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐฉ์น˜๋  ๋•Œ ๋งˆ์ด๋„ˆ์Šค ์ ์ˆ˜๊ฐ€ ๋” ๊ฐ€ํŒŒ๋ฅด๊ฒŒ ํ•˜๋ฝํ•˜์—ฌ **'์šฐ์„  ๊ด€๋ฆฌ ๋Œ€์ƒ'**์„ ๋ช…ํ™•ํžˆ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. - ---- - -## 3. ๊ฐ•๋ ฅํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Hard Rules) - -๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ๋„๋ฅผ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ **'์‚ฌ๋ง ํŒ์ •'** ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. -1. **์ž๋™ ์‚ญ์ œ ํŒจ๋„ํ‹ฐ**: ์ตœ๊ทผ ๋กœ๊ทธ๊ฐ€ ์‹œ์Šคํ…œ์— ์˜ํ•œ 'ํด๋”์ž๋™์‚ญ์ œ'์ธ ๊ฒฝ์šฐ, AVI๋Š” ์ฆ‰์‹œ **0.1%**๋กœ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค. (๊ด€๋ฆฌ ํฌ๊ธฐ ์ƒํƒœ) -2. **์ž์‚ฐ ๋ถ€์žฌ ํŒจ๋„ํ‹ฐ (ECV)**: ํŒŒ์ผ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ์ธ ๊ฒฝ์šฐ ์šด์˜ ์ผ๊ด€์„ฑ(OCI)์€ **0.0์ **์ด๋ฉฐ, ํŒŒ์ผ 10๊ฐœ ๋ฏธ๋งŒ์€ ์ตœ์ข… ๊ฐ€์ค‘์น˜์— **50% ํŒจ๋„ํ‹ฐ**๋ฅผ ์ ์šฉํ•˜์—ฌ '๊ป๋ฐ๊ธฐ ํ”„๋กœ์ ํŠธ'๋ฅผ ๊ฑธ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. - ---- - -## 4. ๋ฐœํ‘œ ๋ฐ ๋ถ„์„ ๊ฐ€์ด๋“œ (Executive Summary) - -* **AVI๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์ ํŠธ**: "๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ก์•„๊ฐ€๊ณ  ์žˆ์œผ๋‹ˆ ์ฆ‰์‹œ ์ตœ์‹  ์„ฑ๊ณผ๋ฌผ์„ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค." -* **VCI๊ฐ€ ์Œ์ˆ˜(-)์ธ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ**: "์กฐ์ง์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ž์‚ฐ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ‰๊ท  ์ดํ•˜๋กœ ๋ฐฉ์น˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. **์ตœ์šฐ์„  ๊ด€๋ฆฌ ๋Œ€์ƒ**์ž…๋‹ˆ๋‹ค." -* **OCI๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์ ํŠธ**: "ํ™œ๋™์€ ์žˆ์œผ๋‚˜ ๋ถˆ๊ทœ์น™ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์˜ ์ง€์†์„ฑ์„ ํ™•๋ณดํ•˜์—ฌ ์šด์˜ ๋ฆฌ๋“ฌ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค." diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index 2fa84fa..0000000 --- a/PLAN.md +++ /dev/null @@ -1,34 +0,0 @@ -# ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๊ธฐํš์•ˆ - -## 1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š” -๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„ ํ”„๋กœ์„ธ์Šค ๋ฐ ํ”„๋กœ์ ํŠธ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ด€๋ฆฌ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ๋กœ๊ทธ, ๋ฆฌ์†Œ์Šค ํ˜„ํ™ฉ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. - -## 2. ์ฃผ์š” ๊ธฐ๋Šฅ ์ƒ์„ธ - -### โ‘  ๋ฉ”์ผ ๊ด€๋ฆฌ ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ ์‹œ์Šคํ…œ (Mail & Inquiry Management) - [์™„๋ฃŒ] -- **UI/UX ๊ณ ๋„ํ™”**: ๋ฆฌ์ŠคํŠธ ์˜์—ญ ๋„ˆ๋น„ ํ™•์žฅ(400px) ๋ฐ ์‹œ๊ฐ์  ๊ฐ€๋…์„ฑ ๊ฐœ์„  -- **๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง**: ํ‚ค์›Œ๋“œ ๋ฐ ๊ธฐ๊ฐ„๋ณ„ ๋ฉ”์ผ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ -- **๋™์  ์—ฐ๋™**: ๋ฆฌ์ŠคํŠธ ํด๋ฆญ ์‹œ ๋ฉ”์ผ ๋ณธ๋ฌธ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๊ตฌํ˜„ -- **๋ฉ”์ผ ๊ด€๋ฆฌ**: ๊ฐœ๋ณ„ ์‚ญ์ œ ๋ฐ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํ™œ์šฉํ•œ ๋Œ€๋Ÿ‰ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ -- **ํƒญ ์‹œ์Šคํ…œ**: ์ˆ˜์‹ /๋ฐœ์‹ /์ž„์‹œ/ํœด์ง€ํ†ต๋ณ„ ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ ๋ฐ ๋™์  ๋ Œ๋”๋ง ์ ์šฉ - -### โ‘ก ๋กœ๊ทธ ๊ด€๋ฆฌ (Log Management) -- **์ตœ๊ทผ ๋กœ๊ทธ**: ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ๋ฐ ๋ถ„์„ ์ž‘์—… ๋กœ๊ทธ ์ถœ๋ ฅ -- **์ „์ฒด ๋กœ๊ทธ**: ๋‚ ์งœ๋ณ„, ํ”„๋กœ์ ํŠธ๋ณ„ ํ•„ํ„ฐ๋ง์„ ํ†ตํ•œ ๋กœ๊ทธ ๊ธฐ๋ก ์กฐํšŒ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ - -### โ‘ข ํŒŒ์ผ ๊ด€๋ฆฌ (File Management) -- ํ”„๋กœ์ ํŠธ๋ณ„ ๋ฐ์ดํ„ฐ์…‹, ๋ถ„์„ ๊ฒฐ๊ณผ๋ฌผ ํŒŒ์ผ ๊ฐœ์ˆ˜ ๋ฐ ์šฉ๋Ÿ‰ ํ†ต๊ณ„ -- ํŒŒ์ผ ํ™•์žฅ์ž๋ณ„ ๊ตฌ์„ฑ ๋น„์œจ(CSV, JSON, Python ๋“ฑ) ์‹œ๊ฐํ™” ์ง€ํ‘œ ์ œ๊ณต - -### โ‘ฃ ์ธ์› ๊ด€๋ฆฌ (Personnel Management) -- ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ์ธ์› ํ˜„ํ™ฉ ์กฐํšŒ -- ์‚ฌ์šฉ์ž๋ณ„ ๊ถŒํ•œ(๊ด€๋ฆฌ์ž, ๋ถ„์„๊ฐ€, ๋ทฐ์–ด) ๋ถ€์—ฌ ๋ฐ ์ˆ˜์ • ๊ธฐ๋Šฅ - -### โ‘ข ๊ณต์ง€์‚ฌํ•ญ (Notice & Patch Notes) -- ๋ถ„์„ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ, ์‹œ์Šคํ…œ ์ ๊ฒ€, ํŒจ์น˜ ๋‚ด์—ญ ๊ณต์œ  -- ์‚ฌ์šฉ์ž ๋Œ€์ƒ ๊ณต์ง€์‚ฌํ•ญ ์ž‘์„ฑ ๋ฐ ๊ฒŒ์‹œํŒ ๊ด€๋ฆฌ - -## 3. UI/UX ๊ฐ€์ด๋“œ๋ผ์ธ -- **Layout**: ์ขŒ์ธก ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”(Sidebar) + ์ƒ๋‹จ ํ—ค๋”(Header) + ์ค‘์•™ ์ปจํ…์ธ  ์˜์—ญ -- **Theme**: ์‹ ๋ขฐ๊ฐ์„ ์ฃผ๋Š” Dark Blue / White ํ†ค์˜ ๊นจ๋—ํ•œ ๋””์ž์ธ -- **Responsiveness**: ๋‹ค์–‘ํ•œ ํ•ด์ƒ๋„์— ๋Œ€์‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ diff --git a/analyze_logs_pattern.py b/analyze_logs_pattern.py deleted file mode 100644 index 5aae4c4..0000000 --- a/analyze_logs_pattern.py +++ /dev/null @@ -1,48 +0,0 @@ -import pymysql -import re -from collections import Counter - -def get_db_connection(): - return pymysql.connect( - host='localhost', - user='root', - password='45278434', - database='pm_proto_test', - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor - ) - -def analyze_logs(): - conn = get_db_connection() - try: - with conn.cursor() as cursor: - cursor.execute("SELECT DISTINCT recent_log FROM projects_history WHERE recent_log IS NOT NULL AND recent_log != ''") - rows = cursor.fetchall() - - logs = [r['recent_log'] for r in rows] - - output = [] - output.append("[Raw Log Samples]") - for log in logs[:20]: - output.append(f"- {log}") - - patterns = [] - for log in logs: - p = re.sub(r'\d{2,4}\.\d{2}\.\d{2}', '[DATE]', log) - p = re.sub(r'\d+', '[NUM]', p) - patterns.append(p) - - output.append("\n[Log Patterns Frequency]") - pattern_counts = Counter(patterns).most_common(20) - for p, count in pattern_counts: - output.append(f"({count}) {p}") - - with open("log_analysis_result.txt", "w", encoding="utf-8") as f: - f.write("\n".join(output)) - print("Analysis complete. Result saved to log_analysis_result.txt") - - finally: - conn.close() - -if __name__ == "__main__": - analyze_logs() diff --git a/check_tables.py b/check_tables.py deleted file mode 100644 index caac7c4..0000000 --- a/check_tables.py +++ /dev/null @@ -1,29 +0,0 @@ -import pymysql -import os -from dotenv import load_dotenv - -load_dotenv() - -def show_tables(): - conn = pymysql.connect( - host=os.getenv('DB_HOST', 'localhost'), - user=os.getenv('DB_USER', 'root'), - password=os.getenv('DB_PASSWORD', '45278434'), - database='PM_proto_test', - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor - ) - try: - with conn.cursor() as cursor: - cursor.execute("SHOW TABLES") - tables = cursor.fetchall() - print("Tables in PM_proto_test:") - for t in tables: - print(f" - {list(t.values())[0]}") - except Exception as e: - print(f"Error occurred: {e}") - finally: - conn.close() - -if __name__ == "__main__": - show_tables() diff --git a/clear_test_db.py b/clear_test_db.py deleted file mode 100644 index adec441..0000000 --- a/clear_test_db.py +++ /dev/null @@ -1,29 +0,0 @@ -import pymysql -import os -from dotenv import load_dotenv - -load_dotenv() - -def clear_project_history(): - conn = pymysql.connect( - host=os.getenv('DB_HOST', 'localhost'), - user=os.getenv('DB_USER', 'root'), - password=os.getenv('DB_PASSWORD', '45278434'), - database='PM_proto_test', - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor - ) - try: - with conn.cursor() as cursor: - # ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ - print("Cleaning projects_history table in PM_proto_test...") - cursor.execute("DELETE FROM projects_history") - conn.commit() - print("Successfully cleared all records from projects_history.") - except Exception as e: - print(f"Error occurred: {e}") - finally: - conn.close() - -if __name__ == "__main__": - clear_project_history() diff --git a/clone_db.py b/clone_db.py deleted file mode 100644 index 06d4abe..0000000 --- a/clone_db.py +++ /dev/null @@ -1,45 +0,0 @@ -import pymysql -import os - -def clone_database(): - try: - connection = pymysql.connect( - host=os.getenv('DB_HOST', 'localhost'), - user=os.getenv('DB_USER', 'root'), - password=os.getenv('DB_PASSWORD', '45278434'), - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor - ) - - with connection.cursor() as cursor: - # 1. Create test database - cursor.execute("CREATE DATABASE IF NOT EXISTS PM_proto_test") - print("Database PM_proto_test created or already exists.") - - # 2. Get all tables from source database - cursor.execute("SHOW TABLES FROM PM_proto") - tables = cursor.fetchall() - - for table_row in tables: - table_name = list(table_row.values())[0] - - # 3. Drop existing table in test DB if exists - cursor.execute(f"DROP TABLE IF EXISTS PM_proto_test.{table_name}") - - # 4. Clone schema and data - # Note: CREATE TABLE ... LIKE doesn't copy data, and CREATE TABLE ... AS SELECT doesn't copy indexes. - # So we use LIKE first, then INSERT INTO ... SELECT * - cursor.execute(f"CREATE TABLE PM_proto_test.{table_name} LIKE PM_proto.{table_name}") - cursor.execute(f"INSERT INTO PM_proto_test.{table_name} SELECT * FROM PM_proto.{table_name}") - print(f"Table {table_name} cloned.") - - connection.commit() - print("Database cloning completed successfully.") - except Exception as e: - print(f"Error during database cloning: {e}") - finally: - if 'connection' in locals(): - connection.close() - -if __name__ == "__main__": - clone_database() diff --git a/crawler_service.py b/crawler_service.py index 1b333b3..383f60e 100644 --- a/crawler_service.py +++ b/crawler_service.py @@ -21,6 +21,7 @@ def get_db_connection(): """MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜)""" return pymysql.connect( host=os.getenv('DB_HOST', 'localhost'), + port=int(os.getenv('DB_PORT', 3306)), user=os.getenv('DB_USER', 'root'), password=os.getenv('DB_PASSWORD', '45278434'), database=os.getenv('DB_NAME', 'PM_proto'), diff --git a/crawler_service_test.py b/crawler_service_test.py index 57e10fe..c5cf6d2 100644 --- a/crawler_service_test.py +++ b/crawler_service_test.py @@ -21,6 +21,7 @@ def get_db_connection(): """MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(TEST) ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜""" return pymysql.connect( host=os.getenv('DB_HOST', 'localhost'), + port=int(os.getenv('DB_PORT', 3306)), user=os.getenv('DB_USER', 'root'), password=os.getenv('DB_PASSWORD', '45278434'), database='PM_proto_test', # ํ…Œ์ŠคํŠธ์šฉ DB ๊ณ ์ • diff --git a/libs/libasound.so.2 b/libs/libasound.so.2 new file mode 120000 index 0000000..42dfc99 --- /dev/null +++ b/libs/libasound.so.2 @@ -0,0 +1 @@ +libasound.so.2.0.0 \ No newline at end of file diff --git a/libs/libasound.so.2.0.0 b/libs/libasound.so.2.0.0 new file mode 100644 index 0000000..8e8a96c Binary files /dev/null and b/libs/libasound.so.2.0.0 differ diff --git a/libs/libfreebl3.chk b/libs/libfreebl3.chk new file mode 100644 index 0000000..07efd65 Binary files /dev/null and b/libs/libfreebl3.chk differ diff --git a/libs/libfreebl3.so b/libs/libfreebl3.so new file mode 100644 index 0000000..fa02f28 Binary files /dev/null and b/libs/libfreebl3.so differ diff --git a/libs/libfreeblpriv3.chk b/libs/libfreeblpriv3.chk new file mode 100644 index 0000000..417cafc Binary files /dev/null and b/libs/libfreeblpriv3.chk differ diff --git a/libs/libfreeblpriv3.so b/libs/libfreeblpriv3.so new file mode 100644 index 0000000..a852fb4 Binary files /dev/null and b/libs/libfreeblpriv3.so differ diff --git a/libs/libnspr4.so b/libs/libnspr4.so new file mode 100644 index 0000000..e75d230 Binary files /dev/null and b/libs/libnspr4.so differ diff --git a/libs/libnss3.so b/libs/libnss3.so new file mode 100644 index 0000000..7943829 Binary files /dev/null and b/libs/libnss3.so differ diff --git a/libs/libnss_compat.so.2 b/libs/libnss_compat.so.2 new file mode 100644 index 0000000..de5d67d Binary files /dev/null and b/libs/libnss_compat.so.2 differ diff --git a/libs/libnss_dns.so.2 b/libs/libnss_dns.so.2 new file mode 100644 index 0000000..b602854 Binary files /dev/null and b/libs/libnss_dns.so.2 differ diff --git a/libs/libnss_files.so.2 b/libs/libnss_files.so.2 new file mode 100644 index 0000000..5d91147 Binary files /dev/null and b/libs/libnss_files.so.2 differ diff --git a/libs/libnss_hesiod.so.2 b/libs/libnss_hesiod.so.2 new file mode 100644 index 0000000..000b32e Binary files /dev/null and b/libs/libnss_hesiod.so.2 differ diff --git a/libs/libnss_systemd.so.2 b/libs/libnss_systemd.so.2 new file mode 100644 index 0000000..285c551 Binary files /dev/null and b/libs/libnss_systemd.so.2 differ diff --git a/libs/libnssckbi.so b/libs/libnssckbi.so new file mode 100644 index 0000000..ba58ef8 Binary files /dev/null and b/libs/libnssckbi.so differ diff --git a/libs/libnssdbm3.chk b/libs/libnssdbm3.chk new file mode 100644 index 0000000..12c46f8 Binary files /dev/null and b/libs/libnssdbm3.chk differ diff --git a/libs/libnssdbm3.so b/libs/libnssdbm3.so new file mode 100644 index 0000000..1c3bf8f Binary files /dev/null and b/libs/libnssdbm3.so differ diff --git a/libs/libnssutil3.so b/libs/libnssutil3.so new file mode 100644 index 0000000..84373de Binary files /dev/null and b/libs/libnssutil3.so differ diff --git a/libs/libplc4.so b/libs/libplc4.so new file mode 100644 index 0000000..f82048e Binary files /dev/null and b/libs/libplc4.so differ diff --git a/libs/libplds4.so b/libs/libplds4.so new file mode 100644 index 0000000..488294f Binary files /dev/null and b/libs/libplds4.so differ diff --git a/libs/libsmime3.so b/libs/libsmime3.so new file mode 100644 index 0000000..506f67e Binary files /dev/null and b/libs/libsmime3.so differ diff --git a/libs/libsoftokn3.chk b/libs/libsoftokn3.chk new file mode 100644 index 0000000..87c2553 Binary files /dev/null and b/libs/libsoftokn3.chk differ diff --git a/libs/libsoftokn3.so b/libs/libsoftokn3.so new file mode 100644 index 0000000..ec65c54 Binary files /dev/null and b/libs/libsoftokn3.so differ diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index fea8577..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "AICodeTest", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/project_master.db b/project_master.db deleted file mode 100644 index e69de29..0000000 diff --git a/server.py b/server.py index 5d649fd..4bcd6d0 100644 --- a/server.py +++ b/server.py @@ -2,6 +2,7 @@ import os import sys import asyncio import pymysql +from dotenv import load_dotenv from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import StreamingResponse, FileResponse @@ -16,6 +17,7 @@ from project_service import ProjectService from analysis_service import AnalysisService # --- ํ™˜๊ฒฝ ์„ค์ • --- +load_dotenv() os.environ["PYTHONIOENCODING"] = "utf-8" TESSDATA_PREFIX = os.getenv("TESSDATA_PREFIX", r"C:\Users\User\AppData\Local\Programs\Tesseract-OCR\tessdata") os.environ["TESSDATA_PREFIX"] = TESSDATA_PREFIX @@ -41,6 +43,7 @@ def get_db_connection(): """MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜""" return pymysql.connect( host=os.getenv('DB_HOST', 'localhost'), + port=int(os.getenv('DB_PORT', 3306)), user=os.getenv('DB_USER', 'root'), password=os.getenv('DB_PASSWORD', '45278434'), database=os.getenv('DB_NAME', 'PM_proto'), diff --git a/server_test.py b/server_test.py index bc0d762..2aacee0 100644 --- a/server_test.py +++ b/server_test.py @@ -2,6 +2,7 @@ import os import sys import asyncio import pymysql +from dotenv import load_dotenv from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import StreamingResponse, FileResponse @@ -16,6 +17,7 @@ from project_service import ProjectService from analysis_service import AnalysisService # --- ํ™˜๊ฒฝ ์„ค์ • --- +load_dotenv() os.environ["PYTHONIOENCODING"] = "utf-8" TESSDATA_PREFIX = os.getenv("TESSDATA_PREFIX", r"C:\Users\User\AppData\Local\Programs\Tesseract-OCR\tessdata") os.environ["TESSDATA_PREFIX"] = TESSDATA_PREFIX @@ -41,6 +43,7 @@ def get_db_connection(): """MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(TEST) ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜""" return pymysql.connect( host=os.getenv('DB_HOST', 'localhost'), + port=int(os.getenv('DB_PORT', 3306)), user=os.getenv('DB_USER', 'root'), password=os.getenv('DB_PASSWORD', '45278434'), database='PM_proto_test', # ํ…Œ์ŠคํŠธ์šฉ DB๋กœ ๊ณ ์ • diff --git a/verify_swvw.py b/verify_swvw.py deleted file mode 100644 index 9746506..0000000 --- a/verify_swvw.py +++ /dev/null @@ -1,28 +0,0 @@ -import pymysql -from analysis_service import AnalysisService - -def verify_analysis(): - conn = pymysql.connect( - host='localhost', - user='root', - password='45278434', - database='pm_proto_test', - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor - ) - try: - with conn.cursor() as cursor: - results = AnalysisService.get_p_zsr_analysis_logic(cursor) - print(f"Total Projects Analyzed: {len(results)}") - print("\n[Sample Project Analysis Result]") - for res in results[:5]: - print(f"Project: {res['project_nm']}") - print(f" - Log Quality Score (Semantic): {res['log_quality']}") - print(f" - AVI Score (p_war): {res['p_war']}") - print(f" - OCI Score: {res['oci_score']}") - print("-" * 30) - finally: - conn.close() - -if __name__ == "__main__": - verify_analysis()