Tags
- greedy
- LV2
- CodingTest
- Java
- ๊ทธ๋ํ ํ์
- ์ ์๋ก
- queue
- PGM
- ๊ทธ๋ํ ์ด๋ก
- Dynamic Programming
- ๊ต์ฌ
- dfs
- BOJ
- ์๋ฎฌ๋ ์ด์
- Study
- ๊น์ด ์ฐ์ ํ์
- Brute Force Algorithm
- ์ํ
- ๋๋น ์ฐ์ ํ์
- DP
- stack
- ๋ฐฑํธ๋ํน
- ์๋ฃ๊ตฌ์กฐ
- ๋ฌธ์์ด
- Python
- BFS
- ๊ตฌํ
- sort
- ์ ๋ ฌ
- SpringBoot
Archives
๊ธฐ๋ก๋ฐฉ
์๋ฐ ๊ฐ์ฒด ์ง๋ ฌํ (serialization) ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ท ์ง๋ ฌํ(serialization) ๋?
๐ก serialization : JVM ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ํํ๋ก ๋ณํํ๋ ๊ธฐ์
๐ก deserialization : ์ง๋ ฌํ๋ ๋ฐ์ดํธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด์ JVM์ผ๋ก ์์ฃผ์ํค๋ ๊ธฐ์
- ์๋ฐ ์์คํ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์ ์๋ฐ ์์คํ ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํธํํ๋ก ๋ณํํ๋ ๊ธฐ์ ๊ณผ ๋ฐ์ดํธ๋ก ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ธฐ์ ์ ์์ธ๋ฌ์ ์ง๋ ฌํ๋ก ํํ
- ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ํ(Persistence) : ์์คํ ์ด ์ข ๋ฃ๋๋ ๋ฐ์ดํฐ๊ฐ ๋จ์์๋ DB ๋ฑ์ ์ ์ฅ
- ๊ฐ์ฒด ๋ฐ์ดํฐ ์ ์ก : ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ์ ์กํด์ ์ธ๋ถ ์์คํ ์์ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๐ท ์๋ฐ ์ง๋ ฌํ ์ฌ์ฉ ์ด์
๐ธ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ง๋ ฌํ ์ข ๋ฅ
- ๋ฌธ์์ด ํํ์ ์ง๋ ฌํ ๋ฐฉ๋ฒ (API๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ์ฌ ์ถ์ถ)
- CSV : ํํํ์ ๋ค๋์ ๋ฐ์ดํฐ ์ง๋ ฌํ ์ ์ฌ์ฉ
- XML, JSON : ๊ตฌ์กฐ์ ์ธ ํํ์ ๋ฐ์ดํฐ
- ์ด์ง ์ง๋ ฌํ ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ ๋ณํ ๋ฐ ์ ์ ์๋์ ์ต์ ํํ์ฌ ๋ณ๋์ ์ง๋ ฌํ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ตฌ์กฐ
- ์ง๋ ฌํ ๋ฟ๋ง ์๋๋ผ ์ ์ก ๋ฐฉ๋ฒ์ ๋ํ ๋ถ๋ถ๋ ์ด์ผ๊ธฐ ํจ
- Protocol Buffer
- ๊ตฌ๊ธ์์ ์ ์ํ ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ ์ง๋ ฌํ ํ๋ซํผ (ํ์ผ๋ช .proto)
- ํ๋กํ ์ฝ ๋ฒํผ ์ปดํ์ผ๋ฌ ํ์
- Apache Avro
- Protocol Buffer
๐ธ ๊ทธ๋ ๋ค๋ฉด ์๋ฐ ์ง๋ ฌํ๋ ์ ์ฌ์ฉํ๋๊ฐ
" ์๋ฐ ์ง๋ ฌํ ํํ์ ๋ฐ์ดํฐ ๊ตํ์ ์๋ฐ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํด์ ์กด์ฌํ๋ค. "
- ์๋ฐ ์ง๋ ฌํ๋ ์๋ฐ ์์คํ
์์ ๊ฐ๋ฐ์ ์ต์ ํ ๋์ด ์์ด์
๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํด๋์ค ๊ฐ์ฒด๋ ์ง๋ ฌํ ์กฐ๊ฑด๋ง ์งํค๋ฉด ํฐ ์์ ์์ด ๋ฐ๋ก ์ง๋ ฌํ ๊ฐ๋ฅ - cvs, json์ ์ด์ฉํด๋ ๋๊ธด ํจ (๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ ์ฌ์ฉ)
๐ท ์๋ฐ ์ง๋ ฌํ ์ฌ์ฉ ๋ฐฉ๋ฒ
๐ธ ์ง๋ ฌํ ์กฐ๊ฑด
- class์ Serializable ์ธํฐํ์ด์ค๋ฅผ ์์ํด์ผ ํจ
- class์ ๋ชจ๋ ๋ฉค๋ฒ๊ฐ ์ง๋ ฌํ ๊ฐ๋ฅํด์ผ ํจ
- transient ํค์๋ ๋ถ์ด๋ฉด ์ง๋ ฌํ ์ ์ธ (๊ฐ์ธ ์ ๋ณด ๋ฑ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ)
๐ธ ์ญ์ง๋ ฌํ ์กฐ๊ฑด
- ์ง๋ ฌํ ๋์์ด ๋ ๊ฐ์ฒด์ ํด๋์ค๊ฐ ํด๋์ค ํจ์ค์ ์กด์ฌํด์ผ ํ๋ฉฐ import ๋์ด ์์ด์ผ ํจ
- ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ๋ฅผ ์งํํ๋ ์์คํ ์ด ์๋ก ๋ค๋ฅผ ์ ์๋ค๋ ๊ฒ์ ๊ณ ๋ ค
- ์๋ฐ ์ง๋ ฌํ ๊ฐ์ฒด๋ ๋์ผํ serialVersionUID๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
๐ก serialVersionUID : ๊ฐ์ฒด ์ํ์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ
- ์ ๋ ฅํ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด ์ฃผ์ง๋ง, ์ง์ ์ค์ ๊ถ์ฅ
- ๋ฉค๋ฒ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ปดํ์ผ ์๋ง๋ค UID ๋ณ๊ฒฝ
- ์ง์ ์ ๋ ฅํด ๋์ผ๋ฉด ๋ณ๊ฒฝ๋์ง ์์
- ๋ฉค๋ฒ ๋ณ๊ฒฝ ํ UID๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ์ญ์ง๋ ฌํ ์ ๋ฉค๋ฒ๊ฐ ๋ถ์ผ์นํ๋ฉด InvaildClassException
๐ธ ์ฌ์ฉ ๋ฐฉ๋ฒ
class Person implements Serializable{
private static final long serialVersionUID = -134234123298291L;
String name;
String job;
public Person(String name, String job) {
this.name = name;
this.job = job;
}
}
- class์ Serializable ์ธํฐํ์ด์ค๋ฅผ ์์
public class Test {
public static void main(String[]args) throws ClassNotFoundException {
Person p1 = new Person("๊ฐ์๋ฏผ", "์ ์
์ฌ์");
Person p2 = new Person("๊ฐ์์ด", "๋ํ์ด์ฌ");
// ์ง๋ ฌํ
try(FileOutputStream fos = new FileOutputStream("serial.out");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(p1);
oos.writeObject(p2);
} catch(IOException e) {
e.printStackTrace();
}
// ์ญ์ง๋ ฌํ
try(FileInputStream fis = new FileInputStream("serial.out");
ObjectInputStream ois = new ObjectInputStream(fis)) {
Person p3 = (Person)ois.readObject();
Person p4 = (Person)ois.readObject();
} catch(IOException e) {
e.printStackTrace();
}
}
}
- ObjectOutputStream.writeObject(๊ฐ์ฒด ๋ช ) : ๊ฐ์ฒด ๊ฐ์ ํ์ผ์ ์ - ์ง๋ ฌํ
- ObjectInputStream.readObject(๊ฐ์ฒด ๋ช ) : ๋ฐ์ดํธ ๋ฐ์ดํฐ ๊ฐ์ ์ฝ์ด๋ค์ - ์ญ์ง๋ ฌํ
- IOException๊ณผ ClassNotFoundException ์ฒ๋ฆฌ ํ์
๐ก ์คํธ๋ฆผ ์ฒด์ด๋ : ๋ ธ๋ ์คํธ๋ฆผ, ๋ณด์กฐ ์คํธ๋ฆผ์ ์ฐ๊ณํด์ ์ฌ์ฉ (ex. File I/O์ ObjectOutputStream)
๐ท ๊ทธ ์ธ
๐ธ ์๋ฐ์ ๋ ๋ค๋ฅธ ์ง๋ ฌํ ๋ฐฉ๋ฒ
- Externalizable ์ธํฐํ์ด์ค ์์
- writeExternal(), readExternal() ๋ฉ์๋ ์ง์ ๊ตฌํ ํ์
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ์ฒด์ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๋ฅผ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉ
๐ธ ์ง๋ ฌํ๋ ์ด๋์ ์ฌ์ฉ๋๋๊ฐ
- ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ํ ํ๊ณ , ์ ์กํ ์ ์๋ ํน์ฑ์ผ๋ก ์ฌ๋ฌ ๊ณณ์ ์ด์ฉ
- ์๋ธ๋ฆฟ ์ธ์
(Servlet Session)
- ์ธ์ ์ ์๋ธ๋ฆฟ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด์ฉํ๋ค๋ฉด ์ง๋ ฌํ๋ฅผ ํ์๋ก ํ์ง ์์ง๋ง, ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ธ์ ํด๋ฌ์คํฐ๋ง, DB๋ฅผ ์ ์ฅํ๋ ์ต์ ๋ฑ์ ์ ํํ๊ฒ ๋๋ฉด ์ธ์ ์์ฒด๊ฐ ์ง๋ ฌํ๊ฐ ๋์ด ์ ์ฅ๋์ด ์ ๋ฌ
- ๊ทธ๋์ ์ธ์ ์ ํ์ํ ๊ฐ์ฒด๋ ์ง๋ ฌํ ์กฐ๊ฑด์ ๋ง์ถ๋ ๊ฒ์ ์ถ์ฒ
- ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ WAS(ํฐ์บฃ, ์น๋ก์ง ๋ฑ)๋ค์ ๋๋ถ๋ถ ์ธ์ ์ ์๋ฐ ์ง๋ ฌํ ์ง์
- ์บ์ (Cache)
- ์๋ฐ์์ ํผํฌ๋จผ์ค๋ฅผ ์ํด Ehcache, Redis, Memcached ๋ฑ ์บ์๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์คํ
์ ๋ง์ด ์ฌ์ฉ
- ๋์ผํ DB ์์ฒญ ์ ์บ์์ ์ ์ฅํด ๋์๋ค๊ฐ ์๋ต
- ์บ์ ํ ๋ถ๋ถ์ ์๋ฐ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ฌ์ฉ
- ์๋ฐ์์ ํผํฌ๋จผ์ค๋ฅผ ์ํด Ehcache, Redis, Memcached ๋ฑ ์บ์๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์คํ
์ ๋ง์ด ์ฌ์ฉ
- ์๋ฐ RMI(Remote Method Invocation)
- ์๊ฒฉ ์์คํ ๊ฐ์ ๋ฉ์์ง ๊ตํ์ ์ํด์ ์ฌ์ฉํ๋ ์๋ฐ์์ ์ง์ํ๋ ๊ธฐ์
- ๋ณดํต์ ์๊ฒฉ์ ์์คํ ๊ณผ์ ํต์ ์ ์ํด์ IP์ ํฌํธ๋ฅผ ์ด์ฉํด์ ์์ผํต์ ์ ํด์ผ ํ์ง๋ง RMI๋ ๊ทธ ๋ถ๋ถ์ ์ถ์ํํ์ฌ ์๊ฒฉ์ ์๋ ์์คํ ์ ๋ฉ์๋๋ฅผ ๋ก์ปฌ ์์คํ ์ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ํธ์ถ
- ์๊ฒฉ์ ์์คํ
์ ๋ฉ์๋๋ฅผ ํธ์ถ ์์ ์ ๋ฌํ๋ ๋ฉ์์ง(๋ณดํต ๊ฐ์ฒด)๋ฅผ ์๋์ผ๋ก ์ง๋ ฌํ ์์ผ ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ฌ๋ฐ์ ์๊ฒฉ ์์คํ ์์๋ ๋ฉ์์ง๋ฅผ ์ญ์ง๋ ฌํ๋ฅผ ํตํด ๋ณํํ์ฌ ์ฌ์ฉ - ์ต๊ทผ์๋ ๋ง์ด ์ฌ์ฉ๋์ง ์์ง๋ง ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ค๋ช ํ ๋ ๋น ์ง์ง ์๊ณ ์ด์ผ๊ธฐ ๋๋ ๊ธฐ์
- ์๋ธ๋ฆฟ ์ธ์
(Servlet Session)
๐ธ ์ค๋ฌด์์์ ์๋ฐ ์ง๋ ฌํ ์ฌ์ฉ์ ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ
- ์ญ์ง๋ ฌํ์ ํด๋์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ ๋ฌธ์
- ํด๋์ค ๋ฉค๋ฒ๊ฐ ๋ณ๊ฒฝ๋์ SUID(serialVersionUID)๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด java.io.InvaildClassException ๋ฐ์
- SUID๊ฐ ์ ์ธ๋์ด ์์ง ์์ผ๋ฉด ํด๋์ค์ ๊ธฐ๋ณธ ํด์ฌ๊ฐ ์ฌ์ฉ
- SUID๊ฐ ๊ฐ์๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ ์์
- ํด๋์ค ๋ฉค๋ฒ๊ฐ ๋ณ๊ฒฝ๋์ SUID(serialVersionUID)๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด java.io.InvaildClassException ๋ฐ์
- ์ฉ๋ ๋ฌธ์
- ํด๋์ค ์์ ํด๋์ค ๋ ๋ฆฌ์คํธ ๋ฑ ์ด๋ฐ ํํ์ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ ํ๊ฒ ๋๋ฉด ๋ด๋ถ์ ์ฐธ์กฐํ๊ณ ์๋ ๋ชจ๋ ํด๋์ค์ ๋ํ ๋ฉํ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฉ๋์ด ๋น๋ํด์ง
- JSON ๊ฐ์ ์ต์์ ๋ฉํ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด ํ ์คํธ๋ก ๋ ํฌ๋งท๋ณด๋ค ๊ฐ์ ๋ฐ์ดํฐ์์ ์ต์ 2๋ฐฐ ์ต๋ 10๋ฐฐ ์ด์์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ์ ์์
- ํธํ์ฑ ๋ฌธ์
- ์ค์ง ์๋ฐ๋ก๋ง ์ฒ๋ฆฌ๊ฐ๋ฅํด์ ๋ถํธ
- ์ค์ง ์๋ฐ๋ก๋ง ์ฒ๋ฆฌ๊ฐ๋ฅํด์ ๋ถํธ
1. ์ธ๋ถ ์ ์ฅ์๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ ์งง์ ๋ง๋ฃ์๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ฌ์ฉ์ ์ง์
2. ์ญ์ง๋ ฌํ์ ๋ฐ๋์ ์์ธ๊ฐ ์๊ธด๋ค๋ ๊ฒ์ ์๊ฐํ๊ณ ๊ฐ๋ฐ
3. ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋น์ฆ๋์ค์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ ์ง๋ ฌํ์ ์ฌ์ฉ X
4. ๊ธด ๋ง๋ฃ ์๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๋ JSON ๋ฑ ๋ค๋ฅธ ํฌ๋งท์ ์ฌ์ฉํ์ฌ ์ ์ฅ
๐ท Reference
- ์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ "์๋ฐ ์ง๋ ฌํ, ๊ทธ๊ฒ์ด ์๊ณ ์ถ๋ค. ํ์ด๋ณด๊ธฐํธ"
- ์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ "์๋ฐ ์ง๋ ฌํ, ๊ทธ๊ฒ์ด ์๊ณ ์ถ๋ค. ์ค๋ฌดํธ"
- ์๋ฐ ์ง๋ ฌํ(Serialization)์ ๋ํ ์์ฌ์ด ์ค๋ช
- Java์ ์ง๋ ฌํ(Serialize)๋?
- Doit! ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ
728x90
'CS > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java Map์ computeIfAbsent(), computeIfPresent() ๋ฉ์๋ (0) | 2024.05.19 |
---|