shlewislee.me

๐Ÿ“Š hledger ์†Œ๊ฐœ ๋ฐ ์„ค์น˜: ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ํšŒ๊ณ„ํ•˜๊ธฐ

Why

๋งŽ์€ ๊ฐ€๊ณ„๋ถ€/์ž์‚ฐ๊ด€๋ฆฌ ์•ฑ๋“ค์ด ์žˆ๊ณ , ๋งˆ์ด๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ฒจ๋‚œ ์ดํ›„ ๊ฑฐ์˜ ๋ชจ๋“  ๊ธˆ์œต/์€ํ–‰ ์•ฑ๋“ค์ด ๊ธฐ์กด ๊ธˆ์œต์‚ฌ๋“ค๊ณผ ์—ฐ๋™๋œ ๊ฐ€๊ณ„๋ถ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ •๋ณด ๋ฌธ์ œ๋Š” ๋‘˜์งธ์น˜๊ณ  ๊ทธ๋Ÿฐ ์•ฑ๋“ค์€ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๊ฝค๋‚˜ ๋ถ€์กฑํ•˜๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ์ž์‚ฐ ์กฐํšŒ ์„ ์— ๊ทธ์น˜๊ณ  ๊ฐ€๊ณ„๋ถ€๋„ ๊ฐ„๋‹จํ•œ ๋‹จ์‹๋ถ€๊ธฐ์‹ ๊ธฐ๋ก์— ๊ทธ์น˜๊ธฐ๋•Œ๋ฌธ์— ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค. ๊ฑฐ๊ธฐ์— ์ˆ˜๋งŽ์€ ๊ฐ„ํŽธ๊ฒฐ์ œ ์„œ๋น„์Šค๋“ค์ด ๋‚œ๋ฆฝํ•˜๋ฉด์„œ, ๋งŽ์€ ๊ฒฝ์šฐ ๊ฑฐ๋ž˜๋‚ด์—ญ์— prefix๋กœ OOํŽ˜์ด_๊ฐ€ ๋ถ™๊ฒŒ๋˜๋ฉด์„œ ์ œ๋Œ€๋กœ ๊ฑฐ๋ž˜ ๋ถ„๋ฅ˜๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋Š”๊ฐ€ํ•˜๋ฉด, ๊ฑฐ๋ž˜ ๋‚ด์—ญ ์ž์ฒด๊ฐ€ ์ฃผ์‹ํšŒ์‚ฌ OOO ๋“ฑ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์ ์ง€ ์•Š์•„์„œ seamlessํ•œ ๊ฒฝํ—˜์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ผ๋ก€๋กœ ์šฉ์‚ฐ ์•„์ดํŒŒํฌ๋ชฐ์—์„œ๋Š” ์–ด๋А๊ณณ์—์„œ ๊ฒฐ์ œํ•˜๋“  ๊ฑฐ์˜ ๋ชจ๋‘ ์—์ด์น˜๋””์”จ์•„์ดํŒŒํฌ๋ชฐ ์ฃผ์‹ํšŒ์‚ฌ๋กœ ๋œจ๊ธฐ๋•Œ๋ฌธ์— ์†Œ๋น„ ์นดํ…Œ๊ณ ๋ฆฌ ๋ถ„๋ฅ˜๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๋Š”๋‹ค1.

๊ทธ๋ฐ–์—๋„ 1) Migration/Backup์ด ์ œํ•œ๋˜๋Š” ์  2) ๋Œ€๋ถ€๋ถ„ ํ•œ ํ”Œ๋žซํผ(๋ชจ๋ฐ”์ผ)์— ์ข…์†๋˜๋Š” ์ , 3) ์นด๋“œ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ, ํŠนํžˆ ๊ฒฐ์ œ(๋ถ€๋ถ„/์ „์ฒด) ์ทจ์†Œ์˜ ๋ฐ˜์˜์ด ๋Šฆ๋Š” ์  ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์กฐ๊ธˆ ๋ฒˆ๊ฑฐ๋กญ๋”๋ผ๋„ ์˜คํ”ˆ์†Œ์Šค๋กœ ๋Œ€์•ˆ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

PTA, ๊ทธ๋ฆฌ๊ณ  hledger

