๐Ÿ™ƒ์•„์ง 2์ฐจ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€!

 

๐Ÿ“Œ @SpringBootTest์™€ @WebMvcTest์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๋‘˜๋‹ค JUnit5๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค

@SpringBootTest

  • ํ”„๋กœ์ ํŠธ์˜ "์ „์ฒด" ์ปจํ…์ŠคํŠธ๋ฅผ loadํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ „์ฒด์˜ Bean์„ ๋ชจ๋‘ ์ฃผ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. (ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด ์•„๋‹Œ Service, Repository ๊ฐ์ฒด๋„ ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์— ์‚ฌ์šฉ๋œ๋‹ค)
  • ์ฃผ๋กœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์‹ค์ œ ํ™˜๊ฒฝ๊ณผ ๊ฐ€์žฅ ์œ ์‚ฌํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Service ๋ฉ”์„œ๋“œ์˜ ์ŠคํŽ™์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ Mocking ๊ฐ’์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค (๋ณ€๊ฒฝ์ด ์ž์œ ๋กญ๋‹ค)
  • ํ…Œ์ŠคํŠธ ๋‹จ์œ„๊ฐ€ ์ปค์„œ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

@WebMvcTest

  • ํ•„์š”ํ•œ Bean๋งŒ์„ ๋“ฑ๋กํ•ด ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์Šฌ๋ผ์ด์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋น ๋ฅด๋‹ค 
  • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ๋งŒ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  • Web Layer(?)์— ํ•ด๋‹นํ•˜๋Š” Bean๋งŒ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•œ๋‹ค.
  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด Mock์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Mock๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹ค์ œ ๋™์ž‘๊ณผ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • Mocking ๋ฉ”์„œ๋“œ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 
๋”๋ณด๊ธฐ

๐Ÿ“ Mock ๊ฐ์ฒด๋ž€?

 

๐Ÿ“ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์žฅ์ 

 

๐Ÿ“์œ ์ €์˜ ํ–‰๋™๋ฐ˜๊ฒฝ ํ™•์ธ, ์˜ค๋ฅ˜  

 

๐Ÿ“ํ…Œ์ŠคํŠธ ๋‹จ์œ„

 

 

๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์งˆ์˜์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ‘๊ทผํ•ด ์ƒํƒœ๋ฅผ ๋ณ€ํ™” ์‹œํ‚ค๊ธฐ ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค. ์ด๋Š” ์ž‘์—…์˜ ์™„์ „์„ฑ์„ ๋ณด์žฅํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ, ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹์„ ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์ฒ˜๋ฆฌ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ๋กค๋ฐฑํ•˜์—ฌ ์ž‘์—…์˜ ์ผ๋ถ€๋งŒ ์ ์šฉ๋˜๋Š” ํ˜„์ƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค

 
ํŠธ๋žœ์žญ์…˜์˜ 4๊ฐ€์ง€ ํŠน์ง•(์„ฑ์งˆ) : ACID

  • ์›์ž์„ฑ(Atomicity)์€ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๋˜๊ฐ€, ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค
  • ์ผ๊ด€์„ฑ(Consistency)์€ ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • ๊ณ ๋ฆฝ์„ฑ(Isolation)์€ ๋‘˜ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ ์–ด๋–ค ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด๋ผ๋„, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†๋‹ค
  • ์ง€์†์„ฑ(Durability)์€ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋ฌ์„ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค
๋”๋ณด๊ธฐ

๐Ÿ“RollBack

ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ

 

๐Ÿ“Commit

ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚˜, DB์˜ ์ƒํƒœ๊ฐ€ ์ผ๊ด€์„ฑ์ด ์žˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์—ฐ์‚ฐ

 

๐Ÿ“ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ

 

๐Ÿ“ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Isolation Level)

* ์ •์˜ :

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ฒ˜๋ฆฌ๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜๋ผ๋ฆฌ ์–ผ๋งˆ๋‚˜ ๊ณ ๋ฆฝ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ์•„์ง ์™„๋ฃŒ๊ฐ€ ๋˜์ง€ ์•Š์•„ ์ผ๊ด€์„ฑ์ด ํ™•๋ณด๋˜์ง€ ์•Š์€ ๊ฐ’์— ๋Œ€ํ•ด ์กฐํšŒ ๋˜๋Š” ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•˜๋Š” ์ˆ˜์ค€์„ ๋งํ•œ๋‹ค.  

 

