๐ ์ฑ
์ ์ฝ๊ฒ ๋ ๊ณ๊ธฐ
์๋
ํ๋ฐ๊ธฐ๋ถํฐ ์คํ๋ง์ผ๋ก ์๋ฒ ๊ฐ๋ฐ์ ํฌ์
๋์๋ค. ์ดํ๋ก ์ฑ ๊ฐ๋ฐ๊ณผ ์๋ฒ ๊ฐ๋ฐ์ 2:8 ์ ๋๋ก ์
๋ฌด๋ฅผ ์งํํ๊ณ ์๋๊ฒ ๊ฐ๋ค.
์๋๋ก์ด๋ ๊ฐ๋ฐ ์ ๋ก์ปฌ ๋๋น๋ฅผ ์ฌ์ฉํ ๋๋ SQLite๋ฅผ ์ถ์ํํ RoomDB๋ฅผ ์ฌ์ฉํ์๊ณ , ์คํ๋ง ์๋ฒ ๊ฐ๋ฐ์ JPA๋ฅผ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ตญ ์ฑ์ด๋ ์๋ฒ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํ๋ค๋ฉด ๊ฑฐ์ ํ์์ ์ผ๋ก ORM์ ์ฌ์ฉํ๊ฒ ๋๋ค. ORM ์ฌ์ฉ ์ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ DBMS์ ์ธํฐ๋ ์
์ ๋ธ๋๋ฐ์ค์ด๋ค.
๊ฒฐ๊ตญ ORM์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฌ์ฉํ๋ DBMS๊ฐ ์ด๋ป๊ฒ ๋์ํ๊ณ , ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฟผ๋ฆฌ๋, ์ฑ๋ฅ์ ํฅ์์ํฌ์ ์๋์ง ์๋๊ฒ์ด ํ์๋ผ๊ณ ์๊ฐํ๋ค.
ํ์์๋ RDB๋ก MySQL์ ์ฌ์ฉํ๊ณ ์์๊ณ , ํ ๋ด์์ ๊พธ์คํ๊ฒ ํ๊ณ ์๋ ์คํฐ๋์์๋ ๊ณต๊ฐ๋๊ฐ ํ์ฑ๋์ด ์ด ์ฑ
์ ์คํฐ๋ํ๊ณ ์ฝ๊ฒ ๋์๋ค.
๐ก์๋ก ๋ฐฐ์ด ๋ด์ฉ
4์ฅ ์ํคํ
์ฒ
- MySQL์ ์์ง ์ํคํ
์ฒ์ InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ
์ฒ์ ๋ํด์ ์์ ์๋ค. InnoDB๋ MySQL์์ ๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์คํ ๋ฆฌ์ง ์์ง์ด๋ค.
- InnoDB๋ ํ
์ด๋ธ ๊ธฐ๋ฐ์ด ์๋ ๋ ์ฝ๋ ๊ธฐ๋ฐ ์ ๊ธ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋์ ๋์์ฑ ์ฒ๋ฆฌ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ค
- ์ฐ๊ธฐ ์์
์ ์ง์ฐํ๊ณ , ๋์คํฌ ์์
ํ์๋ฅผ ์ค์ด๊ธฐ ์ํ InnoDB์ ํต์ฌ์ ์ธ ๋ฒํผ ํ, ํธ๋์ญ์
์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฆฌ๋๋ก๊ทธ, ํธ๋์ญ์
์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ๋กค๋ฐฑ ์ฐ์ฐ์ ์ง์ํ๊ธฐ ์ํ ์ธ๋๋ก๊ทธ ๋ฑ InnoDB๊ฐ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ณ , ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ด๋ค ์ค๊ณ๋ฅผ ํ๊ณ , ์ด๋ค ๋ฉ์ปค๋์ฆ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋์ง ์์ ์์๋ค.
- InnoDB์ ๋ชจ๋ ํ
์ด๋ธ์ Primary Key ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ง ๋๋ค. PK์ ์์๋๋ก ๋์คํฌ์ ์ ์ ๋๋ฉฐ, ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๋ ์ฝ๋์ ์ฃผ์๊ฐ ์๋ PK ๊ฐ์ ๋
ผ๋ฆฌ์ ์ธ ์ฃผ์๋ก ์ฌ์ฉํ๋ค (๊ฒฐ๊ตญ ์ธ์ปจ๋๋ฆฌ(๋ณด์กฐ) ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ํตํด PK๋ฅผ ํ์ธํ๊ณ , PK ํตํด ์ต์ข
๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค)
5์ฅ ํธ๋์ญ์
๊ณผ ์ ๊ธ
- MySQL ์์ง ์ ๊ธ๊ณผ, InnoDB ๋ ๋ฒจ์ ์ ๊ธ์ ๋ํด์ ์์๋ณด์๋ค. InnoDB์ ์ ๊ธ์ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๋๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทธ๋ ๋ฐฉ์์ด๋ค. ์ฆ ๋ณ๊ฒฝํ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ์ธ๋ฑ์ค์ ๋ ์ฝ๋๊ฐ ๋ชจ๋ ์ ๊ธฐ๊ฒ ๋๋ค(ํ ์ค์บ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ธ๋ฑ์ค์ ๋ฝ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค) ์ด๋ฅผ ํตํด ์คํฐ๋์๋ค๊ณผ ๋ฐ๋๋ฝ์ด ๋ฐ์๋๋ ๊ฒฝ์ฐ์ ๋ํด ์์ ๋ฅผ ์ฐพ๊ณ , ์ค์ตํด๋ณด์๋ค.
- ํธ๋์ญ์
์ด ๋์์ ์ํ๋ ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒฉ๋ฆฌ ์์ค์ ๋ํด ์ดํด๋ณด์๋ค. (READ UNCOMMITTED, READ COMMIETED, REPEATABLE READ, SERIALIZABLE)
8์ฅ ์ธ๋ฑ์ค
- B-Tree ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋, ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ, ์ธ๋ฑ์ค ํ ์ค์บ, ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ์ ํน์ฑ์ ๋ํด์ ์์ ์์๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ์ถฉ์กฑํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ๊ณ ์๋ค๋ฉด ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ผ๊ณ ํ๋ค. ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ์ฒ๋ฆฌ๋๋ ์ฟผ๋ฆฌ๋ ๋์คํฌ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ง ์์๋ ๋์ด์ ๋์คํฌ IO๋ฅผ ์ค์ด๊ณ ์ฟผ๋ฆฌ ํฅ์ ์ํฌ์ ์์
- ๋ท๋ถ๋ถ์ ํตํ ๊ฒ์์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค (ex) %Keyword), ๋ํ NOT IN, NOT NULL๊ณผ ๊ฐ์ ์กฐ๊ฑด์์๋ ์ฌ์ฉํ ์ ์๋ค.
- ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ ์ฝ๋ 1๊ฑด์ ์ฝ๋๊ฒ์ด ์ง์ ๋ ์ฝ๋ 1๊ฑด์ ์ฝ๋ ๊ฒ๋ณด๋ค ๋น์ฉ์ด ๋ ๋ง์ด๋ ๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ฅผ ์ตํฐ๋ง์ด์ ๋ก ์์ธก ํ์ ๋, ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ ๋ ์ฝ๋ ๊ฑด์๊ฐ ๋ง๋ค๋ฉด ๊ทธ๋ฅ ํ
์ด๋ธ์ ์ง์ ๋ชจ๋ ์ฝ๋๋ค.
- ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์์๊ฐ ์ค์ํ๋ค. ์ ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ปฌ๋ผ์ ์์ชฝ์ ์ค์ ํ๊ณ , ๋ฒ์ ๊ฒ์๊ณผ ๊ฐ์ด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ปฌ๋ผ์ ๋ค์ ์ค์ ํ๋๊ฒ์ด ์ข๋ค.
- ์ ๋ํฌ ์ธ๋ฑ์ค์ธ ๊ฒฝ์ฐ ์ฐ๊ธฐ ์์
์ ํ ๋ ์ค๋ณต๋ ๊ฐ์ด ์๋์ง ์ฒดํฌํด์ผ ๋๊ธฐ ๋๋ฌธ์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ณด๋ค ์ฐ๊ธฐ๊ฐ ๋๋ฆฌ๋ค. ์ค๋ณต๋ ๊ฐ์ ์ฒดํฌํด์ผ ๋๋ค๋ ๋ป์ ์ฝ๊ธฐ ์ ๊ธ์ ์ฌ์ฉํด์ผ ๋๋ค๋ ๋ป์ด๊ณ , ๋ฐ๋๋ฝ์ด ๋น๋ฒํ ๋ฐ์ํ ์ ์์
9์ฅ ์ตํฐ๋ง์ด์ ์ ํํธ
- ์ตํฐ๋ง์ด์ ๋ฅผ ํตํด ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์ํํ ๋ ์ต์ ์ ๋น์ฉ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋๋ก ๋์์ค๋ค. ๊ฐ ์ฟผ๋ฆฌ๋ง๋ค ์ตํฐ๋ง์ด์ ๊ฐ ์ด๋ป๊ฒ ์คํ ๊ณํ์ ์๋ฆฝํ๋์ง ์์ธํ๊ฒ ์์ ์์๋ค.
- ํ
์ด๋ธ์ ์กฐ์ธํ ๋ ๋๋ผ์ด๋น ํ
์ด๋ธ์ ์ด๋ป๊ฒ ๋ฐฐ์นํ๋๋์ ๋ฐ๋ผ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ์ ์๋ค.
- ์๋ธ์ฟผ๋ฆฌ๋ณด๋ค๋ ์ต๋ํ JOIN์ ํ์ฉํ์.
10์ฅ ์คํ ๊ณํ
- ์ตํฐ๋ง์ด์ ๊ฐ ํญ์ ์ต์ ์ ์คํ๊ณํ์ ๋ง๋๋๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ธํด์ผ ๋ ๋๊ฐ ์๋ค. ์ด๋ EXPLAIN ๋ช
๋ น์ ํตํด ์ตํฐ๋ง์ด์ ๊ฐ ์๋ฆฝํ ์คํ ๊ณํ์ ํ์ธํ ์ ์๋ค.
- EXPALIN์ ํตํด ์คํ ๊ณํ์ด ์ถ๋ ฅ๋์์๋, ๊ฐ ์ปฌ๋ผ์ ๋ํ ๋ป๊ณผ, ๊ฒฐ๊ณผ์ ๋ํด ์ด๋ป๊ฒ ํด์ํด์ผํ ์ง ์์ ์์๋ค. ์ด๋ฅผ ํตํด ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํ ํด์ผ ํ๋์ง ์์ ์์๋ค. ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ์ฟผ๋ฆฌ๋ฅผ ์ฌ์์ฑ ํ๋ ๋ฑ์ ํตํด ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํฌ์ ์๋ค.
๐ ์๊ฐ ๋ฐ ์ก์
์์ดํ
- MYSQL ๋ฒ์ 5.x์ ๋น๊ต๋ฅผ ํตํด ์์ธํ ์ค๋ช
์ ํด์ฃผ๊ณ , ์ดํดํ๋๋ฐ ํ์ํ ๊ทธ๋ฆผ๋ค์ด ์ ์ ํ๊ฒ ๋ฐฐ์น๋์ด ํ์ธต ๋ ๊น์ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ค๋ฌด์์ MySQL ์ฌ์ฉ์ ๊ถ๊ธํ์ ์ด ์๊ฑฐ๋, ์๋ก์ฌํญ์ด ์์๋ ๋ฐ์ด๋ธ์ฒ๋ผ ์์ ๋๊ณ ๋ณผ๋งํ ์ฑ
์ธ๊ฒ ๊ฐ๋ค.
- ์ฑ
์ด ์๋ ๋ฐฉ๋ํ๊ณ , ๋ง์ ์์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. DB์ ๋ํ ๊ฐ๋
์ด ๋ถ์กฑํ๋ ์ํ๋ก ์ด ์ฑ
์ ์ฝ์ด์ ๋์ด๋๊ฐ ์๋ ๋ถ๋ถ๋ ๋ถ๋ช
์์๋ค. ์คํฐ๋๊ฐ ์๋์๋ค๋ฉด ์ด ์ฑ
์ ๋ชจ๋ ์ฝ์ง ๋ชปํ์๊ฒ ๊ฐ๋ค.
- 1ํ๋
๋ฐ์ ์ํด์ ์์ง ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง์ง๋ง, ์ํคํ
์ฒ๋ผ๋๊ฐ, ์ ๊ธ, ์ธ๋ฑ์ค, ์ตํฐ๋ง์ด์ , ์คํ ๊ณํ ๋ฑ์ ๋ํด ๊ต์ฅํ ๋ง์ ๋ถ๋ถ์ ๋ฐฐ์ธ์ ์์๋ค. ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ ํ๋ฆ์ ๋ํด์๋ ์์ ์์์ง๋ง, nํ๋
์ ํตํด ์ข๋ ๊น๊ฒ ์ดํดํด์ผ ๋๊ฒ ๋ค.
- ์ฑ
๋ง ์ฝ๊ณ ์ ์ฉํด๋ณด์ง ์์ผ๋ฉด, ๊ธ๋ฐฉ ํ๋ฐ๋๋ ์ง์์ผ๊ฒ ๊ฐ๋ค. ์ค์ ๊ฐ๋ฐ์ค์ธ ์๋น์ค๊ฐ ๋ฐฐํฌ๋๊ธฐ ์ ์ ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋ํด EXPLAIN ๋ช
๋ น์ ํตํด ์คํ ๊ณํ์ ๋ณด๊ณ ๋ถ์ํด๋ณด๋ ค๊ณ ํ๋ค. ์ด ๊ณผ์ ์ด ์ฑ
์ ๋ด์ฉ์ ๋ํด ๋ณต์ตํ๋ ๊ณผ์ ์ด ๋ ๊ฒ์ด๊ณ , ์ข๋ ๊น์ ์ดํด๋ฅผ ํ๋ ๊ณผ์ ์ด ๋ ๊ฒ ๊ฐ๋ค.