๋ฏธ๋๋ฅผ ๊ตฌํํ๋ ์์ง๋์ด
Profile
- ๋๊ตญ๋ํ๊ต(์์ธ) 4ํ๋
์ฌํ
- ๋ฉํฐ๋ฏธ๋์ด์ํํธ์จ์ด๊ณตํ์ ๊ณต (2021.03 ~ )
- AiCPS ํ๋ถ์ฐ๊ตฌ์ (24. 06 ~ 25. 02)
- ๋๊ตญ๋ํ๊ต ํ ์์คํ
4๊ธฐ ๋ณด์/์น ํธ๋ FE ํธ๋์ฅ
- ํ๊ตญ์ ๋ ฅ๊ณต์ฌ MCS ์ผ๊ฒฝํ ์ธํด (2025.07 ~ 2025.08)
- GDGoC DGU 3๊ธฐ Web/App Core
contact
๐ฉย [email protected]
https://github.com/dongmin0204

๐พย TECH STACK
- Language I used : C++, Java, Python, HTML, Javascript, TypeScript
- Framework: React, Vue, Next.js, ROS2
๐ย Project
๋๊ตญ๋ํ๊ต Farm System ํํ์ด์ง ๊ฐ๋ฐ TF (2025.02 ~ )
FarmSystem - ๋๊ตญ๋ํ๊ต SW/AI ํ์ต ๋์๋ฆฌ
https://github.com/DguFarmSystem/FarmSystem-FE
<aside>
๐ก
๋๊ตญ๋ํ๊ต ๊ฐ๋ฐ ๋์๋ฆฌ Farm System FE
๊ธฐ์ฌ ๋ด์ฉ: ํํ์ด์ง์ ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๋ณด์
๋ฌธ์
- ๋ธ๋ก๊ทธ ๋ชฉ๋ก(
/blog) ๋ ๋๋ง ์ค ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(OG ๋ฉํํ๊ทธ ์ถ์ถ) ๊ณผ์ ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉฐ ๋ฆฌ์คํธ ์ ์ฒด๊ฐ ํ์๋์ง ์๋ ๊ฐํ์ ์ด์ ๋ฐ์
์์ธ
- ์ธ๋ถ ํ์ด์ง์์ CORS/ํ๋ก์ ์ฐจ๋จ ๋๋ HTML ์๋ฌ ํ์ด์ง ๋ฐํ์ผ๋ก ์ธํด OG ํ์ฑ(
HTML => DOMParser) ๋จ๊ณ์์ ์์ธ ๋ฐ์
- ๋งํฌ ํ๋ฆฌ๋ทฐ ๋ฐฐ์น ํธ์ถ(getPreviewBatch) ๋ด๋ถ์์ ๋ฐ์ํ ์์ธ๊ฐ ์ ์ ํ ์ต์ ๋์ง ์์, ๋ ๋๋ง ํ๋ฆ ์์ฒด๊ฐ ์ค๋จ๋จ
๋์
- ์คํจ ๋ฌด์ + ๋ถ๋ถ ์ฑ๊ณต ์ ๋ต
Promise.allSettled ๋๋ try/catch๋ก ๋ฐฐ์น ํธ์ถ ๋ณดํธ
- ์คํจํ URL์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ง ์๋ตํ๊ณ , ๋ฆฌ์คํธ ๋ ๋๋ ์ ์ ์งํ
- ํ์์์/๋ ์ดํธ ์ ํ ์ ์ฉ
- ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 3~6๊ฐ๋ก ์ ํ
- ํธ์ถ ๊ฐ ์ง์ฐ์ ๋์ด ํ๋ก์/๋ด ์ฐจ๋จ ์ํ
- ํ๊ฒฝ ํ๋๊ทธ ๋์
- ์ด์(prod) ํ๊ฒฝ์์๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ง์ฐ ์คํ(์ด๊ธฐ ๋ ๋ ํ)
- ํ์ ์ ํ๋ฆฌ๋ทฐ ๋นํ์ฑํ ๋ชจ๋๋ ์ง์
- ์๋ฒ ์ฌ์ด๋ ํ๋ก์ ๋์
- Vercel/Next.js API Route์์ OG ์คํฌ๋ํ ์ฒ๋ฆฌ
- CORS/์ฐจ๋จ ํํผ ๋ฐ ์๋ต ์คํค๋ง ํต์ผ ํ๋ณด
ํด๊ฒฐ
- ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์คํ๋ถ ๊ฐ๋ ์ถ๊ฐ
- ๋ฐ์ดํฐ ์์ผ๋ฉด ์ฆ์ return
- ๋ฐฐ์น ๋จ์
try/catch๋ก ์์ ์คํ
- UI ๋ณด๊ฐ
- ์ค์ผ๋ ํค/๋ ์ด์์ ์ ๋น โ ๋ก๋ฉ/์๋ฌ ์์๋ ๋ฆฌ์คํธ๊ฐ ํญ์ ์ ์ง๋๋๋ก ๋ฐฉ์ด์ ๋ ๋๋ง
- ์ด๋ฏธ์ง ๋๋ฝ ์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ๋์ฒด ์ฝ์
- ์๋ฒ ์ฌ์ด๋ ํ๋ก์ ๋์
- Vercel ๋ด์์ API Route๋ก OG ์คํฌ๋ํ ์ฒ๋ฆฌ
- vercel ์์ฒด ์์ ์ฑ์ ์ํด ๊ตฌํ์ ํ์์ผ๋, proxy ๋งํฌ ํ์ฉ ์ปค์คํ
ํ
์ผ๋ก ๋กค๋ฐฑ
๊ณ ์ฐฐ
- โ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์คํจ๋ ๋ ๋๋ฅผ ๋ง์ง ์๋๋คโ ์ ์ฑ
ํ๋ฆฝ
- ์คํจ๋ ์กฐ์ฉํ ๋ฌด์ํ๊ณ , UI๋ ํญ์ ๊ทธ๋ ค์ ธ์ผ ์ฌ์ฉ์ ์ฒด๊ฐ ํ์ง ์ ์ง
- ํ๋ก ํธ์ ๋ฐฑ์๋ ์๋ต ์คํค๋ง ์ผ๊ด์ฑ
- ํ๊ฒฝ๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ผ ์คํค๋ง ๋ณด์ฅ์ด ํ์
- ๊ฒ์ดํธ์จ์ด/๊ธ๋ก๋ฒ ๋ํผ ๋์
์ ๋ฐ๋์ ํต์ผ ํ์
- ์ฅ๊ธฐ์ ๊ฐ์ ๋ฐฉํฅ
- ์๋ฒ ์ฌ์ด๋ OG ์์ง์ผ๋ก ์ด๊ด ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ด ๊ฐ์ ๋๊ณ
- CORS ๋ฐ ์ฐจ๋จ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด์ ๊ฐ๋ฅ
๊ธฐ์ ์คํ: React + Typescript + Next.js
</aside>
์คํ์์ค ๊ฐ๋ฐ์ ๋ํ ์ถํ์ CubeAI (2025. 07 ~ )
https://github.com/OSS-Cube-AI/CubeAI-FE

