8 분 소요

📚 자산운용의 근간 — 재무·회계 4부작 (전체 4편)

  1. 회계의 원리와 회계 순환 프로세스
  2. 재무제표 3종 읽기와 그 연결
  3. 재무비율 분석과 가치평가 기초지금 글
  4. 자산운용 관점에서 재무·회계 활용

Summary

2편에서 재무제표를 읽는 법을 봤어요. 그런데 “매출 120억, 순이익 10억” 이라는 절대 숫자만으로는 이 회사가 잘하는지 알기 어려워요. 작년보다 나아졌나? 같은 업종 회사보다 나은가? 빚은 감당할 수 있나? 이걸 따지려면 숫자를 비율로 바꿔 비교 가능하게 만들어야 해요.

이번 글에서는 재무제표를 비율로 분석하고, 한 발 더 나아가 이 회사가 얼마짜리인가(가치평가) 까지 (주)나래전자 숫자로 직접 계산해 봅니다.

💡 이 글에서 다루는 것

  • 비율분석 4범주 — 수익성·안정성·활동성·성장성
  • 듀폰 분해 — ROE 를 세 조각으로 쪼개기
  • 상대가치 — PER·PBR·EV/EBITDA
  • 절대가치 — DCF(FCF·WACC·영구성장)
  • 각 계산을 Python 함수 + 실제 출력으로

표의 단위는 2편과 같은 백만 원이고, 비교를 위해 20X1·20X0 두 해 숫자를 같이 씁니다. 일부 비율은 기초·기말의 평균값을 분모로 써요(연중 평균 잔액이 더 맞기 때문).



0. 계산에 쓸 숫자 모으기

2편의 (주)나래전자 제표에서 필요한 값을 딕셔너리로 모아 둘게요. 이후 모든 비율을 이 값으로 계산해요. (단위: 백만 원)

fs = {
    # 손익계산서 (20X1 / 20X0)
    "매출": (12_000, 10_000),
    "매출원가": (8_400, 7_100),
    "매출총이익": (3_600, 2_900),
    "영업이익": (1_600, 1_300),
    "이자비용": (300, 280),
    "당기순이익": (1_000, 800),
    # 재무상태표 (20X1 기말 / 20X0 기말)
    "자산총계": (10_000, 9_000),
    "유동자산": (4_500, 4_100),
    "유동부채": (2_200, 2_000),
    "부채총계": (4_000, 3_800),
    "자본총계": (6_000, 5_200),
    "매출채권": (1_800, 1_500),
    "재고자산": (1_500, 1_300),
}

def avg(key):
    """기초·기말 평균. 잔액 항목(재무상태표)의 분모에 사용."""
    end, begin = fs[key]
    return (end + begin) / 2



1. 수익성 비율 — 얼마나 남기나

수익성(profitability) 은 “매출이나 투자된 자본 대비 얼마를 남기나” 예요. 운용에서 가장 먼저 보는 묶음이에요.

비율 의미
매출총이익률 매출총이익 / 매출 제품 자체의 마진
영업이익률 영업이익 / 매출 본업의 수익성
순이익률 당기순이익 / 매출 최종 마진
ROA 당기순이익 / 평균자산 자산을 굴려 번 효율
ROE 당기순이익 / 평균자본 주주 돈 대비 수익

이 중 ROE(자기자본이익률) 가 핵심이에요. 주주가 넣은 돈으로 회사가 얼마를 벌었는지를 보여주거든요.

def margin(numer_key, year=0):
    return fs[numer_key][year] / fs["매출"][year]

roe = fs["당기순이익"][0] / avg("자본총계")
roa = fs["당기순이익"][0] / avg("자산총계")

print(f"매출총이익률: {margin('매출총이익'):.1%}")
print(f"영업이익률:   {margin('영업이익'):.1%}")
print(f"순이익률:     {margin('당기순이익'):.1%}")
print(f"ROA:          {roa:.1%}")
print(f"ROE:          {roe:.1%}")
매출총이익률: 30.0%
영업이익률:   13.3%
순이익률:     8.3%
ROA:          10.5%
ROE:          17.9%

ROE 17.9% 면 주주 돈 100 으로 한 해에 17.9 를 벌었다는 뜻이에요. 꽤 좋은 편이에요. 그런데 “왜 좋은가” 를 한 단계 더 파고드는 게 다음의 듀폰 분해예요.



2. 듀폰 분해 — ROE 를 세 조각으로

ROE 가 높다고 다 같은 ROE 가 아니에요. 마진이 좋아서일 수도, 자산을 빠르게 굴려서일 수도, 아니면 빚을 많이 써서(레버리지) 일 수도 있어요. 이걸 분리해 보는 게 듀폰 분석(DuPont analysis) 이에요.

