📚 세특 탐구 주제 시리즈 · 진로 연계편 (컴퓨터공학·소프트웨어공학)
지난 글 72의 법칙은 왜 성립할까?에서는 "연 8%면 약 9년 만에 돈이 2배가 된다"는 공식을 지수와 로그로 확인했습니다. 이번에는 한 걸음 더 나아가 이 공식을 계산기 프로그램으로 직접 만들어 봅니다. 이 글 아래쪽에 있는 계산기가 바로 그 결과물입니다.
요즘은 AI에게 물어보면 답을 바로 알려 줍니다. 그런데 컴퓨터공학이나 소프트웨어공학을 꿈꾸는 학생에게 중요한 것은 답이 아니라 "답을 내는 과정을 설계하고, 틀린 곳을 찾아 고치는 경험"입니다. 이 글은 그 과정을 처음부터 끝까지, 실제로 만나 고친 버그까지 그대로 보여 드립니다.
코드는 계산기에 실제로 들어간 자바스크립트와, 학교 정보 시간에 많이 쓰는 파이썬 두 가지로 나란히 보여 드립니다. 두 언어는 모양만 조금 다를 뿐 생각하는 순서는 같습니다. 파이썬 코드는 그대로 복사해서 실행해 볼 수 있습니다.
주요단어: 72의 법칙, 계산기 만들기, HTML, 자바스크립트, 파이썬, 반복문, 알고리즘 비교, 상용로그, 좌표 변환, 디버깅, 테스트, 컴퓨터공학, 소프트웨어공학, 정보, 대수, 고등학교, 주제탐구
① 전제: 모든 프로그램은 "입력 → 처리 → 출력"이다
프로그램을 만들기 전에 가장 먼저 해야 할 일은 코드를 쓰는 것이 아니라 무엇을 받아서, 무엇을 하고, 무엇을 보여 줄지 정하는 것입니다. 72의 법칙 계산기는 이렇게 설계했습니다.
- 입력: 원금(예: 100만 원)과 연이율(예: 8%)
- 검사: 0이나 음수, 빈칸이 들어오면 계산하지 않고 안내 문구를 보여 줌
- 계산: 72의 법칙 값(72 ÷ 8 = 9.00년)과 실제 복리 값(9.01년)
- 출력: 결과 카드, 설명 문장, 그래프, 표

여기서 중요한 점은 마지막 화살표입니다. 사용자가 숫자를 하나 바꿀 때마다 ①부터 다시 실행해야 결과가 바로 바뀝니다. 자바스크립트에서는 입력칸에 input 이벤트를 걸어 이것을 처리합니다.
자바스크립트 (이 글의 계산기에 들어간 코드)
입력칸.addEventListener('input', calc); // 숫자가 바뀌면 calc 함수를 다시 실행
파이썬 (학교에서 많이 쓰는 언어로 같은 일을 하는 코드)
파이썬에는 웹 화면의 입력칸이 없으니, 키보드로 숫자를 받는 input()을 while True 반복 안에 넣어 같은 흐름을 만듭니다. 그림1의 ①~④가 코드에 그대로 들어 있습니다. 멈추려면 Ctrl+C를 누르면 됩니다.
import math
while True: # 계속 반복해서 새 숫자를 받음
원금 = float(input("원금(만 원): ")) # ① 입력
이율 = float(input("연이율(%): "))
if 원금 <= 0 or 이율 <= 0: # ② 검사
print("0보다 큰 숫자를 넣어 주세요.")
continue
법칙 = 72 / 이율 # ③ 계산
실제 = math.log(2) / math.log(1 + 이율 / 100)
print(f"72의 법칙: {법칙:.2f}년, 실제: {실제:.2f}년") # ④ 출력
100과 8을 넣으면 72의 법칙: 9.00년, 실제: 9.01년이 출력됩니다.
② 계산 방법 1: 반복문으로 한 해씩 따라가기
"돈이 2배가 되는 데 몇 년 걸릴까?"를 가장 쉽게 계산하는 방법은 컴퓨터에게 1년씩 직접 계산시키는 것입니다. 사람이 손으로 하는 방법을 그대로 옮긴 것이지요. 100만 원, 연 8%로 따라가 보겠습니다.
1년 뒤: 100만 × 1.08 = 108만 원
2년 뒤: 108만 × 1.08 = 116.64만 원
3년 뒤: 116.64만 × 1.08 = 125.97만 원
⋮
9년 뒤: 185.09만 × 1.08 = 199.90만 원 (아직 200만 원이 안 됨)
10년 뒤: 199.90만 × 1.08 = 215.89만 원 (200만 원을 넘음 → 멈춤)
이 과정을 코드로 쓰면 아래와 같습니다. "금액이 목표보다 작은 동안 계속 1.08을 곱하라"는 뜻입니다.
자바스크립트 (이 글의 계산기에 들어간 코드)
let 금액 = 100; // 만 원
let 72의 법칙 계산기,자바스크립트,파이썬,프로그래밍 탐구,알고리즘,반복문,로그,컴퓨터공학 진로,소프트웨어공학,정보,세특 주제,년 = 0;
while (금액 < 200) { // 2배인 200만 원이 될 때까지
금액 = 금액 * 1.08;
년 = 년 + 1;
}
// 반복이 끝나면 년 = 10
파이썬 (학교에서 많이 쓰는 언어로 같은 일을 하는 코드)
금액 = 100 # 만 원
년 = 0
while 금액 < 200: # 2배인 200만 원이 될 때까지
금액 = 금액 * 1.08
년 = 년 + 1
print(년, round(금액, 2)) # 출력: 10 215.89
두 언어를 비교해 보면, 자바스크립트는 반복할 부분을 { } 중괄호로 묶고 파이썬은 들여쓰기로 묶는다는 차이만 있습니다.

