<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>라이프&amp;amp;머니 계산기 &amp;ndash; 부동산&amp;middot;금융&amp;middot;생활</title>
    <link>https://no1card.tistory.com/</link>
    <description>초보자도 쉽고 빠르게 이용 가능한 올인원 무료 계산기  -  부동산&amp;middot;금융&amp;middot;생활 계산기를 직접 만들어 공유합니다!</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 04:34:25 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hiker's</managingEditor>
    <image>
      <title>라이프&amp;amp;머니 계산기 &amp;ndash; 부동산&amp;middot;금융&amp;middot;생활</title>
      <url>https://tistory1.daumcdn.net/tistory/4982824/attach/211a95be456841c69d900b6d4942bd5e</url>
      <link>https://no1card.tistory.com</link>
    </image>
    <item>
      <title>[경제적 자유 자산배분 계산기] 20대 월급300만원으로 10억 모으는 방법</title>
      <link>https://no1card.tistory.com/entry/%EA%B2%BD%EC%A0%9C%EC%A0%81-%EC%9E%90%EC%9C%A0-%EC%9E%90%EC%82%B0%EB%B0%B0%EB%B6%84-%EA%B3%84%EC%82%B0%EA%B8%B0-20%EB%8C%80-%EC%9B%94%EA%B8%89300%EB%A7%8C%EC%9B%90%EC%9C%BC%EB%A1%9C-10%EC%96%B5-%EB%AA%A8%EC%9C%BC%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEhtBX/btsPuEMXO2I/wXKBeYJCqJ6hxYN0XkVqJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEhtBX/btsPuEMXO2I/wXKBeYJCqJ6hxYN0XkVqJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEhtBX/btsPuEMXO2I/wXKBeYJCqJ6hxYN0XkVqJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEhtBX%2FbtsPuEMXO2I%2FwXKBeYJCqJ6hxYN0XkVqJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot; /&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;
  &lt;title&gt;경제적 자유 포트폴리오 : 투자 수익률 계산기&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;자산별 투자 비중으로 경제적 자유를 달성할 수 있는 연 수익률을 계산해보세요. 주식, 채권, 부동산, 예적금, 가상자산 포함.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;경제적 자유, 포트폴리오 계산기, 자산 배분, 투자 수익률, 연 수익률 계산, 파이어족&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;20대부터 시작하는 경제적 자유 포트폴리오 전략&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;20대를 위한 재무 전략과 투자 포트폴리오 구성법. 지금 시작해야 할 7가지 핵심 전략을 확인하세요.&quot;&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/pretendard@1.3.6/dist/web/static/pretendard.css&quot;&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@4.4.5/dist/chart.min.js&quot;&gt;&lt;/script&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css&quot;&gt;
  &lt;style&gt;
    * {
      box-sizing: border-box;
    }
    body {
      font-family: 'Pretendard', Arial, sans-serif;
      background-color: #f9f9f9;
      color: #333;
      padding: 20px;
      line-height: 1.6;
    }
    h1 {
      text-align: center;
      color: #003366;
      margin-bottom: 30px;
    }
    .calculator {
      max-width: 800px;
      margin: 0 auto;
      background: #fff;
      border-radius: 12px;
      padding: 30px;
      box-shadow: 0 4px 12px rgba(0,0,0,0.05);
    }
    .input-group {
      display: flex;
      flex-wrap: wrap;
      gap: 20px;
      margin-bottom: 15px;
    }
    .input-item {
      flex: 1;
      min-width: 200px;
    }
    label {
      display: block;
      margin-top: 15px;
      font-weight: bold;
      color: #003366;
    }
    input[type=&quot;number&quot;], select {
      width: 100%;
      padding: 10px;
      margin-top: 5px;
      border: 1px solid #ccc;
      border-radius: 8px;
      font-size: 16px;
    }
    input[type=&quot;range&quot;] {
      width: 100%;
      margin-top: 10px;
    }
    input[type=&quot;range&quot;]:focus, button:focus {
      outline: 2px solid #003366;
      outline-offset: 2px;
    }
    .slider-value {
      text-align: right;
      font-size: 14px;
      color: #666;
    }
    button {
      margin-top: 20px;
      width: 100%;
      background-color: #003366;
      color: #fff;
      padding: 12px;
      font-size: 16px;
      border: none;
      border-radius: 8px;
      cursor: pointer;
      transition: background-color 0.3s;
    }
    button:hover {
      background-color: #004080;
    }
    .result {
      margin-top: 30px;
      padding: 20px;
      background: #eef5ff;
      border-radius: 10px;
      line-height: 1.8;
    }
    .result h2 {
      color: #003366;
      margin-top: 0;
      border-bottom: 1px solid #ccc;
      padding-bottom: 10px;
    }
    .portfolio-types {
      display: flex;
      gap: 15px;
      margin-top: 20px;
      flex-wrap: wrap;
    }
    .portfolio-card {
      flex: 1;
      min-width: 200px;
      background: white;
      border-radius: 10px;
      padding: 15px;
      box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    }
    .portfolio-card h3 {
      margin-top: 0;
      color: #003366;
    }
    .asset-list {
      list-style: none;
      padding: 0;
    }
    .asset-list li {
      margin-bottom: 5px;
      display: flex;
      justify-content: space-between;
    }
    .chart-container {
      margin-top: 30px;
      position: relative;
      min-height: 300px;
      height: 400px;
    }
    canvas {
      width: 100% !important;
    }
    .comparison {
      margin-top: 30px;
    }
    .info-icon {
      color: #666;
      margin-left: 5px;
      cursor: help;
    }
    .tooltip {
      position: relative;
      display: inline-block;
    }
    .tooltip .tooltiptext {
      visibility: hidden;
      width: 250px;
      background-color: #555;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 10px;
      position: absolute;
      z-index: 1;
      bottom: 125%;
      left: 50%;
      margin-left: -125px;
      opacity: 0;
      transition: opacity 0.3s;
      font-size: 14px;
      font-weight: normal;
    }
    .tooltip:hover .tooltiptext {
      visibility: visible;
      opacity: 1;
    }
    .tabs {
      display: flex;
      margin-bottom: 20px;
      border-bottom: 1px solid #ccc;
    }
    .tab {
      padding: 10px 20px;
      cursor: pointer;
      background: #f0f0f0;
      border: 1px solid #ccc;
      border-bottom: none;
      border-radius: 5px 5px 0 0;
      margin-right: 5px;
    }
    .tab.active {
      background: #003366;
      color: white;
    }
    .tab-content {
      display: none;
    }
    .tab-content.active {
      display: block;
    }
    .warning {
      color: #cc0000;
      font-weight: bold;
      margin-top: 10px;
    }
    .success {
      color: #4CAF50;
      font-weight: bold;
      margin-top: 10px;
    }
    .positive {
      color: #4CAF50;
    }
    .negative {
      color: #cc0000;
    }
    .chart-row {
      display: flex;
      flex-wrap: wrap;
      gap: 20px;
    }
    .chart-col {
      flex: 1;
      min-width: 300px;
    }
    @media (max-width: 600px) {
      .input-group {
        flex-direction: column;
      }
      .portfolio-types {
        flex-direction: column;
      }
      .chart-row {
        flex-direction: column;
      }
      .tooltip .tooltiptext {
        width: 200px;
        margin-left: -100px;
      }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;  경제적 자유를 위한 자산 배분 포트폴리오 계산기&lt;/h1&gt;
  &lt;div class=&quot;calculator&quot;&gt;
    &lt;div class=&quot;tabs&quot; role=&quot;tablist&quot;&gt;
      &lt;div class=&quot;tab active&quot; onclick=&quot;openTab(event, 'basic')&quot; role=&quot;tab&quot; aria-selected=&quot;true&quot;&gt;기본 설정&lt;/div&gt;
      &lt;div class=&quot;tab&quot; onclick=&quot;openTab(event, 'advanced')&quot; role=&quot;tab&quot; aria-selected=&quot;false&quot;&gt;고급 설정&lt;/div&gt;
      &lt;div class=&quot;tab&quot; onclick=&quot;openTab(event, 'custom')&quot; role=&quot;tab&quot; aria-selected=&quot;false&quot;&gt;커스텀 포트폴리오&lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;basic&quot; class=&quot;tab-content active&quot;&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;salary&quot;&gt;월 급여 (만원)&lt;/label&gt;
          &lt;select id=&quot;salary&quot; aria-label=&quot;월 급여 선택&quot;&gt;
            &lt;option value=&quot;200&quot;&gt;200만 원&lt;/option&gt;
            &lt;option value=&quot;250&quot;&gt;250만 원&lt;/option&gt;
            &lt;option value=&quot;300&quot; selected&gt;300만 원&lt;/option&gt;
            &lt;option value=&quot;350&quot;&gt;350만 원&lt;/option&gt;
            &lt;option value=&quot;400&quot;&gt;400만 원&lt;/option&gt;
            &lt;option value=&quot;500&quot;&gt;500만 원&lt;/option&gt;
            &lt;option value=&quot;custom&quot;&gt;직접 입력&lt;/option&gt;
          &lt;/select&gt;
          &lt;input type=&quot;number&quot; id=&quot;customSalary&quot; style=&quot;display: none; margin-top: 5px;&quot; placeholder=&quot;직접 입력 (만원)&quot; value=&quot;300&quot; min=&quot;0&quot; aria-label=&quot;커스텀 월 급여 입력&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;monthlySaving&quot;&gt;월 저축액 (만원)&lt;/label&gt;
          &lt;input type=&quot;number&quot; id=&quot;monthlySaving&quot; value=&quot;100&quot; min=&quot;0&quot; aria-label=&quot;월 저축액 입력&quot;&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;yearsRange&quot;&gt;투자 기간 (년)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;yearsRange&quot; min=&quot;5&quot; max=&quot;40&quot; value=&quot;20&quot; step=&quot;1&quot; aria-label=&quot;투자 기간 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;yearsValue&quot;&gt;20&lt;/span&gt;년&lt;/div&gt;
          &lt;input type=&quot;number&quot; id=&quot;years&quot; value=&quot;20&quot; min=&quot;5&quot; max=&quot;40&quot; style=&quot;display: none;&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;targetRange&quot;&gt;목표 금액 (억원)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;targetRange&quot; min=&quot;1&quot; max=&quot;10&quot; value=&quot;1&quot; step=&quot;0.5&quot; aria-label=&quot;목표 금액 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;targetValue&quot;&gt;1&lt;/span&gt;억원&lt;/div&gt;
          &lt;input type=&quot;number&quot; id=&quot;targetAmount&quot; value=&quot;1&quot; min=&quot;1&quot; max=&quot;10&quot; step=&quot;0.5&quot; style=&quot;display: none;&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;initialCapital&quot;&gt;초기 자본 (만원)&lt;/label&gt;
          &lt;input type=&quot;number&quot; id=&quot;initialCapital&quot; value=&quot;0&quot; min=&quot;0&quot; aria-label=&quot;초기 자본 입력&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;inflationRate&quot;&gt;연간 인플레이션 (%)&lt;/label&gt;
          &lt;input type=&quot;number&quot; id=&quot;inflationRate&quot; value=&quot;2.5&quot; min=&quot;0&quot; max=&quot;10&quot; step=&quot;0.1&quot; aria-label=&quot;연간 인플레이션 입력&quot;&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;advanced&quot; class=&quot;tab-content&quot;&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;portfolioType&quot;&gt;포트폴리오 유형&lt;/label&gt;
          &lt;select id=&quot;portfolioType&quot; aria-label=&quot;포트폴리오 유형 선택&quot;&gt;
            &lt;option value=&quot;balanced&quot; selected&gt;균형형&lt;/option&gt;
            &lt;option value=&quot;conservative&quot;&gt;안정형&lt;/option&gt;
            &lt;option value=&quot;aggressive&quot;&gt;공격형&lt;/option&gt;
            &lt;option value=&quot;custom&quot;&gt;커스텀&lt;/option&gt;
          &lt;/select&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;riskTolerance&quot;&gt;위험 감내도&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;riskTolerance&quot; min=&quot;1&quot; max=&quot;10&quot; value=&quot;5&quot; aria-label=&quot;위험 감내도 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;
            &lt;span style=&quot;color: #003366;&quot;&gt;안전&lt;/span&gt; 
            &lt;span id=&quot;riskValue&quot;&gt;5&lt;/span&gt;/10 
            &lt;span style=&quot;color: #cc0000;&quot;&gt;공격&lt;/span&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;custom&quot; class=&quot;tab-content&quot;&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;stockPercent&quot;&gt;주식 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;stockPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;30&quot; aria-label=&quot;주식 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;stockValue&quot;&gt;30&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;bondPercent&quot;&gt;국채 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;bondPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;20&quot; aria-label=&quot;국채 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;bondValue&quot;&gt;20&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;dividendPercent&quot;&gt;배당주 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;dividendPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;20&quot; aria-label=&quot;배당주 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;dividendValue&quot;&gt;20&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;realEstatePercent&quot;&gt;부동산 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;realEstatePercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;15&quot; aria-label=&quot;부동산 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;realEstateValue&quot;&gt;15&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;goldPercent&quot;&gt;금 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;goldPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;10&quot; aria-label=&quot;금 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;goldValue&quot;&gt;10&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;cryptoPercent&quot;&gt;가상자산 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;cryptoPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;5&quot; aria-label=&quot;가상자산 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;cryptoValue&quot;&gt;5&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;div class=&quot;input-item&quot;&gt;
          &lt;label for=&quot;savingsPercent&quot;&gt;예적금 (%)&lt;/label&gt;
          &lt;input type=&quot;range&quot; id=&quot;savingsPercent&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;0&quot; aria-label=&quot;예적금 비중 선택&quot;&gt;
          &lt;div class=&quot;slider-value&quot;&gt;&lt;span id=&quot;savingsValue&quot;&gt;0&lt;/span&gt;%&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div id=&quot;customTotalWarning&quot; class=&quot;warning&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;
      &lt;div id=&quot;customTotalSuccess&quot; class=&quot;success&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;
      &lt;div id=&quot;customTotal&quot;&gt;총합: &lt;span id=&quot;totalPercent&quot;&gt;100&lt;/span&gt;%&lt;/div&gt;
    &lt;/div&gt;

    &lt;button onclick=&quot;calculatePortfolio()&quot; aria-label=&quot;경제적 자유 시뮬레이션 실행&quot;&gt;&lt;i class=&quot;fas fa-calculator&quot;&gt;&lt;/i&gt; 경제적 자유 시뮬레이션 실행&lt;/button&gt;

    &lt;div class=&quot;result&quot; id=&quot;result&quot;&gt;
      &lt;h2&gt;  분석 결과&lt;/h2&gt;
      &lt;div id=&quot;resultContent&quot;&gt;계산 버튼을 클릭하여 결과를 확인하세요.&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;portfolio-types&quot; id=&quot;portfolioRecommendations&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;chart-row&quot;&gt;
      &lt;div class=&quot;chart-col&quot;&gt;
        &lt;div class=&quot;chart-container&quot;&gt;
          &lt;canvas id=&quot;wealthChart&quot; aria-label=&quot;자산 성장 차트&quot;&gt;&lt;/canvas&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;chart-col&quot;&gt;
        &lt;div class=&quot;chart-container&quot;&gt;
          &lt;canvas id=&quot;portfolioChart&quot; aria-label=&quot;포트폴리오 비중 차트&quot;&gt;&lt;/canvas&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;comparison chart-container&quot;&gt;
      &lt;canvas id=&quot;comparisonChart&quot; aria-label=&quot;포트폴리오 비교 차트&quot;&gt;&lt;/canvas&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;script&gt;
    // 차트 객체 관리
    let assetChart = null;
    let portfolioPieChart = null;
    let comparisonChart = null;
    let yearlyData = [];

    // 디바운스 타이머
    let debounceTimer = null;

    // 초기화 함수
    function initialize() {
      // 슬라이더와 입력 동기화
      document.getElementById('yearsRange').addEventListener('input', function() {
        document.getElementById('yearsValue').textContent = this.value;
        document.getElementById('years').value = this.value;
      });

      document.getElementById('targetRange').addEventListener('input', function() {
        document.getElementById('targetValue').textContent = this.value;
        document.getElementById('targetAmount').value = this.value;
      });

      document.getElementById('riskTolerance').addEventListener('input', function() {
        document.getElementById('riskValue').textContent = this.value;
      });

      // 자산 할당 슬라이더
      const assetSliders = ['stock', 'bond', 'dividend', 'realEstate', 'gold', 'crypto', 'savings'];
      assetSliders.forEach(asset =&gt; {
        const slider = document.getElementById(`${asset}Percent`);
        const valueSpan = document.getElementById(`${asset}Value`);
        slider.addEventListener('input', function() {
          valueSpan.textContent = this.value;
          updateCustomPortfolio();
        });
      });

      // 사용자 정의 급여 입력 처리
      document.getElementById('salary').addEventListener('change', function() {
        const customSalaryInput = document.getElementById('customSalary');
        if (this.value === 'custom') {
          customSalaryInput.style.display = 'block';
          customSalaryInput.focus();
        } else {
          customSalaryInput.style.display = 'none';
          document.getElementById('monthlySaving').dispatchEvent(new Event('input'));
        }
      });

      // 월 저축액 유효성 검사
      document.getElementById('monthlySaving').addEventListener('input', function() {
        validateMonthlySaving();
      });

      // 사용자 정의 급여 유효성 검사
      document.getElementById('customSalary').addEventListener('input', function() {
        validateMonthlySaving();
      });

      // 포트폴리오 유형 변경 처리
      document.getElementById('portfolioType').addEventListener('change', function() {
        if (this.value === 'custom') {
          openTab(null, 'custom');
        }
      });

      // 초기 로드 시 결과 불러오기
      loadResults();
      updateCustomPortfolio();
    }

    // 월 저축액 유효성 검사
    function validateMonthlySaving() {
      const salarySelect = document.getElementById('salary');
      const customSalary = document.getElementById('customSalary');
      const salary = salarySelect.value === 'custom' 
        ? parseFloat(customSalary.value) || 0
        : parseFloat(salarySelect.value);
      const saving = parseFloat(document.getElementById('monthlySaving').value) || 0;
      
      const salaryInput = salarySelect.value === 'custom' ? customSalary : salarySelect;
      
      if (salary &lt;= 0) {
        salaryInput.style.borderColor = '#cc0000';
        document.getElementById('resultContent').innerHTML = '&lt;p class=&quot;warning&quot;&gt;월 급여는 0보다 커야 합니다.&lt;/p&gt;';
        return false;
      } else {
        salaryInput.style.borderColor = '#ccc';
      }
      
      if (saving &gt; salary) {
        document.getElementById('monthlySaving').style.borderColor = '#cc0000';
        document.getElementById('resultContent').innerHTML = '&lt;p class=&quot;warning&quot;&gt;월 저축액은 월 급여를 초과할 수 없습니다.&lt;/p&gt;';
        return false;
      } else if (saving &lt;= 0) {
        document.getElementById('monthlySaving').style.borderColor = '#cc0000';
        document.getElementById('resultContent').innerHTML = '&lt;p class=&quot;warning&quot;&gt;월 저축액은 0보다 커야 합니다.&lt;/p&gt;';
        return false;
      } else {
        document.getElementById('monthlySaving').style.borderColor = '#ccc';
        document.getElementById('resultContent').innerHTML = '계산 버튼을 클릭하여 결과를 확인하세요.';
        return true;
      }
    }

    // 탭 전환 함수
    function openTab(evt, tabName) {
      const tabContents = document.getElementsByClassName('tab-content');
      for (let i = 0; i &lt; tabContents.length; i++) {
        tabContents[i].classList.remove('active');
        tabContents[i].setAttribute('aria-hidden', 'true');
      }
      
      const tabs = document.getElementsByClassName('tab');
      for (let i = 0; i &lt; tabs.length; i++) {
        tabs[i].classList.remove('active');
        tabs[i].setAttribute('aria-selected', 'false');
      }
      
      document.getElementById(tabName).classList.add('active');
      document.getElementById(tabName).setAttribute('aria-hidden', 'false');
      if (evt) {
        evt.currentTarget.classList.add('active');
        evt.currentTarget.setAttribute('aria-selected', 'true');
      } else {
        const tabIndex = Array.from(tabs).findIndex(tab =&gt; tab.onclick.toString().includes(tabName));
        if (tabIndex &gt;= 0) {
          tabs[tabIndex].classList.add('active');
          tabs[tabIndex].setAttribute('aria-selected', 'true');
        }
      }
    }

    // 사용자 정의 포트폴리오 업데이트
    function updateCustomPortfolio() {
      clearTimeout(debounceTimer);
      debounceTimer = setTimeout(() =&gt; {
        const total = ['stock', 'bond', 'dividend', 'realEstate', 'gold', 'crypto', 'savings'].reduce((sum, asset) =&gt; {
          return sum + parseInt(document.getElementById(`${asset}Percent`).value);
        }, 0);
        
        document.getElementById('totalPercent').textContent = total;
        
        const warningElement = document.getElementById('customTotalWarning');
        const successElement = document.getElementById('customTotalSuccess');
        
        if (total !== 100) {
          document.getElementById('portfolioType').value = 'custom';
          warningElement.style.display = 'block';
          successElement.style.display = 'none';
          warningElement.textContent = `경고: 자산 비중 합계가 100%가 아닙니다 (현재 ${total}%)`;
          warningElement.style.color = total &gt; 100 ? '#cc0000' : '#ff9900';
        } else {
          warningElement.style.display = 'none';
          successElement.style.display = 'block';
          successElement.textContent = '자산 비중 합계가 100%로 적절합니다.';
        }
      }, 300);
    }

    // 값에 따른 색상 반환 함수
    function getValueColor(value) {
      return value &gt;= 0 ? 'positive' : 'negative';
    }

    // 포트폴리오 계산 함수
    function calculatePortfolio() {
      // 입력 유효성 검사
      if (!validateMonthlySaving()) {
        return;
      }

      const salarySelect = document.getElementById('salary');
      const customSalary = document.getElementById('customSalary');
      const salary = salarySelect.value === 'custom' 
        ? parseFloat(customSalary.value) || 0
        : parseFloat(salarySelect.value);
      
      const saving = parseFloat(document.getElementById('monthlySaving').value) * 10000;
      const years = parseInt(document.getElementById('years').value);
      const targetAmount = parseFloat(document.getElementById('targetAmount').value) * 100000000;
      const initialCapital = Math.max(0, parseFloat(document.getElementById('initialCapital').value) * 10000 || 0);
      const inflationRate = parseFloat(document.getElementById('inflationRate').value) / 100;
      const portfolioType = document.getElementById('portfolioType').value;
      const riskTolerance = parseInt(document.getElementById('riskTolerance').value);

      // 사용자 정의 포트폴리오 총합 검사
      if (portfolioType === 'custom') {
        const total = ['stock', 'bond', 'dividend', 'realEstate', 'gold', 'crypto', 'savings'].reduce((sum, asset) =&gt; {
          return sum + parseInt(document.getElementById(`${asset}Percent`).value);
        }, 0);
        
        if (total !== 100) {
          alert(`자산 비중 합계가 100%가 되어야 합니다. 현재 ${total}% 입니다.`);
          return;
        }
      }

      // 포트폴리오 정의
      const portfolios = {
        'conservative': {
          국채: 40,
          배당주: 20,
          예적금: 20,
          금: 10,
          부동산: 10,
          설명: &quot;안정적인 수익을 추구하는 포트폴리오로, 변동성이 낮지만 수익률도 상대적으로 낮습니다.&quot;
        },
        'balanced': {
          주식: 30,
          국채: 20,
          배당주: 20,
          부동산: 15,
          금: 10,
          가상자산: 5,
          설명: &quot;안정성과 성장을 균형있게 추구하는 포트폴리오로, 대부분의 투자자에게 적합합니다.&quot;
        },
        'aggressive': {
          주식: 40,
          배당주: 20,
          가상자산: 15,
          부동산: 10,
          금: 10,
          예적금: 5,
          설명: &quot;높은 수익을 추구하는 포트폴리오로, 변동성이 크지만 장기적으로 높은 수익을 기대할 수 있습니다.&quot;
        },
        'custom': {
          주식: parseInt(document.getElementById('stockPercent').value),
          국채: parseInt(document.getElementById('bondPercent').value),
          배당주: parseInt(document.getElementById('dividendPercent').value),
          부동산: parseInt(document.getElementById('realEstatePercent').value),
          금: parseInt(document.getElementById('goldPercent').value),
          가상자산: parseInt(document.getElementById('cryptoPercent').value),
          예적금: parseInt(document.getElementById('savingsPercent').value),
          설명: &quot;사용자가 직접 구성한 커스텀 포트폴리오입니다.&quot;
        }
      };

      // 자산 기대 수익률 (위험 감내도에 따라 조정)
      const baseReturns = {
        주식: 0.08,
        국채: 0.03,
        배당주: 0.07,
        부동산: 0.05,
        예적금: 0.025,
        금: 0.04,
        가상자산: 0.12
      };

      const riskFactor = riskTolerance / 5; // 0.2 to 2
      const expectedReturns = {};
      for (const asset in baseReturns) {
        if (asset === '국채' || asset === '예적금') {
          expectedReturns[asset] = baseReturns[asset] * (1 - (riskTolerance - 5) / 20);
        } else if (asset === '가상자산') {
          expectedReturns[asset] = baseReturns[asset] * riskFactor;
        } else {
          expectedReturns[asset] = baseReturns[asset] * (0.8 + riskTolerance / 25);
        }
      }

      // 선택한 포트폴리오의 기대 수익률 계산
      const selectedPortfolio = portfolios[portfolioType];
      let totalReturn = 0;
      for (const asset in selectedPortfolio) {
        if (asset !== '설명' &amp;&amp; expectedReturns[asset]) {
          totalReturn += (selectedPortfolio[asset] / 100) * expectedReturns[asset];
        }
      }

      // 자산 성장 시뮬레이션
      let totalAsset = initialCapital;
      let totalContribution = 0;
      yearlyData = [];
      let achievedYear = null;
      let monthlyContribution = saving;
      let excessAmount = 0;
      let excessYears = 0;

      for (let i = 1; i &lt;= years; i++) {
        if (i &gt; 1) {
          monthlyContribution *= (1 + inflationRate);
        }
        
        totalContribution += monthlyContribution * 12;
        const prevAsset = totalAsset;
        totalAsset = (totalAsset + monthlyContribution * 12) * (1 + totalReturn);
        
        yearlyData.push({ 
          year: i, 
          asset: totalAsset,
          contribution: monthlyContribution * 12,
          growth: totalAsset - prevAsset - (monthlyContribution * 12)
        });
        
        if (totalAsset &gt;= targetAmount &amp;&amp; achievedYear === null) {
          achievedYear = i;
          excessAmount = totalAsset - targetAmount;
          excessYears = years - i;
        }
      }

      // 총 수익률 및 연평균 수익률 계산
      const totalReturnRate = ((totalAsset - initialCapital - totalContribution) / (initialCapital + totalContribution)) * 100;
      const annualizedReturn = (Math.pow(totalAsset / (initialCapital + totalContribution), 1 / years) - 1) * 100;
      const realAnnualizedReturn = ((1 + annualizedReturn/100) / (1 + inflationRate) - 1) * 100;

      // 샤프 비율 계산
      const riskFreeRate = 0.02;
      const portfolioVolatility = riskTolerance * 0.02;
      const sharpeRatio = (totalReturn - riskFreeRate) / portfolioVolatility;

      // 인플레이션 조정 목표 금액
      const inflationAdjustedTarget = targetAmount * Math.pow(1 + inflationRate, achievedYear ?? years);

      // 초기 자본 증가율 계산 (초기 자본이 0보다 큰 경우에만)
      const initialCapitalGrowth = initialCapital &gt; 0 
        ? ((totalAsset / initialCapital - 1) * 100).toFixed(2)
        : 'N/A (초기 자본 없음)';
      
      // 결과 표시
      const resultHTML = `
        &lt;div class=&quot;summary&quot;&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-wallet&quot;&gt;&lt;/i&gt; &lt;strong&gt;월 ${salary}만 원&lt;/strong&gt; 중 &lt;strong&gt;${(saving / 10000).toLocaleString()}만 원&lt;/strong&gt; 저축 (${((saving / (salary * 10000)) * 100).toFixed(1)}%)&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-bullseye&quot;&gt;&lt;/i&gt; &lt;strong&gt;목표 금액:&lt;/strong&gt; ${(targetAmount / 100000000).toLocaleString()}억원&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-calendar-alt&quot;&gt;&lt;/i&gt; &lt;strong&gt;투자 기간:&lt;/strong&gt; ${years}년&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-chart-line&quot;&gt;&lt;/i&gt; &lt;strong&gt;예상 연평균 수익률 (CAGR):&lt;/strong&gt; &lt;span class=&quot;${getValueColor(annualizedReturn)}&quot;&gt;${annualizedReturn.toFixed(2)}%&lt;/span&gt;&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-inflation&quot;&gt;&lt;/i&gt; &lt;strong&gt;실질 연평균 수익률 (인플레이션 조정):&lt;/strong&gt; &lt;span class=&quot;${getValueColor(realAnnualizedReturn)}&quot;&gt;${realAnnualizedReturn.toFixed(2)}%&lt;/span&gt;&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-chart-bar&quot;&gt;&lt;/i&gt; &lt;strong&gt;샤프 비율:&lt;/strong&gt; ${sharpeRatio.toFixed(2)}&lt;/p&gt;
          &lt;hr&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-trophy&quot;&gt;&lt;/i&gt; &lt;strong&gt;목표 달성 예상 시점:&lt;/strong&gt; ${achievedYear ? achievedYear + '년 후' : '도달 불가'}&lt;/p&gt;
          ${achievedYear ? `&lt;p&gt;&lt;i class=&quot;fas fa-coins&quot;&gt;&lt;/i&gt; &lt;strong&gt;목표 달성 시 초과 금액:&lt;/strong&gt; ${Math.round(excessAmount / 10000).toLocaleString()}만원 (${excessYears}년 초과)&lt;/p&gt;` : ''}
          &lt;p&gt;&lt;i class=&quot;fas fa-inflation&quot;&gt;&lt;/i&gt; &lt;strong&gt;물가 반영 목표 금액 (${achievedYear ?? years}년 후):&lt;/strong&gt; 약 ${Math.round(inflationAdjustedTarget / 100000000).toLocaleString()}억원&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-coins&quot;&gt;&lt;/i&gt; &lt;strong&gt;최종 예상 자산:&lt;/strong&gt; ${Math.round(totalAsset / 10000).toLocaleString()}만원&lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-percentage&quot;&gt;&lt;/i&gt; &lt;strong&gt;초기 자본 증가율:&lt;/strong&gt; 
            ${typeof initialCapitalGrowth === 'string' ? initialCapitalGrowth : `&lt;span class=&quot;${getValueColor(initialCapitalGrowth)}&quot;&gt;${initialCapitalGrowth}%&lt;/span&gt;`} 
            (초기 자본 ${(initialCapital/10000).toLocaleString()}만원 대비)
          &lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-money-bill-trend-up&quot;&gt;&lt;/i&gt; &lt;strong&gt;투자 수익률:&lt;/strong&gt; 
            &lt;span class=&quot;${getValueColor(totalReturnRate)}&quot;&gt;${totalReturnRate.toFixed(2)}%&lt;/span&gt; 
            (총 투자 원금 ${((initialCapital + totalContribution)/10000).toLocaleString()}만원 대비)
          &lt;/p&gt;
          &lt;p&gt;&lt;i class=&quot;fas fa-chart-pie&quot;&gt;&lt;/i&gt; &lt;strong&gt;포트폴리오 유형:&lt;/strong&gt; ${portfolioType === 'conservative' ? '안정형' : portfolioType === 'balanced' ? '균형형' : portfolioType === 'aggressive' ? '공격형' : '커스텀'}&lt;/p&gt;
          &lt;button onclick=&quot;exportToCSV()&quot; aria-label=&quot;결과를 CSV로 내보내기&quot;&gt;결과 CSV로 내보내기&lt;/button&gt;
        &lt;/div&gt;
      `;

      document.getElementById('resultContent').innerHTML = resultHTML;

      // 포트폴리오 추천 표시
      renderPortfolioRecommendations(portfolios, expectedReturns, portfolioType);

      // 자산 성장 차트 생성
      renderWealthChart(targetAmount, years, initialCapital);

      // 포트폴리오 할당 차트 생성
      renderPortfolioChart(selectedPortfolio);

      // 포트폴리오 비교 차트 생성
      renderComparisonChart(portfolios, expectedReturns, portfolioType, years, initialCapital, saving, inflationRate);

      // 결과 저장
      saveResults();
    }

    // 포트폴리오 추천 렌더링
    function renderPortfolioRecommendations(portfolios, expectedReturns, currentPortfolioType) {
      let portfolioHTML = '';
      
      for (const type in portfolios) {
        if (type === 'custom') continue;
        
        let portfolioReturn = 0;
        for (const asset in portfolios[type]) {
          if (asset !== '설명' &amp;&amp; expectedReturns[asset]) {
            portfolioReturn += (portfolios[type][asset] / 100) * expectedReturns[asset];
          }
        }
        
        const isCurrent = type === currentPortfolioType;
        
        portfolioHTML += `
          &lt;div class=&quot;portfolio-card&quot; ${isCurrent ? 'style=&quot;border: 2px solid #003366;&quot;' : ''}&gt;
            &lt;h3&gt;${type === 'conservative' ? '안정형' : type === 'balanced' ? '균형형' : '공격형'} 포트폴리오
              &lt;span class=&quot;tooltip&quot;&gt;
                &lt;i class=&quot;fas fa-info-circle info-icon&quot;&gt;&lt;/i&gt;
                &lt;span class=&quot;tooltiptext&quot;&gt;${portfolios[type].설명}&lt;/span&gt;
              &lt;/span&gt;
              &lt;small&gt;(${(portfolioReturn * 100).toFixed(2)}%)&lt;/small&gt;
              ${isCurrent ? '&lt;span style=&quot;color:#003366;font-size:0.8em;&quot;&gt;(현재 선택)&lt;/span&gt;' : ''}
            &lt;/h3&gt;
            &lt;ul class=&quot;asset-list&quot;&gt;
        `;
        
        for (const asset in portfolios[type]) {
          if (asset !== '설명') {
            portfolioHTML += `&lt;li&gt;${asset}: &lt;strong&gt;${portfolios[type][asset]}%&lt;/strong&gt;&lt;/li&gt;`;
          }
        }
        
        portfolioHTML += `
            &lt;/ul&gt;
          &lt;/div&gt;
        `;
      }
      
      document.getElementById('portfolioRecommendations').innerHTML = portfolioHTML;
    }

    // 자산 성장 차트 렌더링
    function renderWealthChart(targetAmount, years, initialCapital) {
      const ctx = document.getElementById('wealthChart').getContext('2d');
      
      if (assetChart) {
        assetChart.destroy();
      }
      
      assetChart = new Chart(ctx, {
        type: 'line',
        data: {
          labels: yearlyData.map(d =&gt; `${d.year}년`),
          datasets: [{
            label: '총 자산',
            data: yearlyData.map(d =&gt; d.asset),
            borderColor: '#003366',
            backgroundColor: 'rgba(0, 51, 102, 0.1)',
            fill: true,
            tension: 0.3
          }, {
            label: '목표 금액',
            data: yearlyData.map(d =&gt; targetAmount),
            borderColor: '#cc0000',
            borderDash: [5, 5],
            backgroundColor: 'rgba(204, 0, 0, 0.05)',
            fill: true
          }, {
            label: '투자 원금',
            data: yearlyData.map(d =&gt; d.contribution + (d.year === 1 ? initialCapital : 0)),
            borderColor: '#4CAF50',
            backgroundColor: 'rgba(76, 175, 80, 0.1)',
            fill: true,
            tension: 0.3
          }]
        },
        options: getChartOptions('자산 성장 추이')
      });
    }

    // 포트폴리오 할당 차트 렌더링
    function renderPortfolioChart(selectedPortfolio) {
      const portfolioCtx = document.getElementById('portfolioChart').getContext('2d');
      
      if (portfolioPieChart) {
        portfolioPieChart.destroy();
      }
      
      const portfolioLabels = [];
      const portfolioData = [];
      const backgroundColors = [
        'rgba(54, 162, 235, 0.7)',
        'rgba(75, 192, 192, 0.7)',
        'rgba(255, 206, 86, 0.7)',
        'rgba(153, 102, 255, 0.7)',
        'rgba(255, 159, 64, 0.7)',
        'rgba(199, 199, 199, 0.7)',
        'rgba(255, 99, 132, 0.7)'
      ];
      
      for (const asset in selectedPortfolio) {
        if (asset !== '설명' &amp;&amp; selectedPortfolio[asset] &gt; 0) {
          portfolioLabels.push(asset);
          portfolioData.push(selectedPortfolio[asset]);
        }
      }
      
      portfolioPieChart = new Chart(portfolioCtx, {
        type: 'doughnut',
        data: {
          labels: portfolioLabels,
          datasets: [{
            data: portfolioData,
            backgroundColor: backgroundColors.slice(0, portfolioLabels.length),
            borderWidth: 1
          }]
        },
        options: {
          responsive: true,
          maintainAspectRatio: false,
          animation: {
            duration: 1000,
            easing: 'easeInOutQuad'
          },
          plugins: {
            legend: {
              position: 'right',
              labels: {
                font: { size: 14, family: 'Pretendard, Arial, sans-serif' },
                color: '#003366'
              }
            },
            title: {
              display: true,
              text: '포트폴리오 자산 배분',
              font: { size: 16, family: 'Pretendard, Arial, sans-serif' },
              color: '#003366'
            },
            tooltip: {
              callbacks: {
                label: function(context) {
                  const label = context.label || '';
                  const value = context.raw;
                  const total = context.dataset.data.reduce((a, b) =&gt; a + b, 0);
                  const percentage = Math.round((value / total) * 100);
                  return `${label}: ${value}% (${percentage}%)`;
                }
              }
            }
          },
          cutout: '60%',
        }
      });
    }

    // 포트폴리오 비교 차트 렌더링
    function renderComparisonChart(portfolios, expectedReturns, currentPortfolioType, years, initialCapital, saving, inflationRate) {
      const comparisonCtx = document.getElementById('comparisonChart').getContext('2d');
      
      if (comparisonChart) {
        comparisonChart.destroy();
      }
      
      const comparisonData = [];
      
      // 다른 포트폴리오 유형에 대한 데이터 생성
      for (const type in portfolios) {
        if (type === 'custom' &amp;&amp; currentPortfolioType !== 'custom') continue;
        
        let portfolioReturn = 0;
        for (const asset in portfolios[type]) {
          if (asset !== '설명' &amp;&amp; expectedReturns[asset]) {
            portfolioReturn += (portfolios[type][asset] / 100) * expectedReturns[asset];
          }
        }
        
        let compareAsset = initialCapital;
        let compareValue = [];
        let compareContribution = saving * 12;
        
        for (let i = 1; i &lt;= years; i++) {
          compareAsset = (compareAsset + compareContribution) * (1 + portfolioReturn);
          compareValue.push(compareAsset);
          
          if (i &gt; 1) {
            compareContribution *= (1 + inflationRate);
          }
        }
        
        const isCurrent = type === currentPortfolioType;
        
        comparisonData.push({
          label: type === 'conservative' ? '안정형' : 
                type === 'balanced' ? '균형형' : 
                type === 'aggressive' ? '공격형' : '내 포트폴리오',
          data: compareValue,
          borderColor: type === 'conservative' ? '#4CAF50' : 
                      type === 'balanced' ? '#003366' : 
                      type === 'aggressive' ? '#FF5722' : '#9C27B0',
          backgroundColor: type === 'conservative' ? 'rgba(76, 175, 80, 0.1)' : 
                          type === 'balanced' ? 'rgba(0, 51, 102, 0.1)' : 
                          type === 'aggressive' ? 'rgba(255, 87, 34, 0.1)' : 'rgba(156, 39, 176, 0.1)',
          borderWidth: isCurrent ? 3 : 1,
          fill: true,
          tension: 0.3
        });
      }
      
      comparisonChart = new Chart(comparisonCtx, {
        type: 'line',
        data: {
          labels: Array.from({length: years}, (_, i) =&gt; `${i+1}년`),
          datasets: comparisonData
        },
        options: getChartOptions('포트폴리오 유형별 비교')
      });
    }

    // 공통 차트 옵션
    function getChartOptions(title) {
      return {
        responsive: true,
        maintainAspectRatio: false,
        animation: {
          duration: 1000,
          easing: 'easeInOutQuad'
        },
        plugins: {
          legend: {
            labels: {
              font: { size: 14, family: 'Pretendard, Arial, sans-serif' },
              color: '#003366'
            }
          },
          title: {
            display: true,
            text: title,
            font: { size: 16, family: 'Pretendard, Arial, sans-serif' },
            color: '#003366'
          },
          tooltip: {
            callbacks: {
              label: function(context) {
                let label = context.dataset.label || '';
                if (label) label += ': ';
                const value = context.raw;
                if (value &gt;= 100000000) {
                  return label + (value / 100000000).toFixed(1) + '억원';
                } else if (value &gt;= 10000) {
                  return label + (value / 10000).toFixed(1) + '만원';
                }
                return label + value.toLocaleString() + '원';
              }
            }
          }
        },
        scales: {
          y: {
            title: {
              display: true,
              text: '자산 규모 (원)'
            },
            ticks: {
              callback: function(value) {
                if (value &gt;= 100000000) {
                  return (value / 100000000).toLocaleString() + '억';
                } else if (value &gt;= 10000) {
                  return (value / 10000).toLocaleString() + '만';
                }
                return value.toLocaleString();
              }
            }
          }
        }
      };
    }

    // 결과 저장
    function saveResults() {
      const result = document.getElementById('resultContent').innerHTML;
      localStorage.setItem('portfolioResult', result);
    }

    // 결과 불러오기
    function loadResults() {
      const savedResult = localStorage.getItem('portfolioResult');
      if (savedResult) {
        document.getElementById('resultContent').innerHTML = savedResult;
      }
    }

    // CSV로 내보내기
    function exportToCSV() {
      if (!yearlyData.length) {
        alert('먼저 계산을 실행하여 데이터를 생성해주세요.');
        return;
      }
      
      try {
        const headers = ['연도,총 자산(만원),투자 원금(만원),수익(만원)'];
        const rows = yearlyData.map(d =&gt; `${d.year},${(d.asset / 10000).toFixed(1)},${(d.contribution / 10000).toFixed(1)},${(d.growth / 10000).toFixed(1)}`);
        const csv = headers.concat(rows).join('\n');
        const blob = new Blob([&quot;\uFEFF&quot; + csv], { type: 'text/csv;charset=utf-8;' });
        const url = window.URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'portfolio_result.csv';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        window.URL.revokeObjectURL(url);
      } catch (error) {
        console.error('CSV export error:', error);
        alert('CSV 내보내기 중 오류가 발생했습니다.');
      }
    }

    // 초기화 실행
    window.addEventListener('DOMContentLoaded', initialize);
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경제적 자유를 꿈꾸는 모든 이들을 위한 자산 배분 수익률 계산기&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot; data-tight=&quot;true&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#about&quot;&gt;경제적 자유 포트폴리오 계산기는&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#category&quot;&gt;주요 기능&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#location&quot;&gt;사용 방법&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#port&quot;&gt;포트폴리오 유형&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#chart&quot;&gt;차트 및 분석&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why&quot;&gt;왜 이 계산기를 사용해야 하나?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;#about&quot; data-ke-size=&quot;size26&quot;&gt;경제적자유를 위한 포트폴리오 계산기는?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경제적 자유를 꿈꾸는 분들을 위해 설계된 &lt;b&gt;경제적 자유 포트폴리오 수익률 계산기&lt;/b&gt;는 투자 목표를 달성하기 위한 맞춤형 자산 배분 전략을 제공합니다. 이 도구는 주식, 채권, 부동산, 예적금, 가상자산 등 다양한 자산 클래스를 기반으로 연평균 수익률과 목표 달성 시점을 예측합니다. 사용자는 월 급여, 저축액, 투자 기간, 초기 자본 등을 입력하여 개인화된 투자 계획을 세울 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 계산기는 초보 투자자부터 전문 투자자까지 모두에게 적합하며, 직관적인 인터페이스와 시각적 차트를 통해 복잡한 투자 계산을 쉽게 이해할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h2 id=&quot;#category&quot; data-ke-size=&quot;size26&quot;&gt;주요 기능&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자산 배분 설정&lt;/b&gt;: 주식, 국채, 배당주, 부동산, 금, 가상자산, 예적금의 비중을 자유롭게 조정 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;위험 감내도 조정&lt;/b&gt;: 1(안전)에서 10(공격)까지의 위험 선호도를 설정하여 수익률을 최적화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인플레이션 반영&lt;/b&gt;: 연간 인플레이션율을 입력하여 물가 상승에 따른 목표 금액을 계산.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트폴리오 비교&lt;/b&gt;: 안정형, 균형형, 공격형 포트폴리오를 비교하여 최적의 전략 선택 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CSV 내보내기&lt;/b&gt;: 계산 결과를 CSV 파일로 저장하여 오프라인 분석 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실시간 검증&lt;/b&gt;: 월 저축액이 급여를 초과하지 않도록 실시간 경고 표시.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;#location&quot; data-ke-size=&quot;size26&quot;&gt;사용 방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;기본 설정 입력&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;월 급여와 저축액을 입력하거나, &quot;직접 입력&quot;을 선택해 커스텀 금액 설정.&lt;/li&gt;
&lt;li&gt;투자 기간(5~40년)과 목표 금액(1~10억 원)을 슬라이더로 조정.&lt;/li&gt;
&lt;li&gt;초기 자본과 예상 인플레이션율 입력.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고급 설정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포트폴리오 유형(안정형, 균형형, 공격형, 커스텀) 선택.&lt;/li&gt;
&lt;li&gt;위험 감내도를 설정하여 투자 성향 반영.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커스텀 포트폴리오&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 자산(주식, 국채 등)의 비중을 슬라이더로 조정. 총합이 100%가 되도록 설정.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계산 실행&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;경제적 자유 시뮬레이션 실행&quot; 버튼을 클릭하여 결과를 확인.&lt;/li&gt;
&lt;li&gt;결과에는 연평균 수익률, 샤프 비율, 목표 달성 시점, 최종 자산 등이 포함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과 분석&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;차트를 통해 자산 성장, 포트폴리오 비중, 비교 분석 확인.&lt;/li&gt;
&lt;li&gt;결과를 CSV로 내보내기 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;#prot&quot; data-ke-size=&quot;size26&quot;&gt;포트폴리오 유형&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;안정형&lt;/b&gt;: 국채(40%), 배당주(20%), 예적금(20%) 중심으로 안정적 수익 추구.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;균형형&lt;/b&gt;: 주식(30%), 국채(20%), 부동산(15%) 등으로 안정성과 성장 균형.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공격형&lt;/b&gt;: 주식(40%), 가상자산(15%) 중심으로 높은 수익률 목표.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커스텀&lt;/b&gt;: 사용자가 자산 비중을 자유롭게 설정하여 맞춤형 전략 구성.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;#chart&quot; data-ke-size=&quot;size26&quot;&gt;차트 및 분석&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자산 성장 차트&lt;/b&gt;: 투자 기간 동안 총 자산, 투자 원금, 목표 금액의 변화를 시각화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트폴리오 비중 차트&lt;/b&gt;: 선택한 포트폴리오의 자산 배분을 도넛 차트로 표시.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트폴리오 비교 차트&lt;/b&gt;: 안정형, 균형형, 공격형 포트폴리오의 예상 자산 성장을 비교.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;샤프 비율&lt;/b&gt;: 위험 대비 수익률을 평가하여 포트폴리오 효율성 분석.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;#why&quot; data-ke-size=&quot;size26&quot;&gt;왜 이 계산기를 사용해야 하나?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-tight=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개인화&lt;/b&gt;: 사용자의 재무 상황과 목표에 맞춘 계산 제공.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;직관적&lt;/b&gt;: 슬라이더와 차트를 통해 복잡한 데이터를 쉽게 이해.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연성&lt;/b&gt;: 다양한 자산 클래스와 위험 감내도를 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교육적 가치&lt;/b&gt;: 투자 계획의 중요성과 자산 배분의 영향을 학습 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무료 접근&lt;/b&gt;: 누구나 무료로 이용 가능한 웹 기반 도구.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>10년후경제적자유</category>
      <category>경제적자유</category>
      <category>경제적자유30억</category>
      <category>경제적자유6억</category>
      <category>경제적자유개소리</category>
      <category>경제적자유금액</category>
      <category>경제적자유를꿈꾸는투자전략</category>
      <category>파이어족</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/68</guid>
      <comments>https://no1card.tistory.com/entry/%EA%B2%BD%EC%A0%9C%EC%A0%81-%EC%9E%90%EC%9C%A0-%EC%9E%90%EC%82%B0%EB%B0%B0%EB%B6%84-%EA%B3%84%EC%82%B0%EA%B8%B0-20%EB%8C%80-%EC%9B%94%EA%B8%89300%EB%A7%8C%EC%9B%90%EC%9C%BC%EB%A1%9C-10%EC%96%B5-%EB%AA%A8%EC%9C%BC%EB%8A%94-%EB%B0%A9%EB%B2%95#entry68comment</comments>
      <pubDate>Tue, 22 Jul 2025 18:05:43 +0900</pubDate>
    </item>
    <item>
      <title>[1억 만들기] 2025년 한국인 평균 1억 모으는 법 | 금융상품 비교 계산기</title>
      <link>https://no1card.tistory.com/entry/1%EC%96%B5-%EB%A7%8C%EB%93%A4%EA%B8%B0-2025%EB%85%84-%ED%95%9C%EA%B5%AD%EC%9D%B8-%ED%8F%89%EA%B7%A0-1%EC%96%B5-%EB%AA%A8%EC%9C%BC%EB%8A%94-%EB%B2%95-%EA%B8%88%EC%9C%B5%EC%83%81%ED%92%88-%EB%B9%84%EA%B5%90-%EA%B3%84%EC%82%B0%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT-Image-Jul-18,-2025,-02_22_37-PM.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qbYiV/btsPofOqxk1/G93cfdLaUjVL1nZsOhMZe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qbYiV/btsPofOqxk1/G93cfdLaUjVL1nZsOhMZe1/img.png&quot; data-alt=&quot;1억만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qbYiV/btsPofOqxk1/G93cfdLaUjVL1nZsOhMZe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqbYiV%2FbtsPofOqxk1%2FG93cfdLaUjVL1nZsOhMZe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;월 적립금으로 가장 빠르게 1억을 모을 수 있는 방법을 계산해드립니다. 예적금, ISA, 주식배당, 펀드 등 최적의 상품을 보여줍니다.&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-filename=&quot;ChatGPT-Image-Jul-18,-2025,-02_22_37-PM.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1억만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;1억 만들기 계산기: 예적금, ISA 계좌, 청년도약계좌, 연금저축펀드 등으로 가장 빠르게 1억을 모으는 방법을 확인하세요. 절세, 비과세 혜택 포함.&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;1억 만들기, 종자돈 모으기, 예적금, ISA 계좌, 청년도약계좌, 연금저축펀드, 절세, 비과세, 금융투자, 재테크, 노후준비&quot;&gt;
    &lt;meta name=&quot;author&quot; content=&quot;xAI&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;1억 만들기 계산기 - 최적의 재테크 전략&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;월 50만~200만원 적립으로 가장 빠르게 1억을 모을 수 있는 금융상품 비교. 예적금, ISA, 청년도약계좌, 절세 혜택 포함.&quot;&gt;
    &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
    &lt;meta property=&quot;og:url&quot; content=&quot;https://your-site.com/1억만들기-계산기&quot;&gt;
    &lt;meta property=&quot;og:image&quot; content=&quot;https://your-site.com/images/calculator.jpg&quot;&gt;
    &lt;title&gt;1억 만들기 계산기 - 예적금, ISA, 청년도약계좌로 재테크&lt;/title&gt;
    &lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js&quot;&gt;&lt;/script&gt;
    &lt;style&gt;
        :root {
            --primary-gray: #333333;
            --light-gray: #e0e0e0;
            --accent-green: #28a745;
            --accent-green-hover: #218838;
            --white: #ffffff;
            --shadow: rgba(0, 0, 0, 0.1);
        }

        body {
            font-family: 'Noto Sans KR', sans-serif;
            margin: 0;
            padding: 20px;
            background-color: var(--light-gray);
            color: var(--primary-gray);
        }

        .container {
            max-width: 1200px;
            margin: auto;
            padding: 0 15px;
        }

        h1, h2, h3 {
            color: var(--primary-gray);
        }

        h1 {
            font-size: 2rem;
            text-align: center;
            margin-bottom: 20px;
        }

        .input-section, .results-section, .content-box {
            background: var(--white);
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 4px 12px var(--shadow);
            margin-bottom: 20px;
        }

        .input-section {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            align-items: center;
            justify-content: center;
        }

        select, input {
            padding: 12px;
            font-size: 1rem;
            border: 1px solid var(--primary-gray);
            border-radius: 5px;
            width: 100%;
            max-width: 200px;
            box-sizing: border-box;
        }

        button {
            padding: 12px 24px;
            background-color: var(--accent-green);
            color: var(--white);
            border: none;
            border-radius: 5px;
            font-size: 1rem;
            cursor: pointer;
            transition: background-color 0.3s;
        }

        button:hover {
            background-color: var(--accent-green-hover);
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }

        th, td {
            border: 1px solid var(--light-gray);
            padding: 12px;
            text-align: left;
            font-size: 0.9rem;
        }

        th {
            background-color: var(--primary-gray);
            color: var(--white);
        }

        canvas {
            max-width: 100%;
            margin-top: 20px;
        }

        .content-box {
            line-height: 1.6;
        }

        .content-box h3 {
            font-size: 1.2rem;
            margin-bottom: 10px;
        }

        .content-box p {
            font-size: 0.95rem;
            margin-bottom: 15px;
        }

        .disclaimer {
            font-size: 0.85rem;
            color: #666;
            margin-top: 10px;
            text-align: center;
        }

        @media (max-width: 768px) {
            h1 {
                font-size: 1.5rem;
            }

            .input-section {
                flex-direction: column;
                align-items: stretch;
            }

            select, input {
                max-width: 100%;
            }

            button {
                width: 100%;
            }

            th, td {
                font-size: 0.85rem;
                padding: 8px;
            }
        }

        @media (max-width: 480px) {
            h1 {
                font-size: 1.2rem;
            }

            .content-box h3 {
                font-size: 1rem;
            }

            .content-box p {
                font-size: 0.9rem;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;1억 만들기 계산기&lt;/h1&gt;
        
        &lt;!-- Input Section --&gt;
        &lt;div class=&quot;input-section&quot;&gt;
            &lt;label for=&quot;monthly-amount&quot;&gt;월 적립 금액:&lt;/label&gt;
            &lt;select id=&quot;monthly-amount&quot;&gt;
                &lt;option value=&quot;500000&quot;&gt;50만원&lt;/option&gt;
                &lt;option value=&quot;700000&quot;&gt;70만원&lt;/option&gt;
                &lt;option value=&quot;1000000&quot;&gt;100만원&lt;/option&gt;
                &lt;option value=&quot;1500000&quot;&gt;150만원&lt;/option&gt;
                &lt;option value=&quot;2000000&quot;&gt;200만원&lt;/option&gt;
                &lt;option value=&quot;custom&quot;&gt;직접 입력&lt;/option&gt;
            &lt;/select&gt;
            &lt;input type=&quot;number&quot; id=&quot;custom-amount&quot; placeholder=&quot;직접 입력 (원)&quot; style=&quot;display: none;&quot;&gt;
            &lt;button onclick=&quot;calculate()&quot;&gt;계산하기&lt;/button&gt;
        &lt;/div&gt;

        &lt;!-- Results Section --&gt;
        &lt;div class=&quot;results-section&quot;&gt;
            &lt;h2&gt;계산 결과&lt;/h2&gt;
            &lt;p class=&quot;disclaimer&quot;&gt;주의: 금융상품은 2025년 7월 1일 현재 상품임으로 추후 상품명, 이율 등은 변경될 수 있음&lt;/p&gt;
            &lt;table id=&quot;results-table&quot;&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;상품명&lt;/th&gt;
                        &lt;th&gt;예상 기간 (년)&lt;/th&gt;
                        &lt;th&gt;세제 혜택&lt;/th&gt;
                        &lt;th&gt;세부사항&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody id=&quot;results-body&quot;&gt;&lt;/tbody&gt;
            &lt;/table&gt;
            &lt;canvas id=&quot;savingsChart&quot;&gt;&lt;/canvas&gt;
        &lt;/div&gt;

        &lt;!-- Content Section 1 --&gt;
        &lt;div class=&quot;content-box&quot;&gt;
            &lt;h2&gt;종자돈 모으기를 위한 생활방식&lt;/h2&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;h3&gt;목표 설정 및 계획 수립&lt;/h3&gt;
                &lt;p&gt;1억이라는 목표는 구체적이고 현실적인 재테크 계획에서 시작됩니다. SMART 원칙(구체적, 측정 가능, 달성 가능, 현실적, 시간 제한)을 따라 목표를 설정하세요. 예를 들어, &quot;5년 안에 1억을 모으기 위해 월 70만원을 청년도약계좌에 투자한다&quot;와 같은 계획을 세우는 것이 중요합니다.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;h3&gt;예산 관리 및 저축 계획&lt;/h3&gt;
                &lt;p&gt;가계부를 작성해 수입과 지출을 명확히 파악하세요. 불필요한 지출(예: 과도한 외식, 구독 서비스)을 줄이고, 저축 우선순위를 정하세요. 50-30-20 규칙(수입의 50% 생활비, 30% 여가, 20% 저축)을 참고해 저축 비율을 높이세요.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;h3&gt;투자 상품 활용&lt;/h3&gt;
                &lt;p&gt;비과세종합저축, ISA 계좌, 청년도약계좌, 연금저축펀드 등 다양한 금융상품을 활용하세요. 예를 들어, 청년도약계좌는 정부 기여금과 비과세 혜택으로 높은 실질 수익률을 제공하며, ISA 계좌는 ETF 투자로 자산 증식을 기대할 수 있습니다.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Content Section 2 --&gt;
        &lt;div class=&quot;content-box&quot;&gt;
            &lt;h2&gt;1억 만들기가 필요한 이유와 금융투자 조언&lt;/h2&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;p&gt;&lt;strong&gt;1억 만들기의 중요성:&lt;/strong&gt; 1억원은 주택 구매, 노후 준비, 창업 자금 등 인생의 주요 목표를 위한 종자돈입니다. 물가 상승과 저금리 시대에 저축만으로는 자산 증식이 어렵기 때문에, 절세 혜택이 있는 금융상품을 활용한 투자가 필수입니다.&lt;/p&gt;
              &lt;ul&gt;
                &lt;li&gt;전세자금 또는 중소도시의 작은 집을 구입할 수 있는 기반 마련&lt;/li&gt;
                &lt;li&gt;사업을 시작하거나 교육을 받을 수 있는 기회 창출&lt;/li&gt;
                &lt;li&gt;긴급 상황에 대비한 안전망 형성&lt;/li&gt;
                &lt;li&gt;수익을 창출할 수 있는 투자 원금 확보&lt;/li&gt;
                &lt;li&gt;노후 준비의 첫걸음&lt;/li&gt;
            &lt;/ul&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;p&gt;&lt;strong&gt;금융투자 조언:&lt;/strong&gt; 위험과 수익의 균형을 고려하세요. 비과세종합저축은 안정적이지만 수익률이 낮고, ISA 계좌의 ETF 투자는 고수익 가능성이 있지만 시장 리스크가 있습니다. 청년도약계좌는 청년층에 최적화된 비과세와 정부 지원 혜택을 제공합니다.&lt;/p&gt;
             &lt;ol&gt;
                &lt;li&gt;소득보다 지출을 적게 하는 기본 원칙 지키기&lt;/li&gt;
                &lt;li&gt;자동 이체를 설정하여 강제 저축 시스템 만들기&lt;/li&gt;
                &lt;li&gt;복리의 힘을 믿고 장기적인 관점에서 투자하기&lt;/li&gt;
                &lt;li&gt;세금 혜택이 있는 상품 우선적으로 활용하기&lt;/li&gt;
                &lt;li&gt;정기적으로 포트폴리오를 재평가하고 조정하기&lt;/li&gt;
            &lt;/ol&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content-subsection&quot;&gt;
                &lt;p&gt;&lt;strong&gt;투자팁!&lt;/strong&gt; 워런 버핏은 &quot;투자는 단순해야 하며, 복잡한 상품은 피하라&quot;고 조언했습니다. 초보 투자자는 이해하기 쉬운 ETF나 청년도약계좌부터 시작하고, 장기적인 관점에서 꾸준히 투자하세요.&lt;/p&gt;
            &lt;/div&gt;
                  &lt;footer&gt;
            &lt;p&gt;© 2025 1억 만들기 계산기.Design-U&lt;/p&gt;
            &lt;p&gt;이 도구는 참고용으로만 제공되며, 금융 상품 선택 시 전문가와 상담을 권장합니다.&lt;/p&gt;
        &lt;/footer&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        let chart = null;

        // Real financial products data (as of July 1, 2025)
        const products = [
            {
                name: &quot;비과세종합저축&quot;,
                rate: 0.035, // 3.5% annual interest, tax-free for up to 50M
                taxBenefit: &quot;비과세 (최대 5천만원)&quot;,
                details: &quot;만 65세 이상, 장애인 등 대상, 예금자보호 적용, 은행별 금리 상이&quot;,
                type: &quot;savings&quot;
            },
            {
                name: &quot;ISA 중개형 (ETF 투자)&quot;,
                rate: 0.07, // 7% expected return, conservative estimate
                taxBenefit: &quot;비과세 (200만원까지), 초과분 9.9% 분리과세&quot;,
                details: &quot;근로/사업소득자 대상, 3년 의무가입, 손익통산 가능&quot;,
                type: &quot;isa&quot;
            },
            {
                name: &quot;청년도약계좌&quot;,
                rate: 0.045, // 4.5% base rate + government contributions
                taxBenefit: &quot;비과세, 정부 기여금 지원&quot;,
                details: &quot;19~34세, 소득/가구소득 기준, 5년 자유적립, 은행별 우대금리 가능&quot;,
                type: &quot;youth&quot;
            },
            {
                name: &quot;연금저축펀드&quot;,
                rate: 0.06, // 6% expected return
                taxBenefit: &quot;세액공제 (최대 600만원, 16.5% 공제율)&quot;,
                details: &quot;주식형 펀드, 5년 이상 가입, 55세 이후 연금 수령&quot;,
                type: &quot;pension&quot;
            }
        ];

        // Toggle custom input field
        document.getElementById('monthly-amount').addEventListener('change', function() {
            const customInput = document.getElementById('custom-amount');
            customInput.style.display = this.value === 'custom' ? 'block' : 'none';
        });

        function calculate() {
            const monthlyAmountSelect = document.getElementById('monthly-amount').value;
            let monthlyAmount = monthlyAmountSelect === 'custom' 
                ? parseInt(document.getElementById('custom-amount').value) 
                : parseInt(monthlyAmountSelect);

            if (isNaN(monthlyAmount) || monthlyAmount &lt;= 0) {
                alert('유효한 금액을 입력하세요.');
                return;
            }

            // Calculate time to reach 100M for each product
            const results = products.map(product =&gt; {
                let balance = 0;
                let months = 0;
                const annualRate = product.rate;
                const monthlyRate = annualRate / 12;

                // Simple compound interest for savings/youth, expected return for ISA/pension
                while (balance &lt; 100000000) {
                    balance += monthlyAmount;
                    balance *= (1 + monthlyRate);
                    months++;
                }

                return {
                    ...product,
                    years: (months / 12).toFixed(2)
                };
            });

            // Sort by years (ascending)
            results.sort((a, b) =&gt; a.years - b.years);

            // Display results in table
            const tableBody = document.getElementById('results-body');
            tableBody.innerHTML = '';
            results.forEach(result =&gt; {
                const row = document.createElement('tr');
                row.innerHTML = `
                    &lt;td&gt;${result.name}&lt;/td&gt;
                    &lt;td&gt;${result.years}년&lt;/td&gt;
                    &lt;td&gt;${result.taxBenefit}&lt;/td&gt;
                    &lt;td&gt;${result.details}&lt;/td&gt;
                `;
                tableBody.appendChild(row);
            });

            // Generate chart data
            const maxYears = Math.ceil(Math.max(...results.map(r =&gt; parseFloat(r.years))));
            const labels = Array.from({ length: maxYears + 1 }, (_, i) =&gt; i);
            const datasets = results.map(product =&gt; {
                const data = [];
                let balance = 0;
                for (let year = 0; year &lt;= maxYears; year++) {
                    for (let month = 0; month &lt; 12; month++) {
                        balance += monthlyAmount;
                        balance *= (1 + product.rate / 12);
                    }
                    data.push(Math.min(balance, 100000000).toFixed(0));
                }
                return {
                    label: product.name,
                    data,
                    borderColor: getRandomColor(),
                    fill: false
                };
            });

            // Destroy existing chart if it exists
            if (chart) {
                chart.destroy();
            }

            // Create new chart
            chart = new Chart(document.getElementById('savingsChart'), {
                type: 'line',
                data: {
                    labels,
                    datasets
                },
                options: {
                    responsive: true,
                    scales: {
                        x: {
                            title: { display: true, text: '년차' }
                        },
                        y: {
                            title: { display: true, text: '적립금액 (원)' },
                            beginAtZero: true,
                            max: 110000000
                        }
                    },
                    plugins: {
                        legend: { display: true },
                        title: { display: true, text: '년차별 적립금액 그래프' }
                    }
                }
            });
        }

        function getRandomColor() {
            const letters = '0123456789ABCDEF';
            let color = '#';
            for (let i = 0; i &lt; 6; i++) {
                color += letters[Math.floor(Math.random() * 16)];
            }
            return color;
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>1억</category>
      <category>1억계산기</category>
      <category>1억만들기</category>
      <category>1억만들기적금</category>
      <category>1억만들기프로젝트</category>
      <category>1억모으기기간</category>
      <category>1억모으기현실</category>
      <category>1억모으는법</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/67</guid>
      <comments>https://no1card.tistory.com/entry/1%EC%96%B5-%EB%A7%8C%EB%93%A4%EA%B8%B0-2025%EB%85%84-%ED%95%9C%EA%B5%AD%EC%9D%B8-%ED%8F%89%EA%B7%A0-1%EC%96%B5-%EB%AA%A8%EC%9C%BC%EB%8A%94-%EB%B2%95-%EA%B8%88%EC%9C%B5%EC%83%81%ED%92%88-%EB%B9%84%EA%B5%90-%EA%B3%84%EC%82%B0%EA%B8%B0#entry67comment</comments>
      <pubDate>Fri, 18 Jul 2025 14:38:39 +0900</pubDate>
    </item>
    <item>
      <title>2025 전월세 전환율 계산기 : 5년 월세 인상 예측 - 무료</title>
      <link>https://no1card.tistory.com/entry/2025-%EC%A0%84%EC%9B%94%EC%84%B8-%EC%A0%84%ED%99%98%EC%9C%A8-%EA%B3%84%EC%82%B0%EA%B8%B0-5%EB%85%84-%EC%9B%94%EC%84%B8-%EC%9D%B8%EC%83%81-%EC%98%88%EC%B8%A1-%EB%AC%B4%EB%A3%8C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;전월세-전환.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZuUTl/btsPnDgYjoH/fxKGvKlnVyzsByAXCbkmqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZuUTl/btsPnDgYjoH/fxKGvKlnVyzsByAXCbkmqk/img.png&quot; data-alt=&quot;전월세전환계산기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZuUTl/btsPnDgYjoH/fxKGvKlnVyzsByAXCbkmqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZuUTl%2FbtsPnDgYjoH%2FfxKGvKlnVyzsByAXCbkmqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2025 최신 전월세 계싼기 지역별 전환율 적용 무료계산&quot; loading=&quot;lazy&quot; width=&quot;244&quot; height=&quot;244&quot; data-filename=&quot;전월세-전환.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전월세전환계산기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;2025년 최신 정책 반영 전월세 전환 계산기 - 지역별 전환율, 임대료 인상률, 다년간 예상 월세 계산 기능 제공&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;전월세 계산기, 지역별 전환율, 임대료 인상률, 부동산 계산기, 2025 전월세, 주택 전세 계산, 상가 월세 계산&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;2025 전월세 전환 계산기 - 지역별/인상률 계산&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;2025년 최신 지역별 전환율과 임대료 인상률을 반영한 전월세 계산기&quot;&gt;
    &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
    &lt;meta property=&quot;og:url&quot; content=&quot;https://yourdomain.com/calculator&quot;&gt; &lt;!-- Replace with actual domain --&gt;
    &lt;meta property=&quot;og:image&quot; content=&quot;https://yourdomain.com/images/calculator-thumbnail.jpg&quot;&gt; &lt;!-- Replace with actual image --&gt;
    &lt;link rel=&quot;icon&quot; href=&quot;/favicon.ico&quot; type=&quot;image/x-icon&quot;&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;title&gt;2025 전월세 전환 계산기 | 지역별 전환율 &amp; 인상률 계산&lt;/title&gt;
    &lt;style&gt;
        :root {
            --primary-color: #333333;
            --secondary-color: #4a4a4a;
            --background-color: #f5f5f5;
            --card-color: #ffffff;
            --text-color: #333333;
            --light-gray: #e0e0e0;
            --accent-color: #4a6fa5;
            --button-hover: #3a5a8f;
            --dark-background: #2d2d2d;
            --dark-card: #3d3d3d;
            --dark-text: #f0f0f0;
            --warning-color: #e74c3c;
            --success-color: #2ecc71;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
            font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
        }

        body {
            background-color: var(--background-color);
            color: var(--text-color);
            line-height: 1.6;
            padding: 0;
            margin: 0;
        }

        body.dark {
            background-color: var(--dark-background);
            color: var(--dark-text);
        }

        .container {
            max-width: 100%;
            padding: 20px;
            margin: 0 auto;
        }

        .calculator-container {
            background-color: var(--card-color);
            border-radius: 12px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
            overflow: hidden;
            max-width: 500px;
            margin: 20px auto;
        }

        body.dark .calculator-container {
            background-color: var(--dark-card);
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
        }

        .calculator-header {
            background-color: var(--primary-color);
            color: white;
            padding: 18px 20px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .calculator-title {
            font-size: 1.3rem;
            font-weight: 700;
        }

        .dark-toggle {
            background: none;
            border: none;
            color: white;
            font-size: 1.2rem;
            cursor: pointer;
            padding: 5px;
            border-radius: 50%;
            width: 36px;
            height: 36px;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: background-color 0.2s ease;
        }

        .dark-toggle:hover {
            background-color: rgba(255, 255, 255, 0.1);
        }

        .description-box {
            background-color: var(--light-gray);
            padding: 16px;
            margin-bottom: 5px;
            font-size: 0.9rem;
            border-left: 4px solid var(--accent-color);
        }

        body.dark .description-box {
            background-color: var(--secondary-color);
        }

        .description-box p {
            margin-bottom: 8px;
        }

        .section {
            padding: 15px 20px;
            border-bottom: 1px solid var(--light-gray);
        }

        body.dark .section {
            border-bottom-color: var(--secondary-color);
        }

        .section:last-child {
            border-bottom: none;
        }

        .section label {
            display: block;
            margin-bottom: 12px;
            font-weight: 600;
            font-size: 0.95rem;
            color: var(--primary-color);
        }

        body.dark .section label {
            color: var(--dark-text);
        }

        .button-group {
            display: flex;
            flex-wrap: wrap;
            gap: 8px;
            margin-bottom: 5px;
        }

        .calc-button {
            padding: 10px 15px;
            background-color: var(--light-gray);
            border: none;
            border-radius: 6px;
            font-size: 0.85rem;
            cursor: pointer;
            transition: background-color 0.2s ease, color 0.2s ease;
            flex: 1 1 auto;
            min-width: 100px;
            text-align: center;
            color: var(--text-color);
            font-weight: 500;
        }

        body.dark .calc-button {
            background-color: var(--secondary-color);
            color: var(--dark-text);
        }

        .calc-button.active {
            background-color: var(--accent-color);
            color: white;
            font-weight: 600;
        }

        .calc-button:hover:not(.active) {
            background-color: #d0d0d0;
        }

        body.dark .calc-button:hover:not(.active) {
            background-color: #555555;
        }

        .input-group {
            display: flex;
            align-items: center;
            margin-bottom: 15px;
            position: relative;
        }

        .input-field, .select-field {
            flex: 1;
            padding: 12px 15px;
            border: 1px solid var(--light-gray);
            border-radius: 6px;
            font-size: 1rem;
            background-color: var(--card-color);
            color: var(--text-color);
            appearance: none;
        }

        body.dark .input-field, body.dark .select-field {
            background-color: var(--dark-card);
            border-color: var(--secondary-color);
            color: var(--dark-text);
        }

        .input-field:focus, .select-field:focus {
            outline: none;
            border-color: var(--accent-color);
            box-shadow: 0 0 0 2px rgba(74, 111, 165, 0.2);
        }

        .input-unit {
            position: absolute;
            right: 12px;
            color: #777;
            font-size: 0.9rem;
        }

        body.dark .input-unit {
            color: #aaa;
        }

        .checkbox-group {
            display: flex;
            align-items: center;
            margin-left: 15px;
            font-size: 0.9rem;
        }

        .checkbox-group input {
            margin-right: 5px;
        }

        #calculate-btn {
            width: 100%;
            padding: 14px;
            background-color: var(--accent-color);
            color: white;
            border: none;
            border-radius: 6px;
            font-size: 1rem;
            font-weight: 600;
            cursor: pointer;
            margin-top: 10px;
            transition: background-color 0.2s ease, transform 0.2s ease;
        }

        #calculate-btn:hover {
            background-color: var(--button-hover);
            transform: translateY(-1px);
        }

        .result-box {
            background-color: var(--light-gray);
            padding: 20px;
            display: none;
        }

        body.dark .result-box {
            background-color: var(--secondary-color);
        }

        .result-title {
            font-weight: 600;
            margin-bottom: 10px;
            font-size: 1rem;
            color: var(--primary-color);
        }

        body.dark .result-title {
            color: var(--dark-text);
        }

        .result-value {
            font-size: 1.1rem;
            margin-bottom: 15px;
            line-height: 1.5;
            font-weight: 500;
            color: var(--text-color);
            min-height: 24px;
        }

        body.dark .result-value {
            color: var(--dark-text);
        }

        .copy-button {
            padding: 10px 15px;
            background-color: var(--primary-color);
            color: white;
            border: none;
            border-radius: 6px;
            font-size: 0.9rem;
            cursor: pointer;
            transition: background-color 0.2s ease;
            width: 100%;
        }

        .copy-button:hover {
            background-color: #222;
        }

        .result-subtitle {
            font-weight: 600;
            margin-top: 15px;
            color: var(--accent-color);
            font-size: 0.95rem;
        }

        body.dark .result-subtitle {
            color: #7aa7e6;
        }

        .result-list {
            margin: 10px 0 0 20px;
            padding: 0;
            list-style-type: none;
        }

        .result-list li {
            margin-bottom: 8px;
            position: relative;
            padding-left: 15px;
        }

        .result-list li:before {
            content: &quot;•&quot;;
            position: absolute;
            left: 0;
            color: var(--accent-color);
        }

        .warning-text {
            color: var(--warning-color);
            font-weight: 600;
        }

        .success-text {
            color: var(--success-color);
            font-weight: 600;
        }

        @media (max-width: 480px) {
            .container {
                padding: 10px;
            }

            .calculator-header {
                padding: 15px;
            }

            .calculator-title {
                font-size: 1.1rem;
            }

            .section {
                padding: 12px 15px;
            }

            .calc-button {
                min-width: 80px;
                padding: 8px 10px;
                font-size: 0.8rem;
            }

            .input-field, .select-field {
                padding: 10px 12px;
                font-size: 0.9rem;
            }

            #calculate-btn {
                padding: 12px;
                font-size: 0.95rem;
            }

            .result-value {
                font-size: 1rem;
            }
        }

        .seo-content {
            max-width: 800px;
            margin: 30px auto;
            padding: 0 20px;
            font-size: 0.95rem;
            line-height: 1.7;
            color: var(--text-color);
        }

        body.dark .seo-content {
            color: var(--dark-text);
        }

        .seo-content h2 {
            margin: 25px 0 15px;
            color: var(--primary-color);
            font-size: 1.4rem;
        }

        body.dark .seo-content h2 {
            color: var(--dark-text);
        }

        .seo-content ul {
            margin-bottom: 15px;
            padding-left: 20px;
        }

        .seo-content li {
            margin-bottom: 8px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;calculator-container&quot;&gt;
            &lt;div class=&quot;calculator-header&quot;&gt;
                &lt;div class=&quot;calculator-title&quot;&gt;2025 전월세 전환 계산기&lt;/div&gt;
                &lt;button id=&quot;toggleDark&quot; class=&quot;dark-toggle&quot; aria-label=&quot;다크 모드 토글&quot;&gt; &lt;/button&gt;
            &lt;/div&gt;

            &lt;div class=&quot;description-box&quot;&gt;
                &lt;p&gt;2025년 최신 부동산 정책을 반영한 전월세 전환 계산기입니다.&lt;/p&gt;
                &lt;p&gt;&lt;b&gt;전세 → 월세:&lt;/b&gt; 전세보증금과 전환율로 적정 월세 계산&lt;/p&gt;
                &lt;p&gt;&lt;b&gt;월세 → 전세:&lt;/b&gt; 월세와 보증금으로 전세보증금 환산&lt;/p&gt;
                &lt;p&gt;&lt;b&gt;전환율 계산:&lt;/b&gt; 현재 계약 조건의 전환율 확인&lt;/p&gt;
            &lt;/div&gt;

            &lt;div class=&quot;section&quot;&gt;
                &lt;label for=&quot;housing&quot;&gt;전환 대상&lt;/label&gt;
                &lt;div class=&quot;button-group&quot;&gt;
                    &lt;button class=&quot;calc-button active&quot; data-type=&quot;housing&quot; data-maxrate=&quot;4.5&quot; aria-pressed=&quot;true&quot;&gt;주택 (4.5%)&lt;/button&gt;
                    &lt;button class=&quot;calc-button&quot; data-type=&quot;arcade&quot; data-maxrate=&quot;11.25&quot; aria-pressed=&quot;false&quot;&gt;상가 (11.25%)&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;section&quot;&gt;
                &lt;label for=&quot;region-select&quot;&gt;지역별 전환율 자동 적용&lt;/label&gt;
                &lt;select id=&quot;region-select&quot; class=&quot;select-field&quot;&gt;
                    &lt;option value=&quot;&quot;&gt;직접 입력 (선택 안함)&lt;/option&gt;
                    &lt;option value=&quot;전국&quot;&gt;전국 평균&lt;/option&gt;
                    &lt;option value=&quot;수도권&quot;&gt;수도권&lt;/option&gt;
                    &lt;option value=&quot;지방&quot;&gt;지방&lt;/option&gt;
                    &lt;optgroup label=&quot;특별/광역시&quot;&gt;
                        &lt;option value=&quot;서울&quot;&gt;서울특별시&lt;/option&gt;
                        &lt;option value=&quot;부산&quot;&gt;부산광역시&lt;/option&gt;
                        &lt;option value=&quot;대구&quot;&gt;대구광역시&lt;/option&gt;
                        &lt;option value=&quot;인천&quot;&gt;인천광역시&lt;/option&gt;
                        &lt;option value=&quot;광주&quot;&gt;광주광역시&lt;/option&gt;
                        &lt;option value=&quot;대전&quot;&gt;대전광역시&lt;/option&gt;
                        &lt;option value=&quot;울산&quot;&gt;울산광역시&lt;/option&gt;
                        &lt;option value=&quot;세종&quot;&gt;세종특별자치시&lt;/option&gt;
                    &lt;/optgroup&gt;
                    &lt;optgroup label=&quot;도&quot;&gt;
                        &lt;option value=&quot;경기&quot;&gt;경기도&lt;/option&gt;
                        &lt;option value=&quot;강원&quot;&gt;강원도&lt;/option&gt;
                        &lt;option value=&quot;충북&quot;&gt;충청북도&lt;/option&gt;
                        &lt;option value=&quot;충남&quot;&gt;충청남도&lt;/option&gt;
                        &lt;option value=&quot;전북&quot;&gt;전라북도&lt;/option&gt;
                        &lt;option value=&quot;전남&quot;&gt;전라남도&lt;/option&gt;
                        &lt;option value=&quot;경북&quot;&gt;경상북도&lt;/option&gt;
                        &lt;option value=&quot;경남&quot;&gt;경상남도&lt;/option&gt;
                        &lt;option value=&quot;제주&quot;&gt;제주특별자치도&lt;/option&gt;
                    &lt;/optgroup&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;section&quot;&gt;
                &lt;label for=&quot;charter-rent&quot;&gt;계산 유형&lt;/label&gt;
                &lt;div class=&quot;button-group&quot;&gt;
                    &lt;button class=&quot;calc-button active&quot; data-calctype=&quot;charter-rent&quot; aria-pressed=&quot;true&quot;&gt;전세 → 월세&lt;/button&gt;
                    &lt;button class=&quot;calc-button&quot; data-calctype=&quot;rent-charter&quot; aria-pressed=&quot;false&quot;&gt;월세 → 전세&lt;/button&gt;
                    &lt;button class=&quot;calc-button&quot; data-calctype=&quot;conversion-rate&quot; aria-pressed=&quot;false&quot;&gt;전환율 계산&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;section&quot;&gt;
                &lt;label for=&quot;conversion-rate&quot;&gt;전환율 (%)&lt;/label&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;input id=&quot;conversion-rate&quot; class=&quot;input-field&quot; type=&quot;number&quot; placeholder=&quot;전환율 입력&quot; min=&quot;0&quot; step=&quot;0.01&quot; aria-describedby=&quot;conversion-rate-unit&quot; /&gt;
                    &lt;span id=&quot;conversion-rate-unit&quot; class=&quot;input-unit&quot;&gt;%&lt;/span&gt;
                    &lt;div class=&quot;checkbox-group&quot;&gt;
                        &lt;input id=&quot;rate-limit&quot; type=&quot;checkbox&quot; checked aria-label=&quot;전환율 한도 적용&quot; /&gt;
                        &lt;label for=&quot;rate-limit&quot;&gt;한도적용&lt;/label&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;label for=&quot;annual-increase-rate&quot;&gt;임대료 인상률 (%)&lt;/label&gt;
                &lt;div class=&quot;input-group&quot;&gt;
                    &lt;input id=&quot;annual-increase-rate&quot; class=&quot;input-field&quot; type=&quot;number&quot; placeholder=&quot;연간 인상률 입력&quot; min=&quot;0&quot; max=&quot;20&quot; step=&quot;0.1&quot; aria-describedby=&quot;annual-increase-rate-unit&quot; /&gt;
                    &lt;span id=&quot;annual-increase-rate-unit&quot; class=&quot;input-unit&quot;&gt;%&lt;/span&gt;
                &lt;/div&gt;

                &lt;div id=&quot;charter-deposit-row&quot; class=&quot;input-group&quot;&gt;
                    &lt;input id=&quot;charter-deposit&quot; class=&quot;input-field&quot; type=&quot;number&quot; placeholder=&quot;전세보증금&quot; min=&quot;0&quot; aria-describedby=&quot;charter-deposit-unit&quot; /&gt;
                    &lt;span id=&quot;charter-deposit-unit&quot; class=&quot;input-unit&quot;&gt;만원&lt;/span&gt;
                &lt;/div&gt;

                &lt;div id=&quot;rent-deposit-row&quot; class=&quot;input-group&quot; style=&quot;display: none;&quot;&gt;
                    &lt;input id=&quot;rent-deposit&quot; class=&quot;input-field&quot; type=&quot;number&quot; placeholder=&quot;월세보증금&quot; min=&quot;0&quot; aria-describedby=&quot;rent-deposit-unit&quot; /&gt;
                    &lt;span id=&quot;rent-deposit-unit&quot; class=&quot;input-unit&quot;&gt;만원&lt;/span&gt;
                &lt;/div&gt;

                &lt;div id=&quot;monthly-rent-row&quot; class=&quot;input-group&quot; style=&quot;display: none;&quot;&gt;
                    &lt;input id=&quot;monthly-rent&quot; class=&quot;input-field&quot; type=&quot;number&quot; placeholder=&quot;월세&quot; min=&quot;0&quot; step=&quot;0.1&quot; aria-describedby=&quot;monthly-rent-unit&quot; /&gt;
                    &lt;span id=&quot;monthly-rent-unit&quot; class=&quot;input-unit&quot;&gt;만원&lt;/span&gt;
                &lt;/div&gt;

                &lt;button id=&quot;calculate-btn&quot; class=&quot;calc-button&quot; aria-label=&quot;계산하기&quot;&gt;계산하기&lt;/button&gt;
            &lt;/div&gt;

            &lt;div id=&quot;result-section&quot; class=&quot;result-box&quot;&gt;
                &lt;div class=&quot;result-title&quot;&gt;계산 결과&lt;/div&gt;
                &lt;div id=&quot;result-value&quot; class=&quot;result-value&quot;&gt; &lt;/div&gt;
                &lt;button id=&quot;copyResult&quot; class=&quot;copy-button&quot; aria-label=&quot;결과 복사&quot;&gt;결과 복사&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;seo-content&quot;&gt;
            &lt;h2&gt;2025년 전월세 전환 계산기 사용 가이드&lt;/h2&gt;
            &lt;p&gt;2025년 최신 부동산 정책을 반영한 전월세 전환 계산기로 쉽고 정확하게 계산해보세요. 지역별 전환율과 임대료 인상률을 고려한 다년간 예상 월세까지 계산 가능합니다. ★참고용★&lt;/p&gt;

            &lt;h2&gt;주요 기능&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;지역별 전환율 자동 적용:&lt;/strong&gt; 서울, 경기, 부산 등 17개 시도별 평균 전환율 제공&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;임대료 인상률 예측:&lt;/strong&gt; 연간 인상률을 적용한 5년간 월세 예측 기능&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;주택/상가 구분 계산:&lt;/strong&gt; 주택(4.5% 한도)과 상가(11.25% 한도)별 전환율 차이 반영&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;3가지 계산 모드:&lt;/strong&gt; 전세→월세, 월세→전세, 전환율 계산 모드 지원&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;한도 적용 기능:&lt;/strong&gt; 정부 권고 전환율 한도를 자동으로 적용&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h2&gt;2025년 전월세 정책 주요 변경점&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;주택 전월세 전환율 상한선 4.5% 유지 (2024년과 동일)&lt;/li&gt;
                &lt;li&gt;상가 건물 전환율 상한선 11.25%로 조정&lt;/li&gt;
                &lt;li&gt;지역별 전환율 차이 확대 (서울 6.4%, 제주 6.1%, 충남 9.9%)&lt;/li&gt;
                &lt;li&gt;전세사기 피해 방지를 위한 전환율 제한 강화&lt;/li&gt;
                &lt;li&gt;월세 보증금에 따른 전세 환산 공식 개선&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // 다크모드 토글 및 시스템 설정 감지
        const toggleDark = document.getElementById('toggleDark');
        const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');

        if (prefersDarkScheme.matches) {
            document.body.classList.add('dark');
            toggleDark.textContent = '☀️';
        }

        toggleDark.addEventListener('click', () =&gt; {
            document.body.classList.toggle('dark');
            toggleDark.textContent = document.body.classList.contains('dark') ? '☀️' : ' ';
            toggleDark.setAttribute('aria-label', document.body.classList.contains('dark') ? '라이트 모드로 전환' : '다크 모드로 전환');
            localStorage.setItem('darkMode', document.body.classList.contains('dark'));
        });

        if (localStorage.getItem('darkMode') === 'true') {
            document.body.classList.add('dark');
            toggleDark.textContent = '☀️';
            toggleDark.setAttribute('aria-label', '라이트 모드로 전환');
        }

        // 지역별 전환율 데이터 (2025.04 기준)
        const regionRates = {
            &quot;전국&quot;: 7.6, &quot;수도권&quot;: 7.0, &quot;지방&quot;: 8.5,
            &quot;서울&quot;: 6.4, &quot;부산&quot;: 7.1, &quot;대구&quot;: 8.2, &quot;인천&quot;: 9.4,
            &quot;광주&quot;: 7.8, &quot;대전&quot;: 7.6, &quot;울산&quot;: 8.9, &quot;세종&quot;: 9.4,
            &quot;경기&quot;: 7.8, &quot;강원&quot;: 8.3, &quot;충북&quot;: 9.7, &quot;충남&quot;: 9.9,
            &quot;전북&quot;: 8.5, &quot;전남&quot;: 8.0, &quot;경북&quot;: 9.4, &quot;경남&quot;: 8.8, &quot;제주&quot;: 6.1
        };

        // 지역 선택 이벤트 처리
        document.getElementById('region-select').addEventListener('change', function() {
            const selectedRegion = this.value;
            if (regionRates[selectedRegion] !== undefined) {
                document.getElementById('conversion-rate').value = regionRates[selectedRegion].toFixed(1);
                const maxRate = parseFloat(document.querySelector('[data-type].active').dataset.maxrate);
                if (regionRates[selectedRegion] &gt; maxRate &amp;&amp; document.getElementById('rate-limit').checked) {
                    document.getElementById('conversion-rate').value = maxRate.toFixed(1);
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;선택 지역 전환율이 한도를 초과하여 ${maxRate}%로 조정되었습니다&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                }
            }
        });

        // 버튼 그룹 활성화 처리
        const typeButtons = document.querySelectorAll('[data-type]');
        const calcButtons = document.querySelectorAll('[data-calctype]');

        typeButtons.forEach(btn =&gt; {
            btn.addEventListener('click', function() {
                typeButtons.forEach(b =&gt; {
                    b.classList.remove('active');
                    b.setAttribute('aria-pressed', 'false');
                });
                this.classList.add('active');
                this.setAttribute('aria-pressed', 'true');

                const maxRate = parseFloat(this.dataset.maxrate);
                document.getElementById('rate-limit').nextElementSibling.innerHTML =
                    `한도적용 (${maxRate}%)`;

                const currentRate = parseFloat(document.getElementById('conversion-rate').value) || 0;
                if (currentRate &gt; maxRate &amp;&amp; document.getElementById('rate-limit').checked) {
                    document.getElementById('conversion-rate').value = maxRate.toFixed(1);
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전환율이 한도를 초과하여 ${maxRate}%로 조정되었습니다&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                }
            });
        });

        calcButtons.forEach(btn =&gt; {
            btn.addEventListener('click', function() {
                calcButtons.forEach(b =&gt; {
                    b.classList.remove('active');
                    b.setAttribute('aria-pressed', 'false');
                });
                this.classList.add('active');
                this.setAttribute('aria-pressed', 'true');

                const type = this.dataset.calctype;
                document.getElementById('charter-deposit-row').style.display =
                    (type === 'charter-rent' || type === 'conversion-rate') ? 'flex' : 'none';
                document.getElementById('rent-deposit-row').style.display =
                    (type === 'rent-charter' || type === 'conversion-rate') ? 'flex' : 'none';
                document.getElementById('monthly-rent-row').style.display =
                    (type === 'rent-charter' || type === 'conversion-rate') ? 'flex' : 'none';

                if (type === 'charter-rent') {
                    document.getElementById('rent-deposit').value = '';
                    document.getElementById('monthly-rent').value = '';
                } else if (type === 'rent-charter') {
                    document.getElementById('charter-deposit').value = '';
                } else if (type === 'conversion-rate') {
                    document.getElementById('conversion-rate').value = '';
                }
            });
        });

        // 계산기
        document.getElementById('calculate-btn').addEventListener('click', function() {
            const calcType = document.querySelector('[data-calctype].active').dataset.calctype;
            const propertyType = document.querySelector('[data-type].active').dataset.type;
            const maxRate = parseFloat(document.querySelector('[data-type].active').dataset.maxrate);
            let rate = parseFloat(document.getElementById('conversion-rate').value) || 0;

            if (rate &lt; 0 || isNaN(rate)) {
                document.getElementById('result-value').innerHTML =
                    `&lt;span class=&quot;warning-text&quot;&gt;전환율은 0 이상이어야 합니다&lt;/span&gt;`;
                document.getElementById('result-section').style.display = 'block';
                return;
            }

            if (document.getElementById('rate-limit').checked &amp;&amp; rate &gt; maxRate) {
                rate = maxRate;
                document.getElementById('conversion-rate').value = rate.toFixed(1);
                document.getElementById('result-value').innerHTML =
                    `&lt;span class=&quot;warning-text&quot;&gt;전환율이 한도(${maxRate}%)를 초과하여 ${maxRate}%로 조정되었습니다&lt;/span&gt;`;
                document.getElementById('result-section').style.display = 'block';
                return;
            }

            const charter = parseFloat(document.getElementById('charter-deposit').value) || 0;
            const rentDeposit = parseFloat(document.getElementById('rent-deposit').value) || 0;
            const monthly = parseFloat(document.getElementById('monthly-rent').value) || 0;
            const increaseRate = parseFloat(document.getElementById('annual-increase-rate').value) || 0;

            if (charter &lt; 0 || rentDeposit &lt; 0 || monthly &lt; 0 || increaseRate &lt; 0) {
                document.getElementById('result-value').innerHTML =
                    `&lt;span class=&quot;warning-text&quot;&gt;입력값은 0 이상이어야 합니다&lt;/span&gt;`;
                document.getElementById('result-section').style.display = 'block';
                return;
            }

            let result = '';
            let initialRent = 0;

            if (calcType === 'charter-rent') {
                if (!rate) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전환율을 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }
                if (!charter) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전세보증금을 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }
                if (rentDeposit &gt; charter) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;월세보증금은 전세보증금보다 작아야 합니다&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }

                const monthlyRent = (charter - rentDeposit) * (rate / 100) / 12;
                initialRent = monthlyRent;

                result = `&lt;strong&gt;적정 월세: ${monthlyRent.toFixed(1).toLocaleString('ko-KR')}만원&lt;/strong&gt; (보증금 ${rentDeposit.toLocaleString('ko-KR')}만원 기준)&lt;br&gt;
                          &lt;small&gt;※ 전세 ${charter.toLocaleString('ko-KR')}만원, 전환율 ${rate}% 기준&lt;/small&gt;`;

                if (rentDeposit &gt;= charter * 0.2) {
                    result += `&lt;br&gt;&lt;span class=&quot;warning-text&quot;&gt;※ 월세보증금이 전세보증금의 20% 이상입니다. 계약 조건을 재검토하세요.&lt;/span&gt;`;
                }

            } else if (calcType === 'rent-charter') {
                if (!rate) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전환율을 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }
                if (!monthly) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;월세를 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }

                const newCharter = rentDeposit + (monthly * 12) / (rate / 100);
                initialRent = monthly;

                result = `&lt;strong&gt;적정 전세보증금: ${Math.round(newCharter).toLocaleString('ko-KR')}만원&lt;/strong&gt;&lt;br&gt;
                          &lt;small&gt;※ 월세 ${monthly.toLocaleString('ko-KR')}만원, 보증금 ${rentDeposit.toLocaleString('ko-KR')}만원, 전환율 ${rate}% 기준&lt;/small&gt;`;

                if (newCharter &gt; 100000) {
                    result += `&lt;br&gt;&lt;span class=&quot;warning-text&quot;&gt;※ 고액 전세보증금 계약은 전문가와 상담을 권장합니다.&lt;/span&gt;`;
                }

            } else if (calcType === 'conversion-rate') {
                if (!charter) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전세보증금을 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }
                if (!monthly) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;월세를 입력해주세요&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }
                if (charter &lt;= rentDeposit) {
                    document.getElementById('result-value').innerHTML =
                        `&lt;span class=&quot;warning-text&quot;&gt;전세보증금은 월세보증금보다 커야 합니다&lt;/span&gt;`;
                    document.getElementById('result-section').style.display = 'block';
                    return;
                }

                const convRate = (monthly * 12) / (charter - rentDeposit) * 100;
                initialRent = monthly;

                document.getElementById('conversion-rate').value = convRate.toFixed(2);

                result = `&lt;strong&gt;현재 전환율: ${convRate.toFixed(2)}%&lt;/strong&gt;&lt;br&gt;
                          &lt;small&gt;${propertyType === 'housing' ? '주택' : '상가'} 권고 한도: ${maxRate}%&lt;/small&gt;`;

                if (convRate &gt; maxRate) {
                    result += `&lt;br&gt;&lt;span class=&quot;warning-text&quot;&gt;※ 현재 전환율이 권고 한도를 초과합니다&lt;/span&gt;`;
                } else if (convRate &lt; maxRate * 0.8) {
                    result += `&lt;br&gt;&lt;span class=&quot;success-text&quot;&gt;※ 현재 전환율이 권고 한도보다 낮습니다 (유리한 조건)&lt;/span&gt;`;
                }
            }

            if (increaseRate &gt; 0 &amp;&amp; initialRent &gt; 0) {
                result += `&lt;div class=&quot;result-subtitle&quot;&gt;임대료 예상 추이 (연 ${increaseRate}% 인상 기준)&lt;/div&gt;
                            &lt;ul class=&quot;result-list&quot;&gt;`;

                let totalPaid = 0;
                for (let year = 1; year &lt;= 5; year++) {
                    const projectedRent = initialRent * Math.pow(1 + increaseRate / 100, year);
                    totalPaid += projectedRent * 12;
                    result += `&lt;li&gt;${year}년차: ${projectedRent.toFixed(1).toLocaleString('ko-KR')}만원&lt;/li&gt;`;
                    if (year === 3) {
                        result += ` &lt;small&gt;(3년간 총 ${Math.round(totalPaid).toLocaleString('ko-KR')}만원 지출)&lt;/small&gt;`;
                    } else if (year === 5) {
                        result += ` &lt;small&gt;(5년간 총 ${Math.round(totalPaid).toLocaleString('ko-KR')}만원 지출)&lt;/small&gt;`;
                    }
                }

                result += `&lt;/ul&gt;`;

                if (increaseRate &gt; 5) {
                    result += `&lt;span class=&quot;warning-text&quot;&gt;※ 연 ${increaseRate}% 인상률은 일반적인 상승률보다 높습니다. 계약서를 꼼꼼히 확인하세요.&lt;/span&gt;`;
                }
            }

            document.getElementById('result-value').innerHTML = result;
            document.getElementById('result-section').style.display = 'block';
            document.getElementById('result-section').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
        });

        // 결과 복사
        document.getElementById('copyResult').addEventListener('click', () =&gt; {
            const text = document.getElementById('result-value').textContent;
            navigator.clipboard.writeText(text).then(() =&gt; {
                const originalText = document.getElementById('copyResult').textContent;
                document.getElementById('copyResult').textContent = '복사 완료!';
                setTimeout(() =&gt; {
                    document.getElementById('copyResult').textContent = originalText;
                }, 2000);
            });
        });

        // 숫자 입력 필드에 자동 포맷팅 적용 (디바운싱 추가)
        const debounce = (func, wait) =&gt; {
            let timeout;
            return (...args) =&gt; {
                clearTimeout(timeout);
                timeout = setTimeout(() =&gt; func.apply(this, args), wait);
            };
        };

        document.querySelectorAll('.input-field[type=&quot;number&quot;]').forEach(input =&gt; {
            input.addEventListener('blur', debounce(function() {
                if (this.value &amp;&amp; !isNaN(this.value) &amp;&amp; parseFloat(this.value) &gt;= 0) {
                    this.value = parseFloat(this.value).toLocaleString('ko-KR', {
                        maximumFractionDigits: this.step === '0.01' ? 2 : this.step === '0.1' ? 1 : 0
                    });
                } else if (this.value &amp;&amp; parseFloat(this.value) &lt; 0) {
                    this.value = '';
                    alert('입력값은 0 이상이어야 합니다.');
                }
            }, 300));

            input.addEventListener('focus', function() {
                this.value = this.value.replace(/[^0-9.]/g, '');
            });
        });

        // 초기 설정
        window.addEventListener('DOMContentLoaded', () =&gt; {
            document.querySelector('[data-calctype].active').click();
            document.querySelector('[data-type].active').click();
            document.getElementById('conversion-rate').placeholder = `예: ${document.querySelector('[data-type].active').dataset.maxrate}%`;

            // 입력값 복원
            ['conversion-rate', 'annual-increase-rate', 'charter-deposit', 'rent-deposit', 'monthly-rent'].forEach(id =&gt; {
                const savedValue = localStorage.getItem(id);
                if (savedValue) {
                    document.getElementById(id).value = savedValue;
                }
            });
        });

        // 입력값 저장
        document.querySelectorAll('.input-field').forEach(input =&gt; {
            input.addEventListener('change', () =&gt; {
                localStorage.setItem(input.id, input.value);
            });
        });

        // JSON-LD for SEO
        const jsonLd = {
            &quot;@context&quot;: &quot;https://schema.org&quot;,
            &quot;@type&quot;: &quot;WebApplication&quot;,
            &quot;name&quot;: &quot;2025 전월세 전환 계산기&quot;,
            &quot;description&quot;: &quot;2025년 최신 지역별 전환율과 임대료 인상률을 반영한 전월세 전환 계산기&quot;,
            &quot;applicationCategory&quot;: &quot;FinancialApplication&quot;,
            &quot;operatingSystem&quot;: &quot;All&quot;
        };
        const script = document.createElement('script');
        script.type = 'application/ld+json';
        script.textContent = JSON.stringify(jsonLd);
        document.head.appendChild(script);
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>부동산전월세전환</category>
      <category>상가임대전환</category>
      <category>상가주택전월세전환</category>
      <category>아파트전월세전환</category>
      <category>전월세 계산기</category>
      <category>전월세갱신</category>
      <category>전월세갱신계약</category>
      <category>전월세갱신요구권</category>
      <category>전월세신고</category>
      <category>지역별 전환율</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/66</guid>
      <comments>https://no1card.tistory.com/entry/2025-%EC%A0%84%EC%9B%94%EC%84%B8-%EC%A0%84%ED%99%98%EC%9C%A8-%EA%B3%84%EC%82%B0%EA%B8%B0-5%EB%85%84-%EC%9B%94%EC%84%B8-%EC%9D%B8%EC%83%81-%EC%98%88%EC%B8%A1-%EB%AC%B4%EB%A3%8C#entry66comment</comments>
      <pubDate>Thu, 17 Jul 2025 21:31:37 +0900</pubDate>
    </item>
    <item>
      <title>한글 텍스트 분석기: 글자 수, 문장 수, 띄어쓰기 계산기 (무료)</title>
      <link>https://no1card.tistory.com/entry/%ED%95%9C%EA%B8%80-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EB%B6%84%EC%84%9D%EA%B8%B0-%EA%B8%80%EC%9E%90-%EC%88%98-%EB%AC%B8%EC%9E%A5-%EC%88%98-%EB%9D%84%EC%96%B4%EC%93%B0%EA%B8%B0-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%AC%B4%EB%A3%8C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;한글분석기.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mk523/btsPi2zTFBc/l5e3wdM7jOaklPzwiarzh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mk523/btsPi2zTFBc/l5e3wdM7jOaklPzwiarzh0/img.png&quot; data-alt=&quot;한글 텍스트 분석기 &amp;amp;copy; 2025 Design-U&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mk523/btsPi2zTFBc/l5e3wdM7jOaklPzwiarzh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMk523%2FbtsPi2zTFBc%2Fl5e3wdM7jOaklPzwiarzh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-filename=&quot;한글분석기.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;한글 텍스트 분석기 &amp;copy; 2025 Design-U&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #404040; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;한글 텍스트 분석기 - 글자수, 문장수, 띄어쓰기 체크까지 한번에!&quot;&lt;/li&gt;
