๐ @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