| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- ์ฌํ
- ์ ค๋ค์์ ์ค
- docker
- Linux
- Front-end
- ์ทจ๋ฏธ
- ์ผ์์์จ๊ฒฐ
- JavaScript
- window11
- ์ธ๋ถ
- WebView
- poe2
- window10
- window
- ๊ฒ์
- guide
- ์คํ์ํฐ
- JS
- ๊ณต๋ต
- ๋ฑํ์ด์ด์๋ฐ์ด๋ฒ
- ๋ค์ด๋น
- intellij
- ๊ฐ๋ฐํด
- ubuntu
- ์๋๋ก์ด๋
- ์๋ ๋ง
- ์ค์ฟ ๋ฒ๋ค์ด๋น
- PostgreSQL
- ์ด๋๋ฒค์ค
- ์จํ์ค
- Today
- Total
Rianshin
[๊ฐ๋ฐ์ ์คํ] ๋์ฉ๋ CSV ์ฒ๋ฆฌ, ์๋ฐ๊ฐ ๋ฌด์กฐ๊ฑด ๋ ๋น ๋ฅผ๊น? (๋ฉ๋ชจ๋ฆฌ vs ์๋ ์ง์ค ๊ฒ์) ๋ณธ๋ฌธ
[๊ฐ๋ฐ์ ์คํ] ๋์ฉ๋ CSV ์ฒ๋ฆฌ, ์๋ฐ๊ฐ ๋ฌด์กฐ๊ฑด ๋ ๋น ๋ฅผ๊น? (๋ฉ๋ชจ๋ฆฌ vs ์๋ ์ง์ค ๊ฒ์)
RianShin 2026. 2. 10. 13:44๐ ์๋ก : "์๋ฐ๋ ๋ฌด๊ฒ์ง๋ง ๋น ๋ฅด๊ณ , ํ์ด์ฌ์ ๊ฐ๋ณ์ง๋ง ๋๋ฆฌ๋ค?"
๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ํํ ํต์ฉ๋๋ ๋ช ์ ๊ฐ ์์ต๋๋ค.
"CPU ์ฐ์ฐ์ ์๋ฐ(Java)๊ฐ ์๋์ ์ด๊ณ , ํ์ด์ฌ(Python)์ ๋๋ฆฌ๋ค."
๋ง๋ ๋ง์ ๋๋ค. ํ์ง๋ง ์ต๊ทผ ํ๋ก์ ํธ์์ ๋์ฉ๋ CSV ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด์ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค. "๋จ์ ์ฐ์ฐ ์๋๊ฐ ์๋๋ผ, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋(Load) ํจ์จ์ฑ์ ์ด๋จ๊น?"
ํนํ ๋ฐ์ดํฐ ๋ถ์์ด๋ AI ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ ๊ธฐ๊ฐ๋ฐ์ดํธ(GB) ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ผ ํ ๋, ์์ธ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค. ์ค๋์ ์๋ฐ์ ํ์ด์ฌ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ ๊ฒฐ์ ์ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํฐ ๋ถ์์๋ ํ์ด์ฌ(Pandas)์ ์ฐ๋ผ๊ณ ํ๋์ง ๊ธฐ์ ์ ์ผ๋ก ํํค์ณ ๋ด ๋๋ค.
1. ๐ ์คํ ์ํฉ: 100๋ง ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค๋ฉด?
๊ฐ์ ํด ๋ด ์๋ค. ์ ์(Integer)์ ๋ฌธ์์ด(String)์ด ์์ธ 1GB ํฌ๊ธฐ์ CSV ํ์ผ์ด ์์ต๋๋ค. ์ด๋ฅผ ๋ถ์ํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ํต์งธ๋ก ๋ก๋ฉ(In-Memory)ํด์ผ ํฉ๋๋ค.
- Java: List<MyObject> ๋๋ ArrayList<String[]> ํํ๋ก ๋ก๋ฉ
- Python: Pandas DataFrame์ผ๋ก ๋ก๋ฉ
๊ฒฐ๊ณผ๋ ์ด๋ ์๊น์?
- ํ์ด์ฌ (Pandas): ์๋ณธ ํ์ผ ํฌ๊ธฐ์ ์ฝ 2~3๋ฐฐ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ
- ์๋ฐ (List ๊ฐ์ฒด): ์๋ณธ ํ์ผ ํฌ๊ธฐ์ ์ฝ 5~10๋ฐฐ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ (!!)
์๋ฐ๊ฐ ํ์ด์ฌ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์ฌ ๋ ๋ง์ด ์ก์๋จน๋ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ ์ด๋ฐ ์ผ์ด ๋ฒ์ด์ง๊น์?
2. ๐ก ์์ธ ๋ถ์: '๊ฐ์ฒด(Object)'์ ๋ฐฐ์
๋ฒ์ธ์ ๋ฐ๋ก ์๋ฐ์ **๊ฐ์ฒด ํค๋(Object Header)**์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์์ต๋๋ค.
โ ์๋ฐ์ "๊ฐ๋ณ ํฌ์ฅ" ๋ฐฉ์ (Row-Oriented)
์๋ฐ์์ List<Integer>๋ฅผ ๋ง๋ ๋ค๊ณ ์์ํด ๋ณด์ธ์. ์๋ฐ๋ ๋ชจ๋ ๊ฒ์ '๊ฐ์ฒด'๋ก ์ทจ๊ธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ฐ 10์ ์ ์ฅํ๊ธฐ ์ํด Integer ๋ํผ ํด๋์ค(Wrapper Class)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ด ๊ฐ์ฒด ํ๋์๋ ์ค์ ๊ฐ(4byte)๋ฟ๋ง ์๋๋ผ, ๊ฐ์ฒด ํค๋(Mark Word, Class Pointer ๋ฑ ์ฝ 12byte ์ด์)๊ฐ ๋ถ์ต๋๋ค.
- 100๋ง ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, 100๋ง ๊ฐ์ ๊ฐ์ฒด ํค๋๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ง์น ์ฌํ ํ๋ํ๋๋ฅผ ๊ณผ๋ ํฌ์ฅ์ง๋ก ์ธ๋์ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฒ๋ค๊ฐ ์ด ๊ฐ์ฒด๋ค์ ํ(Heap) ๋ฉ๋ชจ๋ฆฌ ์ฌ๊ธฐ์ ๊ธฐ์ ์ฐ์ฌํด ์์ด ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๊ฐ ๊ด๋ฆฌํด์ผ ํ ๋์์ด ํญ์ฆํฉ๋๋ค.
โก ํ์ด์ฌ(Pandas)์ "๋ฒํฌ ํฌ์ฅ" ๋ฐฉ์ (Column-Oriented)
๋ฐ๋ฉด ํ์ด์ฌ์ Pandas๋ ๋ด๋ถ์ ์ผ๋ก **NumPy(C์ธ์ด ๊ธฐ๋ฐ)**๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- int ์ปฌ๋ผ์ด ์๋ค๋ฉด, ํ์ด์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ ์๋๋ผ C ์คํ์ผ์ **์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์ด(Array)**์ ํ ๋นํฉ๋๋ค.
- ํฌ์ฅ์ง(ํค๋) ์์ด ์๋งน์ด(๋ฐ์ดํฐ)๋ง ๋นฝ๋นฝํ๊ฒ ์ฑ์ ๋ฃ์ต๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์์นํ๋ฏ๋ก CPU ์บ์ ์ ์ค๋ฅ (Cache Hit)๋ ๋์์ ธ ์กฐํ ์๋๋ ๋น ๋ฆ ๋๋ค.
3. โ๏ธ ์น์๋? ์ํฉ๋ณ ์ ํ ๊ฐ์ด๋
๊ทธ๋ ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ํ์ด์ฌ์ด ์ข์๊น์? ์๋๋๋ค. **'๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃฐ ๊ฒ์ธ๊ฐ'**์ ๋ฐ๋ผ ์น์๊ฐ ๊ฐ๋ฆฝ๋๋ค.
| ๋น๊ต ํญ๋ชฉ | ํ์ด์ฌ (Pandas) ๐ | ์๋ฐ (Java Stream) โ |
| ํต์ฌ ๊ฐ์ | ๋ฉ๋ชจ๋ฆฌ ํจ์จ & ๋ถ์ ํธ์์ฑ | ์ฒ๋ฆฌ ์๋ & ์์ ์ฑ |
| ์ฒ๋ฆฌ ๋ฐฉ์ | ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ๋ก๋ฉ (In-Memory) | ๋ฐ์ดํฐ๋ฅผ ํ ์ค์ฉ ํ๋ ค๋ณด๋ (Streaming) |
| ์ ํฉํ ์ํฉ | ๋ฐ์ดํฐ ํต๊ณ, ๋ถ์, AI ํ์ต, ์๊ฐํ | ๋์ฉ๋ ๋ฐ์ดํฐ ๋ณํ(ETL), ์ค์๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ |
| ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ | ์ปฌ๋ผ ๊ธฐ๋ฐ (Columnar) - C ๋ฐฐ์ด ๊ตฌ์กฐ | ๋ก์ฐ ๊ธฐ๋ฐ (Row) - ๊ฐ์ฒด ์ฐธ์กฐ ๊ตฌ์กฐ |
โ ํ์ด์ฌ์ ์จ์ผ ํ ๋
- ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ณ group by, join, sort ๋ฑ ๋ณต์กํ ํต๊ณ ๋ถ์์ ํด์ผ ํ ๋.
- Pandas๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(C ๋ ๋ฒจ ์ต์ ํ)๋ฅผ ์์์ ํด์ฃผ๋ฏ๋ก ๊ฐ๋ฐ ์์ฐ์ฑ์ด ์๋์ ์ ๋๋ค.
โ ์๋ฐ๋ฅผ ์จ์ผ ํ ๋
- ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ค ์ฌ๋ฆด ํ์ ์์ด, ์ฝ์ด์ -> ๋ณํํ๊ณ -> DB์ ๋ฃ๋(ETL) ์์ ์ผ ๋.
- BufferedReader๋ Stream API๋ฅผ ์ฌ์ฉํด ํ ์ค์ฉ ์ฒ๋ฆฌํ๋ฉด(Streaming), 100GB ํ์ผ๋ ์์ญ MB์ ๋ฉ๋ชจ๋ฆฌ๋ง์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ด ๊ฒฝ์ฐ JIT ์ปดํ์ผ๋ฌ์ ์ต์ ํ ๋๋ถ์ ์คํ ์๋๋ ์๋ฐ๊ฐ ํจ์ฌ ๋น ๋ฆ ๋๋ค.
4. ๐ ๊ฒฐ๋ก : ๋๊ตฌ์ ํน์ฑ์ ์ดํดํ์
"์๋ฐ๋ ๋ฌด๊ฒ๋ค"๋ ๋ฐ์ ๋ง๊ณ ๋ฐ์ ํ๋ฆฝ๋๋ค.
- ๊ฐ์ฒด๋ฅผ ํ์ ์๋ฉ ์์๋๋ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉํ๋ฉด ์๋ฐ๋ ์ ๋ง ๋ฌด๊ฒ์ต๋๋ค.
- ํ์ง๋ง ์คํธ๋ฆผ(Stream) ๋ฐฉ์์ผ๋ก ํ๋ฆ์ ์ ์ดํ๋ฉด ์๋ฐ๋ ๋๊ตฌ๋ณด๋ค ๊ฐ๋ณ๊ณ ๋น ๋ฆ ๋๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ ๋ "์ด ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ด์ผ ํ๋๊ฐ(๋ถ์)?" ์๋๋ฉด **"์ง๋๊ฐ๊ฒ ํด์ผ ํ๋๊ฐ(ํ์ดํ๋ผ์ธ)?"**๋ฅผ ๋จผ์ ๊ณ ๋ฏผํด ๋ณด์ธ์. ๊ทธ ์ง๋ฌธ์ด ๋ฐ๋ก ํ์ด์ฌ๊ณผ ์๋ฐ ์ค ๋ฌด์์ ์ ํํ ์ง ์๋ ค์ฃผ๋ ๋์นจ๋ฐ์ด ๋ ๊ฒ์ ๋๋ค.
'Develop' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๐ฅ๏ธ๐ ๋งฅ๋ฏธ๋๋ฅผ AI ๊ฐ์ธ ๋น์๋ก: ๋ชฐํธ๋ด(Moltbot) ์ค์น ๋ฐ ์ด์ ์๋ฒฝ ๊ฐ์ด๋ (0) | 2026.02.10 |
|---|---|
| [๊ฐ๋ฐ์ ๋ ธํธ] ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์๋ฐ(Java) vs ํ์ด์ฌ(Python) ๋ฉ๋ชจ๋ฆฌ ์น์๋? (0) | 2026.02.10 |
| React Native ํ๊ฒฝ ์ธํ ๊ฐ์ด๋ (Windows & macOS) (0) | 2026.01.19 |
| Intellij VM option (0) | 2025.12.17 |
| [window ์ ํ์ธ์ฆ] ์๋์ฐ ์ ํ์ธ์ฆ (0) | 2025.09.04 |