\[ROE = \underbrace{\frac{\text{순이익}}{\text{매출}}}_{\text{순이익률}} \times \underbrace{\frac{\text{매출}}{\text{평균자산}}}_{\text{총자산회전율}} \times \underbrace{\frac{\text{평균자산}}{\text{평균자본}}}_{\text{재무레버리지}}\]

세 조각의 곱이 ROE 와 같아져요. 각 조각이 다른 이야기를 해요.

  • 순이익률: 마진 장사를 잘하나
  • 총자산회전율: 자산을 효율적으로 굴리나
  • 재무레버리지: 빚을 얼마나 쓰나 (높을수록 ROE 를 키우지만 위험도 커짐)
net_margin = fs["당기순이익"][0] / fs["매출"][0]
asset_turnover = fs["매출"][0] / avg("자산총계")
leverage = avg("자산총계") / avg("자본총계")

roe_dupont = net_margin * asset_turnover * leverage
print(f"순이익률:       {net_margin:.3f}")
print(f"총자산회전율:   {asset_turnover:.3f}")
print(f"재무레버리지:   {leverage:.3f}")
print(f"듀폰 ROE:       {roe_dupont:.1%}")
순이익률:       0.083
총자산회전율:   1.263
재무레버리지:   1.696
듀폰 ROE:       17.9%

곱이 ROE 17.9% 와 일치해요. 해석하면 (주)나래전자의 ROE 는 마진(8.3%)과 자산 효율(1.26회), 적당한 레버리지(1.70배)가 고루 받쳐서 나온 결과예요. 만약 ROE 가 똑같이 17.9% 인데 레버리지가 3~4배라면 → “빚으로 만든 ROE” 라 위험을 따로 봐야 한다는 신호예요. 이게 듀폰의 쓸모예요.



3. 안정성 비율 — 빚을 감당하나

안정성(stability)·지급능력은 “빚을 갚을 수 있나, 망하지 않나” 예요. 채권 투자나 신용 분석에서 특히 중요해요.

비율 읽는 법
부채비율 부채총계 / 자본총계 낮을수록 안전. 보통 100% 이하 선호
유동비율 유동자산 / 유동부채 단기 지급능력. 100% 넘으면 일단 안심
이자보상배율 영업이익 / 이자비용 본업 이익으로 이자를 몇 배 감당하나
debt_ratio = fs["부채총계"][0] / fs["자본총계"][0]
current_ratio = fs["유동자산"][0] / fs["유동부채"][0]
interest_coverage = fs["영업이익"][0] / fs["이자비용"][0]

print(f"부채비율:     {debt_ratio:.1%}")
print(f"유동비율:     {current_ratio:.1%}")
print(f"이자보상배율: {interest_coverage:.2f}배")
부채비율:     66.7%
유동비율:     204.5%
이자보상배율: 5.33배

부채비율 66.7%(부채가 자본보다 적음), 유동비율 204.5%(유동자산이 유동부채의 두 배), 이자보상배율 5.33배(영업이익이 이자의 5배 넘음). 셋 다 양호해요.

⚠️ 이자보상배율 1배 미만은 위험 신호예요. 본업에서 번 영업이익으로 이자조차 못 갚는다는 뜻이라, 빚을 빚으로 막는 상태일 수 있어요. 신용 분석에서 가장 먼저 거르는 기준 중 하나예요. (4편에서 다시 나옵니다.)



4. 활동성 비율 — 자산을 빠르게 굴리나

활동성(activity) 은 “자산을 얼마나 빠르게 현금으로 바꾸나” 예요. 회전율이 높을수록(회수기간이 짧을수록) 돈이 묶이지 않고 잘 돌아요.

\[\text{매출채권회전율} = \frac{\text{매출}}{\text{평균 매출채권}}, \quad \text{회수기간(일)} = \frac{365}{\text{회전율}}\]
ar_turnover = fs["매출"][0] / avg("매출채권")
inv_turnover = fs["매출원가"][0] / avg("재고자산")   # 재고는 원가 기준

print(f"매출채권회전율: {ar_turnover:.1f}회  (회수기간 {365/ar_turnover:.0f}일)")
print(f"재고자산회전율: {inv_turnover:.1f}회  (회전기간 {365/inv_turnover:.0f}일)")
매출채권회전율: 7.3회  (회수기간 50일)
재고자산회전율: 6.0회  (회전기간 61일)

매출채권은 평균 50일 만에 현금으로 회수되고, 재고는 평균 61일 만에 팔려 나가요. 이 값이 해마다 길어지면 → 안 팔리는 재고가 쌓이거나 대금 회수가 느려진다는 신호라, 2편의 현금흐름표에서 “운전자본에 돈이 묶이는” 모습으로 나타나요.

