7์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ด
1. ํ๋ ์ด์ด์ ์ ๋ณด ์ ์ฅ
์ฑ๊ธ ํ๋ ์ด ๊ฒ์์ ๋ง๋ค ๋๋ ๋ณดํต ํ๋ ์ด์ด์ ๋ก์ปฌ ์ปดํจํฐ ์์ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ ๋ฉํฐ ํ๋ ์ด ๊ฒ์์ ๋ง๋ค ๋๋ ์ฑ๊ธ ํ๋ ์ด์ ๊ฐ์ด ๋ก์ปฌ ์ปดํจํฐ ์์ ์ ์ฅํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ํ๋ ์ด์ด๊ฐ ์ปดํจํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ์์ ์ด ํ๋ ํ๋ ์ด ์ ๋ณด๋ฅผ ์ด์ด์ ํ ์๊ฐ ์๋ค.
- ํ๋ ์ด์ด๊ฐ ํดํน์ ํ ์ค ์๋ค๋ฉด, ํ๋ ์ด ์ ๋ณด๋ฅผ ์กฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์จ๋ผ์ธ ๊ฒ์์์๋ ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์๋ ์๋ฒ์๋ง ์ ์ฅํ๋ค. ํด๋ผ์ด์ธํธ๋ ๋ก๊ทธ์ธ ํ ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ์๋ฒ์์ ๋ฐ์ ์ฌ์ฉํ๋ค.
ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ ํ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ค.
- ์์ฉ์ผ๋ก ์๋น์ค๋๋ ๊ฒ์๋ค์ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํด ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ํ๋ ์ด์ด ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ค๋ ์๋๋ ํ์ผ์ด ๋น ๋ฅด๋ค. ๊ทธ๋ฌ๋ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ชจ๋ ์์ ๋ค.
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฅ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง, ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒ์ Microsoft SQL Server๋ Oracle MySQL์ด๋ค. ๋ ์ค SQL Server Express๋ฅผ ์ฌ์ฉํด ๋ณผ ๊ฒ์ด๋ฉฐ SQL Server Management Studio๋ ํจ๊ป ์ค์นํ๋ฉด ๋์ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ๊ตฌ์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๋ ํ(table) ํํ์ ์งํฉ์ด๋ค. ์ฌ๊ธฐ์ ํ ์ด๋ธ ์งํฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค(instance)๋ผ๊ณ ํ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ค๋ฃจ๋ ๊ฐ์ฅ ํฐ ๋จ์์ ๋ฐ์ดํฐ ์งํฉ์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ์์๋ ํ ์ด๋ธ์ด 1๊ฐ ์ด์ ๋ค์ด๊ฐ๋ค.
- ํ ์ด๋ธ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ณผ ์ด์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ์ ์๋๋ฐ, ์ด ํ์ ๋ ์ฝ๋(record)๋ผ ํ๋ค. ๋ ๋ ์ฝ๋ ์์๋ ํ์ ์ด์ด ์๋๋ฐ, ์ด ์ด์ ํ๋(field)๋ผ ํ๋ค. ํ๋๋ ์ด๋ฆ ๋ง๊ณ ๋ ํ์ (์ ์, ์์, ๋ฌธ์์ด ๋ฑ)์ ์ถ๊ฐ๋ก ๊ฐ๊ณ ์๋ค.
์๋ ์ฌ์ฉ ์๋ฅผ ๋ณด์.
GameDB๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๊ฐ ์๊ณ ๊ทธ ์์๋ UserAccount๋ผ๋ ํ ์ด๋ธ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ ์ด๋ธ ์์๋ john, prada์ ๋ํ ๋ ์ฝ๋๊ฐ ์์ผ๋ฉฐ ์ด๋ฉ์ผ, ํจ์ค์๋, ์๋ ์์ผ์ด๋ผ๋ ํ๋๊ฐ ์๋ค. ์ฆ, ์ด ํ ์ด๋ธ์ ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ฉ๋์ด๋ค
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ํ ์ด๋ธ์ ๋ง๋ค์ด๋ณด์.
๋จผ์ SQL Server Management Studio๋ฅผ ์ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํญ๋ชฉ์์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ์ ์ธ์คํด์ค ์๋์์ ์ ํ ์ด๋ธ์ ๋ง๋ ๋ค. ์ด๋ ์ ํ ์ด๋ธ์ ๋ง๋ค ๋๋ ํ๋๋ฅผ ํ์์ ์ผ๋ก ๊ธฐ์ ํด์ผ ํ๋ค.
ํ ์ด๋ธ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ ํ ์ด๋ธ ๋์์ธ์ ์ ํํ๋ฉด, ํ๋๋ฅผ ์์ ํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ํด์ง๋ฉด ์ด๋ ๊ฒ ๋๊ตฌ๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋ SQL ์ง์ ๊ตฌ๋ฌธ์ ์ ๋ ฅํด ๋น ๋ฅด๊ฒ ํ ์ด๋ธ์ ์์ฑํ๊ฑฐ๋ ๊ฒ์ ๋ฑ ์ํ๋ ๊ฒ์ ์ด๋ฃฐ ์ ์๋ค.
5. SQL ์ง์ ๊ตฌ๋ฌธ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์ค ํ๋ฉด์ ์ฃผ๋ก ํ๋ ๊ฒ์ CRUD(create, read, update, delete)์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ก์ธ์ค ํ ๋ ํ์์ ์ผ๋ก ์์์ผ ํ ๋ฌธ๋ฒ์ ์ง์(SQL query)์ด๋ค.
- ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ ๋๋ insert๋ฅผ ์ฌ์ฉํ๋ค. ex) insert into table1 (a, b, c) values (1, 2, 3)
- ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๋๋ select๋ฅผ ์ฌ์ฉํ๋ค. ex) select a, b, c from table1 where a=1
- ๋ ์ฝ๋ ํ๋ ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ update๋ฅผ ์ฌ์ฉํ๋ค. ex) update table1 set b=2 where a=1
- ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๋๋ delete๋ฅผ ์ฌ์ฉํ๋ค. ex) delete from table1 where a=1
6. ์ธ๋ฑ์ค์ ํค
๋ง์ฝ ์ด๋ค ๋๊บผ์ด ๋์์์ ์ํ๋ ์ฉ์ด๋ฅผ ์ฐพ์์ผ ํ ๊ฒฝ์ฐ, ๋งจ ๋ค์ ์๋ ์ธ๋ฑ์ค(index, ์ฐพ์๋ณด๊ธฐ)๋ฅผ ๋ณด๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ์ํ๋ ์ฉ์ด๊ฐ ๋์ฌ ๋๊น์ง ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ค ๋ด์ผ ํ์ ๊ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ด๋ฌํ ์ธ๋ฑ์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ธ๋ฑ์ค๋ ํ๋ ๋จ์๋ก ์ค์ ํ๋ฉฐ 2๊ฐ ์ด์ ํจ๊ป ๋ฃ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- ๊ฒ์๋ฟ๋ง ์๋๋ผ ๋ณ๊ฒฝ, ์ญ์ ์์๋ ๋น ๋ฅด๊ฒ ์ฐพ๋๋ฐ ํฐ ๋์์ด ๋๋ค.
- ์ ๋ํฌ ์์ฑ์ ์ถ๊ฐ๋ก ์ง์ ํ๋ฉด ์ค๋ณต๋ ๊ฐ ๋ฐฉ์งํ๋ ์ฉ๋๋ก๋ ์ฌ์ฉํ๋ค.
- ์ธ๋ฑ์ค๊ฐ ๊ฑธ์ณ์๋ ๋ ์ฝ๋์ ๋ณํ๊ฐ ์์ ๋ ์ธ๋ฑ์ค๋ ํจ๊ป ์ ๋ฐ์ดํธํด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ธ๋ฑ์ค ๋ง๊ณ ๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค๊ฐ ์๋ค. ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ ํน์ํ ํ์์ ์ธ๋ฑ์ค์ด๋ค.
- ํ ํ ์ด๋ธ์ ํ๋ ์ค ํ๋๋ง ์ถ๊ฐํ ์ ์๋ค.
- ์ค๋ณต์ ํ๋ฝํ์ง ์๋๋ค. ์ฆ, ํ ํ ์ด๋ธ์ ๊ฐ์ด ๊ฐ์ ์ฝ๋๊ฐ 2๊ฐ ์ด์ ๋ค์ด๊ฐ ์ ์๋ค.
- ํ๋ ๊ฐ์ null์ด ํ๋ฝ๋์ง ์๋๋ค.
7. ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ 1
ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ ๋ค์ํ ํํ์ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค. ์ฆ, ๊ตฌ์กฐ์ฒด์ ๋ชฉ๋ก์ ์งํฉ์ด๋ค.
๊ตฌ์กฐ์ฒดํ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๊ตฌ์กฐ์ฒด์ ๋ชฉ๋ก์ ์งํฉ ํํ๋ก ๋์ด ์๋ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ ์๋์ ๊ฐ์ด ํธ๋ฆฌ ํํ๋ก ํํํ ์ ์๋ค.
์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
- ํ๋ ์ด์ด ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ฌธ์ ํํ๋ก ๋ง๋ค์ด์ ํ ์ด๋ธ์ ๋ฃ๋๋ค.
- ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๋ ํธ๋ฆฌ ๋ ธ๋ ๊ฐ๊ฐ์ ํ ์ด๋ธ์ ๋ฃ๋๋ค.
๋จผ์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ํํ๋ก ๋ง๋ค๋ฉด JSON ๋ฌธ์ ํํ๋ก ๋์ค๋๋ฐ, ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด ํํ๋ก ํํํ๋ฉฐ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ์์ฑ์ ์ฌ๋ฌ ๊ฐ ์ ์ฅํ ์ ์๋ค. ์ฌ๊ธฐ์ ์์ฑ์ด๋ ์ด๋ฆ๊ณผ ๊ฐ์ ์ง์ ๋งํ๋ค.
{"ID": "Hong Gil Dong", "email": "gildong@foofoomail.com", "password"
"xxiuhwdqwddwdwafd", "Characters": [{"ID": "Little Elf", "Gender": "Female", "Level":
35, "Items": [{"Type": 123, "Amount": 1}]}, {"ID": "Big Orc", "Gender": "Male",
"Level": 23, "Items": []}]}
์ด๋ ๊ฒ ํ๋ ์ด์ด ์ ๋ณด๋ฅผ JSON ํ์ผ ํ๋๋ก ๋ง๋ ํ ํ ์ด๋ธ์ ์ ์ฅํ๋ค. ์ด๋ ํ๋๋ ํ๋ ์ด์ด ID์ JSON ํ์ผ์ ๋ด๊ธฐ๋ง ํ๋ฉด ๋๊ณ JSON ํ์ผ์ ๋ฌธ์์ด ๊ธธ์ด ์ ํ์ด ์๋ text ํ์ ์ ์ฌ์ฉํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ดํดํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค. ๊ทธ๋ฌ๋ ํ๋ ์ด์ด ์ ๋ณด ์ค ์ํ๋ ์กฐ๊ฑด๊ฐ์ ์์ฃผ ์ฐพ์์ผ ํ ๋๋ ์ด ๋ฐฉ์์ ํ๊ณ๊ฐ ์๊ธธ ์ ์๋ค.
8. ํ๋ ์ด์ด ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ 2
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ์์ฑ์ ์ฌ๋ฌ ๊ฐ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋ ธ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋๋ก ์ ์ฅํ๋ ๊ฒ์ด๋ค.
ํ๋ ์ด์ด ๊ฐ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ UserAccount๋ผ๋ ํ ์ด๋ธ์ ์ ์ํ๋ค. ์ด๋ ํ๋ ์ด์ด ID๋ ์๋ก ์ค๋ณต๋์ง ์์์ผ ํ๋ฏ๋ก ์ ๋ํฌ ์์ฑ์ด ๋ค์ด ์๋ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ก ์ค์ ํ๋ค.
์บ๋ฆญํฐ๋ ์๊ธฐ ์์ ์ ์์ ํ๋ ํ๋ ์ด์ด๊ฐ ์์ผ๋ฏ๋ก ์บ๋ฆญํฐ ๊ณ ์ ID ๋ฟ๋ง ์๋๋ผ ์์ ์๊ฐ ๋๊ตฌ์ธ์ง ์ ์ ์๋ ์ ๋ณด๋ ํจ๊ป ์ ์ฅํด์ผ ํ๋ค. ์ด๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ธ๋ ํค์ด๋ค. ์ธ๋ ํค๋ ํ ์ด๋ธ์ ์ด๋ค ํ๋๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ํน์ ํ๋ ๊ฐ์ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, OwnerUserAccountID ํ๋๋ UserAccount ํ ์ด๋ธ์ ID ํ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์ธ๋ ํค์ด๋ค.
- ์ธ๋ ํค๋ก CRUD๋ฅผ ์์ฃผ ํ๋ฏ๋ก ์ธ๋ ํค์ ๋ํด์ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
- ์ฌ๊ธฐ์๋ ์ธ๋ ํค ์ค๋ณต์ ํ๋ฝํด์ผ ํ๋ฏ๋ก ๋ ผ ์ ๋ํฌ ์ธ๋ฑ์ค๋ก ์ค์ ํ๋ค.
์ ๋ฆฌํ์๋ฉด, ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ๋๊ณ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋(์์ ์)๋ ์ธ๋ ํค๊ฐ ๋๋ค.
์ถ๊ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ๋๋ ์ฌ๋ฌ ์ฌ๋์ด ์ฝ๊ฒ ์์ ํ ์ ์๋๋ก E-R Diagram์ด๋ UML ํํ๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
9. ์ง์ ๊ตฌ๋ฌธ ์คํ
ํ ์ด๋ธ์ ์ ์ํ์ผ๋ ์ด์ ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์จ๋ณด์. ์ด ๋์์ SQL ์ง์ ๊ตฌ๋ฌธ์ ํตํด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ ์์ ๊ฐ์ด ๊ฒ์ ์๋ฒ๊ฐ SQL ์ง์ ๊ตฌ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ ธ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ณ , ๋ ์ง์ ๊ตฌ๋ฌธ์ ๋์ง๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๊ณผ์ ์ด ์ง์๋๋ ๊ฒ์ ์ฌ๋ฌ๋ชจ๋ก ๋นํจ์จ์ ์ด๋ค.
- ์ง์ ๊ตฌ๋ฌธ ๋์ง๊ธฐ ํ ๊ฒฐ๊ณผ๋ฐ๊ธฐ ๊ณผ์ ์ด ์ํ๋๋ ๋์ ๋๋ฐ์ด์ค ํ์์ด ๋ฐ์ํ๋ค.
- ๊ฒ์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ๋คํธ์ํฌ ๋ ์ดํด์๋ฅผ ๋ค ๋ชจ์ผ๋ฉด ๊ฝค ๊ธด ์๊ฐ์ด๋ค.
์ด ๋ฌธ์ ๋ ์ ์ฅ ํ๋ก์์ ๊ธฐ๋ฅ์ ํตํด ํด๊ฒฐํ ์ ์๋ค. ์ ์ฅ ํ๋ก์์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธก์ ๋ฏธ๋ฆฌ ์ง์ ๊ตฌ๋ฌธ ์งํฉ์ ์ ์ฅํ๋ ๊ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ์ง์ ์คํ๋๋ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ด๋ผ ํ ์ ์๋ค. ๊ฒ์ ์๋ฒ๋ ๊ทธ์ ์ ์ฅ ํ๋ก์์ ์์ฒด๋ฅผ ์คํํ๋ ์ง์ ๊ตฌ๋ฌธ๋ง ์คํํ๋ฉด ๋๋ค.
๋ค์์ผ๋ก ํธ๋์ญ์ ์ ๋ํด ์์๋ณด์.
ํธ๋์ญ์ ์ ์ด๋ค ๊ตฌ๋ฌธ์ด ๋ชจ๋ ์คํ๋๋ ์ง ํ๋๋ ์คํ๋์ง ์๋ ์ง ๋ ์ค ํ๋์ ๊ฒฐ๊ณผ๋ง ๋ณด์ฅ๋๊ฒ ํ๋ค.
์๋ฅผ ๋ค์ด ๊ณ์ข ์ด์ฒด ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ ๋, ์๋ ์ฝ๋ ์ค ์ผ๋ถ๋ง ์คํ๋๋ค๋ฉด ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. ๊ทธ๋์ ํธ๋์ญ์ ์ ์ด์ฉํด ๋ฐฉ์งํ ์ ์๋ค.
- begin transaction ๊ตฌ๋ฌธ์ ํธ๋์ญ์ ์ ์์์ด๋ผ ํ๋ฉฐ ๊ทธ ๋ค์ ๋์ค๋ ๊ตฌ๋ฌธ์ ์คํํ ํ commit ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ทธ ๊ตฌ๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ๋จ๋๋ค.
- ๋ง์ฝ ๊ตฌ๋ฌธ๋ค์ ์คํํ๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด rollback์ ์คํํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด begin transaction ๊ตฌ๋ฌธ์ ์คํํ ํ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ค์ด ๋ชจ๋ ์์ ๋ณต๊ตฌ๋ ๊ฒ์ด๋ค.
begin transaction
update UserAccount set Money=Money+100 where ID='Kang Bu Ja'
update UserAccount set Money=Money-100 where ID='Hong Gil Dong'
commit
ํธ๋์ญ์ ์ ๊ฑธ๊ณ ์ก์ธ์ค ํ๋ ๋ ์ฝ๋๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฎคํ ์ค๋ฅผ ์ ๊ธํ ๊ฒ๊ณผ ๋น์ทํด์ ์์ ํธ๋์ญ์ ์ด ์๋ฃ๋๊ฑฐ๋ ์ทจ์๋ ๋๊น์ง ๋ธ๋กํน์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ํ ๋๋ ๊ผญ ํ์ํ ์ต์ํ์ ๊ตฌ๊ฐ์๋ง ํ๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ฌ๋ ์ฌ์ค ๊ฒ์ ์๋ฒ๋ฅผ ๋ง๋ค๋ค ๋ณด๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ด ๊ทธ๋ ๊ฒ๊น์ง ํ์ํ์ง๋ ์๋ค. ์๋ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ธ์ด๋ธ ๋ฐ์ดํฐ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ณดํต ๊ฒ์ ์๋ฒ ์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ชจ๋ ํ์ ์ ๋๋ธ ํ ๋ค๋ฆ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๋ค.
10. ๊ฒ์ ์๋ฒ์์ ์ง์ ๊ตฌ๋ฌธ ์คํ
๊ฒ์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์ค ํ๋ ค๋ฉด ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด๊ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๋ค. (TCP ์ปค๋ฅ์ ๊ณผ ์ ์ฌ) ์ด๋ ์ฐ๊ฒฐ ๋ฌธ์์ด์ด๋ ์ฐ๊ฒฐ ์ ๋ณด ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฃ์ด์ผ ํ๋ค. ์ด ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฃผ์, ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ์ด๋ฆ, ์ฐ๊ฒฐ์ ์ฌ์ฉํ ์ฌ์ฉ์ ID์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ค์ด๊ฐ๋ค.
DbConnection db = new DbConnection();
db.Open("server=db01.mygame.com;userid=serverbot;password=good_day_one;database=GameDB");
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์์ผ๋ฉด, ์ฐ๊ฒฐ ๊ฐ์ฒด์์ ๋ช ๋ น ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ง์ ๊ตฌ๋ฌธ์ ์คํํ ์ ์๋ค.
// ๋ฌธ์์ด๋ก ๋ฃ๋ ๊ฒฝ์ฐ
DbCommand cmd = new DbCommand(db);
cmd.Execute("insert into table1 (a,b,c) values (123,456,789)");
// ๊ฐ์ ๋ณ๋๋ก ์
๋ ฅํ์ฌ ๋ฃ๋ ๊ฒฝ์ฐ (์ ํธ)
DbCommand cmd = new DbCommand(db);
cmd.Parameters[0] = 123;
cmd.Parameters[1] = 456;
cmd.Parameters[2] = 789;
cmd.Execute("insert into table1 (a,b,c) values (?,?,?)");
// ์ ์ฅ ํ๋ก์์ ๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ
bCommand cmd = new DbCommand(db);
cmd.Parameters[0] = 123;
cmd.Parameters[1] = 456;
cmd.Parameters[2] = 789;
cmd.Execute("InsertRecord");
// ๊ฒฐ๊ณผ ๋ ์ฝ๋ ๊ฐ์ ๋ฐ์์ฌ ๊ฒฝ์ฐ
bCommand cmd = new DbCommand(db);
cmd.Parameters[0] = 123;
DbRecordset rs = cmd.Execute("select (a,b,c) from table1 where a>=?");
foreach(DbRecord r in rs)
{
int a = r.GetField("a");
int b = r.GetField("b");
string c = r.GetField("c");
...; // ์ฌ๊ธฐ์ ์ป์ ํ๋๋ค์ ์ฌ์ฉํ๋ค.
}
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์์ ํ ์ผ์นํ์ง ์์ผ๋ฏ๋ก, ํ๋์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ธ ๋ ํน์ ๋ช ๋ น ๊ฐ์ฒด์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ๊ฑฐ๋ ๊บผ๋ด ์ฌ ๋ ์ถ๊ฐ ์์ ์ ํด์ผ ํ๋ค.
// ํ๋์ ๊ฐ์ ๊บผ๋ผ ๊ฒฝ์ฐ
DbVariable v = r.GetField("a");
if (v.isNull() = = false)
{
int a = v.Convert(int);
}
// ํ๋์ ๊ฐ์ ๋ฃ์ ๊ฒฝ์ฐ
DbVariable v = new DbVariable(DbType.integer, 123);
record.SetField("a", v);