이 방법은 이해하기 쉽지만 두 가지 한계가 있습니다. 첫째, 답이 "10년"처럼 정수로만 나옵니다. 실제로는 9년이 조금 지나서 2배가 되는데 말이지요. 둘째, 이율이 작으면 반복이 아주 많아집니다. 연 0.1%라면 1.001을 694번 곱해야 2배가 넘습니다(1.001693 ≈ 1.9990, 1.001694 ≈ 2.0010).
③ 계산 방법 2: 로그로 한 번에 계산하기
대수 시간에 배우는 로그를 쓰면 반복 없이 한 번에 답을 구할 수 있습니다. 2배가 되는 기간을 n년이라 하면
100만 × 1.08n = 200만
양변을 100만으로 나누면 → 1.08n = 2
양변에 상용로그를 취하면 → log 1.08n = log 2
로그의 성질 log an = n log a 를 쓰면 → n × log 1.08 = log 2
따라서 → n = log 2 ÷ log 1.08
상용로그표 값을 넣어 계산해 봅시다.
log 2 ≈ 0.3010, log 1.08 ≈ 0.0334
n ≈ 0.3010 ÷ 0.0334 ≈ 9.01년
확인: 1.089 ≈ 1.999 이므로 9년에서 아주 조금 더 지나면 2가 됩니다. ②에서 9년 뒤 199.90만 원이었던 것과 딱 맞습니다. 코드로는 한 줄입니다.
자바스크립트 (이 글의 계산기에 들어간 코드)
const 실제년수 = Math.log(2) / Math.log(1 + 이율 / 100); // 8%면 9.006...
const 법칙년수 = 72 / 이율; // 8%면 9
파이썬 (학교에서 많이 쓰는 언어로 같은 일을 하는 코드)
import math
이율 = 8
실제년수 = math.log(2) / math.log(1 + 이율 / 100) # 9.006...
법칙년수 = 72 / 이율 # 9.0
print(math.log10(2) / math.log10(1.08)) # 상용로그로 해도 9.006...
자바스크립트의 Math.log와 파이썬의 math.log는 상용로그가 아니라 다른 밑을 쓰는 로그지만(파이썬에서 상용로그는 math.log10), 나눗셈 꼴로 쓰면 밑이 무엇이든 결과가 같습니다(로그의 밑 변환 공식). 그래서 상용로그로 손계산한 9.01년과 컴퓨터 결과가 일치합니다.
| 비교 | 방법 1: 반복문 | 방법 2: 로그 공식 |
|---|---|---|
| 연 8%일 때 계산 횟수 | 10번 곱셈 | 나눗셈 1번 |
| 연 0.1%일 때 계산 횟수 | 694번 곱셈 | 나눗셈 1번 |
| 결과 | 10년 (정수) | 9.01년 (소수까지) |
| 장점 | 원리가 눈에 보임 | 빠르고 정확함 |
이것이 컴퓨터공학에서 말하는 알고리즘 비교입니다. 같은 답을 내더라도 이율에 따라 일이 늘어나는 방법과, 언제나 한 번이면 되는 방법이 있습니다. 완성된 계산기에는 방법 2를 썼습니다.
④ 72의 법칙은 얼마나 정확할까: 프로그램으로 검증하기
공식을 만들었으면 정말 맞는지 확인해야 합니다. 프로그램으로 연이율 1%부터 36%까지 0.5%씩 바꿔 가며 72의 법칙 값과 실제 값을 모두 계산해 그래프로 그렸습니다.

