DAY 26
๐ย ์ค๋ ์ฝ์ ๋ฒ์ : 13. ๋์์ฑ(226~235p)
๐คย ์ฑ
์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
๊ฐ์ฒด๋ ์ฒ๋ฆฌ์ ์ถ์ํ๋ค. ์ค๋ ๋๋ ์ผ์ ์ ์ถ์ํ๋ค.
๋์์ฑ์ด ํ์ํ ์ด์
- ๋์์ฑ์ coupling(๊ฒฐํฉ) ์ ์์ ๋ ์ ๋ต
- what ๊ณผ when์ ๋ถ๋ฆฌํ๋ ์ ๋ต
- ์๋ธ๋ฆฟ ์น ํน์ EJB ์ปจํ
์ด๋๋ผ๋ ์ฐ์ฐ์์ ์ปจํ
์ด๋๋ ๋์์ฑ์ ๋ถ๋ถ์ ์ผ๋ก ๊ด๋ฆฌ
- ์น ์์ฒญ์๋ง๋ค ๋น๋๊ธฐ์์ผ๋ก ์๋ธ๋ฆฟ์ ์คํ
- ํน์ ์์คํ
์ throughput ๊ฐ์ ์ ์ํด ๋์์ฑ ๊ตฌํ์ด ๋ถ๊ฐํผ
๋ฏธ์ ๊ณผ ์คํด
์๋ ๋ช
์ ๋ง ์ฐธ์ด๋ค
- ๋์์ฑ์ ๋ค์ ๋ถํ๋ฅผ ์ ๋ฐํ๋ค.
- ๋์์ฑ์ ๊ฐ๋จํ ๋ฌธ์ ๋ ๋ณต์กํ๊ฒ ํ๋ค.
- ๋์์ฑ ๋ฒ๊ทธ๋ ์ฌํ์ด ์ด๋ ต๋ค โ ์ผํ์ฑ ๋ฌธ์ ๋ก ๊ฐ์ฃผ๋๋ค
- ๋์์ฑ ๊ตฌํ์ ์ํด์๋ ๊ทผ๋ณธ์ ์ธ ์ค๊ณ ์ ๋ต์ ์ฌ๊ณ ํด์ผ ํ๋ค
๋๊ด
- ๋ ์ค๋ ๋๊ฐ ๊ฐ์ ๋ณ์๋ฅผ ๋์์ ์ฐธ์กฐํ ๊ฒฝ์ฐ
public class X {
private int lastIdUsed;
public int getNextId() {
return ++lastIdUsed;
}
}
- lastIdUsed ๋ฅผ 42๋ก ์ค์ ํ๊ณ ๋ ์ค๋ ๋๊ฐ X ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ ๊ฒฝ์ฐ
- (43, 43) ๋ ์ค๋ ๋ ๋ชจ๋ 43์ ๊ฐ์ง๋ ์ผ๋ถ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค
๋์์ฑ ๋ฐฉ์ด ์์น
๋จ์ผ ์ฑ
์ ์์น SRP
- ์ฃผ์ด์ง ๋งค์๋/ํด๋์ค/์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ํ๋์ฌ์ผ ํ๋ค
- ๋์์ฑ์ ๋ณต์ก์ฑ ํ๋๋ง์ผ๋ก๋ ๋ถ๋ฆฌํ ์ด์ ๊ฐ ์ถฉ๋ถ
- ๋์์ฑ๊ณผ ๊ด๋ จ์๋ ์ฝ๋์ ๋์์ฑ์ ๊ตฌํํ๋ ์ฌ๋ก๊ฐ ๋ง๋ค
- ๋์์ฑ ์ฝ๋๋ ๋ค๋ฅธ ์ฝ๋์ ๋ถ๋ฆฌํด์ผํ๋ค
- ๋์์ฑ ์ฝ๋๋ ๋
์์ ์ธ ๊ฐ๋ฐ, ๋ณ๊ฒฝ, ์กฐ์จ ์ฃผ๊ธฐ๊ฐ ์๋ค
- ๋์์ฑ ์ฝ๋๋ ๋
์์ ์ธ ๋๊ด์ด ์๋ค.
- ์๋ชป ๊ตฌํํ ๋์์ฑ ์ฝ๋๋ ๋ณ์๋ณ ๋ฐฉ์์ผ๋ก ์คํจํ๋ค.
๋ฐ๋ฆ ์ ๋ฆฌcorollary: ์๋ฃ ๋ฒ์๋ฅผ ์ ํํ๋ผ
- ๊ณต์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ๋ด ์๊ณ ์์ญcritical section ์ synchronized ํค์๋๋ก ๋ณดํธ
- ์๋ฃ๋ฅผ ์บก์ํ ํ์ฌ ๊ณต์ ์๋ฃ๋ฅผ ์ต๋ํ ์ค์ฌ๋ผ
- ๋ณดํธํ ์๊ณ์์ญ์ ๋นผ๋จน์ผ๋ฉด ๊ณต์ ์๋ฃ ์์ ํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ง๊ฐ๋จ๋ฆฐ๋ค
- ๋ชจ๋ ์๊ณ ์์ญ์ ์ฌ๋ฐ๋ก ๋ณดํธํ๋์ง ํ์ธํ๋๋ผ ๋๊ฐ์ ๋
ธ๋ ฅ๊ณผ ์๊ณ ๋ฐ๋ณต
- ๋ฒ๊ทธ๋ฅผ ๋ ์ฐพ๊ธฐ ์ด๋ ค์์ง๋ค
๋ฐ๋ฆ์ ๋ฆฌ: ์๋ฃ ์ฌ๋ณธ์ ์ฌ์ฉํ๋ผ
- ์ฒ์ ๋ถํฐ ๊ณต์ ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ์ข๋ค
- ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค
- ๋ณต์ฌํ๋ ๋น์ฉ๊ณผ ์๊ฐ์ด ๊ฐ๋น์ง ์ปฌ๋ ์
์ ๋๋ ๋ถํ๋ณด๋ค ์ด๋์ผ ๊ฐ๋ฅ์ฑ ํฌ๋ค
๋ฐ๋ฆ ์ ๋ฆฌ: ์ค๋ ๋๋ ๊ฐ๋ฅํ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌํ
- ๋
์์ ์ธ ์ค๋ ๋๋ก, ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์์์, ๋๋ ค๋ ๊ด์ฐฎ๋๋ก ์๋ฃ๋ฅผ ๋
๋ฆฝ์ ์ธ ๋จ์๋ก ๋ถํ
- Eg) HttpServlet์ ํ์ ํด๋์ค๋ ๋ชจ๋ ์ ๋ณด๋ฅผ doGet๊ณผ doPost ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค
- ๋
์์ ์ธ ์์คํ
์์ ๋์ํ๋ ๊ฒ ์ฒ๋ผ ์์ฒญ์ ์ฒ๋ฆฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํดํ๋ผ
- ์ค๋ ๋ ํ๊ฒฝ์ ์์ ํ
Collection
์ ์ฌ์ฉ
- ์๋ก ๋ฌด๊ดํ ์์
์ํ์์๋
executor
ํ๋ ์ ์ํฌ ์ฌ์ฉ
- ๊ฐ๋ฅํ๋ค๋ฉด ์ค๋ ๋๊ฐ ์ฐจ๋จ ๋์ง ์๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
- ์ผ๋ถ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋ ๋์ ์์ ํ์ง ๋ชปํจ
์ค๋ ๋ ํ๊ฒฝ์ ์์ ํ ์ปฌ๋ ์
- ์ธ์ด๊ฐ ์ ๊ณตํ๋ ํด๋์ค๋ฅผ ๊ฒํ ํ๋ผ
- ์๋ฐ์ ๊ฒฝ์ฐ java.util.concurrent, java.util.concurrent.atomic, java.util.concurrent.locks
- ConcurrentHashMap ์ HashMap๋ณด๋ค ์์ ํ๋ฉฐ ์ฑ๋ฅ๋ ์ข์
์คํ ๋ชจ๋ธ์ ์ดํดํ๋ผ
- Bound Resource: ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ์์, ํฌ๊ธฐ๋ ์ซ์๊ฐ ์ ํ์ eg) DB์ฐ๊ฒฐ, ๊ธธ์ด์ผ์ ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ฒํผ
- Mutual Exclusion: ํ ๋ฒ์ ํ ์ค๋ ๋๋ง ๊ณต์ ์๋ฃ๋ ๊ณต์ ์์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ
- Starvation: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ค๋๋์ ์์์ ๊ธฐ๋ค๋ฆผ, ์งง์ ์ค๋ ๋๋ง ์ฐ์ ์์๋ฅผ ์ฃผ๋ฉด ๊ธด ์ค๋ ๋๋ Starvation์ ๋น ์ง
- Deadlock: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์๋ก ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆผ
- Livelock: ๋ฝ ๊ฑฐ๋ ๋จ๊ณ์์ ๊ฐ ์ค๋ ๋๊ฐ ์๋ก๋ฅผ ๋ฐฉํด, ๊ณ์ ์งํํ๋ ค ํด๋ resonance ๋ก ์ค๋๋์ ์งํํ์ง ๋ชปํจ
์์ฐ์-์๋น์
- ๋๊ธฐ์ด์ ํ์ ๋ ์์
- ์์ฐ์ ์ค๋ ๋๋ ๋๊ธฐ์ด์ด ๋น์ด์ผ ์ ๋ณด๋ฅผ ์ฑ์ฐ๊ณ
- ์๋น์ ์ค๋ ๋๋ ๋๊ธฐ์ด์ ์ ๋ณด๊ฐ ์์ด์ผ ๊ฐ์ ธ์ด
- ์๋ชป ์๊ทธ๋์ ๋ณด๋ผ ๊ฒฝ์ฐ ๋ ๋ค ์งํ ๊ฐ๋ฅํจ์๋ ์๋ก ๊ธฐ๋ค๋ฆผ
์ฝ๊ธฐ-์ฐ๊ธฐ
- ์ฝ๊ธฐ๊ฐ ์ฃผ๋ก ๊ณต์ ์์์ ์ฐ๋ค๊ฐ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ ๊ณต์ ์์์ ๊ฐฑ์ ํ๋๊ฒฝ์ฐ ์ฒ๋ฆฌ์จ์ด ๊ด๊ฑด
- ์ฝ๊ธฐ ์ ์ฐ๊ธฐ ์ค๋ ๋์ ์๊ตฌ๋ฅผ ์ ์ ํ ๋ง์กฑ์์ผ์ผํ๋ค
- ์ฒ๋ฆฌ์จ ๊ฐ์กฐ: ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ์์ ๋๊น์ง ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ๊ธฐ๋ค๋ฆผ โ ์ฐ๊ธฐ๊ฐ Starvation ์ ๋น ์ง
- ๊ฐฑ์ ํ์ฉ: ์ฐ๊ธฐ ์ค๋ ๋์๊ฒ ์ฐ์ ๊ถ์ ์ฃผ๋ฉด ์ฒ๋ฆฌ์จ์ด ๋จ์ด์ง
์์ฌํ๋ ์ฒ ํ์๋คDining Philosophers
- ๋ฅ๊ทผ ์ํ์ ์ฒ ํ์(์ค๋ ๋)์ ๊ฐ ์ผ์ชฝ์ ํฌํฌ(์์) ์ด ๋์์ ๋
- ์ฒ ํ์๋ ๋ฐฐ๊ฐ ๊ณ ํ๋ฉด ๋ฐ๋์ ์์์ผ๋ก ํฌํฌ ์ ๋ค๊ณ ์คํ๊ฒํฐ๋ฅผ ๋จน์
- ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ ์ฒ ํ์๊ฐ ํฌํฌ ์ฌ์ฉ์ค์ด๋ฉด ๊ธฐ๋ค๋ ค์ผํจ
- ์คํ๊ฒํฐ ๋ค ๋จน์์ผ๋ฉด ๋ฐฐ๊ณ ํ๋๊น์ง ์๊ฐ์ ์ ๊น
๐คย ๋ ์ค๋ฅด๋ ์๊ฐ
- ๋์์ฑ์ ๋ด์ฉ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋์๋ง ๊นจ๋ซ๊ฒ ๋๋ฉฐ ๋ฒ๊ทธ ์ฌํ์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ฌ์ฌํ์ง๋ง ๊ฐ์ฅ ์ค์ํ ์์ญ์ด๊ธฐ๋ ํ๋ค. ์ ์๊ฐ ์ธ๊ธํ ๋ฐฉ์ด์์น์ ๋ฏธ๋ฆฌ ๋ฐ๋ผ์ ๋ฐ์์ ๋ฏธ์ฐ์ ๋ฐฉ์ง ํ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.
๐ย ์ง๋ฌธ
๐ย ์๊ฐ 3์ค ์์ฝ
- ๋์์ฑ๋ฐฉ์ด์์น1. ์๋ฃ ๋ฒ์๋ฅผ ์ ํํ๋ผ
- ๋์์ฑ๋ฐฉ์ด์์น2. ์๋ฃ ์ฌ๋ณธ์ ์ฌ์ฉํ๋ผ
- ๋์์ฑ๋ฐฉ์ด์์น3. ์ค๋ ๋๋ ๊ฐ๋ฅํ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌํํ๋ผ