
안녕하세요! 방구석에서 코딩으로 저만의 자본주의 생존 무기를 벼려내고 있는 1인 개발자입니다.
지난 3편에서는 리액트(React)를 켜고 수많은 입력값들을 하나의 캐리어(객체)에 깔끔하게 담아 통제하는 방법을 이야기했죠. 겉모습을 꾸미고 재료 준비까지 다 마쳤으니, 이제 진짜 요리를 시작할 때입니다.
오늘 다룰 이야기는 이 시뮬레이터 프로젝트의 알파이자 오메가, 바로 심장부 역할을 하는 '핵심 알고리즘'입니다. 복잡한 수학 공식이나 골치 아픈 계산식은 다 집어치우고, 오직 자바스크립트(JavaScript)라는 프로그래밍 언어의 순수한 논리만으로 '복리의 마법'을 어떻게 코드로 빚어냈는지 그 짜릿한 과정을 탈탈 털어보겠습니다.
복리의 본질을 코드로 번역하다
파이어족이 배당주에 투자해서 돈을 불려 나가는 과정을 가만히 관찰해 보면, 사실 아주 단순하고 정직한 행동의 무한 반복입니다.
이번 달 월급을 받으면 내가 정해둔 투자금을 주식 계좌에 넣습니다. 그러면 내 원금이 덩치를 키우겠죠? 한 달이 지나면 그 커진 원금을 바탕으로 작고 귀여운 배당금이 나옵니다. 우리는 이 배당금으로 치킨을 사 먹는 게 아니라, 고스란히 다시 주식을 사서 원금에 합쳐버립니다(재투자). 자, 다음 달이 되었습니다. 내 원금은 저번 달보다 커졌으니, 여기서 나오는 배당금도 저번 달보다 미세하게 더 커져 있습니다. 이걸 또 원금에 합칩니다.
이 행동을 수십 년 동안 매월 반복하는 것, 이것이 바로 '눈덩이 굴리기(Snowball Effect)'이자 복리의 본질입니다. 그리고 개발자인 제 눈에 이 과정은 완벽하게 '프로그래밍 반복문'의 형태를 띠고 있었습니다. "아, 이건 컴퓨터한테 매월 똑같은 행동을 시키면 되겠구나!" 하고 무릎을 탁 쳤죠.
For문? 아니, 우리는 언제 끝날지 모르니까 While문!
반복문을 돌리기로 마음먹고 나니, 어떤 반복문을 쓸지 결정해야 했습니다. 자바스크립트에는 대표적으로 정해진 횟수만큼 도는 for문과, 특정 조건이 만족될 때까지 무한히 도는 while문이 있습니다.
만약 "10년 뒤에 내 돈이 얼마가 될까?"를 구하는 일반적인 계산기였다면, 120개월이라는 끝이 정해져 있으니 for문을 썼을 겁니다. 하지만 제 기획의 핵심은 그게 아니었죠. 우리는 "도대체 언제 내 목표액을 채우고 사표를 쓸 수 있을까?"를 찾아내야 합니다. 즉, 목표에 도달하는 그 '날짜(개월 수)'를 모르는 상태에서 시뮬레이션을 시작하는 겁니다.
그래서 저는 while문을 선택했습니다. 컴퓨터에게 이렇게 명령을 내린 겁니다. "야, 컴퓨터야! 지금 내 통장 잔고가 내가 원하는 '최종 목표 금액'에 도달할 때까지 묻지도 따지지도 말고 계속 시간(달)을 돌려!"
이 논리를 자바스크립트 코드로 짜보면 대략 이런 느낌의 아주 직관적인 코드가 탄생합니다.
// 핵심 로직의 뼈대 (수학 공식 없는 순수 논리)
let 현재내돈 = 시드머니;
let 경과한달 = 0; // 0개월부터 시작
// 내 돈이 목표액보다 작을 동안에는 이 굴레(while)를 계속 돌아라!
while (현재내돈 < 최종목표금액) {
// 1. 이번 달 월급에서 투자금을 떼서 통장에 넣는다.
현재내돈 = 현재내돈 + 매월추가투자금;
// 2. 현재 통장 잔고를 기준으로 이번 달 배당금을 계산한다.
let 이번달배당금 = 현재내돈에 한달치 배당수익률을 곱해서 구함;
// 3. 그 배당금을 치킨 안 사먹고 다시 통장에 넣는다! (복리의 핵심)
현재내돈 = 현재내돈 + 이번달배당금;
// 4. 무사히 한 달이 지났으니 달력의 장수를 한 장 넘긴다.
경과한달 = 경과한달 + 1;
}
// while문을 빠져나왔다는 건? 드디어 목표 금액을 달성했다는 뜻!
console.log("당신은 " + 경과한달 + "개월 뒤에 은퇴할 수 있습니다!");
어떠신가요? 수학 기호 하나 없이도, 배당 재투자가 이루어지는 흐름이 코드 속에 아주 예쁘게 녹아들어 갔습니다. 컴퓨터는 이 코드를 0.001초도 안 되는 찰나의 순간에 수백, 수천 번 반복하면서 가상 현실 속의 내 돈을 굴려주고, 마침내 목표를 돌파하는 순간의 '경과한 달'을 뱉어냅니다.

