์๋ฐ์ ์ง๋ ฌํ(Serialization)๋?
by JiwonDevhttps://www.slideshare.net/sunnykwak90/java-serialization-46382579
https://techblog.woowahan.com/2550/
# ์ง๋ ฌํ(Serialization)
์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ณํํ์ฌ, ํ์ผ ๋๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ก์์ (I/O) ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ง๋ ฌํ ๊ธฐ์ ์ ๋ง์ฌ๋ง(marshalling)๊ณผ ์๊ฒฉ ํ๋ก์์ ํธ์ถ(remote procedure call)๊ณผ ๋น์ทํ ๊ธฐ์ ์ด๊ธด ํ๋ค. ๋ง์ฌ๋ง์ ํ๋ผ๋ฉํ๋ฅผ ๋ฐ์ดํธ๋ก ์ ๋ฌํ๋ ์์ ์ด๋ผ๋ฉด, ์ง๋ ฌํ๋ ๋ง์ฌ๋ง์ ์ด์ฉํ์ฌ [๊ฐ์ฒด๋ ๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ]๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ ํํ์ฌ ์ ์ถ๋ ฅํ๋ ์์ ์ด๋ค.
์น ํ๊ฒฝ(๊ฐ์ฒด, ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ), ๋คํธ์ํฌ ํจํท ํต์ , ๋ถ์ฐ์ปดํจํ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ตฌ์กฐํ ๋ฐ์ดํฐ ์ ์ฅ๋ฑ ์ง๋ ฌํ๋ ๋ค์ํ ๋ถ์ผ์์ ์ฐ์ด๋ ๊ธฐ์ ์ด๋ค. ์ง๋ ฌํ ์ฑ๋ฅ์ ๋ฐ๋ผ CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ๋น์ฉ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค.
#์ง๋ ฌํ ๋ฐ์ดํฐ ๋ฐฉ์
๋คํธ์ํฌ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, Binary ๋จ์๋ก ์ง์ ๋ฐ์๋ ๋์ง๋ง ๋ณดํต์ ์๋์ ๊ฐ์ ์ง๋ ฌํ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
- Json (JavaScript Object Notation)
- ๋จ์ํ key-value ํ ์คํธ ํ์์ผ๋ก ์ฌ๋, ๊ธฐ๊ณ๊ฐ ๋ชจ๋ ์ฝ์ ์ ์๋ ์ง๋ ฌํ ๋ฐ์ดํฐ ํ์์ด๋ค. - XML (eXtensible HTML)
- ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ํ ์คํธ ํ์์ด๋ค. Json๋ณด๋ค ๋ณต์กํ์ง๋ง schema๋ฅผ ์ ์ฉํ ์ ์๊ณ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค. - YAML (YAML Ain't HTML)
- XML์ ๋ณด๋ค ์ฌ๋์ด ์ฝ๊ธฐ ํธํ๋๋ก ๋ง๋ค์ด์ง ๋งํฌ์ ์ธ์ด์ด๋ค. ๋ฌธ๋ฒ์ด ๋จ์ํ๊ณ ๊ฐ๋ ์ฑ์ด ๋๋ค.
#์ง๋ ฌํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ฐ
์๋ฐ์์๋ ์ ์, ๋ฌธ์์ด, ๋ฐ์ดํธ๋จ์์ ์ ์ถ๋ ฅ๋ง ์ ๊ณตํ์๋ค. ๊ทธ๋์ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ํ์ผ๋ก ์ ์ฅ<->๋ณต์ ํ๊ฑฐ๋ ๋คํธ์ํฌ๋ก ์ ์กํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ณ์๋ฅผ ์ผ์ ํ ํ์(๋คํธ์ํฌ์ ๊ฒฝ์ฐ ํจํท๋จ์)์ผ๋ก ๋ณํํ์ฌ ์ ์กํ์ฌ์ผ ํ๋ค.
#๊ฐ์ฒด ์ง๋ ฌํ
์๋ฐ์์๋ Serializable ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ง๋ ฌํ๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ์ฒด ์ง๋ ฌํ๋ ๊ฐ์ฒด์ ๋ด์ฉ(๋ฉค๋ฒ ๋ณ์์ ๋ด์ฉ)์ ์๋ฐ ์ ์ถ๋ ฅ์์ ์๋์ ์ผ๋ก ๋ฐ์ดํธ ๋จ์๋ก ๋ณํํ์ฌ ์ ์ฅ<->๋ณต์ ํด์ฃผ๊ณ ๋คํธ์ํฌ๋ก ์ ์กํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ์ฆ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์์ฝ๊ฒ ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ก ์ ์กํ ์ ์๋ค.
๋ํ ์๋ฐ์์ ์๋์ผ๋ก ํด์ฃผ๋ ๊ฒ์ด๊ธฐ์ ์ด์์ฒด์ ๊ฐ ๋ฌ๋ผ๋ ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ ์ธ ๊ฒ์ ์๋ค. ๊ฐ์ฒด์ง๋ ฌํ๊ฐ ์งํ ๋ ๋ ๋ฉค๋ฒ๋ณ์๊ฐ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ(*๋จ ํด๋น ๊ฐ์ฒด๋ Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ)์๋ ์๋์ผ๋ก ํด๋น ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ ํจ๊ป ์ง๋ ฌํํด๋ฒ๋ฆฐ๋ค. ์ด๋ฐ์์ผ๋ก ์ฌ์ฉ๋๋ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ค์ ์ ๋ถ ์ฐ์์ ์ผ๋ก ์ง๋ ฌํํ์ฌ ๋คํธ์ํฌ์ ์์ฝ๊ฒ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก externalization ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ์ง์ ์ง๋ ฌํ ์ฝ๋๋ฅผ ๋ง๋ค ์๋์์ง๋ง, ์ฌ์ฉํ ์ผ์ ๊ฑฐ์ ์๋ค.
# ๊ฐ์ฒด ์ ์ก์ ๋จ๊ณ
๊ฐ์ฒด๋ฅผ ๋ถํดํ์ฌ ์ ์กํ๊ธฐ ์ํด์๋ ์ง๋ ฌํ(Serialization) ๋์ด์ผ ํ๋ค. ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์์ ๋ง์ฌ๋ง(Marshalling)์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋ฉ์ด๋ฆฌ๋ก ๋ง๋ค์ด, I/O ์คํธ๋ฆผ์ ๋ณด๋ผ ์ ์๋ ํํ๋ก ๋ฐ๊พธ๋ ๋ณํ์์ ์ ์๋ฏธํ๋ค.
- (1) ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ถํดํ๋ค. (marshalling)
- (2) ์ง๋ ฌํ ๋์ด ๋ถํด๋ ๋ฐ์ดํฐ๋ฅผ ์์์ ๋ฐ๋ผ ์ ์กํ๋ค.
- (3) ์ ์ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋๋๋ก ๋ณต๊ตฌํ๋ค. (unmarshalling)
# ์๋ฐ์ ์ง๋ ฌํ
์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ๋ง์ฌ๋ง(Marshalling)ํ๊ธฐ ์ํด์๋ Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผํ๋ค. ์ฐธ๊ณ ๋ก ํด๋น ์ธํฐํ์ด์ค ๋ด๋ถ์๋ ์๋ฌด๋ฐ ๋ฉ์๋๊ฐ ์กด์ฌํ์ง ์๊ณ , ๋จ์ํ JVM์ด ์ง๋ ฌํํ ์ ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์๋ฏธ๋ง์ ๊ฐ์ง๋ค.
์ง๋ ฌํ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ JVM์๊ฒ ์ง๋ ฌํ ๊ฐ์ฒด์์ ์๋ ค์ผ ํ๋ค.
- ๊ธฐ๋ณธํ ํ์ (boolean, char...)์ ์กฐ๊ฑด์์ด ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋ค.
- ํด๋น ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ ํผ๋ฐ์ค ํ์ ์ ๋ชจ๋ ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ์ฌ์ผ ํ๋ค. ์ฆ Serializable์ ๊ตฌํํ์ฌ์ผ ํ๋ค.
- ์ง๋ ฌํ ๊ณผ์ ์์ ์ ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ transient ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. (ํด๋น ๋ฉค๋ฒ๋ null์ด ๋์ ๋๋ค)
class Member implements Serializable{
private tansient String password; // ํด๋น ๋ฉค๋ฒ๋ null ๊ฐ์ด ๋์
๋จ. ์ง๋ ฌํ ๋์ง ์์.
private String email;
private int age;
}
'๐๊ธฐ๋ณธ ์ง์ > Java ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM์ ์๋ฆฌ์ ๋ฐ์ดํธ์ฝ๋ (0) | 2021.08.16 |
---|---|
์์ธ ์ฒ๋ฆฌ์ ๋ค์ํ ๋ฐฉ๋ฒ (0) | 2021.08.16 |
์๋ฐ ์ด๋ ธํ ์ด์ (@Annotation) (0) | 2021.08.03 |
ํ๋ก๊ทธ๋๋ฐ ์ํฐํจํด (Anti-pattern) (0) | 2021.08.02 |
StringBuffer์ StringBulider (0) | 2021.07.27 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev