ํ์ฌ ICTWAY์์ 3D GIS ์์ง์ ๊ณ ๋ํํ๊ณ , ๋๊ท๋ชจ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ถ์ฐ ๋น๋ ํ์ดํ๋ผ์ธ์ ์ค๊ณํ๊ณ ์์ต๋๋ค.
- ๐ผ ICTWAY | 3D GIS ์์ง & ๋ฐฑ์๋ ์์ง๋์ด (2024.12 ~ ์ฌ์ง์ค)
- ๐ ์ ๋ถ๋ํ๊ต IT์ ๋ณด๊ณตํ๊ณผ B.S. (2019.03 ~ 2025.02)
- ๐ ์ํํธ์จ์ด ๋ง์์คํธ๋ก 15๊ธฐ ์ฐ์์ (2024.04 ~ 2024.11)
- ๋ฌธ์ ์ ์: ๊ธฐ์กด NFS ๊ธฐ๋ฐ SQLite ๊ณต์ ๊ตฌ์กฐ์์ ๋ค์ค ์๋ฒ๊ฐ ๋จ์ผ DB ํ์ผ์ ์ ๊ทผํ๋ฉฐ ๋ฐ์ํ๋ I/O Lock ๊ฒฝํฉ ๋ฐ ์ํ ํ์ฅ ๋ถ๊ฐ ๋ฌธ์
- ์ค๊ณ ๋ฐ ํด๊ฒฐ์ฑ
:
- ์ ์ฅ์ ๋ถ๋ฆฌ ๋ฐ CQRS ์ ์ฉ: ๋ฉํ๋ฐ์ดํฐ๋ ๋์์ฑ ์ ์ด๊ฐ ๊ฐํ PostgreSQL๋ก, ํ์ผ ๋ฐ์ดํฐ(3D Model)๋ S3, SeaweedFS ๋ฑ (๋ถ์ฐ ์คํ ๋ฆฌ์ง) ๋ก ์ด๊ด. ๋น๋(Command)์ ์กฐํ(Query)์ ๋ฌผ๋ฆฌ์ /๋ ผ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ๋ถ๋ฆฌํ์ฌ I/O ๋ณ๋ชฉ ์ ๊ฑฐ
- ์ด๋ฒคํธ ํ์ดํ๋ผ์ธ: Kafka์ Consumer Group์ ๋์ ํ์ฌ ์์ปค ๋ ธ๋๋ฅผ ์ ์ฐํ๊ฒ ์ฆ์คํ ์ ์๋ ๋น๋๊ธฐ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๊ฒฝ ๊ตฌ์ถ
- ๊ตฌํ ํฌ์ธํธ: Transactional Outbox Pattern์ ์ ์ฉํ์ฌ DB ์ํ ๋ณ๊ฒฝ๊ณผ ์ด๋ฒคํธ ๋ฐํ์ ์์์ฑ(Atomicity) ๋ณด์ฅ
- ๊ฒฐ๊ณผ: I/O Lock ๊ฒฝํฉ ํด์๋ก ์๋น์ค ์์ ์ฑ ํ๋ณด ๋ฐ ์์ปค ๋ ธ๋ ์ฆ์ค์ ๋ฐ๋ฅธ ์ ํ์ ํ์ฅ(Scale-out) ๊ฐ๋ฅ
- ๋ฌธ์ ์ ์: ์ผ๋ถ ์์ญ ์์ ์์๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋น๋ํด์ผ ํ๋ ๋นํจ์จ(์๋ฐฑ ์๊ฐ) ๋ฐ ์ด๋ ฅ ๊ด๋ฆฌ(History)์ ๋ถ์ฌ
- ์ค๊ณ ๋ฐ ํด๊ฒฐ์ฑ
:
- Git-like ๋ฒ์ ๊ด๋ฆฌ: ํ์ผ ๋ฐ์ดํฐ์ Content-Addressable Storage(CAS) ๋ฐฉ์์ ์ ์ฉ, ๋ณ๊ฒฝ๋ ๋ ธ๋๋ง ์๋ก์ด ํด์๋ก ์ ์ฅํ๊ณ ๋ณ๊ฒฝ ์๋ ๋ ธ๋๋ ๊ธฐ์กด ํด์๋ฅผ ํฌ์ธํ ํ๋ Merkle Tree๊ตฌ์กฐ ์ค๊ณ
- Selective Rebuild: ๋ณ๊ฒฝ๋ ๊ณต๊ฐ ๋ฒ์(BBox)๋ฅผ ๊ฐ์งํ์ฌ ์ํฅ๋ฐ๋ ํ์ผ๋ง ๋ถ๋ถ์ ์ผ๋ก ์ฌ์์ฑํ๋ ์ฆ๋ถ ๋น๋(Incremental Build) ๊ตฌํ
- ๊ฒฐ๊ณผ: ์ ์ฒด ์ฌ๋น๋(์๋ฐฑ ์๊ฐ) โ ๋ณ๊ฒฝ ๊ตฌ๊ฐ๋ง ์ ๋ถ(Minute) ๋ด ์ฌ๋น๋ ๊ฐ๋ฅ, ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ(Deduplication)๋ก ์คํ ๋ฆฌ์ง ๋น์ฉ ์ต์ ํ
- ๋ฌธ์ ์ ์: 3D ๋ชจ๋ธ ๋ ๋๋ง ์ ๋ฐ์ํ๋ ํธ๋ฆฌ ํ์ ๋ณ๋ชฉ ๋ฐ ๋์ฉ๋ ๋ฉํ๋ฐ์ดํฐ ์ ์ก ์ง์ฐ
- ์ค๊ณ ๋ฐ ํด๊ฒฐ์ฑ : Explicit JSON ๊ตฌ์กฐ๋ฅผ Implicit Tiling(๊ท์น ๊ธฐ๋ฐ ์ธ์ฝ๋ฉ) ์ผ๋ก ์ ํํ์ฌ ๋๋ค ์ก์ธ์ค ๊ตฌํ
-
๊ตฌํ ํฌ์ธํธ: ํ์ผ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ฆฌ ํ์
$O(\log_{4} N)$ ์์ ์ขํ ๊ธฐ๋ฐ ๋๋ค ์ก์ธ์ค$O(1)$ ๋ก ์ต์ ํ - ๊ฒฐ๊ณผ: ๋ ๋๋ง FPS ์ฝ 30% ํฅ์, ๋ฉํ๋ฐ์ดํฐ ์ฉ๋ 30~40% ์ ๊ฐ
- EDA (Event-Driven Architecture): Kafka๋ฅผ ํ์ฉํ ๊ฒฐํฉ๋ ๋ฎ์(Decoupled) ๋์ฉ๋ ํ์ดํ๋ผ์ธ ์ค๊ณ
- Storage Optimization: ํ์ผ ์์คํ ๊ณผ ์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง(SeaweedFS, MinIO)์ I/O ํน์ฑ์ ๊ณ ๋ คํ ์ต์ ํ
- Reliability: ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋ ๋ด๊ฒฐํจ์ฑ(Fault Tolerance) ๊ตฌ์กฐ ์ค๊ณ
- Distributed Transaction: MSA ํ๊ฒฝ์์ SAGA, Outbox ํจํด์ ํตํ ์ต์ข ์ ์ผ๊ด์ฑ(Eventual Consistency) ํ๋ณด
- Resilience: ๋คํธ์ํฌ ๋จ์ ๊ณผ ์คํจ๋ฅผ ๋ณ์๊ฐ ์๋ ์์๋ก ๊ฐ์ ํ๊ณ , ๋ฉฑ๋ฑ์ฑ๊ณผ ์ฌ์๋ ์ ๋ต์ ํตํด ํ๋ณต ํ๋ ฅ์ฑ ํ๋ณด
| Category | Stack |
|---|---|
| Languages | Java, C#, Python, JavaScript |
| Backend | Spring Boot(MVC), JPA/Hibernate |
| Data & Messaging | PostgreSQL, MySQL, Redis, MongoDB, Apache Kafka |
| Infra & DevOps | AWS(EC2, RDS, S3, Lambda), Docker, GitHub Actions |
| Monitoring | Grafana, k6, Prometheus |
์์คํ ์ค๊ณ์ ๊ทผ๊ฑฐ์ ์คํ์์ค ๋์ ์๋ฆฌ๋ฅผ ํ์ตํ๊ณ ์ ๋ฆฌํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ๐ ๋ธ๋ก๊ทธ ์ ์ฒด ๋ณด๊ธฐ (virtualworld.tistory.com)
-
[Network] ์ ๋ขฐ์ฑ์ ์ํ Timeout ์ฒ๋ฆฌ์ ๋ฉฑ๋ฑ์ฑ ์ค๊ณ ์ ๋ต
- ๋คํธ์ํฌ ์์ธ ์ํฉ์ ๊ณ ๋ คํ ์์คํ ์ผ๊ด์ฑ ๋ณด์ฅ ์ ๋ต
-
[Database] [Log-based System] RDBMS์ Kafka ๊ตฌ์กฐ ๋ถ์
- ๋ฐ์ดํฐ์ ์์์ฑ์ ๋ณด์ฅํ๋ Log ์ค์ฌ ์ค๊ณ ์ฒ ํ(WAL vs Commit Log) ๋น๊ต
-
[Operating System] [Zero-Copy] ํ์ผ ์ ์ก ์ต์ ํ์ Kafka ์ฝ๋ ๋ถ์
-
sendfile์์คํ ์ฝ๊ณผ ์ปค๋ ๋ฒํผ ๋ณต์ฌ ๋น์ฉ ์ต์ ํ ์๋ฆฌ ๋ถ์
-
-
[Database] CAP ์ด๋ก ๊ณผ PACELC ํธ๋ ์ด๋์คํ ์ ๋ฆฌ
- ๋ถ์ฐ ์์คํ ์์ ๋ง์ฃผํ๋ ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ ์ฌ์ด์ ์ ํ์ง ์ ๋ฆฌ
-
[GIS / Data Structure / Algorithm] ๋๊ท๋ชจ ๊ณต๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ Implicit Tiling ์ค๊ณ
-
$O(1)$ ํ์์ ์ํ ๊ณต๊ฐ ์๋ฃ๊ตฌ์กฐ ์ค๊ณ ๋ฐ ๊ตฌํ๊ธฐ
-
-
[Algorithm] [Z-order Indexing] ๊ณต๊ฐ ๋ฐ์ดํฐ ์ต์ ํ
- ๋๊ท๋ชจ ๊ณต๊ฐ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ ์ ๋ต
- Email: liging12@naver.com
- LinkedIn: linkedin.com/in/minseojo
- Blog: virtualworld.tistory.com