์ „์ฒด ๊ธ€ 191

[Modeling] ์‹๋ณ„์ž๋ฅผ ์ •์˜ํ•  ๋•Œ ์ฃผ์˜ํ•˜๋Š” ๊ฒฝ์šฐ (์ธ์กฐ์‹๋ณ„์ž)

์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ช…ํ™•ํ•œ ๋ณธ์งˆ์‹๋ณ„์ž๊ฐ€ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ณธ๋Šฅ์ ์œผ๋กœ ์ธ์กฐ์‹๋ณ„์ž๋ฅผ PK๋กœ ์‚ฌ์šฉํ•ด ์™”๋‹ค. ์ธ์กฐ์‹๋ณ„์ž๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ด๋ก ์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์‹๋ณ„์ž๊ฐ€ ํ•œ๊ฐœ์ผ ๋•Œ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ธ์กฐ์‹๋ณ„์ž๋ฅผ ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅธ ์„ค๊ณ„๋ฒ•์ด ๊ถ๊ธˆํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ์ธ์กฐ์‹๋ณ„์ž๋ฅผ ์“ฐ๋”๋ผ๋„ ์ถ”๊ฐ€๋กœ ๋ณด์™„ํ•ด์•ผ ํ•  ์ ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.1. ์‹๋ณ„์ž ๊ฐœ๋…์›๋ž˜ ์กด์žฌํ•˜๋Š” ์†์„ฑ์ด๋ƒ์— ๋”ฐ๋ผ ๋ณธ์งˆ์‹๋ณ„์ž / ์ธ์กฐ์‹๋ณ„์ž๋กœ ๊ตฌ๋ถ„๋Œ€ํ‘œ์„ฑ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ฃผ ์‹๋ณ„์ž / ๋Œ€์ฒด(๋ณด์กฐ)์‹๋ณ„์ž๋กœ ๊ตฌ๋ถ„์—”ํ‹ฐํ‹ฐ์— ์›๋ž˜ ์กด์žฌํ•˜๋Š” ์†์„ฑ์ธ ์‚ฌ์›๋ฒˆํ˜ธ, ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ / ์—…๋ฌด์ฒ˜๋ฆฌ๋‚˜ ์ด๋ฒคํŠธ ์„ฑ๊ฒฉ์˜ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ํšŒ์› ID, ๊ณ„์ขŒ๋ฒˆํ˜ธ์ฒ˜๋Ÿผ ID๋‚˜ ์ผ๋ จ๋ฒˆํ˜ธ ๋“ฑ์„ ๋ถ€์—ฌํ•˜์—ฌ ์‹๋ณ„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋‘ ๋ณธ์งˆ์‹๋ณ„์ž๋ฅผ ํ™œ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋‹ค. 2. ์ธ์กฐ์‹๋ณ„์ž๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ฉํ•  ๋•Œ ํ†ต..

DB 2025.10.02

[ML] 3์žฅ. ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ

๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ -- ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ0. ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์„ค๋ช…ํ•˜๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ๋ชจ๋ธ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ผ๋ จ์˜ ์งˆ๋ฌธ์„ ํ•™์Šตํ•˜๋Š” ๋ชจ๋ธ์ธ๋ฐ ๋งˆ์น˜ ์Šค๋ฌด ๊ณ ๊ฐœ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ์ • ํŠธ๋ฆฌ ์—ญ์‹œ ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ƒ๋‹จ์˜ ์งˆ๋ฌธ, ์ฆ‰ ๋…ธ๋“œ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋˜๋ฉฐ ์•„๋ž˜๋กœ ๋ป—์นœ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค. ์ž์‹ ๋…ธ๋“œ์—์„œ ๋ฐ˜๋Œ€๋กœ ์œ„๋กœ ๋ป—์œผ๋ฉด ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ๋…ธ๋“œ ์—†๋Š” ๋…ธ๋“œ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” 5๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๊ฒฐ์ • ํŠธ๋ฆฌ๋Š” ์ด ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ•œ ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค๋งŒ ๋‚จ๋„๋ก ๋ถ„๋ฅ˜๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ˆœ์ˆ˜๋…ธ๋“œ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์งˆ๋ฌธ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ๋ง๋กœ ์ •๋ณด ์ด๋“์„ ์ตœ๋Œ€ํ™”ํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ์ด ํŠธ๋ฆฌ์—์„œ๋Š” ๋‚ ์”จ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์„ธ ๊ฐ€์ง€์˜ ์„ ํƒ..