💡 재고자산회전율의 분자로 매출이 아니라 매출원가를 쓰는 게 정석이에요. 재고가 원가로 기록돼 있어서, 분자도 원가로 맞춰야 단위가 일관되거든요.



5. 성장성 비율 — 커지고 있나

성장성(growth) 은 단순해요. 작년 대비 얼마나 늘었나.

def growth(key):
    end, begin = fs[key]
    return (end - begin) / begin

print(f"매출 성장률:     {growth('매출'):.1%}")
print(f"순이익 성장률:   {growth('당기순이익'):.1%}")
매출 성장률:     20.0%
순이익 성장률:   25.0%

매출이 20% 느는 동안 순이익이 25% 늘었어요. 이익이 매출보다 빠르게 큰다는 건 비용 통제가 잘 되고 있다(영업 레버리지가 작동한다)는 좋은 신호예요.



6. 상대가치 — 시장은 얼마로 보나

여기서부터는 “이 회사가 얼마짜리인가” 예요. 가장 직관적인 방법은 비슷한 회사와 비교하는 상대가치예요. (주)나래전자에 시장 정보를 더해 볼게요.

  • 발행주식수: 1,000,000주
  • 현재 주가: 12,000원
  • 감가상각비: 600(백만 원), 총차입금: 3,000, 현금: 1,200
지표 의미
EPS 당기순이익 / 주식수 주당 순이익
PER 주가 / EPS 이익 1 을 시장이 몇 배로 쳐주나
BPS 자본총계 / 주식수 주당 순자산
PBR 주가 / BPS 순자산 대비 몇 배
EV/EBITDA 기업가치 / EBITDA 부채까지 포함한 가치 배수

💡 EV(기업가치) = 시가총액 + 순부채(총차입금 − 현금). EBITDA = 영업이익 + 감가상각비. EV/EBITDA 는 자본구조(빚의 많고 적음)에 덜 휘둘려서, 빚이 다른 회사끼리 비교할 때 PER 보다 공정해요.

shares = 1_000_000          # 주
price = 12_000              # 원
# fs 단위(백만 원)를 원으로 환산해 주당 값과 맞춤
net_income_won = fs["당기순이익"][0] * 1_000_000
equity_won = fs["자본총계"][0] * 1_000_000

eps = net_income_won / shares
bps = equity_won / shares
per = price / eps
pbr = price / bps

market_cap = price * shares / 1_000_000        # 백만 원으로 환산
net_debt = 3_000 - 1_200                        # 총차입금 − 현금
ev = market_cap + net_debt
ebitda = fs["영업이익"][0] + 600
ev_ebitda = ev / ebitda

print(f"EPS: {eps:,.0f}원   PER: {per:.1f}배")
print(f"BPS: {bps:,.0f}원   PBR: {pbr:.1f}배")
print(f"시가총액: {market_cap:,.0f}백만원   EV: {ev:,.0f}백만원")
print(f"EBITDA: {ebitda:,.0f}백만원   EV/EBITDA: {ev_ebitda:.1f}배")
EPS: 1,000원   PER: 12.0배
BPS: 6,000원   PBR: 2.0배
시가총액: 12,000백만원   EV: 13,800백만원
EBITDA: 2,200백만원   EV/EBITDA: 6.3배

PER 12배는 “시장이 이 회사 이익 1 을 12 로 쳐준다” 는 뜻이에요. 같은 업종 평균 PER 이 15배라면 상대적으로 싸 보이고, 8배라면 비싸 보여요. 혼자서는 의미가 없고 비교 대상이 있어야 해석되는 게 상대가치의 본질이에요.



7. 절대가치 — DCF 로 직접 값 매기기

상대가치가 “남과 비교” 라면, DCF(현금흐름할인법) 는 “이 회사가 앞으로 벌어들일 현금을 직접 현재가치로 환산” 하는 절대가치예요. 논리는 한 줄이에요.

💡 회사의 가치 = 그 회사가 미래에 만들어 낼 잉여현금흐름(FCF)을, 위험을 반영한 할인율(WACC)로 현재가치로 깎아 모두 더한 것.

\[\text{기업가치} = \sum_{t=1}^{n} \frac{FCF_t}{(1+WACC)^t} + \frac{\text{영구가치}}{(1+WACC)^n}\]

순서대로 세 가지가 필요해요.

7-1. 할인율 WACC 구하기

WACC(가중평균자본비용) 는 주주가 요구하는 수익률(자기자본비용)과 빚의 이자(타인자본비용)를, 자본구조 비중으로 가중평균한 거예요.

# 자기자본비용 (CAPM): 무위험수익률 + 베타 × 시장위험프리미엄
rf, beta, erp = 0.03, 1.1, 0.06
ke = rf + beta * erp

