Serializable
μ§λ ¬νλ?
Serializeableμ΄λ μλ° μμ€ν λ΄λΆμμ μ¬μ©λλ κ°μ²΄ λλ λ°μ΄ν°λ₯Ό μΈλΆμ μλ° μμ€ν μμλ μ¬μ©ν μ μλλ‘ byte ννλ‘ λ°μ΄ν° λ³ννλ κΈ°μ κ³Ό byteλ‘ λ³νλ λ°μ΄ν°λ₯Ό λ€μ κ°μ²΄λ‘ λ³ννλ κΈ°μ μ ν©μ³μ λ§νλ€.
μμ€ν μ μΌλ‘ λ§νλ©΄, JVM(Java Virtual Machine)μ λ©λͺ¨λ¦¬μ μμ£Ό(ν/μ€ν)λμ΄ μλ κ°μ²΄ λ°μ΄ν°λ₯Ό λ°μ΄νΈ ννλ‘ λ³ννλ κΈ°μ κ³Ό μ§λ ¬νλ λ°μ΄νΈ ννμ λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ λ³νν΄μ JVMμΌλ‘ μμ£Όμν€λ ννλ₯Ό λ§νλ€.
μ΄μ μ Djangoμμλ python κΈ°λ³Έ λ°μ΄ν° μ νμ, JSON, XML ννλ‘ λ³ννκΈ° μν΄ μ¬μ©νμλ€. Django restframework serializers
μ‘°κΈ λ μμΈν μ΄ν΄λ³΄λ©΄,
λλΆλΆ OSμ νλ‘μΈμ€ ꡬνμ μλ‘ λ€λ₯Έ κ°μλ©λͺ¨λ¦¬μ£Όμ곡κ°(VAS)λ₯Ό κ°κΈ° λλ¬Έμ Object νμ μ μ°Έμ‘°κ° λ°μ΄ν° μΈμ€ν΄μ€λ₯Ό μ λ¬ν μ μλ€.(μ λ¬νλλΌλ, μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μμ μ λ¬λ μ°Έμ‘°κ°μ΄λ―λ‘ λ¬΄μλ―Έ) λλ¬Έμ μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ κ³΅κ° μ¬μ΄μ λ°μ΄ν°λ₯Ό μ λ¬νκΈ° μν΄μ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμκ°μ΄ μλ Byte ννλ‘ μ§λ ¬νλ κ°μ²΄ λ°μ΄ν°λ₯Ό μ λ¬ν΄ μ¬μ©νλ μͺ½μμ μμ§λ ¬ννμ¬ μ¬μ©ν μ μλ€.
Java ν΄λμ€λ κ°μ²΄ μμ κ°μ²΄κ° μ‘΄μ¬ν μ μλ€. κ°μ²΄ Aμμ λ€μ΄μλ κ°μ²΄ Bλ₯Ό μ§λ ¬ννλ©΄, κ°μ²΄ Bμ체μ λ°μ΄ν°λ₯Ό Primitive type(Byte type)μ λ°μ΄ν°λ‘ λ³ννλ€. μ§λ ¬νλ λ°μ΄ν°λ λͺ¨λ Primitive νμ μ λ°μ΄ν° λ¬Άμμ΄λ©°, νμΌ μ μ₯μ΄λ λ€νΈμν¬ μ μ‘ μ νμ±ν μ μλ μ μλ―Έν λ°μ΄ν°κ° λλ κ²μ΄λ€.
JSON, CSV λ±μ ν¬λ§·μ μ§λ ¬ν/μμ§λ ¬ν μμ νΉμ λΌμ΄λΈλ¬λ¦¬λ₯Ό λμ νλ©΄ μ½κ² κ°λ°μ΄ κ°λ₯νλ©°, κ΅¬μ‘°κ° λ³΅μ‘ν΄μ§λ©΄ μ§μ 맀νν΄μ€μΌνλ€.
μ§λ ¬ν 쑰건
Java.io.Serializable
μΈν°νμ΄μ€λ₯Ό μμ λ°μ κ°μ²΄μ Primitive νμ μ λ°μ΄ν°κΈ°λ³Έμλ£ν(Primitive Type)μ μ ν΄μ§ Byte λ³μ
κ°μ²΄μ λ©€λ²λ€ μ€ Serializable μΈν°νμ΄μ€κ° ꡬνλμ§ μμ κ²μ΄ μ‘΄μ¬νλ©΄ μλλ€.
transient
κ° μ μΈλ λ©€λ²λ μ μ‘νμ§ μλλ€.transient
μ μΈμ μ§λ ¬ν λμμμ μ μΈλ¨
μ μ¬μ©ν κΉ?
μλ° μ§λ ¬ν ννμ λ°μ΄ν° κ΅νμ μλ° μμ€ν κ°μ λ°μ΄ν° κ΅νμ μν΄ μ‘΄μ¬νλ€.
μ₯μ
μλ° μμ€ν μμμ κ°λ°μ μ΅μ ν λμ΄μλ€. 볡μ‘ν λ°μ΄ν° ꡬ쑰μ ν΄λμ€ κ°μ²΄μΌμ§λΌλ, μ§λ ¬νμ κΈ°λ³Έλ§ μ§ν€λ©΄ ν° μμ μμ΄ μ§λ ¬ν/μμ§λ ¬νκ° κ°λ₯νλ€.
λ°μ΄ν° νμ μ΄ μλμΌλ‘ λ§μΆ°μ§κΈ° λλ¬Έμ κ΄λ ¨ λΆλΆμ ν¬κ² μ κ²½μ°μ§ μμλ λλ€.
μΈμ μ΄λμ μ¬μ©ν΄μΌν κΉ?
JVMμ λ©λͺ¨λ¦¬μμλ§ μμ£Όλμ΄μλ κ°μ²΄λ₯Ό κ·Έλλ‘ μμν(Persistence)κ° νμν λ μ¬μ©λλ€.
μμ€ν μ΄ μ’ λ£λλλΌλ μμ΄μ§μ§ μλ μ₯μ μ κ°μ§λ©°, μμνλ λ°μ΄ν°μ΄κΈ° λλ¬Έμ λ€νΈμν¬λ‘ μ μ‘μ΄ κ°λ₯νλ€.
Servlet Session
Servlet κΈ°λ° WAS(ν°μΊ£, μΉλ‘μ§ λ±)λ€μ λλΆλΆ μΈμ μ μλ° μ§λ ¬νλ₯Ό μ§μνκ³ μλ€. λ¨μν μΈμ μ μλΈλ¦Ώ λ©λͺ¨λ¦¬ μμμ μ΄μ©νλ€λ©΄, μ§λ ¬νκ° νμνμ§ μμ§λ§, νμΌλ‘ μ μ₯νκ±°λ μΈμ ν΄λ¬μ€ν°λ§, DB μ μ₯νλ μ΅μ λ±μ μ ννλ©΄ μΈμ μμ²΄κ° μ§λ ¬νλμ΄ μ λ¬λλ€. μ¦, μΈμ μ νμν κ°μ²΄λ
java.io.Serializable
μΈν°νμ΄μ€λ₯Ό ꡬννλ κ²μ μΆμ²νλ€.
Cache
μλ° μμ€ν μμ νΌν¬λ¨Όμ€λ₯Ό μν΄ μΊμ(Ehcache, Redis, Memcached) λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§μ΄ μ¬μ©νλ€. μΊμν λΆλΆμ μλ° μ§λ ¬νλ λ°μ΄ν°λ₯Ό μ μ₯ν΄μ μ¬μ©λλ€. μλ° μ§λ ¬ νλ§ μ΄μ©ν΄μλ§ μΊμλ₯Ό μ μ©νμ§ μμ§λ§, κ°μ₯ κ°νΈνκΈ° λλ¬Έμ λ§μ΄ μ¬μ©νλ€.
Remote Method Inovation
RMIλ μ격 μμ€ν κ°μ λ©μΈμ§ κ΅νμ μν΄μ μ¬μ©νλ κΈ°μ μ΄λ€. λ³΄ν΅ μ격 μμ€ν κ³Ό ν΅μ μ μν΄ IPμ ν¬νΈλ₯Ό μ΄μ©ν΄ μμΌν΅μ μ νμ§λ§, RMIλ κ·Έ λΆλΆμ μΆμνν΄ μ격μ μλ μμ€ν μ λ©μλλ₯Ό λ‘컬 μμ€ν μ λ©μλμΈ κ²μ²λΌ νΈμΆν μ μλ€. μ격 μμ€ν μ λ©μλλ₯Ό νΈμΆν λ μ λ¬νλ λ©μΈμ§λ₯Ό μλμΌλ‘ μ§λ ¬ννμ¬ μ¬μ©νκ³ , μ λ¬λ°μ μ격 μμ€ν μμ ν΄λΉ λ©μΈμ§λ₯Ό μμ§λ ¬ννμ¬ μ¬μ©νλ€.
κ°μ²΄κ° μΈμ μ μ μ₯νμ§ μλ λ¨μν λ°μ΄ν° μ§ν©μ΄κ³ , 컨νΈλ‘€λ¬μμ μμ±λμ΄ λ·°μμ μλ©Ένλ λ°μ΄ν°μ μ λ¬μ²΄λΌλ©΄ κ°μ²΄ μ§λ ¬νλ κ³ λ €νμ§ μμλλλ€.
μΈμ κ΄λ¦¬λ₯Ό μ€ν 리μ§λ λ€νΈμν¬ μμμ μ΄μ©νλ€λ©΄ κ°μ²΄ μ§λ ¬νλ₯Ό ν΄μΌνλ©°, λ©λͺ¨λ¦¬μμλ§ κ΄λ¦¬νλ€λ©΄ κ°μ²΄ μ§λ ¬νλ₯Ό ν νμκ° μλ€.
μ€μ λ‘ μνμμΈ κ°λ°μ Dtoλ₯Ό μλ° μ§λ ¬νλ₯Ό νμ¬ μμ±νμλ€. μ μ μλ² - νλ‘ νΈ μλ² κ° μ§λ ¬νλ₯Ό ν΅ν΄ λ³λ μμ μμ΄ λ°λ‘ λ°μ΄ν° νμ μ λ§μΆ°μ£Όλ μ©λλ‘ μ¬μ©νλ€.
μμ
serialVersionUID
Java μ§λ ¬ν λμ κ°μ²΄λ λμΌν serialVersionUID
λ₯Ό κ°μ§κ³ μμ΄μΌνλ€. νμ§λ§, μ§μ μ μΈνμ§ μλλΌλ, λ΄λΆμ μΌλ‘ ν΄λμ€μ ꡬ쑰 μ 보λ₯Ό μ΄μ©ν΄ μλμΌλ‘ μμ±λ ν΄μ¬κ°μ΄ ν λΉλλ€. κ·Έλ¬λ―λ‘ ν΄λμ€μ λ©€λ² λ³μκ° μΆκ°λκ±°λ μμ λλ©΄ serialVersionUID
κ°μ΄ λ¬λΌμ§κ² λλλ°, κΈ°μ‘΄ serialVersionUID
κ° λ³κ²½λλ©΄ java.io.InvalidCalssException
μ΄ λ°μνκ²λλ€.
μ¦, μμ κ°μ΄ μ§μ κ΄λ¦¬λ₯Ό ν΄μΌ ν΄λμ€κ° λ³κ²½λμ΄λ λ¬Έμ μμ΄ μ§λ ¬ν/μμ§λ ¬νκ° κ°λ₯νλ€.
μ΄λ, serialVersionUID
κ° κ°λ€κ³ λ¬Έμ μμ΄ μ§λ ¬ν/μμ§λ ¬νλ₯Ό ν μ μλ κ²μ μλλ€. ν΄λμ€μ λ©€λ² λ³μ νμ
μ΄ κ°μμΌνλ©°, λ©€λ² λ³μλ₯Ό μ κ±°νκ±°λ λ³μλͺ
μ λ°κΎΈλ©΄ μμΈλ λ°μνμ§ μμ§λ§ λ°μ΄ν°λ λλ½λλ€.
μ§λ ¬ν μ¬μ©μ μ£Όμμ¬ν
νΉλ³ν λ¬Έμ κ° μμΌλ©΄
serialVersionUID
κ°μ μ§μ κ΄λ¦¬νλ€.μΈλΆ(DB, μΊμμλ², NoSQL μλ²)μ μ₯κΈ°κ° μ μ₯λ μ 보λ μλ° μ§λ ¬νμ¬μ©μ μ§μν΄μΌνλ€. μμ§λ ¬ν λμ ν΄λμ€κ° μΈμ λ³κ²½μ΄ μΌμ΄λ μ§ λͺ¨λ₯΄λ νκ²½μμ κΈ΄ μκ°λμ μΈλΆμ μ‘΄μ¬νλ μ§λ ¬νλ λ°μ΄ν°λ Garbageκ° λ κ°λ₯μ±μ΄ λλ€.
μμ£Ό λ³κ²½λλ λ°μ΄ν°λ₯Ό μλ° μ§λ ¬νλ₯Ό μ¬μ©νμ§ λ§μ
κ°λ°μκ° μ§μ 컨νΈλ‘€ κ°λ₯ν ν΄λμ€μ κ°μ²΄κ° μλ κ²½μ°μλ μ§λ ¬νλ₯Ό μ§μν΄μΌνλ€. κ°λ°μκ° μ§μ 컨νΈλ‘€νκΈ° νλ κ°μ²΄λ λΌμ΄λΈλ¬λ¦¬, νλ μ μν¬μμ μ 곡νλ ν΄λμ€ κ°μ²΄λ₯Ό λ§νλ€. μ΄λ¬ν κ°μ²΄κ° μ§μ
serialVersionUID
λ₯Ό κ°κ³ μκΈ°λν΄, κ°λ°μ νΈμμ μ§λ ¬ν νμ¬ DBλλ μΊμμ λ°λ‘ μ μ₯νλ€λ©΄ κ·Έλ‘ μΈν΄ λ§μ λ¬Έμ κ° μΌκΈ°λλ€.νλ μμν¬/λΌμ΄λΈλ¬λ¦¬ λ²μ μ μ νλ©΄μ
serialVersionUID
λ³κ²½
μ¦, λ³κ²½μ μ·¨μ½νλ―λ‘ μλ° μ§λ ¬ν μ¬μ©μμλ μμ£Ό λ³κ²½λλ ν΄λμ€μ κ°μ²΄λ μ¬μ© μνλ κ²μ΄ μ’λ€. μμ§λ ¬νκ° λμ§ μμ λ μμΈμ²λ¦¬λ κΈ°λ³Έμ μΌλ‘ νμνλ€.
μ©λ λ¬Έμ
μλ° μ§λ ¬νμ κΈ°λ³Έμ μΌλ‘ νμ μ λν μ 보 λ± ν΄λμ€μ λ©νμ 보λ κ°μ§κ³ μμ΄ μλμ μΌλ‘ λ€λ₯Έ ν¬λ§·μ λΉν΄ μ©λμ λν λ¬Έμ κ° μλ€. νΉν ν΄λμ€μ κ΅¬μ‘°κ° κ±°λν΄μ§ μλ‘ μ©λμ°¨μ΄κ° λ°μνκ² λλ€.
μ°νν νμ λ€ κΈ°μ λΈλ‘κ·Έ μμ μ½λ
κ°λ¨ν λ°μ΄ν°μ΄μ§λ§ JSONμΌλ‘ μ§λ ¬ν νμλ λ³΄λ€ λλ°° μ΄μμ μ©λ ν¬κΈ°κ° μ°¨μ΄λλ κ²μ λ³Ό μ μλ€. μ§λ ¬νλ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬ μλ²(Redis, Memcached)μ μ μ₯νλ ννλ₯Ό κ°μ§ μμ€ν μμ λμ± λλλ¬μ§λ€. λ©λͺ¨λ¦¬ μλ² νΉμ±μ λ©λͺ¨λ¦¬ μ©λμ΄ ν¬μ§ μκΈ° λλ¬Έμ ν΅μ¬λ§ μμ½ν΄ μ¬μ©νλ ννκ° ν¨μ¨μ μ΄λ€.
μ€νλ§ νλ μμν¬μμ κΈ°λ³Έμ μΌλ‘ μ§μνλ μΊμ λͺ¨λ(Spring Data Redis, Spring Session) μ€ μΈλΆ μμ€ν μ μ μ₯νλ ννμμ κΈ°λ³Έμ μΌλ‘ μλ° μ§λ ¬ν ννλ‘ μ 곡λκΈ° λλ¬Έμ μ΄λΆλΆμ κΌ μ£Όμν΄μΌνλ€.
νΈνμ±
μλ° μ§λ ¬νλ₯Ό μ΄μ©ν΄ μΈλΆ λ°μ΄ν°λ₯Ό μ μ₯νλ©΄, μλ°μμλ§ μ½μ μ μλ μ μ΄ κ°μ₯ μμ¬μ΄ μ μ΄λ€. JSON ννλ‘ μ μ₯λμ΄μλ€λ©΄, λ€λ₯Έ μΈμ΄μμλ μ‘°μμ΄ κ°λ₯νλ€.
μ°Έκ³
Last updated
Was this helpful?