๐ค ๊ธฐ์ ์ธํฐ๋ทฐ ์ง์ ์ ๋ฆฌ์ง
ํ๋ ธ๊ฑฐ๋ ์ ๋งค๋ชจํธํ ๋ด์ฉ์ ์ธ์ ๋ ์ด์ ๋จ๊ฒจ์ฃผ์ธ์ :)
ํน์ ์ค๋ช ์ ๋ด๋ ๋ชจ๋ฅด๊ฒ ๋คํ์๋ ๋ถ๋ค๋ ์ธ์ ๋ ํธํ๊ฒ ์ด์ ๋จ๊ฒจ์ฃผ์ธ์~~ ํ ๋ก ์ข์ํฉ๋๋ค~~
์๋ฃ๊ตฌ์กฐ๋?
ArrayList vs LinkedList
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ต๋ณ
- ์๋ฐ๋ ์ ์์ค ๊ณ ์ฌ๋ง๊ณผ ๋ค๋ฅธ ์ฐ๊ตฌ์๋ค์ด ๊ฐ๋ฐํ ๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
- ์๋ฐํ ๋งํ๋ฉด ๋ฉํฐ ํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐ์ธ์ด (์ ์ฐจํ, ํจ์ํ ๋ชจ๋ ์ง์)
- ํน์ง
- JVM (WORA) ๊ฐ์๋จธ์ -> ์ด์์ฒด์ ์ ๋ ๋ฆฝ์
- GC๋ผ๋ ํ๋ก์ธ์ค๋ฅผ ํตํด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ํํ๋ค.
- ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ง์ํ๋ค.
- Managed ์ธ์ด
๋ต๋ณ
- ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฐ์ฒด์งํฅ์ธ์ด. (ํ์ฅ, ์ ์ง๋ณด์๋ฉด์์ ์ ๋ฆฌํ๋ค)
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ Managed ์ธ์ด. (์๊ฐ ๋จ์ถ, ํธ์์ฑ)
- ํ๋ซํผ๊ณผ ๋ ๋ฆฝ์ ์ธ ์ธ์ด.
- ์ธ์ด ์ฐจ์์์ ์ค๋ ๋๋ฅผ ์ง์ํด์ค๋ค.
- ๋์ ์ ์ ์จ๊ณผ ์ค๋ ์ญ์ฌ. ๋ฌธ์ํ.
๋ต๋ณ
- Wrapper Class๋ฅผ ์ฌ์ฉํ๋ ์ด์
- Nullable
toString()
๋ฅผ ํตํด String ํ์ ์ผ๋ก ๋ฐ๋ก ๋ณํ ๊ฐ๋ฅ- ์์ํ์ ์ ๊ฐ์ฒด ํ์ ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ (์์จ์ ์ธ ๊ฐ์ฒด๋ก ์ฌ์ฉ ๊ฐ๋ฅ)
- Generic ํ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํจ
- ๋ฉํฐ์ค๋ ๋ฉ์์ ๋๊ธฐํ๋ฅผ ์ง์ํ๋ ค๋ฉด ๊ฐ์ฒด๊ฐ ํ์ (?)
- Boxing vs Unboxing (Auto)
- Primitive -> Warpper : Boxing
- Wrapper -> Primitive : Unboxing
- JVM์ ์ํฉ์ ๋ฐ๋ผ Boxing์ ํ๊ธฐ๋, Unboxing์ ํ๊ธฐ๋ ํ๋ค.
- ํธ๋ฆฌํ AutoBoxing์ ๋จ์
- Wrapper Class๋ฅผ ์ฐ์ฐํ๋ฉด ์คํ ๋ฐ์ฑ/์ธ๋ฐ์ฑ์ด ์ผ์ด๋๊ธฐ์ ๋นํจ์จ์ ์ด๋ค.
๋ต๋ณ
- ์ฐ์ Generic์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๊ฐ ํ์
์ฒดํฌ๋ฅผ ์ํจ์ด๋ค. ์ฆ, ์ปดํ์ผ ํ์์์๋ง ํ์
์ฒดํฌ ๋ฐ ์ ์ฝ์ ์ ์ฉํ๊ณ , ์๋ ํ๋ณํ์ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ ๋
.class
ํ์ผ์๋ ์ค์ ๋ก ์ ๋ค๋ฆญ ์ ๋ณด๊ฐ ์ ํ ์๋ค. (์๊ฑฐ๋จ) - ๋ค๋ฅด๊ฒ ๋งํ๋ฉด ๋ฐํ์์ Generic์ผ๋ก ์ฃผ์ด์ง ํ์ ์ผ๋ก ํ๋ณํ ๋ Object๋ง์ด ์กด์ฌํ ์ ์๋ค. ๊ทธ๋ฌ๊ธฐ ๋๋ฌธ์ Primitive ํ์ ์ Object๊ฐ ๋ ์ ์๊ธฐ์ ๋ถ๊ฐ๋ฅํ ๊ฒ.
- ์ฝ๊ฒ ๋งํ๋ฉด Generic ํน์ฑ์ Object๋ก Convertableํ ํ์ ๋ง ๊ฐ๋ฅํ๋ค.
- ์ฐธ๊ณ 1, ์ฐธ๊ณ 2
๋ต๋ณ
- ์์ฑ์์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ฐจ์ด๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ฅ๋จ์ ์ผ๋ก ์ ์ ์๋ค.
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ฅ์
- ์ด๋ฆ์ ๊ฐ์ง ์ ์๋ค.
- ๋ฐ๋์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์๊ฐ ์๋ค. ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์บ์ฑํ๊ฑฐ๋, Validation์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฐํ ํ์ ์ ํ์ ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ ๋ฅ๋ ฅ์ด ์๋ค.
- ์ ๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋งค๋ฒ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค.
- static ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ์์ ์๋ ๋ฐํํ ๊ฐ์ฒด์ ํด๋์ค๊ฐ ์กด์ฌํ์ง ์์๋ ๋๋ค.
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ๋จ์
- ์์ํ๋ ค๋ฉด public, protected ์์ฑ์๊ฐ ํ์ํ๋, ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ง ์ ๊ณตํ๋ฉด ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
- static ํฉํ ๋ฆฌ ๋ฉ์๋๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฐพ๊ธฐ ์ด๋ ต๋ค.
๋ต๋ณ
String
์ ๋ํ์ ๋ถ๋ณ ๊ฐ์ฒด๋ก,String ์์ ํ ์์ญ
์์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ค.- ์ฆ, ์์์ฒ๋ผ ์ด๋ฏธ ์ ์ธ๋ String ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ์ด ์์ญ์์ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ณ , ์๋ค๋ฉด ์ฌ๊ธฐ์ ์๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ค.
๋ต๋ณ
""
์ Heap ๋ด์ ๋ณ๋ ๊ณต๊ฐ์ธString ์์ ํ ์์ญ
์ ๋ฌธ์์ด์ ์์ฑํ๊ณ , ๊ฐ์ ๋ฌธ์์ด์ ํ๋ฒ๋ง ์์ฑ๋๋ค.String ์์ ํ ์์ญ
์ ์์ฑ๋๋ String ๊ฐ์ฒด๋ ๋ถ๋ณ์ด๋ค.
new String()
๋ ์ผ๋ฐ ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก Heap์ ๋ฌธ์์ด ๊ฐ์ฒด๋ก ์์ฑ๋๋ค.
๋ต๋ณ
- ๋ถ๋ณ ๊ฐ์ฒด๋?
- ๋ถ๋ณ ๊ฐ์ฒด๋ ์์ฑ ํ ๊ทธ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ๋ฐ๋ ๊ฐ๋ ์ผ๋ก ๊ฐ๋ณ(mutable)๊ฐ์ฒด๊ฐ ์๋ค.
- ๋ถ๋ณ ๊ฐ์ฒด๋ ์ธ๋ถ์์ ๋ถ๋ณ ๊ฐ์ฒด์ ๊ฐ์ ์์ ํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- ๋ํ์ ์ธ ๋ถ๋ณ ๊ฐ์ฒด:
String
,Boolean
,Integer
- ๋ํ์ ์ธ ๊ฐ๋ณ ๊ฐ์ฒด:
StringBuilder
- ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ?
- ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๋ค. ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
- ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ์ ๋ค.
- ๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ๊ฐ์ ํตํด ์ ๊ทผํ๊ธฐ ๋๋ฌธ์, ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ํตํด ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด ๋๋ ๊ฒ์ด ์ข๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์ค๋ ๋๋ ๋ฉ์๋์์ Money๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์ธ์ ์ด๋์ ๋ถ์ ํจ๊ณผ๊ฐ ๋ฐ์ํด ๋ด๋ถ ๊ฐ์ด ๋ณ๊ฒฝ ๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์๋ค.
- ์บ์๋ Map๋๋ Set์ ์์๋ฅผ ํ์ฉํ๊ธฐ์ ์ ํฉํ๋ค.
- ์ปฌ๋ ์
์ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ์์๋ ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด์ค์ผ๋๋ค.
List
๋ฅผ ๋ถ๋ณ์ผ๋ก ํด๋, ๊ทธ ์์๊ฐ ๋ถ๋ณ์ด ์๋๋ฉด ์ธ์ ๋ ๊ฐ๋ณ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋จ์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ ๋ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ๋จ, ์ด๊ฒ์ GC ์ปค์คํ ์ ํตํด ๊ฐ์ ํ ์ ์์ ๋ฏ ํ๋ค.
๋ต๋ณ
- ์์ ํ์
์์์ ๋ถ๋ณ
- ์์ ํ์ ์ ๊ฐ์ ๊ทธ๋๋ก ์ธ๋ถ๋ก ๋ด๋ณด๋ด๋ ๋ถ๋ณ์์ ๋ณด์ฅํ๋ค.
- ํ์ง๋ง, ๊ฐ์ฒด์
Setter
๋ฅผ ํตํด์๋ ๊ฐ์ฒด ๋ด๋ถ์์์ ์์ ํ์ ์ ๋ถ๋ณ์ ๋ง์ ์ ์๋ค. Setter
๋ฅผ ์์ฑํ์ง ์๊ณ , final์ ๋ถ์ฌ์ค ์์ฑ์๋ง์ ํตํด์ ์ค์ ๋๋๋กํ๋ฉด ๋ถ๋ณ์ ๋ณด์ฅํ ์ ์๋ค. ํน์ ํน์ ๋ฉ์์ง๋ฅผ ํตํด์๋ง ์์ ํ์ ์ด ๋ณ๊ฒฝ๋๋๋ก ํ๋ฉด ๋๋ค.
- ์ฐธ์กฐ ํ์
์์์ ๋ถ๋ณ
- ๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ๊ฐ์ ํตํด ์ ๊ทผํ๊ธฐ์, ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๊ธฐ ๋ ํ๋ค๋ค.
- final + ๋ฐฉ์ด์ ๋ณต์ฌ (์์ฑ์, Getter, ๊ธฐํ ๋ฐํ ๋ฉ์๋)๋ฅผ ํตํด ์ฐธ์กฐ ํ์ ์ ๋ถ๋ณ์ผ๋ก ๋ง๋ค ์ ์๋ค.
- ์ปฌ๋ ์ ์ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์๋, ํด๋น ์ปฌ๋ ์ ์ ์์๋ ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด์ค์ผํ๋ค.
- ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ
๋ต๋ณ
- null์ ์ ์
- null์ ๊ฐ์ด ํ ๋น๋์ง ์์ ๋ณ์
- ๋ชจ๋ ์ฐธ์กฐ ์ ํ์ด ๋ ์ ์๋ ํน์ ๋ฆฌํฐ๋ด
- "๊ฐ์ฒด ์์", "์ ์ ์์", "์ฌ์ฉํ ์ ์์"๋ฑ ์์ฉ ํ๋ก๊ทธ๋จ(ํ๊ฒฝ)๋ง๋ค ์ ์๋ฅผ ๋ค๋ฅด๊ฒ ํ ์ ์๋ค.
- null์ ๋ฌธ์ ์
- null์ ์ฝ๊ฒ NPE๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
- null์ ๋ฐํํ ์ ์๋ ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ๋ก ํ์ฌ๊ธ ํผ๋์ ์ด๋ํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ ์ ์ฅ์์ null์ด ๋ฐํ๋๋ ๋ฉ์๋์ธ์ง ์๋์ง ํญ์ ํ์ธํด์ค์ผํ๋ค.
- null์ ์์ ํ๊ฒ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
- Assertion (๋จ์ ๋ฌธ) ์ฌ์ฉ
- Objects ์ฌ์ฉ (
isNull
,nonNull
,requireNonNull
, ...) Optional
- ์ถ์ฒํ๋ null ๋ฐฉ์ง ๋๊ตฌ
Optional
- JSR 305
- JSR 308 (
@NonNull
,@Nullable
)
๋ต๋ณ
- ์ฝ๊ฒ ์์ฝํ๋ฉด,
Optional
์ ์ต๋ 1๊ฐ ์์๋ฅผ ๊ฐ์ง๋ ํน๋ณํ Stream์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ฌ์ฉํ๋ฉด ๋๋ค. isPresent()
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ->orElse
,orElseGet
๋ฑ์ ์ฌ์ฉํ์.isPresent()
๋ฅผ ํธ์ถํ์ฌ null์ธ์ง ํ์ธํ๊ณ ๋ค๋ฅธ ๋ก์ง์ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ. ์ด ๊ฒฝ์ฐ ๊ตณ์ดOptional
๋ก ๊ฐ์ ํ์๊ฐ ์๋ค.- ์ฐจ๋ผ๋ฆฌ ๊ทธ๋ฅ null์ธ์ง ํ์ธํ๋ ๋ก์ง์ ๋ฃ๋ ๊ฒ์ด ๋ ์ข๋ค. ๋์
orElse
,orElseGet
๋ฑ๋ฑ์ ์ฌ์ฉํ์.
orElse(new ...)
๋์orElseGet(() -> new ...))
๋ฅผ ์ฌ์ฉํ์.orElse(new ...)
๋ ๋ฌด์กฐ๊ฑด ์คํ๋๋ค. ๋ง์ฝ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์๋ก์ด ์ฐ์ฐ์ ์ํํ๋ ๊ฒฝ์ฐ์๋orElseGet(() -> new ...))
๋ฅผ ์ฌ์ฉํ์. ์ด๋ Optional์ ๊ฐ์ด ์์ ๋๋ง ์คํ๋๋ค.
- Optional์ ํ๋๋ก ์ฌ์ฉํ๋ฉด ์๋๋ค. ๋ฐํ ๊ฐ์ผ๋ก๋ง ์ฌ์ฉํ์
- Optional์ ๋น์ธ๋ค. ๋น์ด์๋ ์ปฌ๋ ์ ์ ๋ฐํํ ๋๋ Optional์ ๊ฐ์ธ์ง ๋ง๊ณ , ๋น ์ปฌ๋ ์ ์ ๋ฐํํ์.
- ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ
๋ต๋ณ
- ์๋ช
์ฃผ๊ธฐ
- JVM์ static์ด ๊ฐ์ฅ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค. ์ ์ผ ๋ง์ง๋ง์ ์๊ฑฐ๋๋ค.
- main๋ฉ์๋์ ๊ฒฝ์ฐ ์ด๋ค ๊ฐ์ฒด ์์ฑ๋ณด๋ค๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ static์ผ๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
- ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผํจ
- static์ผ๋ก ํด์ผ ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ.
๋ต๋ณ
- non-static์ ํน์ ๊ฐ์ฒด์ ๋ํ ์ํ(๋์ ๋ณ์ ํน์ ์ธ์คํด์ค ๋ณ์)๋ฅผ ์๋ฏธํ๊ณ , static์ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ ์ํ(์ ์ ๋ณ์ ํน์ ํด๋์ค ๋ณ์)๋ฅผ ์๋ฏธํ๋ค.
- non-static์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ํ ๋น๋๋ฉฐ, ํด๋น ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ, static์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์๋ ํ ๋น๋๋ฉฐ, ๋ชจ๋ ๊ฐ์ฒด์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- non-static ๋ฉ์๋์์๋ static ๋ณ์์ ๋ฉ์๋์ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, static ๋ฉ์๋์์๋ non-static ๋ณ์์ ๋ฉ์๋์ ์ ๊ทผํ์ง ๋ชปํ๋ค. (์์ง ์์ฑ๋์ง ์์๊ธฐ์)
- ์๋ช ์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๋ค. non-static์ ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ด ํ๋ฉฐ, static์ ํ๋ก๊ทธ๋จ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ดํ๋ค.
- ์ฝ๊ฒ ์๊ธฐํ๋ฉด, non-static์ ์ธ์คํด์ค(๊ฐ์ฒด)์ ์ํ๊ณ , static์ ํด๋์ค ์์ฒด์ ์ํ๋ค.
๋ต๋ณ
- ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์
- ์ซ์ํ
- ์ ์ - byte (1byte), short(2byte), int(4byte), long(8byte)
- ์ค์ - float(4byte), double(8byte)
- java๋ ๊ธฐ๋ณธ์ ์ผ๋ก unsigned๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. wrapper class๋ฅผ ์ด์ฉํ๋ฉด ๋์ง๋ง ์ถ์ฒํ์ง ์๋๋ค.
- ๋ฐ์ดํฐ ํ์ ๋ณ ํํ ๊ฐ๋ฅ ๋ฒ์๋ ์ฌ๊ธฐ
- ๋ ผ๋ฆฌํ - boolean (1byte)
- ๋ฌธ์ํ - char (2byte) ๋ชจ๋ ์ ๋์ฝ๋
- ๋ฌธ์์ด - String
- ์ซ์ํ
- ์ฐธ์กฐํ ๋ฐ์ดํฐ ํ์
- ๋ฐฐ์ด ํ์
- ์ด๊ฑฐ ํ์
- ํด๋์ค, ์ธํฐํ์ด์ค
๋ต๋ณ
- Enum์ด ๋์ค๊ฒ ๋ ์ด์ ๋ ์ฌ๊ธฐ์ฐธ๊ณ
- Enum์ด๋?
- ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ์ ์๋ฏธํ๋ค.
- ํด๋์ค๋ฅผ ์ด์ฉํ ์์
- ๊ฐ๊ฐ์ ์์๋ค์ ๋ชจ๋ ์ธ์คํด์คํ๋ ์ฑ๊ธํค ๊ฐ์ฒด์ด๋ค.
- ์ด๋ก ์ธํด ๊ฐ๊ฐ์ ์์๋ค์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๊ฒ ๋๋ค. (์ฐธ์กฐ ๋ณ์์ด๋ฏ๋ก)
- ๊ฐ์ ์งํฉ์ ์์๋ค์ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๋ฏ๋ก ์๋ก ๋ค๋ฅธ ์งํฉ์ ์์๋ผ๋ฆฌ ๋น๊ต ์ฐ์ฐ์ ์ปดํ์ผ ์์ ๋ง์ ์ ์๋ค.
- Enum ์ฌ์ฉ์ด์
- ์์๋ฅผ ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. - ์ถ๊ฐ ์์ฑ + ๋ฉ์์ง๋ฅผ ํตํ ์์จ์ฑ ๋ณด์ฅ๋ฑ๋ฑ (if๋ฌธ์ ์ค์ผ ์ ์๋ค)
- ์๋ก ์ฐ๊ด๋ ์์๋ค๋ผ๋ฆฌ ์งํฉ์ผ๋ก ๋ฌถ๊ณ , ์๋ก ๋ค๋ฅธ ์งํฉ์ ์์๋ผ๋ฆฌ ๋น๊ต ์ฐ์ฐ์ ์ปดํ์ผ ํ์์ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ.
๋ต๋ณ
- ์ปดํ์ผ ํ์๋ ๋ฐํ์๋ ์คํ๋๋ ํ์ ์ ์์ ์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด.
- ์๋ฐ๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ณต๋ณ์ฑ์ ํน์ง์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, ๋ฒ๊ทธ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ฐ๋ผ์, ์ปดํ์ผ ํ์์ ๋ฐํ์์ ์ฌ์ฉ๋๋ ํ์
์ ๊ฒ์ฆ์ ํ๊ธฐ ์ํจ์ด๋ค.
<Object>
: Object๋ง์ ๋ฐ์ ๋ค์ธ๋ค.<? extends Object>
: Object๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ๋ค์ธ๋ค.
- ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
List
๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ๋งค๋ฒget
ํ ๋๋ง๋ค ํ์ ์บ์คํ ์ ํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ํ์ ์บ์คํ ์ด ์๋ชป๋๋ฉด ๋ฐํ์์ClassCastException
์ด ๋ฐ์ํ๊ฒ ๋๋ค. (์ปดํ์ผ ํ์๋ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ )
๋ต๋ณ
- ์ค๋ฒ๋ก๋ฉ: ์ฌ๊ตฌ์ฑ
- ํ ํด๋์ค ๋ด์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ๋ ๊ฒ.
- ๋จ, ๊ธฐ์กด ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋๋ ํ์ ์ด ๋ฌ๋ผ์ผํ๋ค. (๋ฉ์๋ ์ด๋ฆ๊ณผ ๋งค๊ฐ๋ณ์๋ ๋ชจ๋ ๊ฐ์๋ฐ ๋ฐํ ํ์ ์ด ๋ค๋ฅด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.)
- ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ.
- ์ค๋ฒ๋ผ์ด๋ฉ: ์ฌ์ ์
- ์ธํฐํ์ด์ค ํน์ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์.
- ๊ธฐ์กด์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ.
๋ต๋ณ
- JAVA 7๋ถํฐ ์ง์ํ๋ ๊ธฐ๋ฅ
Closeable
์ ๊ตฌํํ๊ณ ์๋ ๊ฐ์ฒด๋ง์ด ์ฌ์ฉ ๋์์ด ๋ ์ ์๋ค. ๋ฆฌ์์ค์ ๋ํ ์๋ ๋ฐ๋ฉ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
๋ต๋ณ
- Stream์ด๋?
- Stream์ ์ ์ธํ ๋ฐฉ์์ผ๋ก ์ปฌ๋ ์
๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ API.
- ์ ์ธํ ๋ฐฉ์: ๋ด๋ถ ๋ฐ๋ณต (WHAT) -> Stream์ ์ด์ฉํ ๋ด๋ถ ๋ฐ๋ณต
- ๋ช ๋ นํ ๋ฐฉ์: ์ธ๋ถ ๋ฐ๋ณต (HOW) -> ๊ธฐ์กด์ ๋ฐ๋ณต๋ฌธ์ ํตํ ์ธ๋ถ ๋ฐ๋ณต
- ์คํธ๋ฆผ์ '๋ฐ์ดํฐ์ ํ๋ฆ'์ด๋ค. ๋ฐฐ์ด ๋๋ ์ปฌ๋ ์
์ ํจ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐํฉํด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๊ณ ๊ฐ๊ณต๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- DB์ ์ฟผ๋ฆฌ(SELECT)์ ๊ฐ์ด ์ ํํ๋ ์ฒ๋ฆฌ ํจํด์ ์ ์ฉ์ํจ ๊ฒ.
- ๋ฐฐ์ด ํน์ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌ(Stream์ ๋์ผํ๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉ)ํ๋ ๊ฒ.
- Stream์ ์ ์ธํ ๋ฐฉ์์ผ๋ก ์ปฌ๋ ์
๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ API.
- Stream์ ํน์ง
- ์คํธ๋ฆผ์ ์ธ๋ถ ๋ฐ๋ณต์ ํตํด ์์
ํ๋ ์ปฌ๋ ์
๊ณผ๋ ๋ฌ๋ฆฌ ๋ด๋ถ ๋ฐ๋ณต (internal interation)์ ํตํด ์์
์ ์ํํ๋ค
- ์ธ๋ถ ๋ฐ๋ณต ์์ : for๋ฌธ, ๋ด๋ถ ๋ฐ๋ณต ์์ : stream()....
- ์คํธ๋ฆผ์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ปฌ๋ ์ ๊ณผ๋ ๋ฌ๋ฆฌ ๋จ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค. (๋ถ๋ณ)
- ์คํธ๋ฆผ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
- ์คํธ๋ฆผ์ ์ฐ์ฐ์ ํํฐ-๋งต(filter-map) ๊ธฐ๋ฐ์ API๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ (lazy) ์ฐ์ฐ์ ํตํด ์ฑ๋ฅ์ ์ต์ ํํ๋ค.
- ์คํธ๋ฆผ์ parallelStream() ๋ฉ์๋๋ฅผ ํตํ ์์ฌ์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
- ์คํธ๋ฆผ์ ์ธ๋ถ ๋ฐ๋ณต์ ํตํด ์์
ํ๋ ์ปฌ๋ ์
๊ณผ๋ ๋ฌ๋ฆฌ ๋ด๋ถ ๋ฐ๋ณต (internal interation)์ ํตํด ์์
์ ์ํํ๋ค
- ๊ตฌ์กฐ
- ์์ฑ
- ์ค๊ฐ ์ฐ์ฐ
- ์ต์ข ์ฐ์ฐ๏ฟฝ
๋ต๋ณ
- map์ ๋จ์ผ ์คํธ๋ฆผ ์์ ์์๋ฅผ ์ํ๋ ํน์ ํํ๋ก ๋ณํ์์ผ์ฃผ๋ ์ค๊ฐ ์ฐ์ฐ ๋ฉ์๋.
- flatmap์ ์คํธ๋ฆผ์ ํํ(์์)๊ฐ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์ผ ๋ ๊ฐ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ฅผ ํน์ ํํ๋ก ๋ณํํ๊ณ ๋จ์ผ ์์ ์คํธ๋ฆผ์ผ๋ก ๋ฐํ์์ผ์ฃผ๋ ์ค๊ฐ ์ฐ์ฐ ๋ฉ์๋.
๋ต๋ณ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ํจ์๋ฅผ ๊ฐ์ผ๋ก ๋ฐ๋ผ๋ณด๊ณ ๋ช ๋ นํ์ด ์๋ ์ ์ธํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๋งํ๋ค.
- ๋ช
๋ นํ๊ณผ ์ ์ธํ
- ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
- What๋ณด๋ค๋ How์ ๋ํ๋.
- ex. ํด๋์ค์์ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ํ์ํ ๋ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ช ๋ นํ์ฌ ๋์.
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
- How๋ณด๋ค๋ What์ ์ค๋ช .
- ex. ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ณ , ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ณผ์ (ํ๋ฆ)์ ์ ์ํ๋ ๊ฒ์ผ๋ก ๋์.
- ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์กฐ๊ฑด
- ์์ ํจ์
- ๋ถ์ํจ๊ณผ๊ฐ ์์ผ๋ฉฐ, ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
- ๋ฉํฐ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ๋ค.
- ๊ณ ์ฐจ ํจ์
- ์ผ๊ธ ํจ์์ ํน์ง์ ๋ง์กฑํด์ผํ๋ค.
- ํจ์์ ์ธ์๋ก ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
- ํจ์์ ๋ฆฌํด๊ฐ์ผ๋ก ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค
- ์ต๋ช
ํจ์
- ์ด๋ฆ์ด ์๋ ํจ์. ์๋ฐ์์์ ์ต๋ช ํด๋์ค ํน์ ๋๋ค์.
- ํฉ์ฑ ํจ์
- ์๋ก์ด ํจ์๋ฅผ ์์ฑํ๊ฑฐ๋ ์ด๋ค ๊ณ์ฐ์ ์ํํ๊ธฐ ์ํด ๋ ์ด์์ ํจ์๋ฅผ ๊ฒฐํฉํ๋ ๊ฒ์ด๋ค.
- ๋ฉ์๋ ์ฒด์ด๋
- ์์ ํจ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
- ๋ถ๋ณ์ฑ
- ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒ.
- ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด, ๋ถ์ ํจ๊ณผ๊ฐ ์๊ธฐ๊ฒ ๋์ด ์์ํจ์์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ค.
- ์ฐธ์กฐ ํฌ๋ช
์ฑ (์์ ํจ์)
- ํ๋ก๊ทธ๋จ ๋์์ ๋ณ๊ฒฝ์์ด ๊ด๋ จ ๊ฐ์ ๋์ฒดํ ์ ์๋ค๋ฉด ํํ์์ ์ฐธ์กฐ ์ ํฌ๋ช ํ๋ค๊ณ ํ๋ค.
- ์ฆ, ์ฐธ์กฐ์ ํฌ๋ช ํ ํจ์๋ ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
- ์ผ๊ธ ํจ์
- ํจ์๋ฅผ ํจ์์ ๋งค๊ฐ๋ณ์, ๋ฐํ ๊ฐ, ์๋ฃ๊ตฌ์กฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ๊ฒ์ผ๋ฅธ ํ๊ฐ
- ํจ์ํ ์ธ์ด์์๋ ๊ฐ์ด ํ์ํ ์์ ์ ํ๊ฐ๋๋ค.
- ๋ถ๋ณ์ฑ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์
- ๋์์ฑ์์ ๋ฐ์ํ ์ ์๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์์จ ์ ์๋ค.
- ๋ฉํฐ ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ค๋ ๋ ์ธ์ดํ๋ฅผ ๋ณด์ฅํ๋ฉด์ ์์ ์ ์ผ๋ก ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
- ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ง์ํ๋ค. ๊ฐ๋ฐ์๋ How๋ณด๋ค๋ What์ ์ง์คํ ์ ์๋ค. (ํต์ฌ ๊ฐ์น์ ์ง์ค ๊ฐ๋ฅ)
- ํจ์ ๋จ์์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์์ํ๋ค.
- ๋ถ๋ณ์ด๊ธฐ์ ์ฝ๋๋ฅผ ์์ธกํ๊ธฐ ์ฝ๋ค.
๋ต๋ณ
- Lambda์์ด๋
- ๋๋ค์์ ๋ฉ์๋(ํจ์)๋ฅผ ํ๋์ '์(expression)'์ผ๋ก ํํํ ๊ฒ์ด๋ค
- ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋ ์ต๋ช ํด๋์ค ๋ฉ์๋๋ฅผ ๋จ์ํ ํ ๊ฒ.
- ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ๋๋ค์์ ๊ตฌํํ๋ค.
- Lambda๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
- ์ผ๊ธ ๊ฐ์ฒด์ ์ญํ ์ ์ํํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ์๋ ์๋ค. ๋ํ, ๋ณ์์ ๋ด๊ฑฐ๋, ๋ฉ์๋์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐํ๋ ์๋ ์๋ค.
- ์ฅ์
- ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ฌ์ฃผ๊ณ , ๊ฐ๋ ์ฑ์ ๋์ฌ์ค๋ค.
- ์ต๋ช ํด๋์ค์๋ ๋ค๋ฅด๊ฒ ํด๋์ค๋ฅผ ์์ฑํ์ง ์๋๋ค.
๋ต๋ณ
- ๋์ ์ฐจ์ด์ ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ์ต๋ช
๋ด๋ถ ํด๋์ค๋ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ์ง๋ง, ๋๋ค๋ ์๋ก์ด ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ํฌํจํ๋ค.
- ์ต๋ช
๋ด๋ถ ํด๋์ค
- static ์ค์ฒฉ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
- ๋๋ค์
- ๋๋ค์์ static์ด๋ , ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์ ์ํ non-static์ด๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์๊ณ , ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
- ์ต๋ช
๋ด๋ถ ํด๋์ค
- this
- ์ต๋ช
๋ด๋ถ ํด๋์ค์ this: ์๋ก ์์ฑ๋ ํด๋์ค
- ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์, ์ต๋ช ๋ด๋ถ ํด๋์ค์์์ this๋ ์ต๋ช ํด๋์ค ์์ ์ ๊ฐ๋ฆฌํจ๋ค.
- ๋๋ค์์ this: ๋๋ค์์ด ์ ์ธ๋ (ํฌํจํ๊ณ ์๋) ํด๋์ค
- ๋๋ค์์ ์๋ก์ด ๋ฉ์๋๋ก ๋ณผ ์ ์์ผ๋ฉฐ, ๋ฉ์๋์์ this๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๋ฅผ ์๋ฏธํ๋ค.
- ์ฆ, ๋๋ค์์์ this๋ ๋๋ค๋ฅผ ํฌํจํ๋ ํด๋์ค์ ์ธ์คํด์ค์ด๋ค.
- ์ต๋ช
๋ด๋ถ ํด๋์ค์ this: ์๋ก ์์ฑ๋ ํด๋์ค
- ๋ฉ์๋์ ๊ฐ์
- ์ต๋ช ๋ด๋ถ ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋๋ค์์
@FunctionalInterface
๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ํ๋ ์ด์์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ๋๋ค๋ ์ผ์ข
์ ํด๋ก์ ๋ค.
- ํด๋ก์ : ํจ์ ๋ฒ์ ๋ฐ์ ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ํจ์
- ๋๋ค๊ฐ ๋๋ค์ ๋ฒ์ ๋ฐ์ ๋ณ์์ ์ ๊ทผํ๊ณ ์ ํ๋ค๋ฉด, ํด๋น ๋ณ์๋
final
์ด์ด์ผ ํ๋ค.
๋ต๋ณ
- ๊ทผ๋ณธ์ ์ผ๋ก ๋์ผ. ํจ์๋ ์ผ๋ฐ์ ์ฉ์ด, ๋ฉ์๋๋ ๊ฐ์ฒด์งํฅ๊ฐ๋ ์ฉ์ด
- ํจ์๋ ํด๋์ค์ ๋
๋ฆฝ์
- ํจ์(๋๋ค์)๋ ์ด ๋ชจ๋ ๊ณผ์ ์์ด ์ค์ง ํจ์(๋๋ค์) ์์ฒด๋ง์ผ๋ก๋ ์ด ๋ฉ์๋์ ์ญํ ์ ์ํํ ์ ์๋ค.
- ๋ฉ์๋๋ ํด๋์ค์ ์ข
์์
- ๋ชจ๋ ๋ฉ์๋๋ ํด๋์ค์ ํฌํจ๋์ด์ผํ๋ฏ๋ก ํด๋์ค๋ ์๋ก ๋ง๋ค์ด์ผ ํ๋ค.
๋ต๋ณ
- ์ถ๊ฐ๋ ๊ธฐ๋ฅ
- ๊ฐ์ฅ ํฌ๊ฒ ์ถ๊ฐ๋ ๋ถ๋ถ์ Java์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ธฐ ์์. (๋๋ค, ์คํธ๋ฆผ)
- LocalDate, LocalDateTime ํด๋์ค๊ฐ ์๋ก ์๊น.
- ์ด์ ์ Date์ Calendar๋ ๊ฐ๋ณ์ด์๋ค. ์ฆ, set์ ํตํด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค. ๋ํ, ๊ฐ์ฒด์ ์ญํ ์ด ๋ถ๋ด๋์ด ์์ด, ๋ /์/์ผ์ ํํํ๊ณ ๊ณ์ฐํ๊ธฐ ์ํด ๋ ๋ชจ๋๋ฅผ ์์ฑํ๋ ๋น์ฉ์ด ๋ ๋ค.
- LocalDate์ LocalDateTime์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ์ธํฐํ์ด์ค์ default ๋ฉ์๋ ์ ์ ๊ฐ๋ฅํด์ง.
- Optional
๋ต๋ณ
==
: ๋์ผ์ฑ==
์ primitive๋ฉด ๊ฐ ๋น๊ต, reference์ด๋ฉด ์ฃผ์ ๋น๊ต๋ฅผ ํตํด boolean ๊ฐ์ ๋ฆฌํดํ๋ค.
equals()
: ๋๋ฑ์ฑequals()
๋ Object ํด๋์ค์ ์ ์๋ ๋ฉ์๋์ด๋ฉฐ, ๊ฐ์ฒด์ ๊ฐ์ ๋น๊ตํ์ฌ boolean ๊ฐ์ ๋ฆฌํดํ๋ค.equals()
์hashCode()
๋ฅผ ์ฌ์ ์ํจ์ผ๋ก์จ ๋๋ฑ์ฑ์ ๊ตฌํํ๋ค.
hashCode()
๋ฅผ ์ฌ์ ์ํ์ง ์๋๋ค๋ฉด?HashMap
๊ณผHashTable
์์ key์ ๋ํ ์ค๋ณต ์ฌ๋ถ๋ฅผequals()
์hashCode()
๋ก ํ๊ธฐ ๋๋ฌธ์, ๋ ๋ค ์ฌ์ ์ํด์ค์ผํ๋ค.hashCode()
๋ฅผ ์ฌ์ ์ํ ๋, ํด๋น ๊ฐ์ฒด์ ์ํ๋ฅผ ํตํด ํด์๊ฐ์ ๊ณ์ฐํด์ผํ๋ค.
- ๋ ์์ธํ ๋ด์ฉ
๋ต๋ณ
- ๋ค๋ฅธ ์
- ์ปดํ์ผ ๋ ์์ธ์ฒ๋ฆฌ ์ฌ๋ถ
- Checked Exception
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณ๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ์์ธ.
- ๋น๊ด์ ์ธ ์์ธ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ด๋ผ ๋ถ๋ฆฐ๋ค.
- ex. SQLException, IOException
- Unchecked Exception
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณ๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๋ ์์ธ.
- ๋๊ด์ ์ธ ์์ธ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ด๋ผ ๋ถ๋ฆฐ๋ค.
- ex. NPE, RuntimeException
๋ต๋ณ
- ์์นซ ์๋ชปํ๋ฉด ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ๋ฌด์ฑ
์ํ๊ฒ
throws
๋ก ์์ธ๋ฅผ ๋์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. - OCP๋ฅผ ์๋ฐํ๊ฒ ๋ ์๋ ์๋ค. -> ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค.
- ํน์ ํด๋์ค์ ์์กดํ๋ ๋ค๋ฅธ ํด๋์ค๋ค๋ก ์์ธ ์๊ทธ๋์ฒ๊ฐ ์ ๋ฌ๋๊ณ , ๊ทธ๋ก์ธํด ๋ฐ์ํ๋ ๊ฒฐํฉ๋๊ฐ ์ ์ง๋ณด์์ฑ์ ์ ์ํฅ์ ๋ผ์น๋ค.
- ๋ํ, ๋ชจ๋ ์์ ๋ฉ์๋๋ค์ด ์ตํ์ ๋ฉ์๋์ ์์ธ ์๊ทธ๋์ฒ๋ฅผ ์์์ผ ํ๋ฏ๋ก ์บก์ํ๊ฐ ๊นจ์ง๋ค.
- ์์ธ๋ฅผ
throw
ํ ๋ฉ์๋์ depth๊ฐ 3๋ง ๋ฉ์ด์ ธ๋ ์ด ์์ธ์ ๋ฐ์ ๊ทผ์์ง๋ฅผ ์ถ์ธกํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค.- ์ด๋์ ์ง์ง ์์ธ๊ฐ ๋ฐ์ํ๋์ง ์ฐพ๊ธฐ๊ฐ ํ๋ค๋ค๋ ๊ฒ.
- ๋ฌผ๋ก ๋ฐ๋ ์๊ฒฌ๋ ์๋ค. ๋ฐ๋ก
์๋ ๊ฐํธ ์ค๋ธ์ ํธ
..- ๊ฐ ํด๋์ค, ๋ฉ์๋์ ์๊ทธ๋์ฒ๊ฐ ์์ฃผ ๋ช ํํด์ผ ํ๋ค๋ ์๊ฒฌ์ด๋ค.
- ์ฆ, ์์ธ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฉ์๋๊ฐ Unchecked Exception์ ์ฌ์ฉํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์์ธ๋ค๋ ๊ฒ!
- ํ์ง๋ง, ๊ฐ์ธ์ ์ผ๋ก Unchecked๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฌธ์ํ๋ฅผ ํ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค.
- Checked Exception ์ง์ํ ์์
- SQLException -> DataAccessException
๋ต๋ณ
์บ์คํ == ํ๋ณํ
- ์
์บ์คํ
- ํ์ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค ํ์ ์ผ๋ก ํ๋ณํ ๋๋ ๊ฒ.
- ์์ ํด๋์ค ํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ฉด ๋ฌต์์ ์ผ๋ก ์ ์บ์คํ ์ด ๋ฐ์ํ๋ค.
- ๋ฌผ๋ก ์ด๋, ํ์ ํด๋์ค์ ๋ฉค๋ฒ์๋ ์ ๊ทผ ๋ถ๊ฐํ๋ค.
- ๋ค์ด์บ์คํ
- ์์ ์ ๊ณ ์ ํ ํน์ฑ์ ์์ ํ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ณต๊ตฌ์์ผ์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ฆ, ์ ์บ์คํ ๋ ๊ฒ์ ๋ค์ ์์ํ๋ก ๋๋ฆฌ๋ ๊ฒ.
- ์ฃผ์ ํ ์ ์ ์ ์บ์คํ ์ด ์ ํ๋์ด์ผ ํ๋ฉฐ, ๋ช ์์ ์ผ๋ก ํ์ ์ ์ง์ ํด์ค์ผํ๋ค.
๋ต๋ณ
- ๋ฐ์ธ๋ฉ
- ํ๋ก๊ทธ๋จ ๊ตฌ์ฑ ์์์ ์ฑ๊ฒฉ์ ๊ฒฐ์ ํด์ฃผ๋ ๊ฒ.
- ex. ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ด ๋ฌด์์ธ์ง ์ ํด์ง๋ ๊ฒ.
- ์ ์ ๋ฐ์ธ๋ฉ
- ์ปดํ์ผํ์์ ์ฑ๊ฒฉ์ด ๊ฒฐ์ ๋๋ค.
- ๋ณ์์ ๊ฒฝ์ฐ ์ ์ ํ ๋น(ex. c, c++,java). ์ปดํ์ผ ํ์์ ํ์ ์ด ๊ฒฐ์ ๋จ.
- ๋ฉ์๋์ ๊ฒฝ์ฐ, ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ค.
- ์ปดํ์ผํ์์ ์ฑ๊ฒฉ์ด ๊ฒฐ์ ๋๋ค.
- ๋์ ๋ฐ์ธ๋ฉ
- ๋คํ์ฑ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, ๋ฐ์ํ๋ ํ์.
- ๋ฐํ์์ ์ฑ๊ฒฉ์ด ๊ฒฐ์ ๋๋ค.
- ๋ณ์์ ๊ฒฝ์ฐ ๋์ ํ ๋น(ex. python, kotlin). ๋ฐํ์์ ํ์ ์ด ๊ฒฐ์ ๋จ.
- ๋ฉ์๋์ ๊ฒฝ์ฐ, ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ๋ฐํ์์ ๊ฒฐ์ ๋๋ค.
๋ต๋ณ
- Collection
- ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ๋ฃจํธ ์ธํฐํ์ด์ค.
List
,Set
,Queue
๋ฑ์ ๋ชจ๋Collection
์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ค.- ํ์ง๋ง,
map
์ธํฐํ์ด์ค๋ ๋จ์ํ ๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋List
,Set
๊ณผ ๋ค๋ฅด๊ฒ ํค:๊ฐ์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์,Collection
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ง ์๋๋ค. ๊ทธ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ๊ฐ์ด ์ ์๋ง ๋์ด์๋ค.
- Collections
- ์ปฌ๋ ์ ์ ๋์์ผ๋ก ํ๋ ์ ๋ ฌ, ๊ฒ์, ์ต์, ์ต๋๊ฐ๊ฒ์ ๋ฑ์ ์ง์ํ๋ ์ ํธ์ฑ ๊ฐ์ฒด์ด๋ค.
๋ต๋ณ
- String์ ๋ถ๋ณ, ๋๋จธ์ง ๋์ ๊ฐ๋ณ
- String์ ๋ถ๋ณ์ด๋ฏ๋ก ์ง์ ๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋๋จธ์ง ๋์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
- StringBuffer์ StringBuilder์ ์ฅ์
- ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๊ธฐ์ ๋ง์ ๋ฌธ์์ด ์ฐ์ฐ์์ ๋ ํจ์จ์ ์ด๋ค.
- StringBuffer์ StringBuilder์ ์ฐจ์ด์
- StringBuffer๋ equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์๋๋ค.
- StringBuilder๋ StringBuffer์์ ์ค๋ ๋ ๋๊ธฐํ ๊ธฐ๋ฅ๋ง ๋บ ํด๋์ค์ด๋ค. ๋ฉํฐ ์ค๋ ๋๊ฐ ์๋๋ผ๋ฉด StringBuilder๊ฐ ๋ ํจ์จ์ ์ด๋ค.
๋ต๋ณ
- ๊ณตํต์
- ๋ชจ๋ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ด๋ฉฐ,
key:value
๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ค.
- ๋ชจ๋ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ด๋ฉฐ,
- thread-safe
- HashMap์ ์ฃผ์ ๋ฉ์๋์ synchronized ํค์๋๊ฐ ์์ด thread-safeํ์ง ์๋ค.
- HashTable์ ์ฃผ์ ๋ฉ์๋์ synchronized ํค์๋๊ฐ ์์ด thread-safeํ๋ค. ๋น์ฐํ HashMap๋ณด๋ค ๋๋ฆฌ๋ค.
- ConcurrentHashMap์ ์ฃผ์ ๋ฉ์๋์ synchronized ํค์๋๊ฐ ์์ง๋ง, thread-safeํ๋ค. ์๋ก ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ฐ์ ํด์ ๋ฒํท์ ์ ๊ทผํ ๋๋ง ํด๋น ๋ธ๋ก์ด ์ ๊ธฐ๊ฒ ๋๋ฏ๋ก, HashTable๋ณด๋ค ํจ์จ์ ์ด๋ค.
- HashTable์ ํ๋์ ๋ฒํท์ ์ ๊ทผํด๋ ๋ชจ๋ ๋ฒํท์ ์ ๊ธ ์ํ๋ก ๋ง๋ค์ง๋ง, ConcurrentHashMap์ ํด๋น ํด์ ๋ฒํท๋ง์ ์ ๊ธํ๋ค.
- null ํ์ฉ
- HashMap์ key, value์ null์ ํ์ฉํ๋ค.
- HashTable๊ณผ ConcurrentHashMap์ key, value์ null์ ํ์ฉํ์ง ์๋๋ค.
๋ต๋ณ
- ์กฐํ
- HashMap์ Hashing์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์กฐํ์ O(1)์ด๋ค.
- TreeMap์ ๋ด๋ถ์ ์ผ๋ก Red-Black ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์กฐํ์ O(logN)์ด๋ค.
- ๋ฐ์ดํฐ ์์
- HashMap์ ๋ฐ์ดํฐ์ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค.
- TreeMap๊ณผ LinkedHashMap์ ๋ฐ์ดํฐ์ ์์๋ฅผ ๋ณด์ฅํ๋ค.
๋ต๋ณ
- Stack์ ๋ฌธ์ ์
- Vector๋ฅผ ์์๋ฐ๋๋ค. Vector๋ LIFO๊ฐ ์๋ ์ค๊ฐ์ ๋ฐ์ดํฐ ์ฝ์ , ์ญ์ ์ฐ์ฐ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ Stack์ ๋ณธ์ง์์ ๋ฒ์ด๋๋ค.
- Stack์ synchronized ํค์๋๋ก thread-safe๋ฅผ ๋ณด์ฅํ๋ค. ์ด๋ ์ฑ๋ฅ์ ์ผ๋ก ์ค๋ฒํค๋๊ฐ ํฌ๋ค. ์ค์ฌ์ฉ ์๋ฒ์์ ์ข์ ์ ํ์ด ์๋๋ค.
- Stack ๋์ ๋ฌด์์ ์จ์ผํ๋๊ฐ?
- Java API ๋ฌธ์์์๋ ๋ ์๋ฒฝํ LIFO ์๋ฃ๊ตฌ์กฐ๋ก Deque์ ๊ตฌํ์ฒด์ธ ArrayDeque๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ์ถ์ฒํ๋ค.
- thread-safeํด์ผํ๋ค๋ฉด, ConcurrentLinkedDeque์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๋ lock-freeํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ thread-safe๋ฅผ ๋ณด์ฅํ์ฌ ์ฑ๋ฅ์ ๋ ์ ๋ฆฌํ๋ค๊ณ ํ๋ค.
๋ต๋ณ
- ์๋ฐ์์ class ์์ class๋ฅผ ์ ์ธํ ์ ์๋ค.
- ์ด๋ฅผ ํตํด ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฐ์งํ๋ฅผ ํ ์ ์์ผ๋ฉฐ, ๋ถํ์ํ ์ธ๋ถ ๋ ธ์ถ์ ์ค์ฌ ์บก์ํ๋ฅผ ํ ์ ์๋ค. ๋ํ, ๊ฐ๋ ์ฑ์ ๋์ด๋ฉฐ ์ ์ง ๋ณด์ํ๊ธฐ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ข
๋ฅ
- Static Nested Class
- Inner Class
- Local Inner Class
- Anonymous Class
- Static Nested Class vs Inner Class
- ๋์ ์ฐจ์ด์ ์ static์ผ๋ก์ ์ ์ธ ์ฌ๋ถ์ด๋ค. Inner Class๋ static์ ๋ถ์ด์ง ์๋ ๊ฒฝ์ฐ๋ค.
- ๋ฉค๋ฒ ์ ๊ทผ
- Static Nested Class๋ Outer Class์ static ๋ฉค๋ฒ๋ฅผ ์ ์ธํ ์ด๋ ํ ๋ฉค๋ฒ๋ ์ ๊ทผํ ์ ์๋ค.
- Inner Class๋ Outer Class์ ๋ชจ๋ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด ์์ฑ
- Static Nested Class๋ Outer Class์ ๊ด๊ณ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑ ๊ฐ๋ฅ.
- Inner Class๋ Outer Class์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- Inner Class์ ๊ฒฝ์ฐ ๋ณดํต Outer Class์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค. ์ด๋ก์ธํด GC๊ฐ ์๊ฑฐํ์ง ๋ชปํด, ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- Nested Class๋ฅผ ๊ตฌํํ๋๋ฐ Outer Class์ ๋ํ ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค๋ฉด, ๋ฌด์กฐ๊ฑด Static Nested Class๋ก ์ ์ธํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
๋ต๋ณ
- ์ ๊ทผ ์ ์ด์๋?
- ํด๋์ค๋ ๋ฉค๋ฒ ์ ์ธ ์ ๋ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ํค์๋.
- ๊ฐ์ฒด์งํฅ์ ์ ๋ณด ์๋(์บก์ํ)์ ์ํด ์ฌ์ฉ๋๋ค.
- ์ข
๋ฅ
- public: ์ธ๋ถ์ ์ ์ฒด ๊ณต๊ฐ๋๋ฉฐ, ์ด๋์์๋ ์ ๊ทผํ ์ ์๋ค.
- protected: ๊ฐ์ ํจํค์ง ํน์ ๋ค๋ฅธ ํจํค์ง์์ ํด๋น ํด๋์ค๋ฅผ ์์ํ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- default: ํด๋์ค ๋ฉค๋ฒ๋ ๊ฐ์ ํด๋์ค์ ๋ฉค๋ฒ์ ๊ฐ์ ํจํค์ง์ ์ํ๋ ๋ฉค๋ฒ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- private: ๊ฐ์ ํด๋์ค ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, ์ธ๋ถ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋ต๋ณ
- System.out.println์ ๋จ์
- ๋ก๊ทธ๊ฐ ์์คํ ์ฝ์์๋ง ์ถ๋ ฅ๋๋ค.
- ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํ ์ ์๋ค.
- ๋ด๋ถ์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ thread-safe๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด synchronized๋ฅผ ์ด์ฉํ๋ฏ๋ก ์ฑ๋ฅ์ด ์ข์ง ์๋ค.
- ๋ก๊น
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฅ์
- ๋ง์ ๋ถ๊ฐ ์ ๋ณด (์ค๋ ๋ ์ ๋ณด, ํด๋์ค ์ด๋ฆ)๋ฅผ ์ฝ๊ฒ ๋ณผ ์ ์๋ค.
- ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํ ์ ์๋ค.
- ๋ก๊ทธ๋ฅผ ์์คํ ์ฝ์ ์ธ์๋ ํ์ผ์ด๋ ํน์ ์๋ฒ๋ก ๋ณด๋ผ ์ ์๋ค. (์ ์ฅ ๊ฐ๋ฅ)
- ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋๋ก ๋ง๋ค ์ ์๋ค. (์ฑ๋ฅ์ ์ข์)
๋ต๋ณ
- ์ง๋ ฌํ : ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฒ
- ๊ฐ์ฒด -> ์คํธ๋ฆผ (์ ์ก ํน์ ์ ์ฅํ๊ธฐ ์ํจ)
- ์ญ์ง๋ ฌํ : ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ์ฌ ๊ฐ์ฒด์ ํํ๋ก ํํํ๋ ๊ฒ
- ์คํธ๋ฆผ -> ๊ฐ์ฒด (์ ์ก ํน์ ์ ์ฅ๋ ๊ฒ์ ๋ค์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๊ธฐ ์ํจ)
๋ต๋ณ
- ์์ ๋ณต์ฌ : ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฉค๋ฒ๋ค์ ๊ทธ๋๋ก ๋ณต์ฌํ๋ค.
- ๊ฐ์ฒด์์ ์ ์ฅ๋ ๋ฉค๋ฒ์ค ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ ๋ณต์ ๋์ง ์๋๋ค.
- ์ฐธ์กฐ๋ณ์๋ง ๋ณต์ ๋๊ณ , ํ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด๋ ๊ทธ๋๋ก ๋จ์ ์๋๋ค.
- ์๋ณธ์ ๋ณ๊ฒฝํ๋ฉด ๋ณต์ฌ๋ณธ๋ ์ํฅ์ ๋ฐ๋๋ค. ( ํ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ ๊ทธ๋๋ก์ด๊ธฐ ๋๋ฌธ์ )
- ๊น์ ๋ณต์ฌ : ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฉค๋ฒ๋ค์ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๊น์ง ๋ณต์ ํ๋ค.
- ๊ฐ์ฐจ์์ ์ ์ฅ๋ ๋ฉค๋ฒ์ค ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๊น์ง ๋ณต์ ํ๋ค.
- ์ฐธ์กฐ๋ณ์๋ ๋ณต์ ํ๊ณ , ํ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด๊น์ง ๋ณต์ ํ๋ค. ( new๋ฅผ ํตํด ์ธ์คํด์คํ )
- ์๋ณธ์ ๋ณ๊ฒฝ์ด ๋ณต์ฌ๋ณธ์ ์ํฅ์ ๋ผ์น์ง ๋ชปํ๋ค. ( ํ์ ์ ์ฅ๋ ๊ฐ์ฒด๊ฐ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ )
๋ต๋ณ
๋ต๋ณ
- JVM์ด๋
- ์๋ฐ ๊ฐ์ ๋จธ์ .
- ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์ฃผ์ฒด๋ค.
- JVM์ ํน์ง
- WORA (Write Once, Run Anywhere)
- JVM์ ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ๋ชจ๋ ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์๋ฐ ๊ฐ์ ๋จธ์ ๊ท๊ฒฉ์ ์ ์๋ ๋๋ก ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ค. (์คํ)
- ๋ชจ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ CPU๋ ์ด์ ์ฒด์ ์ ์ข ๋ฅ์ ๋ฌด๊ดํ๊ฒ ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
- ์๋์ฐ, ๋งฅ, ๋ฆฌ๋ ์ค.. ๋ฑ๋ฑ ์ด์์ฒด์ ์ ์ข ์์ ์ด์ง ์๋ค.
- GC
- ํด๋์ค ์ธ์คํด์ค๋ ์ฌ์ฉ์ ์ฝ๋์ ์ํด ๋ช ์์ ์ผ๋ก ์์ฑ๋๊ณ GC์ ์ํด ์๋์ ์ผ๋ก ์๋ฉธ๋๋ค.
- WORA (Write Once, Run Anywhere)
๋ต๋ณ
- JAVA ์์ค ์ฝ๋ ํ์ผ (.java)๋ฅผ JAVA ์ปดํ์ผ๋ฌ (javac)๋ก ๋ฐ์ดํธ ์ฝ๋(.class)๋ก ๋ณํํ๋ค.
- JVM ๋ด์ ์๋ Class Loader๊ฐ runtime data area๋ก ๋ฐ์ดํธ ์ฝ๋ ํ์ผ์ ์ ์ฌํ๋ค.
- Loading -> Linking -> Initializing
- JVM ๋ด์ ์๋ execution engine(Interpreter, JIT Compiler, GC)์ด runtime data area์ ์ ์ฌ๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํด ๋ช ๋ น์ด ๋จ์๋ก ์คํํ๋ค.
๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ
๋ต๋ณ
- ์๋ฐ์ ์คํ ๊ณผ์
- JVM ๋ด์ ์๋ Class Loader๊ฐ runtime data area๋ก ๋ฐ์ดํธ ์ฝ๋ ํ์ผ์ ์ ์ฌํ๋ค.
- Runtime Data Area ๊ตฌ์กฐ
- Method ์์ญ (static ์์ญ)
- ํด๋์ค ์์ค์ ์ ๋ณด (ํด๋์ค ์ด๋ฆ, ๋ถ๋ชจ ํด๋์ค ์ด๋ฆ, ๋ฉ์๋, ๋ณ์)๋ฅผ ์ ์ฅํ๋ค. static์ผ๋ก ์ ์ธ๋ ๋ฐ์ดํฐ๋ค๋ ์ ์ฅ๋๋ค.
- ํ๋ก๊ทธ๋จ์ด ๋๋ ๋๊น์ง ์ ์ง๋๋ ์์์ ์ ์ฅํ๋ค.
- ๋ชจ๋ ์ค๋ ๋์์ ๊ณต์ ํ ์ ์๋ ์์
- Heap ์์ญ
- new๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์ ์ฅ๋๋ค.
- GC์ ๋์์ด ๋๋ ์์ญ.
- ๋ชจ๋ ์ค๋ ๋์์ ๊ณต์ ํ ์ ์๋ ์์.
- Stack ์์ญ
- ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ํด๋น ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ์ํ ์คํ ํ๋ ์์ด ์์ฑ๋๋ ์์ญ. (์ฝ์คํ)
- ์คํ ํ๋ ์ ๋ด์ ์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ, ์ฐธ์กฐ ๋ณ์๋ฑ์ ์ ์ฅํ๋ค.
- ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ์์ญ์ด๋ฉฐ, ์ค๋ ๋ ๊ฐ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- Method ์์ญ (static ์์ญ)
- ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ
ํ ๊ธ
ํ ๊ธ
๋ต๋ณ
- call by value
- ํจ์ ํธ์ถ์ ์ ๋ฌ๋๋ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์.
- ๋ณต์ฌ๋ ์ธ์๋ ํจ์ ์์์ ์ง์ญ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
- ๋ฐ๋ผ์ ํจ์ ์์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋, ํธ์ถ๋ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋ ์ธ๋ถ์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
- Java์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ์
์ ๋ฐ๋ผ ํจ์ ํธ์ถ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋ค.
- primitive type (์์ํ์ ): call by value๋ก ๋์ (int, short, long, float, double, char, boolean)
- reference type (์ฐธ์กฐํ์ ): call by reference์ฒ๋ผ ๋์. (๋ฐฐ์ด, ๊ฐ์ฒด ์ธ์คํด์ค)
- call by reference
- ํจ์ ํธ์ถ์ ์ธ์๋ก ์ ๋ฌ๋๋ ๋ณ์์ ์ฐธ์กฐ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์ (ex. c์ธ์ด์์ ํฌ์ธํฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ธฐ๋ ๊ฒ)
- ๋ฐ๋ผ์ ํจ์ ์์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ํธ์ถ๋ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋ ์ธ๋ถ์ ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
- Java๋ call by value๋ค.
- ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ์ง์ ๋๊ธฐ์ง ์๊ณ , ๊ฐ์ฒด ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋ ๋ค๋ฅธ ๋ณ์๋ฅผ ๋ณต์ฌํด ๋ง๋ค์ด์ ๋๊ธด๋ค.
- ์ธ์คํด์ค์ ์ ๊ทผํ๋ ์ฐธ์กฐ ๊ฐ์ ์ ์ฅํ๋ ๋ณ์๋ฅผ ๋๊ธฐ๋ ๊ฒ.
- Java uses only call by value while passing reference variables as well. It creates a copy of references and passes them as valuable to the methods.
- ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ์ง์ ๋๊ธฐ์ง ์๊ณ , ๊ฐ์ฒด ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋ ๋ค๋ฅธ ๋ณ์๋ฅผ ๋ณต์ฌํด ๋ง๋ค์ด์ ๋๊ธด๋ค.
๋ต๋ณ
- ๋ฆฌํ๋ ์
์ด๋?
- ์ปดํ์ผ๋๊ณ ์คํ๋๋ฉด์ Class Loader์ ์ํด Method ์์ญ์ ๋ก๋ฉ๋์๋ ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋ฐํ์ ์์ ์ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ API์ด๋ค.
- ์ด ๋ชจ๋ ๊ฒ์ ๋ฐํ์์ ํ ์ ์๋ค.
- It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal properties of the program. For example, it's possible for a Java class to obtain the names of all its members and display them.
- ๋ํ์ ์ฌ์ฉ ์์
- Component Scan (ํด๋์ค์ ์ ๋ ธํ ์ด์ ์ ์ค์บํ๊ธฐ ์ํด ํด๋์ค ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๊ธฐ ์ํจ)
- ๋ค์ด๋๋ฏน ํ๋ก์ (Method ์ด๋ฆ)
๋ต๋ณ
- ์ง๋์น ์ฌ์ฉ์ ์ฑ๋ฅ ์ด์๋ฅผ ์ผ๊ธฐํ ์ ์๋ค. ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํ๋ค.
- Component Scan์ฒ๋ผ ํ๋ก๊ทธ๋จ ์คํ์ ํ ๋ฒ๋ง ํ๋ฉด ๋๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ์ปดํ์ผ ํ์์ ํ์ธ๋์ง ์๊ณ ๋ฐํ์ ์์๋ง ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ์ ๊ทผ ์ง์์๋ฅผ ์๋์ ์ผ๋ก ๋ฌด์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์นซํ๋ฉด ๋ณด์์ ์ด์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ต๋ณ
๋๊ธฐํ, ๋น๋๊ธฐํ๋ ๊ฐ๊ฐ ๋ ๊ฐ์ง์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ ๋ฏ ํ๋ค.
- ๋๊ธฐํ
- ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๋ค์ด ๋์์ ์คํ๋๋ ์์ ์ ์๋ก ์์ ์ ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ. ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ. (Lock์ฒ๋ฆฌ)
- ์ด๋ ๋ฉ์๋๊ฐ ์คํํ๋ ๋์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์คํ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋ธ๋กํ๋ ๊ฒ.
- ์์ ์ ์์ฒญํ ํ ํด๋น ์์ ์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ์ฒ๋ฆฌํ๋ ๊ฒ.
- ๋ฉ์๋๋ฅผ ์คํ์ํด๊ณผ ๋์์ ๋ฐํ ๊ฐ์ด ๊ธฐ๋๋๋ ๊ฒฝ์ฐ.
- ๋น๋๊ธฐํ
- ์ด๋ ๋ฉ์๋๋ฅผ ์คํํ๋ ๋์ค์๋ ๋ค์ ๋ฉ์๋๋ฅผ ์คํ์ด ๊ฐ๋ฅํ๋ค. (๋ฉํฐ ์ค๋ ๋)
- ์์ ์ ์์ฒญํ ํ ํด๋น ์์ ์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ.
- ๋ฉ์๋๋ฅผ ์คํ์ํค๋ฉด ๋ฐ๋ก blocking๋์ง ์๊ณ ์ด๋ฒคํธ ํ ํน์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ํด๋น task๋ฅผ ์์ํ๊ณ , ๋ฐ๋ก ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ.
- ex. ajax, ์ค๋ ๋, ๋ก๊น ๋น๋๊ธฐ ์ฒ๋ฆฌ
๋ต๋ณ
- Thread-Safe๋ ๋ฉํฐ ์ค๋ ๋ํ๊ฒฝ์์ ์ด๋ค ํจ์๋ ๋ณ์, ํน์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ค๋ ๋๋ก๋ถํฐ ๋์์ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ ธ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ์๋ฏธํ๋ค.
- ๋ค๋ฅธ ์ค๋ ๋๋ก ์ธํด ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ์๋ฏธ
- ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ๋ณ๊ฒฝํ๋ค๋ฉด ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฎ์ฌ์์์ง๊ธฐ๋๋ฌธ์ Thread-Safeํ๊ฒ ๋ง๋ค์ด์ค์ผํ๋ค.
- Thread-Safe ์์
synchronized
๋ถ์ ๋ฉ์๋,ConcurrentHashMap
๋ฑ๋ฑ
- Thread-Safeํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์
- Mutual Exclusion
- Thread์ Lock์ด๋ Semaphore๋ฅผ ๊ฑธ์ด์ ๊ณต์ ์์์๋ ํ๋์ thread๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
- Thread-Local
- ๊ฐ ์ค๋ ๋์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ ๊ทผ์ ๋ง๋๋ค.
- ๋ถ๋ณ ๊ฐ์ฒด
- ๊ฐ์ฒด ์์ฑ ์ดํ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋ ๋ค. (๋ณ๊ฒฝ์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ ๋ง๋๋ ๊ฒ.)
- Mutual Exclusion
๋ต๋ณ
๋ต๋ณ
- 8๊ณผ ๋น๊ตํ์ฌ 11์์ ๋ณ๊ฒฝ๋ ์
- ํธ์ ๋ฉ์๋๊ฐ ๋ง์ด ์๊ฒผ๋ค.
isBlank()
,repeat()
...๋ฑ๋ฑList.of
๋ ์๊น.
- var ์ฌ์ฉ๊ฐ๋ฅํด์ง (๋์ ํ์ ์ฒดํฌ)
java.nio.file.Files
ํด๋์ค ์ ํธ ๋ฉ์๋ ์ถ๊ฐ๋จ- JDK 11์ Long-Term-Support(LTS)๊ฐ ๋ ๊ธธ๋ค..
- ํธ์ ๋ฉ์๋๊ฐ ๋ง์ด ์๊ฒผ๋ค.
๋ต๋ณ
- ๊ฐ์ฒด์งํฅ์ด๋
- ์ค์ธ๊ณ์ ์กด์ฌํ๋ ์ฌ๋ฌผ์ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ , ๊ทธ ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉฐ ๋์ํ๋๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ.
- ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ์์ "๊ฐ์ฒด"๋ค์ด ์ฃผ๊ฐ ๋์ด, ๊ฐ๊ฐ์ "๊ฐ์ฒด"๊ฐ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ๋น์ฆ๋์ค ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ.
- ๊ฐ์ฒด์งํฅ์ ๋ณธ์ง
- ์์คํ ์ ์ํธ์์ฉํ๋ ์์จ์ ์ธ "๊ฐ์ฒด"๋ค์ ๊ณต๋์ฒด๋ก ๋ฐ๋ผ๋ณด๊ณ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์์คํ ์ ๋ถํ ํ๋ ๋ฐฉ๋ฒ
- ์์จ์ ์ธ ๊ฐ์ฒด
- ์ํ์ ํ์๋ฅผ ํจ๊ป ์ง๋๋ฉฐ ์ค์ค๋ก ์๊ธฐ ์์ ์ ์ฑ ์์ง๋ ๊ฐ์ฒด.
- ์ธ ๊ฐ์ง๋ง ๊ธฐ์ตํ์
- ํด๋์ค๋ ๋๊ตฌ์ผ ๋ฟ์ด๋ค. ์ค์ํ ๊ฒ์ ๊ฐ์ฒด์ ์ญํ , ์ฑ ์, ํ๋ ฅ์ด๋ค.
๋ต๋ณ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ์ ๋ค์ฏ ๊ฐ์ง ๊ธฐ๋ณธ ์์น.
๋ณดํต ์ ์์ค์ SOLID๋ฅผ ๋ง์ด ๊ณ ๋ฏผํ์ง๋ง, ๊ณ ์์ค์๋ ๋์ผํ๊ฒ ์ ์ฉ ๊ฐ๋ฅํ๋ค. ์ด๋ฅผ ๋ต๋ณ์์ ์๊ธฐํ์.
- SRP (Single Responsibility Principle)
- ์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํ๋ค.
- ํ๋์ ๋ชจ๋์ ํ๋์, ์ค์ง ํ๋์ ์กํฐ์ ๋ํด์๋ง ์ฑ
์์ ธ์ผ ํ๋ค.
- ์กํฐ: ํด๋น ๋ชจ๋์ ๋ณ๊ฒฝ์ ์์ฒญํ๋ ํ ๋ช ์ด์์ ์ฌ๋๋ค์ ๊ฐ๋ฆฌํด. (ํ๋ช ํน์ ์ง๋จ)
- ์๋ฐํ๋ ์์
Employee
๋ผ๋ ๊ฐ์ฒด๋ฅผ ํ๊ณํ, ์ธ์ฌํ, DB ๊ด๋ฆฌ์ ๋ชจ๋๊ฐ ์ฌ์ฉํ๋ค๋ฉด, ํด๋น ๊ฐ์ฒด์ ์กํฐ๋ 3๊ฐ๋ค.- ์ด๋, ํ๊ณํ๊ณผ ์ธ์ฌํ์ด ์ ์ํ ๋ฉ์๋๊ฐ ๋์ผํ private ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด๋ณด์, ํด๋น private ๋ฉ์๋์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ ์กํฐ์ ์ํฅ์ ๋ผ์น๊ฒ ๋๋ค. ์ด๋ SRP๋ฅผ ์๋ฐํ๋ ๊ฒ.
- ์ด๋ ์ฌ๋ฌ ์กํฐ๊ฐ ๋จ์ผ ํด๋์ค์ ์์กดํ๋ฉฐ, ์์กดํ๋ ์ฝ๋๋ฅผ ๋๋ฌด ๊ฐ๊น์ด ๋ฐฐ์นํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ถ๋ฆฌ์์ผ์ผ ํ๋ค.
- ์ฌ์ด ์์
- ๋จ์๋ณด๋จ ๋จ์์น๊ตฌ, ๋จํธ, ์ด๋์ ์๋ฑ๋ฑ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด SRP์ ์ ํฉํ๋ค.
- OCP (Open Closed Principle)
- ์ํํธ์จ์ด๋ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ (Closed), ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋๋ก (Open)ํด์ผ ํ๋ค.
- ์ธํฐํ์ด์ค์ ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์๊ณ , ์ธํฐํ์ด์ค์ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ ์ถ๊ฐํ ์ ์๋๋ก ํ๋ ์์น
- OCP์ ํต์ฌ์ ๋ฐํ์ ์์กด์ฑ๊ณผ ์ปดํ์ผํ์ ์์กด์ฑ์ด๋ค. - ๋คํ์ฑ
- ํต์ฌ์ ์ปดํ์ผํ์ ์์กด์ฑ์ ๊ณ ์ ์ํค๊ณ , ๋ฐํ์ ์์กด์ฑ์ ๋ณ๊ฒฝํ๋ ๊ฒ. (๋์ ๋ฐ์ธ๋ฉ)
- ์์
- JDBC
- ์ํํธ์จ์ด๋ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- LSP (Liskov Substitution Principle)
- ์์ ํ์
์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์
์ ๊ฐ์ฒด๋ก ์นํํด๋ ์์ ํ์
์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค๋ ์์น
- B๊ฐ A์ ์์ ํ์ ์ด๋ฉด, ๋ถ๋ชจ ํ์ ์ธ A๊ฐ์ฒด๋ ์์ ํ์ ์ธ B๋ก ์นํํด๋, ๊ธฐ์กด ๋์์ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค๋ ์์น.
- A - B์ ๋ถ๋ชจ ์์์ ๋ํ ์ ์๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ ๋๋ก ๋ ์์์ด์ด์ผ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ด ์์์ธ B๋ก ์นํํด๋ ๋ฌธ์ ์์ด ์๋ํด์ผ ํ๋ค๋ ์๋ฏธ
- ๋ถ๋ชจ์์ ๊ตฌํํ ์์น์ ์์๋ ๋ฐ๋ผ์ผํ๋ค๋ ์์น.
- ์์์์ ๋ถ๋ชจ์ ๊ตฌํ์ ๋ณ๊ฒฝํ์ฌ, ๊ธฐ์กด์ ๋ก์ง์ ์ํฅ์ ์ฃผ๋ฉด ์๋๋ค.
- ์์
- ์๋์ฐจ ์ธํฐํ์ด์ค๊ฐ ์๊ณ ์์ ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์ ์ธ๋์ด์๋ค๊ณ ํ ๋, ์๋์ฐจ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ ์์ ๊ธฐ๋ฅ์ ์์ผ๋ก ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค์ด์ผ์ง ๋ค๋ก ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค๋ฉด ์๋ฉ๋๋ค
- ์์ ํ์
์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์
์ ๊ฐ์ฒด๋ก ์นํํด๋ ์์ ํ์
์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค๋ ์์น
- ISP (Interface Segregation Principle)
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค.
- ์ธํฐํ์ด์ค๋ ๊ทธ ์ญํ ์ ์ถฉ์คํ ์ต์ํ์ ๊ธฐ๋ฅ๋ง ๊ณต๊ฐํ๋ผ๋ ๊ฒ.
- ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค๋, ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค.
- ๋ถํ์ํ ์ง์ ์ค์ ๋ฌด์ธ๊ฐ์ ์์กดํ๋ฉด ์์์น๋ ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ฝ๊ฒ ๋งํด, ์ธํฐํ์ด์ค๊ฐ ํ๋์ ์ฑ ์์ ์ํํด์ผํ๋ค๋ ์๋ฏธ.
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค.
- DIP (Dependency Inversion Principle)
- ์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์๋๋ค๋ ์์น. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผํ๋ค.
- ๊ณ ์ฐจ์ ๋ชจ๋์ ์ ์ฐจ์ ๋ชจ๋์ ์์กดํ๋ฉด ์๋๋ค. ์ด ๋ ๋ชจ๋ ๋ชจ๋ ๋ค๋ฅธ ์ถ์ํ ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค๋ ์์น.
- ์์กด์ฑ ์ญ์ ์ด๋
- ๊ธฐ์กด์ ๊ณ ์์ค ๋ชจ๋์ด ์ง์ ์ฌ์ฉํ๊ณ ์ ํ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ์์กด์ฑ์ด ์ญ์ ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
- ๋ฐ๋ฉด์, ๊ณ ์์ค ๋ชจ๋์ด ์ถ์์ ์ธ ๊ฒ์ ์์กดํ๊ณ , ์ธ๋ถ์์ ์ฃผ์ ๋ฐ์์ผ๋ก์จ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ด ์ญ์ ๋๋ค. ์ฆ, ๊ณ ์์ค ๋ชจ๋์ด ์๊ธฐ๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ํด์ฃผ๋ ๊ฒ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์์กด์ฑ ์ญ์ ์ด๋ผํ๋ค.
- ์์
- ์นด๋ ๊ฒฐ์ ๋ผ๋ ๊ณ ์ฐจ์ ๋ชจ๋์ด ์๋ค๋ฉด, ์นด๋ ๊ฒฐ์ ์ปจํธ๋กค๋ฌ์์ ์ ํ ์นด๋ ๊ฒฐ์ ์ ์์กดํ์ง ๋ง๊ณ , ์นด๋ ๊ฒฐ์ ๋ผ๋ ์ถ์์ ์ธ ๊ฒ์ ์์กดํด์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ํ ์นด๋ ๊ฒฐ์ ํน์ ๋ค๋ฅธ ์นด๋ ๊ฒฐ์ ๋ค์ ๋ชจ๋ ์นด๋ ๊ฒฐ์ ๋ผ๋ ๋ชจ๋์ ๊ตฌํํ๋ ์ ์ฐจ์ ๋ชจ๋์ด๋ค. (์ธ๋ถ์ฌํญ์ด๋ค.)
๋ต๋ณ
- ์์ง๋
- ๋ชจ๋์ ํฌํจ๋ ๋ด๋ถ ์์๋ค์ด ์ฐ๊ด๋ผ ์๋ ์ ๋๋ฅผ ๋ํ๋.
- ์์ง๋ ๋์ (์ข์): ๋ชจ๋ ๋ด์ ์์๋ค์ด ํ๋์ ๋ชฉ์ ์ ์ํด ๊ธด๋ฐํ๊ฒ ํ๋ ฅํ๋ค๋ฉด ํด๋น ๋ชจ๋์ ๋์ ์์ง๋๋ฅผ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
- ์์ง๋ ๋ฎ์: ๋ชจ๋ ๋ด์ ์์๋ค์ด ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ ์ถ๊ตฌํ๋ค๋ฉด, ์์ง๋๊ฐ ๋ฎ๋ค๊ณ ํ๋ค.
- ๊ฒฐํฉ๋
- ๋ค๋ฅธ ๋ชจ๋๊ณผ์ ์์กด์ฑ ์ ๋๋ฅผ ๋ํ๋ธ๋ค.
- ๊ฒฐํฉ๋ ๋์: ๋ค๋ฅธ ๋ชจ๋์ ๋ํด ๋๋ฌด ์์ธํ ๋ถ๋ถ๊น์ง ์๊ณ ์์ผ๋ฉด ๊ฒฐํฉ๋๊ฐ ๋๋ค๊ณ ํ๋ค.
- ๊ฒฐํฉ๋ ๋ฎ์ (์ข์): ๋ค๋ฅธ ๋ชจ๋์ ๋ํด ๊ผญ ์์์ผ ํ๋ ๋ถ๋ถ๋ง ์๊ณ ์๋ค๋ฉด ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค๊ณ ํ๋ค.
- ๊ฒฐํฉ๋์ ์ ๋๋ ํ ์์๊ฐ ์์ ์ด ์์กดํ๊ณ ์๋ ๋ค๋ฅธ ์์์ ๋ํด ์๊ณ ์๋ ์ ๋ณด์ ์์ผ๋ก ๊ฒฐ์ ๋๋ค. ๊ฒฐํฉ๋๊ฐ ๋ฎ์๋ ค๋ฉด ํ๋ ฅํ๋ ๋์์ ๋ํด ๋ ์ ๊ฒ ์์์ผ ํ๋ค.
- ์ด ๋์ ์บก์ํ์๋ ๊ด๊ณ๊ฐ ์๋ค.
- ์บก์ํ์ ์ ๋๊ฐ ๊ฐ์ฒด์ ์์ง๋์ ๊ฒฐํฉ๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ.
- ์บก์ ํ๋ฅผ ์ ์งํค๋ฉด ์์ง๋๋ ๋์ด๊ณ , ๋ชจ๋ ์ฌ์ด์ ๊ฒฐํฉ๋๋ ๋ฎ์ถ ์ ์๋ค.
๋ต๋ณ
- ์บก์์ถ๋ค.
- ์บก์ํ
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ์๋ฅผ ํ๋๋ก ๋ฌถ๊ณ , ์ค์ ๊ตฌํ ๋ด์ฉ ์ผ๋ถ๋ฅผ ์ธ๋ถ์ ๊ฐ์ถ์ด ์๋ํ๋ ๊ฒ.
- ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ๊ตฌํ์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์๋์ ์ผ๋ก ์์ ์ ์ธ ๋ถ๋ถ์ ์ธํฐํ์ด์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์บก์ํ๋ ์ธ๋ถ์์ ์ ํ์๊ฐ ์๋ ๋ถ๋ถ์ ๊ฐ์ถค์ผ๋ก์จ ๋จ์ํํ๋ ์ถ์ํ์ ํ ์ข ๋ฅ๋ค.
- ์บก์ํ๊ฐ ์ค์ํ ์ด์ ๋ ๋ถ์์ ํ ๋ถ๋ถ๊ณผ ์์ ์ ์ธ ๋ถ๋ถ์ ๋ถ๋ฆฌํด์ ๋ณ๊ฒฝ์ ์ํฅ์ ํต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ๋ณด ์๋
- ์์
- ํด๋์ค๋ค ๊ฐ์ ์์ฑ๊ณผ ๋์์ ๋ฌผ๋ ค์ฃผ๋ ๊ฒ.
- ์ด๋ฅผ ํตํด ํด๋์ค๋ค ๊ด๊ณ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ํ์ฑํ ์ ์๋ค.
- ์ถ์ํ
- ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ์๋ฏธ. (๊ณตํต๋ ๊ฒ๋ค์ ํ๋๋ก ๋ฌถ์ด ์ผ๋ฐํํ๋ ์ฌ๊ณ ๊ณผ์ )
- ์ถ์ํ๋ฅผ ํตํด ์ธ๋ถ์ ์ธ ๋ด์ฉ์ด ์๋๋ผ ์ผ๋ฐ์ ์ผ๋ก ํํํ๋ ๊ฒ.
- ex. ์ ํ ์นด๋(๊ตฌ์ฒด)๋ฅผ ์ ์ฉ ์นด๋๋ก ์ถ์ํ ์ํด.
- ๋คํ์ฑ
- ๋์ผํ ๋ฉ์์ง๋ฅผ ์์ ํ์ ๋, ๊ฐ์ฒด์ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋ตํ ์ ์๋ ๊ฒ. (์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์ ํํ๊ฐ ๊ฒฐ์ ๋๋ค.)
- ์ธํฐํ์ด์ค, ์ถ์ ํด๋์ค๋ฅผ ์ด์ฉํด ๊ตฌํ
- ์บก์ํ
๋ต๋ณ
- ๋ชฉ์ ์ด ๋ค๋ฅด๋ค.
- ์ถ์ ํด๋์ค: ์ํ์ ํ์๋ค์ ๋ชจ์ ๋์ ํ
ํ๋ฆฟ
- ์ถ์ ํด๋์ค๋ ๊ณตํต๋ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๊ฑฐ๋ ํน์ ๋ณ๋๋ก ๊ตฌํํ๊ณ , ์๋ก์ด ์์ฑ๊ณผ ํ์๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ๋ชฉ์ .
- ์ธํฐํ์ด์ค: ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ ๋ช
์ธ(์คํ).
- ์ธํฐํ์ด์ค๋ ํด๋ผ์ด์ธํธ์๊ฒ ๊ตฌํ์ฒด์ ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง์ ๋ํ ๋ช ์ธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ๋ชฉ์ .
- ์ถ์ ํด๋์ค: ์ํ์ ํ์๋ค์ ๋ชจ์ ๋์ ํ
ํ๋ฆฟ
- ์ํ์ ํ์
- ์ถ์ ํด๋์ค๋ non-staticํ ์ํ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ํ์๋ ๊ฐ๋๋ค.
- ์ธํฐํ์ด์ค๋ non-staticํ ์ํ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ํ์๋ ๊ฐ์ง ๋ชปํ๋ค. ํ์์ ๋ํ ๋ช ์ธ๋ง ๊ฐ์ง ์ ์๋ค. (default๋ก ์์๋ ๊ฐ์ง ์ ์๋ค.)
- ์ ๊ทผ ์ ์ด์
- ์ถ์ ํด๋์ค๋ ์ ๊ทผ ์ ์ด์๋ฅผ ์ ํํ ์ ์๋ค. (์์ํ๋ ค๋ฉด protected ์ด์)
- ์ธํฐํ์ด์ค๋ ๋ชจ๋ public์ผ๋ก ๋ ธ์ถํด์ผ ํ๋ค.
- ๋ด๋ถ ๊ตฌํ
- ์ถ์ ํด๋์ค๋ ๋ด๋ถ ๊ตฌํ๊น์ง ๋ฌผ๋ ค์ค๋ค(๊ณต์ ํ๋ค).(๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค.)
- ์ธํฐํ์ด์ค๋ ๋ด๋ถ ๊ตฌํ์ด ์์ผ๋ฏ๋ก, ๊ณต์ ํ์ง ์๋๋ค.
- ์ถ์ ํด๋์ค์ ๋จ์
- ์์ ํ์ ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋๋ฌด ๋๋ค. (์ข
์์ ์ด๋ค)
- ์ถ์ ํด๋์ค๋ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์ํ์ ํ์๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์์กดํ๋ ๊ด๊ณ๊ฐ ๋๋ค.
- ์ ๋ง ํ์ํ IS-A ๊ด๊ณ๋ ํ์ฅํ๋ ค๋ ๋ชฉ์ ์ ์ ์ธํ๊ณค ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ์ค๊ณ.
- ์์ ํ์ ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋๋ฌด ๋๋ค. (์ข
์์ ์ด๋ค)
๋ต๋ณ
- ๋ํดํธ ๋ฉ์๋๋?
- ์๋ฐ 8๋ถํฐ ๋์จ ๊ฐ๋ ์ผ๋ก ์ธํฐํ์ด์ค์๋ ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๊ตฌํ์ด ํฌํจ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
- ๊ตฌํํ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ์๋ ์๋ค.
- ์ ์ฌ์ฉํ๋๊ฐ? - ๋ ๊ฑฐ์ ์ฝ๋ ํธํ์ฑ
- ์๋ก์ด ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ฌ ๋, ์ธํฐํ์ด์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด, ๊ธฐ์กด์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ํธํ์ฑ์ด ๋ง์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง๋ค ๊ตฌํ ํด๋์ค์์์ ์ถ๊ฐ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ต๋ณ
- ์์
- ๋ ๊ด์ ์์ ์ข์ง ์๋ค.
- ์บก์ํ๋ฅผ ๊นจ๋จ๋ฆฐ๋ค.
- ์์ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋๋์ ๋ฐ๋ผ ํ์ ํด๋์ค์ ๋์์ ์ด์์ด ์๊ธธ ์ ์๋ค.
- ์์ ํด๋์ค์ ๋ฉ์๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ํด๋น ๋ฉ์๋์ ์์กดํ๋ ํ์ ํด๋์ค์ ๋ฉ์๋์ ๋ชจ๋ ์ํฅ์ ๋ผ์น๋ค.
- ์์ ํด๋์ค ๋ด๋ถ ๊ตฌํ์ ํ์ ํด๋์ค์ ์์ํ๋ฏ๋ก ๋ด์ฉ์ด ๋
ธ์ถ.
- ํ์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์๋ชปํ๋ฉด LSP๋ฅผ ๊นจ๋จ๋ฆด ์ ์๋ค.
- ์์ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋๋์ ๋ฐ๋ผ ํ์ ํด๋์ค์ ๋์์ ์ด์์ด ์๊ธธ ์ ์๋ค.
- ์ค๊ณ๋ฅผ ์ ์ฐํ์ง ๋ชปํ๊ฒ ํ๋ค.
- ์์ ํ์ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ๋๋ค.
- ๋ฐ๋ผ์ ์คํ ์์ ์ ๊ฐ์ฒด์ ์ข ๋ฅ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ถ๋ชจ์ ๋๋ฌด ์ข ์์ ์ด๊ฒ ๋๋ค.
- ์บก์ํ๋ฅผ ๊นจ๋จ๋ฆฐ๋ค.
- ๋ ๊ด์ ์์ ์ข์ง ์๋ค.
- ์กฐํฉ
- ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์์ง๋ฅผ ํตํด์๋ง ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์์์ ๋ ๊ฐ์ง ๋จ์ ์ ๋ชจ๋ ํด๊ฒฐํ๋ค.
- ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์์ง๋ฅผ ํตํด์๋ง ์ฌ์ฉํ๊ธฐ์ ๋ด๋ถ ๊ตฌํ์ ์บก์ํํ ์ ์๋ค.
setter
๋ ์์ฑ์๋ฅผ ํตํด ์ธ์คํด์ค ๊ต์ฒด๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์, ์ค๊ณ๊ฐ ์ ์ฐํ๋ค. ์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์ ์์กด์ฑ ์ฃผ์ ์ ํตํ๊ธฐ ๋๋ฌธ์ ๋ ์ ์ฐํ๋ค.
- ์์กด์ฑ ๊ด์ ์์ ์๊ฐํ๋ค๋ฉด
- ์์์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ค (์ปดํ์ผ ํ์) -> ์ฝ๋์ ์์ ์ด ๋ฐ์ํ๋ค.
- ์กฐํฉ์ ์ถ์์ ์ธ ๊ฒ์ ์์กดํ๋ค (๋ฐํ์) -> ์์กด์ฑ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ฏ๋ก, ์ฝ๋์ ์์ ์ด ํ์์๋ค.
๋ต๋ณ
- ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ '์ง์ง' ํ์ ํ์
์ธ ์ํฉ.
- ํด๋์ค B๊ฐ ํด๋์ค A์
is-a
๊ด๊ณ์ผ ๋๋ง ํด๋์ค A๋ฅผ ์์ํด์ผ ํ๋ค.
- ํด๋์ค B๊ฐ ํด๋์ค A์
- ์์ ํด๋์ค์ ํ์ ํด๋์ค์ ์ฑ
์์ ๋ถ๋ฆฌํ ๋.
- ์์๋ ์์์ ์ผ์ ํ๊ณ , ํ์๋ ํ์์ ์ผ์ ํ๋๋ก ์์ํ๋ผ๋ ์๋ฏธ.
- ์์๋ ํ์๊ฐ ๋ฌด์์ ํด์ผํ๋์ง
abstract
๋ก ๋จ๊ฒจ๋๊ณ ํ์๋ฅผ ๊ตฌํํ ๋. - ์ถ์ ํด๋์ค๋ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ๋ํ ์ฝ๋๋ฅผ ์ฌ์ ์ํ์ง ์๊ณ , ๊ทธ์ ํ์ฅํ ๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ex. ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด.
๋ต๋ณ
๋ต๋ณ
- ์ฑ๊ธํค ํจํด์ด๋?
- ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋๋ง ์์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์์ 1๊ฐ๋ง ์กด์ฌํจ์ ๋ณด์ฅํ๋ ๋์์ธ ํจํด.
- ์ ์ฌ์ฉํ๋๊ฐ?
- ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ Util์ฑ ๊ฐ์ฒด ํน์ ํ๋๋ง ์์ฑํ์ฌ ์บ์ฑํด์ ์ฌ์ฉํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์ ์๋ค.
- ๋ก๋๋ฅผ ๊ตฌํํ๋ค๋ฉด ๊ฐ์ ํ๋ค๋ฉด, ๋ก๋ ๋ฒํธ๋ 1 ~ 45๋ก ๊ณ ์ ์ด๋ฏ๋ก, ์ด๋ฌํ ๋ฒํธ๋ ์ฑ๊ธํค์ผ๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์บ์ฑํด์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
- ์ฑ๊ธํค ๋จ์
- ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๋ ๊ณณ๊ณผ ์ฑ๊ธํค ํด๋์ค ์ฌ์ด์ ๊ฐํ ์์กด์ฑ์ด ์๊ธด๋ค.
- ์์ ๋ฐ ํ ์คํธํ๊ธฐ ํ๋ค๋ค.
- ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ.
- private ์์ฑ์๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ํ ์ ์๋ค.
- ์ฑ๊ธํค์ ์ฌ์ฉ์ ์ ์ญ ์ํ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค.
- ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๋ ๊ณณ๊ณผ ์ฑ๊ธํค ํด๋์ค ์ฌ์ด์ ๊ฐํ ์์กด์ฑ์ด ์๊ธด๋ค.
- ์ฃผ์ํ ์ - ๋ค์ค ์ค๋ ๋
- ๋ค์ค ์ค๋ ๋์์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๋ค์ด ๋์์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ํํ๋ค.
- ์ฝ๊ธฐ ์ ์ฉ (final)์ผ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
๋ต๋ณ
- ํ๋ก์
- ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ ๋์ ์ฌ์ด์ ๋๋ฆฌ ์ญํ ์ ๋งก์ ๊ฐ์ฒด๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ ์ด์นญ
- ex. ํ๋ก์ ํจํด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ ํจํด
- ํ๋ก์ ํจํด
- ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ค ํ๊น์ ๋ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ์ดํ๋ ค๋ ๋ชฉ์ ์ ๊ฐ์ง ํจํด.
- ํ๋ก์ ํจํด์ ํ๊น์ ๊ธฐ๋ฅ ์์ฒด์๋ ๊ด์ฌํ์ง ์์ผ๋ฉด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ํ๋ก์ ํจํด ์ฌ์ฉ ์ด์
- ์ค์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
Collection.unmodifiableCollection()
(์ปฌ๋ ์ ์ ๊ทผ ๊ถํ ์ ์ด์ฉ ํ๋ก์์ญํ )
๋ต๋ณ
- ํ๋ก์: ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ ๋์ ์ฌ์ด์ ๋๋ฆฌ ์ญํ ์ ๋งก์ ๊ฐ์ฒด๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ ์ด์นญ
- ํ๋ก์ ํจํด: ์ค์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋๋ฐ ์ด์
Collection.unmodifiableCollection()
(์ปฌ๋ ์ ์ ๊ทผ ๊ถํ ์ ์ด์ฉ ํ๋ก์์ญํ )
- ๋ฐ์ฝ๋ ์ดํฐ ํจํด: ๊ธฐ์กด ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ํ์ฅํ๋๋ฐ ์ด์
InputStream is = new BufferedInputStream(new FileInputStream("a.txt"));
- HTTP Method๋ฅผ ํฌํจํ ์ธํฐ์ ํฐ ์ค์ .
๋ต๋ณ
- ํ๋ก์์ ๋จ์
- ๋ชจ๋ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํด์ค์ผ ํ๋ค.
- ๋ถ๊ฐ๊ธฐ๋ฅ์ด ํ์ ์๋ ๋ฉ์๋๋ ๊ตฌํํด์ ํ๊น์ผ๋ก ์์ํ๋ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๋ง๋ค์ด์ค์ผ ํ๋ค.
- ๋ถ๊ฐ๊ธฐ๋ฅ ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฐ๋ฅ์ฑ์ด ๋ง๋ค.
- ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํ Service๋ฅผ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ํธ๋์ญ์ ์ด ํ์ํ Service๋ง๋ค ํธ๋์ญ์ ์ฒ๋ฆฌ์ฉ ํ๋ก์(XXXServiceTx) ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค์ผํ๋ฉฐ, ์ด๋ ์ค๋ณต๋ ๋ก์ง์ ์ฝ๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
- ๋ชจ๋ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํด์ค์ผ ํ๋ค.
- ๋ค์ด๋ด๋ฏน ํ๋ก์๋?
- ํ๋ก์ ํจํด์ ๋จ์ ์ ํด๊ฒฐํ ๋ ๋ค๋ฅธ ํ๋ก์ ๊ตฌํ ๋ฐฉ์.
- ๋ฐํ์ ์์ ๋์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ํ๋ก์ ๊ฐ์ฒด.
- ๋ค์ด๋ด๋ฏน ํ๋ก์๋ ํ๋ก์ ํฉํ ๋ฆฌ์ ์ํด ๋ฐํ์ ์ ๋ค์ด๋ด๋ฏนํ๊ฒ ๋ง๋ค์ด์ง๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- ๋ค์ด๋ด๋ฏน ํ๋ก์์ ๋์ ๋ฐฉ์
- ๋ชจ๋ ์์ฒญ์ ๋ฆฌํ๋ ์
์ ๋ณด๋ก ๋ณํํด์
InvocationHandler
๊ตฌํ ๊ฐ์ฒด์invoke()
๋ฉ์๋๋ก ์์ํ๋ ๋ฐฉ์
- ๋ชจ๋ ์์ฒญ์ ๋ฆฌํ๋ ์
์ ๋ณด๋ก ๋ณํํด์
- ๋ค์ด๋ด๋ฏน ํ๋ก์์ ๋จ์
- ๊ฐ์ฒด์ ๋ํ Reflection ๊ธฐ๋ฅ์ ์ฌ์ฉํด ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ํ๋ฝ์ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
JDK Dynamic Proxy
๋ต๋ณ
์ถ์ฒ: https://www.baeldung.com/wp-content/uploads/2017/10/springaop-process.png
- ๊ณตํต์
- ๋ค์ด๋ด๋ฏน ํ๋ก์๋ฅผ ๋ง๋ค ์ ์๋ค.
- JDK Dynamic Proxy
- Proxy Factory๋ฅผ ์ด์ฉํ์ฌ ๋ฐํ์์ ๋ค์ด๋ด๋ฏน ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
- ๋ฐ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํด์ผ ํ๋ฉฐ, ์ธํฐํ์ด์ค์ ๋ํ ๋ช
์ธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ก์๋ฅผ ๋ง๋ ๋ค.
- ์ธํฐํ์ด์ค ์ ์ธ์ ๋ํ ๊ฐ์ ์ฑ์ด ์๋ ๋จ์ ์ด ์๋ค.
- ๋ด๋ถ์ ์ผ๋ก JDK Dynamic Proxy์์๋
InvationHandler
๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ๋ง๋ค์ด์ง๋๋ฐ, invoke ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ Proxy์ ์์ ๊ธฐ๋ฅ์ ์ํํ๋ค. - ๋ฆฌํ๋ ์ ์ ์ด์ฉํ๋ฏ๋ก ์ฑ๋ฅ์ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- CGLib
- CGLib์ ์์ Java JDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ CGLIB๋ผ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
- CGLIB์ Enhancer ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก Proxy๋ฅผ ์์ฑํ๋ฉฐ, ์ธํฐํ์ด์ค๊ฐ ์์ด๋ Proxy๋ฅผ ์์ฑํ ์ ์๋ค.
- CGBLIB Proxy๋ ํ๊ฒ ํด๋์ค๋ฅผ ์์๋ฐ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ Proxy๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ผํ๋ ์๊ณ ๋ฅผ ๋ ์ ์๋ค.
- ํ์ง๋ง ์์์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์,
final
์ด๋private
์ ๊ฐ์ด ์์์ ๋ง๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์๋๋ค๋ ๋จ์ ์ด ์๋ค. - ๋ฐ์ดํธ ์ฝ๋ ์กฐ์์ ์ด์ฉํ๋ฏ๋ก ์ฑ๋ฅ์ JDK Dynamic Proxy๋ณด๋ค ๋น ๋ฅด๋ค.
- ๊ฒฐ๋ก - ๋ค๋ฅธ์
- ์ธํฐํ์ด์ค์ ์ ๋ฌด
- ๋ค์ด๋ด๋ฏน ํ๋ก์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์
๋ต๋ณ
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์๋ฏธํ๋ค.
- ๋จผ์ ์คํจํ๋ ํ ์คํธ๋ฅผ ์์ฑ ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ํ ์คํธ๊ฐ ํต๊ณผํ๋ฉด ๋ฆฌํฉํ ๋งํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ์ฒด์ ์ฑ ์๊ณผ ์ญํ ์ ์ด๊ธฐ ์ค๊ณ๋ณด๋ค ๋ ์ธ๋ฐํ๊ฒ ๋ถ๋ฆฌ์ํฌ ์ ์๋ค.
๋ต๋ณ
- ์ธ์ ํ
์คํธ (์๋๋ฆฌ์ค ํ
์คํธ)
- ์ค์ ์ฌ์ฉ์์ ์๋๋ฆฌ์ค๋ฅผ ๊ฐ์ ํ๊ณ api๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๋ํ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ถ๋๋์ง ํ์ธํ๊ธฐ ์ํ ํ ์คํธ์ด๋ค.
- ์ธ์ํ ์คํธ๋ ์๋๋ฆฌ์ค์ ๋์์ ๋์ ๊ฒ์ฆํ๋ฏ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ๊ฒ์ฆํ๋ค.
- ํตํฉ ํ
์คํธ (์๋น์ค ํตํฉ ํ
์คํธ)
- ์๋น์ค๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ฆ์ ์ด๋ฅผ ๋ด๋นํ๋ค. ์ด๋ ๋น์ฆ๋์ค ๋ก์ง(๋๋ฉ์ธ)์ ์กฐํฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ธ๋ค๋ ์๋ฏธ์ด๋ค.
- ๋ฐ๋ผ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ํ๋ ์์๋๋ก ๋์ํ๋์ง? ์ธ๋ถ ๋ชจ๋ (DB, ์ธ๋ถ API)์ ์ ์ฐ๋๋๋์ง?์ ๋ํ ํ ์คํธ๋ฅผ ๊ผญ ํด์ค์ผ ํ๋ค.
- input์ ๋ง๋ output์ด ์ ๋์ค๋์ง ํ์ธํ๋ ํ ์คํธ.
- ์๋น์ค ๋ชฉ ํ
์คํธ (ํ์ ๊ธฐ๋ฐ ํ
์คํธ)
- input์ ๋ง๋ output์ด ์ ๋์ค๋์ง ํ ์คํธํ๊ธฐ ์ํจ์ด ์๋๋ผ, ์ค์ ์ธ๋ถ ๋ชจ๋์ ๋ช ๋ฒ ์ฐ๋ฅด๋์ง๋ฑ ํ์๋ฅผ ํ ์คํธํ๊ธฐ ์ํจ์ด๋ค.
- ๋จ์ ํ
์คํธ (๋๋ฉ์ธ ๋จ์ ํ
์คํธ)
- ๋๋ฉ์ธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ "๋๋ฉ์ธ"์ ๊ทธ๋๋ก ์ฌ์ํ๋ ๊ฐ์ฅ ์ค์ํ ๋ก์ง(๊ฐ์ฒด)๋ค. (๋น์ฆ๋์ค ๋ก์ง)
- ๊ฐ๋ฐ์๋ ํด๋ผ์ด์ธํธ์ ์๊ตฌ์ฌํญ (๊ธ)์ ๋ก์ง(์ฝ๋)๋ก ์ฎ๊ธฐ๋ ์์ ์ ํ๋ ์ง๊ตฐ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ๋ก์ง์ผ๋ก ๋๋ฌ๋ด๋ ๊ณณ์ด ๋ฐ๋ก "๋๋ฉ์ธ"์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๊ตฌ์ฌํญ์ด ์ฝ๋๋ก ์ ์ฎ๊ฒจ์ก๋์ง ๊ผญ ํ ์คํธํด์ค์ผ ํ๋ค.
- ๋ํ, ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ญํ ๊ณผ ์ฑ ์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌ์ํจ๋ค. ์ด๋ ๊ฐ์ฒด์งํฅ์ ์ค๊ณ๋ฅผ ์ ๋ํ๋ค.
๋ต๋ณ
- ์คํ๋ง์ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ์ํ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค.
- ์คํ๋ง์ ์๋ฐ๋ฅผ ์ด์ฉํ ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ์ถ์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ.
- ์คํ๋ง์ ํต์ฌ ์์
- ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ค์ง ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๋๋ก ๋ค์ํ ์๋น์ค ์ธํ๋ผ๋ฅผ ์ง์ํ๋ค. (์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์์ ์ธํ๋ผ๋ฅผ ์ง์)
๋ต๋ณ
- ์ ์ด
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ (๋ฅ๋)
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ง์ ์ ์ดํ๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ํธ์ถํ์ฌ ์ ์ฒด์ ์ธ ์ฝ๋์ ํ๋ฆ์ ์ฃผ๋ํ๋ค.
- ํ๋ ์์ํฌ (์๋) - ์ ์ด์ ์ญ์
- ํ๋ ์์ํฌ๋ ๊ฑฐ๊พธ๋ก ์ฝ๋๊ฐ ํ๋ ์์ํฌ์ ์ํด ์ฌ์ฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ ํ๋ฆ์ค ํต์ฌ ๋ถ๋ถ๋ง ์์ฑํ๊ณ ํ๋ ์์ํฌ๊ฐ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ฃผ๋ํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ (๋ฅ๋)
- ๋ชฉ์
- ๋ ๋ค ๋ชฉ์ ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํธ์์ฑ.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋ ์ง์คํ๊ณ , ํ๋ ์์ํฌ๋ ๊ธฐ๋ณธ์ ์ธ ํ์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ์ง์คํ๋ค.
๋ต๋ณ
- ๋ฐฉ๋ํ ๋ฌธ์
- ์๋ฐ์ง์์์ ๊ฐ์ฅ ๋ณดํธํ๋ ํ๋ ์์ํฌ. ๋ฌธ์ํ๊ฐ ์ ๋์ด ์๋ค.
- ๊ฐ๋ฐ ํธ์์ฑ, ์์ฐ์ฑ
- ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๋๋ก ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์์ ์ธํ๋ผ๋ฅผ ๊ฐ์ถ๊ณ ์๋ค. ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ๋ฉด ๋๋ค.
- ex. IoC, AOP, PSA
- ๋น์นจํฌ์ฑ - POJO (๊ด์ฌ์ฌ ๋ถ๋ฆฌ) - ๊ฐ์ฒด์งํฅ์ ํน์ง
- ๋น์นจํฌ์ฑ์ ์งํฅํ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ ๋๋ฉ์ธ ๋ถ๋ถ์ ๋ํ ์๋ฐ ์ฝ๋๋ฅผ ์ต๋ํ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์น ์๋น์ค๋ฅผ ํ ์ ์๋ค.
- ex. ์ฐ์ํ ํ ํฌ์ฝ์ค ์ฒด์ค ๋ฏธ์ -> ์ฒ์์ ์ฝ์์์๋ง ๋์ํ๋๋ก ํ์. -> ์น ์๋น์ค๋ฅผ ์ํด ์คํ๋ง์ ์ ์ฉ์ํค๋ฉด์ ๊ธฐ์กด์ ๋๋ฉ์ธ ์ฝ๋์ ์๋น์ค ๊ด๋ จ ๋ก์ง์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์์. (์ฌํ์ฉ)
- ์ํฐํ๋ผ์ด์ฆ ํ๋ ์์ํฌ - ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌ ๊ฒ์ฆ๋จ
- ๋ํ, ์คํ๋ง์ ๊ฒ์ฆ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค๊ณผ ์คํ์์ค ์ํ๊ณ๋ฅผ ์ง์ํ๋ค.
- spring batch๋ spring security๋ฑ๊ณผ ๊ฐ์ด ๋ค์ํ ํ์ ํ๋ก์ ํธ๋ค์ ์ ๊ณตํ๋ค.
- ์ด๋ ๊ฐ๋ฐ์ ์ ์ฅ์์ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ํด์ค๋ค.
- ์ฑ๋ฅ ํฅ์ - ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ
- ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฑ๊ธํค์ ์ฅ์ - ์๋ฒ ๊ด์
- ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ก์ง์ ์ํํ๋ฉด ๋น์ฉ์ด ๋๋ฌด ๋๋ค. (๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ ๋ฆฌ)
- ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฑ๊ธํค์ ๋ฌธ์
private
์์ฑ์๋ฅผ ๊ฐ๊ณ ์๊ธฐ์ ์์ํ ์ ์๋ค.- ํ ์คํธํ๊ธฐ ํ๋ค๋ค.
- ์ ์ญ ์ํ๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ์๋ค.
- ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ํ๋ค๋ค (์์กด์ฑ)
- ์คํ๋ง์ ๊ธฐ์กด ์ฑ๊ธํค์ ์ฅ์ ์ ๋ชจ๋ ์ทจํ๊ณ , ๋จ์ ์ ๋ชจ๋ ๋ฐฐ์ ํ ์ฑ๊ธํค ํ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค. (์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ)
- ํ๋ฒํ ์๋ฐ ํด๋์ค๋ฅผ ์ฑ๊ธํค์ผ๋ก ํ์ฉํ๊ฒ ํด์ค๋ค.
- ๊ฐ์ฅ ์ค์ํ ์ ์ ๊ธฐ์กด ์ฑ๊ธํค ํจํด๊ณผ ๋ฌ๋ฆฌ ์คํ๋ง์ด ์ ๊ณตํ๋ ์ฑ๊ธํค์ ๊ฐ์ฒด์งํฅ์ ์ค๊ณ ๋ฐฉ์๊ณผ ๋์์ธ ํจํด๋ฑ์ ์ ์ฉํ๋ ๋ฐ ์๋ฌด๋ฐ ์ ์ฝ์ด ์๋ค๋ ๊ฒ์ด๋ค.
- ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฑ๊ธํค์ ์ฅ์ - ์๋ฒ ๊ด์
- ํ
์คํธ
- DI๋ฅผ ํตํ ํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ฃผ์ ํด์ค์ผ๋ก์จ ํ ์คํธ๋ฅผ ์ฝ๊ฒ ์งํํ ์ ์๋ค.
- ํตํฉ ํ ์คํธ๋ฅผ ์ ๊ณตํด์ค๋ค.
๋ต๋ณ
- ์คํ๋ง์ ํต์ฌ ์์น์ ์ธ ๊ฐ์ง๋ค. IoC/DI, AOP, PSA
- IoC
- Inversion Of Control (์ ์ด์ ์ญ์ )์ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๋ฐ์๊ฐ ์๋ ํ๋ ์์ํฌ์๊ฒ ์์ํ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด์ ์์ฑ ์ฑ ์์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ง๋ ๊ฒ์ด ์๋๋ผ, ํ๋ ์์ํฌ์ ์์ํ๋ค. (๋ฅ๋ -> ์๋)
- IoC vs DI
- IoC๋ DI์ ํ ํํ. -> ๊ฐ์ฒด์งํฅ์์ DI๋ฅผ ํตํด IoC๋ฅผ ๊ตฌํํ๋ค.
- DI
- DI๋ ์์กด๊ด๊ณ ์ฃผ์ ์ ์๋ฏธํ๋ค. ์์กด๊ด๊ณ๋ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ์ํฅ์ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์คํ๋ง์์๋ ์ด๋ฌํ ์์กด๊ด๊ณ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ , ์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌํ๋ค. ์์กด๊ด๊ณ๊ฐ ํ์ํ ๋๋ง๋ค ์คํ๋ง ์ปจํ ์ด๋์์ ๊ฐ๋ฐ์ ์ฝ๋์์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํด์ค๋ค.
- DI๋ ์คํ๋ง์์ IoC๋ฅผ ๊ตฌํํ ํ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ฉฐ, IoC๋ DI๋ฅผ ํฌํจํ๋ ๊ฐ๋ ์ด๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ์์ฑ, ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ, ์์กด๊ด๊ณ ์ค์ ์ฑ ์์ ์ ๊ฒฝ์ธ ํ์์์ด ์์ ์ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ์ฌ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค.
- AOP
- Aspect-Oriented Programming (๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)์ ์๋ฏธํ๋ค.
- ์คํ๋ง DI๊ฐ ์์กด์ฑ์ ๋ํ ์ฃผ์ ์ด๋ผ๋ฉด AOP๋ ๋ก์ง(code)์ฃผ์ ์ด๋ผ๊ณ ํ ์ ์๋ค.
- ๊ด์ ์งํฅ์ ์ฝ๊ฒ ๋งํด ์ด๋ค ๋ก์ง์ ํต์ฌ์ ์ธ ๊ด์ ๊ณผ ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
- ํต์ฌ์ ์ธ ๊ด์ : ๋น์ฆ๋์ค ๋ก์ง
- ๋ถ๊ฐ์ ์ธ ๊ด์ : ํต์ฌ ๋ก์ง์ ์คํํ๊ธฐ ์ํด์ ํํด์ง๋ ๋ก์ง (๋ก๊น , ํธ๋์ญ์ , ์บ์ฑ) - ์ฌ์ฌ์ฉ๋๋ค.
- PSA
- Portable Service Abstraction (์ผ๊ด์ฑ ์๋ ์๋น์ค ์ถ์ํ) ์ ์๋ฏธํ๋ค.
- ์๋น์ค ์ถ์ํ๋, ๊ฐ์ ์ผ์ ํ๋ ๋ค์์ ๊ธฐ์ ์ ๊ณตํต์ ์ธํฐํ์ด์ค๋ก ์ ์ดํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ธ๋ถ ํ๊ฒฝ์ ๋ณํ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์์
@Cacheable
: ์บ์๋์์ผ๋ก redis๋ฅผ ์ฌ์ฉํ๋ ehcache๋ฅผ ์ฌ์ฉํ๋ @Cacheable์ ์ฒ๋ฆฌํ๋ ๋ด๋ถ ์ฝ๋๋ ๋ณํ์ง ์๋๋ค.@Transactional
: JPA์ ๊ตฌํ์ฒด๋ก hibernate๋ฅผ ์ด์ฉํ๋ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ฅผ ์ด์ฉํ๋ @Transactional์ ์ฒ๋ฆฌํ๋ ๋ด๋ถ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค.
๋ต๋ณ
- Spring Boot์ ์ฅ์ ์ ํตํด ๋ ๊ฐ์ง๋ฅผ ๋น๊ตํด๋ณด๊ณ ์ ํ๋ค.
- ์๋ ์ค์
- Spring์ ๊ฒฝ์ฐ Dispatcher Servlet์ ์ง์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ฑ๋กํด์ค์ผ ํ๋ฉฐ, IoC ์ปจํ ์ด๋๋ ์ง์ ์คํํด์ฃผ์ด์ผ ํ๋ค. ์ด์ธ์๋ ๋ค์ํ ์์กด์ฑ(JDBC, JPA ๋ฑ๋ฑ)์ ์๋์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
- Spring Boot๋
@EnableAutoConfiguration
์ ํตํดspring-boot-autoconfigure/META-INF/spring.factories
์ ๋ช ์๋ ๋ค์ํ ์ค์ ๋ค์ ์์กด์ฑ์ ๋ฐ๋ผ ๋น์ ๋ฑ๋กํด์ค๋ค. (์์กด์ฑ์ด ์กด์ฌํ ๋๋ง ์๋ ๋ฑ๋ก) - ๋ํ, Dispatcher Servlet์ IoC ์ปจํ ์ด๋์ ๊ฐ์ ์ค์ ๋ ์๋์ผ๋ก ํด์ค๋ค.
- ์ฌ์ด ์์กด์ฑ ๊ด๋ฆฌ
- Spring Boot์ ๊ฒฝ์ฐ ์์กด์ฑ๋ง ์ฃผ์ ํด์ฃผ๋ฉด Spring Boot๊ฐ ์์์ ์ค์ ํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
- ๋ด์ฅ ํฐ์บฃ
- Spring์ ๊ฒฝ์ฐ ์ง์ ํฐ์บฃ์ ์๋ํด์ฃผ์ด์ผํ๋ค.
- SpringBoot์ ๊ฒฝ์ฐ ๋ด์ฅ ํฐ์บฃ์ ์ด์ฉํ์ฌ ์๋ฐ ์ฝ๋๋ฅผ ์คํํ์ฌ ์น ์๋น์ค๋ฅผ ํ ์ ์๋ค.
- ๋ด์ฅ H2
- SpringBoot๋ ๋ด์ฅ H2๋ฅผ ๋น ํํ๋ก ์ ๊ณตํ๋ค.
๋ต๋ณ
- ์ง์ ํ POJO๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์, ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข
์๋์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์ฌํ์ฉ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ๋ฅผ ๋งํ๋ค.
- ์ด๋ ํ ํ๋ ์์ํฌ์๋ ์์กดํ์ง ์๋๋ค.
- ์๋ฐ๋ฅผ ์ด์ฉํ ํ ์คํธ์ ์ฉ์ดํ๋ค.
- POJO์ ๋ ๊ฐ์ง ์๊ฒฌ
- ์ด๋ ํ ํ๋ ์์ํฌ์๋ ์์ ํ ์์กดํ์ง ์๋ ์๋ฐ ๊ฐ์ฒด. (์ ๋ ธํ ์ด์ ์ด ๋ถ์ ๊ฒ๋ POJO๊ฐ ์๋๋ ์๊ฒฌ)
- ์๋ฐ ๊ฐ์ฒด ์์ ์ฝ๋๋ฅผ ํ๋ ์์ํฌ๋ฅผ ๋ฐ๊ฟ๋ ๊ทธ๋๋ก ์ฌํ์ฉํ ์ ์์ผ๋ฉด POJO. (ํน์ ์ ๋ ธํ ์ด์ ์ด ์กด์ฌํด๋ POJO๋ผ๋ ์๊ฒฌ)
- EJB๋ถํฐ ์คํ๋ง๊น์ง์ ์ญ์ฌ๋ฅผ ๋ณด๋ฉด ๋ ๋ฒ์งธ๊ฐ ๋ง๋ ๋ฏ ํ๋ค.
- EJB ์์ ์๋ ํน์ ๊ธฐ๋ฅ(Service, Controller ๋ฑ)์ ๋ง๋ค๊ธฐ ์ํด์๋ ํน์ ์ธํฐํ์ด์ค๋ ํด๋์ค๋ extends ํ์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ๊ทธ ์์ ์๋ ํน์ ํด๋์ค๋ EJB ํ๋ ์์ํฌ์ ๋งค์ฐ ์์กด์ ์ด์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ํ์ฉํ๊ธฐ ์ํด์ ํน์ Class๋ฅผ extendsํด์ผํ๋ค๋ ๊ด์ ์์ ๊ฐ์ฒด์งํฅ์ ํน์ง์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋์๋ค(์ด๋ฏธ ์์์ ์ฌ์ฉํ์์ผ๋ฏ๋ก ์์์ ํน์ง์ ํ์ฉํ์ง ๋ชปํจ). ์ด๊ฒ์ ๋ฐ๋ฐํ์ฌ EJB์ ์ข ์์ ์ด์ง ์์ ํด๋์ค๋ค์ POJO๋ผ๊ณ ์ ์ํ๊ฒ ๋์๋ค.
- EJB ๋๋ ๊ฑ๋ค๋ค์ด ์ ์ํด๋ ํด๋์ค/์ธํฐํ์ด์ค๋ฅผ ์์/๊ตฌํ โ ๊ทธ๋์ ์ด๊ฑฐ์ ์ข ์์ ์ด์ง ์๋ ๊ฒ๋ค์ POJO๋ผ๊ณ ๋ถ๋ฅด์๊ณ ์ ํ ๊ฒ.
- ๊ฒฐ๋ก ์ ์ผ๋ก ๋น์ฆ๋์ค ์ฝ๋๊ฐ ํน์ ํ๋ ์์ํฌ์๋ง ์ข ์์ ์ด์ง ์๋๋ค๋ฉด POJO๋ผ๊ณ ๋ถ๋ฅธ๋ค. (์ ๋ ธํ ์ด์ ์ ์ฃผ์๊ณผ ๊ฐ์ด ๋งํนํ๋ค๋ ์๋ฏธ์์ ์ฝ๋์ ์ง์ ์ ์ผ๋ก ์ํฅ์ ์ฃผ์ง ์์ผ๋ฏ๋ก ์ ์ธ์ํจ๋ค.)
- ์์๋ฅผ ๋ค์ด ๋ณด์๋ฉด
@Service
์ ๊ฐ์ ์ ๋ ธํ ์ด์ ๋ค์ด ๋ถ์ ํด๋์ค๋ค๋ POJO๊ฐ ๋ง๋ค.- ๊ทธ ์ด์ ๋ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋, ์ ๋ ธํ ์ด์ ๋ง ๋ณ๊ฒฝํ๊ณ ์ฝ๋ ๋ ๋ฒจ์์ ๋ณ๊ฒฝ์ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฌผ๋ก ์์ธ๋ ์กด์ฌํ๋ค.
@Entity
๋ ํน์ ์ ์ฝ์ฌํญ์ด ํ์ํ๊ธฐ ๋๋ฌธ์(๋น ์์ฑ์, id ๋ฑ๋ฑ...) POJO๊ฐ ์๋๋ค.
๋ต๋ณ
- ๋ถ๋ณ
- ๋๋ถ๋ถ์ ์์กด๊ด๊ณ ์ฃผ์ ์ ํ๋ฒ ์ผ์ด๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์์ ๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ๊ทธ ์ด์ ๋ ๋ถ๋ณ์ ๋ณด์ฅํจ์ผ๋ก์จ, ์ถํ์ ๋ฐ์ํ ์ ์์ ๋ฒ๊ทธ๋ฅผ ์ฌ์ ์ ์ฐจ๋จํด ์ฃผ๋ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์ฑ์ ์ฃผ์
์ Setter์ ๋จ์ ์ ๋ชจ๋ ์ปค๋ฒํ๋ค.
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์์กด์ฑ์ ์ฃผ์ ํด์ฃผ์ง ์์๋ ์์ฑ์ด๋๋ค. -> NPE ๋ฐ์ ํ๋ฅ ์กด์ฌ.
- Setter ์ฃผ์ ์ ๊ฒฝ์ฐ ์ํ๊ฐ ๋ถ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ํ ํ๋ฅ ์ด ๋๋ค.
- ์คํ๋ง์ ์์กด์ ์ด์ง ์๋ค.
- ์คํ๋ง application context๊ฐ ์์ด๋ ๋จ๋ ์ผ๋ก ํ ์คํธ ํน์ ๋๋ฉ์ธ์ผ๋ก์จ์ ์ญํ ์ ์ํํ ์ ์๋ค.
๋ต๋ณ
- ์ฐ์ ์คํ๋ง ๊ณต์๋ฌธ์์์๋ ์ถ์ฒํ์ง ์๋๋ค.
- ์คํ๋ง์ ์์กด์ ์ธ ์ฝ๋๊ฐ ๋๋ค. - ์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์นจํฌ์ฑ(POJO)๋ฅผ ์งํฅํ๋ค.
- ์ฐ์ ํ๋ ์ฃผ์ ์ ์์ ์(Setter)์ฃผ์ ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ๋ํ, ํ๋ ์ฃผ์ ์ IoC ์ปจํ ์ด๋์์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด๋ฏ๋ก ์ปจํ ์ด๋์ ๋๋ฌด ์์กด์ ์ธ ์ฝ๋๊ฐ ๋๋ค.
- ๋ง์ฝ ํ ์คํธ์ application context๊ฐ ์๋ค๋ฉด ํด๋น ๊ฐ์ฒด๋ ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. (์์ ์๋ฐ ์ฝ๋ ๋จ์ ํ ์คํธ ๋ถ๊ฐ)
๋ต๋ณ
- servlet
- Java๋ก HTTP ์์ฒญ ๋ฐ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ์ค
- ์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ์ http ์์ฒญ์ ๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ , ์ ์ ํ http ์๋ต์ ์์ฑํ๋ ์๋ฐ ๊ฐ์ฒด์ด๋ค.
- ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ์ญํ .
- ์๋ธ๋ฆฟ์ ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๋ด์์๋ง ์คํ๋๋ค.
- servlet container
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ http ์์ฒญ ๋ฉ์์ง๋ฅผ ์ ์ ํ๊ฒ ํ์ฑ ํ, ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ์ ์ ํ ์๋ธ๋ฆฟ์ ์คํ์ํค๊ณ , ์๋ธ๋ฆฟ์ผ๋ก ๋ถํฐ ์๋ต๋ฐ์ ์์ฒญ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด http ์๋ต ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ปดํฌ๋ํธ.
- ์น ์๋น์ค์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ์๋ก ํ์ฌ๊ธ ๋น์ฆ๋์ค ๋ก์ง(serlvet ๊ตฌํ)๋ง ์ง์คํ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ
- ์ง์ํ๋ ๊ธฐ๋ฅ
- tcp/ip ์์ผ ์ฐ๊ฒฐ ๋ฐ ์ข ๋ฃ. (ํต์ ์ง์)
- http ์์ฒญ ๋ฉ์์ง ํ์ฑ ๋ฐ ์๋ต ๋ฉ์์ง ์์ฑ.
- ์๋ธ๋ฆฟ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ (์๋ธ๋ฆฟ์ ํ์๊ณผ ์ฃฝ์์ ๊ด๋ฆฌ)
- ๋ฉํฐ์ค๋ ๋ฉ ์ง์ (์์ฒญ๋น ์ค๋ ๋๋ก ์ฒ๋ฆฌ)
- ์ ์ธ์ ์ธ ๋ณด์ ๊ด๋ฆฌ
- ๋ํ์ ์ธ servlet container: tomcat, netty
๋ต๋ณ
- ์ฌ์ฉ์ ์์ฒญ ํ์ฑ
- ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ , HttpServletRequest, HttpServletResponse ์์ฑ.
- ์ฌ์ฉ์ ์์ฒญ์ ๋ถ์ํ์ฌ ๋์๋๋ ์๋ธ๋ฆฟ ๊ฒ์. (DD.xml์ ํตํด ์๋ธ๋ฆฟ์ ๋ฏธ๋ฆฌ ์ ์ํด๋๋ค.)
- ์ฐพ์ ์๋ธ๋ฆฟ์
service()
๋ฉ์๋ ํธ์ถํจ์ผ๋ก์จ, ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ์์. - ์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋๊ธธ ์๋ต์ ์์ฑ. ์ด๋ Response ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
- servlet container๊ฐ ์๋ธ๋ฆฟ์ผ๋ก๋ถํฐ ๋ฐ์ Response๋ฅผ ์ ์ ํ http response๋ก ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์ ๋ฐํ.
- ์์ฒญ์ ์ฒ๋ฆฌํ ์ค๋ ๋๋ ์๋ฉธํ๊ฑฐ๋ ์ค๋ ๋ ํ๋ก ๋ฐํ.
๋ต๋ณ
- ์คํ๋ง IoC Container์ ์ํด ์์ฑ ๋ฐ ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- ์คํ๋ง IoC Container์ ์ํด ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด.
- ์คํ๋ง์ ํต์ฌ ์์น์ IoC/DI์ ๊ทผ๊ฐ์ด ๋๋ ๊ฐ๋ .
- ์คํ๋ง IoC์ปจํ
์ด๋์ ์ํด์ ๊ด๋ฆฌ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ์ ์ด๋ฃจ๋ ๊ฐ์ฒด๋ค์ ์คํ๋ง์์๋ ๋น์ฆ(beans)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋น์ ์คํ๋ง IoC์ปจํ ์ด๋์ ์ํด์ ์ธ์คํด์คํ๋์ด ์กฐ๋ฆฝ๋๊ฑฐ๋ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
- ๋น๊ณผ ๋น ์ฌ์ด์ ์์กด์ฑ์ ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ๋ ๋ฉํ๋ฐ์ดํฐ ํ๊ฒฝ์ค์ ์ ์์กดํ๋ค.
- Bean์ ์ฃผ์ ์์ฑ
- class: ์ ๊ทํ๋ ์๋ฐ ํด๋์ค ์ด๋ฆ
- id: bean์ ๊ณ ์ ์๋ณ์
- scope: ๋น ์ค์ฝํ
- constructor-arg: ์์ฑ ์ ์์ฑ์์ ์ ๋ฌํ ์ธ์
- property: ์์ฑ ์ bean setter์ ์ ๋ฌํ ์ธ์
- init method์ destory method
๋ต๋ณ
- Java Bean
- ๋ฐ์ดํฐ ํํํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ ์๋ฐ ํด๋์ค.
- ํน๋ณํ ๊ฒ ์๊ณ , ๊ทธ์ ์๋ ๊ท์ฝ์ ๋ง์ถฐ์ ๋ง๋ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค.
- ๊ธฐ๋ณธ์์ฑ์๊ฐ ์กด์ฌํ๋ค.
- ๋ชจ๋ ๋ฉค๋ฒ๋ณ์์ ์ ๊ทผ์ ์ด์๊ฐ private์ด๋ค.
- ๋ฉค๋ฒ๋ณ์๋ง๋ค getter/setter๊ฐ ์กด์ฌํ๋ค.
- ์ธ๋ถ์์ ๋ฉค๋ฒ๋ณ์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ๋ฉ์๋๋ก๋ง ์ ๊ทผํ ์ ์๋ค.
- ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํด์ผํ๋ค.
- Spring Bean
- Spring Framework์ IoC Container์ ์ํด ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๊ด๊ณ์ค์ ์ด ๋๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
๋ต๋ณ
- ๋น์ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ์ด ์๋ค.
- singleton: ํ๋์ Bean ์ ์์ ๋ํด์ ์คํ๋ง IoC ์ปจํ ์ด๋๋ง๋ค ๋จ ํ๋์ ๊ฐ์ฒด๋ง ์กด์ฌ
- prototype: ํ๋์ Bean ์ ์์ ๋ํด์ ๋งค Bean์ ์ฐพ๋ ์์ฒญ๋ง๋ค ์๋ก์ด Bean์ ์์ฑ. (Ioc ์ปจํ ์ด๋๊ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ์์ ํ์ง ์๋๋ค. ๊ทธ์ ํฉํ ๋ฆฌ ๋ฉ์๋)
- request: ํ๋์ Bean ์ ์์ ๋ํด์ ํ๋์ HTTP Request์ ์๋ช ์ฃผ๊ธฐ ์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ง ์กด์ฌ. (๊ฐ๊ฐ์ ์์ฒญ๋ง๋ค ์์ ๋ง์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๋ค.)
- session: ํ๋์ Bean ์ ์์ ๋ํด์ ํ๋์ HTTP Session์ ์๋ช ์ฃผ๊ธฐ ์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ง ์กด์ฌ.
- global session: ํ๋์ Bean ์ ์์ ๋ํด์ ํ๋์ global HTTP Session์ ์๋ช ์ฃผ๊ธฐ ์์ ๋จ ํ๋์ ๊ฐ์ฒด๋ง ์กด์ฌ.
๋ต๋ณ
- ๊ณตํต์
- ๋ ๋ค IoC ์ปจํ ์ด๋์ ๋น์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํ ๋ฐฉ๋ฒ.
- ์ฐจ์ด์
- @Bean์ ๊ฐ๋ฐ์๊ฐ ์ปจํธ๋กค ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฑ๋กํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. (๊ทธ์ ์์ฑ๋ง ์ง์ํ๋ค.) - Method Level
- @Component๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปจํธ๋กค ๊ฐ๋ฅํ ํด๋์ค๋ฅผ ๋ฑ๋กํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. - Class Level
๋ต๋ณ
- XML์ ์ด์ฉํ ๋น ์ค์
- Component Scan์ ์ด์ฉํ ๋น ์ค์
- ์๋ฐ ์ค์ ํ์ผ(
@Configuration
)์ ์ด์ฉํ ๋น ์ค์
ํ ๊ธ
- ๋น ์ธ์คํด์คํ ๋ฐ ์์กด์ฑ ์ฃผ์
- ์คํ๋ง *Aware ๋์์ ๋ํ ๊ฒ์ฌ ๋ฐ ํธ์ถ (ํน์ ๋น์ด ์์ ์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ApplicationContext์ ์ ๊ทผํ ๋ ์ฌ์ฉ)
- ๋น ์์ฑ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ -
@PostConstruct
,@InitializingBean
,@Bean(initMethod)
- ๋น ์๋ฉธ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ -
@PreDestory
,DisposableBean
,@Bean(destoryMethod)
๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์ฐธ๊ณ .
๋ต๋ณ
@ComponentScan
์ด๋- ๋ฆฌํ๋ ์ ๊ธฐ์ ์ ํ์ฉํ์ฌ @Component ํน์ streotype ์ ๋ ธํ ์ด์ ์ด ๋ถ์ Class๋ค์ ์๋์ผ๋ก scanํ์ฌ Bean์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ์ญํ ์ ํด์ฃผ๋ ์ ๋ ธํ ์ด์ .
- ์คํ๋ง๋ถํธ๋
@ComponentScan
์ด ๋ถ์ ํจํค์ง๋ถํฐ Scan์ ํ๋ค.
- ComponentScan ๊ณผ์
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ํค๋ฉด, ์คํ๋ง IoC ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ค.
- ๋ง์ฝ
@ComponentScan
์ด ๋ถ์ ํด๋์ค๊ฐ ์๋ค๋ฉด, ํด๋น ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ ํจํค์ง์ ๋ฑ๋ก๋ ๋ชจ๋@Component
๊ฐ ๋ถ์ ํด๋์ค๋ฅผ ์ค์บํ๋ค. - ์ด๋, reflection api๋ฅผ ์ฌ์ฉํ๋ค. (ํ์๋ reflections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ Class ํ์ผ์ ์ค์บํ๋ค.)
- ์ค์บ๋ ํด๋์ค๋ฅผ IoC ์ปจํ ์ด๋์ ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
๋ต๋ณ
- ์คํ๋ง์ ๊ฒฝ์ฐ
- ํฐ์บฃ์ด ์คํ๋๋ค. (ํฐ์บฃ์ ํตํด ์คํํด์ผ ํจ)
ServletContextListener
์ ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ตฌํ์ฒด์ธContextLoaderListener
์ ์ํดApplication Context
์ด ์์ฑ๋๋ค.Application Context
๊ฐ ์์ฑ๋๋ ๊ณผ์ ์์, ๋น ์ ์ (xml, ์๋ฐ ์ค์ ํ์ผ, component scan)์ ์ํด ๋น์ด ์์ฑ๋๋ค.Application Context
์ ์ ์ฅ๋ ๋น๋ค์ ์์กด ๊ด๊ณ๊ฐ ์ฃผ์ ๋๋ค.- ๋น๋ค์ ์๋ช ์ฃผ๊ธฐ์ ๋ง๋ ๋ฉ์๋๊ฐ ์คํ๋๋ค. (๋น์ ์ด๊ธฐํ ๋ฉ์๋, ์๋ฉธ ๋ฉ์๋ ๋ฑ๋ฑ)
- ์คํ๋ง ๋ถํธ์ ๊ฒฝ์ฐ
- @SpringBootConfiguration
- @ComponentScan
- @EnableAutoConfiguration
๋ต๋ณ
- Thread Local์ด๋
- ๊ฐ Thread๋ง๋ค ๊ฐ๋ ๋ ๋ฆฝ์ ์ธ ์ง์ญ ๋ณ์๋ฅผ ์๋ฏธํ๋ค.
- Java.lang ํจํค์ง์์ ์ ๊ณตํ๋ ์ฐ๋ ๋ ๋ฒ์ ๋ณ์. ํ ์ค๋ ๋์์ ๊ณต์ ํ ๋ณ์.
- ํน์ง
- ๊ฐ์ ์ฐ๋ ๋ ๋ด์์๋ง ๊ณต์
- ๋ฐ๋ผ์ ๊ฐ์ ์ฐ๋ ๋๋ผ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ค ํ์ ์๋ค.
- ์คํ๋ง์์์ ์ฌ์ฉ์ฒ
- ํธ๋์ญ์ ๋งค๋์ ์์ transaction Context๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- SpringSecurity์์๋ ThreadLocal์ ๊ธฐ๋ณธ ์ ๋ต์ผ๋ก SecurityContextHolder๋ฅผ ์ฌ์ฉํ๋ค.
ํ ๊ธ
๋ต๋ณ
- Front Controller ํจํด์ ์ด์ฉํ์ฌ Servlet Container(Tomcat)์ ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋ Servlet.
- ๊ณตํต ์์ (์ธํฐ์ ํฐ, ์์ธ ์ฒ๋ฆฌ, Multipart ์ฒ๋ฆฌ)๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ฒญ์ ๋ง๋ ํธ๋ค๋ฌ์ ์์ ์ ์์ํ๋ Servlet.
๋ต๋ณ
- ๊ณตํต์
- ๋ ๋ค ์น๊ณผ ๊ด๋ จ๋ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ์ฒ๋ฆฌํ๋ค.
- ์ฐจ์ด์
- ์ ์ฉ๋๋ ์์์ ๋ฒ์, ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
- Filter๋ ์๋ธ๋ฆฟ์์ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ฉฐ, ํน์ Servlet์ด ์คํํ๊ธฐ ์ ์ ๋ฐ์ํ๋ค. (ex. Dispatcher Server ์ด์ )
- ์์ธ์ฒ๋ฆฌ: ์คํ๋ง์์ ์ ๊ณตํ๋ ExceptionHandler๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ธ์ฒ๋ฆฌ๊ฐ ๋ฒ๊ฑฐ๋ฌ์.
- Context: Filter๋ Spring์ Context ๋ฐ์์ ๋์ํ๊ธฐ์, ์คํ๋ง์์ ์ ๊ณตํ๋ DI๋ฑ์ ์ฌ์ฉํ ์ ์๋ค. (๋ฌผ๋ก ๋ฐฉ๋ฒ์ด ์์)
- ์ ๋ณด: ๋จ์ํ request, response ๊ฐ์ฒด๋ง ์ ๊ณตํ๋ค.
- ์์ :
doFilter
๋ง ์ ๊ณต.
- Interceptor๋ ์คํ๋งMVC์์ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ฉฐ, DispatcherServlet์์์ ํน์ ํธ๋ค๋ฌ๋ค์ ์คํํ๊ธฐ ์ ์ ๋ฐ์ํ๋ค.
- ์์ธ์ฒ๋ฆฌ: ์คํ๋ง์์ ์ ๊ณตํ๋ ExceptionHandler๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
- Context: Spring์ Context ๋ฒ์ ๋ด์์ ๋์ํ๊ธฐ์, ์คํ๋ง์์ ์ ๊ณตํ๋ DI๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ ๋ณด: request, response์ ๋ํด์ ์ด๋ค ํธ๋ค๋ฌ๊ฐ ํธ์ถ๋๋์ง์ ๋ํ ์ ๋ณด๋ ์ ๊ณต๋ฐ๋๋ค.
- ์์ : ํธ๋ค๋ฌ ํธ์ถ ์ (
preHandle
), ํธ์ถ ํ (postHandle
), ์์ฒญ ์๋ฃ ์ดํ(afterCompletion
)์ ์ ๊ณต.
- ์คํ ๊ณผ์
- HTTP ์์ฒญ -> Servler Container -> Filter -> Servlet (Dispatcher Servlet) -> Interceptor -> Controller
- ์ฌ์ฉ ์์
- Filter - ์คํ๋ง ๋ถํธ๋ ์๋ธ๋ฆฟ์ด ํ๋(๋์คํจ์ฒ)์ด๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ์์ฒญ์ ๋ํ ๊ณตํต ๋ก์ง์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ ๋ฏ ์ถ๋ค.
- xss(cross site sript)๋ฐฉ์ด, ์ธ์ฝ๋ฉ ๋ณํ์ฒ๋ฆฌ, ๋ก๊น .
- Interceptor - ์คํ๋ง์ ๊ธฐ๋ฅ(IoC, AOP๋ฑ๋ฑ)์ ํ์ฉํด์ ํน์ ํธ๋ค๋ฌ๋ค์ ๋ํ ๊ณตํต ๋ก์ง์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ ๋ฏ ์ถ๋ค.
- ๋ก๊ทธ์ธ ์ฒดํฌ, ๊ถํ ์ฒดํฌ ๋ฑ๋ฑ.
- Filter - ์คํ๋ง ๋ถํธ๋ ์๋ธ๋ฆฟ์ด ํ๋(๋์คํจ์ฒ)์ด๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ์์ฒญ์ ๋ํ ๊ณตํต ๋ก์ง์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ ๋ฏ ์ถ๋ค.
๋ต๋ณ
- ์ ํ ๋ ๋ฒจ
- ์งํ๋๊ณ ์๋ ํธ๋์ญ์ ์์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํธ์ถ๋ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ํ๋ ๊ฒ.
- ์ ์ค๋ช ๋ ๋ธ๋ก๊ทธ: https://deveric.tistory.com/86
๋ต๋ณ
@Transactional
- ์ ํ๋ฆฌ์ผ์ด์ ๋จ์์์ ํธ๋์ญ์ .
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋๋ฐ ์์ด์์ ํธ๋์ญ์ ์ ์๋ฏธํ๋ค. (DB ํธ๋์ญ์ ๋ณด๋ค ๋ฒ์๊ฐ ๋ ๋๋ค.)
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋๋ฐ ์์ด์ DB์ ํธ๋์ญ์ ์์๊ณผ COMMIT or ROLLBACK์ ๋ํ ์์ฒญ์ ํ๋ค.
- DB Transaction
- DB์ ๋ํ ํธ๋์ญ์ .
- ๊ทธ์ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์์์ ์์ฒญ์ ๋ง์ถฐ COMMIT or ROLLBACKํ๋ค.
๋ต๋ณ
- Connection Pool๋
- DB์ ์ฐ๊ฒฐ๋ Connection์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ Pool ์์ ์ ์ฅํด๋๊ณ ์๋ค๊ฐ ํ์ํ ๋ Connection์ Pool์์ ์ฐ๊ณ ๋ค์ Pool์ ๋ฐํํ๋ ๊ธฐ๋ฒ.
- ๋์ ์ ์์ ๊ฐ์ง ์ ์๋ Connection์ ํ๋๋ก ๋ชจ์๋๊ณ ๊ด๋ฆฌํ๋ค. (๋ฏธ๋ฆฌ Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํด๋น Connection ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธ)
- ์ ์ฌ์ฉํ๋? (Connection Pool์ด ์๋ค๋ฉด)
- Connection Pool์ด ์๋ค๋ฉด ๋งค ์์ฒญ๋ง๋ค DB์์ ์๋ก์ด ์ฐ๊ฒฐ์ ์์ฑํด์ผํ๋ค. ์ด๋ ๋งค๋ฒ DB ์ธ์ฆ์ ์ํด ์ฌ์ฉ์ ์ด๋ฆ, ์ํธ, TSL ์ฌ์์ด ํ์ํ๋ฉฐ ์ฐ๊ฒฐ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋น์ฉ์ด ์ปค์ง๊ฒ ๋๋ค.
- ๋ํ, ์์ฑ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, ๋ง์ฝ ์ฐ๊ฒฐ ์๋ฅผ ์ ์ฝ๋์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ฝ๊ฒ ๋งํด, Connection Pool์ ์ด์ฉํ๋ฉด ์ ํด์ง ๊ฐ์๋งํผ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ๋ ์ํ์ ์ค๋ ๋ ํ์ ์ด์ฉํ์ฌ ์ฐ๊ฒฐ ๋น์ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ต๋ณ
์ถ์ฒ: ์๋ฐ ์น์ ๋ค๋ฃจ๋ ๊ธฐ์
- ์ ํ๋ฆฌ์ผ์ด์ ์คํ
- DB์ ์ฐ๊ฒฐ๋ Connection ๊ฐ์ฒด๋ค์ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ Pool์ ์ ์ฅ.
- ์ด๋ ์ค์ํ ์ ์ ๋ฏธ๋ฆฌ DB์ Connection์ ๋งบ์ด๋๊ณ ์๋ค๋ ์ ์ด๋ค.
- DB์ ์์ฒญ์, pool์์ Connection ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ DB์ ์ ๊ทผํ๋ค.
- ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ๋ค์ Pool์ ๋ฐ๋ฉํ๋ค.
์ด๋ ๊ต์ฅํ ์ถ์์ ์ผ๋ก ์์ฑ๋ ๊ธ์ด๋ค. ์ถํ์ ๋ ์์ธํ ์ ๋ฆฌํ ์์ ์ด๋ค.
๋ต๋ณ
- Connection Pool ๋ถ์กฑ์
- ๋ชจ๋ ์์ฒญ์ด DB์ ์ ๊ทผํ๊ณ ์๊ณ ๋จ์ Connection์ด ์๋ค๋ฉด ํด๋น ํด๋ผ์ด์ธํธ๋ ๋๊ธฐ ์ํ๋ก ์ ํ์ํค๊ณ Pool์ Connection์ด ๋ฐํ๋๋ฉด ๋๊ธฐ ์ํ์ ์๋ ํด๋ผ์ด์ธํธ์๊ฒ ์์ฐจ์ ์ผ๋ก ์ ๊ณต๋จ.
- ๋ฐ์ํ ์ ์๋ ๋ฌธ์
- Timeout์ผ๋ก ์ธํ ์์ธ ๋ฐ์
๋ต๋ณ
- Connection Pool ๊ฐ์๋ ํธ๋ ์ด๋ ์คํ์ด๋ค.
- Connection์ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จ์ด ์๋ค. ๋๊ฒ ์ธก์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ์ปค๋ฅ์ ์ ๋ง์ด ์ฐ๊ฒฐํ ์ ์๋ค.
- ๋ฐ๋๋ก, ๋ฎ๊ฒ ์ธก์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ์ ๊ฒ ์ฌ์ฉํ์ง๋ง, ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ๋๊ธฐ ํ ์ ์๋ค.
- ์ด๋ ๊ฒ์ ๋ ๋๊ฒ ์ค์ ํด์ผํ๋๊ฐ?
- WAS์ Connection์ด ๋ ๋ง์์ผํ๋ ์ด์ ๋ WAS๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ด DB๋ฅผ ์ฌ์ฉํ๋ ์์ฒญ๋ง ์กด์ฌํ๋๊ฑด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก, DB Connection Pool๋ณด๋ค WAS์ Connection Pool์ด ๋ง์์ผํ๋ค.
ํ ๊ธ
- JPA
- Java Persistence API (์ธํฐํ์ด์ค์ ๋ชจ์)
- ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ก Hibernate๊ฐ ์กด์ฌ
- ์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค
- ์์ ๊ณ์ธต๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ปฌ๋ ์ ๋ค๋ฃจ๋ฏ์ด ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
- Java Persistence API (์ธํฐํ์ด์ค์ ๋ชจ์)
- ORM
- Object - Relational Mapping
- ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก ์ค๊ณ
- ๊ด๊ณํ DB๋ ๊ด๊ณํ DB๋๋ก ์ค๊ณ
- ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ์๋์ผ๋ก ๋งตํ
- Object - Relational Mapping
ํ ๊ธ
- ๊ฐ์ฒด์ DB ํ ์ด๋ธ๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก SQL ๋งตํ๊ณผ ORM๊ธฐ์ ์ด ์กด์ฌํ๋ค.
- JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ๋์ ํด๊ฒฐํด์ค - SQL ๋งตํ์ ์ค๋ณต๊ณผ ๋ฐ๋ณต ๋จ์ ์ ํด๊ฒฐํด์ค๋ค. (์์, ์ฐ๊ด๊ด๊ณ, ๊ฐ์ฒด ๊ทธ๋ํ ํ์, ๋น๊ต)
- SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ - ์์ ๊ณ์ธต๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ปฌ๋ ์ ๋ค๋ฃจ๋ฏ์ด ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
- ์์ฐ์ฑ
- ์ ์ง๋ณด์ -> ํ๋๋ง ์ถ๊ฐํ๋ฉด SQL์ JPA๊ฐ ๋์ ์ฒ๋ฆฌ
- ๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋ ๋ฆฝ์ฑ
- ์ฑ๋ฅ ์ต์ ํ (1์ฐจ ์บ์ฑ, SQL ๋ฐฐ์น ์์ฒญ, ์ง์ฐ ๋ก๋ฉ.
- ๊ฐ์ธ์ ์ผ๋ก ๋น์ฆ๋์ค ์ฝ๋๋ฅผ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์์ฑํ ์ ์๋ค๋ ์ฅ์ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
- JPA์์ ์ ๊ณตํ๋ Repository๋ ๋๋ฉ์ธ ๊ณ์ธต์ ์ํ๋ฉฐ, Collection์ฒ๋ผ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ๋ง Collection ๋ค๋ฃจ๋ฏ์ด ์ฌ์ฉํ๋ฉด JPA๊ฐ ์๋์ผ๋ก ์์ํ๋ฅผ ์์ผ์ค๋ค. ๋ํ, ๋ํฐ ์ฒดํน๋ ํด์ค๋ค.
- ๊ฐ์ฒด ๊ทธ๋ํ ํ์๋ ์ข์ ์ด์ ์ธ ๋ฏํ๋ค. SQL Mapper๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒ์ ์คํํ๋ SQL์ ๋ฐ๋ผ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ด๋๊น์ง ํ์ํ ์ ์๋์ง ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ฐํ์ง ๋ชปํ๋ค. ํ์ง๋ง JPA๋ ์ง์ฐ ๋ก๋ฉ์ ํตํด ํ์ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๋ค.
๋ต๋ณ
- ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋?
- ๊ฐ์ฒด์ RDB๋ ์งํฅํ๋ ๋ชฉ์ ์ด ๋ค๋ฅด๊ธฐ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์๊ณผ ํ ์ด๋ธ์ ๋ค๋ฃจ๋ ๋ฐฉ์๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๊ฐ ์กด์ฌํ๋ค.
- ๋ํ์ ์ธ ํจ๋ฌ๋ค์ ๋ถ์ผ์น
- ์์
- ๊ฐ์ฒด๋ ์์์ด ์กด์ฌํ์ง๋ง, DB ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋๋ค.
- ์ฐ๊ด๊ด๊ณ (๋ฐฉํฅ์ฑ) - ์ค์
- ๊ฐ์ฒด๋ ๋ฐฉํฅ์ฑ์ด ์กด์ฌํ๋ค. (member๊ฐ team์ ์์กดํ๋ฉด, member -> team๋ง ์ ๊ทผ ๊ฐ๋ฅ. team -> member๋ ๋ถ๊ฐ๋ฅ) - ๋จ๋ฐฉํฅ
- ํ ์ด๋ธ์ ๋ฐฉํฅ์ฑ์ด ์กด์ฌํ์ง ์๋๋ค. (member < - > team, join ํน์ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด ์๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.) - ์๋ฐฉํฅ
- ๊ฐ์ฒด ๊ทธ๋ํ ํ์
- ๊ฐ์ฒด ๊ทธ๋ํ ํ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ฌธ์ ๋ SQL์ ์ง์ ๋ค๋ฃจ๋ฉด ์ฒ์ ์คํํ๋ SQL์ ๋ฐ๋ผ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ด๋๊น์ง ํ์ํ ์ ์๋์ง ์ ํด์ ธ๋ฒ๋ฆฐ๋ค.
- ์ฆ, DAO ๊ณ์ธต์์ ๋ฐ์์จ ๊ฐ์ฒด๊ฐ ์ด๋๊น์ง ๊ทธ๋ํ ํ์์ด ๊ฐ๋ฅํ์ง ๋ชจ๋ฅธ๋ค. (์ด๋๊น์ง๊ฐ null์ผ ๊ฒ์ธ๊ฐ)
- ๋น๊ต
- DB๋ ๊ธฐ๋ณธ ํค์ ๊ฐ์ผ๋ก ๊ฐ ๋ก์ฐ๋ฅผ ๊ตฌ๋ถํ๋ค.
- ๊ฐ์ฒด๋ ๋๋ฑ์ฑ๊ณผ ๋์ผ์ฑ์ ํตํด ๊ฐ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๋ค.
- SQL ๋งตํ์ ๊ฒฝ์ฐ DAO์์ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ์ ๋์ผ์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ๋ค.
- JPA๋ ๋์ผํ ํธ๋์ญ์ ์์ ์กฐํํ ์ํฐํฐ๋ ๋์ผ์ฑ์ ๋ณด์ฅํ๋ค.
- ์์
- ํ ์ด๋ธ ์ฃผ๋ ๋ชจ๋ธ๋ง vs ๊ฐ์ฒด ์ฃผ๋ ๋ชจ๋ธ๋ง์ ๊ฐ์ ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์ฐธ๊ณ .
๋ต๋ณ
DB ์ธ๋ํค ๊ด๋ฆฌ์
- ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๊ฐ์ฒด ์ฐธ์กฐ ์ค์์ DB์์ ๋๊ธฐํ๋ฅผ ์ฑ ์์ง๋ ๊ฐ์ฒด.
- ์๋ฐฉํฅ ๋งคํ์์์ ๊ท์น
- ๊ฐ์ฒด์์์ ์๋ฐฉํฅ์ ๊ฐ์ฒด ๋ ๊ฐ๊ฐ ์๋ก ๋จ๋ฐฉํฅ, ํ ์ด๋ธ์์์ ์๋ฐฉํฅ์ ์ธ๋ ํค ํ๋.
- ๊ทธ๋ฌ๊ธฐ์ ๊ฐ์ฒด์์๋ ํ๋๋ก ์ฃผ์ธ์ ์ ํด์ค์ผํ๋ค.
- ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ ํน์ง
- ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง์ด ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌ(๋ฑ๋ก, ์์ ) ํ๋ค.
- ์ฃผ์ธ์ด ์๋ ์ชฝ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
mappedBy
๋ฅผ ํตํด ์ฃผ์ธ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ค์ ํด์ค๋ค.
๋ต๋ณ
- ์ธ๋ ํค๊ฐ ์๋ ๊ณณ์ ์ฃผ์ธ์ผ๋ก ์ ํ๋ค.
- ํ
์ด๋ธ์์
1 : N
๊ด๊ณ์์ ์ธ๋ ํค๋ ํญ์ ๋ค(N
)์ชฝ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ
์ด๋ธ์์
๋ต๋ณ
- ๋ฌธ์ ์
- ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ(
1
)์ด ๋ฐ๋ํธ ํ ์ด๋ธ(N
)์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๋ค.- ์ํฐํฐ๊ฐ ๊ด๋ฆฌํ๋ ์ธ๋ ํค๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ์๋ค.
Team
๊ฐ์ฒด ์์์Member
๋ฅผ ๊ฐ์ง์ง๋ง, ํ ์ด๋ธ์์์ ์ธ๋ ํค๋Member
๊ฐ ๊ฐ์ง๊ณ ์๋ค. (๋ฐฉํฅ์ฑ์ด ์๋ก ๋ค๋ฅด๋ค.)
- ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ๋ฅผ ์ํด ์ถ๊ฐ๋ก
UPDATE SQL
์ด ๋ ๋ผ๊ฐ๋ค.
- ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ(
- ๊ฐ๋ฅํ ์ผ๋๋ค ์๋ฐฉํฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ต๋ณ
- N + 1๋ฌธ์ ๋?
- ์ฟผ๋ฆฌ 1๋ฒ์ผ๋ก N๊ฑด์ ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์๋๋ฐ, ์ง์ฐ ๋ก๋ฉ์ผ๋ก ์ธํด ๊ฐ ์ํฐํฐ๋ง๋ค ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์ํ๋๋ ํ์์ ์๋ฏธํฉ๋๋ค.
- ex. ํ๋ค ์กฐํ (1) + N๊ฐ์ ํ ๊ฐ๊ฐ ์กฐํ (N)
- ํด๊ฒฐ ๋ฐฉ์
๋ต๋ณ
์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ด ์ฌ์ฉ๋๋ค.
- ์ฐ๊ธฐ ์ง์ฐ์ด ๋ฐ์ํ์ง ์๋๋ค.
- ํ์ด๋ฒ๋ค์ดํธ ์ธ์ ํ๋ฌ์ ๋ชจ๋๋ฅผ MANUAL๋ก ์ค์ ํ๊ณ , ๊ฐ์ ๋ก ํ๋ฌ์๋ฅผ ํธ์ถํ์ง ์๋ ํ ํ๋ฌ์๊ฐ ์ผ์ด๋์ง ์๋๋ก ํ๋ค.
- ํธ๋์ญ์ ์ ์ปค๋ฐํ๋๋ผ๋ ์์์ฑ ์ปจํ ์คํธ๊ฐ ํ๋ฌ์๋์ง ์๊ณ ์ํฐํฐ์ ๋ฑ๋ก, ์์ , ์ญ์ ๊ฐ ๋์ํ์ง ์๋๋ค.
- ๋ํฐ ์ฒดํน์ด ๋ฐ์ํ์ง ์๋๋ค.
- ๋ํฐ ์ฒดํน(๋ณ๊ฒฝ ๊ฐ์ง)๋ฅผ ํ์ง ์์ผ๋ฏ๋ก, ์ฑ๋ฅ ํฅ์.
๋ต๋ณ
- ์น์์ ๋ค๋ฅธ ์ถ์ฒ๋ก์ ๋ฆฌ์์ค ์์ฒญ์ ์ ํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ ์ฑ
์ ๋ ๊ฐ์ง์ด๋ค.
- SOP (Same-Origin Policy)
- CORS (Cross-Origin Resource Sharing)
- SOP์ CORS
- SOP๋ "๊ฐ์ ์ถ์ฒ์์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ค"๋ผ๋ ๊ท์น์ ๊ฐ์ง ์ ์ฑ ์ด๋ค. ๊ทธ๋ฌ๋ ์น ํ๊ฒฝ์์ ๋ค๋ฅธ ์ถ์ฒ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ์ผ์ด ๊ต์ฅํ ํํ๋ฏ๋ก ๋ฌด์์ ๋ง์ ์๋ง์ ์๋ค. ๊ทธ๋์ ๋ช ๊ฐ์ง ์์ธ ์กฐํญ์ ๋๊ณ ์ด ์กฐํญ์ ํด๋นํ๋ ๋ฆฌ์์ค ์์ฒญ์ ์ถ์ฒ๊ฐ ๋ค๋ฅด๋๋ผ๋ ํ์ฉํ๊ธฐ๋ก ํ๋ ์ ์ฑ ์ด ๋ฐ๋ก "CORS"์ด๋ค.
- ์ฝ๊ฒ ๋งํด, SOP ์ ์ฑ ์ ์น์์ ์ค์ํ๊ธด ํ์ค์ ์ผ๋ก ํ๋๋, CORS๋ ์ ์ฑ ์ ๋์ ํด์ ์ค์ ๋ ๋ค๋ฅธ ์ถ์ฒ๋ค๊ฐ์ ์์ ๊ตํ์ ํ์ฉํ๋ ๊ฒ.
- CORS๋
- ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ํ ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋ ์ฒด์ ๊ฐ ํ์ํ๋ค.
- CORS ๋์๋ฐฉ์
- ์น ํด๋ผ์ด์ธํธ์์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์์ฒญ์ ๋ณด๋ผ ๋ ์์ฒญ ํค๋์
Origin
์ด๋ผ๋ ํ๋๋ฅผ ํจ๊ป ๋ณด๋ธ๋ค. - ์ดํ ์๋ฒ๊ฐ ์๋ต์ ํ ๋ ํค๋์
Access-Control-Access-Origin
์ด๋ผ๋ ๊ฐ์ "์ด ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด ํ์ฉ๋ ์ถ์ฒ"๋ฅผ ๋ด๋ ค์ฃผ๊ฒ๋๋ค. - ์๋ต์ ๋ฐ์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ ์์ ์ด ๋ณด๋๋ ์์ฒญ์ Origin๊ณผ ์๋ฒ๊ฐ ๋ณด๋ด์ค ์๋ต์ Access-Control-Allow-Origin์ ๋น๊ตํด๋ณธ ํ ์ ํจํ ์๋ต์ธ์ง ํ์ธํ๋ค.
- ์น ํด๋ผ์ด์ธํธ์์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์์ฒญ์ ๋ณด๋ผ ๋ ์์ฒญ ํค๋์
- Preflight Request (CORS์์ ๊ฐ์ฅ ํํ ์ฌ์ฉ๋๋ ์ ๊ทผ์ ์ด ์๋๋ฆฌ์ค์ค ํ๋)
- ์์ฒญ์ ํ๋ฒ์ ๋ณด๋ด์ง ์๊ณ ์๋น ์์ฒญ๊ณผ ๋ณธ ์์ฒญ์ ๋๋์ด์ ์ ์กํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
OPTION
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ณธ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ์ค์ค๋ก ์ด ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด ์์ ํ์ง ํ์ธํ๋ค.- ์น ํด๋ผ์ด์ธํธ๋ ์ด์ ํด๋น ์์ฒญ์ ์ด๋ค Origin์ ๋ฃ์ ์ ์๋์ง ํ์ ํ์ผ๋ฏ๋ก, ๋ค์ ์์ฒญ์ ๋ง์ฝ Origin์ด ๋ค๋ฅด๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
๋ต๋ณ
- CSRF๋
- CSRF (Cross Site Request Forgery)๋ ์ ์์ ์ธ ์น์ฌ์ดํธ, ์ ์ ๋ฉ์ผ, ๋ธ๋ก๊ทธ, ์ธ์คํดํธ ๋ฉ์์ง ๋๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ธํด ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์๊ฐ ์ธ์ฆ ๋ ๋ค๋ฅธ ์ ๋ขฐํ ์ ์๋ ์ฌ์ดํธ์์ ์์น ์๋ ์์ ์ ์ํ ํ ๋ ๋ฐ์ํ๋ ๊ณต๊ฒฉ ์ ํ.
- CSRF๊ฐ ์ด๋ค์ง๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด์ผ ํ๋ค.
- ์์กฐ ์์ฒญ์ ์ ์กํ๋ ์๋น์ค (์ํ, ๋ค์ด๋ฒ๋ฑ๋ฑ)์ ํฌ์์๊ฐ ๋ก๊ทธ์ธ ํ ์ํ
- ํฌ์์๊ฐ ํด์ปค๊ฐ ๋ง๋ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ (์ฃผ๋ก ์๋๋ฌผ ์ฌ์ดํธ..)
๋ต๋ณ
- HTTP ํ๋กํ ์ฝ์ ํน์ฑ์ด์ ์ฝ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์ฟ ํค์ ์ธ์
์ ์ฌ์ฉํ๋ค.
- ๋น์ฐ๊ฒฐ์ฑ (connectionless): ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํ ํ ์๋ต์ ๋ฐ์ผ๋ฉด ๊ทธ ์ฐ๊ฒฐ์ ๋์ด ๋ฒ๋ฆฌ๋ ํน์ง
- ๋ฌด์ํ์ฑ (stateless): ํต์ ์ด ๋๋๋ฉด ์ํ๋ฅผ ์ ์งํ์ง ์๋ ํน์ง
- ๋ํ์ ์ผ๋ก ์ฟ ํค์ ์ธ์ ๋ฑ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ง์์ ์ธ ๋ก๊ทธ์ธ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ค. (๋ฌผ๋ก ํ ํฐ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฅ)
- ์ฟ ํค๋?
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ธก ๋ธ๋ผ์ฐ์ ๋ก์ปฌ์ ์ ์ฅ๋๋ ํค์ ๊ฐ์ด ๋ค์ด์๋ ์์ ๋ฐ์ดํฐ์ด๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋์ด๋ ์ฟ ํค ๋ง๋ฃ ๊ธฐ๊ฐ์ด ์๋ค๋ฉด ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ ) ์์ ๋ณด๊ดํ๊ณ ์๋๋ค.
- Response Header์
Set-Cookie
์์ฑ์ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ๋ง๋ค ์ ์๋ค. - ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์์ฒญํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ Request Header์ ๋ฃ์ด์ ์๋์ผ๋ก ์๋ฒ์ ์ ์กํ๋ค.
- ์์: "์์ด๋์ ๋น๋ฐ๋ฒํธ ์ ์ฅํ์๊ฒ ์ต๋๊น?", ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ, "์ค๋ ๋ ์ด์ ์ด ์ฐฝ ๋ณด์ง ์์"
- ์ธ์
์ด๋?
- ์ธ์ ์ ์ฟ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์๋ฒ์์ ๊ด๋ฆฌํ๋ ์ฌ์ฉ์ ์ ๋ณด ํ์ผ (๋ฐ์ดํฐ)์ด๋ค.
- ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ธ์
ID๋ฅผ ๋ถ์ฌํ๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์ ์ํด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํ ๋๊น์ง ์ธ์ฆ ์ํ๋ฅผ ์ ์งํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ Request๋ฅผ ๋ณด๋ด๋ฉด, ํด๋น ์๋ฒ์ ์์ง์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ผํ ์ธ์ ID๋ฅผ ๋ถ์ฌํ๋ค.
- ์์: ๋ก๊ทธ์ธํ ์ ๋ณด ์ ์ฅ.
- ์ฟ ํค์ ์ธ์
์ฐจ์ด
- ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ ์์น: ์ฟ ํค๋ ํด๋ผ์ด์ธํธ, ์ธ์ ์ ์๋ฒ
- ๋ณด์์ฑ: ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ธก์ ์ ์ฅํ๋ฏ๋ก ์ธ์ ๋ ์ค๋ํ ๋นํ ์ฐ๋ ค๊ฐ ์์ผ๋, ์ธ์ ์ ์ฟ ํค๋ฅผ ์ด์ฉํด์ sessionid๋ง ์ ์ฅํ๊ณ ๊ทธ๊ฒ์ผ๋ก ๊ตฌ๋ถํด์ ์๋ฒ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ฑ์ด ๋น๊ต์ ์ฐ์ํ๋ค.
- ๋ชจ๋ ์ ๋ณด๋ฅผ ์ธ์ ์ ์ ์ฅํ๋ฉด ์ข์ง๋ง, ์๋ฒ ์์์ ๋ญ๋น์ ์๋๋๋ฌธ์ ์ค์ํ์ง ์์ ์ ๋ณด๋ ์ฟ ํค์ ์ ์ฅํ๋ ๊ฒ์ด ์ข๋ค.
๋ต๋ณ
- ์ธ์
๋ฐฉ์์ ์ฅ๋จ์
- ์ฅ์
- ํ ํฐ(JWT)๊ณผ ๋น๊ตํ๋ฉด sessionid๋ ๊ต์ฅํ ์๋ค. (๋คํธ์ํฌ ๋น์ฉ์ด ํจ์ฌ ์ ๊ฒ ๋ ๋ค.)
- ์ค์ํ ์ ๋ณด๋ฅผ ์๋ฒ์ธก์ ์ ์ฅ/๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์จ์ ํ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ ๋ฆฌํ๋ค.
- ๋จ์
- sessionid๊ฐ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌ๋๊ธฐ์ ์ฌ์ ํ ๊ณต๊ฒฉ์ ์ํ์ด ์กด์ฌํ๋ค. (์ ํจ๊ธฐ๊ฐ, HttpOnly, Secure๋ฑ์ ํตํด ๋ณด์์ฑ์ ๋์ฌ์ผํ๋ค.)
- ์๋ฒ ํ์ฅ์ฑ๋ฉด์์ ์ข์ง ์๋ค. (๋ก๋๋ฐธ๋ฐ์ฑ์ ์ ์ฉํ๋ค๋ฉด ์ธ์ ์๋ฒ๋ฅผ ๋ฐ๋ก ๋๊ฑฐ๋ sticky session, session clustering๋ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค)
- ๋ฉํฐ ๋๋ฐ์ด์ค ํ๊ฒฝ์์ ๋ก๊ทธ์ธ ์ ์ ๊ฒฝ์จ์ค์ผํ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
- stateful (๋งค ์์ฒญ๋ง๋ค ์ธ์ ์ ์์ฒญ์ ๋ ๋ฆฌ๋ ๋น์ฉ๊ฐ ๋ฐ์ํ๋ค.)
- ์ฅ์
- ํ ํฐ ๋ฐฉ์์ ์ฅ๋จ์
- ์ฅ์
- ์๋ฒ ํ์ฅ์ฑ๋ฉด์์ ์ข๋ค. (๋ก๋๋ฐธ๋ฐ์ฑํด๋ ๋ฐ๋ก ํด์ค ์์ ์ด ์๋ค.)
- ๋ฉํฐ ๋๋ฐ์ด์ค ํ๊ฒฝ์ ๋ํ ๋ถ๋ด์ด ์๋ค.
- stateless
- ๋จ์
- ํด๋ผ์ด์ธํธ์ธก์ ํ ํฐ์ด ์ ์ฅ๋๊ฒ ๊ณต๊ฒฉ์ ๋
ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. (์ค์ ๋ก body๋ถ๋ถ์ base64url์ ํตํด ์ฝ๊ฒ ๋์ฝ๋ฉํ ์ ์๋ค.)
- ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด์ผ๋ฉด ์๋๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํด ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ์ ์๋ ์๊ฐ์ ์ต์ํํด์ผํ๋ค.
- ํด๋ผ์ด์ธํธ์ธก์ ํ ํฐ์ด ์ ์ฅ๋๊ฒ ๊ณต๊ฒฉ์ ๋
ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. (์ค์ ๋ก body๋ถ๋ถ์ base64url์ ํตํด ์ฝ๊ฒ ๋์ฝ๋ฉํ ์ ์๋ค.)
- ์ฅ์
๋ต๋ณ
์ง์ ํ REST API๋ ๋ก์ด ํ๋ฉ์ด ์ ์ํ REST๋ฅผ ์ง์ผ์ ๋ง๋ API๋ฅผ ์๋ฏธํ๋ค.
๋ณธ ์ ๋ฆฌ์๋ฃ์์ ๊ฐ๋จํ๋ง ์ค๋ช ํ๋ฏ๋ก, ๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๊ทธ๋ฐ REST API๋ก ๊ด์ฐฎ์๊ฐ?
- REST๋
- Representational State Transfer์ ์ฝ์
- ์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค
- ์์(Resource)์ ํํ(Representation)์ ์ํ ์ํ ์ ๋ฌ
- REST ๊ตฌ์ฑ
- ์์ (Resource) : URI
- ๋ชจ๋ ์์์ URI๋ผ๋ ๊ณ ์ ํ ID๊ฐ ์กด์ฌํ๋ฉฐ, ์์์ ์๋ฒ์ ์กด์ฌํ๋ค.
- ํ์ (Verb) : HTTP Method
- GET, POST, PUT, DELETE
- ํํ (Representation)
- ํด๋ผ์ด์ธํธ๊ฐ ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ ์์ฒญํ๋ฉด ์๋ฒ๋ ์ด์ ์ ์ ํ ์๋ต์ ๋ณด๋ธ๋ค.
- REST์์ ํ๋์ ์์์ JSON, XML๋ฑ ์ฌ๋ฌ ํํ์ Representation (ํํ)์ผ๋ก ๋ํ๋ด์ด ์ง ์ ์๋ค.
- ์์ (Resource) : URI
- REST ์ ์ฝ ์กฐ๊ฑด (์ด ๋ชจ๋ ๊ฒ์ ์ง์ผ์ผ ์ง์ ํ REST๋ผ๊ณ ํ ์ ์๋ค.)
- client - server
- stateless (๋ฌด์ํ์ฑ)
- cache (์บ์)
- uniform interface (self-descriptive message, HATEOAS๋ฑ)
- layered system (๋ค์ค ๊ณ์ธต - ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต, ํ๋ก์ ๋ฑ๋ฑ)
- code-on-demand (optional)
- REST API๋?
- REST ๊ธฐ๋ฐ์ ๊ท์น์ ์ง์ผ์ ์ค๊ณ๋ API
- ๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์์ ๋ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ธ ๋ฏ ํ๋ค.
๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ
๋ต๋ณ
- 2xx
- 200 OK
- 201 Created (PUT ๋๋ POST์ ๊ฒฐ๊ณผ)
- 202 Accepted
- 204 No Content (์์ฒญ์ ๋ํด์ ๋ณด๋ด์ค ์ ์๋ ์ปจํ ์ธ ๊ฐ ์์ง๋ง, ํค๋๋ ์๋ฏธ์์ ์ ์๋ค.)
- 3xx
- 301 Moved Permanently (๋ฆฌ๋ค์ด๋ ์ - ์์ฒญํ ๋ฆฌ์์ค์ URI๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ฏธํ๋ค.)
- 302 Found (๋ฆฌ๋ค์ด๋ ์ - ์์ฒญํ ๋ฆฌ์์ค์ URI๊ฐ ์ผ์์ ์ผ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ฏธํ๋ค.)
- 4xx
- 400 Bad Request (์๋ชป๋ ๋ฌธ๋ฒ์ด๋ ์์ฒญ์ผ๋ก ์ธํ์ฌ ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ ์ ์์์ ์๋ฏธํ๋ค.)
- 401 Unauthorized (๋ฏธ์ธ์ฆ)
- 403 Forbidden (ํด๋ผ์ด์ธํธ๊ฐ ์ฝํ ์ธ ์ ์ ๊ทผํ ๊ถ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์์ง ์์์ ์๋ฏธํ๋ค. 401๊ณผ ๋ค๋ฅธ ์ ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ์๊ณ ์์ต๋๋ค.)
- 405 Method Not Allowed
- 406 Not Accepted
- 5xx
- 500 Internal Server Error (์๋ฒ๊ฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ ์ํฉ์์ ๋ฐ์ํ๋ค.)
- 502 Bad Gateway (์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ์๋ต์ ์ป๊ธฐ ์ํด ๊ฒ์ดํธ์จ์ด๋ก ์์ ํ๋ ๋์ ์๋ชป๋ ์๋ต์ ์์ ํ์์ ์๋ฏธํ๋ค.)
๋ต๋ณ
- HTTP Request
- ์์ ์ค
- ํค๋
- ๋ฐ๋
- HTTP Response
- ์ํ ์ค
- ํค๋
- ๋ฐ๋
๋ต๋ณ
๋ต๋ณ
- ํ ์ค ์ ๋ฆฌ
- ๋จผ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ์ ์ฌ์ฉํ ๋์นญํค๋ฅผ ๋น๋์นญํค ์ํธํ ๋ฐฉ์์ ์ด์ฉํด ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ๊ณ ์ฃผ๊ณ ๋ฐ์ ํค๋ฅผ ๊ฐ์ง๊ณ ๋์นญํค ์ํธํ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค.
- HTTPS ์ถ์์ ์ธ ๋์ ๊ณผ์ *
- HTTPS ์ถ์์ ์ธ ๊ตฌ์ฒด ๊ณผ์ (SSL Handshake) *
๋ต๋ณ
์ถ์ฒ: https://stackoverflow.com/questions/224664/whats-the-difference-between-a-proxy-server-and-a-reverse-proxy-server
- End Point - Forward Proxy ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ End Point ๊ฐ ์ค์ ์๋ฒ ๋๋ฉ์ธ์ด๊ณ ํ๋ก์๋ ๋ ์ฌ์ด์ ํต์ ์ ๋ด๋นํด์ค๋ค. - Reverse Proxy ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ End Point ๊ฐ ํ๋ก์ ์๋ฒ์ ๋๋ฉ์ธ์ด๊ณ ์ค์ ์๋ฒ์ ์ ๋ณด๋ ์ ์ ์๋ค.
- ๊ฐ์ถฐ์ง๋ ๋์ - Forward Proxy ๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ถฐ์ง๋ค. - ์์ฒญ ๋ฐ๋ ์๋ฒ๋ ํฌ์๋ ํ๋ก์ ์๋ฒ๋ฅผ ํตํด์ ์์ฒญ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ฅผ ์ ์ ์๋ค. - Reverse Proxy ๋ ๋ฐ๋๋ก ์๋ฒ๊ฐ ๊ฐ์ถฐ์ง๋ค. - ํด๋ผ์ด์ธํธ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ์๊ฒ ์์ฒญํ๊ธฐ ๋๋ฌธ์ ์ค์ ์๋ฒ์ ์ ๋ณด๋ฅผ ์ ์๊ฐ ์๋ค.
๋ต๋ณ
- ์ด์์ฒด์ ๋?
- ์ปดํจํฐ ํ๋์จ์ด์ ์ฌ์ฉ์ ์ํํธ์จ์ด ์ฌ์ด์์ ์ค์ฌ์ ์ญํ .
- ์ฌ์ฉ์๊ฐ ์ง์ ๋ค๋ฃจ๊ธฐ ํ๋ ๊ฐ์ข ํ๋์จ์ด ์์๋ค์ ์ ์ดํ๊ณ ๊ด๋ฆฌํด์ฃผ๋ ์ํํธ์จ์ด (์ธํฐํ์ด์ค ์ญํ )
- ์ข์ ์๋ฏธ์ ์ด์์ฒด์
- ์ปค๋
- ๋์ ์๋ฏธ์ ์ด์์ฒด์
- ์ปค๋๋ฟ๋ง ์๋๋ผ ์์คํ ์ ์ํ ์ ํธ๋ฆฌํฐ๋ค์ ๊ด๋ฒ์ํ๊ฒ ํฌํจ
- ์ด์ ์ฒด์ = ์ปค๋ (ํต์ฌ ๋ถ๋ถ) + ์์คํ ์ ํธ๋ฆฌํฐ
๋ต๋ณ
- ํ๋ก๊ทธ๋จ: ์์ค ์ฝ๋๊ฐ ํ์ผ ๋จ์๋ก ์ ์ฅ ์ฅ์น์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์์ง ์คํ๋์ง ์์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
- ๋์คํฌ์ ์ ์ฅ๋์ด ์๋ ์คํ ๊ฐ๋ฅํ ํ์ผ
- ํ๋ก์ธ์ค: ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ. ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์ ์ฃผ์ ๊ณต๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ์ํ.
- ํ๋ก๊ทธ๋จ์ด ์คํ๋์ด RAM์ ์ ์ฌ๋์ด ์คํ ์ค์ธ ์ํ
- ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ํฌํจํ ์ ์๋ค.
- ์ค๋ ๋: ํ๋ก์ธ์ค์ ์คํ ๋จ์. ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์๋ ์ค๋ ๋๋ผ๋ฆฌ๋ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ ์ ์๋ค.
๋ต๋ณ
- ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ PCB์ ์ฐจ์ด
- PCB๋ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ด์์ฒด์ ๊ฐ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. (ํ๋ก์ธ์ค์ ์์น ๊ฐ, PC๊ฐ ๋ฑ๋ฑ)
- ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ ๊ทธ์ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฅ์์ผ๋๋ ๊ณต๊ฐ์ด๋ค.
- ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- ์ฝ๋ ์์ญ: ํ๋ก์ธ์ค๊ฐ ์คํํ ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด์ ํํ๋ก ์ ์ฅ๋ ๊ณต๊ฐ.
- ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ฉฐ Read-Only์ด๋ค.
- ๋ฐ์ดํฐ ์์ญ: ์ ์ญ ๋ณ์, static ๋ณ์๋ฑ์ด ์ ์ฅ๋ ๊ณต๊ฐ.
- ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ฉฐ Read-Write(์คํ ๋์ค ๋ณ๊ฒฝ ๊ฐ๋ฅ)์ด๋ค.
- ํ ์์ญ: ๊ฐ๋ฐ์๊ฐ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ๋์ ํ ๋นํ ๋ ์ฌ์ฉ๋๋ค. (ex. malloc)
- ๋ฐํ์์ ๊ฒฐ์ ๋๋ฉฐ ๊ฐ๋ฐ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋์ ์ผ๋ก ํ ๋น๋๊ณ ํด์ ๋๋ค.
- ์คํ ์์ญ: ํธ์ถ๋ ํจ์์ ์ํ์ ๋ง์น๊ณ ๋ณต๊ทํ ์ฃผ์ ๋ฐ ๋ฐ์ดํฐ(์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด๊ฐ ๋ฑ)๋ฅผ ์์๋ก ์ ์ฅํ๋ ๊ณต๊ฐ
- ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ฉฐ, ์ ํด์ง ํฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ์ด๊ณผ์ StackOverFlow๊ฐ ๋ฐ์ํ๋ค.
- ์ฝ๋ ์์ญ: ํ๋ก์ธ์ค๊ฐ ์คํํ ์ฝ๋๊ฐ ๊ธฐ๊ณ์ด์ ํํ๋ก ์ ์ฅ๋ ๊ณต๊ฐ.
๋ต๋ณ
- ์ค๋ ๋๊ฐ ์์ ๋์ ๋จ์ ์ ์๋์ ๊ฐ๋ค.
- ํ๋ก์ธ์ค๊ฐ์ ์ปจํ
์คํธ ์ค์์นญ ์ค๋ฒํค๋
- ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค๋ง๋ค์ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฉํฐ ํ๋ก์ธ์ค๋ก ๋์ํ๋ค๋ฉด ๋น๋ฒํ ์ปจํ ์คํธ ์ค์์นญ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๋ค.
- ํ๋ก์ธ์ค ์ฌ์ด ํต์ ์ ์ด๋ ค์
- ํ๋ก์ธ์ค๋ค์ ๋ ๋ฆฝ๋ ์ฃผ์๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋จ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ก์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผ ํ ์ ์๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ, ์์ผ๋ฑ์ ์ด์ฉํด์ ์ ๊ทผ ํด์ผ ํ๋ค.
- ํ๋ก์ธ์ค๊ฐ์ ์ปจํ
์คํธ ์ค์์นญ ์ค๋ฒํค๋
- ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด
- ๋น ๋ฅธ ์ปจํ
์คํธ ์ค์์น
- ์ค์ผ์ค๋ง ๋จ์๊ฐ ํ๋ก์ธ์ค์๋ ์์ , Context Switching๊ฐ ์ผ์ด๋ ๋๋ง๋ค ์บ์ flush, ์บ์ ๋ณต์ ๋ฑ์ ํด์ผํ๋ค.
- ํ์ง๋ง, ์ค์ผ์ค๋ง ๋จ์๊ฐ Thread๋ก ๋๋ฉด์ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ Thread๋ค์ Context Switch๋ฅผ ํ ๋๋ TCB๋ง ๋ฐ๊พธ๋ฉด ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์์์์ ์ฃผ์ ์ด๋๋ ํ์์๋ค. (ํ๋ก์ธ์ค๋ ์ฃผ์ ์ด๋์ ํด์ผํจ)
- ์ค๋ ๋๊ฐ ํต์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋ ๊ตฌํ
- ์ค๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ฉฐ, ํ๋ก์ธ์ค์ Heap, Static, Code ์์ญ์ ๊ณต์ ํ๋ค. ์ฆ, ๊ฐ์ ํ๋ก์ธ์ค๋ด์์ ์ค๋ ๋๋ผ๋ฆฌ์ ํต์ ์ ๊ต์ฅํ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
- ๋น ๋ฅธ ์ปจํ
์คํธ ์ค์์น
๋ต๋ณ
- ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ์ถ๊ฐํ๊ธฐ ์ํด์ ์ต์ ์กฐ๊ฑด์ผ๋ก ๋ ๋ฆฝ๋ ์คํ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์คํ์ ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ์ธ์๋ก ๋๋์๊ฐ ์ฃผ์๊ฐ ๋ฐ ํจ์ ๋ด์์ ์ ์ธํ๋ ๋ณ์ ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ณต๊ฐ์ด๋ค.
- ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ ๋ ๋ฆฝ์ ์ธ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ์๋ฏธํ๋ค.
๋ต๋ณ
์ถ์ฒ: http://www.kocw.net/home/search/kemView.do?kemId=1223639&ar=relateCourse
์ถ์ฒ: https://slideplayer.com/slide/12698810/
TCB๋ PCB๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ค
- PCB (Process Control Block)
- ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ.
- OS์ ์ค์ผ์ค๋ฌ์ ์ํด Context Switching๋๋ ํ๋ก์ธ์ค์ ์ ๋ณด ๋จ์
- TCB (Thread Control Block)
- ์ค๋ ๋์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ.
- ํ๋ก์ธ์ค์ ์กด์ฌํ๋ ์ค๋ ๋ ์ค์ผ์ค๋ง ๋ฐฉ์(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ํด Context Switching๋๋ ์ค๋ ๋์ ์ ๋ณด ๋จ์.
- ๋น์ฐํ ๊ณต์ ํ๋ ์์์ด ํจ์ฌ ๋ง์ TCB์ ์ปจํ ์คํธ ์ค์์นญ์ด ์ฑ๋ฅ์ ํจ์ฌ ์ข๋ค. ๊ทธ๋ฌ๊ธฐ์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ.
๋ต๋ณ
์๊พธ ํท๊ฐ๋ ค์ ๊ทธ๋ฆผ์ ๋ง์ด ์ฒจ๋ถํ๋ค..
์ถ์ฒ: https://medium.com/from-the-scratch/dont-be-confused-between-concurrency-and-parallelism-eac8e703943a
์ถ์ฒ: https://www.codeproject.com/Articles/1267757/Concurrency-vs-Parallelism
- ๊ณตํต์
- ๋์์ ์ฌ๋ฌ ๊ฐ์ง ์ผ์ ํ๋ ๊ฒ.
- ๋ณํ์ ์ํํธ์จ์ด ์ฑ์ง์ด๊ณ , ๋ณ๋ ฌ์ ํ๋์จ์ด์ ์ฑ์ง์ด๋ค.
์ถ์ฒ: https://luminousmen.com/post/concurrency-and-parallelism-are-different
์ถ์ฒ: https://luminousmen.com/post/concurrency-and-parallelism-are-different
๋ต๋ณ
- ๋ฉํฐ ํ๋ก์ธ์ค
- ๊ฐ๋
- ๊ฐ์ ์๊ฐ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์ฐ๊ณ ์คํํ๋ ๋ฐฉ์.
- ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์ํํ๋ ๊ฒ. (๋ถ๋ชจ - ์์ ๊ด๊ณ๋ฅผ ํตํ ๋ ๋ฆฝ์ ์ธ ๊ตฌ์กฐ)
- ์์ - ํฌ๋กฌ
- ํฌ๋กฌ์ ๊ฐ ํญ์ (Renderer) ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ด๋ค, ์ด๋ค์ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ฐ ํญ์ IPC (Inter-Process Communication) ๋ฉ์ปค๋์ฆ์ ์ด์ฉํ์ฌ ํต์ ํ๋ค. (๊ณต์ ๋ฉ๋ชจ๋ฆฌ, ๋ฉ์์ง ์ ๋ฌ ์ค ํ๋๋ฅผ ์ ํ)
- ์ฅ์
- ๋ ๋ฆฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋๋ค.
- ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด๋ ์์ ํ๋ก์ธ์ค ์ด์ธ์ ๋ค๋ฅธ ํฌ๋ฅด์ธ์ค์ ์๋ฌด๋ฐ ์ํฅ์ ๋ผ์น์ง ์๋๋ค.
- ๋จ์
- ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋ฏ๋ก ์ปจํ ์คํธ ์ค์์นญ์ ์ํ ์ค๋ฒํค๋ (์บ์ ์ด๊ธฐํ)๊ฐ ๋ฐ์ํ๋ค.
- ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฐจ์ง
- ๊ฐ๋
- ๋ฉํฐ ์ค๋ ๋
- ๊ฐ๋
- ๊ฐ์ ์๊ฐ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์ฐ๊ณ ์คํํ๋ ๋ฐฉ์.
- ํ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์์ ์ํํ๋ ๊ฒ.
- ์์
- ์น ์๋ฒ - ์น ์๋ฒ๋ ๊ฐ ์์ฒญ์ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ - ํ๋์ ์ค๋ ๋๋ ๋ ๋๋ง, ๋ค๋ฅธ ์ค๋ ๋๋ ๋คํธ์ํฌ ํต์ ์ ์ํํ๋ค.
- ์๋ ํ๋ก์ธ์ค - ๊ธ์ ์์ฑํ๋ฉด ๋ง์ถค๋ฒ ๋ฐ ๋ฌธ๋ฒ ๊ฒ์ฌ๋ฑ์ ์ํํ๋ค.
- ์ด์์ฒด์ ์ปค๋ - Linux ์์คํ ๋ถํ ์ ์ฌ๋ฌ ์ปค๋ ์ค๋ ๋๊ฐ ์์ฑ๋๊ณ , ๊ฐ ์ค๋ ๋๋ ์ฅ์น ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋๋ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ์ ๊ฐ์ ํน์ ์์ ์ ์ํํ๋ค๊ณ ํ๋ค.
- ์ฅ์
- ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฐจ์ง
- TCB๋ฅผ ์ปจํ ์คํธ ์ค์์นญํ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฆ
- ์ฑ๊ธ ์ค๋ ๋์ ๋นํด ์๋ต์ฑ์ด ๋นจ๋ผ์ง๋ค. (ํ๋์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ)
- ์์์ ๊ณต์ ํ๋ค.
- ๋จ์
- ๋๊ธฐํ์ ๋ฌธ์ ์กด์ฌ
- ํ๋์ ์ค๋ ๋๊ฐ ๋ฌธ์ ๋ฐ์์ ์ ์ฒด ์ค๋ ๋์ ์ํฅ์ ๋ผ์น ์ ์์
- ๊ฐ๋
- ์์
- ์น ์๋ฒ๊ฐ ๋งค ์์ฒญ๋ง๋ค ํ๋ก์ธ์ค๋ก ํ ๋นํ๋ค๋ฉด ๋ฉํฐ ํ๋ก์ธ์ค, ์ค๋ ๋๋ก ํ ๋นํ๋ค๋ฉด ๋ฉํฐ ์ค๋ ๋๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ต๋ณ
๋ต๋ณ
๋ต๋ณ
- ์ปจํ
์คํธ ์ค์์นญ ๊ฐ๋
- ํ๋์ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก๋ถํฐ ๋ค๋ฅธ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก CPU์ ์ ์ด๊ถ์ด ์ด์๋๋ ๊ณผ์ .
- ์ปจํ
์คํธ ์ค์์นญ๋ ์ธ์ ๋ฐ์ํ๋๊ฐ?
- ์ธํฐ๋ฝํธ: ์ฌ๋ฌ ์ฅ์น๋ค์ด CPU์ ์์
์ด ํ์ํ ๋ ๋ฐ์์ํค๋ ์ด๋ฒคํธ. (์์คํ
-> ์์คํ
)
- ํ๋์จ์ด ์ธํฐ๋ฝํธ: ์ปจํธ๋กค๋ฌ๋ฑ ํ๋์จ์ด ์ฅ์น๊ฐ ๋ณด๋ด๋ ์ธํฐ๋ฝํธ.
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ: ์ํํธ์จ์ด๊ฐ ๋ณด๋ด๋ ์ธํฐ๋ฝํธ. (aka. ํธ๋ฉ)
- ex. ์๋ถํ
- ์์คํ
์ฝ (์ํํธ์จ์ด ์ธํฐ๋ฝํธ)
- ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋ด๋ถ์ ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ณ ์ถ์ ๋ ์ด์์ฒด์ ์ ์๋น์ค ์์ฒญํ๋ ์ธํฐ๋ฝํธ. (์ฌ์ฉ์ -> ์์คํ )
- ์ปค๋ ์์ญ์ ํจ์ ํธ์ถ. (CPU์ ์ ์ด๊ถ์ด ์ด์์ฒด์ ๋ก ๋์ด๊ฐ๋ค.)
- ex. ์ ์ถ๋ ฅ, ์์ธ ์ฒ๋ฆฌ ๋ฑ๋ฑ
- ์ธํฐ๋ฝํธ: ์ฌ๋ฌ ์ฅ์น๋ค์ด CPU์ ์์
์ด ํ์ํ ๋ ๋ฐ์์ํค๋ ์ด๋ฒคํธ. (์์คํ
-> ์์คํ
)
๋ต๋ณ
๋ต๋ณ
Ready Queue์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ค์ผ์ค๋งํ๋ ๊ฒ.
- CPU ์ค์ผ์ค๋ง์ด ํ์ํ ์ด์
- ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ ํ๋ CPU๋ฅผ ์ฌ์ฉํด์ผํ๋ฏ๋ก ํ๋ก์ธ์ค๊ฐ์ ์ค์ผ์ค๋ง์ด ํ์ํ๋ค.
- ์ฆ, ๋งค ์์ ์ด๋ค ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํด ์์ ์ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ์ผ์ด ํ์ํ๋ค.
- CPU ์ค์ผ์ค๋ง์ ๋ชฉํ
- CPU๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด์, ํน์ ํ๋ก์ธ์ค๊ฐ ๋ถ์ด์ต์ ๋นํ์ง ์๋๋ก ํ๋๊ฒ.
- CPU ์ค์ผ์ค๋ง ๋ฐฉ์
- ์ ์ ํ ๋ฐฉ์ (์๋ถํ ) - CPU๊ฐ ์ ์ด๊ถ์ ๊ฐ์ง
- ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ธฐ ์ํ๋๋ผ๋ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ ๋ฐฉ๋ฒ.
- ๋น์ ์ ํ ๋ฐฉ์ - CPU๊ฐ ์ ์ด๊ถ์ ๊ฐ์ง์ง ์์
- CPU๋ฅผ ํ๋ํ ํ๋ก์ธ์ค๊ฐ ์ค์ค๋ก CPU๋ฅผ ๋ฐ๋ฉํ๊ธฐ ์ ๊ฐ์ง๋ CPU๋ฅผ ๋นผ์๊ธฐ์ง ์๋ ๋ฐฉ๋ฒ.
- ์ ์ ํ ๋ฐฉ์ (์๋ถํ ) - CPU๊ฐ ์ ์ด๊ถ์ ๊ฐ์ง
- CPU ์ค์ผ์ค๋ง ๊ธฐ๋ฒ
- ์ ์
์ ์ถ (FCFS, First Come First Served)
- CPU๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋์ฐฉํ ํ๋ก์ธ์ค๋ค ์ค ๋จผ์ ์จ ๊ฒ์ ๋จผ์ ์ฒ๋ฆฌ.
- ๋น์ ์ ํ ๋ฐฉ์ (ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ฐ๋ฉํ ๋๊น์ง ๋๊ธฐ)
- ๋จ์
- ์ค๋ ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ์ค๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ค. - Convoy Effect
- SJF (Shortest Job Firs)
- ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋์ฐฉํ์ด๋ CPU burst time์ด ์งง์ ํ๋ก์ธ์ค์๊ฒ ์ ํ ๋นํ๋ ๋ฐฉ์
- ๋น์ ์ ํ ๋ฐฉ์
- ๋จ์
- CPU ์ฌ์ฉ์ด ์งง์ job์ ๋๋ฌด ์ ํธํ๋ค. (์ฐจ๋ณํ๋ค) ์ฌ์ฉ๊ธฐ๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๋ ๊ฑฐ์ ์์ํ CPU๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ ์๋ ์๋ค. - ๊ธฐ์ ์ํ
- ๋ผ์ด๋ ๋ก๋น
- CPU๋ฅผ ํ ๋ฒ ํ ๋น๋ฐ์ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ ์ผ์ ํ๊ฒ ๊ณ ์ ๋ ์๊ฐ์ผ๋ก ์ ํํ์ฌ ๋ฐ๋ณตํ๋ ๋ฐฉ์.
- ๋จ์
- ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค ๋๋ฌธ์ ์งง์ ์๊ฐ์ด ํ์ํ ํ๋ก์ธ์ค๊ฐ ์ค๋ ๊ธฐ๋ค๋ ค์ผํ๋ค.
- ์ฐ์ ์์
- CPU ์ฌ์ฉ์ ์ํด ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๋ค์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ์ฐ์ ์์์ ๋ฐ๋ผ ๋จผ์ ํ ๋นํ๋ ๋ฐฉ์.
- ์ ์ ํ ๋ฐฉ์
- ๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด ์คํ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ถ๊ณ CPU๋ฅผ ์ ์ ํ๋ค.
- ๋น์ ์ ํ ๋ฐฉ์
- ๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด Ready Queue์ Head์ ๋ฃ๋ ๋ฐฉ์.
- ๋ฌธ์
- ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ ๊ณ์ํด์ CPU๋ฅผ ์ ์ ํ์ง ๋ชปํ๋ค. - ๊ธฐ์ ์ํ
- ์คํ ์ค๋น๋ ๋์ด์์ผ๋ CPU๋ฅผ ์ฌ์ฉ๋ชปํ๋ ํ๋ก์ธ์ค๋ฅผ CPU๊ฐ ๋ฌด๊ธฐํ ๋๊ธฐํ๋ ์ํ - ๋ฌด๊ธฐํ ๋ด์
- ํด๊ฒฐ์ฑ - ๊ธฐ์ ์ํ ๋ฌธ์ ๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๊ฐ ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ฐ์ ์์๋ฅผ ๋์ด๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
- ์ ์
์ ์ถ (FCFS, First Come First Served)
๋ต๋ณ
- ๋๊ธฐ / ๋น๋๊ธฐ
- ๋๊ธฐ์ ๋น๋๊ธฐ๋ ํธ์ถ ๋๋ ํจ์์ ์๋ฃ๋ฅผ ํธ์ถํ ์ชฝ์์ ์ ๊ฒฝ์ ์ฐ๋ ํธ์ถ๋ฐ์ ์ชฝ์์ ์ ๊ฒฝ์ ์ฐ๋์ ์ฐจ์ด๋ค.
ํธ์ถ๋ ํจ์
์ ์ํ ๊ฒฐ๊ณผ ๋ฐ ์ข ๋ฃ๋ฅผํธ์ถํ ํจ์
๊ฐ ์ ๊ฒฝ์ฐ๋ฉด ๋๊ธฐํธ์ถ๋ ํจ์
์ ์ํ ๊ฒฐ๊ณผ ๋ฐ ์ข ๋ฃ๋ฅผํธ์ถํ ํจ์
๊ฐ ์ ๊ฒฝ์ฐ์ง ์์ผ๋ฉด ๋น๋๊ธฐ
- ๋๊ธฐ: ํจ์๋ฅผ ํธ์ถ๊ณผ
๋์์
๋ฐํ ๊ฐ์ด ๊ธฐ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ๋๊ธฐ - ๋น๋๊ธฐ: ํจ์๋ฅผ ํธ์ถํ
๋์์
๋ฐํ ๊ฐ์ ๊ธฐ๋ํ์ง ์๋ ๊ฒฝ์ฐ ๋น๋๊ธฐ
- ๋๊ธฐ์ ๋น๋๊ธฐ๋ ํธ์ถ ๋๋ ํจ์์ ์๋ฃ๋ฅผ ํธ์ถํ ์ชฝ์์ ์ ๊ฒฝ์ ์ฐ๋ ํธ์ถ๋ฐ์ ์ชฝ์์ ์ ๊ฒฝ์ ์ฐ๋์ ์ฐจ์ด๋ค.
- ๋ธ๋ก / ๋
ผ๋ธ๋ก
- ๋ธ๋ก: ํธ์ถ๋ฐ์ ์ชฝ์ด ํธ์ถํ ์ชฝ์ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ์ง ์๋ ๊ฒ.
- ๋ ผ-๋ธ๋ก: ํธ์ถ๋ฐ์ ์ชฝ์ด ํธ์ถํ ์ชฝ์ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ ๊ฒ.
๋ต๋ณ
๋ต๋ณ
์ถ์ฒ: https://velog.io/@jess29/DeadLock
- ๋ฐ๋๋ฝ์ด๋
- ๊ต์ฐฉ์ํ.
- ๋ ๊ฐ ์ด์์ ์์ ์ด ์๋ก ์๋๋ฐฉ์ ์์ ์ ๋๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ด์ ๋ค์๋จ๊ณ๋ก ์งํํ์ง ๋ชปํ๋ ์ํ.
- ๋ฐ๋๋ฝ ๋ฐ์์กฐ๊ฑด
- ์ํธ๋ฐฐ์ (Mutual Exclusion)
- ํ ํ๋ก์ธ์ค๊ฐ ์์์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ฌ์ฉํ ์ ์๋ค.
- ์ ์ ๋๊ธฐ (Hold and Wait)
- ํ ํ๋ก์ธ์ค๊ฐ ์์์ ๊ฐ์ง๊ณ ์๋ ์ํ์์ ๋๊ธฐํ๋ ๊ฒ.
- ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ.
- ๋น์ ์ (No preemption)
- ํ ํ๋ก์ธ์ค๊ฐ ์์์ ์ํํ๋ ์ค์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ค๊ฐ์ ๋ผ์ด๋ค ์ ์๋ค.
- ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์์ ์ฌ์ฉ์ ๋๋ผ ๋๊น์ง ๊ทธ ์์์ ๋บ์ ์ ์๋ค.
- ์ํ๋๊ธฐ (Circular wait)
- ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๋ฐฉํฅ์ด ์ํ์ ์ด๋ฃฌ๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ์ง๊ณ ์๋ ๊ฒ.
- ์ํธ๋ฐฐ์ (Mutual Exclusion)
- ๋ฐ๋๋ฝ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์๋ฐฉ
- ๋ฐ๋๋ฝ ๋ฐ์์กฐ๊ฑด 3๊ฐ์ง ์ค ์ต์ ํ๊ฐ์ง๋ฅผ ๋ฏธ์ถฉ์กฑ ์ํค๋๋ก ๋ง๋๋ ๊ฒ.
- ํํผ
- ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋ ์์ค์ผ๋ก ์์์ ํ ๋นํ๋ ๋ฐฉ์. (์์์ ๋ง์ด ํ ๋นํ ์๋ก ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ํ๋ฅ ์ด ์ปค์ง๋ค.)
- ํ์ฌ ํ ๋น๋ ์์์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์คํ ์ ์์ ์ํ์ ๋ถ์์ ์ํ๋ก ๋๋์ด์ง๋ค.
- ํ ๋น๋ ์์์ด ๋ง์ผ๋ฉด ๋ถ์์ ์ด๊ณ , ํ ๋น ์์์ด ์ ์ผ๋ฉด ์์ ์ํ์ด๋ค.
- ์ํ ๊ฒ์ถ ๋ฐ ๋ณต๊ตฌ
- ๊ต์ฐฉ ์ํ ์กด์ฌ ์ฌ๋ถ ๋ฐ ๊ต์ฐฉ ์ํ์ ์ฐ๊ด๋ ํ๋ก์ธ์ค์ ์์์ ์์๋ธ๋ค.
- ๋ฐ๋๋ฝ์ ์ผ์ผํจ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ฑฐ๋, ํ ๋น๋ ์์์ ํด์ ํจ์ผ๋ก์จ ๋ณต๊ตฌํ๋ค.
- ๋ฌด์
- ๋๋ถ๋ถ ๊ต์ฐฉ ์ํ๋ ๋๋ฌผ๊ฒ ๋ฐ์ํ๊ณ ์๋ฐฉ,ํํผ,ํ์ง ๋ฐ ๋ณต๊ตฌ๋ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ๋๋ฌธ์ ๊ทธ๋ฅ ๋ฌด์ํ๋ ๋ฐฉ์
- ์๋ฐฉ
๋ต๋ณ
- ์ ๊ทํ๊ฐ ์๊ฒจ๋ ๋ฐฐ๊ฒฝ
- ํ ํ
์ด๋ธ์ ์ฌ๋ฌ ์ํฐํฐ์ ์์ฑ๋ค์ ํผํฉํ๊ฒ ๋๋ฉด ์ ๋ณด๊ฐ ์ค๋ณต ์ ์ฅ๋๋ฉฐ, ์ ์ฅ ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค. ์ด๋ฌํ ์ค๋ณต ์ ๋ณด๋ก ์ธํด ๊ฐฑ์ ์ด์์ด ๋ฐ์ํ๋ค.
- ์ฝ์ ์ด์: ์ํ์ง ์๋ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ ๊ฒฝ์ฐ
- ์ญ์ ์ด์: ํ๋์ ์๋ฃ๋ง ์ญ์ ํ๊ณ ์ถ์ง๋ง, ๊ทธ ์๋ฃ๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ ์ ์ฒด๊ฐ ์ญ์ ๋๋ ๊ฒฝ์ฐ.
- ์์ ์ด์: ์ผ๋ถ์ ๋ฐ์ดํฐ๋ง ๊ฐฑ์ ๋์ด ์ ๋ณด๊ฐ ๋ชจํธํด์ง๊ฑฐ๋ ์ผ๊ด์ฑ์ด ์์ด์ ธ ์ ํํ ์ ๋ณด ํ์ ์ด ๋์ง ์๋ ๊ฒฝ์ฐ.
- ํ ํ
์ด๋ธ์ ์ฌ๋ฌ ์ํฐํฐ์ ์์ฑ๋ค์ ํผํฉํ๊ฒ ๋๋ฉด ์ ๋ณด๊ฐ ์ค๋ณต ์ ์ฅ๋๋ฉฐ, ์ ์ฅ ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค. ์ด๋ฌํ ์ค๋ณต ์ ๋ณด๋ก ์ธํด ๊ฐฑ์ ์ด์์ด ๋ฐ์ํ๋ค.
- ์ ๊ทํ๋?
- ์ค๋ณต์ ์ต์ํํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ทํ(Normalization)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ์ ๋ชฉํ๋ ์ด์์ด ์๋ ๊ด๊ณ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์๊ณ ์ ์กฐ์ง๋ ๊ด๊ณ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ค
- ์ ๋๋ก ์กฐ์ง๋์ง ์์ ํ ์ด๋ธ๋ค๊ณผ ๊ด๋ก๋ค์ ์๊ณ ์ ์กฐ์ง๋ ํ ์ด๋ธ๊ณผ ๊ด๊ณ๋ค๋ก ๋๋๋ ๊ฒ.
- ์ค๋ณต์ ์ต์ํํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ทํ(Normalization)
- ์ ๊ทํ๋ฅผ ํ๋ ์ด์
- ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํจ. ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ๋ฐ์ดํฐ๋ผ๋ฆฌ์ ์ ํฉ์ฑ(์๋ก ์ผ์นํ์ง)์ ๋ง์ถ๊ธฐ ์ด๋ ต๋ค.
- ์ด๋ฅผ ํตํด ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ ์ฅ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๊ธฐ ์ํจ.
- ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํจ. ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ๋ฐ์ดํฐ๋ผ๋ฆฌ์ ์ ํฉ์ฑ(์๋ก ์ผ์นํ์ง)์ ๋ง์ถ๊ธฐ ์ด๋ ต๋ค.
๋ต๋ณ
- ๊ฐ๋
- ๋ฐ์ดํฐ ์ ํฉ์ฑ
- ์ด๋ค ๋ฐ์ดํฐ๋ค์ ๊ฐ์ด ์๋ก ์ผ์นํ ๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๋ง๋ค๊ณ ํํํ๋ค.
- ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ผ๋ฆฌ ์ ํฉ์ฑ์ ๋ง์ถ๊ธฐ ์ด๋ ต๊ณ ๊ถ๊ทน์ ์ผ๋ก ์๋ก ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ ์ ํฉ์ฑ์ด ๊นจ์ง๋ค. (์ ๊ทํ๋ฅผ ํตํด ํด๊ฒฐํ ์ ์๋ค.)
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ
- ๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์์ ํด์ผ ํ๋ค๋ ์๋ฏธ.
- ๋ฐ์ดํฐ ์์ ์ฑ์ด๋ ์ ํ์ฑ์ด๋ผ๋ ํํ์ด ๋ ์ ํํ๋ค๊ณ ํ๋ค.
- ๋ฌด๊ฒฐ์ฑ์ ์ข
๋ฅ
- ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ - ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ
- ์ํฐํฐ์ ์กด์ฌํ๋ ๋ชจ๋ ์ธ์คํด์ค๋ ๊ณ ์ ํด์ผ ํ๋ค.
- ๋ชจ๋ ์ธ์คํด์ค(Row)๋ฅผ ๋ํํ๋ ์์ฑ(PK)๋ ๊ณ ์ ํ ๊ฐ์ด๊ฑฐ๋, Null ๊ฐ์ ๊ฐ์ง๋ฉด ์๋๋ค.
- ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ - ์ธ๋ํค
- ์ํฐํฐ์ ์ธ๋ ์๋ณ์ ๊ฐ์ ์ฐธ์กฐ๋๋ ์ํฐํฐ์ ์ฃผ ์๋ณ์ ๊ฐ๊ณผ ์ผ์นํ๊ฑฐ๋ Null ๊ฐ์ด์ด์ผ ํ๋ค.
- ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํต FK (์ธ๋ํค)์ ์ฝ์ ์ํด์ ์ง์ผ์ง๋ค.
- ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ - ์์ฑ ๊ฐ(์ปฌ๋ผ)๊ณผ ๊ด๋ จ๋ ์ ์ฝ
- ์ํฐํฐ์ ํน์ ์์ฑ ๊ฐ์ ๋์ผํ ๋ฐ์ดํฐ ํ์ , ๊ธธ์ด, Null ํ์ฉ ์ฌ๋ถ, ๊ธฐ๋ณธ ๊ฐ, ํ์ฉ ๊ฐ ๋ฑ ๋์ผํ ๋ฒ์ฃผ์ ๊ฐ๋ง์ด ์กด์ฌํด์ผํ๋ค.
- ex. ์ด๋ฆ ์์ฑ์ผ๋ก "binghe"๋ ํ์ฉ, 777๋ ๋ถ๊ฐ
- ์
๋ฌด ๋ฌด๊ฒฐ์ฑ
- ๊ธฐ์ ์์ ์ ๋ฌด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ท์น (๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋น์ทํจ)
- ex. ์ฃผ๋ฌธ ๊ธ์ก 4๋ง์ ์ด์์ด๋ฉด ๋ฌด๋ฃ๋ฐฐ์ก
- ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ - ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ
- ๋ฐ์ดํฐ ์ ํฉ์ฑ
- ์ฐจ์ด์
- ์ ํฉ์ฑ์ ๋ฐ์ดํฐ๊ฐ ์๋ก ๋ฌด์ ์์ด ์ผ๊ด๋๊ฒ ์ผ์นํด์ผ ํ๋ค๋ ์๋ฏธ
- ๋ฌด๊ฒฐ์ฑ์ ๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์์ ํด์ผ ํ๋ค๋ ์๋ฏธ.
- ๋ฐ์ดํฐ๋ ์ ๋๋ก๋ (DBA๋ ๊ฐ๋ฐ์๊ฐ ์๋ํ) ์ํ๋ก ์กด์ฌํด์ผํ๋ค๋ ์๋ฏธ.
- ์ด๋ค ๋ฐ์ดํฐ๋ ์ ํฉ์ฑ์ ๋ง์กฑํ๋ ๋ฌด๊ฒฐ์ฑ์ ํผ์๋ ์ํ์ผ ์ ์๋ค.
- ex. ์ด๋ฆ ์์ฑ์ ์ ๋ถ ์ ํ ๋ฒํธ(์ซ์)๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ.
๋ต๋ณ
- ์ธ๋ฑ์ค๋ ํ
์ด๋ธ์ ๋ํ ๋์์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
- ๋น์ : DB
์ธ๋ฑ์ค : ๋ฐ์ดํฐ
= ์ฑ์์ธ : ํ์ด์ง ๋ฒํธ(์ฑ ๋ด์ฉ)
- ๋น์ : DB
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํ๊ณ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ด๋ค.
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ํญ์ ์ ๋ ฌํด์ผ ํ๋ฏ๋ก ์ ์ฅํ๋ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ๋๋ฆฌ๋ค. ๋ฐ๋ฉด์, ์ ๋ ฌ๋์ด ์๋ ๊ฐ์ ์กฐํํ๋ ๊ฒ์ ๊ต์ฅํ ๋น ๋ฅด๋ค.
๋ต๋ณ
- B-Tree ํน์ B+Tree
- root, branch, leaf ๋ ธ๋๋ก ๋๋๊ณ ์ค์ค๋ก ๊ท ํ์ ๋ง์ถ๋ ๊ท ํ ํธ๋ฆฌ์ด๋ค.
- ์ค์ค๋ก ๊ท ํ์ ๋ง์ถฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๊ธฐ ๋๋ฌธ์ ํญ์ O(logN)์ ์กฐํ ์ฑ๋ฅ์ ์ ์งํ๋ค.
- B-Tree ์๋ฆฌ ๋ฐ ์ฌ์ฉ ์ด์
๋ต๋ณ
- ์กฐํ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํจ.
- ๋๋์ ๋ฐ์ดํฐ์์ ์๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด Index๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋๋ค I/O ํ์๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ธ๋ฑ์ค ํ๋์ ํต์ฌ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ต๋ณ
B-Tree ๊ธฐ์ค
- ์์ง์ ํ์
- ์ธ๋ฑ์ค ์ค์บ ์์์ง์ ์ ์ฐพ๋ ๊ณผ์ (leaf ๋ ธ๋์์ ์ค์บ์ ์์ ์ง์ ์ ์ฐพ๋ ๊ณผ์ )
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ
- ์ํ์ ํ์
- ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ (์ธ๋ฑ์ค leaf ๋ ธ๋๋ฅผ ์ํ์ ์ผ๋ก ์ค์บํ๋ค.)
- ์กฐ๊ฑด์ ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ. (ROWID๋ฅผ ์ฐพ๊ธฐ ์ํจ)
- ์ธ๋ฑ์ค ํ๋
- ์ธ๋ฑ์ค ์ค์บ ํจ์จํ (์์ง์ ํ์)
- ์ธ๋ฑ์ค ์ค์บ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋นํจ์จ์ ์ค์ด๋ ๊ฒ.
- ๋๋ค ์ก์ธ์ค ์ต์ํ (์ํ์ ํ์)
- ์ธ๋ฑ์ค ์ค์บ ํ ํ ์ด๋ธ ๋ ์ฝ๋๋ฅผ ์ก์ธ์คํ ๋, ๋๋ค I/O ํ์๋ฅผ ์ค์ด๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ธ๋ฑ์ค ์ค์บ ํจ์จํ (์์ง์ ํ์)
- ์ฐ์ ์ ์ผ๋ก ํ๋ํด์ผ ํ๋ ๋ถ๋ถ์ ๋๋ค ์ก์ธ์ค ์ต์ํ (์ํ์ ํ์)์ด๋ค.
- ํ์ ๋ช ๋ถ๋ฅผ ๋ค์ง๋ ๊ณผ์ ์์์ ๋นํจ์จ๋ณด๋ค, ํ์ ๋ช ๋ถ์ ์๋ ์ ๋ณด๋ฅผ ์ํด ์ง์ ๊ต์ค์ ๊ฐ๋ ๋ถ๋ด์ด ๋ ํฌ๋ฏ, ๋๋ค์ก์ธ์ค ์ต์ํ ํ๋์ด ๋ ์ค์ํ๋ค. (๋ค๋ฅธ ๋น์ ์ฐพ์๋ณด์.)
๋ต๋ณ
- ์์ฐจ I/O๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํ ํ์ด์ง๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ๋ ์์ฐจ ์ ๊ทผ ๋ฐฉ์์ด๋ค.
- ์ธ์ ํ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฝ๋ ๋ค์ค ํ์ด์ง ์ฝ๊ธฐ๋ฐฉ์์ผ๋ก ์ํ๋๋ค.
- ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด์ Full Scan์ ํด์ผํ๋ค.
- ๋๋ค I/O๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ง ํ์ด์ง๋ค์ ์์๋ก ์ ๊ทผํ๋ ์์ ์ ๊ทผ ๋ฐฉ์์ด๋ค.
- ์ ํด์ง ์์์์ด ์ด๋ํ๋ ๋งํผ ๋์คํฌ์ ๋ฌผ๋ฆฌ์ ์ธ ์์ง์์ด ํ์ํ๊ณ , ๋ค์ค ํ์ด์ง ์ฝ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ ๋๋ค I/O๋ฅผ ํตํ๋ค๋ฉด ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๊ทผ ์ํ ์๊ฐ์ด ๋น๊ต์ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๋ต๋ณ
- Table Full Scan
- ์์ฐจ I/O ๋ฐฉ์์ MultiBlock I/O๋ฐฉ์์ผ๋ก ๋์คํฌ๋ฅผ ์ฝ์ด ํ ๋ธ๋ก์ ์ํ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ํ๋ฒ์ ์ฝ์ด๋ค์ด๋ ๋ฐฉ๋ฒ.
- Index Range Scan
- ๋๋ค I/O์ Single Block I/O๋ก ๋ ์ฝ๋ ํ๋๋ฅผ ์ฝ๊ธฐ ์ํด ๋งค๋ฒ I/O๋ฅผ ํตํด ํ์ํ ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ.
- ๋ฌด์กฐ๊ฑด Index Range Scan์ด ์ข์ ๊ฒ์ ์๋๋ค.
- ์กฐ๊ธ๋ง ์๊ฐํด๋ณด๋ฉด ์์ ๊ฐ์ด ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์ผ์ ๋์ ๋์ผ๋ฉด Index Range Scan์ ๊ฒฝ์ฐ ๋งค ์ธ๋ฑ์ค๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํจ์ผ๋ก ๋ค๋์ ๋์คํฌ I/O๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ๋ ๋นํจ์จ์ ์ผ ์๋ ์๋ค.
- ๋ค๋ง, ํฐ ํ ์ด๋ธ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋๋ ๋น์ฐํ Index Range Scan์ด ์ ์ฉํ๋ค.
๋ต๋ณ
- ๋ค์ค ์ธ๋ฑ์ค์ ์ ๋ ฌ ๋ฐฉ์
- ๋ค์ค ์ธ๋ฑ์ค์ ๋ ๋ฒ์งธ ์นผ๋ผ์ ์ฒซ ๋ฒ์งธ ์นผ๋ผ์ ์์กดํด์ ์ ๋ ฌ๋ผ ์๋ค.
- ์ฆ, ๋ค์ค ์นผ๋ผ ์ธ๋ฑ์ค์์๋ ์ธ๋ฑ์ค ๋ด์์ ๊ฐ ์นผ๋ผ์ ์์น(์์)๊ฐ ๋งค์ฐ ์ค์ํ๋ค.
- ๋ค์ค ์ธ๋ฑ์ค ์ค์ ์ ์ฃผ์ํ ์
- ๋ค์ค ์ธ๋ฑ์ค ํ ์ด๋ธ์์ ์กฐํ๋ฅผ ํ๋ฉด, ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ์ปฌ๋ผ ๊ฐ๋ถํฐ ์ฐพ๊ณ , ๊ทธ ๋ค์ ์ธ๋ฑ์ค ์นผ๋ผ์ ์ฐพ๊ธฐ ์์ํ๋ค.
- ์ธ๋ฑ์ค ์์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
- ๋น๊ต ์์ ์ ๋ฒ์๊ฐ ์์ ์ธ๋ฑ์ค๋ถํฐ ์ค์ ํด์ฃผ๋ ๊ฒ์ด ๋ค์ค ์ธ๋ฑ์ค ์ค์ ์ ์ข๋ค.
- ์ฆ, ์์ ๋ฒ์๋ฅผ ์์ ๋๊ณ , ๋น๊ต์ ํฐ ๋ฒ์ ๊ฒ์ ์ปฌ๋ผ์ ๋ค์ ๋๋ ๊ฒ์ด ์ข๋ค.
๋ต๋ณ
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ ์ฌ๋ฐฐ์ดํ๋ค. (๋ฆฌํ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ ํ์ด์ง)
- ์ค์ DB์ ๋ฐ์ดํฐ ํ์ผ์ ์ ๋ ฌ์ด ๋์ด ์๋ ์ํ๋ก ๋์คํฌ์ ์ ์ฅ๋๋ค.
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ถ ๋ฒ์ ์ฒ๋ฆฌ์ ํ์ฉํ๋ฉด ์ ์ I/O๋ฅผ ํตํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๋ค. (์ธ๋ฑ์ค๋ฅผ ๊ฑฐ์น์ง ์๋๋ค)
- ์ ํ๋์ ๋ฒ์๊ฐ 30% ์ด๋ด์ผ ๋ ํจ์จ์ ์ด๋ค.
- ํ ์ด๋ธ๋น ์ต๋ 1๊ฐ
- ๋ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ ์ฌ๋ฐฐ์ดํ์ง ์๋๋ค. (๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๊ฑด๋ค์ง ์๊ณ , ๋ณ๋์ ์ฅ์์ ์ธ๋ฑ์ค ํ์ด์ง ์์ฑ)
- ์ค์ DB์ ๋ฐ์ดํฐ ํ์ผ์ ์ ๋ ฌ์ด ๋์ง ์์ ์ํ๋ก ๋์คํฌ์ ์ ์ฅ๋๋ค.
- Leaf Level ์ธ๋ฑ์ค ํ์ด์ง์ ํ ์ด๋ธ ๋ฐ์ดํฐ ์์น๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ๋ฐ์ดํฐ๊ฐ ์๋ Leaf Level๊น์ง ์ฐพ์๊ฐ ๋ค ํด๋น ํ ์ด๋ธ์ ๋๋ค I/O๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๋ค. (์ธ๋ฑ์ค๊ฐ๋ค๊ฐ ํ๋ํ๋ ๋๋คI/O)
- ์ ํ๋์ ๋ฒ์๊ฐ 3% ์ด๋ด์ผ ๋ ํจ์จ์ ์ด๋ค.
- ํ ์ด๋ธ๋น ์ต๋ 249๊ฐ
- ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๋ก ์๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ฐ์ดํฐ๋ก ๋ฐ๋ก ์ ๊ทผํ ์ ์๊ณ ๋ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ ํ์ด์ง๋ฅผ ํ ๋ฒ ๊ฑฐ์ณ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ์
๋ต๋ณ
- Connection Pool (Connection Handler) *
- SQL Parser
- ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ํ ํฐ(MySQL์ด ์ธ์ํ ์ ์๋ ์ต์ ๋จ์์ ์ดํ๋ ๊ธฐํธ)์ผ๋ก ๋ถ๋ฆฌํด ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ๋ด๋ ์์ ์ ์๋ฏธํ๋ค.
- Optimizer
- ์ฌ์ฉ์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ๋ด๋นํ๋ค. (DBMS์ ๋๋)
- ์ธ๋ฑ์ค์ ์ ๋ฌด, ๋ฐ์ดํฐ ๋ถ์ฐ ๋๋ ํธํฅ ์ ๋ ๋ฑ์ ํต๊ณ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๋ฌ ์คํ๊ณํ์ ์์ฑํ๋ค.
- Execution Engine
- ์ตํ๋ง์ด์ ๊ฐ ๋๋๋ผ๋ฉด ์คํ ์์ง๊ณผ ํธ๋ค๋ฌ๋ ์๊ณผ ๋ฐ์ ๋น์ ํ ์ ์๋ค.
- ex. ์ตํฐ๋ง์ด์ ๊ฐ
GROUP BY
๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด- ์คํ ์์ง์ ํธ๋ค๋ฌ์๊ฒ ์์ ํ ์ด๋ธ์ ๋ง๋ค๋ผ๊ณ ์์ฒญ.
- ๋ค์ ์คํ ์์ง์ WHERE ์ ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ.
- ์ฝ์ด์จ ๋ ์ฝ๋๋ค์ 1๋ฒ์์ ์ค๋นํ ์์ ํ ์ด๋ธ๋ก ์ ์ฅํ๋ผ๊ณ ๋ค์ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ.
- ๋ฐ์ดํฐ๊ฐ ์ค๋น๋ ์์ ํ ์ด๋ธ์์ ํ์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ๋ค์ ์์ฒญ.
- ์ต์ข ์ ์ผ๋ก ์คํ ์์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๋ ๋ค๋ฅธ ๋ชจ๋๋ก ๋๊ธด๋ค.
- ์์ ๊ฐ์ด ์คํ ์์ง์ ๋ง๋ค์ด์ง ๊ณํ๋๋ก ๊ฐ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํด์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋ค๋ฅธ ํธ๋ค๋ฌ ์์ฒญ์ ์ ๋ ฅ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํ๋ค.
- Handler - Storage Engine
- MySQL ์๋ฒ์ ๊ฐ์ฅ ๋ฐ๋จ.
- MySQL ์คํ ์์ง์ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๊ณ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด ์ค๋ ์ญํ ์ ๋ด๋นํ๋ค.
- ์คํ ๋ฆฌ์ง ์์ง์ ์ ๊ทผํ๊ธฐ ์ํ API
๋ต๋ณ
- optimizer๋ ์ธ๋ฑ์ค์ ์ ๋ฌด, ๋ฐ์ดํฐ ๋ถ์ฐ ๋๋ ํธํฅ ์ ๋ ๋ฑ์ ํต๊ณ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๋ฌ ์คํ๊ณํ์ ์์ฑํ๊ณ ์ด๋ค์ ๋น์ฉ์ ์ฐ์ฐํ ํ, ์ต์ ํ๋ ์คํ๊ณํ์ ์๋ฆฝํ๋ DBMS์ ํต์ฌ์์ง ์ด๋ค.
๋ต๋ณ
- ํธ๋์ญ์
์ด๋?
- ๋ณต์ ์ฟผ๋ฆฌ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ํ ๋จ์๋ก ๋ฌถ๋ ๊ฒ. ๋ ์ด์ ๋๋ ์ ์๋ ๋จ์ ์์
.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๋ ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์์ ์ ๋จ์
- ex. ํ๋์ ๊ฑฐ๋ ์์ฑ (๋จ์) = ๊ตฌ๋งค ๊ณ์ข์์ n๋ง์ ์ถ๊ธ(์์ ๋จ์) + ํ๋งค์ ๊ณ์ข์์ n๋ง์ ์ถ๊ธ(์์ ๋จ์)
- ๋ณต์ ์ฟผ๋ฆฌ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ํ ๋จ์๋ก ๋ฌถ๋ ๊ฒ. ๋ ์ด์ ๋๋ ์ ์๋ ๋จ์ ์์
.
- ํธ๋์ญ์
์ฑ์ง (ACID)
- Atomicity (์์์ฑ) -> ๋จ์
- ์์: ๋ ์ด์ ์ชผ๊ฐ์ง ์ ์๋ ์ฑ์ง
- ์์์ฑ์ด๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์๋ฐํ๋ ์ผ๋ จ์ ๋ฐ์ดํฐ ์กฐ์์ด ์ ๋ถ ์ฑ๊ณตํ ์ง ์ ๋ถ ์คํจํ ์ง๋ฅผ ๋ณด์ฆํ๋ ๊ตฌ์กฐ์ด๋ค.
- COMMIT OR ROLLBACK
- Consistency (์ผ๊ด์ฑ) -> ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด
- ํธ๋์ญ์ ์ด ์์ ํ๊ฒ ์ํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฑ์ง
- ํธ๋์ญ์ ์ํ ์ /ํ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ชจ๋ ์ ์ฝ ์กฐ๊ฑด(๊ธฐ๋ณธ ํค, ์ธ๋ ํค, ๋๋ฉ์ธ, ๋๋ฉ์ธ ์ ์ฝ์กฐ๊ฑด ๋ฑ)์ ๋ง์กฑํ๋ ๊ฒ์ ํตํด ๋ณด์ฅํ๋ค๋ ์๋ฏธ.
- ์์
- ํต์ฅ์ ์๊ณ ๋ ๋ง์ด๋์ค๊ฐ ์๋๋ค๋ ์ ์ฝ ์กฐ๊ฑด์ด ์กด์ฌํ๋ค.
- ๋ง์ฝ ํธ๋์ญ์ ๊ณผ์ ์์ ํต์ฅ์ ์๊ณ ๊ฐ ๋ง์ด๋์ค๊ฐ ๋๋ค๋ฉด ๋กค๋ฐฑ๋์ด ํธ๋์ญ์ ์ด ์ข ๋ฃ๋๋ค.
- Isolation (๋
๋ฆฝ์ฑ) -> ๋ณํ ์ ์ด
- ๋ฐ์ดํฐ ์กฐ์์ ๋ณต์์ ์ฌ์ฉ์๊ฐ ๋์์ ์คํํด๋ '๊ฐ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ๋ชจ์์์ด ์คํ๋๋ ๊ฒ์ ๋ณด์ฆ'ํ๋ ๊ฒ.
- ํ๋์ ํธ๋์ญ์ ์ํ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์์ ์ด ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ. (Lock ์ฒ๋ฆฌ)
- Durability (์ง์์ฑ) -> ์์ํ
- ํธ๋์ญ์ ์ ์๋ฃ(COMMIT)ํ๊ณ ์๋ฃ ํต์ง๋ฅผ ์ฌ์ฉ์๊ฐ ๋ฐ๋ ์์ ์ ๊ทธ ํธ๋์ญ์ ์ด ์๊ตฌ์ ์ด ๋์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์์ง ์๋ ๊ฒ.
- ์ปดํจํฐ๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ์์คํ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๊ณ์ ์ ์ฅ๋๋ ์ฑ์ง (RAM์ด ์๋ SSD์ ์ ์ฅ๋ ์ํ)
- Atomicity (์์์ฑ) -> ๋จ์
๋ต๋ณ
- ํธ๋์ญ์
๊ฒฉ๋ฆฌ์์ค์ด๋?
- ํ๋์ ํธ๋์ญ์ ๋ด์์ ๋๋ ์ฌ๋ฌ ํธ๋์ญ์ ๊ฐ์ ์์ ๋ด์ฉ์ ์ด๋ป๊ฒ ๊ณต์ ํ๊ณ ์ฐจ๋จํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋ ๋ฒจ.
- ๊ฒฉ๋ฆฌ์ฑ์ด ๋์์ง ์๋ก ์ฑ๋ฅ์ด ์ ํ๋๋ค.
- READ UNCOMMITED
- ์ปค๋ฐ ์ ์ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๋ ๊ฒ์ ํ์ฉํ๋ค.
- Dirty Read๊ฐ ๋ฐ์ํ๋ค.
- READ COMMITED
- ์ปค๋ฐ์ด ์๋ฃ๋ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ์ฌํญ๋ง ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์กฐํ ๊ฐ๋ฅํ๋ค. (UNDO๋ฅผ ํตํด ํธ๋์ญ์ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋๋ค)
- ํ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ปค๋ฐํ ๊ฐ๋ง ์ฝ์ ์ ์๋ค
- Dirty Read๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ํ์ง๋ง, NON-REPEATABLE READ ํ์์ด ๋ฐ์ํ๋ค.
- ๊ฐ์ ํธ๋์ญ์ ์์์ ๋๊ฐ์ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ ๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- ํธ๋์ญ์ ์ํ ์ค ๋ค๋ฅธ ํธ๋์ญ์ ์ด COMMITํ๊ธฐ ์ ์กฐํ ๋ฐ์ดํฐ์ COMMITํ ํ ์กฐํ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- REPEATABLE READ
- ํธ๋์ญ์ ๋ฒ์ ๋ด์์ ์กฐํํ ๋ด์ฉ์ด ํญ์ ๋์ผํจ์ ๋ณด์ฅํ๋ค.
- ๊ฐ๊ฐ์ ํธ๋์ญ์
์ ๊ณ ์ ํ ๋ฒํธ(์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฐ)์ ๋ถ์ฌํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ๋ง์ฝ 10๋ฒ์ ํธ๋์ญ์ ์์ ์คํ๋๋ ๋ชจ๋ SELECT ์ฟผ๋ฆฌ๋ ํธ๋์ญ์ ๋ฒํธ 10๋ณด๋ค ์์ ํธ๋์ญ์ ๋ฒํธ์์ ๋ณ๊ฒฝํ ๊ฒ๋ง ๋ณด๊ฒ ๋๋ค.
- MySQL์ InnoDB์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฉ๋ฆฌ ์์ค
- PHANTOM READ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ํํ ๋ณ๊ฒฝ ์์ (INSERT๋ฌธ)์ ์ํด ๋ ์ฝ๋๊ฐ ๋ณด์๋ค๊ฐ ์ ๋ณด์๋ค๊ฐ ํ๋ ํ์.
- ํ๋์ ํธ๋์ญ์ ์์์ ๋ค๋ฅธ ํธ๋์ญ์ ์์ (INSERT, DELETE)๋ฑ์ ์ํด ๋ ์ฝ๋๊ฐ ๋ณด์๋ค๊ฐ ์ ๋ณด์๋ค๊ฐ ํ๋ ํ์.
- SERIALIZABLE
- ๋๊ธฐํ : ํ ํธ๋์ญ์ ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
- ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ์ ์ผ ๋จ์ด์ง๋ฏ๋ก ์ฌ์ฉ๋์ง ์๋๋ค.
- ์์ธํ ๋ด์ฉ
๋ต๋ณ
- ๊ณต์ ๋ฝ(Shared Lock) - READ Lock
- ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ฌ์ฉ๋์ด์ง๋ Lock.
- ๊ณต์ Lock ๋ผ๋ฆฌ๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ํ ์ ์๋ค๋ ์๋ฏธ.
- ๊ณต์ Lock์ด ์ค์ ๋ ๋ฐ์ดํฐ์ ๋ฒ ํ Lock์ ์ฌ์ฉํ ์ ์๋ค.
- ํน์ ๋ฐ์ดํฐ์ ๊ณต์ Lock์ ๊ฑธ๊ฒ ๋๋ฉด, ํด๋น ๋ฐ์ดํฐ๋ฅผ write ํ๊ธฐ ์ํด์๋ ๋ฒ ํ Lock์ ์ป์ด์ผ ํ๋ฏ๋ก, ๊ณต์ Lock์ ๊ฐ์ง ํธ๋์ญ์ ์ด ๋๋ ๋ ๊น์ง write์ ํ์ง ๋ชปํ๋ค.
- ๋ฒ ํ ๋ฝ(Exclusive Lock) - Write Lock
- ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ค.
- ๋ฒ ํ Lock์ด ํด์ ๋ ๋ ๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ (์ฝ๊ธฐ ํฌํจ)์ ํด๋น ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ค.
๋ต๋ณ
- DB์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ๋์์ ์์ ์ด ์ผ์ด๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ค.
- ํ ์ด๋ธ row์ Lock์ ๊ฑฐ๋ ๋ฐฉ์.
- ์์ ํ ๋ ํน์ ํธ๋์ญ์ ์ด ๋จผ์ ์ด ๊ฐ์ ์์ ํ๋ค๊ณ ๋ช ์ํ์ฌ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋์ผํ ์กฐ๊ฑด์ผ๋ก ๊ฐ์ ์์ ํ ์ ์๊ฒ ํ๋ ๋ฐฉ์.
- ๋๊ด์ ์ธ ๋ฝ (Optimistic Lock)
- ํธ๋์ญ์
๋ด์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ถฉ๋์ด /๋ฐ์ํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ ํ์ฌ ๋ณ๋ ๋ฝ์ ๊ฑธ์ง ์๋ ๋ฐฉ์.
- ๋ฝ์ ํด์ผํ๋ ์ํฉ์ ๋ฐ์์ด ์ผ์ด๋๋ฉด ๊ทธ๋ ๋์ํ๊ณ , ์์์ ์ ์ ์ํค์ง ์๊ฒ ๋ค๋ ์๋ฏธ
- version๊ณผ ๊ฐ์ ๋ณ๋์ ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ, ๊ฐ์ row์ ๋ํด์ ๊ฐ๊ธฐ ๋ค๋ฅธ 2๊ฐ์ ์์ ์์ฒญ์ด ์์ ๋ 1๊ฐ๊ฐ ์
๋ฐ์ดํธ ๋จ์ ๋ฐ๋ผ version์ ๋ณ๊ฒฝํ์ฌ ๋ค์ ์์ ์์ฒญ์ ๋ฐ์ํ์ง ์๋ ๋ฐฉ์.
- ํธ๋์ญ์ ์ ํ์๋กํ์ง ์๋๋ค.
- DB์์ ์ ๊ณตํด์ฃผ๋ ํน์ง์ ์ด์ฉํ๋ ๊ฒ์ด ์๋ Application Level์์ ์ก์์ฃผ๋ Lock ๋ฐฉ์.
- ํธ๋์ญ์
๋ด์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ถฉ๋์ด /๋ฐ์ํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ ํ์ฌ ๋ณ๋ ๋ฝ์ ๊ฑธ์ง ์๋ ๋ฐฉ์.
- ๋น๊ด์ ์ธ ๋ฝ (Pessimistic Lock)
- "์์์ ๋์ ์์ฒญ์ด ๋ฐ์ํ์ฌ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ"์ด๋ผ๊ณ ๋น๊ด์ ์ผ๋ก ์๊ฐํ๊ณ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์์์ ์ ์ ํ๋ ๋ฐฉ์.
- ๋ฌด์กฐ๊ฑด ์ ๊ธํ๊ณ ์ ์
- ๋น๊ด์ ๋ฝ์ด๋ ํธ๋์ญ์ ์ด ์์๋ ๋ Shared Lock ๋๋ Exclusive Lock์ ๊ฑธ๊ณ ์์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- Transaction๊ณผ Lock์ ์ด์ฉํ์ฌ ์ถฉ๋์ ์๋ฐฉํ๋ ๊ฒ์ด ๋ฐ๋ก ๋น๊ด์ ๋ฝ(Pessimistic Lock)
- DB์์ ์ ๊ณตํด์ฃผ๋ ํน์ง์ ์ด์ฉํ Lock ๋ฐฉ์.
- ๋ํ์ ์ผ๋ก select for update๋ฌธ์ด ์๋ค.
- ๋น๊ด์ ์ธ ๋ฝ์ ๋๊ด์ ์ธ ๋ฝ๋ณด๋ค ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ์ค๋ฒํค๋๊ฐ ํฌ๊ณ ์ฑ๋ฅ์ ์ข์ง ์๋ค.
- "์์์ ๋์ ์์ฒญ์ด ๋ฐ์ํ์ฌ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ"์ด๋ผ๊ณ ๋น๊ด์ ์ผ๋ก ์๊ฐํ๊ณ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์์์ ์ ์ ํ๋ ๋ฐฉ์.
- ์ฅ๋จ์
- ๋๊ด์ ์ธ ๋ฝ
- ์ฅ์ : ์ฑ๋ฅ์ด ์ข๋ค.
- ๋จ์ : ๋กค๋ฐฑ์ ํ๊ธฐ ๊น๋ค๋กญ๋ค. (์ถฉ๋์ด ๋ฌ๋ค๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ๋กค๋ฐฑ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค.)
- ๋น๊ด์ ์ธ ๋ฝ
- ์ฅ์ : ํธ๋์ญ์ ์ฒ๋ฆฌ(๋กค๋ฐฑ)์ ์ฉ์ดํ๋ค. ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ํ์คํ ์ง์ผ์ง๋ค.
- ๋จ์ : ์ฑ๋ฅ์ด ๋น๊ต์ ๋๋ฆฌ๋ค.
- ๋๊ด์ ๋ฝ์ ์ถฉ๋์ด ๋ง์ด ์์๋๊ฑฐ๋ ์ถฉ๋์ด ๋ฐ์ํ์ ๋ ๋น์ฉ์ด ๋ง์ด ๋ค๊ฒ์ด๋ผ๊ณ ํ๋จ๋๋ ๊ณณ์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ๋๊ด์ ์ธ ๋ฝ
๋ต๋ณ
- ๋ฌธ์ ์ ์
- Replication์ ๋ณดํต ๋ํดํธ๋ก Binlog ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
- ์ด๋ ๋ง์คํฐ์ UPDATEํ ์ฟผ๋ฆฌ๊ฐ, SLAVE์ ๋์ฐฉํ๊ธฐ ์ ์ SLAVE์ ์กฐํ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด๊ฒ ๋๋ฉด NULL์ ๋ฐํํ๊ฒ ๋๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ - ์ค๋๊ธฐ
- Replication์์ ์ค๋๊ธฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ํ์ง๋ง ์ด ๋ฐฉ์์ Master๊ฐ Slave์ ์๋ต์ ๊ธฐ๋ค๋ ค์ผํ๋ฏ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ํธ๋ ์ด๋ ์คํ
- ๊ฒฐ๊ตญ์ ํธ๋ ์ด๋ ์คํ๊ฐ ๋ฐ์ํ๋ค.
- ์๋น์ค ์ด์์์ ์กฐํ์ ์์ ์ฑ์ด ๋ฐ์ดํฐ ์ ํฉ์ฑ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค๊ณ ์๊ฐ๋๊ธฐ์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๊ทธ๋๋ก ์ฌ์ฉํ ๋ฏ ํ๋ค.
- ๋ง์ฝ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ฒญ์ NULL์ด ๋ฐ์ํ๋ค๊ณ ํด๋ ์๋ก๊ณ ์นจ์ ํ๋ฒ ๋ ํ๋ ๋ฑ ๋ค๋ฅธ ์ก์ ์ ์ทจํ ๊ฒ์ผ๋ก ์์๋๊ธฐ๋ ํ๋ค.
๋ต๋ณ
- ์ค๋ฉ์ด๋
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด DB ํ ์ด๋ธ์ ๋ถํ ํ์ฌ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ๊ณณ์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ค๋ฉ์ ํต์ฌ
- ์ค๋ฉํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋๋ฉฐ, ์ค๋ฉํค๋ฅผ ์ ์ง์ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ํ์ชฝ ์ค๋๋ก ๋ชฐ๋ฆฌ๊ฒ ํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ต๋ณ
- FK๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ
- ์ฅ์
- DB์์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(์ธ๋ํค ๋ฌด๊ฒฐ์ฑ)์ ๋ณด์ฅํ ์ ์๋ค.
- ๋จ์
- ํน์ DB์ ์์กด์ ์ด๋ค.
- ์ฅ์
- FK๋ฅผ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ
- ์ฅ์
- WAS์์์ ๋ก์ง์ด ํน์ DB์ ์์กด์ ์ด์ง ์๋ค.
- ๋จ์
- WAS์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ๋ ค์ผ ํ ์๋ ์๋ค.
- ์ฅ์
๋ต๋ณ
Multi Version Concurrency Control
- MVCC๋?
- ๋ ์ฝ๋ ๋ ๋ฒจ์ ํธ๋์ญ์ ์ ์ง์ํ๋ DBMS๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ.
- ํ๋์ ๋ ์ฝ๋ (ID๊ฐ 12์ธ ๋ก์ฐ)์ ๋ํด 2๊ฐ์ ๋ฒ์ ์ด ์ ์ง๋๊ณ , ํ์์ ๋ฐ๋ผ ์ด๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฌ์ง๋์ง ์ฌ๋ฌ ๊ฐ์ง ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ์ง๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค.
- MVCC ์ฌ์ฉ์ด์
- ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์ ๊ธ์ ์ฌ์ฉํ์ง ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๋๋ฐ ์๋ค.
- InnoDB๋ Undo ๋ก๊ทธ๋ฅผ ์ด์ฉํด ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
- ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์ ๊ธ์ ์ฌ์ฉํ์ง ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๋๋ฐ ์๋ค.
- MySQL MVCC ์์
mysql> INSERT INTO member (m_id, m_name, m_area) VALUES (12, 'binghe', '์์ธ');
์์ ๊ฐ์ด ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ฉด MySQL์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅํ๊ฒ ๋๋ค.
mysql> UPDATE member SET m_area='๊ฒฝ๊ธฐ' WHERE m_id=12;
๊ทธ๋ฆฌ๊ณ UPDATE๋ฌธ์ ๋ ๋ฆฌ๋ฉด ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
- ๋ฒํผ ํ์ ์๋ก์ด ๊ฐ์ธ '๊ฒฝ๊ธฐ'๋ก ์ ๋ฐ์ดํธ ๋๋ค. ๊ทธ๋ฆฌ๊ณ Undo ๋ก๊ทธ์ ์ด์ ๋ฐ์ดํฐ์ธ '์์ธ'์ด ์ ์ฅ๋๋ค.
- ์ด๋ ์กฐํ๋ฅผ ํ๋ฉด, ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์กฐํ๋๋ค.
READ_UNCOMMITTED
: ๋ฒํผ ํ์ด๋ ๋ฐ์ดํฐ ํ์ผ๋ก๋ถํฐ ๋ณ๊ฒฝ๋ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ('๊ฒฝ๊ธฐ')READ_COMMITTED
ํน์ ๊ทธ ์ด์: Undo ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ('์์ธ')
- ์ํ ๋ณํ
COMMIT
-> ์ง๊ธ์ ์ํ๋ฅผ ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ๋ก ๋ง๋ ๋ค. (๋ฒํผ ํ์ ์๋ ๋ด์ฉ์ ๋์คํฌ I/O๋ฅผ ํตํด ์์ํ)- COMMIT๋๋ Undo ์์ญ์ด ๋ฐ๋ก ์ญ์ ๋๊ฑฐ๋ ํน์ ํธ๋์ญ์ ์ด ๋์ด์ ์ฌ์ฉ๋์ง ์์ ๋ ์ญ์ ๋๋ค.
ROLLBACK
-> Undo์ ์๋ ๋ฐฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ ํ๋ก ๋ค์ ๋ณต๊ตฌํ๋ค.- ROLLBACK๋๋ Undo ์์ญ์ ๋ด์ฉ์ ์ญ์ ํ๋ค.
๋ต๋ณ
- ์ธ๋ฑ์ค ์ปฌ๋ผ ์์๋ฅผ ์ฃผ์ํด์ผ ํ๋ค.
- ๋ค์ค ์ธ๋ฑ์ค์ ๋ ๋ฒ์งธ ์นผ๋ผ์ ์ฒซ ๋ฒ์งธ ์นผ๋ผ์ ์์กดํด์ ์ ๋ ฌ๋ผ ์๋ค.
- ๋ค์ค ์ธ๋ฑ์ค ํ ์ด๋ธ์์ ์กฐํ๋ฅผ ํ๋ฉด, ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ์ปฌ๋ผ ๊ฐ๋ถํฐ ์ฐพ๊ณ , ๊ทธ ๋ค์ ์ธ๋ฑ์ค ์นผ๋ผ์ ์ฐพ๊ธฐ ์์ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ๋ฒ์ ๊ฒ์์ปฌ๋ผ์ ๋ค์ ๋ฌ์ผํ๋ค
- ์ ํ ์ปฌ๋ผ ์์ด ์ฌ์ฉํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋ค.
- ์ ํ ์ปฌ๋ผ ์์ด ๋ค์ ์กด์ฌํ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ ํ ํ์ง ์๋๋ค.
๋ต๋ณ
- ์ฃผ์ ์งํ
- type: ์ ๊ทผ ๋ฐฉ์ -> ํ ์ด๋ธ์์ ์ด๋ป๊ฒ ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง๋ฅผ ์๋ฏธ.
- key: ์ค์ ๋ก ์ตํฐ๋ง์ด์ ๊ฐ ์ฌ์ฉํ ์ธ๋ฑ์ค.
- rows: ๋ช ํ์ ๊ฐ์ ธ์๋๊ฐ๋ฅผ ํ์ -> ํ๊ท ๋ช ๊ฐ์ ํ์ ์ ๊ทผํ๋์ง ํ์. (์ค์ ํ ์์ ๋ฐ๋์ ์ผ์นํ์ง ์๋๋ค)
- filtered: ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํํฐ(์กฐ๊ฑด)๋ฅผ ํตํด ๋ช ํ์ด ๋จ๋์ง ํ์ํ๋ค.
- extra: ์ตํฐ๋ง์ด์ ๊ฐ ๋์ํ๋ ํํธ
- ์ค์ ํค์๋
- Using filesort(ORDER BY๋ฅผ ์ธ๋ฑ์ค๋ก ํด๊ฒฐํ์ง ๋ชปํ๊ณ , ๊ฒฐ๊ณผ ์ง์ quick sort๋ก ์ ๋ ฌํ๋ ๊ฒ.)
- Using temporary: ์๋ฌต์ ์ผ๋ก ์์ ํ ์ด๋ธ์ด ์์ฑ๋ ๊ฒ์ ํ์.
- ์ค์ ํค์๋
- ๋ ์์ธํ ๋ด์ฉ
๋ต๋ณ
- MHA (Master High Availability) ์ฌ์ฉ
- Master DB ์ฅ์ ๋ฐ์์, ์๋์ผ๋ก failover๋ฅผ ์ํํ์ฌ Slave DB๋ฅผ Master DB๋ก ์น๊ฒฉ์์ผ ์๋น์ค ๋ค์ดํ์์ ์ต์ํํ๋ ์๋ฃจ์ ์ด๋ค.
- ๊ณ ๊ฐ์ฉ์ฑ (High Availability): ์์คํ ์ด ์๋นํ ์ค๋ ๊ธฐ๊ฐ ๋์ ์ง์์ ์ผ๋ก ์ ์ ์ด์์ด ๊ฐ๋ฅํ ์ฑ์ง
ํ ๊ธ
- ๋ฐฉ๋ํ ๋ฌธ์
- ๋์คํฌ๋ณด๋จ ๋ฉ๋ชจ๋ฆฌ DB
- ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต๊ตฌ์กฐ ๊ด์
- ๋์คํฌ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค CPU์์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋ฉ๋ค. ๋์คํฌ๊ฐ ์ฉ๋์ ๋ ํฌ์ง๋ง ๋ ๋๋ฆฌ๋ค.
- ํ๋ก์ธ์ค ๊ด์
- ๋์คํฌ์ ์ ๊ทผํ๊ธฐ ์ํด์ Disk I/O๊ฐ ๋ฐ์ํ๋ฉฐ, ์ด๋ ํ๋ก์ธ์ค๋ฅผ Blocked ์ํ๋ก ๋๋ค. ๊ทธ๋ฆฌ๊ณ I/O ์์ฒญ์ด ์๋ฃ๋๋ฉด ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฎ๊ธฐ๊ณ ๋์์ผ Ready ์ํ๊ฐ ๋์ด ๋ค์ CPU์ ์ ์ ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. (๋๋ฆผ)
- ๋ฉ๋ชจ๋ฆฌ๋ ๋ค๋ฅธ ์ฅ์น๋ค์ I/O๊ฐ ๋ฐ์ํ์ง ์๊ณ , ์ธํฐ๋ฝํธ๋ฅผ ํตํด ์ฌ์ฉ์ ๋ชจ๋๋ฅผ ์ปค๋ ๋ชจ๋๋ก ๋ฐ๊พธ๊ธฐ๋ง ํ๋ฉด๋๋ค. ํ๋ก์ธ์ค ์ํ๊ฐ Blocked ๋์ง ์๊ณ , Ready์ Running ์ํ๋ฅผ ๋ฐ๋ณตํ๋ค. (๋น ๋ฆ)
- ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต๊ตฌ์กฐ ๊ด์
- Key-Value ์ ์ฅ์ (NoSQL)
- Key์ Value๋ก ๋งคํ๋ ๋จ์ํ ๋งต ํํ์ ์ ์ฅ์๋ก์ ์ฝ๊ฒ ์ฝ๊ณ ์ธ ์ ์๋ค. (์ง๊ด์ )
- NoSQL (Not Only SQL)
- ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฉ์ดํ๋ค.
- NoSQL์ RDBMS์ ๋นํด ์๋์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค. (๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ๊ทํ๋ฅผ ์งํค์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ธ ๋ฏ ํ๋ค.)
- Value ๊ฐ์ผ๋ก ๋ค์ํ Collection์ ์ ๊ณตํ๋ค.
- ๋ค์ํ Collection (์๋ฃ๊ตฌ์กฐ)๋ฅผ ์ ๊ณตํ๋ค.
- ์ฑ๊ธ ์ค๋ ๋
- ๋ ๋์ค๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, Race Condition์ ํผํด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ฝ๋ค.
- ์ค์ ์ ๋ฐ๋ผ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ณด์กดํ ์ ์๋ค. (๋ณด๊ด, ๋ฐฑ์ )
- ์ฝ๊ฒ Replication ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํ ๊ธ
- Redis๋ ์ฑ๊ธ ์ค๋ ๋์ด๋ค.
- ์ด๋ฅผ ๋ค๋ฅด๊ฒ ๋งํ๋ฉด, Client์์ ์์ฒญํ๋ ๋ช ๋ น์ด๋ ์ฑ๊ธ ์ค๋ ๋(๋ฉ์ธ ์ค๋ ๋)์์ ๋์ํ๋ค.
- Redis ๋ฉ์ธ ์ค๋ ๋ ์ด์ธ์๋ AOP ํน์ ๋ฐฑ์ ์ ์ฌ์ฉ๋๋ I/O ์ค๋ ๋๋ ์กด์ฌํ๋ค.
- ํ์ง๋ง ๋ช ๋ น์ ์ํํ๋ ๊ฒ์ ๋ฉ์ธ ์ค๋ ๋์ด๋ฏ๋ก, Redis๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๋ณด๋ ๊ฒ์ด ๋ง๋ค.
- Redis์ ์ฑ๊ธ ์ค๋ ๋ ํน์ง -> ์ฐธ๊ณ - ๊ณต์ ๋ฌธ์
- ์ฌ์ฉ์์ ์์ฒญ์ ํ๋์(์ฑ๊ธ) ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ์ฒ๋ฆฌํ๋ค. ์ด๋ Multiplexing๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
- ์ด๋ Redis๊ฐ ๋ชจ๋ ๋จ์ผ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. (Node.js์์์ ์ด๋ฒคํธ ๋ฃจํ ๋ฐฉ์๊ณผ ์ ์ฌํ๋ค)
- ์ฑ๊ธ ์ค๋ ๋๊ฐ ๋๋ฆด ๊ฒ์ผ๋ก ํ๋จ๋์ง๋ง, ์ฌ์ค์ ๋น ๋ฅด๋ค. ๊ทธ ์ด์ ๋ ๋งค ์์ฒญ์ ๊ต์ฅํ ์งง์ ์๊ฐ์์ ์ฒ๋ฆฌํ๋ฉฐ, ํ๋ก์ธ์ค๊ฐ ๋ธ๋ก ์ํ๊ฐ ๋์ง ์๋๋ก ์ค๊ณํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, ๋ฌธ๋งฅ๊ตํ์ด ๋ฐ์ํ์ง ์๋๋ค.
- Redis๊ฐ ์ฑ๊ธ ์ค๋ ๋์ธ ์ด์
- CPU๊ฐ ๋ณ๋ชฉ ํ์์ ์์ธ์ด ์๋๋ค.
- Redis์ ๋ณ๋ชฉํ์์ ๋๋ถ๋ถ์ CPU๊ฐ ์๋ ์์คํ ๋ฉ๋ชจ๋ฆฌ/๋คํธ์ํฌ ๋์ญํญ์์ ๋ฐ์ํ๋ค.
- ๋์์ฑ์ ๋ณด์ฅํ๋ค.
- ์ด๋ฒคํธ๋ฃจํ ํจํด์ ํตํด ๋์์ฑ์ ๊ตฌํํ์๊ณ , ๋ฌธ๋งฅ๊ตํ์ด ์์ด ์์์ ์ ์ฝํ ์ ์๋ค.
- ์ฌ์ด ๊ตฌํ
- ์ฌ์ด ๋ฐฐํฌ
- ํ ๊ฐ์ ์ฝ์ด๋ง ์์ด๋ ์ฌ์ฉํ ์ ์๊ธฐ์ ๋ฐฐํฌ/์์ฉ์ด ์ฝ๋ค.
- CPU๊ฐ ๋ณ๋ชฉ ํ์์ ์์ธ์ด ์๋๋ค.
- ์ฐธ๊ณ
ํ ๊ธ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ค์์ฑ - ๋ฉ๋ชจ๋ฆฌ ํํธํ
- ๋ฌธ์ ์
- Physical Memory ์ด์์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. (Swap์ ์ฐ๋ฉด ์๋๊ฐ ๋๋ ค์ง๋ฏ๋ก ๋น์ถ์ฒ)
- Maxmemory๋ฅผ ํตํด ์ต๋ ์ฌ์ฉ๋์ ์ค์ ํ ์ ์์ง๋ง, ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ก ์ธํด ๋ฌด์ฉ์ง๋ฌผ์ผ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ก ์ธํด ์ค์ ๋ก 12M๋ฅผ ์ฌ์ฉ์ค์ธ๋ฐ, Redis๋ 1MB๋ง ์ฌ์ฉ์ค์ด๋ผ๊ณ ํ์ ํ ์ ์๋ค.
- ํด๊ฒฐ๋ฒ
- ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ 60 ~ 70%์ฐจ๋ฉด ์ด์ ์์ผ์ผ ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
- ๋ฌธ์ ์
- Redis๋ copy-on-write ํ์์ ์ด์ฉํ๋ค. (๋ฐฑ์
๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค)
- ๋ฌธ์ ์
- ๋ฆฌ๋ ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด์๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์์ ํ๋ก์ธ์ค๋ฅผ forkํ ๊ฒฝ์ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๊ฒ ๋๋ค.
- ์ด ๋ ๋ถ๋ชจํ๋ก์ธ์ค๋ ํด๋น ํ์ด์ง๋ฅผ ๋ณต์ฌํ ๋ค์ ๋ณ๊ฒฝ์ ์ํํ๋ค. ๊ทธ๋์ cow๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Redis์ ์ค ์ฌ์ฉ๋์
์ค ๋ฐ์ดํฐ ํฌ๊ธฐ + ๊ด๋ฆฌ ๋ฉ๋ชจ๋ฆฌ overhead + Copy-on-Write๋ก ์ธํ ์ถ๊ฐ๋ฉ๋ชจ๋ฆฌ
๋ผ๊ณ ๋ด์ผํ๋ค.
- cow๊ฐ ๋ฐ์ํ๋ ์ฌ๋ก
- save ๋ช ๋ น์ด
- Replication
- ํด๊ฒฐ๋ฒ
- ์บ์ ์ ์ฅ์๋ก ์ฌ์ฉ๋๊ณ ๋ฐฑ์ ํ ํ์๊ฐ ์๋ค๋ฉด RDB (save) ์ค์ ์ OFFํ๋ ๊ฒ์ด ์ข๋ค.
- ๋ฌธ์ ์
- Collection ์ฃผ์ ์ฌํญ
- ๋ฌธ์ ์
- Collection์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด, ์ ์ฒด ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ํํธํ ๊ด์ ์์ ์ข์ง ์๋ค.
- ๋์
- ํ๋์ ์ปฌ๋ ์ ์ ๋๋ฌด ๋ง์ ์์ดํ ์ ๋ด์ผ๋ฉด ์ข์ง ์๋ค. 10000๊ฐ ์ดํ๋ก ์ ์งํ๋๊ฒ ์ข๋ค.
- ๋ฌธ์ ์
- ์ฑ๊ธ ์ค๋ ๋ - O(N) ๊ด๋ จ ๋ช
๋ น์ด
- ๋ฌธ์ ์
- Redis๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๋ค. ์ฆ, ๋์์ ํ ๊ฐ์ ๋ช ๋ น์ด ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค. O(N)์ด ๊ฑธ๋ฆฌ๋ ๋ช ๋ น์ด๋ ํผํ๋ ๊ฒ์ด ์ข๋ค.
- ๊ธด ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํธ๋์ญ์ ์ด ๋ค์ด์ค๋ฉด, ๋ค๋ฅธ ์์ฒญ์ ์ํฅ์ ์ค ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
- ๋ํ์ ์ธ O(N) ๋ช
๋ น์ด
- KEYS: ๋ชจ๋ key๋ฅผ ์ํํ๋ ๋ช
๋ น.
- ๋์ =>
scan
๋ช ๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ํ๋์ ๊ธด ๋ช ๋ น์ ์งง์ ์ฌ๋ฌ ๋ฒ์ ๋ช ๋ น์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
- ๋์ =>
- FLUSHALL, FLUSHDB
- ๋ฐ์ดํฐ ๋ค ๋ ๋ฆฌ๋ ๋ช ๋ น.
- Delete Collections
- ํ๋์ Collection์์ ๋ฐ์ดํฐ 10๋ง๊ฐ๊ฐ ์์ผ๋ฉด ์ญ์ ํ๋๋ฐ 1-2์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. 1-2์ด๋์ ๋ค๋ฅธ ์์ฒญ์ ์๋ฌด๊ฒ๋ ๋ชปํ๋ค..
- Get All Collections
- ํ๋์ Collection์์ 10๋ง๊ฐ์ ๋๋ฅผ ๋ฃ๊ณ , ๋ชจ๋๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด ๊ต์ฅํ ๋๋ ค์ง ์ ์๋ค.
- ๋์ => ํฐ Collection์ ์์ ์ฌ๋ฌ ๊ฐ์ Collection์ผ๋ก ๋๋ ์ ์ ์ฅ.
- KEYS: ๋ชจ๋ key๋ฅผ ์ํํ๋ ๋ช
๋ น.
- ๋ฌธ์ ์
๋ต๋ณ
- Expire๋?
- Key์ TTL(Time To Live)๋ฅผ ์ค์ ํ๊ณ , ํด๋น TTL์ด ๋ง๋ฃ๋๋ฉด ์๋์ผ๋ก ์ญ์ ํด์ฃผ๋ ๊ธฐ๋ฅ.
- Expire์ ์๊ฐ ๋ณต์ก๋
- O(1)
- Expire ๋์ ์๋ฆฌ
- Redis์์ ์ ๊ณตํ๋ Expire ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ค: a passive way, and an active way. (์๋, ์๋)
- ์๋๋ฐฉ์: ํค๋ฅผ ์ ๊ทผํ ๋ ์๊ฐ ์ด๊ณผ๋์๋์ง ํ์ธํ์ฌ ์ญ์ ํ๋ ๋ฐฉ์.
- ์๋๋ฐฉ์: ์ฃผ๊ธฐ์ ์ผ๋ก Redis๊ฐ ๋ง๋ฃ๊ฐ ์ค์ ๋ ํค ์ค์์ ๋๋ค์ผ๋ก ๋ช ๊ฐ์ ํค๋ฅผ ํ ์คํธํ์ฌ ์ญ์ ํ๋ ๋ฐฉ์.
- Redis๋ ์๋๋ฐฉ์์ ๋ํดํธ๋ก ์ ๊ณตํ๋ค.
- Redis๋ ์ด๋น 10๋ฒ ์๋ ์์
์ ์ํํ๋ค.
- ๋ง๋ฃ๊ฐ ์ค์ ๋ ํค ์ธํธ์์ 20๊ฐ์ ๋๋ค ํค๋ฅผ ํ ์คํธํ๋ค.
- ๋ง๋ฃ๋ ๋ชจ๋ ํค๋ฅผ ์ญ์ ํ๋ค.
- ํค์ 25% ์ด์์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ, 1๋จ๊ณ๋ถํฐ ๋ค์ ์์ํ๋ค.
- Redis๋ ์ด๋น 10๋ฒ ์๋ ์์
์ ์ํํ๋ค.
- Redis์์ ์ ๊ณตํ๋ Expire ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ค: a passive way, and an active way. (์๋, ์๋)
- ๊ณต์ ๋ฌธ์ ์ฐธ๊ณ
๋ต๋ณ
- ๊ฒฐ๋ก ์ ์ผ๋ก ํธ์์ฑ๊ณผ ๋ณด์์ฑ ์ฌ์ด์์ ํธ๋ ์ด๋ ์คํ๊ฐ ๋ฐ์ํ๋ค.
- ํ์๋ AT๋ฅผ statelessํ๊ฒ ๊ฐ์ ธ๊ฐ๊ณ , RT๋ statefulํ๊ฒ ์๋ฒ์ ์ ์ฅ์ํค๋๊ฒ ์ข๋ค๊ณ ์๊ฐํ๋ค.
- ๋ง๋ฃ๊ธฐ๊ฐ์ด ์งง์ Access Token์ ๊ฒฝ์ฐ๋ ํด๋ผ์ด์ธํธ๋จ์ ์ ์ฅํ ์ ์๋ค. ๋ง๋ฃ๊ธฐ๊ฐ์ด ๊ธด Refresh Token์ ์ด๋์ ์ ์ฅํ๋ ๊ฒ์ด ์ข์๊น?
- Client์ ์ ์ฅํ ๊ฒฝ์ฐ (Client์ RT๋ฅผ ์ ์ฅ์ํค๊ณ , AT๊ฐ ๋ง๋ฃ๋๋ฉด RT๋ฅผ ํตํด AT๋ฅผ ์ฌ๋ฐ๊ธํ๋ ๋ฐฉ์)
- ์๋ฒ์ ๋ฐ๋ก RT๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ผ๋ฏ๋ก ํธํ๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ RT๊ฐ ํ์ทจ๋๋ฉด ๋ณด์์ ์ผ๋ก ๊ต์ฅํ ์ํํ๋ค. (์๋ฒ์ธก์์ revoke ํ ๋ฐฉ๋ฒ์ด ์๋ค)
- Server์ ์ ์ฅํ ๊ฒฝ์ฐ (Client์ RT๋ฅผ ์ ๊ทผํ ์ ์๋ index ๊ฐ๋ง ์ ์ฅ์ํค๊ณ , ์๋ฒ DB์ RT๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์)
- ์๋ฒ์ RT๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ๊ด๋ฆฌํฌ์ธํธ๊ฐ ๋์ด ํธ์์ฑ์ด ๋จ์ด์ง๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ์ ์ง์ ์ ์ธ RT๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก ๋ณด์์ ์ผ๋ก ์ฐ์ํ๋ค.
- RT๊ฐ ํ์ทจ๋์ด๋ ์ฌ ๋ก๊ทธ์ธ์ ํตํด ์ด์ RT(ํ์ทจ๋)๋ฅผ ๋ฌด๋ ฅํ์ํฌ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ์๋ฒ์ ์ ์ฅ๋ RT๋ฅผ ๋ฌด๋ ฅํ์ํฌ ์ ์๋ค.
- ์ฆ, ํ์ทจ๋์๋ค๊ณ ํ๋จ๋๋ค๋ฉด ์๋ฒ์ธก์์ RT๋ฅผ revoke ํ ์ ์๋ค.
- ๋ฌผ๋ก ์ธ์ ์ฒ๋ผ ์ฌ์ฉ๋๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค. ํ์ง๋ง ์ด๋ RT๋ฅผ ํตํ AT๋ฅผ ์ฌ๋ฐ๊ธํ ๋๋ง statefulํ๊ฒ ๋์ํ๋ฏ๋ก ํธ๋ ์ด๋ ์คํ ๊ด๊ณ๋ผ๊ณ ์๊ฐํ๋ค.
- ์๋ฒ์ RT๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ๊ด๋ฆฌํฌ์ธํธ๊ฐ ๋์ด ํธ์์ฑ์ด ๋จ์ด์ง๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ์ ์ง์ ์ ์ธ RT๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก ๋ณด์์ ์ผ๋ก ์ฐ์ํ๋ค.
- Client์ ์ ์ฅํ ๊ฒฝ์ฐ (Client์ RT๋ฅผ ์ ์ฅ์ํค๊ณ , AT๊ฐ ๋ง๋ฃ๋๋ฉด RT๋ฅผ ํตํด AT๋ฅผ ์ฌ๋ฐ๊ธํ๋ ๋ฐฉ์)
๋ต๋ณ
- ๋ ์ด์ด๋ฅผ ๋๋ ์ด์
- ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ. ๊ฐ ๊ณ์ธต๊ฐ์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํจ (์ถ์ํ)
- ์ด๋ค ์์ผ๋ก ๋ ์ด์ด๋ฅผ ๋๋์๋๊ฐ?
- Presentation
- Presentation Layer == UI Layer (Web UI, ์ฑ, Console๋ฑ๋ฑ)
- UI๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ณ์ธต. (Martin Flower)
- the presentation layer doesnโt need to know or worry about how to get customer data; it only needs to display that information on a screen in particular format - Software Architecture Patterns by Mark Richards
- ์์์ ๋ํ ํํ์ ์ญํ ์ ๋ด๋น. (์ ์ผํ๊ฒ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ๋ ๊ณ์ธต)
- presents the applicationโs features and data to the user.
- ์ญํ
- ์์ฒญ ๋ฐ ์๋ต ๋ณํ
- ์ธ์ฆ
- ์์ธ์ฒ๋ฆฌ (ExceptionHandler)
- Presentation Layer == UI Layer (Web UI, ์ฑ, Console๋ฑ๋ฑ)
- Application
- Service๊ณ์ธต์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ค!
- ์ด ๊ณ์ธต์ ํธ๋์ญ์
, ๋๋ฉ์ธ ๊ฐ ์์ ๋ณด์ฅ์ ์ญํ ๋ง ํ๋ค.
- ๊ทธ๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ๋๊ฐ ์ฒ๋ฆฌํ๋๋!
- ๋ฐ๋ก ๋๋ฉ์ธ(Domain) Layer๋ค! -> ๋๋ฉ์ธ์ ์์ ์์
- ์ญํ
- ํธ๋์ญ์ ๊ด๋ฆฌ
- ๋๋ฉ์ธ ๊ฐ ์์ ๋ณด์ฅ ์ญํ
- Domain
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ญํ . (ํด๋ผ์ด์ธํธ ์๊ตฌ์ฌํญ์ ์ฝ๋ํ์ํค๋ ๊ณ์ธต)
- ์ด ๊ณ์ธต์์๋ ๋น์ฆ๋์ค ๋ก์ง ์ํฉ์ ๋ฐ์ํ๋ ์ํ๋ฅผ ์ ์ดํ๊ณ ์ฌ์ฉํ๋ฉฐ, ๊ทธ์ ๊ฐ์ ์ํ ์ ์ฅ๊ณผ ๊ด๋ จ๋ ๊ธฐ์ ์ ์ธ ์ธ๋ถ์ฌํญ์ Infra์ ์์ํ๋ค.
- ์ฆ, ๋ค๋ฅธ ์์คํ ๊ณผ์ ํต์ , ์ง์์ฑ ์ธ๋ถ ์ ๋ณด๋ Infra ๊ณ์ธต์๊ฒ ์์ํ๋ค.
- Infrastructure
- ์์ ๊ณ์ธต์ ์ง์ํ๋ ์ผ๋ฐํ๋ ๊ธฐ์ ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. (๊ตฌํ์ฒด)
- Presentation