# 타인자본비용 (세후): 차입이자율 × (1 − 법인세율)
kd_pretax, tax = 0.05, 0.23
kd = kd_pretax * (1 - tax)

# 자본구조 가중치 (E: 시가총액, D: 차입금)
E, D = 12_000, 3_000
wE, wD = E / (E + D), D / (E + D)
wacc = wE * ke + wD * kd

print(f"자기자본비용(Ke): {ke:.2%}")
print(f"타인자본비용(Kd, 세후): {kd:.2%}")
print(f"WACC: {wacc:.2%}")
자기자본비용(Ke): 9.60%
타인자본비용(Kd, 세후): 3.85%
WACC: 8.45%

7-2. FCF 추정하고 할인하기

잉여현금흐름은 간단히 영업현금흐름 − 설비투자(CAPEX) 로 잡을게요. 2편 현금흐름표에서 영업 1,400 − CAPEX 900 = 500 이 출발점(FCF₀)이에요. 앞으로 5년간 8% 성장, 이후 영구히 2.5% 성장한다고 가정해요.

fcf0 = 500          # 백만 원
g_high, g_term = 0.08, 0.025
n = 5

# 1~5년 FCF 와 그 현재가치
pv_fcf = 0
fcf = fcf0
for t in range(1, n + 1):
    fcf = fcf * (1 + g_high)
    pv_fcf += fcf / (1 + wacc) ** t

# 영구가치(터미널) = 5년차 FCF×(1+g_term) / (WACC − g_term), 그걸 다시 현재가치로
tv = fcf * (1 + g_term) / (wacc - g_term)
pv_tv = tv / (1 + wacc) ** n

ev_dcf = pv_fcf + pv_tv
equity_value = ev_dcf - net_debt          # 순부채 1,800 차감
fair_price = equity_value * 1_000_000 / shares

print(f"5년 FCF 현재가치 합: {pv_fcf:,.0f}백만원")
print(f"영구가치의 현재가치: {pv_tv:,.0f}백만원")
print(f"기업가치(EV):        {ev_dcf:,.0f}백만원")
print(f"주주가치(자기자본):   {equity_value:,.0f}백만원")
print(f"DCF 적정 주가:       {fair_price:,.0f}원")
5년 FCF 현재가치 합: 2,469백만원
영구가치의 현재가치: 8,436백만원
기업가치(EV):        10,905백만원
주주가치(자기자본):   9,105백만원
DCF 적정 주가:       9,105원

7-3. 결과 해석

DCF 가 말하는 적정 주가는 약 9,105원, 그런데 현재 시장 주가는 12,000원이에요. 이 가정대로라면 시장이 DCF 보다 비싸게 보고 있는 셈이에요. 두 가지로 읽을 수 있어요.

  • 시장은 이 회사의 성장(8%·2.5%)을 더 높게 기대하고 있거나,
  • 내 가정이 보수적이거나(예: 성장률을 낮게 잡았거나).

⚠️ DCF 는 가정에 극도로 민감해요. 영구성장률을 2.5% → 3.5% 로만 올려도 영구가치가 확 뛰어서 적정주가가 크게 바뀌어요. 그래서 실무에서는 단일 숫자보다 민감도(가정을 바꿔가며 범위로) 로 봅니다. “정확히 9,012원” 이 아니라 “대략 8천~1만 원대” 라는 식으로요.



8. 정리

묶음 핵심 비율 (주)나래전자
수익성 ROE 17.9%
듀폰 순이익률 × 회전율 × 레버리지 8.3% × 1.26 × 1.70
안정성 부채비율 / 이자보상배율 66.7% / 5.33배
활동성 매출채권 회수기간 50일
성장성 매출 / 순이익 성장률 20% / 25%
상대가치 PER / PBR / EV/EBITDA 12배 / 2.0배 / 6.3배
절대가치 DCF 적정주가 약 9,105원

비율 하나하나는 작은 단서예요. 운용에서는 이걸 시계열(작년 대비)·동종업계(경쟁사 대비) 와 같이 놓고 봐야 의미가 살아나요. 그리고 상대가치와 절대가치는 서로 보완해요. 상대가치는 빠르고 직관적이지만 시장 전체가 비싸면 같이 비싸 보이고, DCF 는 독립적이지만 가정에 휘둘려요.

다음 마지막 편에서는 지금까지의 회계·제표·분석을 자산운용 의사결정에 실제로 어떻게 쓰는지, 그리고 숫자가 거짓말을 할 때(이익의 질·회계의 함정) 어떻게 걸러내는지를 정리할게요.

일단 오늘은 여기까지….. 다음 글에서는 이걸 운용에 어떻게 쓰는지 정리해볼게요.


← 이전 글: (2/4) 재무제표 3종 읽기와 그 연결다음 글 →: (4/4) 자산운용 관점에서 재무·회계 활용