๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งฅ๋ฝ์์ Self-Join์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์กฐ์ธํ๋ ํน์ ์ ํ์ SQL ์ฟผ๋ฆฌ ์์ ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ ํ ์ด๋ธ์ ํ ๊ฐ์ ๊ณ์ธต์ , ์ฌ๊ท์ ๋๋ ๋ณต์กํ ๊ด๊ณ์ ๊ด๋ จ๋ ์ฟผ๋ฆฌ์ ์๋ตํ๊ธฐ ์ํด ์คํ๋ฉ๋๋ค. ์ด ์์ ์ ํ ์ด๋ธ์ ํ์ด ํ ์ด๋ธ ์์ฒด ๋ด์ ํ๋ ์ด์์ ํ๊ณผ ๊ด๋ จ๋ ์ ์๋ ๊ด๊ณ ์ถ์ถ์ด ํ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ, ์กฐ์ง ์ฐจํธ ๋๋ ๋ฐ์ดํฐ ํํ์ผ๋ก ์์ ํ ๋ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค.
์์ฒด ์กฐ์ธ์ ๋ ๊ฐ ์ด์์ ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฒฐํฉํ์ฌ ํน์ ํต์ฐฐ๋ ฅ์ ์ป๋ ๋ฐ ์ฃผ๋ก ์ด์ ์ ๋ง์ถ INNER JOIN, OUTER JOIN ๋๋ CROSS JOIN๊ณผ ๊ฐ์ ๋ค๋ฅธ ์กฐ์ธ ์ ํ๊ณผ ๋ฌ๋ฆฌ ์์ฒด ์กฐ์ธ์ ๋จ์ผ ํ ์ด๋ธ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํฉ๋๋ค. ๊ฐ๋ฐ์๋ Self-Join์ ์ฌ์ฉํ์ฌ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์์-ํ์ ์ฐ๊ฒฐ ๋๋ ํ์ ๊ด๊ณ์ ๊ฐ์ ๊ณต์ ๋๋ ์ผ์นํ๋ ์ด ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฐ์ ๋ณธ์ง์ ์ธ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ํต์ฐฐ๋ ฅ ์๋ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์์ฒด ์กฐ์ธ ์์ ์ ์ํํ๊ธฐ ์ํด ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ์กฐ์ธ๋๋ ํ ์ด๋ธ ๋ด์ ์ค๋ณต ์ด ์ด๋ฆ ๊ฐ์ ๋ช ํ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด EmployeeID, FirstName, LastName ๋ฐ ManagerID์ ๊ฐ์ ์ด์ด ํฌํจ๋ Employee ํ ์ด๋ธ์์ ManagerID๋ EmployeeID๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ ํค์ด๋ฉฐ Self-Join ์ฟผ๋ฆฌ๋ ํด๋น ๊ด๋ฆฌ์์ ํจ๊ป ์ง์ ๋ชฉ๋ก์ ๊ฒ์ํ๋๋ก ์ค๊ณ๋ ์ ์์ต๋๋ค. SQL ์ฟผ๋ฆฌ๋ ์ง์์ ๊ฒฝ์ฐ 'e', โโ๊ด๋ฆฌ์์ ๊ฒฝ์ฐ 'm'๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ Employee ํ ์ด๋ธ์ ๋ ๋ฒ ํ์ฉํ๋ ๋์์ ํผ๋์ ํผํ๊ธฐ ์ํด SELECT ์ ์ ์ด ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ง์ ํฉ๋๋ค.
AppMaster ์ no-code ํ๋ซํผ์ ์ฌ์ฉ์๊ฐ ์๋ ์ฝ๋ฉ ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์์ฒด ์กฐ์ธ์ ๋ชจ๋ธ๋ง, ์ค๊ณ ๋ฐ ๋ฐฐํฌํ ์ ์๋ ์ํํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ํ๋ซํผ์ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋น์ฆ๋์ค ํ๋ก์ธ์ค(BP) ๋์์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ(๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง) ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์๊ฐ์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ผ๋จ ๊ตฌ์ฑ๋๋ฉด AppMaster ๊ธฐ๋ณธ Go(golang) ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ , Vue3 ํ๋ฐํธ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ , Android์ฉ Kotlin/ Jetpack Compose ๋๋ iOS์ฉ SwiftUI ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋ฌธํ์ผ๋ก ์์ฑํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ์ ๊ฑฐํ๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ AppMaster ์ ๊ฐ๋ ฅํ ๊ธฐ์ ์คํ์ ์ฌ์ฉ์๊ฐ ์ผ๊ด๋๊ณ ์์ ์ ์ด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ ๋ด์์ Self-Join ์ฟผ๋ฆฌ๋ฅผ ๋ฐฐํฌํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. PostgreSQL ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง๊ณผ ํ๋ซํผ์ ํธํ์ฑ์ ์ฑ๋ฅ์ด๋ ๊ธฐ๋ฅ์ ํฌ์ํ์ง ์๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํตํฉ์ ๋จ์ํํ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๋ค์์ฑ์ ์ ๊ณตํฉ๋๋ค.
AppMaster ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ Self-Joins๋ฅผ ํตํฉํ๋ฉด ์ฌ์ฉ์๋ ๋จ์ผ ํ ์ด๋ธ ๋ด์ ์จ๊ฒจ์ง ์ค์ํ ๋ฐ์ดํฐ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ์ถ์ถํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์กฐ์ง ๊ตฌ์กฐ, ์ง๋ฆฌ์ ์์น ๋๋ ์ ํ ๋ฒ์ฃผ์ ๊ฐ์ ๋ค์ํ ๋ถ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ์ ์๋ ์๋ง์ ๊ฐ๋ฅ์ฑ์ด ์ ๊ณต๋๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต์ข ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝํ์ด ํฅ์๋ฉ๋๋ค. ๋ณต์กํ ๋ฐ์ดํฐ ๊ด๊ณ์ ๊ณ์ธต์ ๊ตฌ์กฐ๊ฐ ๋ง์ ๊ณต๊ธ๋ง ๊ด๋ฆฌ, ์๋ฃ ๋๋ ๊ธ์ต๊ณผ ๊ฐ์ ํน์ ์ฐ์ ์์๋ Self-Join ์์ ์ ์ํํ๋ ๊ธฐ๋ฅ์ด ์์ฌ ๊ฒฐ์ ๋ฐ ๋ถ์์ ์ต์ ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์์ฝํ์๋ฉด, Self-Join์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์กฐ์ธํ์ฌ ๋จ์ผ ํ ์ด๋ธ ๋ด ํ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฐพ๋ ๋ฐ ์ด์ ์ ๋ง์ถ ๊ณ ๊ธ SQL ์ฟผ๋ฆฌ ์์ ์ ๋๋ค. ํ ์ด๋ธ ๋ณ์นญ๊ณผ ์ ์ ํ ์ด ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ Self-Joins๋ ๋ณต์กํ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋๋ฌ๋ด๊ณ ๊ฐ๋ฐ์์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๊ธฐ๋ฅ๊ณผ ์๋ต์ฑ์ ์ํฅ์ ๋ฏธ์น๋ ํ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. AppMaster ์ no-code ํ๋ซํผ์ ์ฌ์ฉํ๋ฉด ์ด๋ณด ๊ฐ๋ฐ์๋ผ๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ Self-Join ์์ ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ฌ์ฉ ์ฌ๋ก์ ์ฐ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ณต์กํ ๋ฐ์ดํฐ ๊ด๊ณ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์์ ์ ์ด๋ฉฐ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์ต๋๋ค. .