<aside>
๐ก
OSS-CubeAI FE
๊ธฐ์ฌ ๋ด์ฉ: ๋ธ๋ก ์ฝ๋ฉ ๊ธฐ๋ฐ AI ๋ชจ๋ธ ์ธํฐํ์ด์ค ๊ตฌํ ๋ฐ AI ๋ฐฑ์๋ ์๋ฒ์์ ํต์ ๊ณ์ธต ๊ฐ์
๋ฌธ์
- ๋๋๊ทธ ์ค ๋๋กญ(๋ธ๋ก ๋ฐฐ์น) ์ธํฐํ์ด์ค์์ ๋ธ๋ก์ด ์ ํํ ์์น๋ก ๋์ด์ง ์๊ฑฐ๋, ๋ธ๋ก ๊ฐ ์ํธ์์ฉ(collision, ์ฐ๊ฒฐ)์ด ๋ถ์์ ํจ
- AI ๋ฐฑ์๋ ์๋ฒ ํต์ ์, ์์ฒญ/์๋ต ์ง์ฐ ๋๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ UI์ ๋ฐ์๋์ง ์๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ํผ๋๋ฐฑ์ด ์ ์
- ๋ค์ํ ํ๋ฉด(stage/page)์์ ์ํ ๊ด๋ฆฌ(store/hooks) ๋ฐ API ํธ์ถ ๋ฐฉ์์ด ์ค๋ณต๋๊ฑฐ๋ ๋นํจ์จ์ ์
์์ธ
dnd-kit ์ค์ (collisionDetection, sensors ๋ฑ)๊ฐ ๊ธฐ๋ณธ๊ฐ ๋๋ ๋จ์ ๊ตฌํ์ผ๋ก ๋์ด ์์ด ๋ณต์กํ ๋ธ๋ก ๋ฐฐ์น/์ด๋ ์ํฉ์ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํจ
- ์ํ(state) ์
๋ฐ์ดํธ ๋ฐ ๋ ๋๋ง์ด ์ฌ์ฉ์ ์กฐ์(๋๋๊ทธ/๋๋กญ)๊ณผ ๋ฐฑ์๋ ์๋ต ๊ฐ ํ์ด๋ฐ์ด ์ด๊ธ๋ ๋ UI๊ฐ ๋ฉ์ถ๊ฑฐ๋ ๊ฐฑ์ ๋๋ฝ๋จ
- API ์๋ต ๊ตฌ์กฐ๊ฐ ํ๊ฒฝ๋ณ(dev/prod) ๋๋ ์๋ํฌ์ธํธ๋ณ๋ก ์ฝ๊ฐ์ฉ ๋ฌ๋ผ ํ์/์ฒ๋ฆฌ ๋ก์ง์์ ์์ธ ํธ๋ค๋ง ๋ถ์กฑํจ
๋์
- ๋๋๊ทธ ์ค ๋๋กญ ์์ ํ
- ๋น๋๊ธฐ ํต์ ๊ฐ์ ๋ฐ ์ฌ์ฉ์ ํผ๋๋ฐฑ ๊ฐํ
- ์ํ ๊ด๋ฆฌ ํตํฉ ๋ฐ ์ค๋ณต ์ ๊ฑฐ
- ์๋ต ์คํค๋ง ํต์ผ ๋ฐ ํ์ ๋ฐฉ์ด์ฑ ๊ฐํ
ํด๊ฒฐ
dnd-kit ๊ธฐ๋ฐ ๋ธ๋ก ์๋ํฐ ์ปดํฌ๋ํธ ๊ฐ์ : ๋ธ๋ก ๋ฐฐ์น ๋ฐ ์ฐ๊ฒฐ ๋ก์ง ์์ โ ์ฌ์ฉ์ ์กฐ์ ์ ๋ฏธ๋๋ฌ์ง(snap)/์ค์ฒฉ(overlap) ์ค๋ฅ ๊ฐ์
- API ๋ ์ด์ด ์ฌ๊ตฌ์ฑ:
apis/ ํด๋ ๋ด์์ ์์ฒญ/์๋ต ํฌ๋งท ํต์ผ ์ฒ๋ฆฌ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ณตํต util๋ก ํตํฉ
- ๋ก๋ฉ + ํผ๋๋ฐฑ UI ์ถ๊ฐ: ๋ธ๋ก ์กฐ์ ์ค/API ์๋ต ๋๊ธฐ ์ค์ ์ค์ผ๋ ํค ๋๋ ๋ก๋ฉ ์คํผ๋, ์๋ฌ ๋ฉ์์ง ๋ณด์ด๋๋ก ๊ตฌํ
- ์ํ ๊ด๋ฆฌ ๋ณด์: store/hooks ๊ฐ ์ญํ ๋ถ๋ฆฌํ์ฌ ์ค๋ณต ์ ๊ฑฐ โ ๋ธ๋ก ์ํ, ์๋ํฐ ์ํ, ๋ฐ์ดํฐ/๋ชจ๋ธ ๊ตฌ์ฑ ์ํ ๊ฐ ๋ช
ํํ ๊ฒฝ๊ณ ์ค์
</aside>