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)

diagram

# 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 ๋ฌธ์„œ์—์„œ ์ •์˜๋˜์—ˆ๋‹ค.

url


# 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์˜ ๊ตฌ์กฐ btree
Last update: September 13, 2022 21:44
Contributors: ahnjs