| 연이율 | 72의 법칙 | 실제 값 | 오차 |
|---|---|---|---|
| 2% | 36.00년 | 35.00년 | +1.00년 |
| 6% | 12.00년 | 11.90년 | +0.10년 |
| 8% | 9.00년 | 9.01년 | −0.01년 |
| 12% | 6.00년 | 6.12년 | −0.12년 |
| 24% | 3.00년 | 3.22년 | −0.22년 |
8% 근처에서 오차가 거의 0이고, 이율이 아주 낮거나 높아지면 오차가 커집니다. 손으로는 다섯 개만 계산해도 힘들지만, 프로그램은 71개 이율을 순식간에 계산합니다. 이렇게 많은 경우를 빠르게 확인하는 것이 프로그래밍이 탐구에 주는 가장 큰 힘입니다. 위 표는 파이썬으로 이렇게 만들 수 있습니다.
파이썬
import math
for 이율 in [2, 6, 8, 12, 24]:
법칙 = 72 / 이율
실제 = math.log(2) / math.log(1 + 이율 / 100)
print(f"{이율}%: 법칙 {법칙:.2f}년, 실제 {실제:.2f}년, 오차 {법칙 - 실제:+.2f}년")
리스트를 [x / 2 for x in range(2, 73)]로 바꾸면 1%부터 36%까지 0.5% 간격의 71가지를 모두 계산합니다. 결과를 matplotlib으로 그리면 그림3이 됩니다.
⑤ 화면에 그래프 그리기: 좌표 변환은 일차식이다
계산기 안의 그래프는 HTML의 canvas(그림판)에 직접 점을 찍어 그렸습니다. 그런데 여기서 문제가 하나 생깁니다. 수학의 좌표평면은 위로 갈수록 y가 커지지만, 컴퓨터 화면은 왼쪽 위가 (0, 0)이고 아래로 갈수록 y가 커집니다.