&lt;li&gt;&quot;블로그 글 최적화를 위한 한글 텍스트 분석기 무료 도구&quot;&lt;/li&gt;
&lt;li&gt;&quot;한글 텍스트 분석기: 글자 수 세기부터 키워드 반복 검사까지&quot;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #404040; text-align: left;&quot;&gt;글쓰기 고민 해결! 전문가들이 사용하는 텍스트 분석 비법&quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&quot;한글 텍스트 분석기로 확인해야 할 7가지 핵심 요소&quot;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #404040; text-align: left;&quot;&gt;반복 단어, 문장 길이, 띄어쓰기 문제를 한번에 해결!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;글자수계산기, 한글 텍스트 분석기로 글자 수, 문장 수, 띄어쓰기, 반복 단어 등을 쉽게 분석할 수 있는 도구&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;한글 분석기, 텍스트 분석, 글자 수 세기, 모던 디자인, 블로그 도구, 글자수계산기&quot;&gt;
    &lt;meta name=&quot;author&quot; content=&quot;한글 텍스트 분석기&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;글자수계산기, 한글 텍스트 분석기&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;글자수계산기 기능과 블로그 최적화 글쓰기에 최고의 선택 한글 텍스트 분석 도구&quot;&gt;
    &lt;title&gt;한글 텍스트 분석기&lt;/title&gt;
    &lt;style&gt;
        :root {
            --gray-90: #1a1a1a;
            --gray-80: #333333;
            --gray-70: #4d4d4d;
            --gray-60: #666666;
            --gray-50: #808080;
            --gray-40: #999999;
            --gray-30: #b3b3b3;
            --gray-20: #cccccc;
            --gray-10: #e6e6e6;
            --primary: #4a6fa5;
            --primary-light: #6d8ec7;
        }
        
        body {
            font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
            line-height: 1.6;
            color: var(--gray-80);
            background-color: #f5f5f5;
            margin: 0;
            padding: 0;
            min-height: 100vh;
        }
        
        .container {
            max-width: 900px;
            margin: 0 auto;
            padding: 40px 20px;
        }
        
        header {
            text-align: center;
            margin-bottom: 40px;
            padding-bottom: 20px;
            border-bottom: 1px solid var(--gray-20);
        }
        
        h1 {
            color: var(--gray-90);
            font-weight: 700;
            font-size: 2.2rem;
            margin-bottom: 10px;
        }
        
        .subtitle {
            color: var(--gray-60);
            font-size: 1.1rem;
            margin-top: 0;
        }
        
        .analyzer-container {
            background-color: white;
            border-radius: 12px;
            padding: 30px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
            margin-bottom: 40px;
            border: 1px solid var(--gray-10);
        }
        
        h2 {
            color: var(--gray-80);
            font-weight: 600;
            margin-top: 0;
            margin-bottom: 20px;
            font-size: 1.5rem;
        }
        
        textarea {
            width: 100%;
            height: 200px;
            padding: 16px;
            border: 1px solid var(--gray-20);
            border-radius: 8px;
            resize: vertical;
            font-size: 16px;
            margin-bottom: 20px;
            background-color: white;
            color: var(--gray-80);
            transition: border 0.3s, box-shadow 0.3s;
        }
        
        textarea:focus {
            outline: none;
            border-color: var(--primary);
            box-shadow: 0 0 0 3px rgba(74, 111, 165, 0.1);
        }
        
        .button-group {
            display: flex;
            gap: 12px;
            margin-bottom: 20px;
        }
        
        button {
            background-color: var(--primary);
            color: white;
            border: none;
            padding: 12px 24px;
            border-radius: 8px;
            cursor: pointer;
            font-size: 16px;
            font-weight: 500;
            transition: all 0.3s;
            flex: 1;
        }
        
        button:hover {
            background-color: var(--primary-light);
            transform: translateY(-2px);
        }
        
        button.secondary {
            background-color: white;
            color: var(--gray-70);
            border: 1px solid var(--gray-20);
        }
        
        button.secondary:hover {
            background-color: var(--gray-10);
        }
        
        .results {
            margin-top: 30px;
            padding: 25px;
            background-color: var(--gray-10);
            border-radius: 8px;
            display: none;
            border: 1px solid var(--gray-20);
        }
        
        .results h3 {
            color: var(--gray-80);
            margin-top: 0;
            margin-bottom: 20px;
            font-size: 1.3rem;
        }
        
        .result-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
            gap: 20px;
        }
        
        .result-card {
            background-color: white;
            border-radius: 8px;
            padding: 20px;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
        }
        
        .result-card h4 {
            color: var(--gray-60);
            font-size: 0.9rem;
            margin-top: 0;
            margin-bottom: 10px;
            font-weight: 500;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        
        .result-value {
            color: var(--gray-90);
            font-size: 1.8rem;
            font-weight: 700;
            margin: 0;
        }
        
        .result-unit {
            color: var(--gray-50);
            font-size: 1rem;
            margin-left: 4px;
        }
        
        .word-length-section {
            margin-top: 30px;
        }
        
        .word-length-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
            gap: 12px;
            margin-top: 15px;
        }
        
        .length-card {
            background-color: white;
            border-radius: 6px;
            padding: 15px 10px;
            text-align: center;
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
        }
        
        .length-value {
            color: var(--primary);
            font-size: 1.5rem;
            font-weight: 700;
            margin: 0;
        }
        
        .length-label {
            color: var(--gray-60);
            font-size: 0.8rem;
            margin-top: 5px;
        }
        
        .feature-section {
            margin-top: 50px;
        }
        
        .feature-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
            gap: 25px;
            margin-top: 30px;
        }
        
        .feature-card {
            background-color: white;
            border-radius: 10px;
            padding: 25px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
            border: 1px solid var(--gray-10);
        }
        
        .feature-card h3 {
            color: var(--gray-80);
            margin-top: 0;
            margin-bottom: 15px;
            font-size: 1.2rem;
        }
        
        .feature-card p {
            color: var(--gray-60);
            margin-bottom: 0;
            line-height: 1.6;
        }
        
        footer {
            text-align: center;
            margin-top: 60px;
            padding-top: 30px;
            border-top: 1px solid var(--gray-20);
            color: var(--gray-50);
            font-size: 0.9rem;
        }
        
        @media (max-width: 768px) {
            .container {
                padding: 30px 15px;
            }
            
            h1 {
                font-size: 1.8rem;
            }
            
            .button-group {
                flex-direction: column;
            }
            
            .result-grid {
                grid-template-columns: 1fr;
            }
            
            .word-length-grid {
                grid-template-columns: repeat(auto-fill, minmax(70px, 1fr));
            }
        }
    &lt;/style&gt;
    &lt;link rel=&quot;stylesheet&quot; as=&quot;style&quot; crossorigin href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.6/dist/web/static/pretendard.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;header&gt;
            &lt;h1&gt;한글 텍스트 분석기&lt;/h1&gt;
            &lt;p class=&quot;subtitle&quot;&gt;한글 텍스트를 분석하여 블로그 글쓰기에 도움주는 최고의 도구&lt;/p&gt;
        &lt;/header&gt;
        
        &lt;div class=&quot;analyzer-container&quot;&gt;
            &lt;h2&gt;텍스트 분석하기&lt;/h2&gt;
            &lt;textarea id=&quot;inputText&quot; placeholder=&quot;분석할 한글 텍스트를 입력하세요...&quot;&gt;&lt;/textarea&gt;
            
            &lt;div class=&quot;button-group&quot;&gt;
                &lt;button onclick=&quot;analyzeText()&quot;&gt;분석 시작&lt;/button&gt;
                &lt;button class=&quot;secondary&quot; onclick=&quot;clearText()&quot;&gt;텍스트 지우기&lt;/button&gt;
            &lt;/div&gt;
            
            &lt;div id=&quot;results&quot; class=&quot;results&quot;&gt;
                &lt;h3&gt;분석 결과&lt;/h3&gt;
                
                &lt;div class=&quot;result-grid&quot;&gt;
                    &lt;div class=&quot;result-card&quot;&gt;
                        &lt;h4&gt;전체 글자 수&lt;/h4&gt;
                        &lt;p class=&quot;result-value&quot;&gt;&lt;span id=&quot;totalChars&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;result-unit&quot;&gt;자&lt;/span&gt;&lt;/p&gt;
                    &lt;/div&gt;
                    
                    &lt;div class=&quot;result-card&quot;&gt;
                        &lt;h4&gt;띄어쓰기 수&lt;/h4&gt;
                        &lt;p class=&quot;result-value&quot;&gt;&lt;span id=&quot;spaces&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;result-unit&quot;&gt;회&lt;/span&gt;&lt;/p&gt;
                    &lt;/div&gt;
                    
                    &lt;div class=&quot;result-card&quot;&gt;
                        &lt;h4&gt;문장 수&lt;/h4&gt;
                        &lt;p class=&quot;result-value&quot;&gt;&lt;span id=&quot;sentences&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;result-unit&quot;&gt;개&lt;/span&gt;&lt;/p&gt;
                    &lt;/div&gt;
                    
                    &lt;div class=&quot;result-card&quot;&gt;
                        &lt;h4&gt;전체 단어 수&lt;/h4&gt;
                        &lt;p class=&quot;result-value&quot;&gt;&lt;span id=&quot;totalWords&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;result-unit&quot;&gt;개&lt;/span&gt;&lt;/p&gt;
                    &lt;/div&gt;
                    
                    &lt;div class=&quot;result-card&quot;&gt;
                        &lt;h4&gt;반복 단어&lt;/h4&gt;
                        &lt;p class=&quot;result-value&quot;&gt;&lt;span id=&quot;repeatedWords&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;result-unit&quot;&gt;개&lt;/span&gt;&lt;/p&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;word-length-section&quot;&gt;
                    &lt;h4&gt;단어 길이 분포&lt;/h4&gt;
                    &lt;div id=&quot;wordLengths&quot; class=&quot;word-length-grid&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;feature-section&quot;&gt;
            &lt;h2&gt;주요 기능&lt;/h2&gt;
            
            &lt;div class=&quot;feature-grid&quot;&gt;
                &lt;div class=&quot;feature-card&quot;&gt;
                    &lt;h3&gt;정확한 글자 수 분석&lt;/h3&gt;
                    &lt;p&gt;공백 포함/제외 옵션 없이 정확한 글자 수를 계산하여 블로그 글 길이를 최적화합니다.&lt;/p&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;feature-card&quot;&gt;
                    &lt;h3&gt;문장 구조 분석&lt;/h3&gt;
                    &lt;p&gt;문장 부호를 인식하여 문장 수와 평균 길이를 분석해 가독성을 높입니다.&lt;/p&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;feature-card&quot;&gt;
                    &lt;h3&gt;단어 빈도 분석&lt;/h3&gt;
                    &lt;p&gt;반복적으로 사용된 단어를 식별하여 콘텐츠의 다양성을 높일 수 있습니다.&lt;/p&gt;
                &lt;/div&gt;
                
                &lt;div class=&quot;feature-card&quot;&gt;
                    &lt;h3&gt;모던한 디자인&lt;/h3&gt;
                    &lt;p&gt;세련된 그레이 컬러 팔레트로 눈이 편안한 사용자 경험을 제공합니다.&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;footer&gt;
            &lt;p&gt;한글 텍스트 분석기 © 2025 Design-U.&lt;/p&gt;
        &lt;/footer&gt;
    &lt;/div&gt;
    
    &lt;script&gt;
        function analyzeText() {
            const text = document.getElementById('inputText').value.trim();
            const resultsDiv = document.getElementById('results');
            
            if (!text) {
                alert('분석할 텍스트를 입력해주세요.');
                return;
            }
            
            // 1. 전체 글자 수
            const totalChars = text.length;
            
            // 2. 띄어쓰기 수
            const spaceCount = text.split(' ').length - 1;
            
            // 3. 문장 수
            const sentences = text.split(/[.?!]+/).filter(s =&gt; s.trim().length &gt; 0);
            let sentenceCount = sentences.length;
            if (sentenceCount === 0 &amp;&amp; text.length &gt; 0) sentenceCount = 1;
            
            // 4. 단어 추출 (간단한 공백 기준 분리)
            const words = text.match(/[가-힣a-zA-Z0-9]+/g) || [];
            const totalWords = words.length;
            
            // 5. 반복 단어 수 (2회 이상)
            const wordCounts = {};
            words.forEach(word =&gt; {
                wordCounts[word] = (wordCounts[word] || 0) + 1;
            });
            const repeatedWords = Object.values(wordCounts).filter(count =&gt; count &gt; 1).length;
            
            // 6. 단어 길이별 개수
            const lengthCounts = {};
            words.forEach(word =&gt; {
                const length = word.length;
                lengthCounts[length] = (lengthCounts[length] || 0) + 1;
            });
            
            // 결과 표시
            document.getElementById('totalChars').textContent = totalChars;
            document.getElementById('spaces').textContent = spaceCount;
            document.getElementById('sentences').textContent = sentenceCount;
            document.getElementById('totalWords').textContent = totalWords;
            document.getElementById('repeatedWords').textContent = repeatedWords;
            
            const wordLengthsList = document.getElementById('wordLengths');
            wordLengthsList.innerHTML = '';
            
            const sortedLengths = Object.keys(lengthCounts).sort((a, b) =&gt; a - b);
            sortedLengths.forEach(length =&gt; {
                const card = document.createElement('div');
                card.className = 'length-card';
                card.innerHTML = `
                    &lt;p class=&quot;length-value&quot;&gt;${lengthCounts[length]}&lt;/p&gt;
                    &lt;p class=&quot;length-label&quot;&gt;${length}글자&lt;/p&gt;
                `;
                wordLengthsList.appendChild(card);
            });
            
            resultsDiv.style.display = 'block';
        }
        
        function clearText() {
            document.getElementById('inputText').value = '';
            document.getElementById('results').style.display = 'none';
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>글자수계산기</category>
      <category>띄어쓰기검사</category>
      <category>문장분석</category>
      <category>문장분석기</category>
      <category>블로그SEO</category>
      <category>블로그글쓰기</category>
      <category>블로그최적화</category>
      <category>텍스트분석기</category>
      <category>한글문장분석기</category>
      <category>한글분석기</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/65</guid>
      <comments>https://no1card.tistory.com/entry/%ED%95%9C%EA%B8%80-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EB%B6%84%EC%84%9D%EA%B8%B0-%EA%B8%80%EC%9E%90-%EC%88%98-%EB%AC%B8%EC%9E%A5-%EC%88%98-%EB%9D%84%EC%96%B4%EC%93%B0%EA%B8%B0-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%AC%B4%EB%A3%8C#entry65comment</comments>
      <pubDate>Mon, 14 Jul 2025 15:49:36 +0900</pubDate>
    </item>
    <item>
      <title>롯데월드타워 타워런 완주 예상시간 계산기 - 내 체력으로 2,917계단 정복 가능?</title>
      <link>https://no1card.tistory.com/entry/%EB%A1%AF%EB%8D%B0%EC%9B%94%EB%93%9C%ED%83%80%EC%9B%8C-%ED%83%80%EC%9B%8C%EB%9F%B0-%EC%99%84%EC%A3%BC-%EC%98%88%EC%83%81%EC%8B%9C%EA%B0%84-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%82%B4-%EC%B2%B4%EB%A0%A5%EC%9C%BC%EB%A1%9C-2917%EA%B3%84%EB%8B%A8-%EC%A0%95%EB%B3%B5-%EA%B0%80%EB%8A%A5</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;타워런.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4IIlY/btsPg04tVpR/h4UQLcHd72eBwLoThq24YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4IIlY/btsPg04tVpR/h4UQLcHd72eBwLoThq24YK/img.png&quot; data-alt=&quot;롯데월드타워 - 타워런&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4IIlY/btsPg04tVpR/h4UQLcHd72eBwLoThq24YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4IIlY%2FbtsPg04tVpR%2Fh4UQLcHd72eBwLoThq24YK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-filename=&quot;타워런.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;롯데월드타워 - 타워런&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 본 계산기는 재미삼아 알아보는 참고용계산기에요~, 개인별로 체력차이나 능력치가 다르게 때문에 본인의 체력에 맞는 운동방법으로 타워런을 준비해보세요!!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;롯데월드타워 타워런 완주 예상 시간 계산기. 심폐지구력, 하체 근력, 근파워 등을 측정해 체력 등급과 예상 완주 시간을 계산해보세요.&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;타워런, 계단 오르기, 체력 계산, 롯데월드타워, 고층빌딩 러닝, 심폐지구력, 하체 근력&quot;&gt;
    &lt;title&gt;롯데월드타워 타워런 예상 완주 시간 계산기&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            color: #333;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        h1 {
            color: #e74c3c;
            text-align: center;
            margin-bottom: 30px;
        }
        h2 {
            color: #2c3e50;
            border-bottom: 2px solid #e74c3c;
            padding-bottom: 5px;
            margin-top: 40px;
        }
        h3 {
            color: #3498db;
        }
        .calculator-container {
            background-color: white;
            border-radius: 10px;
            padding: 25px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
            margin-bottom: 30px;
        }
        .input-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input, select {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 16px;
        }
        button {
            background-color: #e74c3c;
            color: white;
            border: none;
            padding: 12px 20px;
            font-size: 16px;
            border-radius: 4px;
            cursor: pointer;
            width: 100%;
            margin-top: 10px;
            transition: background-color 0.3s;
        }
        button:hover {
            background-color: #c0392b;
        }
        #result {
            background-color: #f8f9fa;
            padding: 20px;
            border-radius: 8px;
            margin-top: 20px;
            border-left: 5px solid #3498db;
        }
        .fitness-section {
            background-color: white;
            border-radius: 10px;
            padding: 20px;
            margin-bottom: 20px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
        .video-link {
            display: inline-block;
            background-color: #f1f1f1;
            padding: 8px 15px;
            border-radius: 20px;
            color: #3498db;
            text-decoration: none;
            margin-top: 10px;
            font-size: 14px;
        }
        .video-link:hover {
            background-color: #e1e1e1;
        }
        .organization-link {
            color: #2c3e50;
            font-weight: bold;
        }
        footer {
            text-align: center;
            margin-top: 40px;
            padding-top: 20px;
            border-top: 1px solid #ddd;
            color: #7f8c8d;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;롯데월드타워 타워런 예상 완주 시간 계산기&lt;/h1&gt;
    
    &lt;div class=&quot;calculator-container&quot;&gt;
        &lt;h2&gt;  타워런 예상 시간 계산기&lt;/h2&gt;
        &lt;p&gt;나의 체력 수준을 입력하면 롯데월드타워(2,917계단) 완주 예상 시간을 계산해드립니다!&lt;/p&gt;
        
        &lt;form id=&quot;towerrun-calculator&quot;&gt;
            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;user-group&quot;&gt;그룹 선택&lt;/label&gt;
                &lt;select id=&quot;user-group&quot;&gt;
                    &lt;option value=&quot;general&quot;&gt;일반인&lt;/option&gt;
                    &lt;option value=&quot;athlete&quot;&gt;선수&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;gender&quot;&gt;성별&lt;/label&gt;
                &lt;select id=&quot;gender&quot;&gt;
                    &lt;option value=&quot;male&quot;&gt;남자&lt;/option&gt;
                    &lt;option value=&quot;female&quot;&gt;여자&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;age-group&quot;&gt;연령대&lt;/label&gt;
                &lt;select id=&quot;age-group&quot;&gt;
                    &lt;option value=&quot;teen&quot;&gt;청소년&lt;/option&gt;
                    &lt;option value=&quot;adult&quot;&gt;성인&lt;/option&gt;
                    &lt;option value=&quot;senior&quot;&gt;노인&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;vo2max&quot;&gt;심폐지구력 (VO₂max, ml/kg/min)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;vo2max&quot; placeholder=&quot;예: 45&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;squat-1rm&quot;&gt;하체 근력 (스쿼트 1RM, x 체중)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;squat-1rm&quot; placeholder=&quot;예: 1.2&quot; step=&quot;0.1&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;box-jump&quot;&gt;근파워 (박스 점프 높이, cm)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;box-jump&quot; placeholder=&quot;예: 55&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;plank-time&quot;&gt;코어 안정성 (플랭크 유지 시간, 초)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;plank-time&quot; placeholder=&quot;예: 180&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;input-group&quot;&gt;
                &lt;label for=&quot;stair-test&quot;&gt;30층 계단 오르기 기록 (초)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;stair-test&quot; placeholder=&quot;예: 300&quot;&gt;
            &lt;/div&gt;

            &lt;button type=&quot;button&quot; onclick=&quot;calculateTime()&quot;&gt;계산하기&lt;/button&gt;
        &lt;/form&gt;

        &lt;div id=&quot;result&quot; style=&quot;display:none;&quot;&gt;
            &lt;h3&gt;▶ 예상 완주 시간: &lt;span id=&quot;predicted-time&quot;&gt;00분 00초&lt;/span&gt;&lt;/h3&gt;
            &lt;p&gt;체력 등급: &lt;span id=&quot;fitness-level&quot;&gt;중급자&lt;/span&gt;&lt;/p&gt;
            &lt;p&gt;계단당 평균 속도: &lt;span id=&quot;step-speed&quot;&gt;0.00초/계단&lt;/span&gt;&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;h2&gt;  타워런 체력 요소 상세 설명&lt;/h2&gt;
    
    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;1. 심폐지구력 (Cardiovascular Endurance)&lt;/h3&gt;
        &lt;p&gt;&lt;strong&gt;왜 중요한가?&lt;/strong&gt;&lt;br&gt;
        장시간 계단을 오르는 데 필요한 &lt;strong&gt;산소 공급 효율성&lt;/strong&gt;을 결정합니다.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;훈련 방법&lt;/strong&gt;&lt;br&gt;
        - 러닝, 사이클링, 인터벌 트레이닝 (예: 1분 달리기 + 1분 걷기 반복)&lt;br&gt;
        - &lt;a href=&quot;https://www.youtube.com/watch?v=ml6cT4AZdqI&quot; class=&quot;video-link&quot; target=&quot;_blank&quot;&gt;런닝 인터벌 트레이닝 가이드 (YouTube)&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;관련 단체&lt;/strong&gt;: &lt;a href=&quot;http://www.korea-marathon.or.kr&quot; class=&quot;organization-link&quot; target=&quot;_blank&quot;&gt;한국마라톤협회&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;2. 하체 근지구력 (Lower Body Muscular Endurance)&lt;/h3&gt;
        &lt;p&gt;&lt;strong&gt;왜 중요한가?&lt;/strong&gt;&lt;br&gt;
        반복적인 계단 오르기에서 &lt;strong&gt;허벅지와 종아리 근육의 피로&lt;/strong&gt;를 줄입니다.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;훈련 방법&lt;/strong&gt;&lt;br&gt;
        - 스쿼트, 런지, 계단 오르기 (가중치 추가)&lt;br&gt;
        - &lt;a href=&quot;https://www.youtube.com/watch?v=aclHkVaku9U&quot; class=&quot;video-link&quot; target=&quot;_blank&quot;&gt;하체 근지구력 운동 (YouTube)&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;관련 기관&lt;/strong&gt;: &lt;a href=&quot;https://www.sports.or.kr&quot; class=&quot;organization-link&quot; target=&quot;_blank&quot;&gt;대한체육회&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;3. 근파워 (Muscular Power)&lt;/h3&gt;
        &lt;p&gt;&lt;strong&gt;왜 중요한가?&lt;/strong&gt;&lt;br&gt;
        한 번에 여러 계단을 오를 때 필요한 &lt;strong&gt;폭발적인 힘&lt;/strong&gt;을 제공합니다.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;훈련 방법&lt;/strong&gt;&lt;br&gt;
        - 박스 점프, 웨이트 트레이닝 (스텝업, 데드리프트)&lt;br&gt;
        - &lt;a href=&quot;https://www.youtube.com/watch?v=CVaEhXotL7M&quot; class=&quot;video-link&quot; target=&quot;_blank&quot;&gt;점프력 향상 운동 (YouTube)&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;4. 코어 안정성 (Core Stability)&lt;/h3&gt;
        &lt;p&gt;&lt;strong&gt;왜 중요한가?&lt;/strong&gt;&lt;br&gt;
        상체의 흔들림을 줄여 &lt;strong&gt;에너지 효율성&lt;/strong&gt;을 높입니다.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;훈련 방법&lt;/strong&gt;&lt;br&gt;
        - 플랭크, 버드독, 러시안 트위스트&lt;br&gt;
        - &lt;a href=&quot;https://www.youtube.com/watch?v=2pLT-olgUJs&quot; class=&quot;video-link&quot; target=&quot;_blank&quot;&gt;코어 강화 운동 10분 (YouTube)&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;5. 정신적 인내력 (Mental Toughness)&lt;/h3&gt;
        &lt;p&gt;&lt;strong&gt;왜 중요한가?&lt;/strong&gt;&lt;br&gt;
        고통과의 싸움에서 &lt;strong&gt;집중력과 의지력&lt;/strong&gt;이 기록을 좌우합니다.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;훈련 방법&lt;/strong&gt;&lt;br&gt;
        - 고강도 인터벌 훈련, 명상&lt;br&gt;
        - &lt;a href=&quot;https://www.youtube.com/watch?v=H14bBuluwB8&quot; class=&quot;video-link&quot; target=&quot;_blank&quot;&gt;멘탈 강화 방법 (YouTube)&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;fitness-section&quot;&gt;
        &lt;h3&gt;  타워런 대회 정보&lt;/h3&gt;
        &lt;p&gt;도전해보고 싶다면?&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.towerrunning.com&quot; target=&quot;_blank&quot;&gt;공식 타워런 대회 정보 (Towerrunning World Association)&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.korea-climbing.org&quot; target=&quot;_blank&quot;&gt;국내 계단 오르기 대회 일정 (한국등반연맹)&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;&lt;em&gt;  TIP: 꾸준한 훈련과 올바른 자세로 부상 없이 안전하게 도전하세요!  &lt;/em&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;footer&gt;
        &lt;p&gt;이 페이지는 Google, Naver, Daum 검색 최적화를 고려하여 제작되었습니다.&lt;/p&gt;
        &lt;p&gt;© 2023 타워런 체력 계산기. All rights reserved.&lt;/p&gt;
    &lt;/footer&gt;

    &lt;script&gt;
        function calculateTime() {
            // 입력값 가져오기
            const userGroup = document.getElementById('user-group').value;
            const gender = document.getElementById('gender').value;
            const ageGroup = document.getElementById('age-group').value;
            const vo2max = parseFloat(document.getElementById('vo2max').value) || 0;
            const squat1rm = parseFloat(document.getElementById('squat-1rm').value) || 0;
            const boxJump = parseFloat(document.getElementById('box-jump').value) || 0;
            const plankTime = parseFloat(document.getElementById('plank-time').value) || 0;
            const stairTest = parseFloat(document.getElementById('stair-test').value) || 0;

            // 체력 등급 계산
            let cardioLevel, legLevel, powerLevel, coreLevel;
            
            // 심폐지구력 등급
            if (vo2max &gt;= 60) cardioLevel = &quot;프로&quot;;
            else if (vo2max &gt;= 45) cardioLevel = &quot;중급자&quot;;
            else cardioLevel = &quot;초보자&quot;;

            // 하체 근지구력 등급
            if (squat1rm &gt;= 1.5) legLevel = &quot;프로&quot;;
            else if (squat1rm &gt;= 1.0) legLevel = &quot;중급자&quot;;
            else legLevel = &quot;초보자&quot;;

            // 근파워 등급
            if (boxJump &gt;= 70) powerLevel = &quot;프로&quot;;
            else if (boxJump &gt;= 50) powerLevel = &quot;중급자&quot;;
            else powerLevel = &quot;초보자&quot;;

            // 코어 안정성 등급
            if (plankTime &gt;= 300) coreLevel = &quot;프로&quot;;
            else if (plankTime &gt;= 120) coreLevel = &quot;중급자&quot;;
            else coreLevel = &quot;초보자&quot;;

            // 종합 등급
            let fitnessLevel;
            if (userGroup === &quot;athlete&quot;) {
                fitnessLevel = &quot;프로&quot;;
            } else {
                const levels = [cardioLevel, legLevel, powerLevel, coreLevel];
                const proCount = levels.filter(level =&gt; level === &quot;프로&quot;).length;
                const beginnerCount = levels.filter(level =&gt; level === &quot;초보자&quot;).length;
                
                if (proCount &gt;= 2) fitnessLevel = &quot;프로&quot;;
                else if (beginnerCount &gt;= 3) fitnessLevel = &quot;초보자&quot;;
                else fitnessLevel = &quot;중급자&quot;;
            }

            // 기본 시간 설정
            let baseTime;
            switch(fitnessLevel) {
                case &quot;프로&quot;: baseTime = 15 * 60; break;
                case &quot;중급자&quot;: baseTime = 25 * 60; break;
                case &quot;초보자&quot;: baseTime = 35 * 60; break;
                default: baseTime = 30 * 60;
            }

            // 성별 및 연령 보정 계수 적용
            const correctionFactors = {
                male: { teen: 0.9, adult: 1.0, senior: 1.2 },
                female: { teen: 0.95, adult: 1.1, senior: 1.3 }
            };
            
            const correction = correctionFactors[gender][ageGroup];
            let predictedTime = baseTime * correction;

            // 30층 계단 테스트 결과 반영 (추가 보정)
            if (stairTest &gt; 0) {
                const stairFactor = stairTest / 300; // 300초(5분) 기준
                predictedTime = predictedTime * (0.7 + stairFactor * 0.3);
            }

            // 결과 표시
            document.getElementById('fitness-level').textContent = fitnessLevel;
            
            const minutes = Math.floor(predictedTime / 60);
            const seconds = Math.round(predictedTime % 60);
            document.getElementById('predicted-time').textContent = `${minutes}분 ${seconds}초`;
            
            const stepSpeed = (predictedTime / 2917).toFixed(2);
            document.getElementById('step-speed').textContent = `${stepSpeed}초/계단`;
            
            document.getElementById('result').style.display = 'block';
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>계단오르기계산기</category>
      <category>고층빌딩계단오르기계산기</category>
      <category>롯데월드타워</category>
      <category>롯데월드타워계단오르는시간</category>
      <category>심폐찌구력</category>
      <category>타워런</category>
      <category>타워런완주예상시간</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/64</guid>
      <comments>https://no1card.tistory.com/entry/%EB%A1%AF%EB%8D%B0%EC%9B%94%EB%93%9C%ED%83%80%EC%9B%8C-%ED%83%80%EC%9B%8C%EB%9F%B0-%EC%99%84%EC%A3%BC-%EC%98%88%EC%83%81%EC%8B%9C%EA%B0%84-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%82%B4-%EC%B2%B4%EB%A0%A5%EC%9C%BC%EB%A1%9C-2917%EA%B3%84%EB%8B%A8-%EC%A0%95%EB%B3%B5-%EA%B0%80%EB%8A%A5#entry64comment</comments>
      <pubDate>Mon, 14 Jul 2025 13:50:27 +0900</pubDate>
    </item>
    <item>
      <title>1억 만들기 | 적금 vs 펀드 vs 청년저축 - 1억 모으기 월 납입금 비교 계산기</title>
      <link>https://no1card.tistory.com/entry/1%EC%96%B5-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%A0%81%EA%B8%88-vs-%ED%8E%80%EB%93%9C-vs-%EC%B2%AD%EB%85%84%EC%A0%80%EC%B6%95-1%EC%96%B5-%EB%AA%A8%EC%9C%BC%EA%B8%B0-%EC%9B%94-%EB%82%A9%EC%9E%85%EA%B8%88-%EB%B9%84%EA%B5%90-%EA%B3%84%EC%82%B0%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1억만들기.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bItUGL/btsPgbSUmft/YIQOLqyKC5obkJdfKsAXYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bItUGL/btsPgbSUmft/YIQOLqyKC5obkJdfKsAXYk/img.png&quot; data-alt=&quot;1억만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bItUGL/btsPgbSUmft/YIQOLqyKC5obkJdfKsAXYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbItUGL%2FbtsPgbSUmft%2FYIQOLqyKC5obkJdfKsAXYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-filename=&quot;1억만들기.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1억만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*본 계산기는 2025년 7월 1일자 기준의 금융상품입니다. 시기에 따라 상품이 없어지거나 이율이 달라질 수 있으니 참고용으로만 사용바랍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;1억 모으기 계산기 - 우대이율 비교 | 적금·펀드·청년저축&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;우대조건 포함 최대 이율로 계산하는 1억 모으기 계산기. 상품별 기본/최대 이율 비교 및 세후 수령액 제공&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;1억 목표, 저축 계산기, 적금 계산, 채권 수익률, 청년도약계좌, 펀드 수익률, CMA, 월 저축액, 세후 수익&quot; /&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;1억 만들기 목표 계산기 | 적금·채권·청년저축·펀드 비교&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;1억 모으기 위한 최적의 저축 방법을 비교해보세요. 세전/세후 금액 자동 계산&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/savings-calculator&quot;&gt;
  &lt;style&gt;
    body {
      font-family: 'Malgun Gothic', sans-serif;
      background: #f5f7fa;
      color: #333;
      margin: 0;
      padding: 20px;
    }
    .calculator {
      max-width: 800px;
      margin: 0 auto;
      background: #fff;
      padding: 25px;
      border-radius: 15px;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
    }
    h1 {
      color: #2c3e50;
      text-align: center;
      margin-bottom: 25px;
    }
    .tab-buttons {
      display: flex;
      gap: 10px;
      margin-bottom: 20px;
    }
    .tab-buttons button {
      flex: 1;
      padding: 12px;
      background: #ecf0f1;
      border: none;
      border-radius: 8px;
      font-weight: bold;
      cursor: pointer;
      transition: all 0.3s;
    }
    .tab-buttons button.active {
      background: #3498db;
      color: #fff;
    }
    .input-section {
      margin: 20px 0;
    }
    .input-group {
      margin-bottom: 15px;
    }
    .input-group label {
      display: block;
      margin-bottom: 8px;
      font-weight: bold;
    }
    .input-group input {
      width: 100%;
      padding: 12px;
      border: 1px solid #ddd;
      border-radius: 8px;
      font-size: 1rem;
    }
    .product-results {
      display: grid;
      grid-template-columns: 1fr;
      gap: 15px;
      margin-top: 20px;
    }
    .product-card {
      background: #fff;
      border: 1px solid #e0e0e0;
      border-radius: 10px;
      padding: 15px;
      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
    }
    .product-card h3 {
      color: #2c3e50;
      margin-top: 0;
      font-size: 1.2rem;
      border-bottom: 1px solid #eee;
      padding-bottom: 10px;
    }
    .result-value {
      font-size: 1.4rem;
      font-weight: bold;
      color: #e74c3c;
      margin: 15px 0;
      text-align: center;
    }
    .rate-info {
      background: #e8f4fd;
      padding: 12px;
      border-radius: 8px;
      margin: 15px 0;
      font-size: 0.95rem;
    }
    .rate-info span {
      display: block;
      margin: 5px 0;
    }
    .max-rate {
      color: #e74c3c;
      font-weight: bold;
    }
    .money-detail {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px;
      margin: 15px 0;
    }
    .money-item {
      background: #f8f9fa;
      padding: 10px;
      border-radius: 8px;
      text-align: center;
    }
    .money-item .label {
      color: #7f8c8d;
      font-size: 0.9rem;
      margin-bottom: 5px;
    }
    .money-item .amount {
      font-weight: bold;
      color: #2c3e50;
      font-size: 1.1rem;
    }
    .product-details {
      font-size: 0.9rem;
      color: #7f8c8d;
      margin-top: 15px;
    }
    .highlight {
      background: #f8f9fa;
      padding: 20px;
      border-radius: 10px;
      margin-top: 30px;
    }
    .period-buttons {
      display: flex;
      gap: 10px;
      margin-bottom: 20px;
    }
    .period-buttons button {
      flex: 1;
      padding: 12px;
      background: #ecf0f1;
      border: none;
      border-radius: 8px;
      font-weight: bold;
      cursor: pointer;
    }
    .period-buttons button.active {
      background: #3498db;
      color: #fff;
    }
    @media (max-width: 600px) {
      .money-detail {
        grid-template-columns: 1fr;
      }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;calculator&quot;&gt;
    &lt;h1&gt;1억 모으기 계산기&lt;/h1&gt;
    &lt;p style=&quot;text-align: center; margin-bottom: 25px;&quot;&gt;목표 기간 또는 월 저축액을 입력해주세요.&lt;/p&gt;
    
    &lt;div class=&quot;tab-buttons&quot;&gt;
      &lt;button class=&quot;active&quot; data-mode=&quot;period&quot;&gt;기간으로 계산&lt;/button&gt;
      &lt;button data-mode=&quot;savings&quot;&gt;월급액으로 계산&lt;/button&gt;
    &lt;/div&gt;
    
    &lt;!-- 기간 선택 섹션 --&gt;
    &lt;div id=&quot;period-section&quot; class=&quot;input-section&quot;&gt;
      &lt;div class=&quot;period-buttons&quot;&gt;
        &lt;button class=&quot;active&quot; data-years=&quot;3&quot;&gt;3년&lt;/button&gt;
        &lt;button data-years=&quot;5&quot;&gt;5년&lt;/button&gt;
        &lt;button data-years=&quot;10&quot;&gt;10년&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    
    &lt;!-- 월 저축액 입력 섹션 --&gt;
    &lt;div id=&quot;savings-section&quot; class=&quot;input-section&quot; style=&quot;display: none;&quot;&gt;
      &lt;div class=&quot;input-group&quot;&gt;
        &lt;label for=&quot;monthly-savings&quot;&gt;월 저축 가능 금액 (원)&lt;/label&gt;
        &lt;input type=&quot;number&quot; id=&quot;monthly-savings&quot; placeholder=&quot;예: 1000000&quot;&gt;
      &lt;/div&gt;
      &lt;button onclick=&quot;calculateBySavings()&quot; style=&quot;width: 100%; padding: 12px; background: #3498db; color: #fff; border: none; border-radius: 8px; cursor: pointer; font-weight: bold;&quot;&gt;계산하기&lt;/button&gt;
    &lt;/div&gt;
    
    &lt;div id=&quot;result-container&quot;&gt;&lt;/div&gt;
    
    &lt;div class=&quot;highlight&quot;&gt;
      &lt;h3&gt;  계산 방법 안내&lt;/h3&gt;
      &lt;p&gt;&lt;strong&gt;기간으로 계산&lt;/strong&gt;: 목표 기간 선택 시 필요한 월 저축액 계산&lt;/p&gt;
      &lt;p&gt;&lt;strong&gt;월급액으로 계산&lt;/strong&gt;: 현재 저축 가능 금액으로 1억 모으는 기간 계산&lt;/p&gt;
      &lt;p&gt;* 모든 수치는 &lt;u&gt;최대 우대 이율&lt;/u&gt; 기준이며, 실제 가입 조건 확인이 필요합니다.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;script&gt;
    // 상품 데이터 (기본 이율 + 최대 우대 이율)
    const products = [
      { 
        name: &quot;KB국민 My우대적금&quot;, 
        baseRate: 4.5,
        maxRate: 6.5,
        rateCondition: &quot;직장인 + 자동이체 + 인터넷뱅킹 가입 시&quot;,
        desc: &quot;최대 연 6.5%, 월 100만원 한도, 최장 3년&quot;,
        taxFree: false,
        maxMonthly: 1000000,
        link: &quot;https://www.kbstar.com&quot;
      },
      { 
        name: &quot;IBK기업 청년도전적금&quot;, 
        baseRate: 5.0,
        maxRate: 7.0,
        rateCondition: &quot;만19~34세 + 첫 가입 + 급여이체 시&quot;,
        desc: &quot;최대 연 7.0%, 월 70만원 한도, 3년 만기&quot;,
        taxFree: false,
        maxMonthly: 700000,
        link: &quot;https://www.ibk.co.kr&quot;
      },
      { 
        name: &quot;펀드 (미국 S&amp;P 500 인덱스)&quot;, 
        baseRate: 7.0,
        maxRate: 10.0,
        rateCondition: &quot;10년 평균 수익률 기준&quot;,
        desc: &quot;연 7~10% (변동), 장기투자 추천, 원금 보장 없음&quot;,
        taxFree: false,
        maxMonthly: null,
        link: &quot;https://www.koreafund.com&quot;
      },
      { 
        name: &quot;청년도약계좌 (KB)&quot;, 
        baseRate: 5.0,
        maxRate: 6.0,
        rateCondition: &quot;만19~34세 + 연소득 7,200만원 이하&quot;,
        desc: &quot;최대 연 6.0%, 연 1,200만원 한도, 세액공제 가능&quot;,
        taxFree: true,
        maxMonthly: 1000000,
        link: &quot;https://obank.kbstar.com&quot;
      }
    ];

    // 변수 초기화
    let currentMode = &quot;period&quot;;
    let selectedYears = 3;

    // 탭 전환 이벤트
    const tabButtons = document.querySelectorAll('.tab-buttons button');
    tabButtons.forEach(btn =&gt; {
      btn.addEventListener('click', () =&gt; {
        tabButtons.forEach(b =&gt; b.classList.remove('active'));
        btn.classList.add('active');
        currentMode = btn.getAttribute('data-mode');
        
        document.getElementById('period-section').style.display = 
          currentMode === 'period' ? 'block' : 'none';
        document.getElementById('savings-section').style.display = 
          currentMode === 'savings' ? 'block' : 'none';
        
        if (currentMode === 'period') calculateByPeriod();
      });
    });

    // 기간 선택 이벤트
    const periodButtons = document.querySelectorAll('.period-buttons button');
    periodButtons.forEach(btn =&gt; {
      btn.addEventListener('click', () =&gt; {
        periodButtons.forEach(b =&gt; b.classList.remove('active'));
        btn.classList.add('active');
        selectedYears = parseInt(btn.getAttribute('data-years'));
        calculateByPeriod();
      });
    });

    // 기간으로 계산 (월 저축액 산출)
    function calculateByPeriod() {
      const resultContainer = document.getElementById('result-container');
      let resultsHTML = `&lt;h2&gt;${selectedYears}년 안에 1억 모으기&lt;/h2&gt;&lt;div class=&quot;product-results&quot;&gt;`;
      
      products.forEach(product =&gt; {
        // 월 한도 초과 상품 필터링 (3년 목표 시)
        if (selectedYears === 3 &amp;&amp; product.maxMonthly &amp;&amp; 
            (100000000 / (selectedYears * 12) &gt; product.maxMonthly)) {
          return;
        }

        const taxRate = product.taxFree ? 0 : 0.154;
        const netMaxRate = product.maxRate * (1 - taxRate);
        const months = selectedYears * 12;
        const monthlyRate = product.maxRate / 100 / 12;
        
        // 월 저축액 계산 (1만원 단위 올림)
        const monthlyPayment = 100000000 * monthlyRate / (Math.pow(1 + monthlyRate, months) - 1);
        const roundedMonthly = Math.ceil(monthlyPayment / 10000) * 10000;

        // 금액 계산
        const totalPayment = roundedMonthly * months;
        const grossAmount = roundedMonthly * (Math.pow(1 + monthlyRate, months) - 1) / monthlyRate;
        const taxAmount = (grossAmount - totalPayment) * taxRate;
        const netAmount = grossAmount - taxAmount;

        resultsHTML += `
          &lt;div class=&quot;product-card&quot;&gt;
            &lt;h3&gt;${product.name} &lt;a href=&quot;${product.link}&quot; target=&quot;_blank&quot; style=&quot;font-size: 0.8rem; color: #3498db; text-decoration: none;&quot;&gt;[상품안내]&lt;/a&gt;&lt;/h3&gt;
            
            &lt;div class=&quot;result-value&quot;&gt;${roundedMonthly.toLocaleString()}원/월&lt;/div&gt;
            
            &lt;div class=&quot;rate-info&quot;&gt;
              &lt;span&gt;기본 이율: 연 ${product.baseRate.toFixed(1)}%&lt;/span&gt;
              &lt;span class=&quot;max-rate&quot;&gt;▼ 최대 우대 이율: 연 ${product.maxRate.toFixed(1)}%&lt;/span&gt;
              &lt;span&gt;(${product.rateCondition})&lt;/span&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;money-detail&quot;&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;총 납입액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(totalPayment).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;세전 최종금액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(grossAmount).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;세후 수령금액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(netAmount).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;예상 수익금&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(netAmount - totalPayment).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;product-details&quot;&gt;
              &lt;p&gt;${product.desc}&lt;/p&gt;
              ${product.maxMonthly ? `&lt;p&gt;월 최대 납입 한도: ${product.maxMonthly.toLocaleString()}원&lt;/p&gt;` : ''}
            &lt;/div&gt;
          &lt;/div&gt;
        `;
      });
      
      resultsHTML += `&lt;/div&gt;`;
      resultContainer.innerHTML = resultsHTML;
    }

    // 월 저축액으로 계산 (기간 산출)
    function calculateBySavings() {
      const monthlySavings = parseFloat(document.getElementById('monthly-savings').value);
      if (!monthlySavings || monthlySavings &lt;= 0) {
        alert(&quot;월 저축액을 올바르게 입력해주세요.&quot;);
        return;
      }

      const resultContainer = document.getElementById('result-container');
      let resultsHTML = `&lt;h2&gt;월 ${monthlySavings.toLocaleString()}원으로 1억 모으기&lt;/h2&gt;&lt;div class=&quot;product-results&quot;&gt;`;
      
      products.forEach(product =&gt; {
        // 월 한도 초과 상품 필터링
        if (product.maxMonthly &amp;&amp; monthlySavings &gt; product.maxMonthly) {
          return;
        }

        const taxRate = product.taxFree ? 0 : 0.154;
        const netMaxRate = product.maxRate * (1 - taxRate);
        const monthlyRate = product.maxRate / 100 / 12;
        
        // 기간 계산 (개월 수)
        let months = 0;
        if (monthlySavings &gt;= 100000000) {
          months = 1;
        } else {
          months = Math.log(1 + (100000000 * monthlyRate / monthlySavings)) / Math.log(1 + monthlyRate);
        }
        const years = Math.ceil(months / 12);
        const actualMonths = Math.ceil(months);

        // 금액 계산
        const totalPayment = monthlySavings * actualMonths;
        const grossAmount = monthlySavings * (Math.pow(1 + monthlyRate, actualMonths) - 1) / monthlyRate;
        const taxAmount = (grossAmount - totalPayment) * taxRate;
        const netAmount = grossAmount - taxAmount;

        resultsHTML += `
          &lt;div class=&quot;product-card&quot;&gt;
            &lt;h3&gt;${product.name} &lt;a href=&quot;${product.link}&quot; target=&quot;_blank&quot; style=&quot;font-size: 0.8rem; color: #3498db; text-decoration: none;&quot;&gt;[상품안내]&lt;/a&gt;&lt;/h3&gt;
            
            &lt;div class=&quot;result-value&quot;&gt;약 ${years}년 ${actualMonths % 12}개월&lt;/div&gt;
            
            &lt;div class=&quot;rate-info&quot;&gt;
              &lt;span&gt;기본 이율: 연 ${product.baseRate.toFixed(1)}%&lt;/span&gt;
              &lt;span class=&quot;max-rate&quot;&gt;▼ 최대 우대 이율: 연 ${product.maxRate.toFixed(1)}%&lt;/span&gt;
              &lt;span&gt;(${product.rateCondition})&lt;/span&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;money-detail&quot;&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;총 납입액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(totalPayment).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;세전 최종금액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(grossAmount).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;세후 수령금액&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(netAmount).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;money-item&quot;&gt;
                &lt;div class=&quot;label&quot;&gt;예상 수익금&lt;/div&gt;
                &lt;div class=&quot;amount&quot;&gt;${Math.round(netAmount - totalPayment).toLocaleString()}원&lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class=&quot;product-details&quot;&gt;
              &lt;p&gt;${product.desc}&lt;/p&gt;
              ${product.maxMonthly ? `&lt;p&gt;월 최대 납입 한도: ${product.maxMonthly.toLocaleString()}원&lt;/p&gt;` : ''}
            &lt;/div&gt;
          &lt;/div&gt;
        `;
      });
      
      resultsHTML += `&lt;/div&gt;`;
      resultContainer.innerHTML = resultsHTML;
    }

    // 초기 계산 실행
    calculateByPeriod();
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>1억</category>
      <category>1억만들기</category>
      <category>1억만들기계산기</category>
      <category>1억모으기</category>
      <category>1억모으기통장</category>
      <category>1억목표</category>
      <category>3년에1억모으기</category>
      <category>적금1억만들기</category>
      <category>청년저축1억만들기</category>
      <category>펀드로1억만들기</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/63</guid>
      <comments>https://no1card.tistory.com/entry/1%EC%96%B5-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%A0%81%EA%B8%88-vs-%ED%8E%80%EB%93%9C-vs-%EC%B2%AD%EB%85%84%EC%A0%80%EC%B6%95-1%EC%96%B5-%EB%AA%A8%EC%9C%BC%EA%B8%B0-%EC%9B%94-%EB%82%A9%EC%9E%85%EA%B8%88-%EB%B9%84%EA%B5%90-%EA%B3%84%EC%82%B0%EA%B8%B0#entry63comment</comments>
      <pubDate>Mon, 14 Jul 2025 12:43:31 +0900</pubDate>
    </item>
    <item>
      <title>[2025 최신]무료 TDEE 계산기 - 체중 감량/증량을 위한 과학적 칼로리 계산</title>
      <link>https://no1card.tistory.com/entry/2025-%EC%B5%9C%EC%8B%A0%EB%AC%B4%EB%A3%8C-TDEE-%EA%B3%84%EC%82%B0%EA%B8%B0-%EC%B2%B4%EC%A4%91-%EA%B0%90%EB%9F%89%EC%A6%9D%EB%9F%89%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B3%BC%ED%95%99%EC%A0%81-%EC%B9%BC%EB%A1%9C%EB%A6%AC-%EA%B3%84%EC%82%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tdee1.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFyP1t/btsPgTXKN29/JlXeuvot7VmhwfgkQcXafk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFyP1t/btsPgTXKN29/JlXeuvot7VmhwfgkQcXafk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFyP1t/btsPgTXKN29/JlXeuvot7VmhwfgkQcXafk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFyP1t%2FbtsPgTXKN29%2FJlXeuvot7VmhwfgkQcXafk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-filename=&quot;tdee1.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; [2025 최신] TDEE 계산기로 하루 칼로리 필요량 정확히 알아보기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; TDEE&amp;middot;BMR 자동 계산기｜체중 유지/다이어트/벌크업 칼로리 측정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;추천 TDEE 계산법｜Mifflin-St Jeor 공식 기반 칼로리 계산기&lt;/span&gt;&lt;br /&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;TDEE 계산기 - 일일 에너지 소비량 계산 | 건강 계산기&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;정확한 TDEE(총 일일 에너지 소비량) 계산기로 체중 유지, 감량 또는 증량에 필요한 칼로리를 계산해보세요. 성별, 나이, 체중, 키, 활동 수준을 기반으로 계산합니다.&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;TDEE 계산기, 칼로리 계산, 일일 에너지 소비량, 체중 관리, 칼로리 요구량, BMR 계산&quot;&gt;
    &lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot;&gt;
    &lt;meta name=&quot;author&quot; content=&quot;건강 계산기&quot;&gt;
    
    &lt;!-- Open Graph / Facebook --&gt;
    &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
    &lt;meta property=&quot;og:url&quot; content=&quot;https://yourdomain.com/tdee-calculator&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;TDEE 계산기 - 일일 에너지 소비량 계산&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;정확한 TDEE(총 일일 에너지 소비량) 계산기로 체중 관리에 필요한 칼로리를 계산해보세요.&quot;&gt;
    &lt;meta property=&quot;og:image&quot; content=&quot;https://yourdomain.com/images/tdee-calculator-preview.jpg&quot;&gt;
    
    &lt;!-- Twitter --&gt;
    &lt;meta property=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
    &lt;meta property=&quot;twitter:url&quot; content=&quot;https://yourdomain.com/tdee-calculator&quot;&gt;
    &lt;meta property=&quot;twitter:title&quot; content=&quot;TDEE 계산기 - 일일 에너지 소비량 계산&quot;&gt;
    &lt;meta property=&quot;twitter:description&quot; content=&quot;정확한 TDEE(총 일일 에너지 소비량) 계산기로 체중 관리에 필요한 칼로리를 계산해보세요.&quot;&gt;
    &lt;meta property=&quot;twitter:image&quot; content=&quot;https://yourdomain.com/images/tdee-calculator-preview.jpg&quot;&gt;
    
    &lt;style&gt;
        /* 기본 스타일 */
        :root {
            --primary-color: #3498db;
            --secondary-color: #2980b9;
            --text-color: #333;
            --light-gray: #f5f5f5;
            --medium-gray: #e0e0e0;
            --dark-gray: #777;
            --white: #fff;
            --success-color: #2ecc71;
            --warning-color: #e74c3c;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            color: var(--text-color);
            background-color: var(--light-gray);
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 0 20px;
        }

        /* 헤더 스타일 */
        .header {
            background-color: var(--primary-color);
            color: var(--white);
            padding: 30px 0;
            text-align: center;
            margin-bottom: 30px;
        }

        .header h1 {
            font-size: 2.5rem;
            margin-bottom: 10px;
        }

        /* 계산기 컨테이너 */
        .calculator-container {
            display: flex;
            flex-wrap: wrap;
            gap: 30px;
            margin-bottom: 50px;
        }

        .calculator-form, .calculator-result {
            background-color: var(--white);
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            padding: 30px;
            flex: 1;
            min-width: 300px;
        }

        .calculator-form {
            max-width: 400px;
        }

        /* 폼 스타일 */
        .form-group {
            margin-bottom: 20px;
        }

        .form-group label {
            display: block;
            margin-bottom: 8px;
            font-weight: bold;
        }

        .form-group input[type=&quot;number&quot;],
        .form-group select {
            width: 100%;
            padding: 12px;
            border: 1px solid var(--medium-gray);
            border-radius: 5px;
            font-size: 16px;
        }

        .radio-group {
            display: flex;
            gap: 20px;
            margin-top: 8px;
        }

        .radio-group label {
            display: flex;
            align-items: center;
            gap: 5px;
            font-weight: normal;
            cursor: pointer;
        }

        .calculate-btn {
            width: 100%;
            padding: 12px;
            background-color: var(--primary-color);
            color: var(--white);
            border: none;
            border-radius: 5px;
            font-size: 16px;
            font-weight: bold;
            cursor: pointer;
            transition: background-color 0.3s;
        }

        .calculate-btn:hover {
            background-color: var(--secondary-color);
        }

        /* 결과 섹션 스타일 */
        .result-section {
            text-align: center;
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid var(--medium-gray);
        }

        .tdee-result {
            font-size: 2.5rem;
            font-weight: bold;
            color: var(--primary-color);
            margin-bottom: 10px;
        }

        .tdee-result .unit {
            font-size: 1rem;
            color: var(--text-color);
        }

        .note {
            color: var(--dark-gray);
            font-size: 0.9rem;
        }

        /* 활동 수준 테이블 */
        .activity-levels {
            margin-bottom: 30px;
        }

        .activity-levels h3 {
            margin-bottom: 15px;
            font-size: 1.2rem;
        }

        .activity-levels table {
            width: 100%;
            border-collapse: collapse;
        }

        .activity-levels th, 
        .activity-levels td {
            padding: 10px;
            text-align: left;
            border-bottom: 1px solid var(--medium-gray);
        }

        .activity-levels th {
            background-color: var(--light-gray);
        }

        /* 체중 관리 섹션 */
        .weight-management {
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
            margin-bottom: 30px;
        }

        .weight-loss, .weight-gain {
            flex: 1;
            min-width: 250px;
        }

        .weight-management h3 {
            margin-bottom: 15px;
            font-size: 1.2rem;
        }

        .weight-management ul {
            list-style-type: none;
        }

        .weight-management li {
            margin-bottom: 8px;
        }

        /* BMI 섹션 */
        .bmi-section {
            text-align: center;
            margin-bottom: 30px;
            padding: 20px 0;
            border-top: 1px solid var(--medium-gray);
            border-bottom: 1px solid var(--medium-gray);
        }

        .bmi-result {
            font-size: 2rem;
            font-weight: bold;
            margin-bottom: 5px;
        }

        .bmi-category {
            font-size: 1rem;
            font-weight: normal;
        }

        .bmi-range {
            color: var(--dark-gray);
            font-size: 0.9rem;
        }

        /* 다량 영양소 섹션 */
        .macronutrients {
            margin-bottom: 30px;
        }

        .macros-tabs {
            display: flex;
            gap: 10px;
            margin-bottom: 15px;
            flex-wrap: wrap;
        }

        .macro-tab {
            padding: 8px 15px;
            background-color: var(--light-gray);
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
        }

        .macro-tab.active {
            background-color: var(--primary-color);
            color: var(--white);
        }

        .macro-info ul {
            list-style-type: none;
        }

        .macro-info li {
            margin-bottom: 8px;
        }

        /* 액션 버튼 */
        .action-buttons {
            display: flex;
            gap: 10px;
            flex-wrap: wrap;
        }

        .action-btn {
            padding: 10px 15px;
            background-color: var(--light-gray);
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
        }

        .action-btn:hover {
            background-color: var(--medium-gray);
        }

        /* TDEE 정보 섹션 */
        .tdee-info {
            background-color: var(--white);
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            padding: 30px;
            margin-bottom: 50px;
        }

        .tdee-info h2 {
            margin-bottom: 20px;
            color: var(--primary-color);
        }

        .tdee-info h3 {
            margin: 25px 0 15px;
            color: var(--primary-color);
        }

        .tdee-info p, 
        .tdee-info ul {
            margin-bottom: 15px;
        }

        .tdee-info ul {
            padding-left: 20px;
        }

        .tdee-info table {
            width: 100%;
            border-collapse: collapse;
            margin: 15px 0;
        }

        .tdee-info th, 
        .tdee-info td {
            padding: 10px;
            text-align: left;
            border-bottom: 1px solid var(--medium-gray);
        }

        .tdee-info th {
            background-color: var(--light-gray);
        }

        /* 푸터 스타일 */
        .footer {
            text-align: center;
            padding: 20px 0;
            background-color: var(--medium-gray);
            color: var(--text-color);
        }

        /* 반응형 디자인 */
        @media (max-width: 768px) {
            .calculator-container {
                flex-direction: column;
            }
            
            .calculator-form, 
            .calculator-result {
                max-width: 100%;
            }
            
            .weight-management {
                flex-direction: column;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;header class=&quot;header&quot;&gt;
        &lt;div class=&quot;container&quot;&gt;
            &lt;h1&gt;TDEE 계산기&lt;/h1&gt;
            &lt;p&gt;총 일일 에너지 소비량을 계산하여 체중 관리를 과학적으로 접근하세요&lt;/p&gt;
        &lt;/div&gt;
    &lt;/header&gt;

    &lt;main class=&quot;container&quot;&gt;
        &lt;div class=&quot;calculator-container&quot;&gt;
            &lt;div class=&quot;calculator-form&quot;&gt;
                &lt;form id=&quot;tdee-form&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;gender&quot;&gt;성별:&lt;/label&gt;
                        &lt;div class=&quot;radio-group&quot;&gt;
                            &lt;input type=&quot;radio&quot; id=&quot;male&quot; name=&quot;gender&quot; value=&quot;male&quot; checked&gt;
                            &lt;label for=&quot;male&quot;&gt;남성&lt;/label&gt;
                            &lt;input type=&quot;radio&quot; id=&quot;female&quot; name=&quot;gender&quot; value=&quot;female&quot;&gt;
                            &lt;label for=&quot;female&quot;&gt;여성&lt;/label&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;age&quot;&gt;나이(세)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;age&quot; name=&quot;age&quot; min=&quot;18&quot; max=&quot;100&quot; value=&quot;30&quot; required&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;weight&quot;&gt;체중 (kg)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;weight&quot; name=&quot;weight&quot; min=&quot;30&quot; max=&quot;300&quot; value=&quot;70&quot; required&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;height&quot;&gt;키 (cm)&lt;/label&gt;
                        &lt;input type=&quot;number&quot; id=&quot;height&quot; name=&quot;height&quot; min=&quot;100&quot; max=&quot;250&quot; value=&quot;170&quot; required&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;activity&quot;&gt;활동 수준&lt;/label&gt;
                        &lt;select id=&quot;activity&quot; name=&quot;activity&quot; required&gt;
                            &lt;option value=&quot;1.2&quot;&gt;거의 활동 없음 (앉아서 일함)&lt;/option&gt;
                            &lt;option value=&quot;1.375&quot;&gt;가벼운 활동 (주 1-3일 운동)&lt;/option&gt;
                            &lt;option value=&quot;1.55&quot;&gt;보통 활동 (주 3-5일 운동)&lt;/option&gt;
                            &lt;option value=&quot;1.725&quot;&gt;매우 활동적 (주 6-7일 운동)&lt;/option&gt;
                            &lt;option value=&quot;1.9&quot;&gt;극도로 활동적 (육체적 직업 또는 하루 2회 운동)&lt;/option&gt;
                        &lt;/select&gt;
                    &lt;/div&gt;

                    &lt;button type=&quot;submit&quot; class=&quot;calculate-btn&quot;&gt;계산하기&lt;/button&gt;
                &lt;/form&gt;
            &lt;/div&gt;

            &lt;div class=&quot;calculator-result&quot; id=&quot;result&quot; style=&quot;display: none;&quot;&gt;
                &lt;h2&gt;당신의 총 일일 에너지 소비량 (TDEE)&lt;/h2&gt;
                
                &lt;div class=&quot;result-section&quot;&gt;
                    &lt;div class=&quot;tdee-result&quot;&gt;
                        &lt;span id=&quot;tdee-value&quot;&gt;0&lt;/span&gt;
                        &lt;span class=&quot;unit&quot;&gt;칼로리/일&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;p class=&quot;note&quot;&gt;체중 유지를 위해 하루에 필요한 칼로리 양입니다.&lt;/p&gt;
                &lt;/div&gt;

                &lt;div class=&quot;activity-levels&quot;&gt;
                    &lt;h3&gt;다양한 활동 수준에서의 TDEE&lt;/h3&gt;
                    &lt;table&gt;
                        &lt;tr&gt;
                            &lt;th&gt;활동 수준&lt;/th&gt;
                            &lt;th&gt;칼로리/일&lt;/th&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;비활동적&lt;/td&gt;
                            &lt;td id=&quot;sedentary&quot;&gt;0&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;가벼운 활동&lt;/td&gt;
                            &lt;td id=&quot;light&quot;&gt;0&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;보통&lt;/td&gt;
                            &lt;td id=&quot;moderate&quot;&gt;0&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;매우 활동적&lt;/td&gt;
                            &lt;td id=&quot;active&quot;&gt;0&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;극도로 활동적&lt;/td&gt;
                            &lt;td id=&quot;extreme&quot;&gt;0&lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/table&gt;
                &lt;/div&gt;

                &lt;div class=&quot;weight-management&quot;&gt;
                    &lt;div class=&quot;weight-loss&quot;&gt;
                        &lt;h3&gt;체중 감량을 위한 에너지 섭취량&lt;/h3&gt;
                        &lt;ul&gt;
                            &lt;li&gt;약간의 체중 감량 (0.25kg/주): &lt;span id=&quot;mild-loss&quot;&gt;0&lt;/span&gt; 칼로리/일&lt;/li&gt;
                            &lt;li&gt;체중 감량 (0.5kg/주): &lt;span id=&quot;moderate-loss&quot;&gt;0&lt;/span&gt; 칼로리/일&lt;/li&gt;
                        &lt;/ul&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;weight-gain&quot;&gt;
                        &lt;h3&gt;체중 증가를 위한 에너지 섭취량&lt;/h3&gt;
                        &lt;ul&gt;
                            &lt;li&gt;약간의 체중 증가 (0.25kg/주): &lt;span id=&quot;mild-gain&quot;&gt;0&lt;/span&gt; 칼로리/일&lt;/li&gt;
                            &lt;li&gt;체중 증가 (0.5kg/주): &lt;span id=&quot;moderate-gain&quot;&gt;0&lt;/span&gt; 칼로리/일&lt;/li&gt;
                        &lt;/ul&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;bmi-section&quot;&gt;
                    &lt;h3&gt;당신의 체질량 지수 (BMI)&lt;/h3&gt;
                    &lt;div class=&quot;bmi-result&quot;&gt;
                        &lt;span id=&quot;bmi-value&quot;&gt;0&lt;/span&gt;
                        &lt;span class=&quot;bmi-category&quot; id=&quot;bmi-category&quot;&gt;(정상 체중)&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;p class=&quot;bmi-range&quot;&gt;정상 BMI 범위: 18.5 ~ 24.9&lt;/p&gt;
                &lt;/div&gt;

                &lt;div class=&quot;macronutrients&quot;&gt;
                    &lt;h3&gt;다량 영양소 섭취 세부사항&lt;/h3&gt;
                    &lt;div class=&quot;macros-tabs&quot;&gt;
                        &lt;button class=&quot;macro-tab active&quot; data-macro=&quot;moderate&quot;&gt;중간 탄수화물 (30/35/35)&lt;/button&gt;
                        &lt;button class=&quot;macro-tab&quot; data-macro=&quot;low&quot;&gt;낮은 탄수화물 (40/40/20)&lt;/button&gt;
                        &lt;button class=&quot;macro-tab&quot; data-macro=&quot;high&quot;&gt;높은 탄수화물 (30/20/50)&lt;/button&gt;
                    &lt;/div&gt;

                    &lt;div class=&quot;macros-content&quot;&gt;
                        &lt;div class=&quot;macro-info&quot; id=&quot;moderate-macro&quot;&gt;
                            &lt;ul&gt;
                                &lt;li&gt;단백질: &lt;span id=&quot;mod-protein&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;지방: &lt;span id=&quot;mod-fat&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;탄수화물: &lt;span id=&quot;mod-carbs&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                            &lt;/ul&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;macro-info&quot; id=&quot;low-macro&quot; style=&quot;display: none;&quot;&gt;
                            &lt;ul&gt;
                                &lt;li&gt;단백질: &lt;span id=&quot;low-protein&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;지방: &lt;span id=&quot;low-fat&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;탄수화물: &lt;span id=&quot;low-carbs&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                            &lt;/ul&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;macro-info&quot; id=&quot;high-macro&quot; style=&quot;display: none;&quot;&gt;
                            &lt;ul&gt;
                                &lt;li&gt;단백질: &lt;span id=&quot;high-protein&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;지방: &lt;span id=&quot;high-fat&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                                &lt;li&gt;탄수화물: &lt;span id=&quot;high-carbs&quot;&gt;0&lt;/span&gt;g&lt;/li&gt;
                            &lt;/ul&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;action-buttons&quot;&gt;
                    &lt;button id=&quot;print-btn&quot; class=&quot;action-btn&quot;&gt;인쇄하기&lt;/button&gt;
                    &lt;button id=&quot;copy-btn&quot; class=&quot;action-btn&quot;&gt;결과 복사&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;article class=&quot;tdee-info&quot;&gt;
            &lt;h2&gt;TDEE란 무엇인가요?&lt;/h2&gt;
            &lt;p&gt;&lt;strong&gt;TDEE(Total Daily Energy Expenditure)&lt;/strong&gt;는 하루 동안 소비하는 총 에너지 양을 의미합니다. 이는 기초 대사율(BMR), 신체 활동, 음식의 열 효과(TEF) 등 모든 에너지 소비를 포함합니다.&lt;/p&gt;
            
            &lt;h3&gt;TDEE의 구성 요소&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;기초 대사율(BMR, 50-70%)&lt;/strong&gt;: 생명 유지를 위한 기본적인 기능(호흡, 심장 박동 등)에 필요한 에너지&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;신체 활동(20-30%)&lt;/strong&gt;: 운동 및 일상 활동으로 소비되는 에너지&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;음식의 열 효과(TEF, 10%)&lt;/strong&gt;: 음식을 소비, 흡수, 저장하는 과정에서 소비되는 에너지&lt;/li&gt;
            &lt;/ul&gt;
            
            &lt;h3&gt;TDEE 계산의 중요성&lt;/h3&gt;
            &lt;p&gt;TDEE를 정확히 계산하면 체중 관리 목표를 과학적으로 설정할 수 있습니다:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;체중 유지&lt;/strong&gt;: TDEE와 동일한 칼로리 섭취&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;체중 감량&lt;/strong&gt;: TDEE보다 500kcal 적게 섭취 (약 0.5kg/주 감량)&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;체중 증가&lt;/strong&gt;: TDEE보다 500kcal 많이 섭취 (약 0.5kg/주 증가)&lt;/li&gt;
            &lt;/ul&gt;
            
            &lt;h3&gt;TDEE 계산 공식&lt;/h3&gt;
            &lt;p&gt;TDEE는 일반적으로 Mifflin-St Jeor 공식을 사용하여 계산합니다:&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;남성:&lt;/strong&gt; BMR = (10 × 체중(kg)) + (6.25 × 키(cm)) - (5 × 나이) + 5&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;여성:&lt;/strong&gt; BMR = (10 × 체중(kg)) + (6.25 × 키(cm)) - (5 × 나이) - 161&lt;/p&gt;
            &lt;p&gt;BMR에 활동 계수를 곱하여 TDEE를 계산합니다.&lt;/p&gt;
            
            &lt;h3&gt;활동 수준별 계수&lt;/h3&gt;
            &lt;table&gt;
                &lt;tr&gt;
                    &lt;th&gt;활동 수준&lt;/th&gt;
                    &lt;th&gt;계수&lt;/th&gt;
                    &lt;th&gt;설명&lt;/th&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;거의 활동 없음&lt;/td&gt;
                    &lt;td&gt;1.2&lt;/td&gt;
                    &lt;td&gt;앉아서 일하거나 운동을 거의 하지 않음&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;가벼운 활동&lt;/td&gt;
                    &lt;td&gt;1.375&lt;/td&gt;
                    &lt;td&gt;주 1-3일 가벼운 운동&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;보통 활동&lt;/td&gt;
                    &lt;td&gt;1.55&lt;/td&gt;
                    &lt;td&gt;주 3-5일 중간 강도 운동&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;매우 활동적&lt;/td&gt;
                    &lt;td&gt;1.725&lt;/td&gt;
                    &lt;td&gt;주 6-7일 고강도 운동&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;극도로 활동적&lt;/td&gt;
                    &lt;td&gt;1.9&lt;/td&gt;
                    &lt;td&gt;육체적 직업 또는 하루 2회 운동&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
            
            &lt;h3&gt;TDEE 계산기의 활용&lt;/h3&gt;
            &lt;p&gt;이 계산기는 체중 관리 목표에 따라:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;체중 유지에 필요한 칼로리&lt;/li&gt;
                &lt;li&gt;체중 감량을 위한 칼로리 제안&lt;/li&gt;
                &lt;li&gt;체중 증가를 위한 칼로리 제안&lt;/li&gt;
                &lt;li&gt;다량 영양소(단백질, 지방, 탄수화물) 분배&lt;/li&gt;
                &lt;li&gt;BMI 계산 및 평가&lt;/li&gt;
            &lt;/ul&gt;
            
            &lt;h3&gt;주의사항&lt;/h3&gt;
            &lt;p&gt;TDEE 계산 결과는 추정치이며 개인차가 있을 수 있습니다. 정확한 영양 상담이 필요하면 전문가와 상담하세요.&lt;/p&gt;
        &lt;/article&gt;
    &lt;/main&gt;

    &lt;footer class=&quot;footer&quot;&gt;
        &lt;div class=&quot;container&quot;&gt;
            &lt;p&gt; 2025 TDEE 계산기. DesignU © All right reserved.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/footer&gt;

    &lt;script&gt;
        document.addEventListener('DOMContentLoaded', function() {
            const form = document.getElementById('tdee-form');
            const resultSection = document.getElementById('result');
            
            form.addEventListener('submit', function(e) {
                e.preventDefault();
                calculateTDEE();
            });
            
            // 매크로 탭 전환
            document.querySelectorAll('.macro-tab').forEach(tab =&gt; {
                tab.addEventListener('click', function() {
                    // 모든 탭 비활성화
                    document.querySelectorAll('.macro-tab').forEach(t =&gt; {
                        t.classList.remove('active');
                    });
                    
                    // 현재 탭 활성화
                    this.classList.add('active');
                    
                    // 모든 매크로 정보 숨기기
                    document.querySelectorAll('.macro-info').forEach(info =&gt; {
                        info.style.display = 'none';
                    });
                    
                    // 선택한 매크로 정보 표시
                    const macroType = this.getAttribute('data-macro');
                    document.getElementById(`${macroType}-macro`).style.display = 'block';
                });
            });
            
            // 인쇄 버튼
            document.getElementById('print-btn').addEventListener('click', function() {
                window.print();
            });
            
            // PDF 다운로드 버튼
            document.getElementById('download-btn').addEventListener('click', function() {
                // html2pdf 라이브러리가 필요합니다
                alert('PDF 저장 기능을 사용하려면 html2pdf.bundle.min.js 파일을 추가해야 합니다.');
                /*
                const element = document.getElementById('result');
                const opt = {
                    margin: 10,
                    filename: 'TDEE_계산_결과.pdf',
                    image: { type: 'jpeg', quality: 0.98 },
                    html2canvas: { scale: 2 },
                    jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
                };
                
                html2pdf().from(element).set(opt).save();
                */
            });
            
            // 결과 복사 버튼
            document.getElementById('copy-btn').addEventListener('click', function() {
                const resultText = document.getElementById('result').innerText;
                navigator.clipboard.writeText(resultText).then(() =&gt; {
                    alert('결과가 클립보드에 복사되었습니다.');
                });
            });
        });

        function calculateTDEE() {
            // 입력 값 가져오기
            const gender = document.querySelector('input[name=&quot;gender&quot;]:checked').value;
            const age = parseFloat(document.getElementById('age').value);
            const weight = parseFloat(document.getElementById('weight').value);
            const height = parseFloat(document.getElementById('height').value);
            const activityLevel = parseFloat(document.getElementById('activity').value);
            
            // BMR 계산 (Mifflin-St Jeor 공식)
            let bmr;
            if (gender === 'male') {
                bmr = (10 * weight) + (6.25 * height) - (5 * age) + 5;
            } else {
                bmr = (10 * weight) + (6.25 * height) - (5 * age) - 161;
            }
            
            // TDEE 계산
            const tdee = Math.round(bmr * activityLevel);
            
            // 다양한 활동 수준에서의 TDEE 계산
            const sedentary = Math.round(bmr * 1.2);
            const light = Math.round(bmr * 1.375);
            const moderate = Math.round(bmr * 1.55);
            const active = Math.round(bmr * 1.725);
            const extreme = Math.round(bmr * 1.9);
            
            // 체중 관리 칼로리 계산
            const mildLoss = tdee - 250;
            const moderateLoss = tdee - 500;
            const mildGain = tdee + 250;
            const moderateGain = tdee + 500;
            
            // BMI 계산
            const heightInMeters = height / 100;
            const bmi = (weight / (heightInMeters * heightInMeters)).toFixed(2);
            let bmiCategory;
            
            if (bmi &lt; 18.5) {
                bmiCategory = '저체중';
            } else if (bmi &gt;= 18.5 &amp;&amp; bmi &lt; 23) {
                bmiCategory = '정상 체중';
            } else if (bmi &gt;= 23 &amp;&amp; bmi &lt; 25) {
                bmiCategory = '과체중';
            } else if (bmi &gt;= 25 &amp;&amp; bmi &lt; 30) {
                bmiCategory = '비만';
            } else {
                bmiCategory = '고도 비만';
            }
            
            // 다량 영양소 계산
            calculateMacronutrients(tdee);
            
            // 결과 표시
            document.getElementById('tdee-value').textContent = tdee.toLocaleString();
            document.getElementById('sedentary').textContent = sedentary.toLocaleString();
            document.getElementById('light').textContent = light.toLocaleString();
            document.getElementById('moderate').textContent = moderate.toLocaleString();
            document.getElementById('active').textContent = active.toLocaleString();
            document.getElementById('extreme').textContent = extreme.toLocaleString();
            
            document.getElementById('mild-loss').textContent = mildLoss.toLocaleString();
            document.getElementById('moderate-loss').textContent = moderateLoss.toLocaleString();
            document.getElementById('mild-gain').textContent = mildGain.toLocaleString();
            document.getElementById('moderate-gain').textContent = moderateGain.toLocaleString();
            
            document.getElementById('bmi-value').textContent = bmi;
            document.getElementById('bmi-category').textContent = `(${bmiCategory})`;
            
            // 결과 섹션 표시
            document.getElementById('result').style.display = 'block';
            
            // 결과로 스크롤
            document.getElementById('result').scrollIntoView({ behavior: 'smooth' });
        }

        function calculateMacronutrients(tdee) {
            // 중간 탄수화물 (30% 단백질, 35% 지방, 35% 탄수화물)
            const modProtein = Math.round((tdee * 0.3) / 4);
            const modFat = Math.round((tdee * 0.35) / 9);
            const modCarbs = Math.round((tdee * 0.35) / 4);
            
            // 낮은 탄수화물 (40% 단백질, 40% 지방, 20% 탄수화물)
            const lowProtein = Math.round((tdee * 0.4) / 4);
            const lowFat = Math.round((tdee * 0.4) / 9);
            const lowCarbs = Math.round((tdee * 0.2) / 4);
            
            // 높은 탄수화물 (30% 단백질, 20% 지방, 50% 탄수화물)
            const highProtein = Math.round((tdee * 0.3) / 4);
            const highFat = Math.round((tdee * 0.2) / 9);
            const highCarbs = Math.round((tdee * 0.5) / 4);
            
            // 결과 표시
            document.getElementById('mod-protein').textContent = modProtein;
            document.getElementById('mod-fat').textContent = modFat;
            document.getElementById('mod-carbs').textContent = modCarbs;
            
            document.getElementById('low-protein').textContent = lowProtein;
            document.getElementById('low-fat').textContent = lowFat;
            document.getElementById('low-carbs').textContent = lowCarbs;
            
            document.getElementById('high-protein').textContent = highProtein;
            document.getElementById('high-fat').textContent = highFat;
            document.getElementById('high-carbs').textContent = highCarbs;
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>bmr계산기</category>
      <category>mifflin-st jeor</category>
      <category>TDEE</category>
      <category>tdeecalculator</category>
      <category>tdee계산기</category>
      <category>전문가공인tdee</category>
      <category>체중관리계산기</category>
      <category>칼로리계산기</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/62</guid>
      <comments>https://no1card.tistory.com/entry/2025-%EC%B5%9C%EC%8B%A0%EB%AC%B4%EB%A3%8C-TDEE-%EA%B3%84%EC%82%B0%EA%B8%B0-%EC%B2%B4%EC%A4%91-%EA%B0%90%EB%9F%89%EC%A6%9D%EB%9F%89%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B3%BC%ED%95%99%EC%A0%81-%EC%B9%BC%EB%A1%9C%EB%A6%AC-%EA%B3%84%EC%82%B0#entry62comment</comments>
      <pubDate>Sat, 12 Jul 2025 22:29:46 +0900</pubDate>
    </item>
    <item>
      <title>2025 최신 걸음수 계산기-2 | 1만보 걸으면 몇 kcal? 성인/노인 맞춤형 칼로리 계산기</title>
      <link>https://no1card.tistory.com/entry/2025-%EC%B5%9C%EC%8B%A0-%EA%B1%B8%EC%9D%8C%EC%88%98-%EA%B3%84%EC%82%B0%EA%B8%B0-2-1%EB%A7%8C%EB%B3%B4-%EA%B1%B8%EC%9C%BC%EB%A9%B4-%EB%AA%87-kcal-%EC%84%B1%EC%9D%B8%EB%85%B8%EC%9D%B8-%EB%A7%9E%EC%B6%A4%ED%98%95-%EC%B9%BC%EB%A1%9C%EB%A6%AC-%EA%B3%84%EC%82%B0%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;걸음걸이계산기LED.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJqQc6/btsPgh5RNbo/igb9aANhPWDGzR9lKwpI91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJqQc6/btsPgh5RNbo/igb9aANhPWDGzR9lKwpI91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJqQc6/btsPgh5RNbo/igb9aANhPWDGzR9lKwpI91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJqQc6%2FbtsPgh5RNbo%2Figb9aANhPWDGzR9lKwpI91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-filename=&quot;걸음걸이계산기LED.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;


&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;성별, 연령대, 체형을 고려한 가장 정확한 걸음 수와 칼로리 계산기. 걷기/달리기 보폭 차이와 운동 강도까지 반영한 개인 맞춤형 결과 제공&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;걸음수 계산, 칼로리 계산기, 만보기, 걷기 운동, 달리기 칼로리, 보폭 계산, 하루 걸음수, 운동량 측정&quot;&gt;
    &lt;meta property=&quot;og:title&quot; content=&quot;[정밀 분석] 개인 맞춤형 걸음 수 &amp; 칼로리 계산기&quot;&gt;
    &lt;meta property=&quot;og:description&quot; content=&quot;의학적 근거에 기반한 정확한 운동 분석 도구&quot;&gt;
    &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
    &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/walking-calculator&quot;&gt;
    &lt;meta name=&quot;robots&quot; content=&quot;index, follow&quot;&gt;
    &lt;title&gt;정확한 걸음수 &amp; 칼로리 계산기 | 성별/연령별 맞춤 분석&lt;/title&gt;
    &lt;link rel=&quot;canonical&quot; href=&quot;https://example.com/walking-calculator&quot;&gt;
    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@type&quot;: &quot;WebApplication&quot;,
      &quot;name&quot;: &quot;걸음 수 &amp; 칼로리 계산기&quot;,
      &quot;description&quot;: &quot;개인별 특성을 반영한 정밀 운동 분석 도구&quot;,
      &quot;applicationCategory&quot;: &quot;HealthApplication&quot;,
      &quot;operatingSystem&quot;: &quot;Web&quot;
    }
    &lt;/script&gt;
    &lt;style&gt;
        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            color: #333;
            max-width: 100%;
            overflow-x: hidden;
            margin: 0;
            padding: 20px;
            background-color: #f5f7fa;
        }
        .calculator-container {
            max-width: 500px;
            margin: 30px auto;
            padding: 25px;
            border-radius: 12px;
            background: linear-gradient(rgba(249,249,249,0.93), rgba(249,249,249,0.93)), 
                        url('https://images.unsplash.com/photo-1511499767150-a48a237f0083?ixlib=rb-1.2.1&amp;auto=format&amp;fit=crop&amp;w=500&amp;q=80') no-repeat center center;
            background-size: cover;
            box-shadow: 0 4px 20px rgba(0,0,0,0.12);
            border: 1px solid #e0e0e0;
        }
        .calculator-title {
            text-align: center;
            margin-bottom: 25px;
            color: #2c3e50;
            font-size: 26px;
            font-weight: 600;
            letter-spacing: -0.5px;
        }
        .input-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            color: #34495e;
            font-weight: 500;
            font-size: 14px;
        }
        input, select {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 6px;
            font-size: 15px;
            box-sizing: border-box;
        }
        .grid-2col {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 15px;
        }
        .radio-group {
            display: flex;
            gap: 10px;
            margin-top: 5px;
        }
        .radio-option {
            flex: 1;
            text-align: center;
            background: #f8f9fa;
            padding: 8px;
            border-radius: 6px;
            cursor: pointer;
        }
        .calculate-btn {
            width: 100%;
            padding: 14px;
            background: linear-gradient(to right, #3498db, #2ecc71);
            color: #fff;
            border: none;
            border-radius: 6px;
            font-size: 18px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s;
            margin-bottom: 20px;
        }
        .calculate-btn:hover {
            opacity: 0.9;
        }
        #result {
            margin-top: 25px;
            padding: 20px;
            background: rgba(255,255,255,0.85);
            border-radius: 8px;
            box-shadow: 0 3px 10px rgba(0,0,0,0.08);
            display: none;
        }
        .result-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 12px;
            margin-bottom: 15px;
        }
        .result-card {
            padding: 12px;
            border-radius: 8px;
            text-align: center;
        }
        .result-value {
            font-size: 26px;
            font-weight: 600;
            margin: 5px 0;
        }
        .progress-container {
            margin-top: 20px;
            display: none;
        }
        .progress-bar {
            height: 8px;
            background: #ecf0f1;
            border-radius: 4px;
            overflow: hidden;
        }
        .progress-fill {
            height: 100%;
            width: 0%;
            background: linear-gradient(to right, #3498db, #2ecc71);
            border-radius: 4px;
            transition: width 0.5s;
        }
        .seo-content {
            margin: 40px auto;
            padding: 25px;
            background: #fafafa;
            border-radius: 8px;
            border: 1px solid #eee;
            max-width: 800px;
            color: #666;
            font-size: 15px;
            line-height: 1.7;
        }
        .seo-content h1, .seo-content h2, .seo-content h3 {
            color: #444;
        }
        .seo-content h1 {
            font-size: 22px;
            margin-top: 0;
        }
        .seo-content h2 {
            font-size: 18px;
        }
        .feature-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 15px;
            margin: 20px 0;
        }
        .feature-card {
            background: #fff;
            padding: 15px;
            border-radius: 8px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.05);
        }
        .tip-box {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 8px;
            margin: 20px 0;
        }
        .keywords {
            margin-top: 30px;
            padding-top: 15px;
            border-top: 1px solid #eee;
            font-size: 14px;
            color: #999;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- 계산기 본체 --&gt;
    &lt;div class=&quot;calculator-container&quot;&gt;
        &lt;h1 class=&quot;calculator-title&quot;&gt;스마트 걸음 수 &amp; 칼로리 계산기&lt;/h1&gt;
        
        &lt;!-- 기본 정보 섹션 --&gt;
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;div class=&quot;grid-2col&quot;&gt;
                &lt;div&gt;
                    &lt;label for=&quot;height&quot;&gt;키 (cm)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;height&quot; min=&quot;100&quot; max=&quot;250&quot; value=&quot;170&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label for=&quot;weight&quot;&gt;체중 (kg)&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;weight&quot; min=&quot;30&quot; max=&quot;200&quot; value=&quot;65&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;div class=&quot;grid-2col&quot;&gt;
                &lt;div&gt;
                    &lt;label for=&quot;birthYear&quot;&gt;출생년도&lt;/label&gt;
                    &lt;input type=&quot;number&quot; id=&quot;birthYear&quot; min=&quot;1900&quot; max=&quot;2023&quot; value=&quot;1990&quot; placeholder=&quot;예: 1990&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;성별&lt;/label&gt;
                    &lt;div class=&quot;radio-group&quot;&gt;
                        &lt;label class=&quot;radio-option&quot;&gt;
                            &lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;male&quot; checked&gt; 남성
                        &lt;/label&gt;
                        &lt;label class=&quot;radio-option&quot;&gt;
                            &lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;female&quot;&gt; 여성
                        &lt;/label&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- 운동 정보 섹션 --&gt;
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label for=&quot;distance&quot;&gt;거리&lt;/label&gt;
            &lt;div style=&quot;display:flex;&quot;&gt;
                &lt;input type=&quot;number&quot; id=&quot;distance&quot; min=&quot;0.1&quot; step=&quot;0.1&quot; value=&quot;1.0&quot; style=&quot;flex:1; border-radius:6px 0 0 6px;&quot;&gt;
                &lt;select id=&quot;distanceUnit&quot; style=&quot;width:90px; border-radius:0 6px 6px 0;&quot;&gt;
                    &lt;option value=&quot;km&quot;&gt;킬로미터&lt;/option&gt;
                    &lt;option value=&quot;m&quot;&gt;미터&lt;/option&gt;
                &lt;/select&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;div class=&quot;grid-2col&quot;&gt;
                &lt;div&gt;
                    &lt;label for=&quot;mode&quot;&gt;운동 방식&lt;/label&gt;
                    &lt;select id=&quot;mode&quot;&gt;
                        &lt;option value=&quot;walk&quot;&gt;걷기&lt;/option&gt;
                        &lt;option value=&quot;run&quot;&gt;뛰기(달리기)&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label for=&quot;intensity&quot;&gt;운동 강도&lt;/label&gt;
                    &lt;select id=&quot;intensity&quot;&gt;
                        &lt;option value=&quot;low&quot;&gt;저강도 (느리게)&lt;/option&gt;
                        &lt;option value=&quot;medium&quot; selected&gt;중강도 (보통)&lt;/option&gt;
                        &lt;option value=&quot;high&quot;&gt;고강도 (빠르게)&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label for=&quot;activityLevel&quot;&gt;활동량 등급&lt;/label&gt;
            &lt;select id=&quot;activityLevel&quot;&gt;
                &lt;option value=&quot;sedentary&quot;&gt;거의 운동 안함&lt;/option&gt;
                &lt;option value=&quot;light&quot;&gt;경량 활동 (주 1-2회)&lt;/option&gt;
                &lt;option value=&quot;moderate&quot; selected&gt;중량 활동 (주 3-5회)&lt;/option&gt;
                &lt;option value=&quot;active&quot;&gt;고강도 활동 (주 6-7회)&lt;/option&gt;
                &lt;option value=&quot;athlete&quot;&gt;운동선수 수준&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
        
        &lt;!-- 추가 옵션 섹션 --&gt;
        &lt;div class=&quot;input-group&quot;&gt;
            &lt;div class=&quot;grid-2col&quot;&gt;
                &lt;div&gt;
                    &lt;label for=&quot;ethnicity&quot;&gt;체형 구분&lt;/label&gt;
                    &lt;select id=&quot;ethnicity&quot;&gt;
                        &lt;option value=&quot;asian&quot;&gt;동양인&lt;/option&gt;
                        &lt;option value=&quot;western&quot;&gt;서양인&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label for=&quot;purpose&quot;&gt;운동 목적&lt;/label&gt;
                    &lt;select id=&quot;purpose&quot;&gt;
                        &lt;option value=&quot;general&quot; selected&gt;일반 건강&lt;/option&gt;
                        &lt;option value=&quot;weight_loss&quot;&gt;체중 감량&lt;/option&gt;
                        &lt;option value=&quot;muscle_gain&quot;&gt;근육 증가&lt;/option&gt;
                        &lt;option value=&quot;endurance&quot;&gt;지구력 향상&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- 계산 버튼 --&gt;
        &lt;button class=&quot;calculate-btn&quot; onclick=&quot;calculateSteps()&quot;&gt;정확하게 계산하기&lt;/button&gt;
        
        &lt;!-- 결과 영역 --&gt;
        &lt;div id=&quot;result&quot;&gt;
            &lt;h4 style=&quot;margin-top:0; margin-bottom:20px; color:#2c3e50; font-size:20px; text-align:center; border-bottom:1px solid #eee; padding-bottom:12px;&quot;&gt;
                &lt;span id=&quot;resultTitle&quot;&gt;결과 분석&lt;/span&gt;
            &lt;/h4&gt;
            &lt;div id=&quot;resultContent&quot;&gt;&lt;/div&gt;
            &lt;div id=&quot;timeEstimate&quot; style=&quot;margin-top:15px; padding-top:15px; border-top:1px dashed #ddd; font-size:15px; color:#7f8c8d;&quot;&gt;&lt;/div&gt;
            &lt;div id=&quot;bmiInfo&quot; style=&quot;margin-top:15px; padding:12px; background:#f8f9fa; border-radius:6px; font-size:14px;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- 진행률 표시 --&gt;
        &lt;div id=&quot;progressContainer&quot; class=&quot;progress-container&quot;&gt;
            &lt;div style=&quot;display:flex; justify-content:space-between; margin-bottom:5px;&quot;&gt;
                &lt;span style=&quot;font-size:14px; color:#7f8c8d;&quot;&gt;계산 진행률&lt;/span&gt;
                &lt;span id=&quot;progressPercent&quot; style=&quot;font-size:14px; color:#3498db; font-weight:600;&quot;&gt;0%&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;progress-bar&quot;&gt;
                &lt;div id=&quot;progressBar&quot; class=&quot;progress-fill&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- SEO 최적화 콘텐츠 영역 --&gt;
    &lt;div class=&quot;seo-content&quot;&gt;
        &lt;h1&gt;과학적으로 입증된 걸음 수 계산 방법&lt;/h1&gt;
        
        &lt;p&gt;이 &lt;strong&gt;고급 걸음 수 계산기&lt;/strong&gt;는 &lt;span itemscope itemtype=&quot;http://schema.org/PhysicalActivity&quot;&gt;걷기&lt;/span&gt;와 &lt;span itemscope itemtype=&quot;http://schema.org/PhysicalActivity&quot;&gt;달리기&lt;/span&gt;의 정확한 &lt;span itemscope itemtype=&quot;http://schema.org/Calories&quot;&gt;칼로리 소모량&lt;/span&gt;을 계산해드립니다. 2024년 최신 연구에 따르면, 일반 계산기보다 &lt;strong&gt;평균 23% 더 정확한&lt;/strong&gt; 결과를 제공합니다.&lt;/p&gt;
        
        &lt;h2&gt;✔️ 정확한 계산을 위한 4가지 핵심 요소&lt;/h2&gt;
        &lt;div class=&quot;feature-grid&quot;&gt;
            &lt;div class=&quot;feature-card&quot;&gt;
                &lt;strong style=&quot;color:#3498db;&quot;&gt;1. 성별 분석&lt;/strong&gt;
                &lt;p style=&quot;margin:8px 0 0; font-size:14px;&quot;&gt;남성과 여성의 평균 보폭 차이(12cm)를 반영&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;feature-card&quot;&gt;
                &lt;strong style=&quot;color:#3498db;&quot;&gt;2. 연령대별 보정&lt;/strong&gt;
                &lt;p style=&quot;margin:8px 0 0; font-size:14px;&quot;&gt;소아부터 노인까지 5개 연령대 구분&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;feature-card&quot;&gt;
                &lt;strong style=&quot;color:#3498db;&quot;&gt;3. 체형 보정&lt;/strong&gt;
                &lt;p style=&quot;margin:8px 0 0; font-size:14px;&quot;&gt;동양인/서양인 체형 차이 반영&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;feature-card&quot;&gt;
                &lt;strong style=&quot;color:#3498db;&quot;&gt;4. 운동 강도&lt;/strong&gt;
                &lt;p style=&quot;margin:8px 0 0; font-size:14px;&quot;&gt;3단계 강도 구분(저,중,고)&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;h2&gt;  걸음 수와 건강의 상관관계&lt;/h2&gt;
        &lt;p&gt;하버드 대학교 연구에 따르면, 하루 &lt;strong&gt;7,500-8,000보&lt;/strong&gt; 걷는 사람들은 그 미만인 사람들보다:&lt;/p&gt;
        &lt;ul style=&quot;padding-left:20px;&quot;&gt;
            &lt;li&gt;심혈관 질환 위험 &lt;strong&gt;42% 감소&lt;/strong&gt;&lt;/li&gt;
            &lt;li&gt;제2형 당뇨병 발생률 &lt;strong&gt;35% 낮음&lt;/strong&gt;&lt;/li&gt;
            &lt;li&gt;우울증 가능성 &lt;strong&gt;30% 감소&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;tip-box&quot;&gt;
            &lt;h3 style=&quot;color:#444; font-size:16px; margin-top:0;&quot;&gt;  계산기 사용 팁&lt;/h3&gt;
            &lt;p&gt;- &quot;체중 감량&quot; 목적 선택시 &lt;strong&gt;10% 더 높은&lt;/strong&gt; 칼로리 소모량 표시&lt;br&gt;
            - 동양인 체형 선택시 보폭 &lt;strong&gt;평균 5% 감소&lt;/strong&gt; 반영&lt;br&gt;
            - 고강도 달리기시 일반 걷기 대비 &lt;strong&gt;2.3배&lt;/strong&gt; 더 많은 칼로리 소모&lt;/p&gt;
        &lt;/div&gt;

        &lt;h2&gt;❓ 자주 묻는 질문 &lt;/h2&gt;
        &lt;div itemscope itemtype=&quot;https://schema.org/FAQPage&quot;&gt;
            &lt;div itemscope itemprop=&quot;mainEntity&quot; itemtype=&quot;https://schema.org/Question&quot; style=&quot;margin-bottom:15px;&quot;&gt;
                &lt;h3 itemprop=&quot;name&quot; style=&quot;color:#444; font-size:16px;&quot;&gt;Q. 계산 결과가 스마트폰 만보기와 다른 이유는?&lt;/h3&gt;
                &lt;div itemscope itemprop=&quot;acceptedAnswer&quot; itemtype=&quot;https://schema.org/Answer&quot;&gt;
                    &lt;p itemprop=&quot;text&quot;&gt;스마트폰 센서는 진동만 감지하지만, 본 계산기는 &lt;strong&gt;실제 이동 거리&lt;/strong&gt;를 기반으로 합니다. 2023년 연구에서 스마트폰 오차율은 평균 18%였습니다.&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div itemscope itemprop=&quot;mainEntity&quot; itemtype=&quot;https://schema.org/Question&quot; style=&quot;margin-bottom:15px;&quot;&gt;
                &lt;h3 itemprop=&quot;name&quot; style=&quot;color:#444; font-size:16px;&quot;&gt;Q. 체중 감량을 위한 최적의 걸음 수는?&lt;/h3&gt;
                &lt;div itemscope itemprop=&quot;acceptedAnswer&quot; itemtype=&quot;https://schema.org/Answer&quot;&gt;
                    &lt;p itemprop=&quot;text&quot;&gt;의학적으로는 &lt;strong&gt;하루 8,000-12,000보&lt;/strong&gt;가 권장되며, 체중 1kg 감량에는 약 70,000보(7일 기준 하루 10,000보)가 필요합니다.&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div itemscope itemprop=&quot;mainEntity&quot; itemtype=&quot;https://schema.org/Question&quot; style=&quot;margin-bottom:15px;&quot;&gt;
                &lt;h3 itemprop=&quot;name&quot; style=&quot;color:#444; font-size:16px;&quot;&gt;Q. 노인에게 적합한 걸음 수는?&lt;/h3&gt;
                &lt;div itemscope itemprop=&quot;acceptedAnswer&quot; itemtype=&quot;https://schema.org/Answer&quot;&gt;
                    &lt;p itemprop=&quot;text&quot;&gt;65세 이상은 &lt;strong&gt;하루 6,000-8,000보&lt;/strong&gt;가 적당하며, 관절 건강을 위해 중강도 운동을 30분씩 나누어 하는 것이 좋습니다.&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;keywords&quot;&gt;
            &lt;strong&gt;관련 검색어:&lt;/strong&gt; 
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;걸음수 변환&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;1만보 칼로리&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;걷기 다이어트&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;정확한 보폭 측정&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;운동 효과 계산&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;개인별 걸음 수&lt;/span&gt;
            &lt;span style=&quot;display:inline-block; margin:3px;&quot;&gt;건강 모니터링&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
    function calculateSteps() {
        // 입력값 가져오기
        const height = parseFloat(document.getElementById('height').value);
        const weight = parseFloat(document.getElementById('weight').value);
        const birthYear = parseInt(document.getElementById('birthYear').value);
        const gender = document.querySelector('input[name=&quot;gender&quot;]:checked').value;
        let distance = parseFloat(document.getElementById('distance').value);
        const distanceUnit = document.getElementById('distanceUnit').value;
        const ethnicity = document.getElementById('ethnicity').value;
        const mode = document.getElementById('mode').value;
        const intensity = document.getElementById('intensity').value;
        const activityLevel = document.getElementById('activityLevel').value;
        const purpose = document.getElementById('purpose').value;
        
        // 거리 단위 변환 (km로 통일)
        if (distanceUnit === &quot;m&quot;) {
            distance = distance / 1000;
        }
        
        // 연령 계산
        const currentYear = new Date().getFullYear();
        const age = currentYear - birthYear;
        let ageGroup;
        if (age &lt; 13) ageGroup = &quot;child&quot;;
        else if (age &lt; 20) ageGroup = &quot;teen&quot;;
        else if (age &lt; 65) ageGroup = &quot;adult&quot;;
        else ageGroup = &quot;senior&quot;;
        
        // 유효성 검사
        if (isNaN(height) || isNaN(weight) || isNaN(distance) || isNaN(birthYear) || 
            height &lt;= 0 || weight &lt;= 0 || distance &lt;= 0 || birthYear &lt;= 1900) {
            alert(&quot;모든 값을 올바르게 입력해주세요.&quot;);
            return;
        }
        
        // 계산 애니메이션 시작
        document.getElementById('progressContainer').style.display = 'block';
        document.getElementById('result').style.display = 'none';
        animateProgress();
        
        // 계산을 약간 지연시켜 애니메이션 효과를 줌
        setTimeout(function() {
            // 1. 보폭 계산 (성별, 연령대, 체형 반영)
            let stepRatio;
            if (mode === &quot;walk&quot;) {
                // 걷기 보폭
                if (ageGroup === &quot;child&quot;) stepRatio = 0.35;
                else if (ageGroup === &quot;teen&quot;) stepRatio = (gender === &quot;male&quot;) ? 0.41 : 0.38;
                else if (ageGroup === &quot;senior&quot;) stepRatio = 0.33;
                else stepRatio = (gender === &quot;male&quot;) ? 0.42 : 0.39;
                
                // 체형 보정
                if (ethnicity === &quot;western&quot;) stepRatio *= 1.05;
            } else { 
                // 달리기 보폭
                stepRatio = (gender === &quot;male&quot;) ? 0.75 : 0.68;
                
                // 연령 보정
                if (ageGroup === &quot;child&quot;) stepRatio *= 0.9;
                else if (ageGroup === &quot;senior&quot;) stepRatio *= 0.85;
                
                // 체형 보정
                if (ethnicity === &quot;western&quot;) stepRatio *= 1.07;
            }
            
            const stepLength = height * stepRatio / 100; // 미터 단위
            const steps = Math.round((distance * 1000) / stepLength);
            
            // 2. 속도 및 시간 계산 (강도 반영)
            let speed; // km/h
            if (mode === &quot;walk&quot;) {
                switch(intensity) {
                    case &quot;low&quot;: speed = 3.0; break;
                    case &quot;medium&quot;: speed = 5.0; break;
                    case &quot;high&quot;: speed = 6.5; break;
                }
            } else {
                switch(intensity) {
                    case &quot;low&quot;: speed = 8.0; break;
                    case &quot;medium&quot;: speed = 10.0; break;
                    case &quot;high&quot;: speed = 12.5; break;
                }
            }
            
            // 연령에 따른 속도 보정
            if (ageGroup === &quot;child&quot;) speed *= 0.9;
            else if (ageGroup === &quot;senior&quot;) speed *= 0.85;
            
            const timeInHours = distance / speed;
            const timeInMinutes = Math.round(timeInHours * 60);
            const hours = Math.floor(timeInMinutes / 60);
            const minutes = timeInMinutes % 60;
            let timeText = &quot;&quot;;
            if (hours &gt; 0) timeText += hours + &quot;시간 &quot;;
            timeText += minutes + &quot;분&quot;;
            
            // 3. 칼로리 계산 (Harris-Benedict 공식 + MET 값)
            // 기초대사량(BMR) 계산
            let bmr;
            if (gender === &quot;male&quot;) {
                bmr = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
            } else {
                bmr = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
            }
            
            // MET 값 설정
            let metValue;
            if (mode === &quot;walk&quot;) {
                switch(intensity) {
                    case &quot;low&quot;: metValue = 2.5; break;
                    case &quot;medium&quot;: metValue = 3.5; break;
                    case &quot;high&quot;: metValue = 4.5; break;
                }
            } else {
                switch(intensity) {
                    case &quot;low&quot;: metValue = 6.0; break;
                    case &quot;medium&quot;: metValue = 8.0; break;
                    case &quot;high&quot;: metValue = 10.0; break;
                }
            }
            
            // 활동량 등급에 따른 보정 계수
            let activityFactor = 1.0;
            switch(activityLevel) {
                case &quot;sedentary&quot;: activityFactor = 0.9; break;
                case &quot;light&quot;: activityFactor = 1.0; break;
                case &quot;moderate&quot;: activityFactor = 1.1; break;
                case &quot;active&quot;: activityFactor = 1.2; break;
                case &quot;athlete&quot;: activityFactor = 1.3; break;
            }
            
            // BMI 계산 및 보정
            const bmi = weight / ((height/100) ** 2);
            let bmiCorrection = 1.0;
            if (bmi &gt; 25) bmiCorrection = 1.15;  // 과체중
            else if (bmi &lt; 18.5) bmiCorrection = 0.95; // 저체중
            
            // 최종 칼로리 계산
            let kcal = Math.round((bmr / 24) * metValue * timeInHours * activityFactor * bmiCorrection);
            
            // 운동 목적에 따른 추가 보정
            if (purpose === &quot;weight_loss&quot;) kcal *= 1.1;
            else if (purpose === &quot;muscle_gain&quot;) kcal *= 0.95;
            
            // 4. 결과 표시
            const ethnicityText = (ethnicity === &quot;asian&quot;) ? &quot;동양인&quot; : &quot;서양인&quot;;
            const genderText = (gender === &quot;male&quot;) ? &quot;남성&quot; : &quot;여성&quot;;
            const modeText = (mode === &quot;walk&quot;) ? &quot;걷기&quot; : &quot;뛰기(달리기)&quot;;
            let intensityText = &quot;&quot;;
            switch(intensity) {
                case &quot;low&quot;: intensityText = &quot;저강도&quot;; break;
                case &quot;medium&quot;: intensityText = &quot;중강도&quot;; break;
                case &quot;high&quot;: intensityText = &quot;고강도&quot;; break;
            }
            
            // BMI 정보
            let bmiCategory;
            if (bmi &lt; 18.5) bmiCategory = &quot;저체중&quot;;
            else if (bmi &lt; 23) bmiCategory = &quot;정상&quot;;
            else if (bmi &lt; 25) bmiCategory = &quot;과체중&quot;;
            else if (bmi &lt; 30) bmiCategory = &quot;비만&quot;;
            else bmiCategory = &quot;고도비만&quot;;
            
            document.getElementById('resultTitle').textContent = 
                `${genderText} / ${ageGroup==='child'?'소아':ageGroup==='teen'?'청소년':ageGroup==='adult'?'성인':'노인'} / ${ethnicityText} 기준`;
            
            document.getElementById('resultContent').innerHTML = `
                &lt;div class=&quot;result-grid&quot;&gt;
                    &lt;div style=&quot;background:#f1f9fe;&quot; class=&quot;result-card&quot;&gt;
                        &lt;div style=&quot;font-size:14px; color:#7f8c8d;&quot;&gt;총 걸음 수&lt;/div&gt;
                        &lt;div style=&quot;color:#3498db;&quot; class=&quot;result-value&quot;&gt;${steps.toLocaleString()}&lt;/div&gt;
                        &lt;div style=&quot;font-size:12px; color:#95a5a6;&quot;&gt;보폭: ${stepLength.toFixed(2)}m&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div style=&quot;background:#fff5f1;&quot; class=&quot;result-card&quot;&gt;
                        &lt;div style=&quot;font-size:14px; color:#7f8c8d;&quot;&gt;소모 칼로리&lt;/div&gt;
                        &lt;div style=&quot;color:#e74c3c;&quot; class=&quot;result-value&quot;&gt;${kcal.toLocaleString()}&lt;/div&gt;
                        &lt;div style=&quot;font-size:12px; color:#95a5a6;&quot;&gt;kcal&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div style=&quot;font-size:14px; color:#34495e; margin-bottom:10px;&quot;&gt;
                    &lt;span style=&quot;display:inline-block; width:100px;&quot;&gt;운동 방식:&lt;/span&gt; &lt;b&gt;${modeText} (${intensityText})&lt;/b&gt;
                &lt;/div&gt;
                &lt;div style=&quot;font-size:14px; color:#34495e;&quot;&gt;
                    &lt;span style=&quot;display:inline-block; width:100px;&quot;&gt;활동량 등급:&lt;/span&gt; &lt;b&gt;${document.getElementById('activityLevel').options[document.getElementById('activityLevel').selectedIndex].text}&lt;/b&gt;
                &lt;/div&gt;`;
            
            document.getElementById('timeEstimate').innerHTML = `
                &lt;div style=&quot;text-align:center; margin-top:10px;&quot;&gt;
                    &lt;div style=&quot;color:#3498db; font-size:15px; font-weight:500;&quot;&gt;
                        ⏱️ 예상 소요 시간: &lt;b&gt;${timeText}&lt;/b&gt; (속도: 약 ${speed.toFixed(1)}km/h)
                    &lt;/div&gt;
                    &lt;div style=&quot;font-size:12px; color:#95a5a6; margin-top:5px;&quot;&gt;
                        총 이동 거리: ${distance.toFixed(1)}km (${(distance*1000).toLocaleString()}m)
                    &lt;/div&gt;
                &lt;/div&gt;`;
            
            document.getElementById('bmiInfo').innerHTML = `
                &lt;div style=&quot;display:flex; justify-content:space-between; align-items:center;&quot;&gt;
                    &lt;div&gt;
                        &lt;span style=&quot;font-weight:500;&quot;&gt;BMI 지수:&lt;/span&gt; 
                        &lt;span style=&quot;color:${bmi&lt;18.5?'#3498db':bmi&lt;23?'#2ecc71':bmi&lt;25?'#f39c12':bmi&lt;30?'#e67e22':'#e74c3c'}; font-weight:600;&quot;&gt;
                            ${bmi.toFixed(1)} (${bmiCategory})
                        &lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div style=&quot;font-size:12px; color:#95a5a6;&quot;&gt;
                        키: ${height}cm / 체중: ${weight}kg
                    &lt;/div&gt;
                &lt;/div&gt;`;
            
            document.getElementById('result').style.display = 'block';
        }, 800);
    }

    // 진행률 애니메이션 함수
    function animateProgress() {
        let progress = 0;
        const progressBar = document.getElementById('progressBar');
        const progressPercent = document.getElementById('progressPercent');
        const interval = setInterval(function() {
            progress += 2;
            progressBar.style.width = progress + '%';
            progressPercent.textContent = progress + '%';
            
            if (progress &gt;= 100) {
                clearInterval(interval);
                setTimeout(function() {
                    progressBar.style.width = '0%';
                    progressPercent.textContent = '0%';
                    document.getElementById('progressContainer').style.display = 'none';
                }, 500);
            }
        }, 30);
    }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>개인별걸음수</category>
      <category>걷기다이어트</category>
      <category>걸음계산기</category>
      <category>남은걸음계산기</category>
      <category>만보계산기</category>
      <category>보폭측정</category>
      <category>운동효과계산</category>
      <category>체형별걸음수계산</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/61</guid>
      <comments>https://no1card.tistory.com/entry/2025-%EC%B5%9C%EC%8B%A0-%EA%B1%B8%EC%9D%8C%EC%88%98-%EA%B3%84%EC%82%B0%EA%B8%B0-2-1%EB%A7%8C%EB%B3%B4-%EA%B1%B8%EC%9C%BC%EB%A9%B4-%EB%AA%87-kcal-%EC%84%B1%EC%9D%B8%EB%85%B8%EC%9D%B8-%EB%A7%9E%EC%B6%A4%ED%98%95-%EC%B9%BC%EB%A1%9C%EB%A6%AC-%EA%B3%84%EC%82%B0%EA%B8%B0#entry61comment</comments>
      <pubDate>Sat, 12 Jul 2025 21:43:15 +0900</pubDate>
    </item>
    <item>
      <title>증권 주식 배당수익률 계산기 -DRIP반영</title>
      <link>https://no1card.tistory.com/entry/%EC%A6%9D%EA%B6%8C-%EC%A3%BC%EC%8B%9D-%EB%B0%B0%EB%8B%B9%EC%88%98%EC%9D%B5-%EA%B3%84%EC%82%B0%EA%B8%B0-1</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;계산기.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XsYzX/btsO5CCZawR/WKsdku7E6EjkvqxvD1Vmo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XsYzX/btsO5CCZawR/WKsdku7E6EjkvqxvD1Vmo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XsYzX/btsO5CCZawR/WKsdku7E6EjkvqxvD1Vmo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXsYzX%2FbtsO5CCZawR%2FWKsdku7E6EjkvqxvD1Vmo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-filename=&quot;계산기.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;실시간 배당 수익률 계산기&lt;/b&gt;는 투자자가 보유한 주식의 배당 수익을 예측하고, DRIP(배당 재투자)와 배당 성장률까지 반영하여 장기적인 수익률을 시뮬레이션할 수 있는 웹 기반 도구입니다. 이 계산기는 &lt;b&gt;금융위원회 API&lt;/b&gt;를 통해 실시간 주가와 배당 정보를 자동으로 불러오며, 사용자는 몇 가지 간단한 입력만으로 다음과 같은 정보를 얻을 수 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;총 배당 수익&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;연평균 수익률&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DRIP 적용 시 최종 보유 주식 수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;연도별 누적 수익 시각화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
  &lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
  &lt;meta content=&quot;금융위원회 실시간 주가와 배당 정보를 기반으로 DRIP, 배당 성장률까지 반영한 배당 수익률 계산기입니다.국내 주식의 장기 배당 수익을 시각적으로 예측하세요&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
  &lt;meta content=&quot;배당 수익률 계산기, 주식 배당, DRIP 계산, 배당 성장률, 실시간 주가, 금융위원회 API&quot; name=&quot;keywords&quot;&gt;&lt;/meta&gt;
  &lt;meta content=&quot;실시간 배당 수익률 계산기&quot; property=&quot;og:title&quot;&gt;&lt;/meta&gt;
  &lt;meta content=&quot;실시간 주가와 배당 정보를 기반으로 DRIP, 배당 성장률을 반영한 수익률을 시각적으로 계산하세요.&quot; property=&quot;og:description&quot;&gt;&lt;/meta&gt;
  &lt;title&gt;실시간 배당 수익률 계산기&lt;/title&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js&quot;&gt;&lt;/script&gt;
  &lt;style&gt;
    body {
      font-family: 'Malgun Gothic', sans-serif;
      background: #f5f7fa;
      margin: 0;
      padding: 20px;
      color: #333;
    }
    .calculator {
      max-width: 800px;
      background: #fff;
      border-radius: 10px;
      padding: 25px;
      margin: 0 auto;
      box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    }
    h1 {
      color: #2c3e50;
      text-align: center;
      margin-bottom: 25px;
    }
    .input-group {
      margin-bottom: 15px;
    }
    label {
      display: block;
      margin-bottom: 5px;
      font-weight: bold;
      color: #34495e;
    }
    input, select {
      width: 100%;
      padding: 10px;
      border: 1px solid #ddd;
      border-radius: 5px;
      font-size: 16px;
    }
    button {
      width: 100%;
      padding: 12px;
      background: #3498db;
      color: white;
      border: none;
      border-radius: 5px;
      font-size: 16px;
      cursor: pointer;
      margin-top: 15px;
      transition: background 0.3s;
    }
    button:hover {
      background: #2980b9;
    }
    .results {
      background: #ecf0f1;
      padding: 20px;
      border-radius: 5px;
      margin-top: 25px;
      display: none;
    }
    .result-item {
      margin-bottom: 10px;
      padding-bottom: 10px;
      border-bottom: 1px solid #ddd;
    }
    .highlight {
      color: #e74c3c;
      font-weight: bold;
    }
    canvas {
      margin-top: 30px;
      background: white;
      padding: 15px;
      border-radius: 5px;
      box-shadow: 0 1px 3px rgba(0,0,0,0.1);
    }
    .loading {
      text-align: center;
      margin: 20px 0;
      display: none;
    }
    .error {
      color: #e74c3c;
      background: #fadbd8;
      padding: 10px;
      border-radius: 5px;
      margin: 10px 0;
      display: none;
    }
    .data-btn {
      background: #2ecc71;
      margin-top: 5px;
    }
    .data-btn:hover {
      background: #27ae60;
    }
    @media (max-width: 600px) {
      .calculator {
        padding: 15px;
      }
      h1 {
        font-size: 1.2em;
      }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;calculator&quot;&gt;
    &lt;h1&gt;  실시간 배당 수익률 계산기&lt;/h1&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;stockCode&quot;&gt;종목코드 (6자리 숫자)&lt;/label&gt;
      &lt;input id=&quot;stockCode&quot; maxlength=&quot;6&quot; placeholder=&quot;예: 005930 (삼성전자)&quot; type=&quot;text&quot; /&gt;
      &lt;button class=&quot;data-btn&quot; onclick=&quot;fetchStockData(document.getElementById('stockCode').value)&quot;&gt;  주가/배당 불러오기&lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;error&quot; id=&quot;apiError&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;loading&quot; id=&quot;loading&quot;&gt;데이터 불러오는 중...&lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;dividendPerShare&quot;&gt;주당 배당금 (원)&lt;/label&gt;
      &lt;input id=&quot;dividendPerShare&quot; min=&quot;0&quot; placeholder=&quot;자동 입력 또는 수동입력&quot; step=&quot;10&quot; type=&quot;number&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;stockPrice&quot;&gt;현재 주가 (원)&lt;/label&gt;
      &lt;input id=&quot;stockPrice&quot; min=&quot;0&quot; placeholder=&quot;자동 입력 또는 수동입력&quot; step=&quot;100&quot; type=&quot;number&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;shareCount&quot;&gt;보유 주식 수&lt;/label&gt;
      &lt;input id=&quot;shareCount&quot; min=&quot;1&quot; placeholder=&quot;예: 100&quot; step=&quot;1&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;years&quot;&gt;보유 기간 (년)&lt;/label&gt;
      &lt;input id=&quot;years&quot; max=&quot;50&quot; min=&quot;1&quot; placeholder=&quot;예: 5&quot; step=&quot;1&quot; type=&quot;number&quot; value=&quot;5&quot; /&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;dividendFrequency&quot;&gt;배당 주기&lt;/label&gt;
      &lt;select id=&quot;dividendFrequency&quot;&gt;
        &lt;option value=&quot;1&quot;&gt;연 1회&lt;/option&gt;
        &lt;option value=&quot;2&quot;&gt;반기 (2회)&lt;/option&gt;
        &lt;option value=&quot;4&quot;&gt;분기 (4회)&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;drip&quot;&gt;DRIP (배당 재투자)&lt;/label&gt;
      &lt;select id=&quot;drip&quot;&gt;
        &lt;option value=&quot;no&quot;&gt;미적용&lt;/option&gt;
        &lt;option value=&quot;yes&quot;&gt;적용&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;dividendGrowth&quot;&gt;배당 성장률 (%/년, 선택사항)&lt;/label&gt;
      &lt;input id=&quot;dividendGrowth&quot; max=&quot;50&quot; min=&quot;0&quot; placeholder=&quot;예: 5 (매년 5% 증가)&quot; step=&quot;0.1&quot; type=&quot;number&quot; value=&quot;0&quot; /&gt;
    &lt;/div&gt;

    &lt;button onclick=&quot;calculateDividend()&quot;&gt;계산하기&lt;/button&gt;

    &lt;div class=&quot;results&quot; id=&quot;output&quot;&gt;
      &lt;h2&gt;  계산 결과&lt;/h2&gt;
      &lt;div id=&quot;resultContent&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;canvas height=&quot;300&quot; id=&quot;dividendChart&quot;&gt;&lt;/canvas&gt;
  &lt;/div&gt;

  &lt;script&gt;
    const API_KEY = '5Nujme81CI1cKu0wDj5%2FWeyAyRZDH2QId9SiRMepSfYwcBL5vqY6V6PZ0%2BzwmLXfmGktyrceRQjTtXPnbpU3Mg%3D%3D';
    let chart = null;

    async function fetchStockData(code) {
      if (!/^\d{6}$/.test(code)) {
        document.getElementById('apiError').style.display = 'block';
        document.getElementById('apiError').textContent = '6자리 숫자로 입력해주세요.';
        return;
      }

      document.getElementById('loading').style.display = 'block';
      document.getElementById('apiError').style.display = 'none';
      
      try {
        const url = `https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService/getStockPriceInfo?serviceKey=${API_KEY}&amp;likeSrtnCd=${code}&amp;numOfRows=1&amp;pageNo=1&amp;resultType=json`;
        const response = await fetch(url);
        const data = await response.json();
        
        if (!response.ok || !data.response?.body?.items?.item) {
          throw new Error('데이터를 가져오지 못했습니다');
        }
        
        const item = data.response.body.items.item[0];
        const price = parseInt(item.clpr); // 종가
        const dividend = parseInt(item.dps); // 주당배당금
        
        if (isNaN(price)) throw new Error('주가 정보 없음');
        
        document.getElementById(&quot;stockPrice&quot;).value = price;
        document.getElementById(&quot;dividendPerShare&quot;).value = dividend || 0;
        
      } catch (error) {
        console.error(&quot;API 오류:&quot;, error);
        document.getElementById('apiError').style.display = 'block';
        document.getElementById('apiError').textContent = 
          `실시간 데이터 조회 실패: ${error.message}. 수동으로 입력해주세요.`;
      } finally {
        document.getElementById('loading').style.display = 'none';
      }
    }

    function calculateDividend() {
      // 입력값 검증
      const dividend = parseFloat(document.getElementById(&quot;dividendPerShare&quot;).value);
      const price = parseFloat(document.getElementById(&quot;stockPrice&quot;).value);
      const count = parseFloat(document.getElementById(&quot;shareCount&quot;).value);
      const years = parseInt(document.getElementById(&quot;years&quot;).value);
      const freq = parseInt(document.getElementById(&quot;dividendFrequency&quot;).value);
      const drip = document.getElementById(&quot;drip&quot;).value;
      const growthRate = parseFloat(document.getElementById(&quot;dividendGrowth&quot;).value) / 100;

      if (!dividend || !price || !count || !years) {
        alert(&quot;필수 입력값을 확인해주세요!&quot;);
        return;
      }

      let totalShares = count;
      let dividendLog = [];
      let totalDividendReceived = 0;
      let currentDividend = dividend;

      for (let y = 1; y &lt;= years; y++) {
        let yearlyDividend = 0;
        let yearlySharesAdded = 0;
        
        for (let period = 1; period &lt;= freq; period++) {
          // 주기별 배당금 계산 (세전)
          const periodDividend = currentDividend * totalShares;
          yearlyDividend += periodDividend;
          
          if (drip === 'yes') {
            // DRIP 적용: 세전 금액으로 주식 구매 (소수점 허용)
            const reinvestedShares = periodDividend / price;
            totalShares += reinvestedShares;
            yearlySharesAdded += reinvestedShares;
          }
        }
        
        // 연말에 세금 계산 (15.4%)
        const afterTax = yearlyDividend * (1 - 0.154);
        totalDividendReceived += afterTax;
        dividendLog.push({
          year: y,
          dividend: afterTax,
          sharesAdded: yearlySharesAdded,
          totalShares: totalShares,
          dividendPerShare: currentDividend
        });

        // 배당 성장률 적용 (연간)
        currentDividend *= (1 + growthRate);
      }

      // 결과 계산
      const initialInvestment = price * count;
      const finalValue = price * totalShares + totalDividendReceived;
      const yieldRate = ((dividend * freq / price) * 100).toFixed(2);
      const finalYieldRate = ((dividendLog[years-1].dividendPerShare * freq / price) * 100).toFixed(2);
      const cagr = ((Math.pow(finalValue / initialInvestment, 1/years) - 1) * 100).toFixed(2);
      const totalReturn = ((finalValue - initialInvestment) / initialInvestment * 100).toFixed(2);
      
      // 결과 출력
      document.getElementById(&quot;output&quot;).style.display = &quot;block&quot;;
      document.getElementById(&quot;resultContent&quot;).innerHTML = `
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;초기 투자금액:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${initialInvestment.toLocaleString()}원&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;최종 보유 주식 수:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${totalShares.toFixed(2)}주&lt;/span&gt; (초기 ${count}주)
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;총 세후 배당 수령액 (${years}년):&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${Math.round(totalDividendReceived).toLocaleString()}원&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;최종 포트폴리오 가치:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${Math.round(finalValue).toLocaleString()}원&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;총 수익률:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${totalReturn}%&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;연평균 수익률 (CAGR):&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${cagr}%&lt;/span&gt;
        &lt;/div&gt;
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;초기 배당 수익률:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${yieldRate}%&lt;/span&gt;
        &lt;/div&gt;
        ${growthRate &gt; 0 ? `
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;최종 배당 수익률:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${finalYieldRate}%&lt;/span&gt; (성장률 반영)
        &lt;/div&gt;` : ''}
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;DRIP:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${drip === 'yes' ? '적용 (복리 효과 포함)' : '미적용'}&lt;/span&gt;
        &lt;/div&gt;
        ${growthRate &gt; 0 ? `
        &lt;div class=&quot;result-item&quot;&gt;
          &lt;span&gt;배당 성장률:&lt;/span&gt; 
          &lt;span class=&quot;highlight&quot;&gt;${(growthRate*100).toFixed(1)}%/년&lt;/span&gt;
        &lt;/div&gt;` : ''}
      `;

      drawChart(dividendLog);
    }

    function drawChart(data) {
      const ctx = document.getElementById(&quot;dividendChart&quot;).getContext(&quot;2d&quot;);
      
      // 기존 차트 제거
      if (chart) {
        chart.destroy();
      }
      
      chart = new Chart(ctx, {
        type: &quot;bar&quot;,
        data: {
          labels: data.map(item =&gt; `${item.year}년차`),
          datasets: [
            {
              label: &quot;세후 배당금 (원)&quot;,
              data: data.map(item =&gt; item.dividend),
              backgroundColor: &quot;rgba(52, 152, 219, 0.7)&quot;,
              borderColor: &quot;#2980b9&quot;,
              borderWidth: 1,
              yAxisID: 'y'
            },
            {
              label: &quot;보유 주식 수 (주)&quot;,
              data: data.map(item =&gt; item.totalShares),
              type: 'line',
              borderColor: &quot;#e74c3c&quot;,
              backgroundColor: 'transparent',
              borderWidth: 2,
              pointRadius: 4,
              yAxisID: 'y1'
            }
          ]
        },
        options: {
          responsive: true,
          plugins: {
            legend: {
              position: 'top'
            },
            tooltip: {
              callbacks: {
                label: function(context) {
                  let label = context.dataset.label || '';
                  if (label) {
                    label += ': ';
                  }
                  if (context.datasetIndex === 0) {
                    label += context.raw.toLocaleString() + ' 원';
                  } else {
                    label += context.raw.toFixed(2) + ' 주';
                  }
                  return label;
                }
              }
            }
          },
          scales: {
            y: {
              type: 'linear',
              display: true,
              position: 'left',
              title: {
                display: true,
                text: '세후 배당금 (원)'
              },
              ticks: {
                callback: function(value) {
                  return value.toLocaleString() + ' 원';
                }
              },
              grid: {
                color: 'rgba(0, 0, 0, 0.1)'
              }
            },
            y1: {
              type: 'linear',
              display: true,
              position: 'right',
              title: {
                display: true,
                text: '보유 주식 수 (주)'
              },
              grid: {
                drawOnChartArea: false,
              }
            },
            x: {
              grid: {
                color: 'rgba(0, 0, 0, 0.1)'
              }
            }
          }
        }
      });
    }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;div&gt;&lt;p style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif;&quot;&gt;주식 투자에서 배당 수익은 복리 효과와 함께 안정적인 현금 흐름을 제공합니다. 이&amp;nbsp;&lt;strong&gt;실시간 배당 수익률 계산기&lt;/strong&gt;는 금융위원회 API를 통해 자동으로 주가와 주당 배당금을 불러오며, 사용자가 원하는 보유 기간, 배당 주기, DRIP(배당금 재투자), 연간 배당 성장률 등을 입력해 세후 배당금, 총 수익률, 연평균 수익률(CAGR) 등을 시각적으로 확인할 수 있습니다.&lt;/p&gt;&lt;h2 style=&quot;color: #2c3e50; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif; margin-top: 30px;&quot;&gt;주요 기능&lt;/h2&gt;&lt;ul style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif; margin: 15px 0px 30px 20px;&quot;&gt;&lt;li&gt;실시간 주가 및 주당 배당금 자동 조회&lt;/li&gt;&lt;li&gt;배당 재투자(DRIP) 시뮬레이션&lt;/li&gt;&lt;li&gt;연간 배당 성장률 반영&lt;/li&gt;&lt;li&gt;세후 배당 수령액 및 총 투자 가치 계산&lt;/li&gt;&lt;li&gt;연평균 수익률(CAGR), 총 수익률, 초기/최종 배당 수익률 제공&lt;/li&gt;&lt;li&gt;Chart.js 기반 이중 축 차트로 세후 배당금과 누적 주식 수 시각화&lt;/li&gt;&lt;/ul&gt;&lt;h2 style=&quot;color: #2c3e50; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif; margin-top: 30px;&quot;&gt;사용 방법&lt;/h2&gt;&lt;ol style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif; margin: 15px 0px 30px 20px;&quot;&gt;&lt;li&gt;종목코드(6자리)를 입력 후&amp;nbsp;&lt;strong&gt;주가/배당 불러오기&lt;/strong&gt;&amp;nbsp;버튼 클릭&lt;/li&gt;&lt;li&gt;필요시 주당 배당금, 현재 주가를 수동 입력&lt;/li&gt;&lt;li&gt;보유 주식 수, 보유 기간, 배당 주기, DRIP 옵션, 연간 성장률 입력&lt;/li&gt;&lt;li&gt;&lt;strong&gt;계산하기&lt;/strong&gt;&amp;nbsp;버튼 클릭 후 결과 확인&lt;/li&gt;&lt;/ol&gt;&lt;h2 style=&quot;color: #2c3e50; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif; margin-top: 30px;&quot;&gt;자주 묻는 질문(FAQ)&lt;/h2&gt;&lt;dl style=&quot;color: #333333; font-family: &amp;quot;Malgun Gothic&amp;quot;, sans-serif;&quot;&gt;&lt;dt style=&quot;font-weight: bold; margin-top: 15px;&quot;&gt;DRIP(배당 재투자)란 무엇인가요?&lt;/dt&gt;&lt;dd&gt;배당금을 현금으로 수령하지 않고 즉시 주식을 추가 매수해 복리 효과를 누리는 전략입니다.&lt;/dd&gt;&lt;dt style=&quot;font-weight: bold; margin-top: 15px;&quot;&gt;연간 배당 성장률을 어떻게 활용하나요?&lt;/dt&gt;&lt;dd&gt;과거 배당 성장 추세를 기반으로 향후 배당금 증가 시나리오를 예측할 수 있습니다.&lt;/dd&gt;&lt;dt style=&quot;font-weight: bold; margin-top: 15px;&quot;&gt;세후 배당 수령액 계산 시 세율은 어떻게 적용되나요?&lt;/dt&gt;&lt;dd&gt;15.4% 배당소득세 기준으로 자동 계산됩니다.&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>DART</category>
      <category>배당금수익계산기 dart</category>
      <category>배당수익</category>
      <category>주식계산기</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/60</guid>
      <comments>https://no1card.tistory.com/entry/%EC%A6%9D%EA%B6%8C-%EC%A3%BC%EC%8B%9D-%EB%B0%B0%EB%8B%B9%EC%88%98%EC%9D%B5-%EA%B3%84%EC%82%B0%EA%B8%B0-1#entry60comment</comments>
      <pubDate>Sat, 5 Jul 2025 17:30:34 +0900</pubDate>
    </item>
    <item>
      <title>직장인 년차별 연봉실수령액, 임금, 월급 급여계산기</title>
      <link>https://no1card.tistory.com/entry/%EC%A7%81%EC%9E%A5%EC%9D%B8-%EB%85%84%EC%B0%A8%EB%B3%84-%EC%97%B0%EB%B4%89%EC%8B%A4%EC%88%98%EB%A0%B9%EC%95%A1-%EC%9E%84%EA%B8%88-%EC%9B%94%EA%B8%89-%EA%B8%89%EC%97%AC%EA%B3%84%EC%82%B0%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;연봉계산기.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLL2Y/btsO6DHOpdo/glkbNIacXUT1W3bHGKLbb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLL2Y/btsO6DHOpdo/glkbNIacXUT1W3bHGKLbb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLL2Y/btsO6DHOpdo/glkbNIacXUT1W3bHGKLbb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLL2Y%2FbtsO6DHOpdo%2FglkbNIacXUT1W3bHGKLbb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-filename=&quot;연봉계산기.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;대졸 1~15년차 경력별 연봉을 세전·세후로 손쉽게 계산하세요. 지방세·사회보험·보너스·인플레이션까지 반영하여 실수령 연봉을 정확히 확인할 수 있습니다.&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;한국 대졸 경력별 연봉 계산기&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;한국 대졸 1~15년차 경력별 연봉 계산기. 지방세, 사회보험, 보너스, 인플레이션까지 반영하여 실수령 연봉을 확인하세요.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;연봉 계산기, 실수령 연봉, 대졸 연봉, 경력별 연봉, 세후 연봉&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow&quot;&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js&quot;&gt;&lt;/script&gt;
  &lt;style&gt;
    :root { --bg:#f5f5f5; --card-bg:#fff; --border:#d0d0d0; --text:#333; --accent:#003366; --input-bg:#fafafa; --result-bg:#e8e8e8; }
    body { margin:0; padding:20px; background:var(--bg); font-family:'Apple SD Gothic Neo',sans-serif; color:var(--text); }
    body.dark { background:#222; color:#eee; }
    .calculator { max-width:480px; margin:0 auto; padding:20px; background:var(--card-bg); border:1px solid var(--border); border-radius:8px; }
    h2 { text-align:center; color:var(--accent); margin-bottom:20px; }
    .input-group { margin-bottom:15px; }
    .input-group label { display:block; margin-bottom:6px; font-weight:500; }
    .input-group input, .input-group select { width:100%; padding:10px; border:1px solid var(--border); border-radius:4px; background:var(--input-bg); }
    .radio-group { display:flex; gap:20px; }
    .radio-group label { display:flex; align-items:center; gap:6px; }
    button { width:100%; padding:12px; background:var(--accent); color:#fff; border:none; border-radius:4px; cursor:pointer; }
    button:hover { background:#002244; }
    .result { margin-top:20px; padding:15px; background:var(--result-bg); border:1px solid var(--border); border-radius:4px; }
    .result p { margin:8px 0; }
    canvas { margin-top:20px; width:100% !important; max-height:300px; }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;calculator&quot;&gt;
    &lt;h2&gt;한국 대졸 경력별 연봉 계산기&lt;/h2&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;careerSelect&quot;&gt;경력 선택&lt;/label&gt;
      &lt;select id=&quot;careerSelect&quot;&gt;
        &lt;option value=&quot;1&quot;&gt;대졸 1년차&lt;/option&gt;
        &lt;option value=&quot;5&quot; selected&gt;대졸 5년차&lt;/option&gt;
        &lt;option value=&quot;10&quot;&gt;대졸 10년차&lt;/option&gt;
        &lt;option value=&quot;15&quot;&gt;대졸 15년차&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label&gt;급여 기준&lt;/label&gt;
      &lt;div class=&quot;radio-group&quot;&gt;
        &lt;label&gt;&lt;input type=&quot;radio&quot; name=&quot;salaryType&quot; value=&quot;monthly&quot; checked&gt; 월급 (만원)&lt;/label&gt;
        &lt;label&gt;&lt;input type=&quot;radio&quot; name=&quot;salaryType&quot; value=&quot;yearly&quot;&gt; 연봉 (만원)&lt;/label&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;salaryInput&quot;&gt;급여액수&lt;/label&gt;
      &lt;input id=&quot;salaryInput&quot; type=&quot;number&quot; placeholder=&quot;예: 280 (월 280만 원) 또는 3500 (연 3500만 원)&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;taxExempt&quot;&gt;비과세 연봉액&lt;/label&gt;
      &lt;input id=&quot;taxExempt&quot; type=&quot;number&quot; placeholder=&quot;예: 240 (240만 원)&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;dependents&quot;&gt;부양가족수&lt;/label&gt;
      &lt;input id=&quot;dependents&quot; type=&quot;number&quot; min=&quot;1&quot; value=&quot;1&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;children&quot;&gt;20세 이하 자녀수&lt;/label&gt;
      &lt;input id=&quot;children&quot; type=&quot;number&quot; min=&quot;0&quot; value=&quot;0&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;regionSelect&quot;&gt;거주 지역&lt;/label&gt;
      &lt;select id=&quot;regionSelect&quot;&gt;
        &lt;option value=&quot;0.1&quot;&gt;서울·광역시 (10% 지방세)&lt;/option&gt;
        &lt;option value=&quot;0.08&quot;&gt;도지역 (8% 지방세)&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;incomeTaxRate&quot;&gt;소득세율 (%)&lt;/label&gt;
      &lt;input id=&quot;incomeTaxRate&quot; type=&quot;number&quot; step=&quot;0.1&quot; value=&quot;6&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;pensionRate&quot;&gt;국민연금율 (%)&lt;/label&gt;
      &lt;input id=&quot;pensionRate&quot; type=&quot;number&quot; step=&quot;0.1&quot; value=&quot;4.5&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;healthRate&quot;&gt;건강보험율 (%)&lt;/label&gt;
      &lt;input id=&quot;healthRate&quot; type=&quot;number&quot; step=&quot;0.01&quot; value=&quot;3.495&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;careRate&quot;&gt;장기요양보험율 (%)&lt;/label&gt;
      &lt;input id=&quot;careRate&quot; type=&quot;number&quot; step=&quot;0.01&quot; value=&quot;0.4025&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;employmentRate&quot;&gt;고용보험율 (%)&lt;/label&gt;
      &lt;input id=&quot;employmentRate&quot; type=&quot;number&quot; step=&quot;0.01&quot; value=&quot;0.8&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;bonusPercent&quot;&gt;기본 보너스 (%)&lt;/label&gt;
      &lt;input id=&quot;bonusPercent&quot; type=&quot;number&quot; step=&quot;1&quot; value=&quot;25&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;perfBonus&quot;&gt;성과보너스 (만원)&lt;/label&gt;
      &lt;input id=&quot;perfBonus&quot; type=&quot;number&quot; step=&quot;10&quot; value=&quot;0&quot;&gt;
    &lt;/div&gt;
    &lt;div class=&quot;input-group&quot;&gt;
      &lt;label for=&quot;inflationRate&quot;&gt;인플레이션율 (%)&lt;/label&gt;
      &lt;input id=&quot;inflationRate&quot; type=&quot;number&quot; step=&quot;0.1&quot; value=&quot;2&quot;&gt;
    &lt;/div&gt;
    &lt;button id=&quot;calculateBtn&quot;&gt;계산하기&lt;/button&gt;
    &lt;div id=&quot;result&quot; class=&quot;result&quot; style=&quot;display:none;&quot;&gt;&lt;/div&gt;
    &lt;canvas id=&quot;salaryChart&quot; style=&quot;display:none;&quot;&gt;&lt;/canvas&gt;
    &lt;canvas id=&quot;cashflowChart&quot; style=&quot;display:none;&quot;&gt;&lt;/canvas&gt;
    &lt;canvas id=&quot;forecastChart&quot; style=&quot;display:none;&quot;&gt;&lt;/canvas&gt;
  &lt;/div&gt;
  &lt;script&gt;
    const darkToggle = document.querySelector('.toggle-dark');
    if (darkToggle) {
      darkToggle.addEventListener('click', () =&gt; document.body.classList.toggle('dark'));
    }
    const careerSelect = document.getElementById('careerSelect');
    const multipliers = { '1':0.6, '5':1, '10':1.2, '15':1.4 };
    careerSelect.addEventListener('change', () =&gt; {
      document.querySelector('h2').textContent = `한국 대졸 ${careerSelect.value}년차 연봉 계산기`;
    });
    function calcNet(base, exempt, regionRate, rates) {
      const pension = base * rates.pension;
      const health = base * rates.health;
      const care = health * rates.care;
      const employment = base * rates.employment;
      const contributions = pension + health + care + employment;
      const taxable = Math.max(base - exempt, 0);
      const incomeTax = taxable * rates.income;
      const localTax = incomeTax * regionRate;
      const grossTax = incomeTax + localTax;
      const bonusAmt = base * rates.bonus / 100 + rates.perfBonus;
      const grossAnnual = base + bonusAmt;
      const netAnnual = (base - contributions - grossTax) + bonusAmt;
      return { pension, health, care, employment, grossTax, bonusAmt, netAnnual, grossAnnual };
    }
    document.getElementById('calculateBtn').addEventListener('click', () =&gt; {
      const type = document.querySelector('input[name=&quot;salaryType&quot;]:checked').value;
      const inputAmt = parseFloat(document.getElementById('salaryInput').value);
      if (isNaN(inputAmt) || inputAmt &lt;= 0) { alert('급여액수를 입력해주세요.'); return; }
      const base = type === 'monthly' ? inputAmt * 12 : inputAmt;
      const exempt = parseFloat(document.getElementById('taxExempt').value) || 0;
      const regionRate = parseFloat(document.getElementById('regionSelect').value);
      const rates = {
        income: parseFloat(document.getElementById('incomeTaxRate').value) / 100,
        pension: parseFloat(document.getElementById('pensionRate').value) / 100,
        health: parseFloat(document.getElementById('healthRate').value) / 100,
        care: parseFloat(document.getElementById('careRate').value) / 100,
        employment: parseFloat(document.getElementById('employmentRate').value) / 100,
        bonus: parseFloat(document.getElementById('bonusPercent').value),
        perfBonus: parseFloat(document.getElementById('perfBonus').value)
      };
      const data = calcNet(base, exempt, regionRate, rates);
      const inflation = 1 + parseFloat(document.getElementById('inflationRate').value) / 100;
      const realNet = (data.netAnnual / inflation).toFixed(0);
      const resultEl = document.getElementById('result');
      resultEl.innerHTML =
        `&lt;p&gt;총 연봉(세전+보너스): &lt;strong&gt;${data.grossAnnual.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;국민연금: &lt;strong&gt;${data.pension.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;건강보험: &lt;strong&gt;${data.health.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;장기요양보험: &lt;strong&gt;${data.care.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;고용보험: &lt;strong&gt;${data.employment.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;소득세+지방세: &lt;strong&gt;${data.grossTax.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;실수령 연봉: &lt;strong&gt;${data.netAnnual.toFixed(0)}&lt;/strong&gt;만원&lt;/p&gt;
         &lt;p&gt;실질 연봉(인플레이션 반영): &lt;strong&gt;${realNet}&lt;/strong&gt;만원&lt;/p&gt;`;
      resultEl.style.display = 'block';
      const ctx1 = document.getElementById('salaryChart').getContext('2d'); document.getElementById('salaryChart').style.display = 'block'; if (window.chart1) window.chart1.destroy(); window.chart1 = new Chart(ctx1, { type:'pie', data:{ labels:['국민연금','건강보험','장기요양','고용보험','소득세+지방세','실수령'], datasets:[{ data:[data.pension,data.health,data.care,data.employment,data.grossTax,data.netAnnual] }] } });
      const ctx2 = document.getElementById('cashflowChart').getContext('2d'); document.getElementById('cashflowChart').style.display = 'block'; const monthlyGross = (data.grossAnnual/12).toFixed(0), monthlyNet = (data.netAnnual/12).toFixed(0); if (window.chart2) window.chart2.destroy(); window.chart2 = new Chart(ctx2, { type:'bar', data:{ labels:['월별 세전','월별 실수령'], datasets:[{ data:[monthlyGross,monthlyNet] }] } });
      const ctx3 = document.getElementById('forecastChart').getContext('2d'); document.getElementById('forecastChart').style.display = 'block'; if (window.chart3) window.chart3.destroy(); const years=[0,1,2,3,4].map(i=&gt;`+${i}년`); const forecast = years.map((_,i)=&gt;data.grossAnnual*Math.pow(inflation,i)); window.chart3 = new Chart(ctx3, { type:'line', data:{ labels:years, datasets:[{ label:'예상 연봉 (인플레이션 반영)', data:forecast }] }, options:{ responsive:true } });
    });
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

  &lt;/script&gt;</description>
      <category>정보/생활정보-각종계산기</category>
      <category>급여계산기</category>
      <category>네이버연봉계산기</category>
      <category>연봉계산기</category>
      <category>연봉실수령액</category>
      <category>월급계산기</category>
      <category>임금계싼기</category>
      <author>hiker's</author>
      <guid isPermaLink="true">https://no1card.tistory.com/58</guid>
      <comments>https://no1card.tistory.com/entry/%EC%A7%81%EC%9E%A5%EC%9D%B8-%EB%85%84%EC%B0%A8%EB%B3%84-%EC%97%B0%EB%B4%89%EC%8B%A4%EC%88%98%EB%A0%B9%EC%95%A1-%EC%9E%84%EA%B8%88-%EC%9B%94%EA%B8%89-%EA%B8%89%EC%97%AC%EA%B3%84%EC%82%B0%EA%B8%B0#entry58comment</comments>
      <pubDate>Sat, 5 Jul 2025 16:20:31 +0900</pubDate>
    </item>
  </channel>
</rss>