# ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack) ## ๐Ÿ“‹ ๊ฐœ์š” ์‚ฐ์—… ์ „๋ฌธ ์ •๋ณด ์ˆ˜์ง‘ ์‹œ์Šคํ…œ์˜ ๊ธฐ์ˆ  ์Šคํƒ์„ ์ •๋ฆฌํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ์ˆ ์˜ ์„ ํƒ ์ด์œ ์™€ ์—ญํ• ์„ ํฌํ•จํ•˜์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ–ฅ๏ธ Backend ### ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ - **Python 3.11+** - ์„ ํƒ ์ด์œ : ํ’๋ถ€ํ•œ NLP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒํƒœ๊ณ„, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” - ์—ญํ• : ๋ฉ”์ธ ๋ฐฑ์—”๋“œ ์–ธ์–ด - **FastAPI** - ์„ ํƒ ์ด์œ : ๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์ž๋™ API ๋ฌธ์„œ ์ƒ์„ฑ, ํƒ€์ž… ํžŒํŒ… ์ง€์› - ์—ญํ• : REST API ์„œ๋ฒ„, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฑ์—”๋“œ ### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค & ๊ฒ€์ƒ‰ - **PostgreSQL** - ์„ ํƒ ์ด์œ : ๊ตฌ์กฐํ™”๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ, ACID ํŠธ๋žœ์žญ์…˜, JSON ์ง€์› - ์—ญํ• : ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์‚ฌ์šฉ์ž ์ •๋ณด, ๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ - **Elasticsearch** - ์„ ํƒ ์ด์œ : ์ „๋ฌธ ๊ฒ€์ƒ‰, ๋‹ค์ฐจ์› ํ•„ํ„ฐ๋ง, ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ - ์—ญํ• : ๋ฌธ์„œ ๊ฒ€์ƒ‰ ์—”์ง„, ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง, ์ „๋ฌธ ๊ฒ€์ƒ‰ - **Redis** - ์„ ํƒ ์ด์œ : ๊ณ ์† ์บ์‹ฑ, ์„ธ์…˜ ๊ด€๋ฆฌ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ - ์—ญํ• : ์บ์‹œ ๋ ˆ์ด์–ด, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์บ์‹ฑ, ํŠธ๋ Œ๋”ฉ ๋ฐ์ดํ„ฐ ### NLP & ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ - **spaCy** - ์„ ํƒ ์ด์œ : ์‚ฐ์—…์šฉ NLP, ์ปค์Šคํ…€ ๋ชจ๋ธ ์ง€์›, ํ•œ๊ตญ์–ด ์ง€์› - ์—ญํ• : ๊ฐœ์ฒด๋ช… ์ธ์‹(NER), ๊ธฐ์ˆ  ์šฉ์–ด ์ถ”์ถœ - **Transformers (Hugging Face)** - ์„ ํƒ ์ด์œ : ์ตœ์‹  ์–ธ์–ด ๋ชจ๋ธ, ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ - ์—ญํ• : ๋ฌธ์„œ ์ž„๋ฒ ๋”ฉ, ์˜๋ฏธ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ - **scikit-learn** - ์„ ํƒ ์ด์œ : ๋จธ์‹ ๋Ÿฌ๋‹ ํŒŒ์ดํ”„๋ผ์ธ, ํ…์ŠคํŠธ ๋ถ„๋ฅ˜ - ์—ญํ• : ๋ฌธ์„œ ๋ถ„๋ฅ˜, ํƒœ๊ทธ ์˜ˆ์ธก, ํŠธ๋ Œ๋“œ ๋ถ„์„ ### ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ & ์Šค์ผ€์ค„๋ง - **Celery** - ์„ ํƒ ์ด์œ : ๋ถ„์‚ฐ ํƒœ์Šคํฌ ํ, ์Šค์ผ€์ค„๋ง ์ง€์› - ์—ญํ• : RSS ์ˆ˜์ง‘, ๋…ผ๋ฌธ ์ฒ˜๋ฆฌ, ๋ฐฐ์น˜ ์ž‘์—… - **Redis (Broker)** - ์„ ํƒ ์ด์œ : Celery ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค, ๊ณ ์„ฑ๋Šฅ - ์—ญํ• : ํƒœ์Šคํฌ ํ ๋ธŒ๋กœ์ปค ### ๋ฌธ์„œ ์ฒ˜๋ฆฌ - **PyPDF2 / pdfplumber** - ์„ ํƒ ์ด์œ : PDF ํ…์ŠคํŠธ ์ถ”์ถœ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ - ์—ญํ• : ๋…ผ๋ฌธ PDF ์ฒ˜๋ฆฌ, ๊ธฐ์ˆ  ๋ฌธ์„œ ๋ถ„์„ - **BeautifulSoup** - ์„ ํƒ ์ด์œ : HTML ํŒŒ์‹ฑ, ์›น ์Šคํฌ๋ž˜ํ•‘ - ์—ญํ• : RSS ํ”ผ๋“œ ์ฒ˜๋ฆฌ, ์›น์‚ฌ์ดํŠธ ํฌ๋กค๋ง - **Scrapy** - ์„ ํƒ ์ด์œ : ๋Œ€๊ทœ๋ชจ ์›น ํฌ๋กค๋ง, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ - ์—ญํ• : ํ‘œ์ค€ ๊ธฐ๊ด€ ์›น์‚ฌ์ดํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง --- ## ๐ŸŽจ Frontend ### ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ - **React 18** - ์„ ํƒ ์ด์œ : ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ, ํ’๋ถ€ํ•œ ์ƒํƒœ๊ณ„ - ์—ญํ• : ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• - **Next.js 13+** - ์„ ํƒ ์ด์œ : SSR/SSG ์ง€์›, ์„ฑ๋Šฅ ์ตœ์ ํ™”, ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… - ์—ญํ• : React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ### UI & ์Šคํƒ€์ผ๋ง - **Tailwind CSS** - ์„ ํƒ ์ด์œ : ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„ , ๋น ๋ฅธ ๊ฐœ๋ฐœ, ์ผ๊ด€๋œ ๋””์ž์ธ - ์—ญํ• : CSS ํ”„๋ ˆ์ž„์›Œํฌ, ๋ฐ˜์‘ํ˜• ๋””์ž์ธ - **Material-UI (MUI)** - ์„ ํƒ ์ด์œ : ์ „๋ฌธ์ ์ธ UI ์ปดํฌ๋„ŒํŠธ, ์ ‘๊ทผ์„ฑ ์ง€์› - ์—ญํ• : ๋ณต์žกํ•œ UI ์ปดํฌ๋„ŒํŠธ (ํ…Œ์ด๋ธ”, ํผ ๋“ฑ) ### ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” - **D3.js** - ์„ ํƒ ์ด์œ : ๊ณ ๋„๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐํ™” - ์—ญํ• : ๊ธฐ์ˆ  ๋„คํŠธ์›Œํฌ ๊ทธ๋ž˜ํ”„, ๋ณต์žกํ•œ ์ฐจํŠธ - **Chart.js** - ์„ ํƒ ์ด์œ : ๊ฐ„๋‹จํ•œ ์ฐจํŠธ ์ƒ์„ฑ, React ํ†ตํ•ฉ - ์—ญํ• : ํŠธ๋ Œ๋“œ ์ฐจํŠธ, ํ†ต๊ณ„ ๊ทธ๋ž˜ํ”„ ### ๊ฒ€์ƒ‰ & ์ƒํ˜ธ์ž‘์šฉ - **Algolia InstantSearch** - ์„ ํƒ ์ด์œ : ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰, ์ž๋™์™„์„ฑ, ํ•„ํ„ฐ๋ง - ์—ญํ• : ๊ฒ€์ƒ‰ UI ์ปดํฌ๋„ŒํŠธ --- ## ๐Ÿ”ง ์ „๋ฌธ ๋ถ„์•ผ ๋„๊ตฌ ### ํ•™์ˆ  ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ - **arXiv API** - ์„ ํƒ ์ด์œ : ๋ฌผ๋ฆฌํ•™/๊ณตํ•™ ๋…ผ๋ฌธ ์ ‘๊ทผ - ์—ญํ• : ์ตœ์‹  ์—ฐ๊ตฌ ๋…ผ๋ฌธ ์ˆ˜์ง‘ - **PubMed API** - ์„ ํƒ ์ด์œ : ์˜ํ•™/๋ณด๊ฑด ๊ด€๋ จ ๋…ผ๋ฌธ - ์—ญํ• : ์‚ฐ์—…์•ˆ์ „ ์˜ํ•™ ์—ฐ๊ตฌ ์ˆ˜์ง‘ - **IEEE Xplore API** - ์„ ํƒ ์ด์œ : ์ „๊ธฐ/์ „์ž/์ปดํ“จํ„ฐ ๊ณตํ•™ ๋…ผ๋ฌธ - ์—ญํ• : ๊ธฐ์ˆ  ํ‘œ์ค€ ๋ฐ ์—ฐ๊ตฌ ๋…ผ๋ฌธ ์ˆ˜์ง‘ ### ํ‘œ์ค€ ๋ชจ๋‹ˆํ„ฐ๋ง - **ASME ์›น์‚ฌ์ดํŠธ ํฌ๋กค๋Ÿฌ** - ์„ ํƒ ์ด์œ : ์••๋ ฅ์šฉ๊ธฐ ํ‘œ์ค€ ์—…๋ฐ์ดํŠธ ์ถ”์  - ์—ญํ• : BPVC ๋“ฑ ํ‘œ์ค€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ชจ๋‹ˆํ„ฐ๋ง - **KGS ์›น์‚ฌ์ดํŠธ ํฌ๋กค๋Ÿฌ** - ์„ ํƒ ์ด์œ : ํ•œ๊ตญ ๊ฐ€์Šค์•ˆ์ „ ๊ธฐ์ค€ ์ถ”์  - ์—ญํ• : ๊ตญ๋‚ด ์••๋ ฅ์šฉ๊ธฐ ๊ธฐ์ค€ ์—…๋ฐ์ดํŠธ - **API ์›น์‚ฌ์ดํŠธ ํฌ๋กค๋Ÿฌ** - ์„ ํƒ ์ด์œ : ์„์œ /๊ฐ€์Šค ์‚ฐ์—… ํ‘œ์ค€ ์ถ”์  - ์—ญํ• : API ํ‘œ์ค€ ์—…๋ฐ์ดํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง ### ์ „๋ฌธ ์šฉ์–ด ์ฒ˜๋ฆฌ - **์••๋ ฅ์šฉ๊ธฐ ์ „๋ฌธ ์šฉ์–ด ์‚ฌ์ „** - ์„ ํƒ ์ด์œ : ์ •ํ™•ํ•œ ๊ธฐ์ˆ  ์šฉ์–ด ์ธ์‹ - ์—ญํ• : NER ๋ชจ๋ธ ํ•™์Šต ๋ฐ์ดํ„ฐ - **ํ”Œ๋žœํŠธ ์žฅ๋น„ ๋ถ„๋ฅ˜ ์ฒด๊ณ„** - ์„ ํƒ ์ด์œ : ์ฒด๊ณ„์ ์ธ ์žฅ๋น„ ๋ถ„๋ฅ˜ - ์—ญํ• : ํƒœ๊ทธ ์ •๊ทœํ™” ๋ฐ ๋ถ„๋ฅ˜ - **์‚ฐ์—…์•ˆ์ „ ์šฉ์–ด ์˜จํ†จ๋กœ์ง€** - ์„ ํƒ ์ด์œ : ์•ˆ์ „ ๋ถ„์•ผ ์ „๋ฌธ ์šฉ์–ด ์ฒด๊ณ„ํ™” - ์—ญํ• : ์•ˆ์ „ ๊ด€๋ จ ๋ฌธ์„œ ๋ถ„๋ฅ˜ --- ## ๐Ÿ—๏ธ Infrastructure ### ์ปจํ…Œ์ด๋„ˆํ™” - **Docker** - ์„ ํƒ ์ด์œ : ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ, ๋ฐฐํฌ ๊ฐ„์†Œํ™” - ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆํ™” - **Docker Compose** - ์„ ํƒ ์ด์œ : ๋‹ค์ค‘ ์„œ๋น„์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ - ์—ญํ• : ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ### ๋ชจ๋‹ˆํ„ฐ๋ง & ๋กœ๊น… - **Prometheus** - ์„ ํƒ ์ด์œ : ์‹œ๊ณ„์—ด ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘, ์•Œ๋ฆผ ์‹œ์Šคํ…œ - ์—ญํ• : ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง - **Grafana** - ์„ ํƒ ์ด์œ : ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐํ™”, ๋Œ€์‹œ๋ณด๋“œ - ์—ญํ• : ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ - **ELK Stack (Elasticsearch, Logstash, Kibana)** - ์„ ํƒ ์ด์œ : ์ค‘์•™ํ™”๋œ ๋กœ๊ทธ ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋กœ๊ทธ - ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ ### CI/CD - **GitHub Actions** - ์„ ํƒ ์ด์œ : GitHub ํ†ตํ•ฉ, ๋ฌด๋ฃŒ ์‚ฌ์šฉ๋Ÿ‰ - ์—ญํ• : ์ž๋™ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ### ์Šคํ† ๋ฆฌ์ง€ - **MinIO (S3 ํ˜ธํ™˜)** - ์„ ํƒ ์ด์œ : ์˜คํ”ˆ์†Œ์Šค ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€, S3 ํ˜ธํ™˜์„ฑ - ์—ญํ• : ๋…ผ๋ฌธ PDF, ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ €์žฅ --- ## ๐Ÿบ macOS ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (Homebrew ๊ธฐ๋ฐ˜) ### ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € - **Homebrew** - ์„ ํƒ ์ด์œ : macOS ํ‘œ์ค€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € - ์—ญํ• : ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์น˜ ๋ฐ ๊ด€๋ฆฌ ### ํ•„์ˆ˜ ๊ฐœ๋ฐœ ๋„๊ตฌ ```bash # ์–ธ์–ด ๋Ÿฐํƒ€์ž„ brew install python@3.11 # Python ๋Ÿฐํƒ€์ž„ brew install node@18 # Node.js ๋Ÿฐํƒ€์ž„ # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค brew install postgresql # PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค brew install redis # Redis ์บ์‹œ/๋ธŒ๋กœ์ปค # ๊ฒ€์ƒ‰ ์—”์ง„ brew install elasticsearch # Elasticsearch ๊ฒ€์ƒ‰ ์—”์ง„ # ๊ฐœ๋ฐœ ๋„๊ตฌ brew install git # ๋ฒ„์ „ ๊ด€๋ฆฌ brew install htop # ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง # GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ brew install --cask docker # Docker Desktop brew install --cask visual-studio-code # IDE ``` ### ์„œ๋น„์Šค ๊ด€๋ฆฌ ```bash # ์„œ๋น„์Šค ์‹œ์ž‘ brew services start postgresql brew services start redis brew services start elasticsearch # ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ brew services list ``` --- ## ๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต ### ์บ์‹ฑ ๊ณ„์ธต ``` L1: Redis (์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, ํŠธ๋ Œ๋”ฉ ํƒœ๊ทธ) L2: PostgreSQL (๊ตฌ์กฐํ™”๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„) L3: Elasticsearch (์ „๋ฌธ ๊ฒ€์ƒ‰, ํƒœ๊ทธ ์ธ๋ฑ์Šค) L4: MinIO/S3 (์›๋ณธ ๋ฌธ์„œ, ๋…ผ๋ฌธ PDF) ``` ### ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” (Mac mini 8GB ๊ธฐ์ค€) ```bash # Elasticsearch JVM ์„ค์ • export ELASTICSEARCH_JAVA_OPTS="-Xms512m -Xmx1g" # Redis ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ export REDIS_MAXMEMORY="256mb" # Python ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™” export PYTHONOPTIMIZE=1 ``` ### ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™” - **์‚ฌ์ „ ๊ณ„์‚ฐ**: ์ž์ฃผ ๊ฒ€์ƒ‰๋˜๋Š” ์กฐํ•ฉ ์บ์‹ฑ - **์ธ๋ฑ์Šค ์ตœ์ ํ™”**: ์ „๋ฌธ ์šฉ์–ด ๊ธฐ๋ฐ˜ ์—ญ์ƒ‰์ธ - **๋ฒกํ„ฐ ๊ฒ€์ƒ‰**: BERT ๊ธฐ๋ฐ˜ ์˜๋ฏธ ๊ฒ€์ƒ‰ - **์ง€์—ญ๋ณ„ ์ƒค๋”ฉ**: ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ €์žฅ --- ## ๐Ÿ”„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ### ์ˆ˜์ง‘ โ†’ ์ฒ˜๋ฆฌ โ†’ ์ €์žฅ โ†’ ๊ฒ€์ƒ‰ ``` RSS/API ์ˆ˜์ง‘ โ†’ NLP ํƒœ๊ทธ ์ถ”์ถœ โ†’ PostgreSQL ์ €์žฅ โ†’ Elasticsearch ์ธ๋ฑ์‹ฑ โ†’ Redis ์บ์‹ฑ ``` ### ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ - **RSS ๋ชจ๋‹ˆํ„ฐ๋ง**: 5๋ถ„๋งˆ๋‹ค ์ƒˆ ํ”ผ๋“œ ํ™•์ธ - **๋…ผ๋ฌธ ๋™๊ธฐํ™”**: ์ผ์ผ 1ํšŒ ํ•™์ˆ  DB ์Šค์บ” - **ํ‘œ์ค€ ์—…๋ฐ์ดํŠธ**: ์ฃผ๊ฐ„ ๊ณต์‹ ์‚ฌ์ดํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง --- ## ๐Ÿš€ ํ™•์žฅ์„ฑ ๊ณ ๋ ค์‚ฌํ•ญ ### ์ˆ˜ํ‰ ํ™•์žฅ - **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค**: ๊ธฐ๋Šฅ๋ณ„ ์„œ๋น„์Šค ๋ถ„๋ฆฌ - **๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ**: ๊ฒ€์ƒ‰ ์„œ๋น„์Šค ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค - **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ**: ์ง€์—ญ/๋ถ„์•ผ๋ณ„ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ### ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง - **๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘**: ์‘๋‹ต ์‹œ๊ฐ„, ์ฒ˜๋ฆฌ๋Ÿ‰, ์—๋Ÿฌ์œจ - **์•Œ๋ฆผ ์‹œ์Šคํ…œ**: ์ž„๊ณ„๊ฐ’ ์ดˆ๊ณผ ์‹œ ์ž๋™ ์•Œ๋ฆผ - **์šฉ๋Ÿ‰ ๊ณ„ํš**: ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€์œจ ๊ธฐ๋ฐ˜ ๋ฆฌ์†Œ์Šค ๊ณ„ํš --- ์ด ๊ธฐ์ˆ  ์Šคํƒ์€ ์‚ฐ์—… ์ „๋ฌธ ์ •๋ณด์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒ๋˜์—ˆ์œผ๋ฉฐ, macOS ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ๊ณผ ์šด์˜ ์•ˆ์ •์„ฑ์„ ๋ชจ๋‘ ๊ณ ๋ คํ•œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.