차트를 위한 사진 찍기: 배열(Array)의 활약
자, 은퇴 날짜를 구해냈으니 끝일까요? 아닙니다. 우리는 2편에서 기획했던 멋진 'J커브 상승 그래프'를 화면 아래에 그려줘야 합니다. 그래프를 그리려면 최종 결과만 있어서는 안 됩니다. 1개월 차에는 돈이 이만큼 있었고, 2개월 차에는 이만큼 있었고, 100개월 차에는 이만큼 있었다는 '매월의 기록'이 전부 필요합니다. 그래야 점을 찍고 선을 이어서 아름다운 곡선을 만들 수 있으니까요.
그래서 저는 데이터를 순서대로 차곡차곡 담을 수 있는 자바스크립트의 '배열(Array)'을 꺼내 들었습니다. 빈 상자를 하나 만들어 두고, 아까 열심히 돌리던 while 반복문 안에 "찰칵!" 하고 사진을 찍는 코드를 하나 추가한 거죠.
"컴퓨터야, 매달 돈을 불릴 때마다 이번 달이 몇 년도 몇 월인지, 그리고 지금 통장에 얼마가 들어있는지 메모장에 적어서 내 빈 상자(배열) 안에 차곡차곡 넣어줘!"
코드가 반복문을 한 바퀴 돌 때마다, 자바스크립트의 push()라는 기능을 사용해서 이번 달의 자산 상태를 배열 상자 안에 쏙쏙 밀어 넣습니다. 시뮬레이션이 모두 끝나고 나면, 이 배열 상자 안에는 제가 언제 어떻게 돈을 불려 왔는지에 대한 수백 개월 치의 방대한 빅데이터가 완벽하게 쌓이게 됩니다. 저는 나중에 이 꽉 찬 상자를 통째로 '차트 그리는 컴포넌트'에 툭 던져주기만 하면, 소름 돋게 멋진 초록색 곡선이 화면에 그려지는 완벽한 로직이 완성된 것입니다.

코드가 살아 움직이는 순간의 짜릿함
이 핵심 로직 코드를 완성하고 처음으로 '실행' 버튼을 눌렀던 순간을 잊지 못합니다. 제가 슬라이더로 시드머니를 조금 높이자마자, 내부에서 자바스크립트 반복문이 미친 듯이 돌아가며 0.1초 만에 "은퇴 날짜가 3년 앞당겨졌습니다!" 하고 화면에 뱉어냈을 때의 그 짜릿함이란!
엑셀의 무거운 수식들을 걷어내고, 오로지 저만의 프로그래밍 로직으로 사람의 인생 계획을 계산해 내는 엔진을 만들었다는 성취감은 정말 말로 다 할 수 없었습니다.
가장 굵직한 뼈대이자 엔진인 '복리 시뮬레이터 로직'은 이렇게 자바스크립트로 무사히 구현해 냈습니다. 하지만 아직 끝난 게 아닙니다. 진짜 쓸만한 생존 도구가 되려면 현실 고증이 완벽해야 하거든요. 다음 5편에서는 이 로직에 '물가상승률'이라는 현실의 무서운 괴물과, 이를 방어해 주는 '절세계좌(ISA) 비과세'라는 디테일을 어떻게 코드 속에 매끄럽게 추가했는지 [올인원 배당 파이어족 은퇴 시뮬레이터 메이킹 로그 #05] 현실 고증 200%: 물가상승률과 절세계좌(ISA) 토글 기능 구현기로 돌아오겠습니다. 다음 편도 기대 많이 해주세요!
[올인원 배당 파이어족 은퇴 시뮬레이터 메이킹 로그 #05] 현실 고증 200%: 물가상승률과 절세계좌(
안녕하세요! 방구석에서 코딩이라는 망치질로 자본주의 생존 도구를 다듬고 있는 1인 개발자입니다.지난 4편에서는 자바스크립트의 무한 반복문(While)을 이용해 눈덩이처럼 불어나는 '배당 재투
code-bricks.tistory.com