JiwonDev

์ž๋ฐ”์˜ ์ง๋ ฌํ™”(Serialization)๋ž€?

by JiwonDev

https://www.slideshare.net/sunnykwak90/java-serialization-46382579

 

์ž๋ฐ” ์ง๋ ฌํ™” (Java serialization)

์ž๋ฐ” ์ง๋ ฌํ™” ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์†Œ๊ฐœ ๋ฐ ์ง๋ ฌํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ค์— ๋Œ€ํ•œ ๋น„๊ต ์ž๋ฃŒ

www.slideshare.net

https://kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=113&dbnum=146784&mode=detail&type=techreport 

 

๋ฐ์ดํ„ฐ ๊ธฐ์ˆ  ๋™ํ–ฅ < ์ •๋ณด๋งˆ๋‹น - ํ•œ๊ตญ๋ฐ์ดํ„ฐ์‚ฐ์—…์ง„ํฅ์›

Java Object Serialization์— ๋Œ€ํ•ด ๋ชจ๋ฅด๊ณ  ์žˆ๋˜ 5๊ฐ€์ง€ ์‚ฌํ•ญ ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•˜๋ผ. Java Object Serialization์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋‹น์—ฐํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ

kdata.or.kr

https://techblog.woowahan.com/2550/

 

์ž๋ฐ” ์ง๋ ฌํ™”, ๊ทธ๊ฒƒ์ด ์•Œ๊ณ ์‹ถ๋‹ค. ํ›‘์–ด๋ณด๊ธฐํŽธ | ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

{{item.name}} ์ž๋ฐ”์˜ ์ง๋ ฌํ™” ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€ ํ˜•ํƒœ๋กœ ์ž๋ฐ” ์ง๋ ฌํ™”์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊ณผ ์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฒช์€ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

techblog.woowahan.com

 

# ์ง๋ ฌํ™”(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;
}

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