* ์ผ๊ด€์„ฑ์ด ์—†๋Š” ๋ฐ ์™œ ํ—ˆ์šฉ์„ ํ•ด์ค˜์•ผ ํ•˜๋‚˜?

ํŠธ๋žœ์žญ์…˜์— ์™„์ „ํ•œ Lock์„ ํ†ตํ•ด ์™„์ „ํ•œ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ๋งŽ์€ ํŠธ๋žœ์žญ์…˜๋“ค์ด ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์— ์‘๋‹ต์ด ๋Šฆ์–ด์ง€๊ณ  ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. 

 

* isolation level์˜ ์ข…๋ฅ˜

- Read Uncommitted (๋ ˆ๋ฒจ 0)  

์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€(Uncommitted ๋˜๋Š” Dirty) ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ.

select ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ์ง€ "์•Š๋Š”" level

 

- Read Committed (๋ ˆ๋ฒจ 1) : default

ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ ‘๊ทผ ๋ถˆ๊ฐ€. Commit๋œ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ

select ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ๋Š” level

 

- Repeatable Read (๋ ˆ๋ฒจ 2)

ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ๊นŒ์ง€ select ๋ฌธ์žฅ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— Shared Lock์ด ๊ฑธ๋ฆฌ๋Š” level

 

- Serializable (๋ ˆ๋ฒจ 3)


๐Ÿ“ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ, ์†์„ฑ?

 

 

 

03. ๊ธฐ์ˆ  ๋ฉด์ ‘ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ํŠธ๋žœ์žญ์…˜ (Transaction)

๊ณต๋ถ€๋ชฉ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ์น˜๋ฉด์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €์ž‘๊ถŒ ๋ฌธ์ œ ์‹œ, ๋น„๊ณต๊ฐœ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ํŠธ๋žœ์žญ์…˜์ด๋ž€? - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„

theheydaze.tistory.com

 

 

๐Ÿ“Œ TCP์™€ UDP์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

TCP๋Š” ์‹ ๋ขฐ์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ์ „์†ก ์‹œ์— ์ด์šฉํ•˜๋ฉฐ 3 way handshake๋ฅผ ํ†ตํ•ด ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์—ฐ๊ฒฐ์ด๋ผ ํ•˜๋Š” ์ด์œ ๋Š” 3 way handshake๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ๋จผ์ € ๋ชฉ์ ์ง€์™€ ์ˆ˜์‹ ์ง€๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ํ•˜์—ฌ ์„ธ์…˜์„ ์ˆ˜๋ฆฝํ•˜์—ฌ ์ „์†ก์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ˆ˜๋ฆฝ๊ณผ์ •์€ 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— SYNํŒจํ‚ท์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” SYN_SENT ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. 
  • ์„œ๋ฒ„๋Š” SYN ์š”์ฒญ์„ ๋ฐ›์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ SYN / ACK ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” SYN_RECEIVED ์ƒํƒœ๋กœ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. 
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์•„ ACK ํŒจํ‚ท์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ESTEBLISHED๊ฐ€ ๋˜์–ด ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ณ  ๊ฐ€๊ฒŒ ๋œ๋‹ค.

UDP๋Š” ์ด๋Ÿฐ ์‹ ๋ขฐ์„ฑ์€ ๋ณด์žฅํ•˜์ง€ ์•Š์ง€๋งŒ TCP์™€ ๊ฐ™์€ ์ ˆ์ฐจ๊ฐ€ ์—†์–ด TCP ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ TCP๋Š” ํ™•์‹คํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉํ•˜๋‚˜ UDP๋Š” ์‹ ๋ขฐ์„ฑ ๋ณด๋‹ค๋Š” ์—ฐ์†์„ฑ์ด ์ค‘์š”ํ•œ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋œ๋‹ค.

 

๋”๋ณด๊ธฐ

๐Ÿ“OSI 7๊ณ„์ธต์—์„œ ์ „์†ก๊ณ„์ธต ์‚ฌ์šฉ

 

๐Ÿ“ํŒจํ‚ท์ด๋ž€

 

๐Ÿ“๊ณตํ†ต์  : ์˜ค๋ฅ˜ ์ฒดํฌ ์ฒดํฌ์ธ

๋‘˜๋‹ค ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ๋ชฉ์ ์ง€ ์„ค์ •


๐Ÿ“3 way handshake

๐Ÿ“4 way handshake

 

 

+ Recent posts