์—ฌ๋Ÿฌ ๋Œ€์•ˆ์ค‘ ๊ฐ€์žฅ ๋ˆˆ์— ๋“ค์–ด์˜จ ๊ฒƒ์€ GNU/Cash์™€ Plain-text-accounting(์ดํ•˜ PTA) ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด์—ˆ๋‹ค. PTA๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ง€์นญํ•˜๋Š” ๋ง์ด ์•„๋‹Œ Plaintext, ์ฆ‰ ํ‰๋ฌธ ํŒŒ์ผ์— ํšŒ๊ณ„ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ๋…ธํŠธ ํ˜•์‹์˜ daybook๋„ PTA์˜ ์ผ์ข…์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ PTA๋ผ ๋งํ•˜๋ฉด PTA์—์„œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ธ ledger์˜ ํฌ๋งท๊ณผ ๊ทธ์™€ ๋น„์Šทํ•œ ledger-like ํ”„๋กœ๊ทธ๋žจ๋“ค๊ณผ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ•œ๋‹ค. ์•„๋ž˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ hledger ํ˜•์‹์˜ ๊ฑฐ๋ž˜์ด๋‹ค:

2025-04-20 ๊ต๋ณด๋ฌธ๊ณ 
    expenses:books           10,000 KRW 
    assets:cash             -10,000 KRW

2025-04-20 ์›”๊ธ‰
    income:salary           -100,000 KRW
    assets:bank              100,000 KRW

์ฑ…์— 10,000์›์„ ์“ฐ๊ณ , ์›”๊ธ‰์„ 100,000์› ๋ฐ›์€ ๊ฒƒ์„ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ธฐ๋ก๋งŒ ํ•ด ๋‘๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด๊ณ ์„œ2๋ฅผ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค:

$ hledger is
Income Statement 2025-04-20

                ||  2025-04-20
================++=============
 Revenues       ||
----------------++-------------
 income:salary  || 100,000 KRW
----------------++-------------
                || 100,000 KRW
================++=============
 Expenses       ||
----------------++-------------
 expenses:books ||  10,000 KRW
----------------++-------------
                ||  10,000 KRW
================++=============
 Net:           ||  90,000 KRW

hledger๋Š” ๋ณต์‹๋ถ€๊ธฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ์กฐ๊ธˆ ์ง๊ด€์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ(ํŠนํžˆ ๋Œ€/์ฐจ๋ณ€์„ +/- ๋ถ€ํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ์˜คํ•ด๋“ค์ด ์žˆ๋‹ค) ์ต์ˆ™ํ•ด์ง€๋ฉด ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€๋Š” ์ฐจ๋ณ„๋˜๋Š” semanticity๋ฅผ ์ž๋ž‘ํ•œ๋‹ค.

์ด ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ณต์‹๋ถ€๊ธฐ ๋ฐฉ๋ฒ• ์ž์ฒด์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค. ํšŒ๊ณ„ ๊ธฐ์ค€์ด ์•„๋‹Œ ๋ณต์‹๋ถ€๊ธฐ ์‹œ์Šคํ…œ ์ž์ฒด๋Š” ์ดํ•ดํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ๊ธฐ๋•Œ๋ฌธ์— 10๋ถ„ ๋‚ด์™ธ๋กœ ์ถฉ๋ถ„ํžˆ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. hledger docs์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋ณต์‹๋ถ€๊ธฐ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ์˜์ƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ hledger์˜ ํ˜•์‹๊ณผ ๋ช‡๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.


  1. ๋ฌผ๋ก  PTA๋„ ๋‹น์—ฐํžˆ ์ˆ˜๊ธฐ๋กœ ํ•ด์ค˜์•ผํ•œ๋‹ค. ๋‹จ์ง€ “๊ฐ„ํŽธํ•œ ๊ฐ€๊ณ„๋ถ€” ์•ฑ๋“ค์ด ํš๊ธฐ์ ์œผ๋กœ ๋” ๊ฐ„ํŽธํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ง์ผ ๋ฟ์ด๋‹ค. ↩︎

  2. ์•„๋ž˜์˜ ๋ณด๊ณ ์„œ๋ฅผ Income statement, ํฌ๊ด„์†์ต๊ณ„์‚ฐ์„œ๋ผ๊ณ  ํ•œ๋‹ค. ์‹ค์ œ ๊ธฐ์—…์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณด๊ณ ์„œ ํ˜•์‹๊ณผ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค. ↩︎

This article is part of a series: hledger intro

Reply to this post by email โ†ช