AI 2025.10.02

[ML] 3์žฅ. ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ (SVM)

๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹  -- ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ๊ฒฐ์ • ํŠธ๋ฆฌ, k-์ตœ๊ทผ์ ‘ ์ด์›ƒSVM์˜ ์ตœ์ ํ™” ๋Œ€์ƒ์€ ์ƒ˜ํ”Œ์˜ ํด๋ž˜์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒฐ์ • ๊ฒฝ๊ณ„์™€ ์ƒ˜ํ”Œ ๊ฐ„ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๋งˆ์ง„์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฐ์ • ๊ฒฝ๊ณ„(์ดˆํ‰๋ฉด)์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ›ˆ๋ จ ์ƒ˜ํ”Œ์€ ์„œํฌํŠธ ๋ฒกํ„ฐ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋งˆ์ง„ ์•ˆ์— ์–ด๋–ค ์ƒ˜ํ”Œ๋„ ์—†๊ฒŒ ํ•˜๋Š” ๋งˆ์ง„์„ ํ•˜๋“œ ๋งˆ์ง„ ๊ทธ๋ฆฌ๊ณ  1-2๊ฐœ ์ •๋„์˜ ์ƒ˜ํ”Œ์€ ํ—ˆ์šฉํ•˜๋Š” ๋งˆ์ง„์„ ์†Œํ”„ํŠธ ๋งˆ์ง„์ด๋ผ๊ณ  ํ•œ๋‹ค. ํด๋ž˜์Šค๋Š” w^T * x ์˜ ์„ ํ˜•๊ณ„์‚ฐ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š”๋ฐ ์–‘์„ฑ ์ชฝ ์ดˆํ‰๋ฉด์€ 1, ์Œ์„ฑ ์ชฝ ์ดˆํ‰๋ฉด์€ -1๋กœ ๋‘๊ณ  ๊ณ„์‚ฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋„์ถœ๋œ ์‹์„ ์ •๋ฆฌํ•˜๋ฉด ์–‘์„ฑ ์ƒ˜ํ”Œ๊ณผ ์Œ์„ฑ ์ƒ˜ํ”Œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ณต์‹์ด ๋‚˜์˜จ๋‹ค. ์šฐ๋ณ€์„ ์ตœ๋Œ€ํ™”ํ•ด์•ผ ๋งˆ์ง„์ด ์ตœ๋Œ€ํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ชจ์˜ ๋…ธ๋ฆ„ ๋ถ€๋ถ„์„ ์ตœ์†Œํ™”ํ•˜๋ฉด..

AI 2025.10.01

[ML] 3์žฅ. ํผ์…‰ํŠธ๋ก  ํ›ˆ๋ จ๊ณผ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€

๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ -- ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ0. ํผ์…‰ํŠธ๋ก  ํ›ˆ๋ จtrain_test_split()์„ ์ด์šฉํ•˜์—ฌ X์™€ y ๋ฐฐ์—ด์„ ๋žœ๋คํ•˜๊ฒŒ ๋‚˜๋ˆˆ๋‹ค. ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์€ 0.3, ์ฆ‰ 70:30 ๋น„์œจ๋กœ ์ง€์ •ํ–ˆ๋Š”๋ฐ ๊ธฐ๋ณธ๊ฐ’์€ 0.25๋ผ๊ณ  ํ•œ๋‹ค. stratify=y๋Š” ํƒ€๊นƒ ๊ฐ’์ธ y๋ฅผ ์ ์–ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์…‹์˜ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์…‹๊ณผ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์…‹์˜ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ” ๋น„์œจ์„ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. from sklearn.model_selection import train_test_spliteX_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=1, stratify=y) ๊ทธ๋ฆฌ๊ณ  ์ด..

