- Authors
- Name
- Introduction
- Complete Comparison Map
- Part 1: Safe Assets (Principal Guaranteed)
- Part 2: Investment Assets
- Part 3: Tax-Advantaged Products (Must Utilize!)
- Return Simulation

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
| Product | Expected Return | Risk | Liquidity | Tax Benefits | Minimum Amount |
|---|---|---|---|---|---|
| Demand Deposit | 0.1-1% | Near zero | Instant | None | 1 KRW |
| Fixed Deposit | 3-4% | Near zero | Maturity | None | 10,000 KRW |
| Installment Savings | 3-5% | Near zero | Maturity | None | 10,000 KRW |
| Government Bonds | 3-4% | Very low | Medium | Separate taxation | 100,000 KRW |
| Corporate Bonds | 4-7% | Low-Med | Medium | None | 1,000,000 KRW |
| ETF (S&P 500) | 8-12% | Medium | Instant | ISA eligible | 1 share |
| Individual Stocks | -100% to +unlimited | High | Instant | None | 1 share |
| Real Estate | 3-10% | Med-High | Very low | Property tax | Hundreds of millions KRW |
| Bitcoin | Extreme volatility | Very high | Instant | Taxation pending | 1 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:
| ETF | Index Tracked | Fee | Features |
|---|---|---|---|
| VOO/SPY | S&P 500 | 0.03% | US large caps |
| QQQ | NASDAQ 100 | 0.20% | Tech-focused |
| VT | Global | 0.07% | Global diversification |
| TIGER US S&P 500 | S&P 500 (Korean) | 0.07% | KRW investment, ISA eligible |
| KODEX 200 | KOSPI 200 | 0.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.||