์ํํธ์จ์ด ํธ๋์ญ์ ๋ ๋ฉ๋ชจ๋ฆฌ(STM)์ ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ฑ์ ๋ํ ํ์ฉ๋ฒ์ ํ๊ตฌํฉ๋๋ค. STM์ ์ด์ , ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํ ์ค์ฉ์ ์ธ ๊ตฌํ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
์ํํธ์จ์ด ํธ๋์ญ์ ๋ ๋ฉ๋ชจ๋ฆฌ: ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ตฌ์ถ
๋น ๋ฅด๊ฒ ์งํํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ํ์์ฑ์ ๋งค์ฐ ์ค์ํด์ก์ต๋๋ค. ๊ตญ๊ฒฝ์ ๋๋๋๋ ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์์ ๋ถ์ฐ ์์คํ ์ ๋ฑ์ฅ์ผ๋ก ๊ณต์ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ๋ณ๋ ฌ ์์ ์กฐ์ ์ ํต์ฌ์ ์ธ ๊ณผ์ ๊ฐ ๋์์ต๋๋ค. ์ํํธ์จ์ด ํธ๋์ญ์ ๋ ๋ฉ๋ชจ๋ฆฌ(STM)๋ ์ด๋ฌํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ํจ๋ฌ๋ค์์ผ๋ก ๋ฑ์ฅํ์ผ๋ฉฐ, ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๋ ๊ฒฌ๊ณ ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์ํํธ์จ์ด ํธ๋์ญ์ ๋ ๋ฉ๋ชจ๋ฆฌ(STM)๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก STM์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช ์์ ์ผ๋ก ๋ฝ์ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ๋์์ฑ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ฐ๋ฐ์๋ ์ผ๋ จ์ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๊ณผ ์ ์ฌํ๊ฒ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์ ์ฑ๊ณตํ์ฌ ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ๋ชจ๋ ์ค๋ ๋์ ๋ณด์ด๊ฒ ๋๊ฑฐ๋, ์คํจํ์ฌ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํ๊ธฐ๋๊ณ ๊ณต์ ๋ฐ์ดํฐ๊ฐ ์ผ๊ด๋ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฝ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ถ์ํํ๊ณ ๊ต์ฐฉ ์ํ(deadlock)๋ ๋ผ์ด๋ธ๋ฝ(livelock)๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋์์ฑ ๋ฌธ์ ์ ์ํ์ ์ค์ฌ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํํฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์๊ฐํด ๋ด ์๋ค. ์ผ๋ณธ, ๋ธ๋ผ์ง, ์บ๋๋ค ๋ฑ ์ฌ๋ฌ ๋๋ผ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ํ ํ๋ชฉ์ ์ฌ๊ณ ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ์ ํต์ ์ธ ๋ฝํน ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ์ด๋ ์ฝ๊ฒ ๊ฒฝํฉ๊ณผ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. STM์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋์ญ์ ๋ด์ ์บก์ํํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๋์ผํ ํญ๋ชฉ์ ์์ ํ๋ฉด STM์ ์ถฉ๋์ ๊ฐ์งํ๊ณ ํ๋ ์ด์์ ํธ๋์ญ์ ์ ๋กค๋ฐฑํ ํ ๋ค์ ์๋ํฉ๋๋ค. ์ด๋ ๋์ ์ ๊ทผ์ ํ์ฉํ๋ฉด์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
STM ์ฌ์ฉ์ ์ด์
- ๋จ์ํ๋ ๋์์ฑ: STM์ ๋ฝ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ถ์ํํ์ฌ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ํฌ๊ฒ ๋จ์ํํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๋๊ธฐํ์ ๋ณต์กํ ์ธ๋ถ ์ฌํญ๋ณด๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค.
- ํฅ์๋ ํ์ฅ์ฑ: STM์ ๋ฝ ๊ธฐ๋ฐ ๋์์ฑ๊ณผ ๊ด๋ จ๋ ๊ฒฝํฉ์ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ค๋๋ ์ธ๋, ๋์ด์ง๋ฆฌ์, ๋ ์ผ๊ณผ ๊ฐ์ ๊ณณ์ ๊ตญ์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ํ๋ ๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ์ค์ํฉ๋๋ค.
- ๊ต์ฐฉ ์ํ ์ํ ๊ฐ์: STM์ ๊ธฐ๋ณธ ๊ตฌํ์ด ์ถฉ๋์ ๊ด๋ฆฌํ๊ณ ์ถฉ๋ํ๋ ํธ๋์ญ์ ์ ๋กค๋ฐฑํ๋ฏ๋ก ๋ฝ ๊ธฐ๋ฐ ๋์์ฑ์์ ํํ ๋ฐ์ํ๋ ๋ง์ ๊ต์ฐฉ ์ํ ์๋๋ฆฌ์ค๋ฅผ ๋ณธ์ง์ ์ผ๋ก ํผํฉ๋๋ค.
- ๊ตฌ์ฑ ๊ฐ๋ฅํ ํธ๋์ญ์ : STM์ ํธ๋์ญ์ ์ ๊ตฌ์ฑ์ ํ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ๋ฌ ์์์ ์ฐ์ฐ์ ๋ ํฌ๊ณ ๋ณต์กํ ํธ๋์ญ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์ฌ๋ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฑธ์ณ ์์์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์: ๋๊ธฐํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ์ํํจ์ผ๋ก์จ STM์ ๋ ๊นจ๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ์ฝ๋๋ฅผ ์ด์งํฉ๋๋ค. ์ด๋ ์ค์์ค, ์ฑ๊ฐํฌ๋ฅด, ์๊ตญ๊ณผ ๊ฐ์ ๊ธ๋ก๋ฒ ๊ธ์ต ๊ธฐ๊ด์ ์ํ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ํ๊ณผ ๊ฐ์ด ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ์ง๋ฆฌ์ ์์น์์ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ํ์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
STM์ ์๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํน์ ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ๋ ์์ต๋๋ค:
- ์ค๋ฒํค๋: STM ๊ตฌํ์ ํนํ ๊ฒฝํฉ์ด ๋ฎ์ ๋ ๋ฝ ๊ธฐ๋ฐ ๋์์ฑ์ ๋นํด ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐํ์ ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ถ์ ํ๊ณ , ์ถฉ๋์ ๊ฐ์งํ๋ฉฐ, ํธ๋์ญ์ ๋กค๋ฐฑ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
- ๊ฒฝํฉ: ๋์ ๊ฒฝํฉ์ STM์ ์ฑ๋ฅ ํฅ์์ ํฌ๊ฒ ๊ฐ์์ํฌ ์ ์์ต๋๋ค. ๋ง์ ์ค๋ ๋๊ฐ ์ง์์ ์ผ๋ก ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๊ณ ํ๋ฉด ์์คํ ์ ํธ๋์ญ์ ์ ๋กค๋ฐฑํ๊ณ ์ฌ์๋ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ์๋นํ ์ ์์ต๋๋ค. ์ด๋ ๊ธ๋ก๋ฒ ์์ฅ์ ์ํ ๋์ฉ๋ ํธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ ๋๋ค.
- ๊ธฐ์กด ์ฝ๋์์ ํตํฉ: STM์ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ํตํฉํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํนํ ์ฝ๋๊ฐ ์ ํต์ ์ธ ๋ฝ ๊ธฐ๋ฐ ๋๊ธฐํ์ ํฌ๊ฒ ์์กดํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ ์คํ ๊ณํ๊ณผ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ์ ์์ต๋๋ค.
- ๋น-ํธ๋์ญ์ ์ฐ์ฐ: ํธ๋์ญ์ ์ ์ฝ๊ฒ ํตํฉ๋ ์ ์๋ ์ฐ์ฐ(์: I/O ์ฐ์ฐ, ์์คํ ํธ์ถ)์ ์ด๋ ค์์ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์ ์ถฉ๋์ ํผํ๊ฑฐ๋ ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํน๋ณํ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น ๋ฐ ํ๋กํ์ผ๋ง: STM ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ๋ฐ ํ๋กํ์ผ๋ง์ ํธ๋์ญ์ ์ ๋์์ด ๋ ๋ฏธ๋ฌํ ์ ์์ผ๋ฏ๋ก ๋ฝ ๊ธฐ๋ฐ ๋์์ฑ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ํน๋ณํ ๋๊ตฌ์ ๊ธฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
STM์ผ๋ก ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ตฌํํ๊ธฐ
STM์ ๋ค์๊ณผ ๊ฐ์ ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํนํ ์ ํฉํฉ๋๋ค:
- ๋์์ฑ ํ: ๋์์ฑ ํ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์์ ํ๊ฒ ํญ๋ชฉ์ ์ธํ(enqueue)ํ๊ณ ๋ํ(dequeue)ํ ์ ์๊ฒ ํ๋ฉฐ, ์ค๋ ๋ ๊ฐ ํต์ ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์์ฑ ํด์ ํ ์ด๋ธ: ๋์์ฑ ํด์ ํ ์ด๋ธ์ ๋์ผํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ๋์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ์ง์ํ๋ฉฐ, ์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋์์ฑ ์ฐ๊ฒฐ ๋ฆฌ์คํธ: STM์ ๋ฝํ๋ฆฌ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ๋ฐ์ ๋จ์ํํ์ฌ ๋ฆฌ์คํธ ์์์ ๋ํ ํจ์จ์ ์ธ ๋์ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค.
- ์์์ ์นด์ดํฐ: STM์ ์์์ ์นด์ดํฐ๋ฅผ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋์ ๋์์ฑ์์๋ ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ (๊ฐ๋ ์ , ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ฝ๋ ์ค๋ํซ)
์์น์ ์ค๋ช ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๊ฐ๋ ์ ์ธ ์ฝ๋ ์ค๋ํซ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด ์์ ๋ค์ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์์ผ๋ฉฐ ์์ด๋์ด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๊ฒ์ด์ง ํน์ ์ธ์ด์ ์๋ ์ฝ๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ด ์๋๋๋ค.
์์ : ์์์ ์ฆ๊ฐ (๊ฐ๋ ์ )
transaction {
int currentValue = read(atomicCounter);
write(atomicCounter, currentValue + 1);
}
์ด ๊ฐ๋ ์ ์ธ ์ฝ๋์์ `transaction` ๋ธ๋ก์ `atomicCounter`์ ๋ํ `read`์ `write` ์ฐ์ฐ์ด ์์์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ํธ๋์ญ์ ์ด `read`์ `write` ์ฐ์ฐ ์ฌ์ด์ `atomicCounter`๋ฅผ ์์ ํ๋ฉด, ํด๋น ํธ๋์ญ์ ์ STM ๊ตฌํ์ ์ํด ์๋์ผ๋ก ์ฌ์๋๋ฉ๋๋ค.
์์ : ๋์์ฑ ํ์์์ ์ธํ ์ฐ์ฐ (๊ฐ๋ ์ )
transaction {
// Read the current tail
Node tail = read(queueTail);
// Create a new node
Node newNode = createNode(data);
// Update the next pointer of the tail node
write(tail.next, newNode);
// Update the tail pointer
write(queueTail, newNode);
}
์ด ๊ฐ๋ ์ ์ธ ์์ ๋ ๋์์ฑ ํ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ธํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. `transaction` ๋ธ๋ก ๋ด์ ๋ชจ๋ ์ฐ์ฐ์ ์์์ ์ผ๋ก ๋ณด์ฅ๋ฉ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋์์ ์ธํ ๋๋ ๋ํ๋ฅผ ์ํํ๋ฉด STM์ด ์ถฉ๋์ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. `read` ๋ฐ `write` ํจ์๋ STM์ ์ธ์ํ๋ ์ฐ์ฐ์ ๋ํ๋ ๋๋ค.
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ STM ๊ตฌํ
STM์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ์๋์ง๋ง, ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ด ํ์ฅ์ด STM ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ฉ์ฑ์ ํ๋ก์ ํธ์ ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Java: ์๋ฐ๋ ํต์ฌ ์ธ์ด์ STM์ด ๋ด์ฅ๋์ด ์์ง ์์ง๋ง, Multiverse์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ STM ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค. ์๋ฐ์์ STM์ ์ฌ์ฉํ๋ฉด ๋์ ์์ค์ ๋์์ฑ์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ฑ๊ณผ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ค๊ตญ, ๋ธ๋ผ์ง, ๋ฏธ๊ตญ๊ณผ ๊ฐ์ ๊ตญ๊ฐ์ ๊ตญ์ ํ์ด ๊ฐ๋ฐํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋๋์ ํธ๋์ญ์ ์ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ๊ด๋ จ์ด ์์ต๋๋ค.
- C++: C++ ๊ฐ๋ฐ์๋ ์ธํ ์ TSX(Transactional Synchronization Extensions, ํ๋์จ์ด ์ง์ STM) ๋๋ Boost.Atomic๊ณผ ๊ฐ์ ์ํํธ์จ์ด ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง ์์คํ ์์ ํจ์จ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ ๋์์ฑ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- Haskell: ํ์ค์ผ์ ์ธ์ด์ ์ง์ ๋ด์ฅ๋ ๋ฐ์ด๋ STM ์ง์์ ๊ฐ์ง๊ณ ์์ด ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค. ํ์ค์ผ์ ์์ ํจ์์ ํน์ฑ๊ณผ ๋ด์ฅ๋ STM์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๋ณด์กด๋์ด์ผ ํ๋ ๋ฐ์ดํฐ ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ฉฐ, ๋ ์ผ, ์ค์จ๋ด, ์๊ตญ๊ณผ ๊ฐ์ ๊ตญ๊ฐ์ ๊ฑธ์ณ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ๋ง์ต๋๋ค.
- C#: C#์๋ ๋ค์ดํฐ๋ธ STM ๊ตฌํ์ด ์์ง๋ง, ๋๊ด์ ๋์์ฑ ๋ฐ ๋ค์ํ ๋ฝํน ๋ฉ์ปค๋์ฆ๊ณผ ๊ฐ์ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์ฌ์ฉ๋ฉ๋๋ค.
- Python: ํ์ด์ฌ์ ํ์ฌ ๋ค์ดํฐ๋ธ STM ๊ตฌํ์ด ๋ถ์กฑํ์ง๋ง, ์ฐ๊ตฌ ํ๋ก์ ํธ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ฅผ ๊ตฌํํ๋ ์คํ์ ํด์์ต๋๋ค. ๋ง์ ํ์ด์ฌ ๊ฐ๋ฐ์๋ค์ ๋ฉํฐํ๋ก์ธ์ฑ ๋ฐ ์ค๋ ๋ฉ ๋ชจ๋๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋์์ฑ ๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- Go: Go๋ STM๊ณผ๋ ๋ค๋ฅธ ํจ๋ฌ๋ค์์ธ ๊ณ ๋ฃจํด๊ณผ ์ฑ๋์ ๋์์ฑ์ ์ํด ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Go์ ์ฑ๋์ ์ ํต์ ์ธ ๋ฝํน ๋ฉ์ปค๋์ฆ ์์ด ๋์ ๊ณ ๋ฃจํด ๊ฐ์ ์์ ํ ๋ฐ์ดํฐ ๊ณต์ ๋ผ๋ ์ ์ฌํ ์ด์ ์ ์ ๊ณตํ์ฌ, ๊ธ๋ก๋ฒ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ์ ์ ํฉํ ํ๋ ์์ํฌ์ ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ STM ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ ๋ ๊ฐ๋ฐ์๋ ์ฑ๋ฅ ํน์ฑ, ์ฌ์ฉ ํธ์์ฑ, ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
STM ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
STM์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ํธ๋์ญ์ ํฌ๊ธฐ ์ต์ํ: ํธ๋์ญ์ ์ ๊ฐ๋ฅํ ํ ์งง๊ฒ ์ ์งํ์ฌ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค.
- ์ฅ๊ธฐ ์คํ ์์ ํผํ๊ธฐ: ํธ๋์ญ์ ๋ด์์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์ (์: ๋คํธ์ํฌ ํธ์ถ, ํ์ผ I/O)์ ์ํํ์ง ๋ง์ญ์์ค. ์ด๋ฌํ ์์ ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ ์ ์์ต๋๋ค.
- ๋์์ฑ์ ๊ณ ๋ คํ ์ค๊ณ: STM ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์คํ๊ฒ ์ค๊ณํ์ฌ ๊ฒฝํฉ์ ์ต์ํํ๊ณ ๋ณ๋ ฌ์ฑ์ ๊ทน๋ํํ์ญ์์ค. ๋ฐ์ดํฐ ํํฐ์ ๋์ด๋ ๋ฝํ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ฌ์๋ ์ฒ๋ฆฌ: ํธ๋์ญ์ ์ด ์ฌ์๋๋ ์ ์์์ ๋๋นํ์ญ์์ค. ์ฝ๋๊ฐ ์ฌ์๋๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ ๋ถ์์ฉ์ ํผํ๋๋ก ์ค๊ณํ์ญ์์ค.
- ๋ชจ๋ํฐ๋ง ๋ฐ ํ๋กํ์ผ๋ง: STM ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค. ์ด๋ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ํ๋์จ์ด ๊ตฌ์ฑ์ด ํฌ๊ฒ ๋ค๋ฅผ ์ ์๋ ๊ธ๋ก๋ฒ ์ฌ์ฉ์์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ํนํ ์ค์ํฉ๋๋ค.
- ๊ธฐ๋ณธ ๊ตฌํ ์ดํด: STM์ ๋ฝ ๊ด๋ฆฌ์ ๋ง์ ๋ณต์ก์ฑ์ ์ถ์ํํ์ง๋ง, STM ๊ตฌํ์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค. ์ด ์ง์์ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ๋ค์ํ ์ํฌ๋ก๋์ ๊ฒฝํฉ ์์ค์ผ๋ก STM ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ์ ํํ๊ณ ์ฑ๋ฅ์ด ์ข์์ง ํ์ธํ์ญ์์ค. ๋ค์ํ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์์น์ ์๊ฐ๋์ ๊ฑธ์น ์กฐ๊ฑด์ ๋ํด ํ ์คํธํ์ญ์์ค.
๋ถ์ฐ ์์คํ ์์์ STM
STM์ ์์น์ ๋จ์ผ ๋จธ์ ๋์์ฑ์ ๋์ด ๋ถ์ฐ ์์คํ ์๋ ์ ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์์ ํ ๋ถ์ฐ STM ๊ตฌํ์ ์๋นํ ์ด๋ ค์์ ์ ์ํ์ง๋ง, ์์์ ์ฐ์ฐ๊ณผ ์ถฉ๋ ๊ฐ์ง์ ํต์ฌ ๊ฐ๋ ์ ์ ์ฉ๋ ์ ์์ต๋๋ค. ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. STM๊ณผ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ ๊ฐ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ ๊ณ ๊ฐ์ฉ์ฑ ๋ฐ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค ์ ์๊ฒ ํฉ๋๋ค.
๋ถ์ฐ STM์ ๊ณผ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ: ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ๋ถ์ฐ ํธ๋์ญ์ ์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ฅ์ ์ฒ๋ฆฌ: ๋ ธ๋ ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฅ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์กฐ์ : ์ฌ๋ฌ ๋ ธ๋์ ๊ฑธ์ณ ํธ๋์ญ์ ์ ์กฐ์ ํ๋ ค๋ฉด ์ ๊ตํ ํ๋กํ ์ฝ์ด ํ์ํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์๋ ๋ถ๊ตฌํ๊ณ ์ด ๋ถ์ผ์ ์ฐ๊ตฌ๋ ๊ณ์๋๊ณ ์์ผ๋ฉฐ, STM์ด ๋ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ญํ ์ ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
STM์ ๋ฏธ๋
STM ๋ถ์ผ๋ ์ฑ๋ฅ ํฅ์, ์ธ์ด ์ง์ ํ๋, ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ํ์์ ์ด์ ์ ๋ง์ถ ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ๋ก ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์์ ๋ถ์ฐ ์์คํ ์ด ๊ณ์ํด์ ๋ณดํธํ๋จ์ ๋ฐ๋ผ STM ๋ฐ ๊ด๋ จ ๊ธฐ์ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ถ์ผ์์ ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค:
- ํ๋์จ์ด ์ง์ STM: STM์ ๋ํ ํ๋์จ์ด ์ง์์ ์ถฉ๋ ๊ฐ์ง ๋ฐ ๋กค๋ฐฑ ์์ ์ ๊ฐ์ํํ์ฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ธํ ์ TSX(Transactional Synchronization Extensions)๋ STM์ ๋ํ ํ๋์จ์ด ์์ค ์ง์์ ์ ๊ณตํ๋ ์ฃผ๋ชฉํ ๋งํ ์์ ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ์ฐ๊ตฌ์๊ณผ ๊ฐ๋ฐ์๋ค์ ํนํ ๋์ ๊ฒฝํฉ ์๋๋ฆฌ์ค์์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด STM ๊ตฌํ์ ์ต์ ํํ๋ ์์ ์ ๊ณ์ํ๊ณ ์์ต๋๋ค.
- ๋ ๋์ ์ธ์ด ์ง์: ๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ STM์ ํตํฉํ๊ฑฐ๋ STM์ ํ์ฑํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
- ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ : STM์ ์ฌ์ฉ ์ฌ๋ก๋ ์ ์ธ๊ณ ๊ธ์ต ๊ฑฐ๋, ๊ธ๋ก๋ฒ ๊ณต๊ธ๋ง ๊ด๋ฆฌ, ๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์ ํฌํจํ๋ ๋ถ์ผ ๋ฑ ์ ํต์ ์ธ ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋์ด ๋ถ์ฐ ์์คํ , ์ค์๊ฐ ์์คํ , ๊ณ ์ฑ๋ฅ ์ปดํจํ ๊ณผ ๊ฐ์ ์์ญ์ผ๋ก ํ์ฅ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ๋ ์ด๋ฌํ ๋ฐ์ ์ ํ๊ตฌํจ์ผ๋ก์จ ์ด์ต์ ์ป์ต๋๋ค. ์ธ๊ณ๊ฐ ์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋จ์ ๋ฐ๋ผ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ๋์์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฅ๋ ฅ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํด์ก์ต๋๋ค. STM์ ์ด๋ฌํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์คํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ฌ ์ ์ธ๊ณ์ ์ผ๋ก ํ์ ๊ณผ ๋ฐ์ ์ ์ํ ๊ธฐํ๋ฅผ ์ฐฝ์ถํฉ๋๋ค.
๊ฒฐ๋ก
์ํํธ์จ์ด ํธ๋์ญ์ ๋ ๋ฉ๋ชจ๋ฆฌ(STM)๋ ๋์์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๊ณ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํํ๋ ์ ๋งํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์์์ ์ฐ์ฐ๊ณผ ์ถฉ๋ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํจ์ผ๋ก์จ STM์ ๊ฐ๋ฐ์๊ฐ ๋ ํจ์จ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค. ๊ณผ์ ๋ ๋จ์ ์์ง๋ง, STM์ ์ด์ ์ ์๋นํ๋ฉฐ, ํนํ ๋ค์ํ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ๋์ ์์ค์ ์ฑ๋ฅ, ์ผ๊ด์ฑ ๋ฐ ํ์ฅ์ฑ์ด ์๊ตฌ๋๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋ค์ ์ํํธ์จ์ด ํ๋ก์ ํธ์ ์ฐฉ์ํ ๋ STM์ ํ๊ณผ ๊ทธ๊ฒ์ด ๋ฉํฐ์ฝ์ด ํ๋์จ์ด์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ ๋์์ ์ธ ๋ฏธ๋์ ๊ธฐ์ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค.