Skip to content
Published on

Savings, Deposits, and Investment Complete Comparison -- Where Should You Put Your Money?

Authors
  • Name
    Twitter
Savings & Investment Guide

Introduction

When your paycheck comes in, where should you put it? Deposits? Savings? Stocks? ETFs? There are too many options.

This article compares all financial products in a single table and presents a framework for developers to rationally allocate their money.

Complete Comparison Map

ProductExpected ReturnRiskLiquidityTax BenefitsMinimum Amount
Demand Deposit0.1-1%Near zeroInstantNone1 KRW
Fixed Deposit3-4%Near zeroMaturityNone10,000 KRW
Installment Savings3-5%Near zeroMaturityNone10,000 KRW
Government Bonds3-4%Very lowMediumSeparate taxation100,000 KRW
Corporate Bonds4-7%Low-MedMediumNone1,000,000 KRW
ETF (S&P 500)8-12%MediumInstantISA eligible1 share
Individual Stocks-100% to +unlimitedHighInstantNone1 share
Real Estate3-10%Med-HighVery lowProperty taxHundreds of millions KRW
BitcoinExtreme volatilityVery highInstantTaxation pending1 KRW

Part 1: Safe Assets (Principal Guaranteed)

Deposits vs Installment Savings

# Deposit: Put a lump sum and receive interest at maturity
def deposit_interest(principal, rate, months):
    """Fixed deposit interest calculation (simple interest)"""
    interest = principal * rate * (months / 12)
    tax = interest * 0.154  # Interest income tax 15.4%
    return interest - tax

# 10M KRW, 3.5% annual, 12 months
net = deposit_interest(10_000_000, 0.035, 12)
print(f"After-tax interest: {net:,.0f} KRW")  # 295,900 KRW

# Savings: Deposit a fixed amount monthly and receive interest at maturity
def savings_interest(monthly, rate, months):
    """Installment savings interest calculation"""
    total_deposit = monthly * months
    # Savings interest = monthly payment x rate x (months+1) / (2x12)
    interest = monthly * rate * (months + 1) / (2 * 12) * months
    # More precisely:
    interest = sum(monthly * rate * (months - i) / 12 for i in range(months))
    tax = interest * 0.154
    return total_deposit, interest - tax

total, net_int = savings_interest(500_000, 0.04, 12)
print(f"Total deposited: {total:,.0f} KRW, After-tax interest: {net_int:,.0f} KRW")
# Total deposited: 6,000,000 KRW, After-tax interest: ~110,000 KRW

Key differences:

  • Deposit: Lump-sum management, higher interest (interest on the full amount)
  • Savings: Monthly contributions, lower interest (later deposits earn less interest)
  • Deposits earn more interest than savings! (even at the same rate)

Deposit Protection

Deposit Insurance Corporation: Protects up to 50M KRW per person
  ├── Bank deposits: Protected
  ├── Savings bank deposits: Protected
  ├── Securities firm CMA: Protected (RP type only)
  ├── Insurance company benefits: Protected
  └── Stocks/Funds: NOT protected!

-> Don't put more than 50M KRW in a single bank!

Part 2: Investment Assets

ETF (Exchange Traded Fund)

# S&P 500 ETF: Diversified investment in 500 large US stocks
# Average annual return: ~10% (50 years of history)

def etf_monthly_invest(monthly, annual_return, years):
    """ETF monthly contribution investment simulation"""
    monthly_return = (1 + annual_return) ** (1/12) - 1
    total_months = years * 12
    balance = 0

    for month in range(total_months):
        balance = (balance + monthly) * (1 + monthly_return)

    total_invested = monthly * total_months
    profit = balance - total_invested
    return balance, total_invested, profit

# 1M KRW/month, 10% annual, 20 years
balance, invested, profit = etf_monthly_invest(1_000_000, 0.10, 20)
print(f"Total invested: {invested:,.0f} KRW")     # 240,000,000 KRW
print(f"Final balance: {balance:,.0f} KRW")       # ~759,000,000 KRW
print(f"Profit: {profit:,.0f} KRW")               # ~519,000,000 KRW (216% return!)

Recommended ETFs:

ETFIndex TrackedFeeFeatures
VOO/SPYS&P 5000.03%US large caps
QQQNASDAQ 1000.20%Tech-focused
VTGlobal0.07%Global diversification
TIGER US S&P 500S&P 500 (Korean)0.07%KRW investment, ISA eligible
KODEX 200KOSPI 2000.05%Korean large caps

Bonds

# Bond = Lending money and receiving interest
class Bond:
    def __init__(self, face_value, coupon_rate, years, market_rate):
        self.face = face_value      # Face value
        self.coupon = coupon_rate    # Coupon rate
        self.years = years
        self.market = market_rate    # Market interest rate

    def price(self):
        """Bond price = Present value of future cash flows"""
        pv_coupons = sum(
            self.face * self.coupon / (1 + self.market) ** t
            for t in range(1, self.years + 1)
        )
        pv_face = self.face / (1 + self.market) ** self.years
        return pv_coupons + pv_face

# Face value 1M KRW, coupon 5%, 10 years
bond = Bond(1_000_000, 0.05, 10, 0.04)
print(f"Bond price: {bond.price():,.0f} KRW")  # 1,081,109 KRW (Premium!)
# Market rate (4%) less than coupon rate (5%) -> Bond price rises!

bond2 = Bond(1_000_000, 0.05, 10, 0.06)
print(f"Bond price: {bond2.price():,.0f} KRW")  # 926,399 KRW (Discount!)
# Market rate (6%) greater than coupon rate (5%) -> Bond price falls!

Relationship between interest rates and bonds:

Interest rates up -> Bond prices down (seesaw relationship)
Interest rates down -> Bond prices up
-> Bond investing is favorable during rate-cutting periods!

Part 3: Tax-Advantaged Products (Must Utilize!)

Pension Savings + IRP

# Pension savings: Max 6M KRW/year contribution -> Tax deduction
# IRP: Max 9M KRW/year contribution -> Tax deduction (including pension savings)

def tax_benefit(income, pension_saving, irp):
    """Tax deduction calculation"""
    total = min(pension_saving + irp, 9_000_000)  # Combined limit of 9M KRW

    if income <= 55_000_000:  # Total salary 55M KRW or less
        rate = 0.165  # 16.5% deduction
    else:
        rate = 0.132  # 13.2% deduction

    return total * rate

# Salary 60M KRW, pension savings 6M + IRP 3M
benefit = tax_benefit(60_000_000, 6_000_000, 3_000_000)
print(f"Tax deduction: {benefit:,.0f} KRW")  # 1,188,000 KRW (1.18M KRW saved per year!)

ISA (Individual Savings Account)

ISA = All-in-one tax-free account
├── Can hold deposits, savings, funds, ETFs, REITs, and more
├── Tax-free limit: 2M KRW (4M KRW for lower-income earners)
├── Excess: 9.9% separate taxation (vs standard 15.4%)
├── Mandatory holding period: 3 years
└── Additional 3M KRW tax deduction when converted to pension at maturity!

Optimal Portfolio (Developer in Their 30s)

portfolio = {
    "Emergency Fund (Deposit)": {
        "ratio": "6 months of living expenses",
        "amount": 12_000_000,
        "product": "Parking account/CMA",
    },
    "Pension Savings (ETF)": {
        "ratio": "500K KRW/month",
        "annual": 6_000_000,
        "product": "TIGER US S&P 500",
        "tax": "13.2% tax deduction",
    },
    "IRP (ETF)": {
        "ratio": "250K KRW/month",
        "annual": 3_000_000,
        "product": "KODEX TRF3070",
        "tax": "13.2% tax deduction",
    },
    "ISA (ETF)": {
        "ratio": "500K KRW/month",
        "annual": 6_000_000,
        "product": "TIGER US NASDAQ 100",
        "tax": "2M KRW tax-free",
    },
    "Personal Investment (ETF/Stocks)": {
        "ratio": "Surplus funds",
        "product": "VOO, QQQ, individual stocks",
    },
}

# Order: Emergency fund -> Pension savings (tax) -> IRP (tax) -> ISA (tax-free) -> Personal
# Fill tax-advantaged accounts first, then invest the rest!

Return Simulation

# Investing from age 25 to 55 over 30 years
scenarios = {
    "Deposits only (3%)": 0.03,
    "Bonds+Deposits (5%)": 0.05,
    "Mixed ETF (8%)": 0.08,
    "Aggressive stocks (12%)": 0.12,
}

monthly = 1_000_000  # 1M KRW/month
years = 30

for name, rate in scenarios.items():
    balance, invested, profit = etf_monthly_invest(monthly, rate, years)
    print(f"  {name:20s}: Invested {invested/1e8:.1f} x 100M -> Final {balance/1e8:.1f} x 100M ({profit/invested*100:.0f}% return)")

# Deposits only (3%)    : Invested 3.6 x 100M -> Final 5.8 x 100M (62% return)
# Bonds+Deposits (5%)   : Invested 3.6 x 100M -> Final 8.3 x 100M (132% return)
# Mixed ETF (8%)        : Invested 3.6 x 100M -> Final 14.9 x 100M (314% return)
# Aggressive stocks (12%): Invested 3.6 x 100M -> Final 34.9 x 100M (870% return!)

The magic of compound interest: Putting 1M KRW/month into deposits (3%) for 30 years yields 580M, while ETFs (8%) yield 1.49 billion. Same money, but a 910M KRW difference!


Quiz -- Savings and Investment (Click to check!)

Q1. Why do deposits earn more interest than installment savings at the same rate? ||Deposits earn interest on the full amount from the start, but with savings, later contributions earn less interest since they have been deposited for a shorter period.||

Q2. What is the deposit protection limit and which products are not protected? ||50M KRW per person. Stocks, funds, and ETFs are not covered by deposit protection.||

Q3. What happens to bond prices when interest rates rise? ||They fall. Existing bonds with lower coupons become less attractive, trading at a discount. Interest rates and bond prices have a seesaw relationship.||

Q4. What is the combined tax deduction limit for pension savings + IRP and the deduction rate? ||Combined limit of 9M KRW. 16.5% for total salary of 55M KRW or less, 13.2% for above.||

Q5. What is the ISA tax-free limit and the tax rate on excess? ||Tax-free 2M KRW (4M KRW for lower-income), excess taxed at 9.9% separate taxation (vs standard 15.4%).||

Q6. What is the difference in final amount when investing 1M KRW/month for 30 years at 3% (deposits) vs 8% (ETF)? ||Deposits: ~580M KRW, ETF: ~1.49 billion KRW. A difference of ~910M KRW. Compound interest effects are maximized over long periods.||

Q7. What is the standard order for investment? ||Emergency fund (6 months) -> Pension savings (tax deduction) -> IRP (tax deduction) -> ISA (tax-free) -> Personal investment. Fill tax-advantaged accounts first.||