AI 2025.09.25

[Modeling] ํ•œ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋‘ ๊ด€๋ฆฌ vs ์‹๋ณ„์ž ์ƒ์†์œผ๋กœ ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ

ํŽธ์ง€๋ฅผ ์ฃผ์ œ๋กœ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ERD๋ฅผ ๊ทธ๋ฆฌ๋ฉด์„œ ํ•œ ๊ฐ€์ง€ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒผ๋‹ค. ํŽธ์ง€ ๋‹น [๊ณต๊ฐํ•ด์š”,์Šฌํผ์š”,ํž˜๋‚ด์š”,์‘์›ํ•ด์š”]์™€ ๊ฐ™์ด ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๊ฐ์ •๋“ค์„ ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ๋กœ ๋ถ„๋ฅ˜ํ•ด์„œ ์‹๋ณ„์ž ์ƒ์†์„ ํ•˜๋ฉด ๊ทธ๋ฃนํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋” ๊น”๋”ํ•˜์ง€ ์•Š์„๊นŒ ๊ถ๊ธˆํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋“ค์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.1. ํ•œ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์กฐ์ธ์„ ํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด ์ฟผ๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•˜๋‹คํŽธ์ง€ ๊ด€๋ จ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํ•œ๊ณณ์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค์ƒˆ๋กœ์šด ๊ฐ์ • ์†์„ฑ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค2. ์‹๋ณ„์ž ์ƒ์†์œผ๋กœ ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ๊ฐ์ • ์œ ํ˜•๋“ค์„ ๋„ค ๊ฐœ๋กœ ๊ณ ์ •์ ์œผ๋กœ ์ •ํ•ด ๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๊ฐ์ • ์ถ”๊ฐ€์— ์œ ๋ฆฌํ•œ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹˜์„ ์œ ์˜ํ•œ๋‹ค...

DB 2025.09.19

๋ถ€ํŠธ์บ ํ”„ ์ตœ์ข… ํšŒ๊ณ 

๋ถ€ํŠธ์บ ํ”„์— ๋Œ€ํ•œ ๋งˆ์นจํ‘œ๋ฅผ ์ด์ œ์„œ์•ผ ์ฐ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ๋Œ€ํ•™ ์กธ์—…์„ ํ•˜๊ธฐ๋„ ์ „์— ๋ฌด์–ธ๊ฐ€์— ์ซ“๊ธฐ๋“ฏ ๋™๊ณ„๋ฐฉํ•™ ์ธํ„ด๊นŒ์ง€ ํฌ๊ธฐํ•ด ๊ฐ€๋ฉด์„œ ๋ถ€ํŠธ์บ ํ”„์— ์ง€์›ํ–ˆ๋‹ค. ๋ณต์ „์ด์—ˆ๋˜ ์ปด๊ณต์ด ๋‚ด๊ฒ ์ฃผ์ „๊ณต ์ด์ƒ์˜ ์˜๋ฏธ๊ฐ€ ์žˆ์—ˆ๊ณ  ์‹ค์ œ๋กœ ๊ฐ€์žฅ ์ž์‹ ์žˆ๋˜ ์˜์–ด๋ฅผ ์„œ๋ธŒ๋กœ ๋‘๋ฉฐ ์ปดํ“จํ„ฐ ๊ณต๋ถ€์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋ ค๊ณ  ์• ์ผ๋‹ค. ์ปด๊ณต ์นœ๊ตฌ๋„ ๋™๊ธฐ๋„ ์—†์—ˆ๋˜ ํ„ฐ๋ผ ์–ด๋–ป๊ฒŒ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋งจ๋•…ํ—ค๋”ฉ ์ •์‹ ์œผ๋กœ ๊ต์ˆ˜๋‹˜๋“ค ์ˆ˜์—…์œผ๋กœ ๋ฐฐ์› ๋‹ค. ๋ฌธ๊ณผ๋กœ ์ง€๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์ด๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๊ณต๋ถ€๊ฐ€ ํฅ๋ฏธ๋กœ์› ๊ณ  ์ œ ๋ถ„์•ผ์— ์—ด์ •๊ณผ ์ „๋ฌธ์„ฑ์„ ๊ฐ–์ถ˜ ๊ต์ˆ˜๋‹˜๋“ค์„ ๋ณด๊ณ  ์กด๊ฒฝ์‹ฌ์ด ๋งŽ์ด ์ƒ๊ฒผ๋‹ค. 2ํ•™๋…„ ์ฒซ ์ „๊ณต์ˆ˜์—…๋ถ€ํ„ฐ 4ํ•™๋…„ ๋ง‰ํ•™๊ธฐ ์ „๊ณต์ˆ˜์—…๊นŒ์ง€ ๋“ค์ธ ๋…ธ๋ ฅ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋А๋ผ๋Š”๋ฐ ์‹œ๊ฐ„๊ณผ ์ดํ•ด๋ ฅ์ด ์Œ“์ด๋ฉด์„œ ์„ฑ์ ๋„ ์ ์  ์ข‹์•„์กŒ๋‹ค. ์ž˜ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๋งˆ์Œ์œผ๋กœ ์‹œ์ž‘ํ•ด ๊ณต๋ถ€๋ฅผ ํ•ด ..