그래서 "(9년, 199.9만 원)"이라는 점을 화면의 픽셀 위치로 바꾸는 식이 필요합니다. 그림판 크기는 가로 640픽셀, 세로 320픽셀이고, 눈금 글자를 쓸 여백으로 왼쪽 62, 오른쪽 16, 위 20, 아래 40픽셀을 비웠습니다. 그래프는 0~30년, 0~1006.3만 원(100만 × 1.0830)을 보여 줍니다.
가로 위치: 그래프를 그릴 수 있는 폭 = 640 − 62 − 16 = 562픽셀
x = 62 + 562 × (9 ÷ 30) = 62 + 168.6 = 230.6픽셀
세로 위치: 그래프를 그릴 수 있는 높이 = 320 − 20 − 40 = 260픽셀, 바닥선은 320 − 40 = 280픽셀
y = 280 − 260 × (199.9 ÷ 1006.3) = 280 − 51.6 = 228.4픽셀
세로 식에서 빼기를 쓴 것이 핵심입니다. 금액이 클수록 화면에서는 위쪽, 즉 픽셀 값이 작은 쪽에 찍혀야 하니까요. 두 식 모두 일차식이라는 점도 눈여겨보세요. 게임 화면, 지도 앱, 주식 차트도 모두 이런 좌표 변환으로 그려집니다.
자바스크립트 (이 글의 계산기에 들어간 코드)
const x = t => 62 + 562 * t / 30; // 년 → 가로 픽셀
const y = v => 280 - 260 * v / 1006.3; // 만 원 → 세로 픽셀
파이썬 (학교에서 많이 쓰는 언어로 같은 일을 하는 코드)
x = lambda t: 62 + 562 * t / 30 # 년 → 가로 픽셀
y = lambda v: 280 - 260 * v / 1006.3 # 만 원 → 세로 픽셀
print(round(x(9), 1), round(y(199.9), 1)) # 출력: 230.6 228.4
⑥ 테스트하다 찾은 버그 3가지
프로그램은 처음부터 완벽하게 동작하지 않습니다. 이 계산기도 여러 숫자를 넣어 보며 실제로 아래 버그들을 찾아 고쳤습니다. 소프트웨어공학에서 가장 중요한 단계가 바로 이 테스트와 디버깅입니다.
버그 1: "9년 뒤 200만 원 (아직 2배 전)"이라는 모순된 문장
9년 뒤 금액 199.90만 원을 정수로 반올림해서 "200만 원"으로 보여 줬더니, 2배가 됐는데 "아직 2배 전"이라고 쓰는 이상한 문장이 나왔습니다. 계산은 맞았지만 보여 주는 방식이 틀린 경우입니다. 소수 첫째 자리까지 보여 주도록 바꿔 "199.9만 원"이 되게 고쳤습니다.
버그 2: "709만 원로 2배를 넘어요"
원금 300만 원, 연 24%로 테스트하니 문장이 어색했습니다. "원"은 받침이 있어서 "으로"를 써야 하는데 "로"를 붙였기 때문입니다. 숫자가 바뀌어도 늘 자연스럽도록 "709.3만 원이 되어 2배를 넘어요"처럼 조사가 바뀌지 않는 문장으로 고쳤습니다.
버그 3: 그래프 오른쪽 끝 글자가 잘림
처음에는 그래프를 "2배 되는 기간 × 3"까지만 그렸더니 8배 지점이 그래프 오른쪽 끝에 붙어서 "8배 (27.0년)" 글자가 화면 밖으로 잘렸습니다. 그래프 범위를 3.3배로 넓히고, 오른쪽에 가까운 글자는 점의 왼쪽에 쓰도록 바꿨습니다.
세 버그 모두 "8%, 100만 원" 한 가지만 넣어 봤다면 찾지 못했을 것입니다. 이율을 높게, 원금을 다르게, 화면을 좁게 바꿔 가며 테스트한 덕분에 찾았습니다.
⑦ 완성된 계산기 써 보기
아래 계산기에 숫자를 직접 넣어 보세요. 원금과 연이율을 바꾸면 결과 카드, 설명 문장, 그래프, 표가 바로 바뀝니다. 이율을 30% 이상으로 올려 72의 법칙 오차가 커지는 것도 확인해 보세요.
📈 72의 법칙 계산기
원금과 연이율을 넣으면 돈이 2배가 되는 데 걸리는 시간을 72의 법칙과 실제 복리 계산으로 비교해 줘요.
연 1회 복리 기준이에요. 세금과 수수료는 계산하지 않았어요. 실제 2배 시점은 (1+r)ⁿ = 2 를 만족하는 n을 로그로 구한 값이에요.
⑧ 이 주제로 탐구보고서를 쓴다면
이 글의 과정을 그대로 따라 하면 정보 교과와 대수를 잇는 탐구보고서가 됩니다.
- 탐구 질문과 가설: "72의 법칙은 어느 이율에서 가장 정확할까? 반복문과 로그 공식 중 어떤 알고리즘이 더 효율적일까?" 가설 예시: "이율이 높을수록 72의 법칙의 오차가 커질 것이다."
- 필요한 자료와 방법: 연이율 1%~36%를 0.5%씩 바꾼 71가지 경우. ②의 반복문과 ③의 로그 공식을 각각 코드로 작성하고(파이썬으로 해도 충분합니다), 이율마다 반복 횟수와 결과를 기록합니다. 손계산으로 8%와 24% 두 경우를 직접 확인해 코드가 맞는지 검증합니다.
- 계산과 그래프: 그림3처럼 "이율–오차" 그래프와, 이율이 작아질 때 반복 횟수가 얼마나 늘어나는지(8%는 10번, 0.1%는 694번) 표로 정리합니다.
- 결론과 한계: 72의 법칙은 8% 근처에서 가장 정확하고, 로그 공식은 이율과 관계없이 계산 한 번으로 끝난다는 결론을 냅니다. 한계로 "연 1회 복리만 다뤘다", "세금과 수수료를 빼지 않았다"를 쓰고, 확장 질문으로 "월 복리라면 결과가 어떻게 달라질까?"를 남깁니다.
보고서에는 ⑥처럼 직접 겪은 버그와 고친 과정을 꼭 넣으세요. 결과만 있는 보고서보다 "어디서 막혔고 어떻게 해결했는지"가 있는 보고서가 컴퓨터공학 전공 적합성을 훨씬 잘 보여 줍니다.
⑨ 직접 해 보기 (답은 아래에)
- ②의 반복문을 고쳐서 100만 원이 연 8%로 3배(300만 원)가 되는 해를 구해 보세요.
- 로그로 3배가 되는 정확한 기간을 구해 보세요. (log 3 ≈ 0.4771)
- 2번 답에 8을 곱해 보세요. 3배가 되는 기간에도 "72의 법칙" 같은 규칙을 만들 수 있을까요?
답 보기
1. 14년 뒤 100만 × 1.0814 ≈ 293.7만 원(아직 3배 전), 15년 뒤 ≈ 317.2만 원 → 반복문의 답은 15년입니다. 자바스크립트는 while (금액 < 300), 파이썬은 while 금액 < 300:으로 목표만 바꾸면 됩니다.
2. n = log 3 ÷ log 1.08 ≈ 0.4771 ÷ 0.0334 ≈ 14.3년 (컴퓨터로 계산하면 14.27년)
3. 14.27 × 8 ≈ 114.2 이므로 "114 ÷ 연이율 ≈ 3배 되는 기간"이라는 규칙을 만들 수 있습니다. 114 ÷ 8 = 14.25년으로 실제 값과 0.02년밖에 차이 나지 않습니다. 이것을 흔히 "114의 법칙"이라고 부릅니다.
마무리
"72 ÷ 이율"이라는 한 줄짜리 공식도 계산기로 만들려면 입력 검사, 알고리즘 선택, 좌표 변환, 테스트까지 여러 단계를 거쳐야 합니다. 그리고 그 각 단계에 반복, 로그, 일차식 같은 고등학교 수학이 들어 있습니다. AI가 코드를 대신 써 주는 시대에도, 무엇을 만들지 설계하고 틀린 곳을 찾아내는 힘은 직접 만들어 본 사람만 가질 수 있습니다.
함께 읽으면 좋은 글: 72의 법칙은 왜 성립할까? 지수·로그로 탐구하는 복리의 수학 · RSA 암호의 수학 · 선형회귀 탐구
📚 세특 탐구 주제 시리즈는 계속됩니다. 다음 진로 연계편에서는 대출 이자를 한 달씩 계산해 주는 대출 상환 시뮬레이터를 만들어 볼 예정입니다. 새 탐구 주제를 놓치지 않으려면 블로그를 구독해 주세요.
'교육(학업) > 수학 탐구' 카테고리의 다른 글
| 대출 상환액과 예금·적금 이자는 어떻게 정해질까? 등차·등비수열로 직접 계산하기 (고등학교 수학 탐구) (0) | 2026.11.02 |
|---|---|
| 지수와 로그를 이용한 탄소 연대 측정의 원리 (대수) (0) | 2026.11.02 |
| 72의 법칙은 왜 성립할까? 지수·로그로 탐구하는 복리의 수학 (고등학교 수학 탐구) (0) | 2026.11.01 |
| 고등학교 수학으로 탐구하는 생명과학의 다인자 유전 (3) | 2023.09.13 |
| 최근 수학 교육 연구 동향 (0) | 2023.05.02 |



















