ํ”„๋กœ์ ํŠธ

์ผ๋ฐ˜

์‚ฌ์šฉ์ž์ •๋ณด

์ƒˆ๊ธฐ๋Šฅ #44

minkyu park์ด(๊ฐ€) 21์ผ ์ „์— ๋ณ€๊ฒฝ

{{>toc}} 

 # ๐Ÿ“˜ Mangement Cloud server FastAPI ํ”„๋กœ์ ํŠธ 

 ## ๐ŸŸฆ Epic Issue 1 โ€” FastAPI ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์„ค๊ณ„ 

 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: FastAPI ์„œ๋ฒ„ ๊ฐœ๋ฐœ 

 ์„ค๋ช…: 

 
 - FastAPI ๊ธฐ๋ฐ˜ mgmt ์„œ๋ฒ„์˜ ์ „์ฒด ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. 
 

 - app / worker / routers / models / core ๊ตฌ์กฐ ์ •์˜ 
 

 - Gitea ์ €์žฅ์†Œ ์ƒ์„ฑ 
 

 - PyCharm ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„ 
 

 - ๊ธฐ๋ณธ ์‹คํ–‰ ๊ตฌ์กฐ(main.py) ์„ค๊ณ„ 

 ## ๐ŸŸฆ Issue 2 โ€” Django ๋ชจ๋ธ ๋ถ„์„ ๋ฐ FastAPI ๋ชจ๋ธ ๋ณ€ํ™˜ ๊ณ„ํš 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: Django โ†’ FastAPI ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ 

 ์„ค๋ช… 
 ๊ธฐ์กด Django ORM ๋ชจ๋ธ์„ ๋ถ„์„ํ•˜๊ณ  SQLAlchemy ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. 

 ServerMaster 

 ServerStatus 

 ServerControl 

 ServerDetail 

 JSONField โ†’ PostgreSQL JSONB ๋ณ€ํ™˜ 

 ๊ด€๊ณ„(OneToOne, ForeignKey) ๋งคํ•‘ ๋ฐฉ์‹ ์ •์˜ 

 ## ๐ŸŸฆ Issue 3 โ€” FastAPI ๊ธฐ๋ณธ ์„œ๋ฒ„ ๊ตฌ์ถ• 
 ํŠธ๋ž˜์ปค: Feature 
 ์นดํ…Œ๊ณ ๋ฆฌ: FastAPI ์„œ๋ฒ„ ๊ฐœ๋ฐœ 

 ์„ค๋ช… 
 FastAPI ๊ธฐ๋ณธ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค. 

 /ping 

 /server/list 

 /server/status/{hostname} 

 uvicorn ์‹คํ–‰ ํ…Œ์ŠคํŠธ 

 test_main.http ํ…Œ์ŠคํŠธ 

 ## ๐ŸŸฆ Issue 4 โ€” PostgreSQL ์—ฐ๊ฒฐ ๋ฐ SQLAlchemy ๋ชจ๋ธ ์ƒ์„ฑ 
 ํŠธ๋ž˜์ปค: Feature 
 ์นดํ…Œ๊ณ ๋ฆฌ: DB(PostgreSQL) 

 ์„ค๋ช… 
 PostgreSQL ์—ฐ๊ฒฐ ๋ฐ SQLAlchemy ๋ชจ๋ธ์„ ์ƒ์„ฑํ•œ๋‹ค. 

 DB ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ 

 SQLAlchemy Base ์ƒ์„ฑ 

 ๋ชจ๋ธ ๋งคํ•‘ 

 JSONB ํ•„๋“œ ํ…Œ์ŠคํŠธ 

 ## ๐ŸŸฆ Issue 5 โ€” MQTT Worker ๋…๋ฆฝ ํ”„๋กœ์„ธ์Šค ์„ค๊ณ„ 
 ํŠธ๋ž˜์ปค: Feature 
 ์นดํ…Œ๊ณ ๋ฆฌ: MQTT Worker 

 ์„ค๋ช… 
 MQTT worker๋ฅผ FastAPI์™€ ๋ถ„๋ฆฌ๋œ ๋…๋ฆฝ ํ”„๋กœ์„ธ์Šค๋กœ ์„ค๊ณ„ํ•œ๋‹ค. 

 asyncio-mqtt ์‚ฌ์šฉ 

 ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๊ตฌ์กฐ ์„ค๊ณ„ 

 DB ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹ ๊ฒฐ์ • 

 FastAPI์™€ ์—ฐ๋™ ๋ฐฉ์‹ ์ •์˜(API ํ˜ธ์ถœ vs DB ์ง์ ‘ ์—…๋ฐ์ดํŠธ) 

 ## ๐ŸŸฆ Issue 6 โ€” Reverse SSH ๊ตฌ์กฐ ์„ค๊ณ„ 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: Reverse SSH 

 ์„ค๋ช… 
 Reverse SSH ๊ธฐ๋Šฅ์„ FastAPI์—์„œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. 

 ํฌํŠธ ๊ด€๋ฆฌ 

 ์„ธ์…˜ ๊ด€๋ฆฌ 

 FastAPI ์ œ์–ด API ์„ค๊ณ„ 

 ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ํ”Œ๋กœ์šฐ ์ •์˜ 

 ## ๐ŸŸฆ Issue 7 โ€” AlmaLinux ์„œ๋ฒ„ 2๋Œ€ ๊ตฌ์„ฑ ๊ณ„ํš 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: ์„œ๋ฒ„ ๋ถ„๋ฆฌ(1GB ร— 2๋Œ€) 

 ์„ค๋ช… 
 ์„œ๋ฒ„๋ฅผ 2๋Œ€๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  1GB ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ์ตœ์ ํ™”ํ•œ๋‹ค. 

 mgmt + worker ์„œ๋ฒ„ 

 lotto + pwa ์„œ๋ฒ„ 

 systemd ์„œ๋น„์Šค ๊ตฌ์„ฑ 

 ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ๊ณ„ํš 

 ## ๐ŸŸฆ Issue 8 โ€” journald / systemd ์ตœ์ ํ™” ๊ณ„ํš 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: AlmaLinux ํ™˜๊ฒฝ ๊ตฌ์„ฑ 

 ์„ค๋ช… 
 AlmaLinux์—์„œ journald ๋ฐ systemd ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 journald ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ 

 ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜ 

 systemd ์„œ๋น„์Šค ํŒŒ์ผ ์„ค๊ณ„ 

 gunicorn/uvicorn ์„œ๋น„์Šค ๊ตฌ์„ฑ 

 ## ๐ŸŸฆ Issue 9 โ€” Django โ†’ FastAPI ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ 
 ํŠธ๋ž˜์ปค: Task 
 ์นดํ…Œ๊ณ ๋ฆฌ: Django โ†’ FastAPI ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ 

 ์„ค๋ช… 
 Django์—์„œ FastAPI๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ „์ฒด ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

 ๊ธฐ๋Šฅ ๋น„๊ต 

 API ๋งคํ•‘ 

 DB ์Šคํ‚ค๋งˆ ๋น„๊ต 

 MQTT ๋กœ์ง ๋ถ„๋ฆฌ 

 reverse SSH ๊ธฐ๋Šฅ ์ด์ „ 

 ๋ฐฐํฌ ํ”Œ๋กœ์šฐ ์ •์˜ 

 ## ๐ŸŸฆ Issue 10 โ€” ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œํ™” 
 ํŠธ๋ž˜์ปค: Documentation 
 ์นดํ…Œ๊ณ ๋ฆฌ: ๋ฌธ์„œํ™” 

 ์„ค๋ช… 
 FastAPI mgmt ์„œ๋ฒ„ + MQTT worker + PostgreSQL + reverse SSH + ์„œ๋ฒ„ ๋ถ„๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฌธ์„œํ™”ํ•œ๋‹ค. 

 ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ 

 ๋ฐ์ดํ„ฐ ํ๋ฆ„ 

 ์„œ๋ฒ„ ๊ตฌ์„ฑ 

 ๋ฐฐํฌ ์ „๋žต 

 ์šด์˜ ๊ฐ€์ด๋“œ

๋’ค๋กœ