[AI] Google AI Essentials: Coursera Training ํšŒ๊ณ 

๋‚˜๋Š” AI ์‚ฌ์šฉ์— ๋Œ€ํ•ด ๋ง‰ ํ˜ธ์˜์ ์ธ ์‚ฌ๋žŒ์€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด ์ผ์ƒ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ด ์™”๊ธด ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๋•Œ ์˜๊ฒฌ์ฐจ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ์ž AI ๊ธฐ๋Šฅ์„ ๋งก์•„ ๋ชจ๋ฅด๋Š” ๊ฑด gptํ•œํ…Œ ๋ฌผ์–ด๋ณด๋ฉด์„œ ๊ฐœ๋ฐœํ•˜์ž๋Š” ๋ง์— ๊ฑฑ์ •๊ณผ ๋ถˆํŽธํ•œ ๋‚ด์ƒ‰์„ ๋น„์ถ”์—ˆ๋‹ค. ๊ทธ๋žฌ๋˜ ์ด์œ ๋Š” AI ํ”„๋กœ์ ํŠธ๋ฅผ ํ•œ ๋ฒˆ๋„ ํ•ด๋ณธ ์ ์ด ์—†๊ณ  ์•„๋Š” ๊ฒƒ๋„ ์—†๋Š”๋ฐ ๋ฐฉํ–ฅ์„ฑ๋„ ๋ชจ๋ฅด๋Š” ๋‚ด๊ฐ€ ๊ณผ์—ฐ ํ˜ผ์ž์„œ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์— ๋Œ€ํ•œ ์šฐ๋ ค์˜€๋‹ค. ์ž˜ ๋ชฐ๋ผ๋„ AI๊ฐ€ ๋‹ค ์•Œ๋ ค์ฃผ๊ณ  ๊ตฌ๊ธ€๋ง์„ ํ•ด ๋ณด๋‚˜, gptํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‚˜ ์–ด์ฐจํ”ผ ๋ณต๋ถ™ํ•˜๋Š” ๊ฑด ๊ฐ™์ง€ ์•Š๋ƒ๋Š” ๋ƒ‰์ •ํ•œ ๋ง๋“ค ์ค‘ ‘๋ณต๋ถ™’์ด๋ž€ ๋‹จ์–ด์— ๊ฝ‚ํ˜€ ๋ฐ”๋กœ ๋ฐฉ์–ด๊ธฐ์ œ์™€(?), ๋‚˜๋Š” ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ๋Š” ์˜ค๋งŒํ•œ ๊ฐ์ •์ด ๋“ค์—ˆ๋‹ค. ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ ๊ฒช๊ฑฐ๋‚˜ ์•Œ๋ ค์ค€ ์ •๋ณด๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋‹ค ์ด ๋ฐฉ๋ฒ•์ด ๋‚ด๊ฒŒ ๋งž์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋งŽ..

AI 2025.07.16

[Project] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“œ๋ผ์ด๋ฒ„ ์„ ํƒ

์ƒํ™ฉ์ฑ—๋ด‡ ์ฝ”๋“œ๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ฐ”๊พธ๊ณ  ์žˆ๋Š”๋ฐ MySQL DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” pymysql ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋™๊ธฐ์‹์ด๋‹ค.๋”ฐ๋ผ์„œ pymysql์„ ๋Œ€์ฒดํ•  MySQL ๋น„๋™๊ธฐ์‹ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.๊ทธ๋ž˜๋„ ์„ฑ๋Šฅ์ด ์ข‹์€ ๊ฑธ ํƒํ•˜๊ณ  ์‹ถ๋‹ค.์„ค๋ช…DB ๋“œ๋ผ์ด๋ฒ„(DB ์–ด๋Œ‘ํ„ฐ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.python์— connect(): Application๊ณผ Database๋ฅผ ์—ฐ๊ฒฐconnection์— ๋Œ€ํ•œ pool ๊ด€๋ฆฌDB ํ’€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ•˜๋‚˜๋ฅผ ๋นŒ๋ ค์˜จ๋‹ค. ์—ฐ๊ฒฐ์„ ๋นŒ๋ ค์˜จ ํ›„ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ์„ ํ’€์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์—ฐ๊ฒฐ์„ ๋นŒ๋ ค์™”๋‹ค๋ฉด ๊ทธ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์‹ค์ œ๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฅผ cursor()๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰ DB ์—ฐ๊ฒฐ ์œ„์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. async/awai..

[Project] onErrorResume ํƒ€์ž„ ์•„์›ƒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ƒํ™ฉํŒŒ์ด์ฌ ์‘๋‹ต์ด ๋Šฆ์–ด์งˆ ๊ฒฝ์šฐ AsyncRequestTimeoutException์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์„œ๋น„์Šค ๋‹จ์˜ onErrorResume์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.๋‚˜๋Š” WebClientRequestException๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ onErrorResume์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.ํŒŒ์ด์ฌ์—์„œ ์„œ๋ฒ„ ๋กœ๋”ฉ ์‹œ DB ์—ฐ๊ฒฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด์„œ ์Šคํ”„๋ง์—์„œ๋Š” WebClientRequestException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ onErrorResume์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํ•ด ์ฃผ์—ˆ๋‹ค. ์„ค๋ช…1. ํƒ€์ž„ ์•„์›ƒ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ๋ฐ ๋ณดํ˜ธ์„œ๋น„์Šค ๊ฑฐ๋ถ€ (DoS) ๊ณต๊ฒฉ ๋ฐฉ์ง€์—๋„ ๋„์›€์ด ๋œ๋‹ค์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ ์žฅ์•  ์ „ํŒŒ ๋ฐฉ์ง€ํ•˜๋‚˜์˜ ๋А๋ฆฌ๊ฑฐ๋‚˜ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด..

[Project] ์ฑ—๋ด‡ ํŒŒ์ด์ฌ ์‘๋‹ต ํ๋ฆ„, ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ •๋ฆฌ

LifeSpan@app.on_event("startup") ์ง€, deprecatedlifespan ๋ฐฉ์‹๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฐฉ์‹์€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰@app.on_event("startup")@app.on_event("shutdown")- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋‹น ํ•œ ๋ฒˆ๋งŒ ์ •์˜ ๊ฐ€๋Šฅ@asynccontextmanagerasync def lifespan(app: FastAPI): # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์ „ yield # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์ „ app = FastAPI(lifespan=lifespan) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•  ๋•Œ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์ž‘์—…์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ ๋งŽ์Œ์ „์—ญ ๋ณ€์ˆ˜ ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๊ฐ™์ด ์‚ฌ์šฉํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌyield..