- Database์ DBMS ์ ์
- Database๋ ์ฌ์ฉ์๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๊ตฌ์กฐ์ ์ผ๋ก ํตํฉํด ๋์ ๊ฒ์ ๋๋ค.
- DBMS๋ Database Management System์ ์ฝ์๋ก ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ํํธ์จ์ด์ ๋๋ค. ์ฆ DB๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์์คํ ์ ๋๋ค. (๋ํ์ ์ผ๋ก ๊ตฌ์ฑ, ์กฐ์, ์ ์ด ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋๋ค.)
- SQL(Structured Query Language)
- ๊ตฌ์กฐ์ ์ง์ ์ธ์ด๋ก ํด๋น ์ง์ ์ธ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ดํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค.
- SQL ์ข
๋ฅ
- DDL(Data Definition Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ ์, ์์ , ์ญ์ ํ๋ ์ธ์ด์ด๋ฉฐ create, alter, drop ๋ฑ์ด ์๋ค.
- DML(Data Manipulation Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์๋ฃ ๊ฒ์, ์ฝ์ , ๊ฐฑ์ , ์ญ์ ๋ฅผ ์ํ ์ธ์ด๋ก select, delete, update, insert๊ฐ ์๋ค.
- DCL(Data Control Language)
- ๋ฐ์ดํฐ์ ๋ํด ๋ฌด๊ฒฐ์ฑ์ ์ ์ง, ๋ณํ ์ํ ์ ์ด, ๋ณดํธ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์ธ์ด๋ก commit, rollback, grant, revoke๊ฐ ์๋ค.
- DDL(Data Definition Language)
- ๋ฐ์ดํฐ๋ ์คํค๋ง(Schema)๋ก ์ ์๋ 2์ฐจ์ ํ ์ด๋ธ์ ์ ์ฅ
- ๊ฐ ์ด์ ํ๋์ ์์ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ
- ๊ฐ ํ์ ๊ฐ ์ด์ ๋ฐ์ดํฐ ํ์์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ
- ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์กฐํํ๋ ๊ฒ์ด ์ค์
- ์ด๋ฌํ ๊ด๊ณ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ธ๋ ํค(Foreign Key) ๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค.
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
- ํ ์ด๋ธ๊ณผ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๊ฐ ๋ณต์กํด์ง์๋ก(๋ง์์ง์๋ก) ์กฐ์ธ ์ฐ์ฐ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฅ ์, scale-up์ ์ฃผ๋ก ์ด์ฉํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ scale-out ํ ๋ NoSQL์ ๋นํด์ ๋ฒ๊ฑฐ๋กญ๋ค.
- ์ด์
-
id: 1 title: 'My post' content: 'The content' comments: { comment: { id: 1 } comment: { id: 2 } ... views: { view: { user: 1 } view: { user: 2 } ... } - ์์ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๊ณ , DB๋ฅผ ์ํ์ ํ์ฅ(sharding) ํ๋ฉด, RDBMS์์๋
- ๋ฐ์ดํฐ๊ฐ ์กฐ์ธ์ ํตํด ๊ด๊ณ((post์ comment)๊ฐ ํ์ฑ๋๋ค.
- comment id 1์ one DB server์
- ๋ค๋ฅธ comment id 2 ๋ another DB server์ ์ ์ฅ๋ ์ ์๋ค.
- ๋ฐ๋ฉด, NoSQL์์๋
- ์์ ๊ฐ์ฒด๋ ์ผ์ข ์ ๋ ๋ฆฝํ ๊ฐ์ฒด๋ก ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ ์กฐ์ธ์ด ํ์ ์๋ค.
- ๋ฐ๋ผ์, ๋จ์ผ ์๋ฒ์ ๊ทธ๋๋ก ์์ฃผํ ์ ์๋ค.
- ๋ฐ๋ผ์, NoSQL์ ๋นํด sharding ์ ๋ฒ๊ฑฐ๋กญ๋ค๋ ๋จ์ ์ด ์๋ค.
-
- ์ด์
- ๋ถ์ฐํ ๊ตฌ์กฐ
- ๋ถ์ฐํ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ถ์ฐํด ์ ์ฅํ๊ณ , ๋ถ์ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ์ํธ ๋ณต์ ํด ํน์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋๋ ๋ฐ์ดํฐ ์ ์ค์ด๋ ์๋น์ค ์ค์ง๊ฐ ์๋ ํํ์ ๊ตฌ์กฐ
- ๋น ๊ด๊ณํ ๋ชจ๋ธ์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์
- Key-value ๋ฐฉ์(Riak, Redis, Voldmort)
- ํค๋ฅผ ๊ณ ์ ํ ์๋ณ์๋ก ์ฌ์ฉํ๋ ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํํฐ์ ๋2)์ด ๊ฐ๋ฅํ๊ณ , ์ํ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
- Document ๋ฐฉ์(MongoDB, CouchDB)
- XML์ด๋ JSON, YAML ๊ฐ์ ๋ฐ์ดํฐ ํ์ (document)์ ์ด์ฉํด์ ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๋ค.
- Big Table ๋ฐฉ์(Hbase, Casandra)
- key-value์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์ ๋์ผ
- ๋ณดํต์ NoSQL์ order by ๊ฐ์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ง๋ง, ์ด ๋ชจ๋ธ์ ๋ด๋ถ์ ์ผ๋ก key๋ฅผ ์ ๋ ฌ
- ๋ ์ง๋ ์ ์ฐฉ์์ผ๋ก ๋ณด์ฌ์ค ๋ ์ ์ฉ
- Graph ๋ฐฉ์(Sones, Allegro Graph)
- ๋ฐ์ดํฐ๋ฅผ ๋ ธ๋๋ก ํํํ๊ณ , ๋ ธ๋ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํ์ดํ๋ก ํํํ๋ค.
- Key-value ๋ฐฉ์(Riak, Redis, Voldmort)
- ๋ถ์ฐ์ฒ๋ฆฌ์ ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- Big Data ์ฒ๋ฆฌ์ ํจ๊ณผ์
- JOIN์ ๋ํ ๋ก์ง์ด ํ์ ์์ด์ ์ฟผ๋ฆฌ ๋ก์ง์ ๋ณต์ก๋๊ฐ ๋ฎ๋ค.
- Auto Sharding1)์ ์ง์
- ๋ณต์กํ ์กฐ์ธ ์ฌ์ฉ์ด ์ด๋ ค์
- ๊ธฐ๋ณธ์ ์ผ๋ก ์กฐ์ธ์ ์ ๊ณตํ์ง ์์
- ์กฐ์ธํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๋ก์ง์ ๊ตฌํํ๋ ค๋ฉด, Application์์ ๊ฐ ํ ์ด๋ธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํฉ์ณ์ผ ํจ.
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ํญ์ ๋ณด์ฅ๋์ง ์์ (์ค๋ณต ๋ฐ์ดํฐ ์กด์ฌ ๊ฐ๋ฅ)
- ๋ฐ๋ผ์, ์ค๋ณต์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ด ์ ๋ฐ์ดํธํด ์ฃผ๋ ๋ฐ ์๊ฐ์ ์๋ชจ
- ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์
- ์ฑ์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๊ด๋ จ๋ ๋ฐ์ดํฐ(ex. join)๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ (NoSQL์ด๋ผ๋ฉด ํญ์ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ์์ ํด์ผ ํจ)
- ๋ช ํํ ์คํค๋ง๊ฐ ์ค์ํ๋ฉฐ, ๋ฐ์ดํฐ๊ตฌ์กฐ๊ฐ ๊ทน์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์ ๋ ( ๋๋ถ๋ถ ์๋น์ค๋ ์คํค๋ง๊ฐ ์ ๋์ ์ธ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์๋ค. )
- ์ ํํ ๋ฐ์ดํฐ ์๊ตฌ์ฌํญ์ ์ ์ ์์ ๋
- ์ฝ๊ธฐ(read) ์ฒ๋ฆฌ๋ฅผ ์์ฃผ ํ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒฝ์ฐ (์ฆ, ํ ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ์์ญ ๊ฐ์ ๋ฌธ์๋ฅผ ์์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ( ์ฆ, ๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ ๊ฒฝ์ฐ, ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ด ํฐ ๊ฒฝ์ฐ)
- ์ฌ์ฉ์์ ์์ฒญ๋ค์ ์ผ๋ฐ์ ์ผ๋ก read ๊ฐ write๋ณด๋ค ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค.
- Master - slave ๊ตฌ์กฐ
- ํ๋์ ์ปดํจํฐ๋ฅผ Master๋ก ์ค์ ํ๋ค.
- ๋๋จธ์ง ์ปดํจํฐ๋ฅผ Slave๋ก ์ง์ ํ๋ค.
- Slave๋ master๋ฅผ ๋ณต์ ํ๋ค.
- slave๋ ์ฌ๋ฌ ๋๋ก ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ( scale - out )
- Write๋ master์๋ง, read๋ slave์๋ง ์ด๋ฃจ์ด์ง๋๋ก ํ๋ค. ( ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๋ ๊ฒ )
- ๋ง์ฝ, master ๋ง์ผ๋ก๋ ๊ฐ๋นํ์ง ๋ชปํ์ ๋๋ ์ฐ๊ธฐ ์์ ์ ํ๋ ์๋ฒ๋ ๋๋์ด ์ค๋ค.
- master db ๊ฐ ๊ฐ์๊ธฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ๋ฐฑ์
์ฉ๋๋ก slave๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ( Failover )
- Failover
- ์์คํ ์ ์ฅ์ ๊ฐ ๋ฐ์ ์, ๋ฏธ๋ฆฌ ์ค๋นํ๋ ๋ค๋ฅธ ์์คํ ์ผ๋ก ๋์ฒดํด์ ์ด์ํ๋ ๊ฒ
- Failover
- ๋จ์
- ๋ฐ์ดํฐ์ ๋๊ธฐํ๊ฐ ์ ๋๋ก ๋์ง ์์ ์ ์๋ค.
- ์์ฝ ๋ฐ ๊ฒฐ์ ์ฒ๋ผ ์ ํฉ์ฑ์ด ์ค์ํ ์์ฒญ์ด๋ ์ค์๊ฐ์ฑ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ ์ฟผ๋ฆฌ๋ Master ์๋ฒ๋ก, ์ ํฉ์ฑ ์ฐจ์ด๊ฐ ์ด๋ ์ ๋ ํ์ฉํ ์ ์๋ ์บ ํ์ฉํ ์กฐํ์ ๊ฐ์ ์ฟผ๋ฆฌ๋ Slave ์๋ฒ๋ก ๋ถ๊ธฐ์ํจ๋ค.
- ๊ทธ๋ฆฌ๊ณ Slave ์๋ฒ๋ Select์ฒ๋ผ ๋ฐ์ดํฐ ์กฐํ๋ง ํ ์ ์๊ฒ read-only ์์ฑ์ ๋ถ์ฌํ์ฌ Slave ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ค์ ํ๋ค.
- ์๋ชป๋ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด slave ์ค๋ ๋์์๋ ์๋ฌ๊ฐ ๋ฐ์
- ์ฌ๋ ์ด๋ธ ์ํ๋ฅผ ๋ฉ์ถ๋ค.
stop slave; - ์๋ฌ ์ฟผ๋ฆฌ ํ๋ ๊ฑด๋๋ฐ์๊ณ ์๋ ค์ค๋ค.
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; - ๋ค์ ์ฌ๋ ์ด๋ธ ์์
start slave;
- ๋ง์ฝ, ๋ค๋ฅธ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ ๋ณต์ ๊ฐ ์คํ๋์ง ์์ ๊ฒฝ์ฐ
- ์์ผ๋ก ํน์ ์๋ฌ ์ฝ๋(ex. 1062) ๋ฐ์ํ๋ฉด skip ํ๋ผ๋ ๋ช
๋ น์ด ์
๋ ฅ
slave-skip-errors = 1062
- ์์ผ๋ก ํน์ ์๋ฌ ์ฝ๋(ex. 1062) ๋ฐ์ํ๋ฉด skip ํ๋ผ๋ ๋ช
๋ น์ด ์
๋ ฅ
- ์ฌ๋ ์ด๋ธ ์ํ๋ฅผ ๋ฉ์ถ๋ค.
- ๋ฐ์ดํฐ์ ๋๊ธฐํ๊ฐ ์ ๋๋ก ๋์ง ์์ ์ ์๋ค.
- Sharding : ํ๋์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค์์ DB์ ๋ถ์ฐ์ํค๋ ๋ฐฉ๋ฒ. ์ฃผ๋ก ๋ฐ์ดํฐ ์ธํธ๊ฐ ๋จ์ผ DB์ ์ ์ฅํ๊ธฐ์๋ ๋๋ฌด ํด ๋ ์ฌ์ฉํ๋ค.
- ํํฐ์ ๋ : ๋ ผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ element ๋ค์ ๋ค์์ entity๋ก ์ชผ๊ฐ๋ ํ์๋ฅผ ๋ปํ๋ ์ผ๋ฐ์ ์ธ ์ฉ์ด ์ฆ ํฐ table์ด๋ index๋ฅผ, ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด partition์ด๋ผ๋ ์์ ๋จ์๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋๋๋ ๊ฒ์ ์๋ฏธํ๋ค.

