1206 - 1212
# 1206 - 1212
# 1206 - git revert, reset
# reset
reset์ ํน์ ์ฌ๊ฑด์ผ๋ก ๋๋์๊ฐ๊ฒ ๋๋๋ฐ ๊ณผ๊ฑฐ๋ก ๋๋์ ๊ฐ์ผ๋ ํด๋น ์ฌ๊ฑด ์ดํ์ ์ฌ๊ฑด๋ค์ ๋ชจ๋ ์ฌ๋ผ์ง๋ค. ๊ณผ๊ฑฐ์ ์ด๋ ฅ์ด ์ปค๋ฐ์ ๋จ์ง ์๊ณ , revert๋ ํน์ ์ฌ๊ฑด์ revertํ๋ค๋ ์ด๋ ฅ์ด ์ปค๋ฐ์ ๋จ๊ฒ ๋๋ค.
git reset <์ต์
> <๋์๊ฐ๊ณ ์ถ์ ์ปค๋ฐid>
ex)
git reset --soft abcdef
git reset --mixed abcdef (์ต์
์์ฑ์ํ ์ ๊ธฐ๋ณธ๊ฐ)
git reset --hard abcdef
git reset HEAD~10 (ํ์ฌ๋ถํฐ 10๊ฐ ์ด์ ์ผ๋ก ๋ณต์)
# revert
revert๋ ํน์ ์ฌ๊ฑด์ ๊ณจ๋ผ์ ์๋์ผ๋ก ๋ง๋ ๋ค. ๋ํ ํน์ ์ฌ๊ฑด์ ์ทจ์ํ์ง๋ง revert๋ฅผ ํ๋ค๋ ์ด๋ ฅ์ด ๋จ๊ฒ๋๋ค.
git revert <์ทจ์ํ commit>
# 1207 - @Transactional
์คํ๋ง์์ ์ง์ํ๋ ์ ์ธ์ ํธ๋์ญ์ . java config๋ฅผ ํตํด ์ค์ ํ ์ ์๋ค. Spring boot์์๋ ๋ณ๋์ ์ค์ ์ด ํ์ ์์ผ๋ฉฐ, ํด๋์ค ๋๋ ๋ฉ์๋์ ์ ์ธํ ์ ์๋ค.
# @Transactional ์ต์
- propagation : ํธ๋์ญ์ ๋์ ๋์ค ๋ค๋ฅธ ํธ๋์ญ์ ์ ํธ์ถํ ๋, ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ์ง์ ํ๋ ์ต์ .
- isolation : ํธ๋์ญ์ ์์ ์ผ๊ด์ฑ์๋ ๋ฐ์ดํฐ ํ์ฉ ์์ค์ ์ค์ .
- noRollbackFor=Exception.class : ํน์ ์์ธ ๋ฐ์ ์ rollbackํ์ง ์๋๋ค.
- rollbackFor=Exception.class : ํน์ ์์ธ ๋ฐ์์ rollbackํ๋ค.
- timeout : ์ง์ ํ ์๊ฐ ๋ด์ ๋ฉ์๋ ์ํ์ด ์๋ฃ๋์ง ์์ผ๋ฉด rollbackํ๋ค. (-1์ผ ๊ฒฝ์ฐ timeout์ ์ฌ์ฉํ์ง ์๋๋ค)
- readOnly : ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ํ๋ค.
# 1. propagation
- REQUIRED (Default) : ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ํด๋น ํธ๋์ญ์ ์์ฑ์ ๋ฐ๋ฅด๊ณ , ์งํ์ค์ด ์๋๋ผ๋ฉด ์๋ก์ด ํธ๋์ฌ์ ์ ์์ฑํ๋ค.
- REQUIRES_NEW : ํญ์ ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑํ๋ค. ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์ ๊น ๋ณด๋ฅํ๊ณ ํด๋น ํธ๋์ญ์ ์์ ์ ๋จผ์ ์งํํ๋ค.
- SUPPORT : ์ด๋ฏธ ์งํ ์ค์ธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ํด๋น ํธ๋์ญ์ ์์ฑ์ ๋ฐ๋ฅด๊ณ , ์๋ค๋ฉด ํธ๋์ญ์ ์ ์ค์ ํ์ง ์๋๋ค.
- NOT_SUPPORT : ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์๋ฐ๋ฉด ๋ณด๋ฅํ๊ณ , ํธ๋์ญ์ ์์ด ์์ ์ ์ํํ๋ค.
- MANDATORY : ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์์ด์ผ๋ง, ์์ ์ ์ํํ๋ค. ์๋ค๋ฉด Exception์ ๋ฐ์์ํจ๋ค.
- NEVER : ํธ๋์ญ์ ์ด ์งํ์ค์ด์ง ์์ ๋ ์์ ์ ์ํํ๋ค. ํธ๋์ญ์ ์ด ์๋ค๋ฉด Exception์ ๋ฐ์์ํจ๋ค.
- NESTED : ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์ค์ฒฉ๋ ํธ๋์ญ์ ์ด ์คํ๋๋ฉฐ, ์กด์ฌํ์ง ์์ผ๋ฉด REQUIRED์ ๋์ผํ๊ฒ ์คํ๋๋ค.
# 2. isolation
- Default : ์ฌ์ฉํ๋ DB ๋๋ผ์ด๋ฒ์ ๋ํดํธ ์ค์ ์ ๋ฐ๋ฅธ๋ค. ๋๋ถ๋ถ READ_COMMITED๋ฅผ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์์ค์ผ๋ก ์ค์ ํ๋ค.
- READ_UNCOMMITED : ๊ฐ์ฅ ๋ฎ์ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค. ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๊ธฐ ์ ์ ๊ทธ ๋ณํ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค. ํ์ง๋ง ์๋๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋๋ผ๋, ์ฑ๋ฅ ๊ทน๋ํ๋ฅผ ์ํด ์๋์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
- READ_COMMITED : ํธ๋์ญ์ ์ด ์ปค๋ฐํ์ง ์์ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๋ค. ํ์ง๋ง ํธ๋์ญ์ ์ด ์ฝ์ ๋ก์ฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์์ ํ ์ ์๋ค. ๊ทธ๋์ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ก์ฐ๋ฅผ ์ฝ์์ด๋ ์๊ฐ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ด์ฉ์ด ๋ฐ๊ฒฌ๋ ์ ์๋ค.
- REPEATABLE_READ : ํธ๋์ญ์ ์ด ์ฝ์ ๋ก์ฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์์ ๋๋ ๊ฒ์ ๋ง์์ค๋ค. ํ์ง๋ง ์๋ก์ด ๋ก์ฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ํํ์ง ์๋๋ค.
- SERIALIZABLE : ๊ฐ์ฅ ๊ฐ๋ ฅํ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค์ด๋ค. ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ํ ์ด๋ธ ๋ก์ฐ์ ์ก์ธ์คํ์ง ๋ชปํ๊ฒ ํ๋ค. ๊ฐ์ฅ ์์ ํ์ง๋ง ๊ฐ์ฅ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
# 3. rollbackFor
ํธ๋์ญ์
์์
์ค ๋ฐํ์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋กค๋ฐฑํ๋ค. ๋ฐ๋ฉด์ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๊ฑฐ๋ ์ฒดํฌ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ปค๋ฐํ๋ค.
์ฒดํฌ ์์ธ๋ฅผ ์ปค๋ฐ ๋์์ผ๋ก ์ผ๋ ์ด์ ๋ ์ฒดํฌ ์์ธ๊ฐ ์์ธ์ ์ธ ์ํฉ์์ ์ฌ์ฉ๋๊ธฐ ๋ณด๋ค๋ ๋ฆฌํด ๊ฐ์ ๋์ ํด์ ๋น์ง๋์ค ์ ์ธ ์๋ฏธ๋ฅผ ๋ด์ ๊ฒฐ๊ณผ๋ก ๋๋ ค์ฃผ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์คํ๋ง์์๋ ๋ฐ์ดํฐ ์์ธ์ค ๊ธฐ์ ์ ์์ธ๋ฅผ ๋ฐํ์ ์์ธ๋ก ์ ํ์์ ๋์ง๋ฏ๋ก ๋ฐํ์ ์์ธ๋ง ๋กค๋ฐฑ๋์์ผ๋ก ์ผ๋๋ค.
ํ์ง๋ง ์ํ๋ค๋ฉด ์ฒดํฌ์์ธ์ง๋ง ๋กค๋ฐฑ ๋์์ผ๋ก ์ผ์ ์ ์๋ค. rollbackFor ๋๋ rollbackForClassName ์์ฑ์ ์ด์ฉํด์ ์์ธ๋ฅผ ์ง์ ํ๋ค.
# 4. noRollbackFor
๋ฐํ์ ์์ธ๊ฐ ๋ฐ์ํด๋ ์ง์ ํ ๋ฐํ์ ์์ธ๋ฉด ์ปค๋ฐ์ ์งํํ๋ค.
# 5. timeout
ํธ๋์ญ์ ์ ์ ํ์๊ฐ์ ์ง์ ํ๋ค. ์ด ๋จ์๋ก ์ง์ ํ๊ณ , ํฐํดํธ ์ค์ ์ผ๋ก ํธ๋์ญ์ ์์คํ ์ ์ ํ์๊ฐ์ ๋ฐ๋ฅธ๋ค. -1 ์ ๋ ฅ ์, ํธ๋์ญ์ ์ ํ์๊ฐ์ ์ฌ์ฉํ์ง ์ํ๋ค.
# 6. readOnly
ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ํ๋ค. ํน์ ํธ๋์ญ์ ์์์ ์ฐ๊ธฐ ์์ ์ด ์ผ์ด๋๋ ๊ฒ์ ์๋์ ์ผ๋ก ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. insert, update, delete ์์ ์ด ์งํ๋๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.
# 1208 - ResponseEntity
Spring4 ์ด์๋ถํฐ @Controller์ @ResponseBody๋ฅผ ํฉ์ณ๋์ @RestController๋ฅผ ์ง์ํ๊ธฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ResponseBody๋ก ๋ฆฌํดํ๊ณ ์๋ค.
ResponseEntity๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์ญํ ์ ๋์ผํ๋ ResponseEntity๋ก ๋ฆฌํดํ๋ ๊ฒฝ์ฐ๋ ๋ณธ๋ฌธ์ ๋ณด์ ํค๋ ์ ๋ณด, HTTP ์ํ์ฝ๋๋ฅผ ์ข๋ ์ธ๋ฐํ๊ฒ ๊ฐ๋ฐ์๊ฐ ์ฒ๋ฆฌํ๊ธฐ ์์ํด์ง๋ฉฐ, HATEOAS, builderํจํด ๋ฑ์ ํ์ฉํด์ ๊ฐ๋ฐํ๊ธฐ ์ฉ์ดํ๋ค.
# ResponseBody / ResponseEntity
@GetMapping(value = "/board/{id}") //@ResponseBody
public Board getBoard(@PathVariable int id) {
Board board = boardService.selectBoard(id);
return board;
}
@GetMapping(value = "/board/{id}")
ResponseEntity<Board> getBoard(@PathVariable int id) {
Board board = boardService.selectBoard(id);
return new ResponseEntity<Board>(board, HttpStatus.OK);
//return ResponseEntity.ok().body(board);
}
- HATEOAS (Hypermedia As The Engine Of Application State) HATEOAS๋ ๋ ๋ฆฝ๋ ์์คํ ์์ ํด๋ผ์ด์ธํธ์๋ฒ๊ฐ RESTfulํ๊ฒ ๋์์ธ ๋ API์๋ฒ์ ์ํด ๋์ ์ผ๋ก ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ์๋ฒ๋ header์ POST, GET, PUT, DELETE ๋ฑ URI๋ฅผ ๋์ ์ผ๋ก ์ค์ ํ๊ณ response๋ฅผ ํ๋ค.
๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ์์ ์๋ฒ์์ ๋ฐ์ URI๋ก ์ ์ฉํด์ ํธ์ถํ๋ค๋ฉด, API์๋ฒ์์ URI๊ฐ ๋ณ๊ฒฝ๋์ด๋ ํด๋ผ์ด์ธํธ๋ ํธ์ถURI๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค. ๋ํ ๊ถํ์ ๋ฐ๋ฅธ URI๋ฅผ ์ ์์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๋ ๋ณธ๋ฌธ์๋ต๊ณผ URI์ ๋ณด๋ฅผ ํตํด์ ์์ฒญํ ํ์ ํด๋น ๋ฆฌ์์ค์ ๋ํด ์์ธก๊ฐ๋ฅํ๊ฒ ํ๋ค.
# 1209 - URI & URL
์์์ ์๋ณ์(URI), ์์น(URL), ์ด๋ฆ(URN)
# URI(Uniform Resource Identifier)
URI๋ ์ธํฐ๋ท์ ์๋ ์์์ ๋ํ๋ด๋ ์ ์ผํ ์ฃผ์. URI์ ์กด์ฌ๋ ์ธํฐ๋ท์์ ์๊ตฌ๋๋ ๊ธฐ๋ณธ์กฐ๊ฑด์ผ๋ก์ ์ธํฐ๋ท ํ๋กํ ์ฝ์ ํญ์ ๋ถ์ด๋ค๋๋ค. ํ์ ๊ฐ๋ ์ผ๋ก URL, URN์ด ์๋ค.
# URL(Uniform Resource Locator)
URL์ ๋คํธ์ํฌ์์์ ์์์ด ์ด๋ ์๋์ง๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํ ๊ท์ฝ์ด๋ค. ์ฆ, ์ปดํจํฐ ๋คํธ์ํฌ์ ๊ฒ์ ๋ฉ์ปค๋์ฆ์์์ ์์น๋ฅผ ์ง์ ํ๋, ์น ๋ฆฌ์์ค์ ๋ํ ์ฐธ์กฐ์ด๋ค. ํํ ์น ์ฌ์ดํธ ์ฃผ์๋ก ์๊ณ ์์ง๋ง, URL์ ์น ์ฌ์ดํธ ์ฃผ์๋ฟ๋ง ์๋๋ผ ์ปดํจํฐ ๋คํธ์ํฌ์์ ์์์ ๋ชจ๋ ๋ํ๋ผ ์ ์๋ค. ๊ทธ ์ฃผ์์ ์ ์ํ๋ ค๋ฉด ํด๋น URL์ ๋ง๋ ํ๋กํ ์ฝ์ ์์์ผ ํ๊ณ , ๊ทธ์ ๋์ผํ ํ๋กํ ์ฝ๋ก ์ ์ํด์ผ ํ๋ค.
# URN(Uniform Resource Name)
URN์ urn:scheme์ ์ฌ์ฉํ๋ URI๋ฅผ ์ํ ์ญ์ฌ์ ์ธ ์ด๋ฆ์ด๋ค. URN์ ์์์ ์ด๊ณ , ์์น์ ๋ ๋ฆฝ์ ์ธ ์์์ ์ํ ์ง์์๋ก ์ธ์ฉํ๊ธฐ ์ํด 1997๋ ๋ RFC 2141 ๋ฌธ์์์ ์ ์๋์๋ค.
# 1212 - Database index
# ์ธ๋ฑ์ค๋?
์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์ ๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ง์ด ๋๋ ์์๋ก ์ฑ ์ ์์ธ์ ์ด์ผ๊ธฐ ํ๋ค. ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ํฌํจํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ์ฌ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ๋๊ณ ์๋ค.
์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ SELECT ์ธ์๋ UPDATE๋ DELETE์ ์ฑ๋ฅ์ด ํจ๊ป ํฅ์๋๋ค. ๋์์ ์กฐํํด์ผ UPDATE, DELETE๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ.
๋ง์ฝ index๋ฅผ ์ฌ์ฉํ์ง ์์ ์ปฌ๋ผ์ ์กฐํํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ ์ฒด๋ฅผ ํ์ํ๋ Full Scan์ ์ํํด์ผ ํ๋ค. Full Scan์ ์ ์ฒด๋ฅผ ๋น๊ตํ์ฌ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋จ์ด์ง๋ค.
# ์ธ๋ฑ์ค ๊ด๋ฆฌ
DBMS๋ index๋ฅผ ํญ์ ์ต์ ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํด์ผ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ํ์ํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋ ์ปฌ๋ผ์ INSERT, UPDATE, DELETE๊ฐ ์ํ๋๋ค๋ฉด ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ํด์ฃผ์ด์ผ ํ๋ฉฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- INSERT: ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ.
- DELETE: ์ญ์ ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์์ ์ ์งํํจ.
- UPDATE: ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฒ๋ฆฌํ๊ณ , ๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ๋ํด ์ธ์์ค๋ฅผ ์ถ๊ฐํจ.
# ์ธ๋ฑ์ค์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- ํ ์ด๋ธ์ ์กฐํํ๋ ์๋์ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- ์ ๋ฐ์ ์ธ ์์คํ ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๋จ์
- ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด DB์ ์ฝ 10%์ ํด๋นํ๋ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์๋ชป ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋๋ ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ง์ฝ CREATE, DELETE, UPDATE๊ฐ ๋น๋ฒํ ์์ฑ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ๋น๋ํด์ ธ์ ์ฑ๋ฅ์ด ์คํ๋ ค ์ ํ๋๋ ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ทธ๋ฌํ ์ด์ ์ค ํ๋๋ DELETE์ UPDATE ์ฐ์ฐ ๋๋ฌธ์ด๋ค. UPDATE์ DELETE๋ ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ์ง ์๊ณ '์ฌ์ฉํ์ง ์์' ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค๊ณ ํ๋ค. ๋ง์ฝ ์ด๋ค ํ ์ด๋ธ์ UPDATE์ DELETE๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์๋๋ค๋ฉด ์ค์ ๋ฐ์ดํฐ๋ 10๋ง๊ฑด์ด์ง๋ง ์ธ๋ฑ์ค๋ 100๋ง ๊ฑด์ด ๋์ด๊ฐ๊ฒ ๋์ด, SQL๋ฌธ ์ฒ๋ฆฌ ์ ๋น๋ํด์ง ์ธ๋ฑ์ค์ ์ํด ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
# ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- ๊ท๋ชจ๊ฐ ์์ง ์์ ํ ์ด๋ธ
- INSERT, UPDATE, DELETE๊ฐ ์์ฃผ ๋ฐ์ํ์ง ์๋ ์ปฌ๋ผ
- JOIN์ด๋ WHERE ๋๋ ORDER BY์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ
- ๋ฐ์ดํฐ์ ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ
# ์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ
์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ฌ๋ฌ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ๊ฐ์ฅ ๋ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ํด์ ํ ์ด๋ธ๊ณผ B+Tree๊ฐ ์๋ค.
# ํด์ํ ์ด๋ธ(Hash Table)
ํด์ ํ
์ด๋ธ ๊ธฐ๋ฐ์ DB ์ธ๋ฑ์ค๋ ์ปฌ๋ผ์ ๊ฐ, ๋ฐ์ดํฐ์ ์์น๋ฅผ Key, Value๋ก ์ฌ์ฉํ์ฌ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ์์ฑ๋ ํด์๋ฅผ ํตํด ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๋ค. ํด์ ํ
์ด๋ธ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ฉฐ ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์ ์ง์ํ๋ค.
ํ์ง๋ง DB์ธ๋ฑ์ค์์ ํด์ ํ
์ด๋ธ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์ ํ์ ์ด๋ค. ๊ทธ์ด์ ๋ ํด์๊ฐ ๋ฑํธ(=) ์ฐ์ฐ์๋ง ํนํ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ํด์ ํจ์๋ ๊ฐ์ด 1์ด๋ผ๋ ๋ฌ๋ผ์ง๋ฉด ์์ ํ ๋ค๋ฅธ ํด์ ๊ฐ์ ์์ฑํ๋๋ฐ, ์ด๋ฌํ ํน์ฑ์ ์ํด ๋ถ๋ฑํธ ์ฐ์ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์ ์ํด์๋ ํด์ ํ
์ด๋ธ์ด ์ ํฉํ์ง ์๋ค.
์ฆ, ์๋ฅผ ๋ค๋ฉด "๋๋"์ผ๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฌธ์ ์ธ๋ฑ์ค์ ํํ์ ์ ํ ๋ฐ์ง ๋ชปํ๊ฒ ๋๋ค.
# B+Tree
DB์ ์ธ๋ฑ์ค๋ฅผ ์ํด ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ค. B+Tree๋ ๋ชจ๋ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ BTree์ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฆฌํ๋ ธ๋(๋ฐ์ดํฐ๋ ธ๋)๋ง ์ธ๋ฑ์ค์ ํจ๊ผ ๋ฐ์ดํฐ(๋ฒจ๋ฅ)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ๋ ธ๋(์ธ๋ฑ์ค๋ ธ๋)๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(ํค)๋ง์ ๊ฐ๋๋ค.
- ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ฐ์ดํฐ ๋ ธ๋ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค ๋ ธ๋์ ํฌ๊ธฐ์ ๊ฐ์ง ์์๋ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ถ๋ฑํธ๋ฅผ ์ด์ฉํ ์์ฐจ ๊ฒ์ ์ฐ์ฐ์ด ์์ฃผ ๋ฐ์๋ ์ ์๋ค. ์ด๋ฌํ ์ด์ ๋ก BTree์ ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐํ์ฌ ์์ฐจ๊ฒ์์ ์ฉ์ดํ๊ฒ ํ๋ ๋ฑ BTree๋ฅผ ์ธ๋ฑ์ค์ ๋ง๊ฒ ์ต์ ํํ์๋ค. (๋ฌผ๋ก Best Case์ ๋ํด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ง ์์๋ ํ์ํ ์ ์๋ BTree์ ๋นํด ๋ฌด์กฐ๊ฑด ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ์ผํ๋ค๋ ๋จ์ ๋ ์๋ค.) ์ด๋ฌํ ์ด์ ๋ก ๋น๋ก B+Tree๋ O(๐๐๐2๐)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง ํด์ํ ์ด๋ธ๋ณด๋ค ์ธ๋ฑ์ฑ์ ๋์ฑ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋์๋ค.
- InnoDB์์ ์ฌ์ฉ๋ B+Tree์ ๊ตฌ์กฐ