์ผ๊ตญ์ง๋ฅ ๊ฒ์์ ์ฅ์์ ๋ฅ๋ ฅ์น ํ
์ด๋ธ์ด ํฝ๋๋ค.
์ด๊ฑธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๋ฉด ๋ญ๋ก ํ๋๊ฒ ์ข์๊น์?
ํ์์
ํคํธ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ํธ์งํ๊ณ ์ธ์ด๋ธ๋ ํ์ผ์ ์ด๋ํ๊ธฐ๋ ํธํด์ผ ํฉ๋๋ค.
SQLite, JSON, XML ์ ๋๋ฉด ์ ๋นํ๊ฐ์?
๋ด๋ถ ๋ฐฐ์ด๋ง์ผ๋ก๋ ๋ฒ๊ฑฐ๋กญ์ฃ ?
์๋ ์ฑ์งํผํฐ์ธ๋ฐ ๋ค๋ฅธ ๋ถ๋ค ์๊ฒฌ์ ์ด๋ค๊ฐ์?
์ฑ์งํผํฐ
์บ๋ฆญํฐ๊ฐ ์์ฒ ๊ฐ ์ด์ ๋ฑ์ฅํ๋ ๊ฒ์์์ ๊ฐ ์บ๋ฆญํฐ์ ๋ฅ๋ ฅ์น๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ์ด ์ค์ํฉ๋๋ค. ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ธฐ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค:
---
1. ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ
Key-Value Store: ์บ๋ฆญํฐ ID๋ฅผ ํค๋ก ์ฌ์ฉํ๊ณ , ๋ฅ๋ ฅ์น๋ฅผ ๊ฐ์ผ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ.
์: Dictionary, HashMap ๋๋ std::unordered_map(C++).
๊ฐ์ฒด ๊ธฐ๋ฐ ๊ด๋ฆฌ: ์บ๋ฆญํฐ๋ง๋ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์์ฑ์ ๊ด๋ฆฌ.
์: C++์ ํด๋์ค, C#์ ํด๋์ค/๊ตฌ์กฐ์ฒด, Python์ ๊ฐ์ฒด.
2. ํ์ผ ์ ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์บ๋ฆญํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ ์คํ ์ค์๋ง ์ ์งํ์ง ์๊ณ ์ ์ฅํ๊ฑฐ๋ ๋ก๋ํด์ผ ํ๋ค๋ฉด:
JSON: ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ , ๋๋ฒ๊น
์ ์ ๋ฆฌ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ: Json.NET (C#), nlohmann/json (C++), Gson (Java)
Binary Format (์ด์ง ํฌ๋งท): ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ ๋ฆฌ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ: Protocol Buffers (protobuf), MessagePack, FlatBuffers
Database: ์บ๋ฆญํฐ ๋ฐ์ดํฐ๊ฐ ๋งค์ฐ ํฌ๊ณ , ๋์ ์ ๊ทผ์ด ๋น๋ฒํ ๊ฒฝ์ฐ.
SQLite, Redis, MongoDB
---
3. ์ธ์ด๋ณ ์ถ์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
C++
nlohmann/json: JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ์ ํธ๋ฆฌ.
Boost.Serialization: ๋ฐ์ด๋๋ฆฌ ๋ฐ ํ
์คํธ ์ง๋ ฌํ ์ง์.
SQLite: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์ฉ.
C#
Json.NET (Newtonsoft.Json): JSON ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ/์ญ์ง๋ ฌํ.
System.Text.Json: ๊ฐ๋ณ๊ณ ๋น ๋ฆ.
Entity Framework Core: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋.
Python
pickle: ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ.
json: ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ด๋ฆฌ.
sqlite3: ๋ด์ฅ SQLite ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
---
4. ์ถ์ฒ ์ํฌํ๋ก์ฐ
1. ๋ฐ์ดํฐ ๋ก๋/์ ์ฅ:
๊ฒ์ ์์ ์ JSON ๋๋ ์ด์ง ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋.
ํ์ ์ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
2. ๋ฉ๋ชจ๋ฆฌ ์ ๊ด๋ฆฌ:
์คํ ์ค์๋ Dictionary ๋๋ ํด์ ๋งต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ๊ด๋ฆฌ.
๋ฐ์ดํฐ ์ ๊ทผ์ด ๋น๋ฒํ๋ค๋ฉด ์บ์ฑ ์ ๋ต ์ฌ์ฉ.
3. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ต์ ํ:
Redis์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋น ๋ฅธ ์ก์ธ์ค ๊ตฌํ.
---
์์
C#
public class CharacterStats
{
ย ย ย public int ID { get; set; }
ย ย ย public string Name { get; set; }
ย ย ย public int Attack { get; set; }
ย ย ย public int Defense { get; set; }
ย ย ย // ๊ธฐํ ๋ฅ๋ ฅ์น
}
// Dictionary๋ฅผ ์ฌ์ฉํ ๊ด๋ฆฌ
Dictionary<int, CharacterStats> characters = new Dictionary<int, CharacterStats>();
// JSON ํ์ผ ๋ก๋ ์์
string json = File.ReadAllText("characters.json");
characters = JsonConvert.Deserialize<Dictionary<int, CharacterStats>>(json);
C++
#include <unordered_map>
#include <string>
#include <nlohmann/json.hpp>
struct CharacterStats {
ย ย ย int id;
ย ย ย std::string name;
ย ย ย int attack;
ย ย ย int defense;
ย ย ย // ๊ธฐํ ๋ฅ๋ ฅ์น
};
std::unordered_map<int, CharacterStats> characters;
// JSON ๋ก๋ ์์
std::ifstream file("characters.json");
nlohmann::json jsonData;
file >> jsonData;
for (auto& item : jsonData.items()) {
ย ย ย CharacterStats stats = item.value().get<CharacterStats>();
ย ย ย characters[stats.id] = stats;
}
---
๊ฒฐ๋ก
์๊ท๋ชจ ํ๋ก์ ํธ: JSON + Dictionary ๊ตฌ์กฐ.
๋๊ท๋ชจ ํ๋ก์ ํธ: Protocol Buffers ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ์ SQLite/Redis๋ฅผ ํ์ฉ.
์ค์๊ฐ ์
๋ฐ์ดํธ: Redis๋ ๋ฉ๋ชจ๋ฆฌ ์บ์ ์ฌ์ฉ.
ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ์ ํํ์ธ์!
์บ๋ฆญํฐ๊ฐ ์์ฒ ๊ฐ ์ด์ ๋ฑ์ฅํ๋ ๊ฒ์์์ ๊ฐ ์บ๋ฆญํฐ์ ๋ฅ๋ ฅ์น๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ์ด ์ค์ํฉ๋๋ค. ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ธฐ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค:
---
1. ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ
Key-Value Store: ์บ๋ฆญํฐ ID๋ฅผ ํค๋ก ์ฌ์ฉํ๊ณ , ๋ฅ๋ ฅ์น๋ฅผ ๊ฐ์ผ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ.
์: Dictionary, HashMap ๋๋ std::unordered_map(C++).
๊ฐ์ฒด ๊ธฐ๋ฐ ๊ด๋ฆฌ: ์บ๋ฆญํฐ๋ง๋ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์์ฑ์ ๊ด๋ฆฌ.
์: C++์ ํด๋์ค, C#์ ํด๋์ค/๊ตฌ์กฐ์ฒด, Python์ ๊ฐ์ฒด.
2. ํ์ผ ์ ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์บ๋ฆญํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ ์คํ ์ค์๋ง ์ ์งํ์ง ์๊ณ ์ ์ฅํ๊ฑฐ๋ ๋ก๋ํด์ผ ํ๋ค๋ฉด:
JSON: ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ , ๋๋ฒ๊น
์ ์ ๋ฆฌ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ: Json.NET (C#), nlohmann/json (C++), Gson (Java)
Binary Format (์ด์ง ํฌ๋งท): ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ ๋ฆฌ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ: Protocol Buffers (protobuf), MessagePack, FlatBuffers
Database: ์บ๋ฆญํฐ ๋ฐ์ดํฐ๊ฐ ๋งค์ฐ ํฌ๊ณ , ๋์ ์ ๊ทผ์ด ๋น๋ฒํ ๊ฒฝ์ฐ.
SQLite, Redis, MongoDB
---
3. ์ธ์ด๋ณ ์ถ์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
C++
nlohmann/json: JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ์ ํธ๋ฆฌ.
Boost.Serialization: ๋ฐ์ด๋๋ฆฌ ๋ฐ ํ
์คํธ ์ง๋ ฌํ ์ง์.
SQLite: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์ฉ.
C#
Json.NET (Newtonsoft.Json): JSON ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ/์ญ์ง๋ ฌํ.
System.Text.Json: ๊ฐ๋ณ๊ณ ๋น ๋ฆ.
Entity Framework Core: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋.
Python
pickle: ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ.
json: ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ด๋ฆฌ.
sqlite3: ๋ด์ฅ SQLite ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
---
4. ์ถ์ฒ ์ํฌํ๋ก์ฐ
1. ๋ฐ์ดํฐ ๋ก๋/์ ์ฅ:
๊ฒ์ ์์ ์ JSON ๋๋ ์ด์ง ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋.
ํ์ ์ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
2. ๋ฉ๋ชจ๋ฆฌ ์ ๊ด๋ฆฌ:
์คํ ์ค์๋ Dictionary ๋๋ ํด์ ๋งต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ๊ด๋ฆฌ.
๋ฐ์ดํฐ ์ ๊ทผ์ด ๋น๋ฒํ๋ค๋ฉด ์บ์ฑ ์ ๋ต ์ฌ์ฉ.
3. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ต์ ํ:
Redis์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋น ๋ฅธ ์ก์ธ์ค ๊ตฌํ.
---
์์
C#
public class CharacterStats
{
ย ย ย public int ID { get; set; }
ย ย ย public string Name { get; set; }
ย ย ย public int Attack { get; set; }
ย ย ย public int Defense { get; set; }
ย ย ย // ๊ธฐํ ๋ฅ๋ ฅ์น
}
// Dictionary๋ฅผ ์ฌ์ฉํ ๊ด๋ฆฌ
Dictionary<int, CharacterStats> characters = new Dictionary<int, CharacterStats>();
// JSON ํ์ผ ๋ก๋ ์์
string json = File.ReadAllText("characters.json");
characters = JsonConvert.Deserialize<Dictionary<int, CharacterStats>>(json);
C++
#include <unordered_map>
#include <string>
#include <nlohmann/json.hpp>
struct CharacterStats {
ย ย ย int id;
ย ย ย std::string name;
ย ย ย int attack;
ย ย ย int defense;
ย ย ย // ๊ธฐํ ๋ฅ๋ ฅ์น
};
std::unordered_map<int, CharacterStats> characters;
// JSON ๋ก๋ ์์
std::ifstream file("characters.json");
nlohmann::json jsonData;
file >> jsonData;
for (auto& item : jsonData.items()) {
ย ย ย CharacterStats stats = item.value().get<CharacterStats>();
ย ย ย characters[stats.id] = stats;
}
---
๊ฒฐ๋ก
์๊ท๋ชจ ํ๋ก์ ํธ: JSON + Dictionary ๊ตฌ์กฐ.
๋๊ท๋ชจ ํ๋ก์ ํธ: Protocol Buffers ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ์ SQLite/Redis๋ฅผ ํ์ฉ.
์ค์๊ฐ ์
๋ฐ์ดํธ: Redis๋ ๋ฉ๋ชจ๋ฆฌ ์บ์ ์ฌ์ฉ.
ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ์ ํํ์ธ์!
---
"๋๋์ ์ง์ ๋ ๋๋ฉฐ ์ฃผ์ธ์ ์ํ๋ค" - ๋ฌ์์ ์๋ด
"๋๋์ ์ง์ ๋ ๋๋ฉฐ ์ฃผ์ธ์ ์ํ๋ค" - ๋ฌ์์ ์๋ด
์ง๋ฌธ๊ธ ์๋์์์
๋ค๋ฅธ ๋ถ๋ค ์๊ฒฌ์ข // "๋๋์ด ์ง์ ๋ ๋๋ฉฐ ์ฃผ์ธ์ ์ํ๋ค" - ๋ฌ์์ ์๋ด