๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งฅ๋ฝ์์ ์ปค์๋ ์ฟผ๋ฆฌ ์คํ์์ ๋ฐํ๋ ๊ฒฐ๊ณผ ์งํฉ์ ํ์ ํ์ํ๊ณ ์กฐ์ํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๋๋ค. ์ปค์๋ ํฌ์ธํฐ์ฒ๋ผ ์๋ํ์ฌ ๋ณต์กํ ์ฟผ๋ฆฌ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ ๋ฐ ๊ณ ๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ ๋ ๋ ํฐ ์ ์ด๋ ฅ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ปค์๋ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฒ์ ๋ฐ ๊ด๋ฆฌ๊ฐ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ์ค์ํ ๋๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์ ํ ๋๋ SQL ๋ช ๋ น์ ์คํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ์ปค์๊ฐ ์ํํ๋ ์ญํ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก SELECT ๋ฌธ์ด ์คํ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (DBMS)์ ์ผ์นํ๋ ๋ชจ๋ ํ์ ํ ๋ฒ์ ๋ฐํํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํนํ ๋ง์ ์์ ํ์ ์ฒ๋ฆฌํ ๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ด๊ณ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. ์ปค์๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํ๊ณ ๊ฒฐ๊ณผ ์งํฉ์์ ํ ๋ฒ์ ํ์ ์งํฉ์ด๋ ๋จ์ผ ํ๋ง ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ์ฌ ์์คํ ๋ฆฌ์์ค์ ๋ํ ๋ถ๋ด์ ์ค์์ผ๋ก์จ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ํํฉ๋๋ค.
์ปค์๋ AppMasterno-code ํ๋ซํผ์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ๋ซํผ์ ์๊ฐ์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์์ฑ, ๋น์ฆ๋์ค ํ๋ก์ธ์ค ์ค๊ณ ๋ฐ ์๋ ์์ฑ๋ REST API ํตํฉ์ ํตํด PostgreSQL ํธํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ์จ์ ์ผ๋ก ์๋ํ๋ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ปค์๋ ์ถ๊ฐ ์ ์ด ๋ฐ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
์ฌ์ฉ๋๋ DBMS์ ๋ฐ๋ผ ๋ค์ํ ์ ํ์ ์ปค์๊ฐ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธก ์ปค์์ ์๋ฒ ์ธก ์ปค์๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฒ์ฃผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ์ธก ์ปค์๋ ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฒ์์ ๊ด๋ฆฌํ๊ณ ์ปค์ ์์น๋ฅผ ์ ์งํด์ผ ํ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ ์ด๋ฉ๋๋ค. ๋ฐ๋ฉด์ ์๋ฒ ์ธก ์ปค์๋ ๋ฐ์ดํฐ ๊ฒ์์ ์ฒ๋ฆฌํ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ปค์ ์์น๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ์๋ฒ์ ์ํด ์ ์ด๋๋ฉฐ ์ง์ ๋ ํ๋ง ํด๋ผ์ด์ธํธ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐํ๋ฉ๋๋ค.
AppMaster ๊ฐ ์ง์ํ๋ PostgreSQL ํธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋งฅ๋ฝ์์ ์ฐ๋ฆฌ๋ ์๋ฒ ์ธก ์ปค์์ ์ง์คํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ปค์๋ DECLARE CURSOR ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์์ผ๋ฉฐ FETCH ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์ฟผ๋ฆฌ์์ ํ์ ํ๋์ฉ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. MOVE, UPDATE, DELETE ๋ช ๋ น ๋ฑ์ ์ฌ์ฉํ์ฌ ์ปค์์ ๋์์ ์ ์ดํ๋ โโ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
์ปค์๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ฐ๋ฐ์๋ ๋จผ์ ์ปค์๊ฐ ํ์ ๊ฐ์ ธ์ฌ ๊ฒฐ๊ณผ ์งํฉ์ ์ ์ํ๋ SELECT ๋ฌธ์ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด SQL ๋ฌธ์ ์ปค์์ ๊ณ ์ ์๋ณ์๋ฅผ ํ ๋นํ๋ DECLARE CURSOR ๋ช ๋ น์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. OPEN ๋ช ๋ น์ ์ปค์๋ฅผ ํ์ฑํํ๊ณ ํ ํ์์ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. FETCH ๋ช ๋ น์ ์ํ๋ ์์๋ก ์ปค์์์ ํ์ ๊ฒ์ํ์ฌ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐํํฉ๋๋ค. CLOSE ๋ช ๋ น์ ์ปค์๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์ปค์์ ๊ด๋ จ๋ ๋ฆฌ์์ค๋ฅผ ๋ซ๊ณ ํด์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด "product_id", "์๋" ๋ฐ "sale_price" ์ด์ด ์๋ "sales"๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๊ฐํด ๋ณด์ธ์. sale_price๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด ํ ์ด๋ธ์ ํ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ฒ์ํ๋ ์ปค์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์ SQL ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
sales_cursor CURSOR FOR ์ ์ธ
SELECT ์ ํ_ID, ์๋, ํ ์ธ๊ฐ
ํ๋งค์์
ํ๋งค๊ฐ DESC๋ก ์ฃผ๋ฌธ;
OPEN ํ๋งค_์ปค์;
sales_cursor์์ ๋ค์ ํญ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ;
์ด ์์ FETCH ๋ช ๋ น์ sales_price๊ฐ ๊ฐ์ฅ ๋์ sales ํ ์ด๋ธ์ ๋ค์ ํ์ ๋ฐํํฉ๋๋ค. ๋ชจ๋ ํ์ด ๊ฒ์๋ ๋๊น์ง ์ถ๊ฐ FETCH ๋ช ๋ น์ ์คํํ ์ ์์ผ๋ฉฐ CLOSE ๋ช ๋ น์ sales_cursor๋ฅผ ๋ซ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ค ์ปค์ ์ธ์๋ PostgreSQL์ ๊ฒฐ๊ณผ ์งํฉ์ ์๋ฐฉํฅ ํ์์ ํ์ฉํ๋ ์คํฌ๋กค ๊ฐ๋ฅ ์ปค์, ์ฌ๋ฌ ํธ๋์ญ์ ์์ ์ปค์๋ฅผ ์ด์ด๋๋ ๋ณด์ ๊ฐ๋ฅ ์ปค์์ ๊ฐ์ ๊ณ ๊ธ ์ปค์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ๊ณ ๊ธ ์ปค์ ๊ธฐ๋ฅ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ณต์กํ ๊ฒฐ๊ณผ ์ธํธ๋ก ์์ ํ ๋ ํจ์ฌ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์ปค์๋ ๊ฐ๋ ฅํ๊ธฐ๋ ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ค๋ฒํค๋์ ๋ณต์ก์ฑ์ ์ด๋ํ ์๋ ์๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ปค์๋ฅผ ์ฌ์ฉํ ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๊ณ , ํธ๋์ญ์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ฅผ ์ ์คํ๊ฒ ๊ณํํ์ฌ ์ต์ ์ ์ฑ๋ฅ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์์ฝํ๋ฉด, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์คํธ์ ์ปค์๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ ํ๋ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. AppMaster ์์ ์ฌ์ฉํ๋ PostgreSQL ํธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฉ ์๋ฒ ์ธก ์ปค์์ ์ค์ ์ ๋์ด ํจ์จ์ ์ธ ํ ๊ฒ์ ๋ฐ ์กฐ์์ ์ง์ํ๊ณ ๋ฐ์ดํฐ ํ์์ ์ ์ดํ๊ณ ๋ฆฌ์์ค ์๋น๋ฅผ ์ค์ ๋๋ค. ์ ์ ํ ์ฌ์ฉ ๋ฐ ์ต์ ํ ๋ฐฉ๋ฒ์ ํตํด ์ปค์๋ AppMasterno-code ํ๋ซํผ์์ ๊ฐ๋ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.