[C#] ์ง๋ ฌํ&๋ง์ฌ๋ง
1. ์ฉ์ด ์ ๋ฆฌ
- Managed Code : .NET ๋๋ C# ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์๋ฏธ, ์ปดํ์ผ๋ฌ๋ ์ค๊ฐ ์ธ์ด(Intermediate Language, IL)์ฝ๋๋ฅผ ์์ฑํ๊ณ CLR(Common Language Runtime) ํ๊ฒฝ์์ ๊ธฐ๊ณ ์ธ์ด ์์ฑ
- Unmanaged Code : ์ปดํ์ผ ํ ๋ IL๊ณผ ๊ฐ์ ์ค๊ฐ ๊ณผ์ ์์ด ๊ธฐ๊ณ ์ธ์ด ์์ฑ (MFC, ATL, Win32 ๋ฑ)
- MBR : Marshal By Reference
- MBV : Marshal By Value
- Byte Stream : ๋์์์ด ์ฐ์๋๋ ๋ฐ์ดํธ ์ด
2. ์ง๋ ฌํ (Serialization)
- ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ Byte Stream์ผ๋ก ๋ณํํ๋ ์์ ์ ์๋ฏธํ๋ฉฐ ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Stream์ ์ฐ๊ธฐ ์ํด์ ์ฐ์์ (Serial)๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฒ
- ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ Memory Buffer, Network๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ก/์์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ
- ์ญ์ง๋ ฌํ(Deserialization) : Byte Stream์ผ๋ก ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ ๊ตฌ์กฐ๋ก ๋ณํํ๋ ์์
3. ๋ง์ฌ๋ง (Marshalling)
- ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ์กํ ๋ชฉ์ ์ผ๋ก ํํ๋ฐฉ์์ ์ ์ฅ ๋ํ ์ ์ก์ ์ ํฉํ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ฉฐ ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ํ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- Managed Dataํ์ Unmanaged Dataํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ์๋ฏธ
- ์ง๋ ฌํ์ ๋น์ทํ ๊ฐ๋ ์ด์ง๋ง ์ง๋ ฌํ๋ Byte Stream์ผ๋ก ๋ณํ์ ์๋ฏธํ์ง๋ง ๋ง์ฌ๋ง์ ๋ณํํ๋ ๊ณผ์ ์ ์๋ฏธ
- ์ธ๋ง์ฌ๋ง(Unmarshalling) : ๋ง์ฌ๋ง์ ํตํด ์ ์ก๋ ๋ฐ์ดํฐ๋ค์ ์๋ ๊ตฌ์กฐ๋ก ๋ณต์์ํค๋ ์์
- ๋ท๋ท(.NET)์์๋ ์ฐธ์กฐ ๋ง์ฌ๋ง (MBR), ๊ฐ ๋ง์ฌ๋ง (MBV) ์ง์
์ฐธ์กฐ ๋ง์ฌ๋ง (Marshal By Reference, MBR)
- ๊ฐ์ฒด์ ์ ๋ณด๋ง์ ๋ฌถ์ด์ ์ ์กํ ํ ๊ทธ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์๊ฒฉ์ผ๋ก ๊ฐ์ฒด๋ฅผ ํธ๋ค๋ง
- MarshalByRefObject๋ฅผ ์์ฝ
๊ฐ ๋ง์ฌ๋ง (Marshal By Value, MBV)
- ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ ์ฒด๋ฅผ ์ ์ฅํ ํ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ๊ฐ์ฒด๋ฅผ ๋ณต์ํ์ฌ ์ฌ์ฉ
- Serializable Attribute๋ฅผ ์ง์ ํ๊ฑฐ๋ ISerializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
- ๋ง์ฌ๋ง ํ๋ก์ธ์ค
1. Marshalling : ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ Byte ๋จ์๋ก ๋ถํด
2. ์ง๋ ฌํ๋์ด ๋ถํด๋ ๋ฐ์ดํฐ๋ฅผ ์์์ ๋ฐ๋ผ ์ ์ก
3. Unmarshalling : ์ ์ก๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ ์ํ๋ก ๋ณต๊ตฌ
๊ธฐ๋ณธ ๋ง์ฌ๋ง ๋์ - .NET Framework
.NET์ ๊ธฐ๋ณธ ๋ง์ฌ๋ง ๋์์ ๋ํด ์์๋ด ๋๋ค. Interop ๋ง์ฌ๋ง์ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ดํด๋ณด๊ณ ํด๋์ค, ๋๋ฆฌ์ ๋ฐ ๊ฐ ํ์์ ๋ํ ๊ธฐ๋ณธ ๋ง์ฌ๋ง์ ์์๋ด ๋๋ค.
learn.microsoft.com
์ง๋ ฌํ(Serialization)์ ๋ง์ฌ๋ง(Marshalling)์ ๋ํด์
1. ์ง๋ ฌํ(Serialization) ์ง๋ ฌํ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ(Byte Stream) ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. 1.1 ๋ฐ์ดํธ ์คํธ๋ฆผ(Byte Stream) ๋ฐ์ดํธ ์คํธ๋ฆผ์ด๋(Byte Stream) ๋์์์ด
taeksumart.tistory.com
๋ง์ฌ๋ง(Marshalling) vs ์ง๋ ฌํ(Serialization)
ํด๋ฆฐ์ฝ๋ 14์ฅ๋ณด๋ฉด์ ์ ๋ฆฌํ๋ ค๊ณ ํ์ผ ๋ง๋ค์ด๋๋๋ฐ ์ด์ ์ผ ์ด๋ค. ์ง๋ ฌํ๋ ๋ง์ด ๋ค์ด๋ด์ ๊ทธ๋ฐ๊ฐ๋ค..ํ๋๋ฐ, ๋ง์ฌ๋ง์ด๋ผ๋ ๋จ์ด๋ฅผ ์ ๋ ์ฒ์ ๋ค์ด๋ด์ ์ข ์ฐพ์๋ดค์๋ค. ์ฐพ์๋ณด๋ฉด ๊ด๋ จ ๊ธ๋ค์ด ๊ฝค
hyesun03.github.io
๋ฐ์ดํฐ ์ง๋ ฌํ(serialization)๋ ๋ฌด์์ด๊ณ ์ ํ์ํ๊ฐ?
์ฐ์ ์ด ๊ธ์ ๊ตฌ๊ธ๋ง์์ ๋์ค๋ ์ฌ๋ฌ ๊ฐ์ง ์ง๋ ฌํ์ ๋ํ ๊ธ๋ค๊ณผ ์ค๋ช ๋ค์ ์ฝ๊ณ ์ ๋๋ฆ๋๋ก ํ๋ฒ ๋ ์ดํดํ๊ธฐ ํธํ๋๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋ฐ์ดํฐ ์ง๋ ฌํ(serialization), ์ญ์ง๋ ฌํ(deserialization)๋
hub1234.tistory.com