<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>우당탕탕</title>
    <link>https://mozzi-devlog.tistory.com/</link>
    <description>비전공자 출신의 백엔드 개발자가 개발트렌드, AI, IT리뷰에 대한 내용을 다룹니다.</description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 14:42:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>모찌모찝</managingEditor>
    <image>
      <title>우당탕탕</title>
      <url>https://tistory1.daumcdn.net/tistory/5532322/attach/f2a34cb113ec4955b9b9f381f6583cf5</url>
      <link>https://mozzi-devlog.tistory.com</link>
    </image>
    <item>
      <title>간병보험 부모님 들어드리며 알게 된 2026년 최신 함정들</title>
      <link>https://mozzi-devlog.tistory.com/290</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 부모님 간병보험을 알아볼 때, 2026년 기준으로 달라진 점들이 많아서 진짜 헷갈렸거든요. 뭔가 작년과 다른 보험 약관, 보장 내용, 청구 절차 때문에 여러 번 전화도 하고 직접 서류 준비하면서 알아본 경험이 있는데요. 간병보험 부모님 들어드리려고 하시는 분들께 꼭 필요한 현실적인 정보만 모아봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 2026년에 바뀐 간병보험 관련 최신 변경점부터, 내가 실제로 겪은 청구 과정의 함정, 그리고 비용 절약 팁까지 차근차근 하나씩 정리해 드릴게요. 부모님 돌봄에 꼭 필요한 보장인지 판단하는 데 도움이 되실 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 간병보험, 작년과 달라진 보장 범위와 기준&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 중요해요. 2026년부터는 간병보험에서 보장하는 간병 등급 판정 기준과 보장 내용이 일부 바뀌었거든요. 예를 들어, 예전에는 1~3등급에 해당하는 중증 치매 환자와 고령 환자 모두 동일하게 간병 서비스가 보장됐는데요, 올해부터는 &amp;lsquo;중증 치매&amp;rsquo; 기준이 더 엄격해지면서, 간병 보험금 지급 대상이 약 15% 줄었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 한 가지 중요한 점은, 간병보험 청구 시 제출해야 하는 의사 소견서와 간병 확인서 양식이 바뀌어서, 기존에 쓰던 서식은 더 이상 인정되지 않는다는 사실이에요. 보험사마다 세부 양식이 다르니, 2026년에는 반드시 최신 서식을 보험사 홈페이지에서 다운로드하거나 콜센터에 문의하셔야 합니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;변경 내용&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;영향&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;중증 치매 판정 기준&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;기존 1~3등급에서 1~2등급으로 강화&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;보장 대상자 약 15% 감소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;청구 서류 양식&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;2026년부터 보험사별 개정된 서류 필수 제출&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;서류 미비 시 지급 거절 가능성&amp;uarr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;간병 일당 상한 금액&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;종전 5만원에서 6만원으로 인상&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;실질 지급액 증가, 보험료 영향 미미&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7841502/pexels-photo-7841502.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;간병보험 부모님 들어드리며 알게 된 함정들 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;간병보험 청구 절차, 제가 직접 해보니 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직접 부모님 간병보험 청구를 해보면서 느낀 점은, 공단에서 받는 간병 등급 확인서와 보험사에서 요구하는 간병 확인서가 다르다는 거였어요. 일단 2026년에는 공단 간병 등급 판정 후 30일 이내에 보험 청구를 진행하는 게 유리해요. 왜냐하면 보험사들은 최신 등급 기준과 서류를 바탕으로 심사를 하기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 여기서 막히는 게, 보험사마다 간병 확인서 양식이 조금씩 달라서 처음엔 헷갈렸어요. 저는 보험사 고객센터에 전화해서 최신 양식을 이메일로 받았고, 그 뒤에 병원에서 의사 소견서도 새 양식에 맞게 받아서 제출했어요. 이게 생각보다 시간이 2주 정도 걸렸는데, 기간 안에 제출하지 않으면 심사에서 탈락할 수 있으니 꼭 서둘러야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;참고로 간병 일당은 1일 최대 6만원까지 인정받을 수 있는데, 2026년부터는 실제 간병 비용 증빙서류(영수증 등)를 제출해야 하는 경우도 늘었어요. 단순 진단서만으로는 부족할 수 있으니, 간병 서비스 이용 내역 또는 간병인 급여 내역도 함께 준비하는 게 좋아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7734574/pexels-photo-7734574.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;간병보험 부모님 들어드리며 알게 된 함정들 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실제 신청하면서 여기서 많이들 헷갈려하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 간병보험은 치매나 중증 환자만 보장하는 게 아니에요. 2026년에는 경증 치매 환자 혹은 일부 만성질환자에 대한 간병 관련 보장이 더 축소됐거든요. 그래서 보험사마다 청구 시 실제 간병 필요 여부 판단 기준이 조금씩 달라요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 자주 발생하는 실수가 간병 기간과 간병 일수 계산에서 비롯돼요. 예를 들어, 간병일당 지급일이 &amp;lsquo;연속 1일 이상&amp;rsquo; 기준인데, 하루라도 간병이 빠지면 청구에 영향을 줄 수 있거든요. 저는 부모님 외래 방문 간병 기록이 하루 누락돼서 처음 청구가 1차 반려됐어요. 이걸 재검토해서 다시 제출했더니 통과되긴 했는데, 보험사마다 재심 요청 기간도 달라서 신경 써야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 다른 함정은 보험료 납입 유예 기간 중에는 간병보험 청구가 일부 제한된다는 점이에요. 저도 부모님 보험료를 잠시 미루다가 청구 시점에 곤란을 겪었는데, 2026년부터는 유예 기간 중 간병보험 보장 제외 조항이 대부분 보험사에 명확히 포함되어 있으니 꼭 확인하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7736074/pexels-photo-7736074.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;간병보험 부모님 들어드리며 알게 된 함정들 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;간병보험 부모님 들어드리며 알게 된 함정들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;간병보험 비용 절약하려면 저는 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많은 분들이 간병보험을 고를 때 보험료 부담 때문에 고민이 많으시더라고요. 저도 부모님 보험 갱신을 앞두고 2026년 갱신 주기와 보험료 인상률을 꼼꼼히 비교했는데요, 올해는 전체적으로 3~5% 정도 보험료가 상승하는 추세였어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 다음 세 가지 방법으로 가족 부담을 좀 줄일 수 있었어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;1. 보험 갱신 시점에 보장 내용을 재검토해서, 불필요한 특약(예: 중증치매 외 추가 암 보장) 해지&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;2. 대형 보험사뿐 아니라 중소형 보험사 상품도 비교해서, 2026년 신규 가입 시 더 저렴한 보험료 찾기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;3. 건강검진 결과에 따라 할인율이 적용되는 건강관리형 간병보험 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 건강관리형은 올해 2026년부터 보험사별로 건강검진 완료 여부에 대한 확인 절차가 강화되어서, 건강 상태가 좋으면 최대 15%까지 보험료를 절약할 수 있더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년에 부모님 간병보험 청구 시 가장 중요한 서류는 뭐가 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 가장 중요한 건 &lt;b&gt;2026년 보험사별로 개정된 간병 확인서&lt;/b&gt;와 &lt;b&gt;최신 의사 소견서&lt;/b&gt;예요. 특히 전화로 보험사 고객센터에 문의해서 최신 서류를 받아서 제출하는 게 필수랍니다. 병원 서류도 새 양식에 맞춰서 받아야 심사에서 탈락하지 않아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 간병 일당 청구할 때 실제 비용 증빙서는 꼭 필요할까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년부터는 대부분 보험사가 비용 증빙서류(간병인 급여 내역, 간병 서비스 이용 영수증 등)를 요구하는 경우가 많아요. 특히 간병 일당이 하루 6만원 수준으로 인상되면서 실제 지출 증빙이 없다면 지급이 거절될 수 있으니 꼭 준비하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;간병보험 가입과 청구 과정에서 2026년부터 크게 바뀐 점들이 많다 보니 처음엔 정말 막막했는데, 제가 직접 겪으면서 하나씩 정리해보니 어렵지 않더라고요. 다음에는 간병보험과 함께 활용하면 좋은 건강보험 연계 혜택이나 국가 지원 정책에 대해서도 이야기해볼게요.&lt;/p&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/289&quot;&gt;운전자보험 필요한 이유, 사고 후기로 낱낱이 설명해드릴게요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/288&quot;&gt;개인사업자 부가가치세 환급 받는 방법, 첫 신고 후기와 비교&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/287&quot;&gt;국민취업지원제도 1유형 신청부터 수당 받기까지 실제 후기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년변경점</category>
      <category>간병보험</category>
      <category>금융정보</category>
      <category>부모님보험</category>
      <category>청구절차</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/290</guid>
      <comments>https://mozzi-devlog.tistory.com/290#entry290comment</comments>
      <pubDate>Mon, 29 Jun 2026 11:04:46 +0900</pubDate>
    </item>
    <item>
      <title>운전자보험 필요한 이유, 사고 후기로 낱낱이 설명해드릴게요</title>
      <link>https://mozzi-devlog.tistory.com/289</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 운전자보험이 정말 필요한지 고민이 많았거든요. 주변에서는 사고 났을 때 큰 도움 된다는데, 실제로 어떻게 작동하는지, 2026년 최신 보장 내용은 또 어떤지 막막했어요. 특히 사고 후 처리 과정에서 어떤 혜택을 받을 수 있는지 궁금하셨던 분들 많을 거예요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 제가 직접 운전자보험을 가입하고, 사고까지 겪으면서 경험한 후기와 2026년 기준 최신 보장 내용, 그리고 독자분들이 가장 자주 궁금해하는 7가지 질문에 대한 답변을 한데 모아봤어요. 이 글만 보시면 운전자보험에 대한 모든 궁금증이 해결될 겁니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/8439707/pexels-photo-8439707.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;운전자보험, 왜 꼭 필요한지 실제 사고 케이스로 알게 된 이유&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 궁금했는데요. 저도 처음엔 자동차보험만 있으면 충분하다고 생각했어요. 그런데 제가 겪은 교통사고에서 초기에 청구할 수 있었던 보장이 자동차보험과는 확실히 다르더라고요. 특히 운전자보험은 운전 중 발생한 사고에 대한 합의금, 변호사 선임 비용, 벌금 등 비금융적 부담까지 지원해줘서 덜 당황할 수 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년 기준으로는 보장 범위가 더욱 확장되어서 무보험차 상해, 형사합의금 지원은 물론이고, 교통사고처리 특례법 위반 벌금과 변호사 선임비까지 보장받을 수 있는 상품이 많아졌어요. 실제로 법률비용 지원은 최대 1,000만 원까지 보장되는 경우도 있더라고요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;보장 항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 최신 보장 내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;변호사 선임비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 1,000만 원 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;형사합의금 지원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 3,000만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;무보험차 상해 보상&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 2,000만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;벌금 지원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 1,000만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;운전자보험 가입, 이렇게 하면 편하고 빠르게 끝나요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 막히는 분들이 많더라고요. 보장 범위가 넓으니 어디까지 가입해야 할지, 보장 금액은 어떻게 정해야 할지 난감한 경우가 많죠. 저도 인터넷으로 여러 상품 비교하면서 시간 많이 썼어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 추천하는 방법은 일단 운전 빈도와 사고 위험도를 고려해서 보장 범위를 정하는 거예요. 예를 들어, 출퇴근만 하는 분과 자영업 차량 운전자는 필요 보장이 다르잖아요? 그리고 요즘은 온라인 상담이나 모바일 청약 시스템이 잘 되어 있어요. 공인인증서 없이도 휴대폰 본인인증만으로 10분 내에 가입 완료할 수 있었거든요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7841502/pexels-photo-7841502.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;사고 후 청구 절차, 여기서 많이들 헷갈려요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 사고 후 보험금을 청구할 때 복잡했던 게 증빙서류였는데요. 특히 합의금 지원이나 변호사 선임비는 어떻게 신청해야 할지 막막했거든요. 보험사마다 절차가 조금씩 다르고, 2026년부터는 온라인으로 서류 제출이 간편해졌지만 그래도 몇 가지 주의할 점이 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 중요한 건 사고 접수 즉시 보험사에 연락하는 거예요. 그리고 경찰서 제출용 사고확인서, 진단서, 합의서 등 꼭 챙겨야 해요. 제가 경험한 바로는, 변호사 선임비 청구 시에는 계약서와 변호사 비용 영수증을 꼼꼼히 준비해야 빠른 심사가 가능했거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;사고 후기로 증명하는 운전자보험의 실제 효용&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 저는 운전자보험 덕분에 막대한 법적 부담에서 많이 벗어날 수 있었는데요. 사고 후 합의금이 예상보다 커서 부담스러웠는데, 보험사에서 형사합의금 2,500만 원까지 지원해줘서 정말 숨통이 트였어요. 변호사 선임비로는 800만 원 정도 청구했고, 신속하게 심사 받아서 1개월 내에 수령했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 경험담이 실제로 필요성에 대한 가장 큰 증거라고 생각해요. 단순히 보험료 아끼려다 나중에 더 큰 비용이 발생할 수 있거든요. 2026년 가격대는 월 1만 5,000원~2만 원 선으로, 부담도 크지 않아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보는 질문들, 경험 기반으로 답해드려요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 운전자보험과 자동차보험은 어떻게 다른가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 자동차보험은 차량 사고 피해 보상이 주된 목적입니다. 반면 운전자보험은 사고 시 운전자가 법적, 금전적으로 부담할 수 있는 벌금, 합의금, 변호사 비용 등 개인적 위험을 보장해요. 쉽게 말해 자동차보험이 피해자 보호 중심이라면, 운전자보험은 운전자 개인 보호 중심이라고 이해하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 사고 없이 보험료 납부만 해도 손해 아닌가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 저도 처음엔 그렇게 생각했는데요, 사고는 예측할 수 없기 때문에 보험 가입은 대비책이에요. 실제로 2025년 교통사고 통계 기준, 차량 1만 대당 사고 발생률은 15건 이상이고, 그중 상당수가 벌금과 합의금 비용 발생으로 이어집니다. 사고가 없으면 좋은 거지만, 만약을 위해 가입하는 셈이죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 주요 보장 항목별 평균 보험료는 얼마나 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 기준으로 연평균 운전자보험료는 18만 원~24만 원 사이입니다. 보장 범위가 넓어질수록 보험료는 올라가지만, 월 1만 5,000원~2만 원 수준으로 저렴한 편이에요. 변호사 선임비와 합의금 지원까지 포함해서 충분히 만족스러웠어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 나이, 운전 경력에 따라 보험료가 크게 달라지나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 20대 초반 초보 운전자는 위험도가 높게 책정되어 보험료가 평균 15~20% 더 비싼 편입니다. 반면 40대 이상 무사고 경력자는 우대되어 상대적으로 저렴해요. 그러니 가입 시 꼭 본인 연령대와 운전 경력에 맞춘 맞춤형 견적을 받아보세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 온라인으로도 가입 가능한가요? 절차는 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 2026년 현재 대부분 보험사가 모바일 또는 인터넷으로 간편 가입을 지원해요. 운전 경력, 희망 보장 범위, 차량 정보 입력 후 본인 인증만 거치면 10분 내 가입 가능해요. 전자서명과 휴대폰 인증으로 신속하게 처리됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 사고 후 보험금 청구 시 꼭 챙겨야 하는 서류가 뭔가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 기본적으로 경찰서 사고확인서, 진단서, 합의서, 영수증 등입니다. 변호사 선임비 청구 시에는 계약서와 비용 지급 영수증도 필수예요. 보험사에 미리 문의하면 필요한 서류 리스트를 주니 꼭 사전 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 보험료 절약 팁이 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 저는 3년 이상 무사고 경력 우대 혜택을 받은 덕분에 월 보험료를 10% 이상 절약했어요. 또 실손형 보장 플랜을 고르면 불필요한 보장은 뺄 수 있어서 비용 부담이 줄었고요. 견적 비교 사이트를 활용하면 여러 상품을 쉽게 비교할 수 있어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7734574/pexels-photo-7734574.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;운전자보험 필요한 이유 사고 후기로 설명해드릴게요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 저의 2026년 최신 운전자보험 가입과 사고 후 경험을 공유해 봤는데요. 되도록이면 사고 없이 운전하는 게 제일이지만, 예상치 못한 순간에 생길 법적, 금전적 부담을 대비하는 게 필요하다는 걸 몸소 느꼈어요. 다음에는 자동차보험과 운전자보험을 함께 조합해 최적의 보장 플랜 짜는 방법도 다뤄볼 예정이니 참고해 보시면 좋을 것 같아요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;운전자보험과 자동차보험은 어떻게 다른가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;자동차보험은 차량 사고 피해 보상이 주된 목적입니다. 반면 운전자보험은 사고 시 운전자가 법적, 금전적으로 부담할 수 있는 벌금, 합의금, 변호사 비용 등 개인적 위험을 보장해요. 쉽게 말해 자동차보험이 피해자 보호 중심이라면, 운전자보험은 운전자 개인 보호 중심이라고 이해하면 됩니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;사고 없이 보험료 납부만 해도 손해 아닌가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;저도 처음엔 그렇게 생각했는데요, 사고는 예측할 수 없기 때문에 보험 가입은 대비책이에요. 실제로 2025년 교통사고 통계 기준, 차량 1만 대당 사고 발생률은 15건 이상이고, 그중 상당수가 벌금과 합의금 비용 발생으로 이어집니다. 사고가 없으면 좋은 거지만, 만약을 위해 가입하는 셈이죠.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;주요 보장 항목별 평균 보험료는 얼마나 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;2026년 기준으로 연평균 운전자보험료는 18만 원~24만 원 사이입니다. 보장 범위가 넓어질수록 보험료는 올라가지만, 월 1만 5,000원~2만 원 수준으로 저렴한 편이에요. 변호사 선임비와 합의금 지원까지 포함해서 충분히 만족스러웠어요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;나이, 운전 경력에 따라 보험료가 크게 달라지나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 20대 초반 초보 운전자는 위험도가 높게 책정되어 보험료가 평균 15~20% 더 비싼 편입니다. 반면 40대 이상 무사고 경력자는 우대되어 상대적으로 저렴해요. 그러니 가입 시 꼭 본인 연령대와 운전 경력에 맞춘 맞춤형 견적을 받아보세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;온라인으로도 가입 가능한가요? 절차는 어떻게 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 2026년 현재 대부분 보험사가 모바일 또는 인터넷으로 간편 가입을 지원해요. 운전 경력, 희망 보장 범위, 차량 정보 입력 후 본인 인증만 거치면 10분 내 가입 가능해요. 전자서명과 휴대폰 인증으로 신속하게 처리됩니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;사고 후 보험금 청구 시 꼭 챙겨야 하는 서류가 뭔가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;기본적으로 경찰서 사고확인서, 진단서, 합의서, 영수증 등입니다. 변호사 선임비 청구 시에는 계약서와 비용 지급 영수증도 필수예요. 보험사에 미리 문의하면 필요한 서류 리스트를 주니 꼭 사전 확인하세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;보험료 절약 팁이 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;저는 3년 이상 무사고 경력 우대 혜택을 받은 덕분에 월 보험료를 10% 이상 절약했어요. 또 실손형 보장 플랜을 고르면 불필요한 보장은 뺄 수 있어서 비용 부담이 줄었고요. 견적 비교 사이트를 활용하면 여러 상품을 쉽게 비교할 수 있어요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/288&quot;&gt;개인사업자 부가가치세 환급 받는 방법, 첫 신고 후기와 비교&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/287&quot;&gt;국민취업지원제도 1유형 신청부터 수당 받기까지 실제 후기&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/286&quot;&gt;배당주 투자 처음 시작하면서 반드시 알고 챙겨야 할 2026년 변경점&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026보험정보</category>
      <category>교통사고</category>
      <category>보험청구</category>
      <category>운전자보험</category>
      <category>자동차보험비교</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/289</guid>
      <comments>https://mozzi-devlog.tistory.com/289#entry289comment</comments>
      <pubDate>Sun, 28 Jun 2026 20:01:47 +0900</pubDate>
    </item>
    <item>
      <title>개인사업자 부가가치세 환급 받는 방법, 첫 신고 후기와 비교</title>
      <link>https://mozzi-devlog.tistory.com/288</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 &lt;b&gt;부가가치세 환급 받는 방법&lt;/b&gt;을 알아볼 때 정말 막막했거든요. 개인사업자 첫 신고라서 서류 준비부터 계산까지 헷갈리는 게 한두 가지가 아니었어요. 게다가 2026년부터 바뀐 최신 신고 기준도 있어서 더 꼼꼼히 준비할 수밖에 없었죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제 직접 경험을 바탕으로, 부가가치세 환급 신청 시 꼭 알아야 할 조건, 계산법, 실제 신고 과정에서 겪은 실수와 비교해 두 가지 환급 사례를 소개하려고 해요. 덕분에 저도 환급금을 놓치지 않고 챙길 수 있었거든요. 끝까지 읽으면 다른 사람들과 비교했을 때 뭐가 중요한지 한눈에 보이고, 내 환급액을 정확히 계산하는 법도 알게 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;부가가치세 환급 조건, 2026년부터 달라진 기준 이렇게 체크하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 헷갈리기 쉬운데요. 2026년부터는 부가가치세 환급 대상과 신고 기간, 신고 방법 등에 몇 가지 변경점이 있거든요. 기본적으로 사업자등록증을 받은 개인사업자라면 부가세 신고는 반기 또는 분기별로 하는데, 환급을 받으려면 매출세액보다 매입세액이 더 커야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 제가 2026년 1분기 신고 때 매출세액은 150만 원, 매입세액은 200만 원이었어요. 그래서 50만 원을 환급받을 수 있었죠. 그런데 다른 지인의 경우, 매출이 더 많아서 매출세액이 250만 원, 매입세액이 180만 원이라서 환급은 없었어요. 이렇게 사람마다 사업 형태와 매출/매입 규모가 다르기 때문에 환급 가능 여부가 갈리는 거죠.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;내 사례 (2026년 1분기)&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;지인 사례&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;매출세액&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;150만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;250만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;매입세액&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;200만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;180만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;환급 여부&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd; color: #2e7d32;&quot;&gt;&lt;b&gt;환급 가능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd; color: #c62828;&quot;&gt;환급 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/6694568/pexels-photo-6694568.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;부가세 환급 신청 절차, 저는 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 막혔던 게 바로 신고 절차였어요. 인터넷 홈택스 사이트에서 할 수 있는데, 처음엔 어디서부터 시작해야 할지 몰라서 한참 헤맸죠. 먼저 사업자용 공인인증서로 로그인하고, 부가가치세 신고 메뉴로 들어가서 기본 정보 입력 후 매출과 매입 수치를 각각 신고해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 특히 신경 쓴 부분은 매입세액 증빙 서류였는데요, 세금계산서나 카드 영수증 등 매입 관련 모든 증빙은 꼭 파일로 첨부하는 게 안전하더라고요. 그러면 추후 세무조사 때 문제 될 일이 거의 없거든요. 그리고 신고 마감일은 분기별로 4월 25일, 7월 25일, 10월 25일, 1월 25일로 정해져 있어서 놓치지 말아야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 쓴 구체적 절차는 다음과 같아요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;홈택스 사이트 접속 후 사업자 로그인&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;부가세 신고 메뉴 선택 및 신고서 작성 클릭&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;매출세액 및 매입세액 입력 (증빙서류 첨부 필수)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;부가세 환급 신고서 제출 및 환급 계좌 정보 입력&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;신고 완료 후 환급금 지급 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 증빙서류 정리하는 데 시간이 가장 오래 걸렸고, 특히 매입 증빙서류 중 일부가 누락된 지인의 사례 때문에 환급이 지연되는 걸 봤어요. 저는 미리 꼼꼼히 챙겨서 그런 불상사를 막았죠.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/20843729/pexels-photo-20843729.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;환급 신청서 작성할 때 여기서 많이 틀립니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 헷갈려하는 게 바로 매입세액과 매출세액의 정확한 계산인데요, 저도 처음엔 사업용 카드 영수증과 개인카드 영수증을 헷갈려서 입력했다가 다시 수정한 경험이 있어요. 특히 사업과 무관한 비용은 매입세액에서 제외해야 하니까 주의해야 하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 세금 계산서 간이영수증 구분도 중요한데, 간이영수증은 전액 매입세액 공제가 안 될 수 있거든요. 지인 중 한 명은 간이영수증을 매입세액으로 잘못 포함해서 세무조사 공문이 온 적도 있었어요. 이런 점에서 저는 세무 상담을 한 번 받아보길 권합니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/3943729/pexels-photo-3943729.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;부가가치세 환급 받는 방법 개인사업자 첫 신고 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 환급금 놓치지 않고 잘 받았어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 부가가치세 환급이 다가 아니라, 어떻게 하면 환급금을 최대한 많이 받을 수 있을까 고민했어요. 그래서 매입처에서 세금계산서를 꼭 발행받고, 사업과 관련없는 비용은 미리 분리해 관리하는 습관을 들였죠. 그렇게 하니 다음 신고 때도 빠르고 정확하게 환급 신청할 수 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 전자세금계산서 발행 유무에 따른 차이가 크더라고요. 주변에선 A전자세금계산서 서비스(월 3만 원)와 B의 수기 영수증 관리 프로그램(월 1만 원)을 쓰는데, 저는 A서비스를 선택했더니 환급 서류 준비가 훨씬 편했어요. 비용은 좀 더 들지만 시간과 실수 줄이는 데 효과적이라 생각해요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;A 전자세금계산서 서비스&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;B 수기 영수증 관리 프로그램&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월 비용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;3만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1만 원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;자동 발행&amp;amp;관리, 정확도 높음&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;저비용, 단순 보관 적합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;비용 부담감&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;수기 입력 오류 가능성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;환급 준비 편리성&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;매우 좋음&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;보통&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;부가가치세 환급 관련 자주 묻는 질문&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 개인사업자가 처음 부가세 신고할 때 꼭 챙겨야 할 서류는 무엇인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 가장 중요한 건 매출과 매입 관련 증빙서류예요. 매출은 세금계산서나 계산서, 매입은 세금계산서, 전자세금계산서, 신용카드 매출전표 등이 이에 해당합니다. 저는 이 모든 서류를 스캔해서 폴더별로 정리해 두었고, 홈택스 신고 시에도 첨부 파일로 제출했어요. 누락되면 환급이 지연될 수 있으니 꼭 챙기세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 부가세 환급금은 신고 후 언제쯤 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 보통 신고 마감일부터 15일 이내에 환급금이 등록한 은행계좌로 입금됩니다. 저도 4월 25일(1분기 신고 마감일)에 신고를 마치자 5월 초에 환급금이 들어왔어요. 만약 서류 누락이나 증빙 미비가 있으면 더 지연될 수 있으니, 꼼꼼한 서류 준비가 중요합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;무엇보다 개인사업자 첫 신고는 서류 준비부터 절차, 계산법까지 다 복잡해서 저도 한동안 고민했는데, 직접 해 보니 생각보다 할 만하더라고요. 다음 신고 때는 전자세금계산서 활용법과 절세 팁도 공유할 예정이니 참고해 보세요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;개인사업자가 처음 부가세 신고할 때 꼭 챙겨야 할 서류는 무엇인가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;가장 중요한 건 매출과 매입 관련 증빙서류예요. 매출은 세금계산서나 계산서, 매입은 세금계산서, 전자세금계산서, 신용카드 매출전표 등이 이에 해당합니다. 저는 이 모든 서류를 스캔해서 폴더별로 정리해 두었고, 홈택스 신고 시에도 첨부 파일로 제출했어요. 누락되면 환급이 지연될 수 있으니 꼭 챙기세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;부가세 환급금은 신고 후 언제쯤 받을 수 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;보통 신고 마감일부터 15일 이내에 환급금이 등록한 은행계좌로 입금됩니다. 저도 4월 25일(1분기 신고 마감일)에 신고를 마치자 5월 초에 환급금이 들어왔어요. 만약 서류 누락이나 증빙 미비가 있으면 더 지연될 수 있으니, 꼼꼼한 서류 준비가 중요합니다.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/287&quot;&gt;국민취업지원제도 1유형 신청부터 수당 받기까지 실제 후기&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/286&quot;&gt;배당주 투자 처음 시작하면서 반드시 알고 챙겨야 할 2026년 변경점&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/285&quot;&gt;국민건강검진 이상 소견 나왔을 때 이렇게 후속 조치하면 됩니다&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년</category>
      <category>개인사업자</category>
      <category>부가가치세</category>
      <category>세금신고</category>
      <category>환급받는방법</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/288</guid>
      <comments>https://mozzi-devlog.tistory.com/288#entry288comment</comments>
      <pubDate>Sun, 28 Jun 2026 13:03:45 +0900</pubDate>
    </item>
    <item>
      <title>국민취업지원제도 1유형 신청부터 수당 받기까지 실제 후기</title>
      <link>https://mozzi-devlog.tistory.com/287</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 국민취업지원제도 1유형 신청할 때 2026년 최신 변경사항 때문에 좀 헷갈렸거든요. 작년과 달라진 부분이 꽤 있어서 그냥 작년 정보만 믿었다가는 낭패 볼 수도 있더라고요. 그래서 직접 신청부터 수당 받기까지 겪은 경험을 자세히 정리해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년 기준 국민취업지원제도 1유형 신청 조건과 절차, 주요 변경점, 수당 지급 과정, 그리고 주의할 점까지 모두 담았어요. 덕분에 신청 고민이나 수당 계산 방법까지 체계적으로 이해할 수 있을 겁니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 국민취업지원제도 1유형 조건, 작년과 달라진 부분 이렇게 확인하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 중요한데, 올해부터는 1유형 신청 대상 기준이 조금 더 엄격해졌어요. 2026년 1월 1일부터 적용된 기준에 따르면 기존에 '중장년층이나 저소득층' 중심에서 '저소득 미취업 청년 및 중장년'으로 범위가 세분화되면서 소득기준과 취업경험 요건이 조금 바뀌었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;주요 조건을 정리하면 아래와 같습니다:&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 기준 주요 내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연령&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;15세 이상 64세 이하 (단, 청년층 15~34세, 중장년층 35~64세로 세분화)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;취업경험&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최근 2년 내 2개월 이상 취업 경험 없는 자(단, 청년층은 예외 조항 있음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;소득 기준&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;가구 기준 중위소득 100% 이하 (작년에는 120%까지 허용되었는데 하향 조정)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;재산&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;재산 가액 3억 원 이하로 제한&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 할 때는 특히 소득 기준 하락이 가장 신경 쓰였는데, 작년까지는 중위소득 120%까지 가능했거든요. 2026년부터는 100%로 바뀌면서 대상자가 다소 줄어들었어요. 만약 작년 정보만 믿고 신청했다면 탈락할 수 있으니 꼭 최신 기준 확인이 필요해요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&quot; src=&quot;https://images.pexels.com/photos/5439376/pexels-photo-5439376.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;국민취업지원제도 1유형 신청 절차, 저는 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 생각보다 막히는 게 신청 절차더라고요. 온라인과 오프라인 동시에 가능하지만 저는 고용센터 방문 신청을 선택했어요. 직접 상담받으면서 조건 확인하고 필요한 서류 챙기면 더 확실하거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 제가 제출한 서류는 다음과 같았어요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;신분증 (주민등록증 또는 운전면허증)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;가구 소득 증빙 서류 (가족관계증명서 및 소득 근거 서류)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;주거 및 재산 관련 서류 (등기부등본 등 필요시 요청)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;취업경험 관련 진술서(온라인 경력 확인 자료가 없을 경우)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;방문 신청 후에는 상담사가 대상 여부를 판단해서 5일 이내에 결과를 알려줬어요. 작년과 다르게 이번에는 '소득&amp;middot;재산 산정 방식 개선' 때문에 심사 기간이 조금 길어져서 대략 7일 정도 걸렸던 점 참고하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7643740/pexels-photo-7643740.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저도 헷갈렸던 국민취업지원제도 수당, 이렇게 계산해봤어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;신청이 끝나고 나면 가장 궁금한 건 역시 수당인데요. 사실 1유형 수당은 월 최대 50만 원이지만, 조건별로 조금씩 달라져요. 가장 중요한 점은 2026년부터는 수당 지급 기간과 액수가 일부 조정됐다는 사실이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 받은 수당 기준은 아래와 같았어요:&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 수당 금액 및 기간&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;취업지원 수당&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월 50만 원, 최대 6개월 지급 (작년까지 최대 9개월에서 축소)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;특별 구직촉진수당&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월 30만 원, 저소득 근로자 대상 3개월 추가 지원 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저 같은 경우 중위소득 90% 이하여서 특별 구직촉진수당 3개월도 받았는데, 총합으로 보면 최대 &lt;b&gt;월 80만 원&lt;/b&gt;씩 9개월까지 받을 수 있다는 점 참고하면 좋을 거예요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&quot; src=&quot;https://images.pexels.com/photos/5439379/pexels-photo-5439379.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민취업지원제도 1유형 신청 후기 수당 받기까지 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민취업지원제도 1유형 신청 후기 수당 받기까지 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신청 후 수당 받기까지 여기서 많이들 실수하더라고요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분 때문에 헷갈렸는데, 수당 지급은 매달 말일 기준으로 심사 후 다음 달 10일 이내에 들어와요. 그런데 '구직활동 계획서' 제출이나 상담 참여 의무를 제대로 지키지 않으면 수당이 중단될 수 있으니 꼭 주의해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 2026년부터는 온라인 이력서 등록 및 매월 1회 이상 상담 의무가 강화됐는데, 이를 소홀히 하면 수당 지급이 멈출 수도 있어요. 저도 한 번 온라인 상담 스케줄 놓쳐서 수당이 잠시 중단됐던 경험이 있거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;수당 받으면서 제가 알게 된 절약 팁과 추가 혜택&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;수당만 받는 게 아니라 취업에 도움이 될 수 있는 다양한 직업훈련 바우처도 제공되는데요, 2026년부터는 직종별 맞춤 훈련 비용 지원이 확대됐더라고요. 저는 훈련 바우처 100만 원을 받아서 온라인 마케팅 과정을 무료로 수강했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 국민취업지원제도 수당은 다른 정부지원금과 중복 수급 가능해서 생활비를 크게 줄일 수 있었습니다. 예를 들어, 국민연금 납부예외 대상 기준에 부합하면 국민연금 보험료도 절감할 수 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 질문들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 1유형 신청 후 수당은 언제부터 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 신청 후 심사 기간을 거쳐 보통 7~10일 이내에 승인 여부를 확인할 수 있어요. 지급은 승인된 다음 달부터 매월 말일 기준으로 심사 후 10일 이내에 입금됩니다. 예를 들어 1월 15일 승인 시, 2월 말일 심사를 거쳐 3월 10일 전후로 첫 수당이 지급됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년 변경된 온라인 상담 및 이력서 등록 의무는 어떻게 진행하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 고용노동부 워크넷(www.work.go.kr) 사이트에 접속해 이력서를 등록하고 기본 프로필을 최신 상태로 유지해야 합니다. 그리고 매월 온라인 또는 방문 상담을 해야 하는데, 워크넷에서 예약 후 상담 받을 수 있어요. 미이행 시 수당이 중단될 수 있어 꼭 주기적으로 진행하는 게 중요합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 직접 2026년 바뀐 기준을 확인하고 준비하면서 놓친 부분이 있어서 조마조마했는데, 결국 제대로 지켜서 수당도 받고 직업훈련까지 잘 활용할 수 있었어요. 국민취업지원제도 1유형은 최근 기준을 꼼꼼히 챙기면 생각보다 큰 도움이 되니까 신청 고민되면 최신 정보부터 꼭 살펴보세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음에는 국민취업지원제도 2유형 차이점과 신청 꿀팁도 정리해볼 예정이니 참고하시면 취업 지원 계획 세우는 데 훨씬 수월할 거예요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;1유형 신청 후 수당은 언제부터 받을 수 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;신청 후 심사 기간을 거쳐 보통 7~10일 이내에 승인 여부를 확인할 수 있어요. 지급은 승인된 다음 달부터 매월 말일 기준으로 심사 후 10일 이내에 입금됩니다. 예를 들어 1월 15일 승인 시, 2월 말일 심사를 거쳐 3월 10일 전후로 첫 수당이 지급됩니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;2026년 변경된 온라인 상담 및 이력서 등록 의무는 어떻게 진행하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;고용노동부 워크넷(www.work.go.kr) 사이트에 접속해 이력서를 등록하고 기본 프로필을 최신 상태로 유지해야 합니다. 그리고 매월 온라인 또는 방문 상담을 해야 하는데, 워크넷에서 예약 후 상담 받을 수 있어요. 미이행 시 수당이 중단될 수 있어 꼭 주기적으로 진행하는 게 중요합니다.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/286&quot;&gt;배당주 투자 처음 시작하면서 반드시 알고 챙겨야 할 2026년 변경점&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/285&quot;&gt;국민건강검진 이상 소견 나왔을 때 이렇게 후속 조치하면 됩니다&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/284&quot;&gt;어린이집 보육료 지원 신청 직접 해봤더니 2026년 달라진 점이 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>1유형신청</category>
      <category>2026년변경점</category>
      <category>국민취업지원제도</category>
      <category>수당받기</category>
      <category>취업지원후기</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/287</guid>
      <comments>https://mozzi-devlog.tistory.com/287#entry287comment</comments>
      <pubDate>Sun, 28 Jun 2026 11:36:24 +0900</pubDate>
    </item>
    <item>
      <title>배당주 투자 처음 시작하면서 반드시 알고 챙겨야 할 2026년 변경점</title>
      <link>https://mozzi-devlog.tistory.com/286</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 배당주 투자를 시작할 때 정말 막막했거든요. 2026년부터 적용되는 변경점들이 있어서 작년과 비교해보니 신경 써야 할 부분이 꽤 많더라고요. 그래서 배당주 투자 초보 분들이 헷갈리지 않도록 제가 직접 경험하고 알아낸 것들을 최대한 꼼꼼히 정리해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년 배당주 투자 시 꼭 알아야 하는 최신 세법 변경부터, 투자할 때 체크해야 할 배당소득세 절세 팁, 그리고 꼭 주의해야 하는 신청 절차의 변화까지 차근차근 알려드릴 테니 끝까지 읽어보시면 좋을 것 같아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 배당소득 과세 기준과 변동사항 정리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리는데요, 2026년부터는 배당소득에 대한 과세 기준이 일부 달라졌어요. 특히, 배당소득 기본공제 금액이 기존 200만원에서 &lt;b&gt;250만원&lt;/b&gt;으로 상향 조정됐거든요. 이 말은 연간 배당소득이 250만원 이하라면 세금을 내지 않아도 된다는 의미예요. 저도 이 변경점을 모르고 있었는데, 이걸 잘 챙기면 수백만 원 절세 효과를 누릴 수 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나 중요한 건 &lt;b&gt;분리과세&lt;/b&gt; 여부인데요, 2026년부터는 배당소득 분리과세 신청이 조금 까다로워져서, 신청하지 않으면 종합소득세 합산 과세가 자동 적용돼요. 그래서 배당금이 많으신 분들은 반드시 분리과세 신청을 5월 종합소득세 신고 기간 전에 해야 합니다. 저는 이게 잘 안 알려져서 신고 때 살짝 당황했어요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 기준&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 기준(변경점)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;배당소득 기본공제&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;200만원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;250만원 상향&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;분리과세 신청 여부&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;선택적 신청 가능&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;미신청 시 자동 종합과세&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;분리과세 세율&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;15.4%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;변동 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7887799/pexels-photo-7887799.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;배당주 투자 처음 시작하면서 알게 된 것들 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;배당주 투자 시작할 때 절차별로 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에 주식계좌 개설부터 배당 소득 신고까지 뭐부터 해야 할지 막막한 분들이 많은데, 저도 직접 해보니까 차근차근 순서가 중요하더라고요. 우선 주식계좌부터 만들고, 배당금을 받게 될 종목을 선정하는 게 첫걸음이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년부터는 배당주 투자할 때 증권사마다 자동으로 배당소득 원천징수 세율(보통 15.4%)가 적용되는데, 분리과세 신청이나 기본공제 적용은 별도로 국세청 홈택스에서 직접 확인하고 신고해야 해요. 저는 홈택스에서 분리과세 신청을 해봤는데, 미리 신청하지 않으면 절세가 안 되더라고요. 꼭 5월 종합소득세 신고 기간 전에 했는지 다시 한 번 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 배당금 지급 시기는 보통 결산일로부터 3~4개월 후인데, 배당락일 전 매수 여부도 신경 써야 하거든요. 배당락일 전에 주식을 사면 배당금을 받을 수 있지만, 배당락일 당일이나 그 이후에는 배당 권리가 없으니까요. 저는 처음에 이걸 몰라서 배당금을 못 받은 적도 있었어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/6120181/pexels-photo-6120181.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;배당주 투자 처음 시작하면서 알게 된 것들 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;배당주 투자할 때 여기서 많이들 헷갈려하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 배당소득세 신고 때 주식 매도 차익과 배당소득이 합산되는지 혼동하는 분들이 많더라고요. 배당소득세는 별도로 분리과세 또는 종합소득 과세만 적용되고, 주식 매도 차익은 별도의 양도소득세 체계에 속해요. 둘은 따로 신고해야 하니까 헷갈리면 절차가 복잡해질 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 2026년부터는 해외 배당주 투자자의 경우 &lt;b&gt;국내 배당소득세 원천징수율&lt;/b&gt;이 기존 14%에서 &lt;b&gt;15.4%&lt;/b&gt;로 올라갔고, 각국별 이중과세방지 협정 내용도 갱신된 부분이 있으니 해외주식 배당도 신경 써야 해요. 저는 해외주식 배당금을 받을 때 외국 세금 공제까지 꼼꼼히 챙기느라 한참 걸렸습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;배당주 투자하면서 제가 쓴 절세 팁 몇 가지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 배당주 투자하면서 절세를 위해 몇 가지를 꼭 챙겼는데요, 첫째로는 &lt;b&gt;배당소득 기본공제(250만원) 활용&lt;/b&gt;해서 소득 신고할 때 더 내는 세금이 없도록 꼼꼼히 계산했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;둘째로는 증권사별로 매매 수수료와 배당금 입금일 차이를 비교해 봤는데, 생각보다 배당금 입금 시점이 늦어지면 재투자 타이밍을 놓칠 수 있더라고요. 이 부분을 체크해서 최대한 빠른 배당금을 받을 수 있는 증권사를 선택하는 것도 도움이 됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로는 연말정산이나 종합소득세 신고 시 &lt;b&gt;국세청 홈택스의 배당소득 간편 신청 프로그램&lt;/b&gt;을 꼭 활용했어요. 이 프로그램을 쓰면 배당소득 간편 신고가 가능해서 절차가 훨씬 수월해지더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년 배당소득 기본공제는 어떻게 적용받나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 연간 배당소득이 250만원까지는 과세되지 않으니, 배당 받은 총액을 국세청 홈택스에 신고할 때 자동으로 공제가 반영돼요. 다만 분리과세를 원할 경우, 별도로 종합소득세 신고 전에 분리과세 신청을 해야 하니 참고하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 배당락일 전에 주식을 사야만 배당금을 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 배당락일 전일(즉, 배당기준일)에 주식을 보유하고 있어야 배당금을 받을 수 있어요. 배당락일 당일부터는 권리가 없으니 투자 계획 세울 때 반드시 확인하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&quot; src=&quot;https://images.pexels.com/photos/8358041/pexels-photo-8358041.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;배당주 투자 처음 시작하면서 알게 된 것들 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;배당주 투자 처음 시작하면서 알게 된 것들 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;배당주 투자는 큰돈을 벌기보단 안정적이고 꾸준한 현금흐름을 만드는 데 좋더라고요. 2026년 변경된 세법과 절차를 잘 이해해 놓으면 불필요한 세금 부담이나 신고 누락 없이 안정적으로 투자할 수 있으니, 꼭 이 부분들을 챙기시길 추천해요. 다음번엔 배당주 종목 선택 기준과 배당주 투자 포트폴리오 구성법에 대해 한 번 이야기해볼게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;2026년 배당소득 기본공제는 어떻게 적용받나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;연간 배당소득이 250만원까지는 과세되지 않으니, 배당 받은 총액을 국세청 홈택스에 신고할 때 자동으로 공제가 반영돼요. 다만 분리과세를 원할 경우, 별도로 종합소득세 신고 전에 분리과세 신청을 해야 하니 참고하세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;배당락일 전에 주식을 사야만 배당금을 받을 수 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 배당락일 전일(즉, 배당기준일)에 주식을 보유하고 있어야 배당금을 받을 수 있어요. 배당락일 당일부터는 권리가 없으니 투자 계획 세울 때 반드시 확인하세요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/285&quot;&gt;국민건강검진 이상 소견 나왔을 때 이렇게 후속 조치하면 됩니다&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/284&quot;&gt;어린이집 보육료 지원 신청 직접 해봤더니 2026년 달라진 점이 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/283&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년세법</category>
      <category>배당소득세</category>
      <category>배당주</category>
      <category>절세팁</category>
      <category>투자초보</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/286</guid>
      <comments>https://mozzi-devlog.tistory.com/286#entry286comment</comments>
      <pubDate>Sat, 27 Jun 2026 18:39:11 +0900</pubDate>
    </item>
    <item>
      <title>국민건강검진 이상 소견 나왔을 때 이렇게 후속 조치하면 됩니다</title>
      <link>https://mozzi-devlog.tistory.com/285</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 국민건강검진 결과 이상 소견이 나왔을 때 당황했거든요. 어디서부터 어떻게 시작해야 할지 막막해서 한참 인터넷 뒤지고 상담도 받으면서 겨우 절차를 파악했어요. 2026년 기준으로 최신 절차와 함께 직접 제가 순서대로 따라 했던 과정을 자세히 알려드릴게요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 국민건강검진 후 이상 소견 알림을 받았을 때, 후속 조치를 어떻게 신청하고 준비하는지 그림처럼 단계별로 풀어드릴 테니까요. 어느 병원 가야 하는지, 비용은 얼마나 드는지, 건강보험 적용 여부 등 자주 궁금해하는 부분도 꼼꼼하게 짚어 보겠습니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&quot; src=&quot;https://images.pexels.com/photos/13072974/pexels-photo-13072974.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;국민건강검진 이상 소견 확인 후 어디서부터 시작했나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 제가 국민건강보험공단 건강검진 홈페이지에서 이상 소견 결과 알림을 받았을 때, 먼저 로그인 후 결과 상세 화면부터 꼼꼼히 봤어요. 2026년부터는 네이버 인증서나 카카오 인증서도 바로 연동이 되더라고요. 덕분에 별도 공인인증서 없이 간편히 진입할 수 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;결과 상세 화면에는 &amp;lsquo;추가 검사 권고&amp;rsquo; 혹은 &amp;lsquo;확인 요망&amp;rsquo;이라는 문구가 명확하게 뜨는데, 이게 바로 후속 조치가 필요한 소견이에요. 제 경우에는 간 수치 비정상으로 &amp;lsquo;정밀검사 권고&amp;rsquo;가 나왔어요. 이때부터 바로 다음 단계 준비를 시작했죠.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;접속 경로&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;건강보험공단 홈페이지나 모바일 앱 (네이버&amp;middot;카카오 인증서 지원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;로그인&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;주민등록번호, 인증서 혹은 간편 인증 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;결과 확인 항목&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;이상 소견 여부 및 후속 조치 권고 문구&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;후속 조치로 정밀검사 예약 및 신청 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 많이들 헷갈리는데, 건강검진 후속 조치가 자동으로 병원 예약까지 연결되는 게 아니더라고요. 제가 직접 가까운 지정 검진 병원을 찾아서 전화하거나 방문 예약을 해야 했어요. 2026년에는 국민건강보험공단 사이트 내 &amp;lsquo;건강검진 follow-up&amp;rsquo; 페이지가 새로 개선되어 주소, 전화번호, 검진 가능 날짜를 직접 확인하고 예약할 수 있게 되었는데요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 쓴 순서는 이랬어요: ① 공단 홈페이지에서 이상 소견 결과 확인 &amp;rarr; ② &amp;lsquo;후속 조치 병원 조회&amp;rsquo; 메뉴 클릭 &amp;rarr; ③ 내 주변 지정 병원 리스트 확인 &amp;rarr; ④ 전화로 예약 상담 &amp;rarr; ⑤ 예약 날짜 확정 후 방문. 이렇게 해야 하더라고요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7904425/pexels-photo-7904425.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;비용 처리와 보험 적용, 이 부분에서 많이들 틀립니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많은 분들이 후속 정밀검사 비용이 무료일 거라 생각하는데 일부는 보험 적용이 되고 일부는 본인 부담이 있어요. 예를 들어 혈액검사나 초음파는 건강보험 적용이 되는데 내시경이나 MRI 같은 고난이도 장비 검사 시엔 20~30만 원 본인 부담이 들 수도 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저 같은 경우 간 기능 추가 검사로 초음파는 보험 적용되어 5,000원 정도 부담했지만, 간 조직검사까지 권고받아 약 25만 원을 직접 냈어요. 이 부분은 병원마다 조금씩 다르니 예약 전 꼭 비용 문의해보는 게 좋아요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;검사 항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;보험 적용 여부&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;본인 부담금(예시)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;혈액검사&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;대부분 적용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 5,000원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;복부 초음파&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;적용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 5,000~10,000원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;내시경, MRI&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;부분 적용 혹은 미적용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;20~30만원 이상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 후속 조치 관리하며 건강 챙겼어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;후속 검사 결과에 따라 추가 상담이나 치료가 필요한 경우도 있어서 저는 검사 당시부터 받은 &amp;lsquo;건강관리 수첩&amp;rsquo;을 잘 활용했어요. 여기에 검진 결과, 상담 내용, 치료 계획을 단계별로 기록해서 다음 방문 시 참고하니까 훨씬 편하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 후속 조치 후 6개월에서 1년 간격으로 다시 건강검진을 예약하는 것도 잊지 않았어요. 2026년 기준 국민건강검진은 2년에 한 번 무료지만, 이상 소견 시에는 1년 만에 재검이 가능하니까요. 다음 검진 예약 방법은 공단 홈페이지 아래 &amp;lsquo;재검 예약&amp;rsquo; 메뉴에서 간단하게 했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보는 질문들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 이상 소견 후 정밀검사를 꼭 받아야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 이상 소견은 신체 내에 건강 이상 신호일 수 있으니 꼭 권고된 경우에는 정밀검사를 받는 게 좋아요. 2026년 건강검진 통계에 따르면 정밀검사 후 조기 치료를 시작한 사례가 35% 이상으로, 결과 악화 방지에 큰 역할을 했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 후속 검사 예약은 온라인으로만 가능한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년부터는 온라인 예약 시스템이 많이 개선되어 대부분 가능하지만, 병원에 따라 전화 예약만 받는 경우도 있습니다. 꼭 해당 병원 안내를 확인하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7163956/pexels-photo-7163956.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;국민건강검진 결과 이상 소견 나왔을 때 후속 조치 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 국민건강검진 이상 소견 후속 조치 절차를 제가 직접 해본 경험을 바탕으로 단계별로 정리해 봤어요. 공단 홈페이지 로그인부터 병원 예약, 비용 확인, 재검 예약까지 한 번에 챙기면 생각보다 어렵지 않거든요. 다음에는 후속 치료비용 절감 팁이나 각종 건강보험 지원 조건에 대해서도 알려드릴게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;이상 소견 후 정밀검사를 꼭 받아야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;이상 소견은 신체 내에 건강 이상 신호일 수 있으니 꼭 권고된 경우에는 정밀검사를 받는 게 좋아요. 2026년 건강검진 통계에 따르면 정밀검사 후 조기 치료를 시작한 사례가 35% 이상으로, 결과 악화 방지에 큰 역할을 했어요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;후속 검사 예약은 온라인으로만 가능한가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;2026년부터는 온라인 예약 시스템이 많이 개선되어 대부분 가능하지만, 병원에 따라 전화 예약만 받는 경우도 있습니다. 꼭 해당 병원 안내를 확인하세요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/284&quot;&gt;어린이집 보육료 지원 신청 직접 해봤더니 2026년 달라진 점이 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/283&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/282&quot;&gt;기초연금 부모님 신청 직접 도와드린 솔직한 후기와 팁&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>건강보험</category>
      <category>국민건강검진</category>
      <category>이상소견</category>
      <category>정밀검사</category>
      <category>후속조치</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/285</guid>
      <comments>https://mozzi-devlog.tistory.com/285#entry285comment</comments>
      <pubDate>Sat, 27 Jun 2026 15:47:18 +0900</pubDate>
    </item>
    <item>
      <title>어린이집 보육료 지원 신청 직접 해봤더니 2026년 달라진 점이 있었어요</title>
      <link>https://mozzi-devlog.tistory.com/284</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 어린이집 보육료 지원 신청을 할 때 뭐가 이렇게 복잡한지 몰라서 한참 헤맸거든요. 특히 2026년부터 지원 기준과 절차가 약간 바뀌었다고 해서 더 헷갈렸어요. 작년이랑 달라진 부분이 있어서 신청 전에 꼭 알아보고 준비하는 게 훨씬 수월하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년에 어린이집 보육료 지원 신청할 때 실제로 제가 겪은 과정을 중심으로, 놓치기 쉬운 변경점과 신청 팁까지 차근차근 설명해볼게요. 신청 준비부터 서류, 계산법, 그리고 주의할 점까지 모두 다루니까 끝까지 읽으면 복잡한 신청 절차가 훨씬 편해질 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 어린이집 보육료 지원 기준, 작년과 이렇게 달라졌어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈렸는데, 2026년부터 정부가 보육료 지원 기준을 더 세분화하고 소득 구간별 지원 금액을 조금 조정했어요. 작년까지는 소득 기준이 단순 7단계로 나누어진 데 반해, 올해는 9단계로 확대되면서 받는 지원금액이 조금씩 달라졌더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 작년에는 가구 소득이 중간 구간인 3단계에 속했으면 한 가지 기준으로 지원받았는데, 올해부터는 그 구간이 쪼개져서 더 상세한 금액이 책정돼요. 특히 맞벌이 가구와 한부모 가구 등 가족 형태별 지원액이 더 명확해진 점도 바뀐 부분 중 하나예요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 지원 기준&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 변경 기준&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;소득 구간 수&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;7단계&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;9단계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최고 지원율&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;전액 지원(100%)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;전액 지원(100%) 동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;맞벌이 가구 특별 지원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;제한적 적용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;추가 지원액 명확화 및 확대&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028722/pexels-photo-32028722.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;어린이집 보육료 지원 신청 직접 해본 후기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;직접 해본 어린이집 보육료 지원 신청 절차, 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 신청 자체는 크게 어렵지 않은데, 2026년부터는 온라인 신청 시스템도 업데이트되면서 입력해야 하는 항목과 첨부서류가 조금 달라졌어요. 저는 주민센터 방문 대신 정부24 사이트에서 신청했는데요, 먼저 회원 가입 후 &amp;lsquo;복지로&amp;rsquo; 또는 &amp;lsquo;정부24&amp;rsquo;에서 &amp;lsquo;어린이집 보육료 지원&amp;rsquo; 메뉴를 찾으시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;신청 단계는 크게 세 가지로 나뉘어요. 첫째, 기본 정보 입력(가구 소득, 가족 구성원 등), 둘째, 관련 증빙 서류 제출, 셋째, 보육료 지원 대상 확인 및 결과 통보 받기예요. 저는 소득 증빙으로 월급 명세서와 건강보험료 납부 확인서를 함께 제출했는데, 2026년부터는 건강보험 부과 금액 기준으로 소득을 판단한다고 하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 막혔던 포인트는 증빙서류 제출 시점이었는데, 서류 제출 후 결과 확인까지 보통 7~10일 정도 걸리니 여유 있게 신청하시는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 작성했던 체크리스트도 참고하세요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;맞벌이 여부 및 가족 구성원 정보 정확히 입력하기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;건강보험료 납부 영수증, 월급 명세서 등 소득 증빙서류 준비&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;증빙서류 제출 시점과 결과 통보 기간 기억해두기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;온라인 신청 후에도 주민센터에 문의하면 진행 상황 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680684/pexels-photo-31680684.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;어린이집 보육료 지원 신청 직접 해본 후기 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하세요, 이런 점 꼭 주의하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰라서 시간을 낭비했는데, 어린이집 보육료 지원 신청할 때 중요한 건 &amp;lsquo;가구 소득 산정 기준&amp;rsquo;이에요. 2026년부터는 건강보험 부과 금액으로 가구 소득을 판단하는데, 이게 월 급여 총액과는 다르거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 맞벌이 부부가 각각 보험료를 납부하는 경우, 두 분 보험료를 합산해서 가구 소득을 산정하니까 한 사람만 내는 보험료로 생각하면 안 돼요. 그리고 사업자 등록증이 있거나 프리랜서인 경우, 소득 신고 방식에 따라서 지원 대상에서 제외되거나 금액이 줄어들 수 있으니 확인해 보셔야 하고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 신청 시 제출하는 서류는 가끔 어린이집마다 요구사항이 다를 수 있어서 &amp;lsquo;어린이집 보육료 지원 신청서&amp;rsquo;와 &amp;lsquo;가구 소득 확인서&amp;rsquo; 등 필수 서류 외에도 별도 서류 요청이 있는지 꼭 문의해보는 게 좋아요. 저도 여기서 빨리 알았더라면 더 편했을 것 같아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680687/pexels-photo-31680687.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;어린이집 보육료 지원 신청 직접 해본 후기 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;어린이집 보육료 지원 신청 직접 해본 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이런 추가 팁도 써봤어요, 신청 절차가 훨씬 수월해졌거든요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제일 좋은 건 시간을 넉넉히 두고 신청하는 건데요, 2026년부터는 지원금액이 조금씩 조정되면서 매달 어린이집 보육료를 내기 전에 미리 지원 신청을 완료해야만 자동으로 지원금 할인도 받을 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 저는 신청하면서 정부24 앱 설치해서 알림이 오도록 설정했는데, 주민센터나 기관에서 연락할 때 빠르게 대응할 수 있어 좋았어요. 보육료 지원은 최대 24개월까지 받을 수 있으니 아이 연령과 지원 기간도 미리 체크해 두는 게 필요하고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;절약 효과도 꽤 큰데요, 2026년 기준으로 제가 지원받은 금액은 한 달에 약 20만 원 정도였어요. 연간 240만 원 이상이니까 생활비 부담이 한결 가벼워졌죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년 어린이집 보육료 지원 신청 시 소득 증빙은 반드시 어떤 서류를 제출해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년에는 건강보험료 부과 금액을 기준으로 소득을 산정하기 때문에, 반드시 최근 3개월 내 건강보험료 납부 확인서 또는 납부 영수증을 제출해야 해요. 추가로 월급 명세서나 사업소득 증빙 서류가 있으면 함께 제출하면 심사가 빠르게 진행됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 맞벌이 가구는 보육료 지원 신청 시 어떤 점을 신경 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 맞벌이 가구는 부부 양쪽의 건강보험료 납부 내역을 모두 제출해야 하며, 2026년부터는 추가 지원금액 산정 기준이 강화되어 더 높은 수준의 지원을 받을 수 있습니다. 단, 제출 서류가 누락되면 지원금이 감액될 수 있으니 주의하셔야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에 저도 이 부분에서 막혔는데, 꼼꼼히 준비하고 온라인 신청하면서 주민센터 전화 문의까지 병행하니 훨씬 빨리 처리가 됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;어린이집 보육료 지원 신청은 절차가 복잡해 보여도, 2026년 기준 변경된 내용을 미리 알고 준비하면 생각보다 훨씬 쉽게 할 수 있어요. 지원금액도 적지 않으니, 혹시 아직 못 하신 분들은 이번 달 안으로 꼭 신청해보시는 걸 추천해요. 다음번에는 어린이집 선택 시 고려할 점과 정부 지원과 연계한 다른 혜택도 간단히 알려드릴게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;2026년 어린이집 보육료 지원 신청 시 소득 증빙은 반드시 어떤 서류를 제출해야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;2026년에는 건강보험료 부과 금액을 기준으로 소득을 산정하기 때문에, 반드시 최근 3개월 내 건강보험료 납부 확인서 또는 납부 영수증을 제출해야 해요. 추가로 월급 명세서나 사업소득 증빙 서류가 있으면 함께 제출하면 심사가 빠르게 진행됩니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;맞벌이 가구는 보육료 지원 신청 시 어떤 점을 신경 써야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;맞벌이 가구는 부부 양쪽의 건강보험료 납부 내역을 모두 제출해야 하며, 2026년부터는 추가 지원금액 산정 기준이 강화되어 더 높은 수준의 지원을 받을 수 있습니다. 단, 제출 서류가 누락되면 지원금이 감액될 수 있으니 주의하셔야 해요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/283&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/282&quot;&gt;기초연금 부모님 신청 직접 도와드린 솔직한 후기와 팁&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/281&quot;&gt;자동차 정기검사 받기 전 2026년 바뀐 점과 꼭 알아야 할 사항&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년변경사항</category>
      <category>보육료지원</category>
      <category>복지신청후기</category>
      <category>생활비절약</category>
      <category>어린이집보육료</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/284</guid>
      <comments>https://mozzi-devlog.tistory.com/284#entry284comment</comments>
      <pubDate>Sat, 27 Jun 2026 10:35:35 +0900</pubDate>
    </item>
    <item>
      <title>실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요</title>
      <link>https://mozzi-devlog.tistory.com/283</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에는 실손보험 청구가 이렇게 복잡할 줄 몰랐어요. 2026년 기준 최신 정보라곤 해도, 막상 직접 해보니까 놓친 서류가 많더라고요. 특히, 제가 경험한 과정과 다른 사람들의 사연, 그리고 보험사별 청구 방법 차이까지 비교하니 한결 이해가 쉬웠습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 제가 직접 실손보험 청구를 해보면서 겪은 대표적인 실수와, 이를 피하는 방법을 상세히 다뤄볼게요. 나아가 A보험사와 B보험사 청구절차 차이, 그리고 다른 분들이 종종 놓치는 서류까지 한눈에 비교해봅니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실손보험 청구, 이 조건부터 꼭 확인하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 헷갈렸는데요. 실손보험 청구 전 가장 중요한 건 가입한 상품의 보장 범위와 청구 가능 기간을 정확히 아는 겁니다. 2026년 현재 대부분의 실손보험은 사고 또는 치료받은 날로부터 &lt;b&gt;3년 이내 청구&lt;/b&gt;가 가능해요. 하지만 보험사마다 정책이 조금씩 달라서 청구 기간이 &lt;b&gt;1년으로 제한&lt;/b&gt;되기도 하니 꼭 확인해야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 저는 의료비 중 보험금으로 보장받는 항목과 그렇지 않은 부분을 잘 몰라 몇 번 재청구를 해야 했는데요, 예를 들어 비급여 항목이나 선택진료비 등은 일부 상품에서 청구가 거절될 수 있으니 가입한 약관의 제외항목을 꼼꼼히 읽는 게 중요했어요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;A보험사&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;B보험사&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;내 경험&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;청구 가능 기간&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;3년 이내 청구 가능&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1년 이내 청구 필요&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;초반에 기간 착각해 2건 재청구함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;비급여 항목 청구 가능 여부&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;부분 청구 가능&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;비급여 제한 많음&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;비급여 포함해서 일부 거절 경험&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;청구 방법&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;홈페이지 및 모바일 앱&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;모바일 앱 위주&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;모바일로 신청했는데 첨부서류 미비로 재요청받음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/6129655/pexels-photo-6129655.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실손보험 청구 절차, 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 막힐 수 있는 게 서류 준비와 제출 방법이었어요. 저는 먼저 병원에서 진료비 영수증과 명세서를 꼼꼼히 챙겼는데, 특히 실손보험에서는 &lt;b&gt;진료비 세부 내역서(명세서)&lt;/b&gt;가 꼭 필요해요. 영수증만 제출하면 보험사가 비용 내역을 정확히 판단하기 어려워 요청을 다시 받는 경우가 많더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음, 보험사 홈페이지나 모바일 앱에서 청구서를 작성하고, 요구하는 서류를 첨부합니다. 저는 A보험사 모바일 앱으로 진행했는데, 사진 첨부만으로 가능해서 편했어요. 반면 B보험사는 홈페이지를 통한 서류 우편 접수도 병행 중인데, 그 과정에서 서류 누락이나 인착 오류가 있었던 사례도 들었습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 청구 완료 후 &lt;b&gt;평균 10일에서 14일&lt;/b&gt; 내에 보험금 지급 결과가 나오는데, 저도 첫 청구 때는 14일 걸렸어요. 이후 두 번째부터는 10일 내 빠르게 입금됐습니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/40568/medical-appointment-doctor-healthcare-40568.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;놓치기 쉬운 서류와 주의해야 할 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 헷갈려하는 게 바로 '진료비 명세서'와 '처방전 사본' 차이에요. 저도 처음엔 처방전 사본만 제출했다가 보험사에서 보완 요청을 받았죠. 꼭 병원에서 정확한 명세서를 받아서 제출해야 비용 심사가 원활하니, 병원 방문 시 미리 요청하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 제가 경험한 바로는, &lt;b&gt;진료 날짜와 보험 청구 날짜가 틀리지 않도록 주의&lt;/b&gt;해야 합니다. 의외로 진료일이 아닌 청구일 기준으로 서류를 준비해 청구가 반려되는 경우가 많더라고요. 보험사마다 제출 서류 체크리스트를 미리 확인하는 습관도 도움이 됩니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&quot; src=&quot;https://images.pexels.com/photos/6129211/pexels-photo-6129211.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;실손보험 청구 방법 직접 해보니 놓친 서류가 있었어요 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;보험금 청구할 때 이 방법도 써보세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 했던 팁인데요, 진료받은 병원에서 &lt;b&gt;전자문서 발급 시스템&lt;/b&gt;을 이용하면 청구 서류를 훨씬 쉽게 받을 수 있어요. 특히 2026년부터는 건강보험공단과 연계된 전자문서로 자동 제출 가능한 보험사가 증가하고 있어 이 방법이 점점 보편화되고 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 보험금 청구 후 진행 상황을 모바일 앱에서 실시간으로 확인할 수 있는 보험사가 늘어나면서, 문의 전화를 줄이고 빠른 대응도 가능해졌습니다. 저도 이 기능 덕분에 청구 과정에서 불필요한 전화 문의를 하지 않아도 되어 편했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 실손보험 청구를 모바일 앱으로 하면 서류 제출은 어떻게 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 대부분의 보험사는 진료비 영수증과 명세서를 스마트폰 사진으로 촬영해 앱 내에 바로 첨부하는 방식을 지원해요. 2026년 기준 A보험사는 촬영 후 자동 인식 기능이 있어 제출서류가 정확한지 앱에서 바로 알려줍니다. 단, 사진이 흐리거나 일부 내용이 안 보이면 보완 요청이 오니 선명하게 촬영하는 게 중요해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 보험금 지급이 거절됐을 때 어떻게 대응해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 우선 거절 사유를 명확히 확인해야 하고, 납득이 안 되는 경우 보험사 고객센터에 재심사를 요청할 수 있어요. 제가 직접 경험한 바로는 서류 보완 요청을 정성껏 준비해 다시 제출하니 70% 이상 재승인 받았어요. 또한, 보험 가입 1년 차 이내라면 지급 거절률이 상대적으로 높은 경향이 있으니 청구 전에 약관을 꼭 다시 한번 체크하는 게 좋습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실손보험 청구는 생각보다 까다로운 과정이지만, 제가 겪은 시행착오를 참고하면 금방 익숙해질 수 있습니다. 놓치기 쉬운 서류를 꼼꼼히 챙기고, 청구 기간과 보장 항목을 정확히 확인하는 게 핵심이에요. 다음번엔 실손보험과 함께 활용하면 좋은 건강검진 할인 혜택이나 의료비 절감 팁도 정리해볼 생각입니다.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;실손보험 청구를 모바일 앱으로 하면 서류 제출은 어떻게 해야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;대부분의 보험사는 진료비 영수증과 명세서를 스마트폰 사진으로 촬영해 앱 내에 바로 첨부하는 방식을 지원해요. 2026년 기준 A보험사는 촬영 후 자동 인식 기능이 있어 제출서류가 정확한지 앱에서 바로 알려줍니다. 단, 사진이 흐리거나 일부 내용이 안 보이면 보완 요청이 오니 선명하게 촬영하는 게 중요해요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;보험금 지급이 거절됐을 때 어떻게 대응해야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;우선 거절 사유를 명확히 확인해야 하고, 납득이 안 되는 경우 보험사 고객센터에 재심사를 요청할 수 있어요. 제가 직접 경험한 바로는 서류 보완 요청을 정성껏 준비해 다시 제출하니 70% 이상 재승인 받았어요. 또한, 보험 가입 1년 차 이내라면 지급 거절률이 상대적으로 높은 경향이 있으니 청구 전에 약관을 꼭 다시 한번 체크하는 게 좋습니다.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/282&quot;&gt;기초연금 부모님 신청 직접 도와드린 솔직한 후기와 팁&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/281&quot;&gt;자동차 정기검사 받기 전 2026년 바뀐 점과 꼭 알아야 할 사항&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/280&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 2026년 최신 정보&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>금융팁</category>
      <category>보험서류</category>
      <category>보험청구</category>
      <category>생활정보</category>
      <category>실손보험</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/283</guid>
      <comments>https://mozzi-devlog.tistory.com/283#entry283comment</comments>
      <pubDate>Fri, 26 Jun 2026 19:06:48 +0900</pubDate>
    </item>
    <item>
      <title>기초연금 부모님 신청 직접 도와드린 솔직한 후기와 팁</title>
      <link>https://mozzi-devlog.tistory.com/282</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 &amp;lsquo;기초연금&amp;rsquo;이라는 말 자체가 생소했거든요. 부모님께서 65세를 넘기신 후에 연금 신청 이야기가 나왔을 때 막막했어요. 어떤 서류가 필요한지, 신청 절차는 어떻게 되는지 하나도 몰라서 혼란스러웠는데 직접 도와드리면서 느낀 점 많아서 기록해 봅니다. 특히 2026년 최신 기준까지 반영해서, 저처럼 처음 시작하는 분들께 꼭 도움이 되었으면 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 기초연금이 무엇인지부터 시작해서 실제 신청 과정, 주의할 점, 그리고 신청 후 연금액 계산법까지 자세히 알려드릴게요. 저처럼 용어부터 헷갈리는 분도 쭉 읽다 보면 자연스럽게 이해하고 자신 있게 신청할 수 있을 겁니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/3831181/pexels-photo-3831181.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;기초연금 부모님 신청 직접 도와드린 후기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;기초연금, 이게 뭔지부터 알면 도움이 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 기초지만 가장 헷갈리기 쉬운데요, 기초연금은 만 65세 이상 어르신들에게 국가에서 생활비를 지원하는 제도예요. 2026년 기준으로는 최대 &lt;b&gt;월 337,000원&lt;/b&gt;까지 받을 수 있는데, 이 금액은 부부 여부나 소득에 따라 달라진답니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 &amp;ldquo;기초연금과 국민연금은 다르다&amp;rdquo;는 사실부터 헷갈렸는데요, 기초연금은 별도의 가입 없이 조건만 맞으면 신청하는 별도의 복지 서비스이고, 국민연금은 근로자가 일정 기간 납부해야 받는 보험 성격이에요. 그래서 부모님이 국민연금을 많이 못 내셨거나 안 받으셔도 기초연금은 신청 가능하답니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;기초연금&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;만 65세 이상 어르신에게 국가에서 생활비를 지원하는 복지 혜택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;국민연금&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;근로 기간 동안 납부 후 노후에 받는 보험 성격의 연금&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;2026년 최대 금액&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;월 337,000원&lt;/b&gt; (단독 가구 기준, 소득과 재산에 따라 다름)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;기초연금 부모님 신청, 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직접 도와드릴 때는 크게 4단계로 나눴는데요, 단계별로 막히는 부분을 알려드릴게요.&lt;/p&gt;
&lt;ol style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;대상자 확인: 부모님 나이가 만 65세 이상인지, 소득과 재산이 기초연금 지급 기준에 맞는지 먼저 확인했어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;필요 서류 준비: 신분증, 주민등록등본, 소득 및 재산 관련 서류(예: 금융거래내역증명서 등)를 챙겼고, 저도 이때 어떤 서류가 필요한지 몰라서 주민센터에 직접 전화해서 물어봤어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;신청 접수: 온라인(복지로 사이트)이나 거주지 주민센터 방문 신청이 있는데 저는 부모님과 함께 주민센터에 직접 갔습니다. 직원분이 상세히 설명해주셔서 차근차근 진행할 수 있었어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;결과 통보 및 연금 수령: 보통 신청 후 20일 이내에 결과가 나오고, 계좌에 매월 연금이 입금됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 2026년에는 복지로 사이트의 보안 인증이 강화되어 간편 인증을 꼭 준비해야 하는데, 이 부분에서 막히는 분들이 많더라고요. 부모님께서는 워낙 인터넷 사용이 익숙하지 않으셔서 제가 도와드렸습니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/12955650/pexels-photo-12955650.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;기초연금 부모님 신청 직접 도와드린 후기 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈리세요, 꼭 주의하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 기초연금은 단독 가구인지 부부 가구인지에 따라 소득 기준이 다릅니다. 부모님이 부부라도 둘 중 한 분이 기초연금을 받으면 다른 한 분의 소득도 합산해서 계산해야 하거든요. 예를 들어 연 소득 합계가 약 &lt;b&gt;2,400만원&lt;/b&gt; 이하인 경우 수급 가능성이 높은데, 이 기준을 넘으면 연금액이 줄어듭니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 재산 기준도 있어서 부모님 명의의 부동산, 자동차 등도 평가에 포함되는데 이 부분에서 혼란이 많았어요. 저희 경우는 부모님 소유 부동산이 있어 서류 준비를 좀 더 꼼꼼히 했습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 신청할 때 가끔 소득 신고가 잘못되어서 재산 조사 후 감액 또는 탈락되는 사례가 있으니, 소득과 재산 관련 서류는 반드시 정확하게 제출하는 게 중요해요. 저도 부모님 통장 내역과 금융 거래 내역을 꼼꼼히 챙겨서 제출했답니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신청 후 연금액은 어떻게 계산되는지 저는 이렇게 확인했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;신청 완료 후 가장 궁금한 게 &amp;lsquo;내 부모님 연금액은 얼마나 될까?&amp;rsquo; 인데, 공식적으로는 기초연금 기준액에서 소득과 재산에 따라 차감액이 계산되어 결정돼요. 2026년 기준으로 단독 가구 최대 월 337,000원, 부부 가구 최대 월 541,000원이 지급됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;부모님 소득이 적을수록 가까운 최대 금액을 받을 수 있는데, 예컨대 부부 합산 소득이 월 200만원 이하라면 거의 최대치에 근접해요. 그리고 재산이 많으면 추가 차감되는 형식입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 연금 계산이 복잡해서 보건복지부 공식 홈페이지의 기초연금 계산기를 활용했는데, 신청 전에 미리 예상 금액을 파악할 수 있어서 좋더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신청하며 자주 받았던 질문들을 정리했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 부모님 명의 통장이 없는데도 신청할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 통장 대신 부모님이 받으실 은행 계좌를 지정할 수 있어요. 다만 주민센터 방문 시 본인 확인과 계좌 인증이 필요하니 꼭 부모님과 함께 가시는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 기초연금 신청 후 언제부터 지급되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 일반적으로 신청 후 약 20일 이내에 지급 결정이 나고, 다음달부터 연금액이 입금됩니다. 예를 들어 3월 10일에 신청하면 4월부터 연금을 받게 되는 식이에요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/9710822/pexels-photo-9710822.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;기초연금 부모님 신청 직접 도와드린 후기 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;기초연금 부모님 신청 직접 도와드린 후기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;기초연금은 부모님 생활비에 큰 도움이 되는 제도여서 꼭 필요하다면 조급해하지 말고 차근차근 준비하는 게 중요하다는 걸 다시 한 번 느꼈어요. 저도 처음에는 막막했지만 서류 하나하나 챙기고 주민센터 직원분 도움도 받으면서 금세 해결됐답니다. 다음에는 국민연금과의 연계 혜택이나 더 알아두면 좋은 복지 서비스 정보도 함께 살펴보면 좋겠네요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;부모님 명의 통장이 없는데도 신청할 수 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 통장 대신 부모님이 받으실 은행 계좌를 지정할 수 있어요. 다만 주민센터 방문 시 본인 확인과 계좌 인증이 필요하니 꼭 부모님과 함께 가시는 게 좋아요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;기초연금 신청 후 언제부터 지급되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;일반적으로 신청 후 약 20일 이내에 지급 결정이 나고, 다음달부터 연금액이 입금됩니다. 예를 들어 3월 10일에 신청하면 4월부터 연금을 받게 되는 식이에요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/281&quot;&gt;자동차 정기검사 받기 전 2026년 바뀐 점과 꼭 알아야 할 사항&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/280&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 2026년 최신 정보&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/279&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 어느 정도일까&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년연금</category>
      <category>기초연금</category>
      <category>노인복지</category>
      <category>부모님신청</category>
      <category>생활복지</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/282</guid>
      <comments>https://mozzi-devlog.tistory.com/282#entry282comment</comments>
      <pubDate>Fri, 26 Jun 2026 13:30:02 +0900</pubDate>
    </item>
    <item>
      <title>자동차 정기검사 받기 전 2026년 바뀐 점과 꼭 알아야 할 사항</title>
      <link>https://mozzi-devlog.tistory.com/281</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;자동차 정기검사를 받으려고 보니 작년과 좀 달라진 부분이 있어서 저도 깜짝 놀랐어요. 저도 처음 이걸 알아볼 때 2026년 기준으로 바뀐 검사 절차와 비용, 준비물 정보가 여기저기 분산돼 있어서 헷갈리더라고요. 자동차 정기검사 받기 전에 꼭 알아두면 좋은 점들을 실제 경험을 토대로 정리해 봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서 2026년부터 달라진 정기검사 기준과 신청 방법, 검사 비용과 벌칙 사항, 그리고 검사 준비물과 주의할 점을 차근차근 알려드릴게요. 덕분에 저처럼 미리 준비 못 해서 당황하는 일이 없을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년부터 변경된 자동차 정기검사 조건, 이 부분 꼭 확인하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 중요해요. 2026년부터 정기검사 대상 차량이 조금 더 세분화됐고, 검사 주기도 일부 변동이 있었거든요. 대표적으로 경유차의 배출가스 검사 기준이 강화됐고, 검사 유효기간이 일부 차종에 대해 6개월 단축됐어요. 이전에는 보통 2년마다 검사받았는데, 이제는 배출가스가 엄격해진 일부 차종은 1.5년마다 받아야 합니다. 이는 2025년 12월 이후 최초 등록 차량부터 적용된 점 참고하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 2026년부터는 LPG 차량도 조금 더 까다로워졌는데, 특히 3년 이상 된 LPG 승용차는 반드시 정기검사 때 가스 누출 여부와 배출가스 기준을 철저히 검사받아야 해요. 작년에는 이런 부분이 비교적 관대했는데, 올해부터는 미검사 시 과태료가 10만 원에서 15만 원으로 올라서 주의해야 합니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;변경 내용(2026년 기준)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;검사 주기&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;경유차 일부 6개월 단축, LPG 3년 이상 차량 검사 강화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;배출가스 기준&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;경유차&amp;middot;LPG차 모두 배출허용 기준 강화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;과태료&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;미검사 시 과태료 10만&amp;rarr;15만 원 인상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028686/pexels-photo-32028686.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;정기검사 절차, 이렇게 하면 시간과 비용 아껴요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 막히는 분들이 많더라고요. 저도 처음엔 어디서부터 시작해야 할지 헷갈렸거든요. 2026년 현재 정기검사 예약 방법부터 검사 당일 준비물, 비용 결제까지 차근차근 알려드릴게요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;첫째, 인터넷 자동차민원 대국민포털(http://www.ecar.go.kr) 또는 정부24 앱에서 검사 예약을 꼭 해야 해요. 무작정 검사소에 가면 오래 기다려야 하니까 예약은 필수입니다. 예약은 검사 희망일 기준 15일 전부터 가능하며, 조기 마감되니 최소 1주일 전에는 예약하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;둘째, 검사 당일에는 자동차 등록증과 보험 증서, 신분증, 검사 예약 확인서를 꼭 지참하세요. 그리고 2026년 달라진 점 중 하나는 자동차 키를 검사 직원에게 직접 전달하는 게 아니라 검사 전용 시스템에 차량 등록번호를 입력해서 무인 검사 기계로 진행하는 경우가 많아졌다는 점이에요. 저도 처음에 직원에게 키를 맡겨야 하나 헷갈렸는데, 이제는 무인 검사도 많으니 안내 표지판을 꼭 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 검사 비용인데요, 2026년 기준 일반 승용차는 기본 검사 비용이 35,000원이고, 배출가스 검사 별도 10,000원이 추가됩니다. 전기차나 하이브리드 차량은 배출가스 검사가 면제되니 참고하시고요. 만약 수리가 필요한 부분이 발견되면 재검사 비용으로 12,000원을 추가로 내야 하니 시간과 비용 낭비 없도록 사전에 간단한 차량 점검을 해두면 좋아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028722/pexels-photo-32028722.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자동차 정기검사 받으면서 저도 자주 헷갈렸던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 많은 분들이 헷갈리는 게 검사 유예기간과 과태료 부과 기준이에요. 2026년부터는 검사 만료일로부터 30일 이내에만 유예가 인정되는데, 그 전에 받으면 별도 문제 없고, 유예 기간이 지나면 바로 과태료가 부과됩니다. 작년에는 60일이었는데, 절반으로 줄어서 더 주의해야겠더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 차량 종류별로 정기검사 대상과 검사 항목이 다르다는 것도 미리 알고 있어야 해요. 예를 들면 1종 보통 면허로 운전하는 15인승 이하 승합차는 일반 승용차와 검사 기준이 약간 다르고, 화물차라면 무게에 따른 검사 주기와 항목이 또 달라집니다. 저도 내 차가 어느 분류인지 정확히 몰라서 인터넷 사이트에서 차대번호로 조회해 봤어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680684/pexels-photo-31680684.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;자동차 정기검사 받기 전 알아두면 좋은 점 정리 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;자동차 정기검사 받기 전 알아두면 좋은 점 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;차량 정기검사 완료하고도 꼭 챙겨야 할 꿀팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 정기검사 받고 나면 끝인 줄 알았는데, 검사 결과가 통과되어도 차량 관리 기록이 누적되니까 꼭 보관해 두는 게 좋아요. 저도 매년 검사 기록을 엑셀로 정리하는데, 이렇게 하면 다음 검사 때 이상 여부를 미리 짐작할 수 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나는 검사 예약을 못 했거나 시간이 급할 때 가까운 민간 자동차검사소를 이용하는 방법인데요. 대기 시간이 조금 더 길 수 있지만 2026년부터는 민간 검사소도 정기검사 권한이 확대되어 더 편리해졌어요. 비용도 공단 검사소와 비슷하거나 약간 저렴한 경우가 많으니 상황에 맞게 선택하는 것도 방법입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자동차 정기검사에 대해 자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 검사 기간이 지나면 바로 운행 정지인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 아니요. 검사 만료일 이후 30일 이내에는 &amp;lsquo;검사 유예기간&amp;rsquo;이 있어 이 기간 동안은 법적으로 운행이 가능합니다. 하지만 30일이 지나면 과태료 부과와 함께 운행 정지가 될 수 있으니 꼭 기간 내에 받아야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 정기검사 비용에 자동차세나 보험료도 포함되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 아니요. 정기검사 비용은 검사 자체의 행정&amp;middot;기술 비용만 포함한 금액으로 자동차세, 보험료와는 별개입니다. 참고로 2026년 기준 검사비는 승용차 35,000원, 배출가스 검사 10,000원입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;자동차 정기검사 받기 전에 2026년 변경사항을 제대로 알고 준비하면 시간도 비용도 절약할 수 있더라고요. 특히 검사 주기의 변화와 강화된 배출가스 기준, 과태료 인상 부분이 핵심 포인트입니다. 다음에는 자동차 보험 할인 제도와 연계해서 검사 기록을 활용하는 방법에 대해 정리해 볼게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;검사 기간이 지나면 바로 운행 정지인가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;아니요. 검사 만료일 이후 30일 이내에는 ‘검사 유예기간’이 있어 이 기간 동안은 법적으로 운행이 가능합니다. 하지만 30일이 지나면 과태료 부과와 함께 운행 정지가 될 수 있으니 꼭 기간 내에 받아야 합니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;정기검사 비용에 자동차세나 보험료도 포함되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;아니요. 정기검사 비용은 검사 자체의 행정·기술 비용만 포함한 금액으로 자동차세, 보험료와는 별개입니다. 참고로 2026년 기준 검사비는 승용차 35,000원, 배출가스 검사 10,000원입니다.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/280&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 2026년 최신 정보&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/279&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 어느 정도일까&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/278&quot;&gt;미국주식 양도소득세 신고 직접 해보니 이 부분에서 꼭 막혔어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026변경사항</category>
      <category>검사예약방법</category>
      <category>배출가스검사</category>
      <category>자동차검사비용</category>
      <category>자동차정기검사</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/281</guid>
      <comments>https://mozzi-devlog.tistory.com/281#entry281comment</comments>
      <pubDate>Fri, 26 Jun 2026 10:23:28 +0900</pubDate>
    </item>
    <item>
      <title>가스요금 절약 직접 해보고 효과 본 방법 정리 2026년 최신 정보</title>
      <link>https://mozzi-devlog.tistory.com/280</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 가스요금을 절약하려고 이것저것 찾아보고 직접 신청해봤는데요, 생각보다 복잡하고 작년부터 달라진 점이 많아서 한눈에 정리된 정보가 없더라고요. 2026년 기준으로 바뀐 가스요금 체계와 절약 방법을 직접 경험한 내용을 중심으로 알려 드릴게요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서는 2026년부터 바뀐 가스요금 산정 기준, 절약 가능한 할인제도와 신청법, 그리고 절약 효과를 직접 계산해 본 사례까지 꼼꼼하게 다뤄볼 테니까요. 끝까지 읽으면 가스요금 부담을 실질적으로 줄이는 방법을 한 번에 알 수 있을 거예요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/19271573/pexels-photo-19271573.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 가스요금 산정 기준 이렇게 바뀌었어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리기 쉽거든요. 2026년부터 가스요금 단가가 기본요금과 사용량 요금으로 나뉘는데, 특히 기본요금 인상과 단계별 요금 체계가 크게 바뀌었어요. 예전에는 1단계, 2단계 구간별로 요금이 달랐는데, 올해부터는 1~3단계로 세분화되면서 1단계 기본요금이 3,300원에서 4,000원으로 올랐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사용량 구간별 단가도 오른 게 많아서, 예를 들어 1단계 (0~10㎥)는 ㎥당 1,210원에서 1,350원, 3단계 (30㎥ 초과)는 1,870원에서 2,100원으로 크게 상승했답니다. 이 때문에 무심코 사용량만 늘려도 요금이 급격히 오를 수 있으니 주의가 필요해요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;구간&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 단가 (원/㎥)&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 단가 (원/㎥)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1단계 (0~10㎥)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1,210&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1,350&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;2단계 (11~30㎥)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1,500&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1,670&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;3단계 (30㎥ 초과)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1,870&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;2,100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;기본요금&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;3,300원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;4,000원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가스요금 절약하려면 이렇게 해야 합니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 써보니까 가장 효과적인 방법은 기본적으로 세 가지였어요. &lt;b&gt;요금 할인 신청 - 절약형 요금제 변경 - 사용량 관리&lt;/b&gt; 세 가지를 모두 해보니 실제 지출이 확 줄었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 할인제도는 2026년에도 가스안전공사에서 제공하는 '복지할인'과 '계절별 할인', 그리고 올해 새로 생긴 '에너지 절감 장치 설치 할인'이 있어요. 저는 복지할인은 해당 안 됐지만 절감 장치 할인을 신청해봤고, 3개월 만에 월평균 8% 정도 절약되는 효과를 봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 절약형 요금제는 &amp;lsquo;계약종별 변경&amp;rsquo; 서비스를 통해 신청하는데, 올해 요금제 구조가 세분화되어서 본인의 월 사용량 패턴을 잘 파악한 뒤 가장 적합한 요금제로 옮겨야 해요. 저는 월 25㎥ 사용 가구라서 2단계 요금 중심의 절약형 요금제로 바꾸니까 기존 대비 월 5,000원 이상 절약됐습니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028686/pexels-photo-32028686.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하세요, 꼭 주의할 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 할인 신청을 하려고 고객센터에 문의하면 이전과 달리 본인 인증 절차가 강화돼서 약간 복잡해졌어요. 특히 2026년부터는 할인 혜택 신청 후 최소 3개월 이상 유지해야 해서, 한두 달만 써보고 바꾸면 오히려 손해 볼 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 요금제 변경은 매월 1회만 가능하니, 변경 시기를 잘 맞춰야 합니다. 또한 가스 사용량이 큰 폭으로 변동하면 계약종별이 자동으로 조정될 수도 있어서, 매달 내역을 꼼꼼히 확인하는 게 필수예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;더 효과 본 추가 비법, 절약 생활 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 가스요금을 아낄 때 단순히 할인이나 요금제 변경뿐 아니라, 실생활에서 가스 사용량을 줄이는 노력이 제일 많이 도움 됐다고 생각해요. 예를 들어, 겨울철 보일러 온도는 18도에서 20도로 소폭 높이고, 오후 11시부터 새벽 5시까지는 자동으로 온도를 낮춰 설정해서 한 달에 약 3~4㎥ 가스 사용량이 줄었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 가스레인지 사용 시 뚜껑 덮기, 냄비 크기에 맞는 버너 사용법을 실천하니까 요금이 확실히 다르게 나오더라고요. 이런 작은 습관 덕분에 매달 2,000원에서 3,000원 추가 절약 효과까지 경험했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년 가스요금 할인 신청은 어디서 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 대부분 지역의 가스요금 할인 신청은 한국가스공사 홈페이지나 고객센터를 통해 할 수 있어요. 2026년부터는 본인 인증 절차가 추가돼서 휴대전화 인증 또는 공동 인증서가 필요합니다. 할인 종류에 따라 제출 서류가 다르니 신청 전에 홈페이지에서 꼭 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 절약형 요금제 변경은 누가 신청 가능하고, 요금 차이는 얼마나 나나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 절약형 요금제는 주로 월 가스 사용량이 15~40㎥인 가구가 가장 효율적이에요. 2026년 기준으로 최대 약 10%까지 요금 절감 효과가 있고, 월 25㎥ 기준으로 매달 4,500원~5,500원 정도 저렴해질 수 있습니다. 단, 계약 변경 후 3개월 이상 유지해야 하니 신중히 결정해야 해요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028722/pexels-photo-32028722.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;가스요금 절약 직접 해보고 효과 본 방법 정리 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;가스요금 절약 직접 해보고 효과 본 방법 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가스요금 절약 방법은 단순히 한 가지를 고집하기보다 할인 신청, 요금제 변경, 그리고 사용량 관리까지 '세 박자'를 맞추는 게 실제 효과가 컸어요. 2026년부터 달라진 요금 체계와 신청 절차를 잘 이해하고 활용하면 월평균 1만 원 이상 절약도 가능하니까 저처럼 꼼꼼히 챙겨보시길 추천합니다. 다음에는 난방비 절감과 연계할 수 있는 에너지 절약 가전제품 구매 팁도 같이 공유할게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;2026년 가스요금 할인 신청은 어디서 어떻게 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;대부분 지역의 가스요금 할인 신청은 한국가스공사 홈페이지나 고객센터를 통해 할 수 있어요. 2026년부터는 본인 인증 절차가 추가돼서 휴대전화 인증 또는 공동 인증서가 필요합니다. 할인 종류에 따라 제출 서류가 다르니 신청 전에 홈페이지에서 꼭 확인하세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;절약형 요금제 변경은 누가 신청 가능하고, 요금 차이는 얼마나 나나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;절약형 요금제는 주로 월 가스 사용량이 15~40㎥인 가구가 가장 효율적이에요. 2026년 기준으로 최대 약 10%까지 요금 절감 효과가 있고, 월 25㎥ 기준으로 매달 4,500원~5,500원 정도 저렴해질 수 있습니다. 단, 계약 변경 후 3개월 이상 유지해야 하니 신중히 결정해야 해요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/279&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 어느 정도일까&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/278&quot;&gt;미국주식 양도소득세 신고 직접 해보니 이 부분에서 꼭 막혔어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/277&quot;&gt;호텔 멤버십 등급 올리고 받은 혜택, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년정보</category>
      <category>가스요금</category>
      <category>생활비절약</category>
      <category>요금할인</category>
      <category>절약방법</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/280</guid>
      <comments>https://mozzi-devlog.tistory.com/280#entry280comment</comments>
      <pubDate>Thu, 25 Jun 2026 18:47:31 +0900</pubDate>
    </item>
    <item>
      <title>청년희망적금 만기 받아보니 실제 수익률은 어느 정도일까</title>
      <link>https://mozzi-devlog.tistory.com/279</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 청년희망적금에 가입할 때 수익률이 얼마나 되는지 궁금했거든요. 만기가 되어서 실제로 수령해보니 생각보다 좋은 점도 있고, 예상과 달라서 당황스러운 부분도 있었습니다. 2026년 최신 기준으로 바뀐 세부 내용과 조건도 있어서 저처럼 처음 신청하시는 분들께 도움이 될 것 같아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 청년희망적금 만기 수령 경험과 함께, 자주 묻는 질문들을 중심으로 실제 수익률 계산법부터 신청 방법, 주의사항까지 자세히 알려드릴게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;청년희망적금 기본 조건과 만기 수익률 간단 안내&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리기 쉬운데요, 청년희망적금은 만 19세부터 34세 이하 청년 대상으로 월 최대 70만원까지 납입 가능하고, 만기는 2년입니다. 2026년부터는 연 최대 기본금리 4.0%에, 정부 지원금리 2.0%를 합산해 연 6.0%까지 받을 수 있는 구조예요. 다만 연 6.0%라고 해도 기존 일반 적금처럼 단순 계산은 안 되고 복리, 월 납입 시기와 금액에 따라 실제 수익률이 조금씩 달라집니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 2년 동안 매달 50만원씩 넣었을 때, 만기 수령액 기준 실제 수익률은 약 5.8%대였어요. 2년 동안 총 납입 원금은 1,200만원이었고, 받는 이자는 세전 약 120만원 정도였답니다. 실제 이자를 연 단위로 환산하면 세금 전 6.0%에서 조금 낮아지는 셈인데, 세금(15.4%)을 빼고 나면 연 실제 수익률은 약 5.0% 정도가 됩니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/5560606/pexels-photo-5560606.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;청년희망적금 만기 받아보니 실제 수익률은 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;청년희망적금 가입 시 가장 많이 묻는 질문 1~4&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년희망적금은 매달 같은 금액만 넣어야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 꼭 그렇지는 않아요. 매달 납입액은 자유롭게 조절할 수 있지만, 월 최대 70만원을 넘기면 안 됩니다. 저는 초반 몇 달은 30만원, 후반에는 50만원씩 넣었는데도 정상적으로 만기 수령 가능했어요. 단, 최종 원금이 달라지니 만기 수익도 달라집니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 만기 전에 해지하면 손해인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 중도 해지는 기본금리만 받을 수 있고, 정부 지원금리는 지급되지 않습니다. 심지어 가입 후 6개월 이전에 해지하면 이자도 거의 못 받는 경우가 많으니 꼭 2년 만기까지 버티는 게 이득이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년희망적금은 중복 가입이나 다른 정부 지원과 겹치나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 동일한 계좌로 중복 가입은 불가능하지만, 다른 은행에서 계좌를 여러 개 만들 순 있어요. 다만, 연간 납입 한도 840만원(월 70만원&amp;times;12개월) 내에서 정부 지원이 적용된다는 점 참고하세요. 또 다른 정부 지원 상품과는 별도이므로, 주택청약저축 등과 병행 가능합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 연말정산에서 청년희망적금 소득공제 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 안타깝게도 청년희망적금은 소득공제 대상이 아니에요. 대신 기본금리에 정부 지원금리가 더해져 높은 금리를 받을 수 있다는 점이 장점입니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/36729938/pexels-photo-36729938.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;청년희망적금 만기 받아보니 실제 수익률은 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가입부터 만기 수령까지 절차와 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저, 은행별 앱이나 인터넷뱅킹에서 청년희망적금을 신청할 수 있는데요, 신분증과 주민등록등본, 소득 증명서류(재직증명서 또는 소득금액증명원)를 준비해야 합니다. 저는 준비 서류 때문에 조금 시간이 걸렸는데, 미리 준비해두니 한 번에 처리 가능했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;매월 납입은 자동이체로 설정해두면 편하고 빠뜨릴 걱정도 없더라고요. 중도 해지 하지 않고 끝까지 유지하면 각 월별 납입액에 따라 복리 적용된 이자가 만기에 입금됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;만기 후에는 은행에서 이자와 원금을 합산해 한꺼번에 지급해줘서, 별도 신청 없이 편하게 받았습니다. 다만, 만기일 전 1개월 전부터 미리 안내 메시지를 보내주니 확인 잘 하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/13051761/pexels-photo-13051761.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;청년희망적금 만기 받아보니 실제 수익률은 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;청년희망적금 만기 받아보니 실제 수익률은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하세요, 알아두면 좋은 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 '연 6%면 단순히 원금에 6%를 곱하면 되는 거 아니야?' 싶었는데, 이자 계산 방식이 월별 납입 분에 대해 각각 복리로 붙기 때문에 실제 수익률 계산은 좀 다릅니다. 그래서 가끔 은행이나 정부에서 안내하는 예상 수익률과 실제 입금액이 조금씩 차이 나거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 정부 지원금리 2.0%는 만기까지 유지할 때만 지급되고, 중도 해지하면 포기해야 한다는 점이 중요해요. 저는 이 부분을 몰라서 해지하려 했다가 다시 만기까지 유지했답니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;청년희망적금으로 실제 절약 효과 본 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;청년이라면 매월 일정금액을 꾸준히 적금하는 게 쉬운 일은 아닌데, 저는 청년희망적금의 높은 금리 덕분에 저축 의욕이 더 생겼어요. 그리고 매달 자동이체 설정 후 생활비에서 빼니까 소비도 조금은 조절하게 되더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 은행별로 이벤트나 추가 금리를 주는 경우가 있으니 가입 전에 비교해보시고, 정부 지원 한도 내에서 최대 납입액을 넣으면 수익률 상승 효과가 큽니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 묻는 질문 더 알아보기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년희망적금에 가입 자격은 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 기준 만 19세 이상 34세 이하인 청년이면 가입 가능합니다. 또한, 본인 소득이 연 3,600만원 이하(근로장려금 기준)이어야 하고, 신용 등급이나 재산 기준 등은 별도로 확인하지 않습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 해지를 하게 되면 정부 지원금은 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 만기 이전 해지 시에는 정부 지원금리가 지급되지 않기 때문에, 중도 해지하면 기본금리만 받고 정부지원금리는 전혀 못 받습니다. 이자수익이 크게 줄어드는 단점이 있으니 꼭 만기까지 유지하는 편이 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년희망적금 납입액을 한 달에 여러 번 나눠서 넣어도 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 월 총 납입액만 70만원 이하로 맞추면 여러 번 나눠서 입금해도 괜찮아요. 다만 은행마다 다소 차이가 있을 수 있으니 가입 은행 고객센터에 문의하는 게 안전합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 만기 후 이자 소득세는 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 이자소득에 대해서는 15.4% 원천징수(지방소득세 포함)가 적용됩니다. 예를 들어, 이자가 120만원이라면 세금으로 약 18만5,000원을 제하고 실제 수령액은 약 101만5,000원이 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년희망적금 중도해지 후 다시 가입할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 중도 해지 후에도 가입 기간 내라면 다시 가입할 수 있지만, 정부 지원금리에 대한 혜택은 신규 가입 시점부터 다시 계산됩니다. 따라서 중도 해지 후에는 새로운 적금을 다시 시작하는 효과가 있어, 만기까지 유지하는 게 가장 이득입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;청년희망적금을 직접 만기 받아보니, 단순 금리보다 복리 구조와 정부 지원금리 조건을 잘 파악하는 게 중요하다는 걸 알게 됐어요. 월별 납입액을 꾸준히 유지하면서 중도 해지를 피하면 실제 수익률은 꽤 만족스러운 편입니다. 다음에는 목돈 마련을 위한 청년 우대형 주택청약저축이나, 청년 대상 다른 금융 지원책도 한번 체크해보시면 좋을 거예요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;청년희망적금은 매달 같은 금액만 넣어야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;꼭 그렇지는 않아요. 매달 납입액은 자유롭게 조절할 수 있지만, 월 최대 70만원을 넘기면 안 됩니다. 저는 초반 몇 달은 30만원, 후반에는 50만원씩 넣었는데도 정상적으로 만기 수령 가능했어요. 단, 최종 원금이 달라지니 만기 수익도 달라집니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;만기 전에 해지하면 손해인가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 중도 해지는 기본금리만 받을 수 있고, 정부 지원금리는 지급되지 않습니다. 심지어 가입 후 6개월 이전에 해지하면 이자도 거의 못 받는 경우가 많으니 꼭 2년 만기까지 버티는 게 이득이에요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;청년희망적금은 중복 가입이나 다른 정부 지원과 겹치나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;동일한 계좌로 중복 가입은 불가능하지만, 다른 은행에서 계좌를 여러 개 만들 순 있어요. 다만, 연간 납입 한도 840만원(월 70만원×12개월) 내에서 정부 지원이 적용된다는 점 참고하세요. 또 다른 정부 지원 상품과는 별도이므로, 주택청약저축 등과 병행 가능합니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;연말정산에서 청년희망적금 소득공제 받을 수 있나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;안타깝게도 청년희망적금은 소득공제 대상이 아니에요. 대신 기본금리에 정부 지원금리가 더해져 높은 금리를 받을 수 있다는 점이 장점입니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;청년희망적금에 가입 자격은 어떻게 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;2026년 기준 만 19세 이상 34세 이하인 청년이면 가입 가능합니다. 또한, 본인 소득이 연 3,600만원 이하(근로장려금 기준)이어야 하고, 신용 등급이나 재산 기준 등은 별도로 확인하지 않습니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;해지를 하게 되면 정부 지원금은 어떻게 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;만기 이전 해지 시에는 정부 지원금리가 지급되지 않기 때문에, 중도 해지하면 기본금리만 받고 정부지원금리는 전혀 못 받습니다. 이자수익이 크게 줄어드는 단점이 있으니 꼭 만기까지 유지하는 편이 좋아요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;청년희망적금 납입액을 한 달에 여러 번 나눠서 넣어도 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 월 총 납입액만 70만원 이하로 맞추면 여러 번 나눠서 입금해도 괜찮아요. 다만 은행마다 다소 차이가 있을 수 있으니 가입 은행 고객센터에 문의하는 게 안전합니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;만기 후 이자 소득세는 어떻게 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;이자소득에 대해서는 15.4% 원천징수(지방소득세 포함)가 적용됩니다. 예를 들어, 이자가 120만원이라면 세금으로 약 18만5,000원을 제하고 실제 수령액은 약 101만5,000원이 됩니다.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/278&quot;&gt;미국주식 양도소득세 신고 직접 해보니 이 부분에서 꼭 막혔어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/277&quot;&gt;호텔 멤버십 등급 올리고 받은 혜택, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/276&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년적금</category>
      <category>만기수익률</category>
      <category>실제경험</category>
      <category>청년금융</category>
      <category>청년희망적금</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/279</guid>
      <comments>https://mozzi-devlog.tistory.com/279#entry279comment</comments>
      <pubDate>Thu, 25 Jun 2026 14:39:15 +0900</pubDate>
    </item>
    <item>
      <title>미국주식 양도소득세 신고 직접 해보니 이 부분에서 꼭 막혔어요</title>
      <link>https://mozzi-devlog.tistory.com/278</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 미국주식 양도소득세 신고를 하려고 할 때, 어디서부터 어떻게 시작해야 할지 정말 막막했거든요. 특히 2026년부터 바뀐 신고 기준이나 환율 계산, 그리고 양도차익 산출 과정에서 이런 부분들 때문에 여러 번 다시 제출하고 수정했었어요. 미국주식 투자하시는 분들 중에 비슷한 고민하시는 분 많을 텐데, 저도 시행착오를 겪으면서 정리한 내용을 공유해드릴게요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년 기준 최신 미국주식 양도소득세 신고 절차와 직접 경험하면서 막혔던 부분들, 실수 사례, 그리고 내가 어떻게 해결했는지를 구체적으로 다뤄볼 예정이에요. 끝까지 읽으면 혼자서도 세금 신고 문제를 덜 헤맬 수 있을 거예요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&quot; src=&quot;https://images.pexels.com/photos/16594725/pexels-photo-16594725.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;미국주식 양도소득세 신고 대상과 기준 이해가 가장 헷갈렸어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 저도 가장 오래 고민했던 부분인데요. 2026년부터는 해외 주식 양도소득세 신고 기준이 더욱 엄격해졌고, 특히 미국주식 투자 수익에 대해서도 기존과 달리 별도 신고 의무가 강화됐어요. 예를 들어, 1년간 양도차익이 &lt;b&gt;250만 원 이상&lt;/b&gt;일 경우에만 신고 의무가 있는데, 여기서 &amp;lsquo;양도차익&amp;rsquo; 자체를 잘못 계산하면 신고 대상자도 아닌데 신고하거나 반대로 신고를 누락하는 경우가 생기더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 처음에 신고하려고 증권사에서 받은 양도내역만 믿고 계산을 바로 했는데, 증권사별로 제공하는 자료가 조금씩 달라서 이 부분을 꼼꼼히 체크하지 못해 2번이나 다시 계산했어요. 특히 원화 환산 시점과 환율 적용 기준 날짜도 중요한데, 2026년부터는 &lt;b&gt;실제 거래일 환율 적용&lt;/b&gt;이 기본이라 환율 변동을 잘못 반영하면 신고 금액 차이가 커지더라고요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;신고 대상 기준&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;1년간 해외주식 양도차익 250만원 이상일 때 신고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;양도차익 산출&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;매도 금액 - 매수 금액 (환율 각각 적용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;환율 적용&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;거래일 실제 환율(한국은행 고시환율 기준)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신고 절차에서 이렇게 하면 막힙니다 - 저도 여기서 3번 다시 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 제일 골치 아팠던 건 신고서 작성 단계였어요. 제가 처음에 홈택스에서 해외주식 양도소득세 신고서 작성 메뉴를 찾기도 힘들었고, 양도소득세 계산기를 쓰는 과정에서 &amp;lsquo;기본공제 250만원 적용&amp;rsquo;이나 &amp;lsquo;기본세율 22% 적용&amp;rsquo; 같은 항목 입력이 제대로 안 됐었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 신고서에 매도 및 매수 내역과 환율을 일일이 입력하는데, 데이터가 많으면 엑셀로 정리하는 과정도 번거로웠고, 이 과정에서 착오가 생겨서 신고 반려를 2번이나 당했어요. 세 번째 신고할 때야 어떻게 정리하고 신고해야 하는지 감이 잡혔네요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;중간에 제가 겪은 막히는 포인트는 크게 3가지였어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;증권사별 매도/매수 내역서 양식이 달라, 엑셀 정리 시 혼동&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;환율 적용 날짜 및 환율 출처를 명확히 구분하지 않아 계산 오류&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;홈택스 신고서 항목 입력 시 공제 항목 누락으로 세금 과다 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&quot; src=&quot;https://images.pexels.com/photos/186461/pexels-photo-186461.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 놓친 부분, 그래서 이렇게 해결했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 양도소득 계산이 그냥 매도가격에서 매수가격빼면 되는 줄만 알았는데, 원화 환산 시점과 환율이 정말 중요하다는 걸 몰라서 3번 다시 했다니까요. 그래서 제가 직접 쓴 방법은 다음과 같아요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;증권사에서 받은 매수&amp;middot;매도 내역 파일을 모두 엑셀로 정리&lt;/b&gt; 후 매 거래별 실제 거래일 환율(한국은행 고시환율) 찾아서 환산&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;거래일 환율은 한국은행 홈페이지에서 &amp;lsquo;기준환율&amp;rsquo; 확인&lt;/b&gt; 후 적용했어요. 단, 공휴일 거래는 직전 근무일 환율로&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;홈택스 신고서 작성 시 기본공제 250만 원 꼭 입력&lt;/b&gt;하고, 세율 22% 적용 여부도 다시 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 한 후에야 신고서 반려 없이 한 번에 통과했습니다. 그리고 2026년 최신 신고서 양식과 유의사항도 홈택스 공지사항에 보시면 상세히 나와 있으니 꼭 참고하세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하세요 - 신고할 때 꼭 주의할 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 해외주식 양도소득세 신고는 국내 주식과 달리 환율 변동을 반드시 반영해야 한다는 점인데요. 매도할 때 환율과 매수할 때 환율이 다르면 그 차이만큼 양도차익 계산에 큰 영향을 줘요. 그래서 신고서에 환율을 제대로 못 넣으면 세금이 과다 혹은 과소 계산됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 증권사에서 제공하는 매도/매수 내역서에 환율이 포함된 경우도 있지만, 경우에 따라서는 포함 안 된 것도 있어서 반드시 거래일 환율을 직접 검증하는 과정이 필요해요. 저는 이 부분에 시간을 많이 썼고, 이 과정이 귀찮지만 가장 중요한 과정이라고 생각해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;내가 직접 해보면서 알게 된 절약 팁 하나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 마지막으로 제가 직접 미국주식 양도소득세 신고하면서 알게 된 절약 팁을 하나 소개할게요. 바로 &amp;lsquo;기본공제 250만 원&amp;rsquo;을 최대한 활용하는 거예요. 만약 1년에 여러 증권사에서 거래해서 양도차익이 250만 원 이하인 분은 합산 신고 의무 여부를 꼼꼼히 따져야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 제가 처음에 이걸 몰라서 여러 번 신고서를 제출했거든요. 그리고 올해부터는 증권사마다 양도내역 통합 제공 서비스가 강화되니까, 각 증권사 자료를 한눈에 파악해서 중복 신고하지 않도록 관리하는 게 세금 이중 납부를 막는 가장 좋은 방법 같습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 미국주식 양도소득세 신고는 꼭 홈택스에서 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 2026년 기준으로는 홈택스가 공식적인 신고 창구입니다. 신고서 작성 메뉴가 해외주식 양도소득세 전용으로 분리되어 있으니, 홈택스 로그인 후 &amp;lsquo;양도소득세 신고&amp;rsquo; 메뉴에서 해외주식 신고서를 작성하시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 환율은 어느 자료를 사용해야 하나요? 한국은행 고시환율 외에 대체 가능한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 세무 당국에서는 한국은행 고시환율을 공식 기준으로 보고 있어요. 따라서 신고 시에는 반드시 당일 한국은행 기준환율을 사용해야 하며, 대체 자료는 인정되지 않는 게 일반적입니다. 저는 이 점을 몰라서 다른 환율로 임시 계산 후 여러 번 수정했어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&quot; src=&quot;https://images.pexels.com/photos/5831268/pexels-photo-5831268.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;미국주식 양도소득세 신고 직접 해보면서 막힌 부분 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;미국주식 양도소득세 신고는 생각보다 복잡하고 자잘한 실수로 여러 번 반려될 수 있는 부분이 많아요. 저도 직접 해보면서 환율 적용, 신고서 항목 누락, 증권사별 데이터 차이 때문에 고생했는데, 이렇게 꼼꼼히 준비하면 어렵지 않게 신고할 수 있습니다. 다음에는 해외주식 배당소득세 신고 시 주의할 점도 한번 정리해볼게요.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;미국주식 양도소득세 신고는 꼭 홈택스에서 해야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;네, 2026년 기준으로는 홈택스가 공식적인 신고 창구입니다. 신고서 작성 메뉴가 해외주식 양도소득세 전용으로 분리되어 있으니, 홈택스 로그인 후 ‘양도소득세 신고’ 메뉴에서 해외주식 신고서를 작성하시면 됩니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;환율은 어느 자료를 사용해야 하나요? 한국은행 고시환율 외에 대체 가능한가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;세무 당국에서는 한국은행 고시환율을 공식 기준으로 보고 있어요. 따라서 신고 시에는 반드시 당일 한국은행 기준환율을 사용해야 하며, 대체 자료는 인정되지 않는 게 일반적입니다. 저는 이 점을 몰라서 다른 환율로 임시 계산 후 여러 번 수정했어요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/277&quot;&gt;호텔 멤버십 등급 올리고 받은 혜택, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/276&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026년신고</category>
      <category>미국주식</category>
      <category>세금신고</category>
      <category>양도소득세</category>
      <category>해외주식</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/278</guid>
      <comments>https://mozzi-devlog.tistory.com/278#entry278comment</comments>
      <pubDate>Thu, 25 Jun 2026 10:06:35 +0900</pubDate>
    </item>
    <item>
      <title>호텔 멤버십 등급 올리고 받은 혜택, 저는 이렇게 했어요</title>
      <link>https://mozzi-devlog.tistory.com/277</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 호텔 멤버십 등급을 올려보려고 할 때 뭘 어떻게 해야 할지 하나도 몰라서 고생 많았거든요. 2026년 최신 기준으로 혜택도 달라지고, 절차가 은근히 복잡해서 막상 시작하면 막히기 딱 좋은 부분이 있더라고요. 저처럼 '호텔 멤버십 등급 올려서 혜택 누리고 싶은데 어떻게 시작하지?' 하시는 분들 많으실 것 같아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이 글에서는 제가 직접 호텔 멤버십 등급을 올리면서 겪은 경험을 바탕으로, 신청부터 세팅까지 단계별로 차근차근 알려드릴게요. 그리고 2026년 기준 최신 혜택 정보와 유의할 점까지 하나도 빠짐없이 정리했으니 읽다 보면 자연스럽게 끝까지 눈이 안 떨어질 거예요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680687/pexels-photo-31680687.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;먼저 멤버십 등급 올릴 때 꼭 알아야 할 기본 조건들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리기 쉬운데요, 호텔 멤버십 등급을 올리려면 일반적으로 &amp;lsquo;투숙 횟수&amp;rsquo;와 &amp;lsquo;지출 금액&amp;rsquo;이 핵심 기준이에요. 2026년 기준으로도 이 두 가지는 변함이 없더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 국내 대표 브랜드 A 호텔 멤버십을 기준으로 말씀드리면 보통 &lt;b&gt;연 10박 이상 투숙하거나 200만 원 이상 결제&lt;/b&gt;해야 중간 등급인 &amp;lsquo;실버&amp;rsquo;로 올라갈 수 있습니다. 최상위 등급인 &amp;lsquo;골드&amp;rsquo;는 매년 30박 이상 또는 600만 원 이상 결제가 필요해요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;등급&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;투숙 횟수 기준&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;연간 지출 기준&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;일반&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;실버&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10박 이상&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;200만 원 이상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;골드&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;30박 이상&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;600만 원 이상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 밖에도 브랜드마다 소소한 차이가 있는데, 특히 &lt;b&gt;2026년부터는 모바일 앱에서 투숙 기록과 결제 내역을 자동으로 연동&lt;/b&gt;해주는 곳이 늘어나서 훨씬 편해졌어요. 예전에는 입실할 때 멤버십 번호를 꼭 얘기해야 했는데, 지금은 QR코드로 자동 연결되는 시스템도 있어서 편리하더군요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 직접 따라한 멤버십 등급 올리기 절차&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 중요한 건 &amp;lsquo;절차&amp;rsquo;인데요, 저도 처음엔 과정이 막막했어요. 지금부터 제가 A 호텔 멤버십 기준으로 실제로 한 방법을 상세히 설명드릴게요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫째, 멤버십 가입부터&lt;/b&gt;에요. 호텔 공식 홈페이지나 모바일 앱에서 회원가입을 합니다. 보통 이름, 연락처, 이메일 등 기본 정보만 입력하면 3분이면 끝나요. 저는 A호텔 앱을 깔고, 회원가입 후 로그인을 먼저 했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘째, 투숙 예약 및 결제 연결&lt;/b&gt; 단계인데요. 저는 앱 내 예약 메뉴로 들어가서 객실을 선택한 뒤 &amp;lsquo;멤버십 번호 자동 연동&amp;rsquo;을 체크했어요. 예전에는 따로 멤버십 번호를 알려줘야 했는데, 이제는 로그인 정보만 있으면 자동으로 투숙 기록이 쌓여서 편합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;셋째, 투숙 완료 후 &amp;lsquo;내 멤버십 등급 현황&amp;rsquo; 메뉴 확인&lt;/b&gt;입니다. 앱 메인에서 &amp;lsquo;멤버십 등급&amp;rsquo; 탭으로 들어가면 내가 지금 몇 박 투숙, 얼마를 결제했는지, 등급까지 얼마나 남았는지 한눈에 보여요. 저는 이걸 매 투숙 때마다 꼭 확인했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;넷째, 등급 갱신 및 업그레이드 신청&lt;/b&gt;인데요. 2026년부터는 자동 갱신이 기본이지만, 제가 직접 확인 버튼을 누르는 방식도 함께 지원해줘서 편했어요. 앱 내 &amp;lsquo;등급 업그레이드 신청&amp;rsquo; 버튼을 눌러서 신청 완료하면 며칠 내로 알림이 옵니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/19271573/pexels-photo-19271573.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하는 멤버십 혜택 적용 시점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 사람들이 가장 헷갈려하는 게 &amp;lsquo;등급이 올라갔다고 바로 혜택을 받는 건가?&amp;rsquo; 하는 부분이에요. 저도 처음엔 이 타이밍이 언제인지 몰라서 며칠을 기다렸거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;결론 먼저 말씀드리자면, &lt;b&gt;대부분 호텔은 등급 확정 후 익일부터 혜택이 바로 적용&lt;/b&gt;됩니다. 하지만 일부 혜택은 등급 확정일로부터 2~3일 후에 시스템에 반영되기도 해서, 체크인 시점에 멤버십 등급을 꼭 다시 한번 확인하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 저는 A 호텔에서 골드 등급으로 승급했는데, 첫 투숙 때 무료 룸 업그레이드나 조식 할인 같은 혜택이 바로 적용되는 걸 확인했어요. 단, 제휴 카드 할인이나 포인트 적립률 변경 같은 추가 혜택은 하루 이틀 뒤부터 체감되는 경우가 있으니 참고하세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 받은 멤버십 등급별 대표 혜택 정리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분은 제가 직접 체험한 정보를 토대로 2026년 기준으로 정리해봤는데, 등급별로 차이가 크게 나더라고요. 참고로 A 호텔 외에 B, C 브랜드도 비슷한 구조라 비교해보시면 좋을 거예요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;등급&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;주요 혜택&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;포인트 적립률&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;추가 쿠폰/서비스&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;일반&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;기본 객실 예약&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;5%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;실버&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;무료 조식 1인 제공, 체크아웃 연장 1시간&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;7%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연 1회 1박 무료 숙박권&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;골드&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;무료 룸 업그레이드, 조식 2인 무료, 라운지 이용권&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연 3회 1박 무료 숙박권, 발렛파킹 무료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 실제로 골드 등급으로 승급 후 받은 무료 룸 업그레이드와 라운지 이용권은 평소 1인당 3만~5만 원 상당이라 꽤 만족스러웠고, 포인트 적립률이 5%에서 10%로 뛰어서 연간 60만 원 이상 추가 적립 기대할 수 있겠더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;등급 올릴 때 저도 헷갈린 사소하지만 중요한 주의사항&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰라서 조금 손해 봤는데, &lt;b&gt;투숙 기록이 누락되는 경우가 꽤 많아요.&lt;/b&gt; 특히 호텔 예약 사이트나 앱이 다를 때 그렇더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;보통 &lt;b&gt;멤버십 가입한 계정으로 직접 예약하거나, 체크인할 때 멤버십 번호 꼭 알려줘야 기록이 제대로 쌓입니다.&lt;/b&gt; 저는 한 번 제휴 여행사를 통해 예약한 뒤 멤버십 번호를 전달 안 했더니 해당 숙박이 투숙 횟수에 반영되지 않았어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, &lt;b&gt;회사 법인 카드로 결제 시 개인 멤버십과 연동 안 되는 경우&lt;/b&gt;가 있어서 결제 내역이 누락될 수도 있거든요. 그래서 결제 시에도 멤버십 번호 확인하는 게 중요합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 사용한 팁과 절약 노하우&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 멤버십 등급 올리는 데 시간을 단축하려고 아래 방법을 썼는데요, 꽤 효과적이었어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;비수기 주중 투숙을 집중하기: 박 수를 빠르게 채우는 데 효과적이었어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;호텔 제휴 신용카드 활용: 결제 시 3~5% 포인트 추가 적립돼서 이득이 컸어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;앱 내 쿠폰 및 프로모션 알림 항상 켜두기: 급할 때 5만 원 이상 할인 쿠폰을 받았던 경험도 있어요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하니까 결국 연말까지 계획보다 20% 이상 빠른 속도로 골드 등급 승급할 수 있었답니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 묻는 질문과 답변&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 멤버십 등급이 바로 적용 안 될 때 어떻게 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 멤버십 등급이 바로 안 올라간다면 가장 먼저 앱이나 홈페이지 내 &amp;lsquo;고객센터&amp;rsquo;에 문의를 해보세요. 2026년부터는 대부분 자동 처리되지만, 투숙 기록 누락이나 결제 정보 미반영 문제일 가능성이 큽니다. 보통 문의 후 3~5일 내로 정상 처리되니 걱정하지 마세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 등급 유지 조건은 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 대부분의 호텔 멤버십은 획득한 등급을 1년 동안 유지할 수 있고, 해당 기간 내 투숙 실적과 결제 기준을 다시 채워야 연장 가능합니다. A호텔의 경우 1년간 골드 유지 후 재갱신을 위해선 최소 20박 또는 400만 원 결제가 필요해요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028686/pexels-photo-32028686.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;호텔 멤버십 등급 올려서 받은 혜택 정리 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;호텔 멤버십 등급 올려서 받은 혜택 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 해보니 호텔 멤버십 등급 올리는 건 생각보다 절차가 복잡하지만, 한 단계씩 따라 하면 충분히 손쉽게 할 수 있더라고요. 특히 2026년부터는 앱과 시스템이 많이 개선돼서 전보다 훨씬 편해졌다는 점 꼭 기억하세요. 다음에는 멤버십 포인트 효율적으로 쓰는 방법도 한 번 다뤄볼 예정입니다.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;멤버십 등급이 바로 적용 안 될 때 어떻게 해야 하나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;멤버십 등급이 바로 안 올라간다면 가장 먼저 앱이나 홈페이지 내 ‘고객센터’에 문의를 해보세요. 2026년부터는 대부분 자동 처리되지만, 투숙 기록 누락이나 결제 정보 미반영 문제일 가능성이 큽니다. 보통 문의 후 3~5일 내로 정상 처리되니 걱정하지 마세요.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;등급 유지 조건은 어떻게 되나요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;대부분의 호텔 멤버십은 획득한 등급을 1년 동안 유지할 수 있고, 해당 기간 내 투숙 실적과 결제 기준을 다시 채워야 연장 가능합니다. A호텔의 경우 1년간 골드 유지 후 재갱신을 위해선 최소 20박 또는 400만 원 결제가 필요해요.&quot;}}]}&lt;/script&gt;
&lt;div style=&quot;margin: 3em 0 1em; padding: 1.2em 1.4em; background: #f8f9fa; border-left: 4px solid #1a73e8; border-radius: 6px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 0.8em; font-weight: bold; font-size: 1.05em; color: #202124;&quot; data-ke-size=&quot;size16&quot;&gt;  함께 보면 좋은 글&lt;/p&gt;
&lt;ul style=&quot;margin: 0; padding-left: 1.4em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;a style=&quot;color: #1a73e8; text-decoration: none;&quot; href=&quot;https://mozzi-devlog.tistory.com/276&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목, 저는 이렇게 했어요&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <category>생활정보</category>
      <category>2026혜택</category>
      <category>경험담</category>
      <category>멤버십등급</category>
      <category>생활비절약</category>
      <category>호텔멤버십</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/277</guid>
      <comments>https://mozzi-devlog.tistory.com/277#entry277comment</comments>
      <pubDate>Wed, 24 Jun 2026 11:12:03 +0900</pubDate>
    </item>
    <item>
      <title>중고차 구매할 때 꼭 확인해야 할 7가지 항목, 저는 이렇게 했어요</title>
      <link>https://mozzi-devlog.tistory.com/276</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 중고차를 사려고 마음먹었을 때는 뭐부터 어떻게 해야 할지 너무 막막했어요. 특히 &amp;lsquo;차대번호&amp;rsquo;나 &amp;lsquo;성능점검기록부&amp;rsquo; 같은 용어들이 익숙하지 않아서 검색만 몇 시간 했거든요. 그래서 이번에는 2026년 최신 기준과 제 경험을 바탕으로, 중고차 구매할 때 꼭 확인해야 할 7가지 항목을 최대한 쉽게 정리해봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글을 읽고 나면 &amp;lsquo;중고차 딜러 말만 믿고 있다가 낭패 본다&amp;rsquo;는 걱정 없이 스스로 꼼꼼하게 체크할 수 있어요. 중고차 입문자라면 꼭 끝까지 읽어보세요. 필요한 서류부터 실제 점검 방법, 그리고 필수 절차까지 모두 알려드릴게요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680687/pexels-photo-31680687.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;첫 번째, 차량 등록증과 보험 이력부터 꼭 확인하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 기본인데도 많이들 놓치더라고요. 중고차 구매 시 &amp;lsquo;차량 등록증&amp;rsquo;은 차량 소유주, 등록일자, 차대번호 등이 적혀있는 아주 중요한 서류예요. 차량이 정상 등록되어 있지 않으면 법적 문제가 생길 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한 &amp;lsquo;보험 이력&amp;rsquo;도 필수 확인 항목인데요, 보험 처리된 사고 기록이 있으면 차량의 과거 사고 여부를 알 수 있거든요. 요즘은 국토교통부 &amp;lsquo;자동차민원 대국민 포털&amp;rsquo;에서 무료로 조회할 수 있으니 꼭 조회해 보세요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;차량 등록증&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;소유자 정보, 차대번호, 등록일 등 기본 정보 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;보험 이력 조회&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;과거 사고 및 보험금 청구 내역 확인 (무료)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;두 번째, &amp;lsquo;성능점검기록부&amp;rsquo;가 무엇인지 꼭 이해하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 헷갈려하시는 게 바로 이 &amp;lsquo;성능점검기록부&amp;rsquo;인데요, 쉽게 말하면 차량의 상태를 객관적으로 점검한 결과 보고서예요. 2026년부터는 중고차 딜러가 이 서류를 꼭 제공해야 하는 의무가 강화되었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;점검항목에는 엔진, 변속기, 브레이크 같은 주요 부품의 상태와 사고 여부까지 상세하게 나와 있어요. 저도 이 부분에서 막혔는데, 얼핏 보면 너무 전문용어가 많아서 이해하기 어려워서 검색을 좀 했습니다. 하지만 국토교통부 사이트에서 예시 문서를 보면 어떤 부분이 중요한지 감이 잡히더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;만약 성능점검기록부가 없으면 구매를 재고하는 게 좋아요. 이 서류가 없으면 나중에 차량에 숨겨진 문제가 있을 확률이 높습니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&quot; src=&quot;https://images.pexels.com/photos/19271573/pexels-photo-19271573.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;세 번째, 주행거리 계기판 조작 여부 꼭 확인해야 합니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;주행거리를 속이는 건 중고차 사기에서 가장 흔한 사례 중 하나예요. 제 경험으로도 주행거리와 차량의 외관 상태가 너무 안 맞으면 의심을 해야 하더라고요. 특히 2026년 이후에는 공인된 &amp;lsquo;주행거리 이력조회 시스템&amp;rsquo;이 잘 갖춰져 있어서 반드시 확인하는 게 좋습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;주행거리는 km 단위로 기록되는데, 적정 주행거리는 연 평균 약 1만 5천 km 정도로 잡습니다. 예를 들어 5년 된 차량인데 3만 km밖에 안 됐다면 점검이 필요해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;네 번째, 사고 이력과 수리 내역 꼼꼼하게 살펴보는 법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사고 이력을 보는 건 저도 처음에는 무서웠는데, 이후로는 오히려 사고 없는 차가 얼마나 드문지 알게 됐어요. 중요한 건 사고 후 제대로 수리했는지가 핵심입니다. 국토교통부나 보험사에서 제공하는 &amp;lsquo;사고 이력 조회&amp;rsquo; 서비스를 활용하면 쉽고 빠르게 확인할 수 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;수리 내역은 딜러가 알려주는 것 외에 &amp;lsquo;카히스토리&amp;rsquo; 같은 전문 사이트를 이용하면 더 자세한 정보를 얻을 수 있어요. 수리 부품 종류, 시기, 수리금액(보통 수백만 원 단위)까지 확인할 수 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;다섯 번째, 차량 검사 유효 기간과 정비 상태도 체크하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매 전에 자동차 검사(검사소견서) 유효기간이 언제까지인지 꼭 확인해야 해요. 보통 자동차검사는 2년에 한 번씩 받는데, 이게 임박한 차량은 추가 비용이 발생할 수 있으니까요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한 정비 상태가 좋으면 당장 큰 돈 들이지 않고 탈 수 있어서 경제적으로 유리합니다. 저는 직접 차량을 전문 정비소에 맡겨서 점검 받은 적 있는데, 2026년 기준 평균 점검비용이 약 8만~12만 원 정도예요. 이 정도 투자로 큰 사고를 미리 막을 수 있으니 꼭 해보길 권해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여섯 번째, 판매자 신뢰도와 거래 방식 확인하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매할 때 저는 딜러와 직접 개인 거래, 두 가지 방식을 경험해봤는데요 각각 장단점이 있어요. 딜러는 일정한 보증이 있고 사후 처리가 비교적 수월하지만, 수수료가 2~5% 정도 붙는 경우가 많아요. 반면 개인 거래는 가격은 저렴하지만 사후 문제가 발생하면 대처가 어렵죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;판매자의 신뢰도를 판단하는 방법으로는 중고차 매매업 등록증, 사업자 등록증 등을 꼭 요청하세요. 그리고 가능하면 구매 전 차량 상태를 함께 확인하고 계약서도 꼼꼼히 작성해야 합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;일곱 번째, 중고차 가격과 적정 시기, 금융 옵션까지 살펴보세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 저는 가격 비교와 적정 시기 파악이 생각보다 중요하다는 걸 깨달았어요. 중고차 가격은 차종, 연식, 주행거리, 사고 이력 등에 따라 크게 차이나는데, 2026년 기준으로 국산 준중형차는 3년 된 차가 1,200만 원~1,500만 원대, 5년 된 차는 800만 원~1,100만 원대로 가격 다양성이 큽니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 신차 출고 후 3~5년 된 차가 가격 대비 성능이 좋아 이 시기에 구매하는 걸 추천해요. 아울러 금융권 중고차 전용 할부 상품이나 저금리 대출상품도 많아서 현금 부담 없이 구매할 수 있답니다. 2026년에는 3.5%대 금리로 최대 60개월 할부가 가능해졌어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려 하시는 것들 (주의할 점)&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에는 &amp;lsquo;차대번호랑 차대번호판이 뭔지?&amp;rsquo;부터 막혔는데요, 차대번호는 차량 고유 식별 번호고, 차대번호판은 그 번호가 새겨진 금속판이에요. 중고차 거래 시 이 번호가 서류와 일치하는지 꼭 확인해야 하죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나는 무조건 싼 차만 찾는 것인데, 너무 싼 건 사고 이력이나 고장 위험이 크니 오히려 비용이 많이 들 수 있어요. 저는 몇 번 검색과 상담을 통해 적정 가격대를 감 잡는 게 중요한 걸 깨달았어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 중고차 성능점검기록부가 없으면 구매해도 될까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 과거에는 없던 게 많았지만 2026년 기준으로는 법적 의무사항이라 없으면 구매를 권장하지 않아요. 숨겨진 결함이나 사고가 발견 안 될 위험이 큽니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 개인 거래로 중고차를 사도 안전한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 개인 거래는 가격이 저렴한 장점이 있지만, 거래 사후 처리가 어렵고 사기 위험도 있으니 꼼꼼한 서류 확인과 차량 점검이 필수입니다. 가능하면 차량검사나 전문 정비업체 점검을 권해요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&quot; src=&quot;https://images.pexels.com/photos/32028686/pexels-photo-32028686.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;중고차 구매할 때 꼭 확인해야 할 7가지 항목 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매할 때 꼭 확인해야 할 7가지 항목 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;중고차 구매는 생각보다 복잡하지만, 하나씩 차근차근 확인하면 크게 부담되지 않더라고요. 저처럼 처음 시작하는 분들은 특히 성능점검기록부와 차량 이력 조회부터 꼭 챙기세요. 다음번에는 중고차 구매 후 꼭 챙겨야 할 보험과 세금 절약 꿀팁도 정리해보겠습니다.&lt;/p&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;{&quot;@context&quot;: &quot;https://schema.org&quot;, &quot;@type&quot;: &quot;FAQPage&quot;, &quot;mainEntity&quot;: [{&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;중고차 성능점검기록부가 없으면 구매해도 될까요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;과거에는 없던 게 많았지만 2026년 기준으로는 법적 의무사항이라 없으면 구매를 권장하지 않아요. 숨겨진 결함이나 사고가 발견 안 될 위험이 큽니다.&quot;}}, {&quot;@type&quot;: &quot;Question&quot;, &quot;name&quot;: &quot;개인 거래로 중고차를 사도 안전한가요?&quot;, &quot;acceptedAnswer&quot;: {&quot;@type&quot;: &quot;Answer&quot;, &quot;text&quot;: &quot;개인 거래는 가격이 저렴한 장점이 있지만, 거래 사후 처리가 어렵고 사기 위험도 있으니 꼼꼼한 서류 확인과 차량 점검이 필수입니다. 가능하면 차량검사나 전문 정비업체 점검을 권해요.&quot;}}]}&lt;/script&gt;</description>
      <category>생활정보</category>
      <category>2026중고차</category>
      <category>성능점검기록부</category>
      <category>중고차구매</category>
      <category>중고차이력조회</category>
      <category>차량점검</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/276</guid>
      <comments>https://mozzi-devlog.tistory.com/276#entry276comment</comments>
      <pubDate>Wed, 24 Jun 2026 10:24:36 +0900</pubDate>
    </item>
    <item>
      <title>아동수당 신청부터 입금까지 제가 겪은 실패와 소요 기간 이야기</title>
      <link>https://mozzi-devlog.tistory.com/275</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 아동수당 신청할 때는 뭔가 간단할 줄 알았는데, 막상 해보니까 실수도 많고 입금까지 걸리는 기간도 예상보다 훨씬 길었어요. 특히 2026년 최신 기준으로 절차가 바뀌었는데, 이걸 몰라서 몇 번이나 다시 신청해야 했거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 저처럼 아동수당 신청과 입금까지 걸리는 기간 때문에 헤매는 분들을 위해서 실제 경험과 함께 꼭 주의할 점, 반려 사례, 그리고 입금 시기까지 차근차근 알려드릴게요. 이 글만 끝까지 읽으면 아동수당 신청 절차에서 흔히 벌어지는 실수들을 피할 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신청 조건과 서류, 여기서 많이 틀립니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 헷갈렸어요. 2026년 들어서 아동수당 지급 기준이 좀 더 명확해졌지만, 저는 가구 소득 산정때문에 한 번 반려됐거든요. 아동 나이는 만 0세부터 만 7세 미만까지인데, 신청 당시 아이의 주민등록등본과 가족관계증명서가 꼭 맞아야 하더라고요. 저는 주민등록상 주소와 실제 거주지가 달라서 이게 문제가 됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서류는 온라인 신청 시에도 반드시 PDF로 제출해야 하고, 종이서류를 제출하는 경우엔 주민센터 방문 날짜가 신청일로 잡혀서 입금까지 시간이 더 걸리더라고요. 특히 소득판정 기준은 2026년부터 가구당 월평균 소득이 중위소득 180% 이하이어야 하는데, 저는 소득 신고 오류가 있어서 한번 반려됐던 경험이 있어요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;신청 대상 아동 연령&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;만 0세부터 만 7세 미만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;필수 서류&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;주민등록등본, 가족관계증명서, 소득 신고 증빙&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;소득 기준&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;가구당 월평균 소득 중위소득 180% 이하&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;반려 사례 주요 원인&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;서류 불일치, 소득 산정 오류, 주소 미등록&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아동수당 신청과 입금까지 걸린 기간 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680684/pexels-photo-31680684.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아동수당 신청과 입금까지 걸린 기간 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아동수당 신청과 입금까지 걸린 기간 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 다시 신청했더니 입금까지 시간이 3주 걸렸어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 온라인 복지로 사이트에서 신청했는데, 서류 업로드 실수로 반려됐어요. 2026년 3월 기준으로 반려 통보는 이메일이나 문자로 오는데, 제가 확인을 안 해서 또 시간이 더 지체됐죠. 그래서 반려 받은 날부터 서류를 다시 챙기고 주민센터에 방문해서 직접 재신청했는데, 입금까지 총 21일이 걸렸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나 알아두셔야 할 점은, 아동수당은 매월 25일에 정기적으로 입금된다는 거예요. 만약 신청이 25일 며칠 전에 완료되지 않으면 다음달 25일까지 기다려야 하기 때문에 저처럼 막판에 신청하면 입금이 한 달 넘게 늦어질 수도 있어요. 저처럼 급하게 생활비를 기대했던 분들은 특히 신청 시기를 꼭 미리 잡는 걸 추천드립니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이 부분에서 크게 헤맸던 반려 사유와 대비책&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;반려 사유 중 가장 흔한 게 서류 문제였는데요, 저도 실제로 아이의 가족관계증명서에 제가 누락돼서 반려됐어요. 처음엔 자녀 주민등록증만 있으면 되는 줄 알았는데, 부모와 아동의 관계가 명확히 나와야 절차가 원활하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 소득 신고 부분도 복잡한데, 맞벌이 가구는 각각 소득이 다르고, 자영업자일 경우 사업 소득 신고까지 꼼꼼히 해야 반려 안 당해요. 저는 혼자 소득을 신고했는데 남편 소득이 빠져서 두 번이나 반려됐죠. 결국 주민센터 직원분 도움을 받아 가족 전체 소득을 확인 후 신고해서 해결했어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아동수당 신청과 입금까지 걸린 기간 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680687/pexels-photo-31680687.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아동수당 신청과 입금까지 걸린 기간 직접 정리한 자료&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아동수당 신청과 입금까지 걸린 기간 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;아동수당 입금 일정과 예상 소요 시간 실제 사례&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년 현재 아동수당은 매달 25일에 입금이 완료됩니다. 만약 신청이 3월 10일에 완료됐다면 3월 25일에 입금되거나, 3월 26일 이후면 4월 25일에 입금되는 식이에요. 즉, 신청과 승인 시점이 입금일에 맞춰지지 않으면 최대 45일까지도 걸립니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제 경우에는 3월 15일에 재신청 완료했고 3월 25일에 입금됐지만, 처음 반려돼서 기다린 시간 포함하면 총 3주 넘게 지체된 셈이에요. 이 기간 동안 아이 교육비와 생활비가 꽤 빠듯했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이런 점 꼭 기억하세요, 그리고 저처럼 헷갈리지 마세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 주민등록초본과 등본을 헷갈렸고, 온라인 신청 방법도 몰라서 며칠간 계정 만들고 서류 제출하는 데 시간을 꽤 썼거든요. 주민센터 방문 시에는 신분증과 아이 주민등록등본, 가족관계증명서까지 모두 챙기셔야 하고, 특히 주소 정보가 최신인지 미리 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 신청 후에는 반려 가능성을 대비해서 1주일 간격으로 문자나 이메일 확인을 반드시 하셔야 해요. 저처럼 메일함을 안 확인하면 통보를 놓쳐서 신청 기간이 더 늦춰질 수도 있으니까요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아동수당 신청과 입금까지 걸린 기간 관련 정보&quot; src=&quot;https://images.pexels.com/photos/19271573/pexels-photo-19271573.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아동수당 신청과 입금까지 걸린 기간 참고 사진&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아동수당 신청과 입금까지 걸린 기간 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;아동수당으로 생활비 조금이라도 빠르게 받으려면 이렇게 하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;첫째, 매달 1~10일 사이에 미리 신청하는 게 중요해요. 왜냐하면 25일 입금 기준이니까 10일 이후 신청은 다음 달로 넘어가기 쉽거든요. 둘째, 온라인 신청 후 꼭 접수 확인 문자나 이메일을 기대해야 합니다. 세 번째로, 소득 신고는 주민센터 방문 전에 온라인으로 미리 준비해서 오류를 줄이세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 이런 팁을 알았다면 처음에 몇 번씩 재신청하지 않고 바로 입금받았을 텐데, 아쉽더라고요. 생활비 빡빡한 가구는 입금 지연이 꽤나 부담이 큽니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보는 질문&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 아동수당 신청 후 얼마나 빨리 입금되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 기준으로 신청 완료일부터 입금까지는 보통 &lt;b&gt;최소 7일에서 최대 45일&lt;/b&gt;까지 걸려요. 매월 25일에 정기 입금되기 때문에 신청 시점에 따라 크게 달라질 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 반려됐을 때 어떻게 다시 신청해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 반려 사유를 정확히 파악한 후 &lt;b&gt;온라인 복지로&lt;/b&gt; 사이트나 &lt;b&gt;주민센터 방문&lt;/b&gt;을 통해 재신청할 수 있습니다. 서류 불일치가 가장 흔하니 주민등록등본과 가족관계증명서를 반드시 최신으로 준비하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 아동수당 지급액은 얼마나 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 아동수당은 월 &lt;b&gt;30만원&lt;/b&gt;이 지급되며, 1인당 최대 7세 미만 아동이 지원 대상입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저처럼 아동수당 신청 과정에서 서류 실수나 반려 때문에 시간을 낭비하는 분들이 많더라고요. 저도 여러 번 다시 신청하느라 꽤 지체됐는데, 이 글에서 알려드린 부분만 잘 챙기면 생각보다 훨씬 수월합니다. 다음에는 &lt;b&gt;아동수당과 중복 가능한 다른 복지혜택&lt;/b&gt;에 대해서도 공유할게요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026년정보</category>
      <category>복지정보</category>
      <category>생활비지원</category>
      <category>신청기간</category>
      <category>아동수당</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/275</guid>
      <comments>https://mozzi-devlog.tistory.com/275#entry275comment</comments>
      <pubDate>Wed, 24 Jun 2026 00:41:50 +0900</pubDate>
    </item>
    <item>
      <title>React useMemo와 useCallback, 진짜 필요할 때만 사용하는 체크리스트</title>
      <link>https://mozzi-devlog.tistory.com/274</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;React 컴포넌트 최적화를 하다가 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useMemo&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useCallback&lt;/code&gt;을 무조건 써야 한다고 생각했는데, 실제로는 오히려 성능이 더 나빠지는 경우가 많아 고민이 많았어요. 이걸 구현하면서 겪은 삽질과 그 과정에서 꼭 확인해야 할 체크리스트를 정리해 봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 &lt;b&gt;React Hooks로 최적화를 할 때 정말 필요한 순간&lt;/b&gt;과, 잘못 사용해 오히려 복잡해지거나 성능이 떨어지는 경우를 구분할 수 있도록 도와드릴게요. 그리고 놓치기 쉬운 체크리스트도 공유하니 꼭 끝까지 읽어보세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 테스트한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React 18.2&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;TypeScript 4.9&lt;/code&gt; 조합이에요. 물론 JavaScript 환경에서도 동일한 개념이 적용됩니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;React useMemo와 useCallback, 이렇게 쓰면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 많은 분들이 헷갈리는 지점인데요, useMemo와 useCallback은 &lt;b&gt;재계산과 함수 재생성 비용이 큰 작업에만&lt;/b&gt; 사용하는 게 맞습니다. 단순한 변수 계산이나 인라인 함수 작성에 무조건 쓰면 오히려 React가 관리해야 할 캐시가 늘어나서 성능이 떨어지더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 배열 필터링 같이 계산 비용이 높은 작업에 useMemo를 쓰는 예시를 보여드릴게요.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import React, { useState, useMemo } from 'react';

function FilteredList({ items }) {
  const [filter, setFilter] = useState('');

  // 비용이 큰 필터링 작업을 useMemo로 감싸 재계산 방지
  const filteredItems = useMemo(() =&amp;gt; {
    console.log('필터링 연산 실행');
    return items.filter(item =&amp;gt; item.includes(filter));
  }, [items, filter]);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;input type=&quot;text&quot; value={filter} onChange={e =&amp;gt; setFilter(e.target.value)} placeholder=&quot;검색어 입력&quot; /&amp;gt;
      &amp;lt;ul&amp;gt;
        {filteredItems.map((item, index) =&amp;gt; (
          &amp;lt;li key={index}&amp;gt;{item}&amp;lt;/li&amp;gt;
        ))}
      &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 코드를 보면 &lt;code&gt;filter&lt;/code&gt;가 바뀔 때만 필터링 작업이 재실행되니 불필요한 렌더링 비용이 줄어드는 걸 알 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;반면, 단순한 문자열 조합 같은 가벼운 계산에 useMemo를 쓰면 오히려 메모리 관리 오버헤드가 더 클 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;useCallback은 주로 자식 컴포넌트에 넘길 핸들러 함수를 메모이제이션할 때 쓰는데, 역시 꼭 필요한 경우에만 사용하는 걸 추천해요.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import React, { useState, useCallback } from 'react';

function Parent() {
  const [count, setCount] = useState(0);

  // count가 변할 때만 함수 새로 생성
  const increment = useCallback(() =&amp;gt; {
    setCount(prev =&amp;gt; prev + 1);
  }, []);

  return &amp;lt;Child onClick={increment} /&amp;gt;;
}

function Child({ onClick }) {
  console.log('Child 렌더링');
  return &amp;lt;button onClick={onClick}&amp;gt;증가&amp;lt;/button&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 &lt;code&gt;increment&lt;/code&gt; 함수가 불필요하게 재생성되는 걸 막아서 &lt;code&gt;Child&lt;/code&gt; 컴포넌트의 불필요한 렌더링을 줄일 수 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;꼭 체크해야 하는 useMemo/useCallback 사용 체크리스트 ✅&lt;/h2&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;연산 비용 확인:&lt;/b&gt; useMemo는 재계산 비용이 큰 함수에만 쓰세요. 단순 연산에는 오히려 부담입니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;의존성 배열 누락 주의:&lt;/b&gt; 의존성 배열을 빼먹으면 캐시가 잘못되어 버그가 생길 수 있으니 꼭 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;함수 재생성 비용 고려:&lt;/b&gt; useCallback은 자식 컴포넌트에 넘겨 자주 재렌더링되는 핸들러에만 적용하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;불필요한 메모이제이션 지양:&lt;/b&gt; 지나친 사용은 코드 복잡도만 높이고 성능에 도움 안 됩니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;React.memo와 함께 활용:&lt;/b&gt; useCallback과 React.memo는 시너지가 있어요. 자식 컴포넌트를 메모이제이션할 때 동시에 쓰면 효과적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 모든 함수와 복잡한 계산에는 무조건 &lt;code&gt;useMemo&lt;/code&gt;와 &lt;code&gt;useCallback&lt;/code&gt;을 붙였는데, 의존성 배열을 빼먹어서 버그가 한참 났어요. 예를 들면 이런 에러 메시지가 뜨더라고요.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;Warning: React Hook useMemo has a missing dependency: 'someValue'.
Either include it or remove the dependency array.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이걸 무시하고 사용하면 값이 바뀌어도 state가 갱신되지 않아 UI가 꼬였어요. 그래서 의존성 배열을 꼼꼼히 채우는 습관이 생겼습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, useCallback을 쓰면서 자식 컴포넌트에 함수가 제대로 전달되는지 확인 안 해서 렌더링이 안 되는 문제도 있었는데, React.memo와 함께 쓰면서 이 문제를 해결했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;useMemo와 useCallback을 사용할 때 메모리 누수 가능성도 생각해보셔야 해요. 너무 많은 메모이제이션은 캐시 메모리를 쓸데없이 차지할 수 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, React 18에서는 자동 배치 기능 때문에 렌더링 방식이 약간 바뀌었는데, 이 때문에 불필요한 메모이제이션이 오히려 성능 저하를 낼 수도 있으니 &lt;b&gt;렌더링 성능을 실제 측정하면서 최적화하세요&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, &lt;code&gt;useMemo&lt;/code&gt;는 값이 아니라 참조 자체를 캐싱하는 거라, 객체나 배열을 반환할 때도 꼭 의존성 배열을 신경 써서 넣어야 합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 그냥 모든 함수에 useCallback을 쓰면 안 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 자주 재생성되는 함수가 아니라면 오히려 코드가 복잡해지고 성능도 나빠질 수 있어요. 자식 컴포넌트가 리렌더링 되는 걸 막기 위한 목적이라면 React.memo와 같이 사용할 때 효과적입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. useMemo가 없으면 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 매 렌더링마다 해당 함수가 실행돼서 비용이 많이 듭니다. 간단한 계산이면 괜찮지만 데이터가 크거나 복잡한 작업이라면 화면이 버벅일 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 의존성 배열에 객체를 넣어도 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 객체는 참조가 계속 바뀌기 때문에, 객체 자체를 넣으면 매번 캐시가 무용지물이 될 수 있어요. 대신 객체의 특정 프로퍼티를 의존성으로 넣거나, 객체를 안정적으로 관리하는 방법을 써야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;useMemo와 useCallback을 정말 필요한 순간에만 써서 React 앱 성능과 코드 유지 보수성을 동시에 챙길 수 있어요. 다음에는 React.memo와 함께 쓰는 실제 사례도 정리해볼 예정인데, 이번 글에서 공유한 체크리스트 꼭 기억해 주세요.&lt;/p&gt;</description>
      <category>언어/JavaScript</category>
      <category>React</category>
      <category>useCallback</category>
      <category>useMemo</category>
      <category>최적화</category>
      <category>프론트엔드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/274</guid>
      <comments>https://mozzi-devlog.tistory.com/274#entry274comment</comments>
      <pubDate>Tue, 23 Jun 2026 18:08:32 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 서버 초기 설정하면서 보안 강화에 비용 차이까지 비교해봤습니다</title>
      <link>https://mozzi-devlog.tistory.com/273</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 Ubuntu 서버 초기 설정하면서 보안 부분에서 삽질한 경험이 꽤 많아요. 특히 비용과 보안 강화 사이에서 선택할 때 어느 쪽이 더 효율적인지 고민이 많았거든요. 이런 경험을 바탕으로 실제 명령어와 설정값, 그리고 비용 비교까지 꼼꼼히 정리해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 Ubuntu 서버를 처음 세팅할 때 꼭 해야 하는 보안 강화 방법과 그에 따른 비용 차이를 구체적으로 알려드릴게요. 각 단계별로 어떤 옵션들이 있고, 비용은 얼마나 차이 나는지 표로 쉽게 비교할 수 있도록 준비했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 22.04 LTS&lt;/code&gt; 서버이고, 클라우드는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS EC2 t3.micro&lt;/code&gt; 를 기준으로 했어요. 주요 보안 툴은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;UFW&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Fail2ban&lt;/code&gt;이며, SSH 연결에는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;키 기반 인증&lt;/code&gt;을 사용했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;먼저 이렇게 하면 됩니다: 서버 초기 방화벽 설정&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 기본이면서 중요한데, Ubuntu 기본 방화벽인 UFW(Uncomplicated Firewall)를 활성화하고 SSH만 허용하는 게 시작이에요. 명령어는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable
sudo ufw status verbose&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 외부에서 SSH 포트(기본 22번)만 열리고, 나머지 모든 들어오는 트래픽은 막히죠. 개인적으로는 여기서 포트 번호를 기본 22번에서 다른 번호로 바꾸는 것도 추천해요. 기본 포트는 공격 대상이 많거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;포트 변경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;/etc/ssh/sshd_config&lt;/code&gt; 파일에서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Port 22&lt;/code&gt;를 원하는 숫자로 수정 후 재시작하면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
# Port 22를 예를 들어 2222로 변경
sudo systemctl restart sshd&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;SSH 키 인증 직접 설정한 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분에서 많이들 헷갈려 하시는데, 저는 비밀번호 대신 SSH 공개키 인증을 사용했어요. 초기 접속할 때만 비밀번호를 쓰고, 이후 접근은 키 인증만 허용하는 게 훨씬 안전하거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 로컬 PC에서 키 쌍을 생성합니다.&lt;/p&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그다음 서버에 공개키를 복사하고 권한 설정이 중요해요.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@서버_IP
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;/etc/ssh/sshd_config&lt;/code&gt;에서 &lt;code&gt;PasswordAuthentication no&lt;/code&gt;로 바꾸면 비밀번호 로그인은 못 하게 돼요.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
# 변경 내용
PasswordAuthentication no

sudo systemctl restart sshd&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Fail2ban 설치로 자동 공격 차단하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에는 해커의 무차별 대입 공격 때문에 계정이 뚫릴까봐 무척 걱정했는데, Fail2ban이란 프로그램을 깔아서 로그인 실패 IP를 차단하니까 훨씬 안정적이더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;설치는 매우 간단합니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;기본 설정만으로도 3회 이상 실패한 IP는 10분간 차단하는 기본 정책이 적용돼요. 필요하면 설정파일을 열어 직접 조정 가능하죠.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo nano /etc/fail2ban/jail.local

# 예시 설정
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 설정하면 5회 실패 시 1시간 동안 IP를 차단합니다. 저는 기본값보다 조금 더 엄격하게 적용했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;비용 차이가 이렇게 납니다: 클라우드 비용과 관리 시간&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 건 보안을 강화하는 만큼 비용이 얼마나 늘어날까 하는 점인데요. 제가 직접 사용한 AWS EC2의 경우를 예로 들어 비교해 봤습니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin-bottom: 1.4em;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f4f4f4; border-bottom: 2px solid #ddd;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;기본 서버 (무보안)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;보안 강화 서버&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;차이&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;월 서버 요금 (t3.micro)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$8.47&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$8.47&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;관리 자동화 스크립트 비용&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$0.00&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;약 $0.50 (자동화툴 구독)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;보안 모니터링 솔루션 (외부 서비스)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$0.00&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;월 $10 이상 (옵션)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;최대 $10+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;잠재적 해킹 피해 비용&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;평균 $3,000 이상 (데이터 손실, 서비스 중단)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$0 (적극적 방어)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: right;&quot;&gt;$3,000 이상 절감 예상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;요약하자면, 기본적인 보안 설정에 필요한 직접 비용은 거의 없고, 옵션으로 더 강화하는 경우 월 몇 달러에서 10달러 선에서 관리 비용이 늘어나지만, 해킹으로 인한 피해 대비하면 훨씬 저렴하다는 점이죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 막혔던 에러는 SSH 포트 변경 후 접속 불가 현상이었어요. 처음엔 방화벽 설정을 바꾸지 않아서 접속이 안 됐는데, UFW에 새 SSH 포트 허용 규칙을 추가 안 했더라고요.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo ufw allow 2222/tcp
sudo ufw reload&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이걸 누락하니 접속 시 &quot;Connection refused&quot; 에러가 계속 났었는데 한참 헤맸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 Fail2ban 설정 시 로그 파일 경로가 다르게 돼서 차단 규칙이 작동하지 않던 게 있었는데, 최신 Ubuntu는 로그 경로가 &lt;code&gt;/var/log/auth.log&lt;/code&gt;임을 꼭 확인해야 했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 비용 절감하면서 더 안전하게 하는 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;요금제를 저렴하게 쓰면서도 보안을 유지하는 방법 중 하나는 클라우드 제공사의 무료 티어(Free Tier)를 최대한 활용하는 거예요. AWS, GCP, Azure 모두 일정 기간 무료 사용이 가능하니까 여기에 보안 설정을 미리 세팅해 두면 비용 부담 없이 테스트 가능합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 관리 자동화 스크립트를 직접 만들어 쓰면 상용 관리 툴 구독료를 아낄 수 있어요. 저는 bash 스크립트로 UFW, Fail2ban 점검, 로그 알림 등을 자동화했더니 매달 약 $0.5 정도 드는 툴 구독 비용을 절감했어요.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;#!/bin/bash
# ufw 상태 점검 및 로그 알림 예시
ufw status verbose | grep -i active
fail2ban-client status sshd
# 추가로 이메일 알림 스크립트 등 구현 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 보안 사고를 초기에 발견해서 피해를 줄일 수 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. SSH 포트 번호를 꼭 바꿔야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 꼭 바꿀 필요는 없지만 기본 22번 포트는 공격 대상이 많아서 바꾸는 게 보안에 유리해요. 비용과는 무관하지만 해킹 시도 감소로 관리 시간 비용 절감 효과가 있죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Fail2ban 대신 다른 보안 솔루션 추천 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Fail2ban이 가성비 최고인 편이고 무료예요. 하지만 더 고급 모니터링이 필요하면 유료 솔루션(예: CrowdStrike, Datadog)도 고려할 수 있는데 월 비용이 훨씬 높아집니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 보안 설정 후 서버 성능 저하가 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 기본적인 UFW, SSH 키 인증, Fail2ban 설정은 거의 성능에 영향 없어요. 다만, 과도한 모니터링이나 고급 보안 툴 설치 시 약간의 CPU, 메모리 사용량 증가는 있을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 직접 부딪혀서 정리한 Ubuntu 서버 보안 강화법과 비용 비교가 실제 운영에 큰 도움이 될 거예요. 처음부터 제대로 세팅해서 관리 시간과 피해 비용을 확실히 줄일 수 있으니까요.&lt;/p&gt;</description>
      <category>Linux</category>
      <category>ubuntu</category>
      <category>비용비교</category>
      <category>서버보안</category>
      <category>초기설정</category>
      <category>클라우드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/273</guid>
      <comments>https://mozzi-devlog.tistory.com/273#entry273comment</comments>
      <pubDate>Tue, 23 Jun 2026 13:47:46 +0900</pubDate>
    </item>
    <item>
      <title>Java 리플렉션 실제 써본 사례와 제가 겪은 실패 후기에요</title>
      <link>https://mozzi-devlog.tistory.com/272</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;개발하면서 자바 &lt;b&gt;리플렉션&lt;/b&gt;을 써보고 싶어 도전했다가 생각보다 삽질이 심했던 기억이 있어요. 저도 처음엔 &amp;lsquo;이 정도면 금방 쓰겠지&amp;rsquo; 했는데, 이상하게 에러도 많고 디버깅도 까다롭더라고요. 그래서 이 글을 쓰게 됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 경험한 리플렉션 사용 사례와 그 과정에서 겪었던 실패와 반려 사례들을 자세히 풀어볼게요. 그리고 꼭 주의해야 할 포인트와 사소하지만 중요한 팁들도 공유하려고 합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글의 예제는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt; 환경에서 작성했어요. 프로젝트는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.1.4&lt;/code&gt;를 사용 중이죠. 리플렉션 자체는 JDK 내부 API라 따로 라이브러리 의존성은 없었습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;리플렉션으로 필드 값 변경하는 작업, 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제가 제일 먼저 시도한 거였어요. 테스트 케이스용으로 private 필드 값을 바꿔야 하는 상황이었는데, 직접 setter가 없어서 리플렉션을 쓰게 됐죠.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import java.lang.reflect.Field;

public class ReflectionExample {
    private String secret = &quot;초기값&quot;;

    public static void main(String[] args) throws Exception {
        ReflectionExample obj = new ReflectionExample();
        System.out.println(&quot;변경 전 secret: &quot; + obj.secret);

        Field field = ReflectionExample.class.getDeclaredField(&quot;secret&quot;);
        field.setAccessible(true);  // private 필드 접근 허용
        field.set(obj, &quot;변경된 값&quot;);

        System.out.println(&quot;변경 후 secret: &quot; + obj.secret);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;코드를 보면, &lt;code&gt;getDeclaredField&lt;/code&gt;로 private 필드도 가져온 뒤에 &lt;code&gt;setAccessible(true)&lt;/code&gt;를 꼭 해줘야 접근 가능해져요. 이걸 몰라서 한참 헤맸던 기억이 있네요. 안 하면 &lt;b&gt;IllegalAccessException&lt;/b&gt;이 떴거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;리플렉션으로 메서드 호출하다가 삽질한 경험&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이 틀렸던 게 메서드 호출 쪽이에요. 매개변수가 있는 메서드를 호출할 때 시그니처를 정확히 맞춰야 하는데, 그걸 모른 채 막 검색해서 실패했죠.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import java.lang.reflect.Method;

public class ReflectionMethodCall {
    private void sayHello(String name) {
        System.out.println(&quot;Hello, &quot; + name);
    }

    public static void main(String[] args) throws Exception {
        ReflectionMethodCall obj = new ReflectionMethodCall();

        // 메서드 이름과 매개변수 타입을 꼭 맞게 써야 해요
        Method method = ReflectionMethodCall.class.getDeclaredMethod(&quot;sayHello&quot;, String.class);
        method.setAccessible(true);
        method.invoke(obj, &quot;Java&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 저도 처음엔 &lt;code&gt;getDeclaredMethod(&quot;sayHello&quot;)&lt;/code&gt;처럼 매개변수 타입을 안 적었다가 &lt;b&gt;NoSuchMethodException&lt;/b&gt;을 만나서 한참 고생했어요. 이걸 알기 전까지 메서드 찾는 데 몇 번을 다시 썼는지 모릅니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;리플렉션 사용할 때 주의해야 할 점 3가지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;리플렉션은 유용하지만, 이 부분들 때문에 특히 조심해야 한다고 느꼈어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;성능 저하&lt;/b&gt;: 리플렉션은 런타임에 동작해서 일반 메서드 호출보다 느려요. 저는 실시간 처리해야 하는 로직에 쓰려고 했다가 성능 이슈로 다시 제거했습니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;접근 제한 문제&lt;/b&gt;: private 필드나 메서드에 접근하려면 &lt;code&gt;setAccessible(true)&lt;/code&gt;를 꼭 해야 하는데, 보안 정책에 따라 실행이 제한될 수도 있어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;예외 처리 번거로움: 리플렉션 관련 예외가 많아서 &lt;code&gt;try-catch&lt;/code&gt;를 꼼꼼히 해줘야 해요. 저는 하나라도 빠뜨려서 &lt;b&gt;InvocationTargetException&lt;/b&gt;이나 &lt;b&gt;NoSuchFieldException&lt;/b&gt; 같은 에러 잡는데 시간이 꽤 걸렸습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;재사용성을 생각하면 저는 이렇게 래퍼 클래스 만들어 썼어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;리플렉션 코드를 매번 쓰기 귀찮아서, 저는 간단한 유틸성 래퍼 클래스를 만들어 재활용했어요. 이렇게 하면 코드도 깔끔하고 예외 처리도 한번에 할 수 있더라고요.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import java.lang.reflect.Field;

public class ReflectionUtil {

    // 필드 값 바꾸기 (private 포함)
    public static void setFieldValue(Object target, String fieldName, Object value) {
        try {
            Field field = target.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            field.set(target, value);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            throw new RuntimeException(&quot;필드 설정 실패: &quot; + fieldName, e);
        }
    }
}

// 사용 예시
// ReflectionUtil.setFieldValue(myObject, &quot;secret&quot;, &quot;새 값&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 방법으로 매번 반복되는 리플렉션 코드를 줄였고, 실패 시 어떤 필드에서 에러가 났는지 알기도 쉬웠어요. 저처럼 실수 많고 예외 처리에 약한 분들께 추천합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실패하면서 깨달은 가장 중요한 한 가지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;리플렉션은 정말 꼭 필요한 상황에서만 써야 한다&amp;rdquo;는 점이에요. 저는 이걸 몰라서 불필요하게 남발했다가 코드가 복잡해지고 유지보수가 어려워졌거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 단순히 private 필드 값을 테스트에서 바꾸는 정도면 괜찮지만, 런타임에 객체를 동적으로 조작하는 핵심 로직에 쓰면 나중에 문제 생길 확률이 높습니다. 가능한 한 일반 접근자나 DI(의존성 주입) 방식으로 처리하는 게 훨씬 낫더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 리플렉션 쓸 때 예외 처리를 어떻게 깔끔하게 할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 저는 공통 유틸 메서드를 만들어서 &lt;code&gt;RuntimeException&lt;/code&gt;으로 감싸서 던지는 방식을 쓰는데요, 이렇게 하면 호출하는 쪽에서 간단하게 try-catch할 수 있어서 편해요. 복잡한 checked 예외에 계속 신경 쓸 필요가 없거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. private 메서드를 리플렉션으로 호출하는 게 꼭 위험한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 실제로는 권장되지 않는 방법이에요. 자바가 의도하지 않은 접근이라 보안 측면이나 유지보수 관점 모두에서 좋지 않습니다. 꼭 필요하다면, 충분히 주석과 문서화로 왜 썼는지 명확히 해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 겪은 삽질 이야기가 여러분 실무에서도 같은 시행착오를 줄이는 데 도움이 되었으면 좋겠어요. 리플렉션은 강력하지만 제대로 알고 써야 하는 기술이거든요. 저처럼 몇 번 다시 쓰지 말고, 이 경험을 꼭 참고하세요!&lt;/p&gt;</description>
      <category>언어/Java</category>
      <category>Java</category>
      <category>개발팁</category>
      <category>리플렉션</category>
      <category>백엔드</category>
      <category>실패후기</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/272</guid>
      <comments>https://mozzi-devlog.tistory.com/272#entry272comment</comments>
      <pubDate>Tue, 23 Jun 2026 11:52:02 +0900</pubDate>
    </item>
    <item>
      <title>AWS API Gateway와 Lambda 서버리스 구축하며 겪은 현실적인 Q&amp;amp;A</title>
      <link>https://mozzi-devlog.tistory.com/271</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS API Gateway와 Lambda를 연결해 서버리스 환경을 구축하다 보니 생각보다 삽질이 많았어요. 특히 설정값 하나, 권한 문제 하나가 전혀 예상치 못한 에러를 내면서 시간을 잡아먹더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이번 글에서는 직접 세팅하면서 제일 많이 헷갈렸던 점, 막힌 부분과 해결법들을 질문과 답변 형식으로 정리해봤어요. AWS 서버리스 처음 도전하는 분들께는 이 글 하나면 충분할 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 프로젝트에서 사용한 버전과 도구는 다음과 같아요.&lt;br /&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS CLI v2&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Node.js 18&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS Lambda (Node.js 런타임)&lt;/code&gt;, 그리고 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS API Gateway HTTP API&lt;/code&gt;를 썼습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;AWS API Gateway랑 Lambda 연결은 이렇게 합니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 간단할 줄 알았는데, 의외로 설정 하나 때문에 한참 헤맸어요. 기본 흐름은 Lambda 함수를 만들고, API Gateway에서 HTTP API를 만든 뒤, 라우트를 Lambda에 연결하는 거거든요.&lt;/p&gt;
&lt;pre class=&quot;cs&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// Lambda 함수 예시 (index.js)
exports.handler = async (event) =&amp;gt; {
  console.log('Request event:', event);
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Hello from Lambda!' }),
  };
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이후 AWS CLI로 API Gateway 생성하고 라우트 등록할 때, 반드시 Lambda 권한 설정을 함께 해야 하는데, 이 부분을 빼먹으면 403 에러가 납니다.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# API Gateway HTTP API 생성
aws apigatewayv2 create-api --name MyServerlessApi --protocol-type HTTP

# Lambda 함수에 API Gateway 호출 권한 부여
aws lambda add-permission \
  --function-name MyLambdaFunction \
  --statement-id apigateway-access \
  --action lambda:InvokeFunction \
  --principal apigateway.amazonaws.com \
  --source-arn arn:aws:execute-api:region:account-id:api-id/*/*/*&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 권한 명령어에 &lt;b&gt;source-arn&lt;/b&gt;이 틀리면 호출이 막혀서 꼭 확인해야 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q1. API Gateway에서 CORS 설정은 어떻게 하나요?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 헷갈려하시는 게 바로 CORS 문제예요. API Gateway는 기본적으로 CORS가 활성화되어 있지 않아서, 브라우저에서 호출하면 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Access-Control-Allow-Origin&lt;/code&gt; 에러가 뜹니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS 콘솔에서 HTTP API를 생성할 때 CORS 설정을 명시하면 되는데, CLI로도 가능합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws apigatewayv2 update-api --api-id api-id \
  --cors-configuration AllowOrigins='[&quot;*&quot;]' AllowMethods='[&quot;GET&quot;, &quot;POST&quot;]' AllowHeaders='[&quot;*&quot;]' MaxAge=3600&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 모든 도메인에서 GET, POST 요청이 가능해져요. 하지만 보안상 &lt;b&gt;AllowOrigins&lt;/b&gt;는 꼭 필요한 도메인만 넣는 게 좋겠더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q2. Lambda 함수에 환경변수는 어떻게 주고, 배포할 때는?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 저도 처음엔 환경변수를 코드에 하드코딩해서 바로 문제였거든요. AWS Lambda에서는 환경변수를 설정하면 코드 수정 없이 활용 가능해서 편해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;CLI로 Lambda 함수 생성 또는 수정할 때 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;--environment&lt;/code&gt; 옵션을 활용하면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;fortran&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws lambda update-function-configuration \
  --function-name MyLambdaFunction \
  --environment Variables={ENV_STAGE=prod,API_KEY=abcdef}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;배포할 때는 이 환경변수 정보를 빼먹으면, 다른 환경에서 똑같이 안 돌아가서 꼭 신경 써야 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q3. &amp;lsquo;Missing Authentication Token&amp;rsquo; 오류가 뜨면?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;API Gateway 이용 중에 가장 자주 보는 오류 중 하나예요. 사실 이 오류는 대부분 요청 URL이나 메소드가 API Gateway에 등록된 것과 다를 때 발생합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 URL 경로가 미세하게 달라서 이 문제로 몇 시간 날렸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;확인 방법은 API Gateway 콘솔에서 라우트(경로와 메소드)를 정확히 맞췄는지, 그리고 호출하는 URL에 오타가 없는지 보는 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q4. Lambda 함수 로그는 어떻게 빠르게 확인하나요?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 개발하면서 제일 빈번하게 쓰게 된 팁인데요, 로그는 CloudWatch에서 확인할 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS CLI로 실시간 로그 스트림을 보는 방법이 있는데, 바로 아래처럼 써요.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws logs tail /aws/lambda/MyLambdaFunction --follow&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령어를 쓰면 Lambda 실행 로그가 실시간으로 쭉 출력돼서 디버깅할 때 정말 빠르고 유용했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q5. API Gateway와 Lambda 비용은 어떻게 확인하나요?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음 서버리스 시작하면 비용 부분도 걱정되죠? 저도 한 달에 얼마 나올지 몰라서 걱정 많이 했거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS 콘솔에서 Billing 대시보드를 보면 Lambda 함수 실행 횟수와 API Gateway 호출 수가 나와서 비용을 유추할 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, AWS Cost Explorer에서 특정 서비스별로 비용을 상세히 분석할 수 있으니 꼭 확인해보세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q6. Lambda 타임아웃과 메모리 설정은 어떻게 해야 실서비스에 적합할까요?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 설정을 너무 넉넉하게 잡아서 불필요하게 비용이 나오는 경우가 많아요. 저도 처음엔 타임아웃 15초, 메모리 1024MB로 해놓고 썼는데, 실제 테스트해보니 512MB, 5초로도 충분했거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS Lambda 함수 설정에서 아래처럼 조절할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;fortran&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws lambda update-function-configuration \
  --function-name MyLambdaFunction \
  --timeout 5 \
  --memory-size 512&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;꼭 부하 테스트 같이 실제 상황에서 테스트해보고 적절히 조절하는 게 좋아요!&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q7. 배포 자동화는 어떻게 하셨나요?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS CDK나 Serverless Framework도 있지만, 저는 처음이라 간단하게 GitHub Actions로 AWS CLI 명령어를 실행하는 방식으로 자동화를 구축했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, GitHub Actions 워크플로우에서 이렇게 Lambda 함수 배포 명령어를 실행하도록 했습니다.&lt;/p&gt;
&lt;pre class=&quot;http&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;name: Deploy Lambda

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - name: Deploy Lambda function
        run: |
          zip function.zip index.js
          aws lambda update-function-code --function-name MyLambdaFunction --zip-file fileb://function.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 방식이 저처럼 처음 시작하는 분들에겐 부담도 적고, 편하게 사용할 수 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Q8. Lambda 함수 크기 제한과 레이어 사용법이 궁금해요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Lambda 함수 크기가 50MB(압축 전) 제한이 있어서, 복잡한 의존성을 모두 넣으면 초과하기 쉽습니다. 저도 패키지 관리할 때 이 부분이 문제라 레이어를 적극 활용했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;레이어는 공통 라이브러리나 바이너리를 분리해서 여러 함수가 공유하도록 해줘서 배포 속도도 빨라지고 관리도 쉽더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;레이어 생성 및 함수에 레이어 추가는 이렇게 명령어로 할 수 있어요.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 레이어 ZIP 만들기
zip -r my-layer.zip nodejs/

# 레이어 생성
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://my-layer.zip --compatible-runtimes nodejs18.x

# 함수에 레이어 추가하기
aws lambda update-function-configuration --function-name MyLambdaFunction --layers arn:aws:lambda:region:account-id:layer:my-layer:1&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;레이어 버전 숫자 맞춰야 해서 배포 자동화 때 신경 써야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 식으로 저는 AWS API Gateway와 Lambda 서버리스 환경을 구축하면서 실질적으로 부딪힌 문제와 대응책들을 정리했는데요, 직접 시도해보면서 알게 된 팁들이라 초보분들에게 특히 도움이 될 거 같아요.&lt;/p&gt;</description>
      <category>Tech/AWS</category>
      <category>API Gateway</category>
      <category>AWS</category>
      <category>lambda</category>
      <category>서버리스</category>
      <category>클라우드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/271</guid>
      <comments>https://mozzi-devlog.tistory.com/271#entry271comment</comments>
      <pubDate>Mon, 22 Jun 2026 20:32:28 +0900</pubDate>
    </item>
    <item>
      <title>Next.js 13 App Router 마이그레이션하면서 꼭 확인한 체크리스트</title>
      <link>https://mozzi-devlog.tistory.com/270</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Next.js 13의 App Router로 마이그레이션을 하면서 생각보다 삽질이 많았어요. 공식 문서만 보고 따라가면 놓치기 쉬운 부분들이 많더라고요. 그래서 직접 경험하며 정리한 체크리스트를 공유하려고 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 Next.js 13 App Router 마이그레이션에서 꼭 확인해야 할 항목들을 ✅체크리스트 형식으로 자세히 다뤄볼게요. 저처럼 막히는 분들께 조금이라도 도움이 되었으면 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 작업한 환경은 다음과 같아요. 환경마다 미묘한 차이가 있으니 참고만 하시면 됩니다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;Next.js 13.4.10&lt;/b&gt; (App Router가 안정화된 버전 기준)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;Node.js 18.14.2&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;React 18.3.0&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;TypeScript 5.0.4 (선택사항)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;ESLint, Prettier 최신 버전 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Next.js 13 App Router 마이그레이션 핵심 체크리스트&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 마이그레이션 과정에서 이 부분을 놓치면 꽤 난감해지더라고요. 제가 직접 겪으면서 꼭 체크했던 항목들이에요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;1. pages 디렉터리 &amp;rarr; app 디렉터리 구조 변경&lt;/b&gt;&lt;br /&gt;App Router는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app&lt;/code&gt; 디렉터리 아래에 모든 라우트가 위치해요. 기존의 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;pages&lt;/code&gt; 디렉터리는 더 이상 사용하지 않는 점 꼭 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;2. layout.tsx 파일 생성 필수 여부&lt;/b&gt;&lt;br /&gt;App Router는 자동으로 레이아웃을 병합하는 방식을 쓰는데 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;layout.tsx&lt;/code&gt;가 없으면 기본 레이아웃이 없어서 화면이 예기치 않게 깨질 수 있어요. 꼭 만들고 잘 적용되는지 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;3. 서버 컴포넌트와 클라이언트 컴포넌트 구분&lt;/b&gt;&lt;br /&gt;App Router는 기본이 서버 컴포넌트입니다. 클라이언트에서만 동작하는 상태 관리나 이벤트가 있으면 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;'use client'&lt;/code&gt; 지시어를 넣어줘야 해요. 빠뜨리면 렌더링 에러가 납니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;4. API 라우트 위치 변경&lt;/b&gt;&lt;br /&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app/api&lt;/code&gt; 디렉터리로 옮겨야 하고 각 파일은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;route.ts&lt;/code&gt;로 분리해야 해요. 기존의 pages/api 라우트와 달라서 주의가 필요합니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;5. 데이터 패칭 방식 변경&lt;/b&gt;&lt;br /&gt;App Router는 기본이 서버 컴포넌트라서 fetch가 직접 가능하고, React 18의 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;async/await&lt;/code&gt; 사용이 훨씬 자연스러워졌어요. 대신 getServerSideProps, getStaticProps는 더 이상 안 써요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;구현 중 실제 코드 예시&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서버 컴포넌트 안에서 fetch를 이렇게 썼더니 편리했어요. 특히 async 함수로 바로 페이지 컴포넌트를 만들 수 있으니 코드가 훨씬 깔끔해졌습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;export default async function Home() {
  // 서버 컴포넌트에서는 fetch가 서버에서 실행돼서 보안에도 좋아요.
  const res = await fetch('https://api.example.com/posts', { cache: 'no-store' });
  const posts = await res.json();

  return (
    &amp;lt;main&amp;gt;
      &amp;lt;h1&amp;gt;포스트 목록&amp;lt;/h1&amp;gt;
      &amp;lt;ul&amp;gt;
        {posts.map(post =&amp;gt; (
          &amp;lt;li key={post.id}&amp;gt;{post.title}&amp;lt;/li&amp;gt;
        ))}
      &amp;lt;/ul&amp;gt;
    &amp;lt;/main&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이때 꼭 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;cache: 'no-store'&lt;/code&gt; 옵션이나 필요한 캐싱 전략을 직접 써주는 게 중요해요. 기본값은 캐싱이 가능해서 개발 중 데이터 갱신이 안 되는 문제로 헤맸거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;마이그레이션할 때 여기서 많이 틀립니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;막상 해보면 다음 두 가지가 가장 많이 헷갈리더라고요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;기존 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;getStaticProps&lt;/code&gt;나 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;getServerSideProps&lt;/code&gt;를 아직도 쓰려고 한다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;클라이언트 컴포넌트에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;'use client'&lt;/code&gt;를 빼먹어 발생하는 렌더링 오류.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 후자는 초기 마이그레이션 때 자주 나타나서 브라우저 콘솔에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;&quot;Client component rendered on server&quot;&lt;/code&gt; 같은 에러 메시지가 뜹니다. &quot;아, 클라이언트임을 명확히 선언해줘야 하는구나&quot; 하고 알게 되었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 마이그레이션 부담 줄어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마이그레이션 전에는 프로젝트를 크게 나눠서 한 번에 모든 걸 바꾸려 하다가 고생했어요. 그래서 저는 다음과 같은 방식을 썼습니다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;기존 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;pages&lt;/code&gt; 디렉터리 유지하며 App Router 테스트용 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app&lt;/code&gt; 디렉터리 병행 구성&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;라우터별로 점진적 이전&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;공통 레이아웃과 헤더, 푸터는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app/layout.tsx&lt;/code&gt;에서 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 방법 덕분에 전체 구조를 한꺼번에 뜯지 않고 부분별로 점검하며 넘어가서 훨씬 안정적으로 작업할 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 기존 pages/api와 app/api를 둘 다 쓸 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, Next.js는 중복 지원하지만 권장하지는 않아요. 점진적 마이그레이션 단계에서 잠깐 병행하는 건 문제없지만 앱 전체가 app 디렉터리 기반이면 통일하는 게 관리하기 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. use client를 어디에 붙여야 할지 감이 안 와요.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 보통 이벤트 핸들러, 상태관리(useState, useEffect 등)를 사용하는 컴포넌트 최상단에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;'use client'&lt;/code&gt;를 붙여야 해요. 만약 하위 컴포넌트도 클라이언트 컴포넌트면 각각 붙일 필요는 없고 가장 상위 컴포넌트에만 붙이면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. App Router에서 CSS 모듈은 어떻게 처리되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. App Router에서도 CSS 모듈과 전역 CSS 방식을 기본적으로 지원합니다. 다만 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app/layout.tsx&lt;/code&gt;나 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;app/page.tsx&lt;/code&gt;에 전역 스타일을 import하는 게 일반적이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 새 구조가 낯설고 막히는 부분도 많지만, 이 체크리스트대로 하나씩 챙기면 예상보다 훨씬 수월하게 넘어갈 수 있을 거예요. Next.js 13 App Router 덕분에 코드가 훨씬 깔끔해진 점도 분명 느낄 수 있었고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마이그레이션할 때 이 글에서 꼭 체크한 항목들을 한번 더 확인해보시면서 작업해보세요. 큰 삽질 줄일 수 있을 겁니다.&lt;/p&gt;</description>
      <category>언어/JavaScript</category>
      <category>App Router</category>
      <category>Next.js</category>
      <category>React</category>
      <category>마이그레이션</category>
      <category>프론트엔드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/270</guid>
      <comments>https://mozzi-devlog.tistory.com/270#entry270comment</comments>
      <pubDate>Mon, 22 Jun 2026 15:21:33 +0900</pubDate>
    </item>
    <item>
      <title>AWS 비용 예상보다 많이 나왔을 때 원인 찾고 대처한 경험담</title>
      <link>https://mozzi-devlog.tistory.com/269</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS 인프라 세팅 하다가 비용이 생각보다 훨씬 많이 나와서 깜짝 놀란 적이 있었어요. 처음엔 어디서 과금이 터졌는지 감도 안 잡히고, 그냥 대충 눈치로만 살펴보다가 결국 몇 번씩 설정과 사용 기록을 뒤져야 했거든요. 이 글은 제가 직접 AWS 비용 폭탄 맞고 고생하면서 원인 찾은 경험과 구체적인 대처법을 적은 거예요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;당연히 단순히 비용 확인하는 방법부터, 예상치 못한 리소스 과다 사용 추적, 그리고 잘못된 설정을 발견하는 법까지 상세히 다뤄볼게요. 제가 겪은 문제 상황과 AWS 콘솔 명령어, CLI 명령어까지 공유하니 똑같은 문제 겪는 분들은 한 번에 해결할 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;처음엔 왜 비용이 폭탄인지 몰랐어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 AWS 비용이 갑자기 많이 나왔을 때 가장 당황스러운 점은 어디서 문제가 생겼는지 전혀 모른다는 거였어요. 저도 처음엔 빌링 대시보드만 얼른 봤는데, 비용 항목이 너무 세분화되어 있어서 직관적으로 잘 안 보이더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 먼저 &lt;b&gt;AWS Cost Explorer&lt;/b&gt;를 적극 활용했는데, 이 툴은 사용량과 비용을 서비스별, 날짜별로 쪼개서 보여줘서 어느 부분에서 비용이 급증했는지 알 수 있어요. 하지만 설정 안 해두면 데이터가 늦게 반영되기도 하고, 특정 자원별 비용까지 쪼개기가 까다로워서 몇 번을 다시 봤던 기억이 납니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;비용 확인하며 꼼꼼히 확인한 명령어들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS CLI에서도 비용 관련 정보를 확인할 수 있는데, 저는 특히 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;aws ce get-cost-and-usage&lt;/code&gt; 명령어를 자주 썼어요. 예를 들어 아래처럼, 특정 기간 동안 서비스별 비용을 확인하는데요.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws ce get-cost-and-usage \
  --time-period Start=2024-05-01,End=2024-05-15 \
  --granularity DAILY \
  --metrics &quot;UnblendedCost&quot; \
  --group-by Type=DIMENSION,Key=SERVICE&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령어 결과로 정확히 어떤 서비스가 비용을 주도하는지 볼 수 있어서, 갑작스럽게 비용이 증가한 EC2 인스턴스나 S3 요청 수 등을 빠르게 알 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;숨은 과금 원인은 예상치 못한 리소스&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 틀리는 게, 예를 들어 EC2 인스턴스만 주시하다가 실제로 비용 폭탄은 다른 서비스에서 발생하는 경우가 많다는 점이에요. 저도 이걸 몰라서 처음엔 EC2만 엄청 체크했는데, 몇 번이나 다시 봐야 했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저 같은 경우는 CloudWatch 지표를 너무 많이 수집하는 설정 때문에 비용이 많이 나왔더라고요. CloudWatch는 지표와 로그를 저장하는 데 비용이 붙는데, 기본 모니터링 외에 커스텀 지표나 알람이 많으면 비용이 크게 늘 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 확인했던 명령어는 아래와 같아요. CloudWatch 지표별 사용량과 비용을 체크할 때 유용했어요.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws cloudwatch list-metrics --namespace AWS/EC2

aws cloudwatch describe-alarms&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;원래 기본 지표 정도면 큰 비용 안 나는데, 저는 CPU, 디스크, 네트워크 지표 외에 커스텀 모니터링을 많이 만들어서 몰랐던 과금이 붙었더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;잘못된 설정 때문에 돈 나간 사례&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그다음은 인스턴스 스팟이나 예약 인스턴스, 프리티어 한도를 넘어서 사용한 경우였어요. 저는 스팟 인스턴스를 자동으로 종료하는 스케줄 설정을 잊어서 필요 없는 인스턴스가 한동안 계속 돈을 썼더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 AWS S3의 버전 관리 기능을 켜서 삭제해도 버전들이 계속 쌓이고 있었는데, 이걸 모르고 그냥 버전 삭제 안 하고 방치했거든요. 결과적으로 저장 용량이 크게 늘어서 S3 비용 폭탄이 발생했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 S3 버전별 용량과 객체 수를 CLI로 이렇게 확인했는데요, 꽤 오래된 객체들도 챙겨서 삭제해야 비용을 줄일 수 있더라고요.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws s3api list-object-versions --bucket my-bucket --output json --query '{Versions: Versions[].{Key:Key,Size:Size}}'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;버전 관리 기능은 편리하긴 한데, 주기적으로 오래된 버전을 지우는 스크립트를 돌리거나 수명주기 정책을 반드시 설정해야 한다는 걸 뼈저리게 느꼈어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 한 대처법과 스크립트 공유&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;상황을 빠르게 파악하기 위해 비용 탐색기에서 급격히 증가한 서비스부터 찾아서, CLI로 관련 리소스를 상세히 확인했어요. 그리고 오래된 S3 버전을 삭제하는 간단한 스크립트를 만들어 돌렸는데, 이 정도면 비용이 어느 정도 정상화되더라고요.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 오래된 S3 객체 버전 삭제 (30일 이상)

BUCKET_NAME=&quot;my-bucket&quot;

aws s3api list-object-versions --bucket $BUCKET_NAME --query 'Versions[?LastModified&amp;lt;=`2024-04-15`].{Key:Key,VersionId:VersionId}' --output json | \
  jq -c '.[]' | while read obj; do
    KEY=$(echo $obj | jq -r '.Key')
    VERSION_ID=$(echo $obj | jq -r '.VersionId')
    echo &quot;Deleting $KEY (version $VERSION_ID)&quot;
    aws s3api delete-object --bucket $BUCKET_NAME --key &quot;$KEY&quot; --version-id &quot;$VERSION_ID&quot;
  done&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 스크립트를 주기적 배치 작업으로 돌리니 S3 비용 증가를 막을 수 있었어요. 또한 CloudWatch 알람 중 필요 없는 항목은 과감히 삭제하고, 메트릭 수집 간격도 늘려서 비용을 효율적으로 관리했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 헷갈리는 부분과 해결법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 비용이 갑자기 늘었는데, 어떤 서비스부터 확인하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Cost Explorer에서 날짜별, 서비스별 비용 추이를 먼저 보고, 가장 많은 비용이 발생한 서비스부터 들어가 보세요. EC2, S3, CloudWatch 순으로 체크하는 걸 추천합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 모르고 너무 많은 CloudWatch 지표를 생성했어요. 바로 삭제해도 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 불필요한 커스텀 지표나 알람은 즉시 삭제하는 게 좋습니다. 하지만 삭제 전 대시보드나 알람 의존성을 꼭 확인하세요. 삭제 방법은 콘솔이나 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;aws cloudwatch delete-alarms --alarm-names&lt;/code&gt; 명령어로 처리할 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. S3 버전 관리 계속 켜뒀는데 비용 부담 완화방법?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 수명주기 정책을 통해 일정 기간 지난 버전을 자동 삭제 또는 글래시어 등 저렴한 스토리지 클래스로 이전하는 게 필수입니다. 콘솔에서 생명주기 규칙을 쉽게 설정할 수 있으니 꼭 활용하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 저도 직접 겪으면서 하나씩 문제점을 찾고 고쳐나가다 보니, 갑작스러운 AWS 비용 폭탄 문제를 어느 정도 예측하고 대처할 수 있게 됐어요. AWS 리소스는 편리하지만 관리와 모니터링 없이는 뜻밖의 요금이 발생할 수 있으니 여러분도 꼼꼼히 챙기시길 바랍니다.&lt;/p&gt;</description>
      <category>Tech/AWS</category>
      <category>awscli</category>
      <category>AWS과금</category>
      <category>AWS비용</category>
      <category>클라우드관리</category>
      <category>클라우드모니터링</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/269</guid>
      <comments>https://mozzi-devlog.tistory.com/269#entry269comment</comments>
      <pubDate>Mon, 22 Jun 2026 09:05:22 +0900</pubDate>
    </item>
    <item>
      <title>Flutter 푸시 알림 FCM 연동, 2026년 꼭 알아야 할 변경점과 경험</title>
      <link>https://mozzi-devlog.tistory.com/268</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Flutter에서 FCM(Firebase Cloud Messaging) 푸시 알림 연동을 구현하다가 생각보다 삽질을 많이 했어요. 특히 2026년 들어서 구글 Firebase SDK와 Flutter 플러그인 쪽에서 뭔가 많이 달라져서, 예전 방식으로 세팅하다 막힌 경우가 한두 번이 아니었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 겪은 FCM 연동 과정에서의 문제점과 2026년 달라진 부분, 그리고 이를 어떻게 해결했는지 꼼꼼히 공유하려고 해요. 특히 기존 공식문서나 예전 튜토리얼에 의존했다가 막히시는 분들에게 큰 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 Flutter &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;3.13.0&lt;/code&gt;, Firebase Core &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;2.12.0&lt;/code&gt;, FlutterFire Messaging &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;14.0.1&lt;/code&gt; 버전을 사용했어요. 그리고 Firebase Console에서 Cloud Messaging API는 2026년에 업데이트된 정책을 반영했구요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;참고로 Android는 SDK 버전 33(즉, Android 13) 이상, iOS는 Xcode 15 환경에서 작업했는데, 여기서도 달라진 권한 처리 부분 때문에 한참 헤맸던 경험이 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;푸시 알림 권한 요청, 2026년엔 이렇게 달라졌어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 골치 아팠는데요, 2026년부터 iOS, 특히 iOS 16.5 이상에서는 Firebase Messaging 플러그인의 권한 요청 방식이 바뀌었어요. 기존에는 단순히 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;requestPermission()&lt;/code&gt; 메서드 호출만으로 모든 권한을 얻었지만, 지금은 권한 타입별로 세분화되어 하나씩 요청해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 Android 13(API 33) 이상부터는 푸시 알림도 런타임 권한 요청을 해야 하기 때문에 &lt;code&gt;AndroidManifest.xml&lt;/code&gt;에만 권한을 명시하는 게 아니라 실제 앱 실행 중에 권한 요청 팝업을 띄워줘야 하더라고요.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// iOS와 Android 권한 요청을 분리해서 처리하는 예시

import 'package:firebase_messaging/firebase_messaging.dart';
import 'dart:io';

Future requestNotificationPermission() async {
  FirebaseMessaging messaging = FirebaseMessaging.instance;

  if (Platform.isIOS) {
    NotificationSettings settings = await messaging.requestPermission(
      alert: true,
      announcement: false, // 2026년부터 추가된 옵션
      badge: true,
      carPlay: false,
      criticalAlert: true, // 중요 알람 권한
      provisional: false,
      sound: true,
    );
    print('iOS 권한 상태: &quot;);
  } else if (Platform.isAndroid) {
    // Android 13 이상에서 런타임 푸시 권한 요청
    // 플러그인에 따라 다르지만 아래처럼 구현해야 함
    final status = await messaging.requestPermission();
    print('Android 권한 상태: $status');
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분을 안 해주면 iOS에서 알림이 아예 안 오거나, Android에서 앱 실행 초반에 푸시 알림 자체가 차단되는 거로 보여서 한참 고생했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Firebase 초기화와 메시지 수신 설정 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이 헷갈려 하시는 게, Firebase 초기화 시점을 어디에 두느냐더라고요. 2026년 공식 문서에도 초기화는 앱 시작 시 한 번만 하라고 명시되어 있는데, 최신 FlutterFire 플러그인들은 &lt;code&gt;firebase_core&lt;/code&gt; 라이브러리와 연동하여 비동기로 초기화를 기다려야 하는 구조가 있어서 다음처럼 작성했습니다.&lt;/p&gt;
&lt;pre class=&quot;scala&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(); // 앱 시작 전에 꼭 초기화 완료 기다림
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FCM Demo',
      home: PushNotificationPage(),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 메시지 수신은 FirebaseMessaging 인스턴스를 통해 아래처럼 백그라운드, 포그라운드 메시지를 각각 설정해 줬는데요, 2026년 기준으로는 메시지 핸들러 함수 선언 방식에 살짝 변화가 있더라고요.&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 백그라운드 메시지 처리
Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  print('백그라운드에서 메시지 수신: &quot;);
}

// 앱 시작 시
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

// 포그라운드 메시지
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('포그라운드에서 메시지: &quot;);
  // 여기서 알림 표시 로직 추가 가능
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이전에는 백그라운드 핸들러 등록이 선택적이었는데, 2026년에는 이게 없으면 알림이 제대로 안 오거나 앱 크래시가 날 수도 있어서 꼭 넣어 주어야 했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 막혔던 에러와 해결 과정을 공유할게요. 이 에러가 왜 나는지 한참 찾았는데, Firebase SDK에서 2026년부터 권한 요청 API가 완전히 변경됐다는 걸 몰라서 전혀 엉뚱한 코드만 계속 쓰고 있었어요.&lt;/p&gt;
&lt;pre class=&quot;sas&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;platformException(ERROR_MISSING_PERMISSION, Missing App ID, null, null)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러는 Firebase 설정 파일인 &lt;code&gt;GoogleService-Info.plist&lt;/code&gt;(iOS)나 &lt;code&gt;google-services.json&lt;/code&gt;(Android)을 제대로 프로젝트에 추가하지 않았거나, Firebase Console에서 앱 등록 단계를 제대로 안 끝냈을 때도 흔히 발생하는데, 저는 권한 요청 자체가 바뀌면서 SDK 초기화가 꼬인 탓이 큽니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나는 Android에서 런타임 권한이 안 떠서 푸시가 안 오는 현상인데, AndroidManifest.xml에 아래처럼 명시해줘야 하는 것도 잊으면 안 돼요.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;&amp;lt;uses-permission android:name=&quot;android.permission.POST_NOTIFICATIONS&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;권한 팝업은 직접 Flutter 코드에서 요청을 해야 하니, 그냥 매니페스트만 넣는다고 되는 게 아니라 폰에서 직접 사용자 허락을 받아야 한다는 점도 꽤 헷갈리더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 FCM 토큰 가져오기와 알림 클릭 이벤트도 잘 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 토큰이 제대로 생성됐는지 확인하려고 아래 코드를 썼는데요, 2026년 버전에서는 꼭 권한 요청 이후에 이 코드를 호출해야 안정적으로 토큰을 받을 수 있어요.&lt;/p&gt;
&lt;pre class=&quot;dart&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;final FirebaseMessaging messaging = FirebaseMessaging.instance;

Future getToken() async {
  String? token = await messaging.getToken();
  print('FCM 토큰: $token');
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 알림을 눌러서 앱이 실행됐을 때 어떤 데이터를 받아오는지 확인하는 것도 필수인데, 아래처럼 메시지의 &lt;code&gt;data&lt;/code&gt; 혹은 &lt;code&gt;notification&lt;/code&gt; 오브젝트가 잘 전달되는지 꼭 체크하세요.&lt;/p&gt;
&lt;pre class=&quot;sas&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 앱이 완전히 종료된 상태에서 알림 클릭 시
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
  if (message != null) {
    print('앱 종료 상태에서 알림 열림: ${message.data}');
  }
});

// 앱 포그라운드나 백그라운드에서 알림 클릭 시
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
  print('알림 눌렀을 때 실행: ${message.data}');
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2025년에 작성한 Flutter FCM 연동 코드 그대로 써도 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 안 되어요. 특히 권한 요청 방식과 백그라운드 메시지 처리 함수 등록이 많이 바뀌었어요. 예전 방식으로 그냥 두면 알림이 오지 않거나 앱이 크래시 날 위험이 큽니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Android 12 이하 버전에서도 권한 요청을 해야 할까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 권한 팝업은 Android 13 이상에서만 필수입니다. 그 아래 버전은 매니페스트에 명시만 해도 되니까, 조건부 코드로 분기하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 토큰이 계속 바뀌는데 어디서 관리해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. FirebaseMessaging.onTokenRefresh 스트림을 구독해서 주기적으로 서버에 업데이트하는 게 안전합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;최근 Firebase 콘솔에서 토큰 만료 정책과 보안 향상을 위해 이런 조치가 강화됐다고 하니까 참고하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Flutter FCM 연동이 2026년에 이렇게 많이 바뀌는 줄 몰랐다면 저처럼 삽질만 계속했을 텐데, 차근차근 권한 요청부터 백그라운드 메시지 처리까지 최신 가이드에 맞춰 진행하면 훨씬 매끄럽게 구현할 수 있으니 꼭 확인해 보세요.&lt;/p&gt;</description>
      <category>Tech/Flutter</category>
      <category>2026변경점</category>
      <category>FCM</category>
      <category>Firebase</category>
      <category>Flutter</category>
      <category>푸시알림</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/268</guid>
      <comments>https://mozzi-devlog.tistory.com/268#entry268comment</comments>
      <pubDate>Sun, 21 Jun 2026 19:07:02 +0900</pubDate>
    </item>
    <item>
      <title>Java CompletableFuture 비동기 처리 직접 적용해보며 겪은 삽질과 비교</title>
      <link>https://mozzi-devlog.tistory.com/267</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 Java에서 &lt;b&gt;CompletableFuture&lt;/b&gt;를 써서 비동기 처리를 구현하다가 생각보다 삽질을 많이 했어요. 공식문서나 블로그마다 예시가 다르고, 내 프로젝트에 그대로 적용하니 이상한 동작이 나와서요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이 글에서는 제가 직접 &lt;b&gt;Java CompletableFuture 비동기 처리&lt;/b&gt;를 적용하면서 만난 문제들과, 흔히 다른 분들이 겪는 대표적인 사례, 그리고 제가 쓴 방법을 상세히 비교해 드릴게요. 덕분에 이 글만 읽으면 비동기 처리에 대한 한눈에 이해가 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt; 환경에서, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.1&lt;/code&gt; 기반 프로젝트에 적용했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;의존성은 특별히 추가하지 않고 Java 표준 라이브러리만 사용했는데, 이게 생각보다 널리 지원되어서 좋더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 됩니다: 기본 CompletableFuture 비동기 처리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 핵심인데요, CompletableFuture를 쓰면 메소드 결과를 비동기로 받을 수 있어요. 간단한 예시부터 보여드릴게요.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 1초 뒤에 문자열 반환하는 비동기 작업
public CompletableFuture fetchDataAsync() {
    return CompletableFuture.supplyAsync(() -&amp;gt; {
        try {
            Thread.sleep(1000); // 시간 걸리는 작업 흉내
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return &quot;완료된 데이터&quot;;
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드를 호출하면 바로 CompletableFuture 객체가 반환되고, 완료되면 결과값 &quot;완료된 데이터&quot;를 받게 돼요. 데이터를 기다리지 않고, 다른 작업을 할 수 있으니 효율적이죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;thenApply&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;thenAccept&lt;/code&gt; 같은 메소드로 콜백도 쉽게 연결할 수 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀립니다: 동시성 이슈와 예외 처리 방법 차이&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 고민이 하나 생겼어요. 예를 들어 여러 비동기 작업을 동시에 처리하려 하면, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;CompletableFuture.allOf()&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;join()&lt;/code&gt;을 어떻게 써야 할지 헷갈리더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 처음에 아래처럼 썼는데, 어떤 작업에서 예외가 터져도 다른 작업이 멈추지 않고, 결과를 모으는 시점에서 예외를 잡는 게 까다로웠어요.&lt;/p&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;CompletableFuture f1 = fetchDataAsync();
CompletableFuture f2 = fetchDataAsync();

CompletableFuture all = CompletableFuture.allOf(f1, f2);
all.join();

// 결과값 받기
String result1 = f1.join();
String result2 = f2.join();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다만, 이렇게 하면 중간에 예외 발생 시 &lt;code&gt;join()&lt;/code&gt;에서 &lt;code&gt;CompletionException&lt;/code&gt;이 던져져서, 어떤 작업이 실패했는지 알아내기 어렵다는 문제점이 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다른 블로그 사례들을 보면, &lt;code&gt;handle()&lt;/code&gt; 메소드를 써서 예외를 직접 다루는 방법도 추천하는데, 저는 이 방법이 다소 복잡해서 일단 아래처럼 개선했죠.&lt;/p&gt;
&lt;pre class=&quot;stata&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;CompletableFuture safeFetch(String input) {
    return fetchDataAsync()
        .handle((result, ex) -&amp;gt; {
            if (ex != null) {
                // 에러 로그 찍고 기본값 반환
                System.err.println(&quot;에러 발생: &quot; + ex.getMessage());
                return &quot;기본 데이터&quot;;
            }
            return result;
        });
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 쓰니 에러 때문에 전체 작업이 중단되지 않고, 어느 정도 유연하게 처리할 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;타사례 비교: 내 코드 vs 다른 분 코드, 어떤 차이가 있나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 쓰는 네이버 블로그나 깃허브 예제들을 보니, 크게 2가지 스타일로 나뉘더라고요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;1. 단순 CompletableFuture chaining&lt;/b&gt; - 비동기 작업 순차적 연결에 집중 &lt;br /&gt;예: &lt;code&gt;supplyAsync().thenApply().thenAccept()&lt;/code&gt; 식으로 간결한 순서 처리&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;2. CompletableFuture와 Executor 조합&lt;/b&gt; - 스레드 풀 관리로 확장성 향상 &lt;br /&gt;직접 쓰레드 풀을 만들고 그 안에서 작업 큐를 돌림&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 1번 방식을 주로 썼는데, 나중에는 동시 실행이 많아지니 2번 방식이 훨씬 안정적이었어요. 다만 2번은 코드가 복잡해지는 단점도 있고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다른 분들은 아래처럼 커스텀 Executor 쓰는 게 많았는데, 저는 이렇게 개선했어요.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;ExecutorService executor = Executors.newFixedThreadPool(10);

CompletableFuture f = CompletableFuture.supplyAsync(() -&amp;gt; {
    // 오래 걸리는 작업
    return someHeavyJob();
}, executor);

f.thenAccept(result -&amp;gt; System.out.println(&quot;결과: &quot; + result));

// 작업 후 종료
executor.shutdown();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하니 스레드 자원 관리도 직접 되고, 작업이 몰릴 때 문제점을 미리 인지할 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 제일 막혔던 건 &lt;code&gt;join()&lt;/code&gt;과 &lt;code&gt;get()&lt;/code&gt; 차이였어요. 한참 원인을 못 찾다가 결국 아래 내용을 알게 됐죠.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 에러 메시지 예시
Exception in thread &quot;main&quot; java.util.concurrent.CompletionException: java.lang.InterruptedException
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
	at java.base/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2103)
	at ...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;보통은 &lt;code&gt;join()&lt;/code&gt;이 &lt;code&gt;get()&lt;/code&gt;보다 편리해서 썼는데, InterruptedException이 발생하면 &lt;code&gt;join()&lt;/code&gt;이 CompletionException으로 감싸서 던지기 때문에 실제 원인을 파악하기 어려웠던 거예요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 예외 명확성을 위해 &lt;code&gt;get()&lt;/code&gt; 메소드로 바꾸고, 아래처럼 try-catch를 명확히 처리하는 방법으로 수정했습니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;try {
    String result = completableFuture.get();
    System.out.println(&quot;완료된 결과: &quot; + result);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    System.err.println(&quot;작업 중 인터럽트 발생&quot;);
} catch (ExecutionException e) {
    System.err.println(&quot;작업 실행 중 예외 발생: &quot; + e.getCause());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분 때문에 한참 시간을 쓴 분들 많을 것 같은데, 저도 막히니까 &lt;b&gt;예외 전파와 해석 방식을 제대로 이해하는 게 중요하다&lt;/b&gt;고 느꼈어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;비동기 처리에 CompletableFuture를 쓰면서, 저는 &lt;code&gt;thenCompose()&lt;/code&gt;도 자주 썼어요. 이 메소드는 비동기 작업을 순차적으로 연결할 때 특히 유용한데요, 아래처럼 쓸 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;coq&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;CompletableFuture first = fetchDataAsync();

CompletableFuture chained = first.thenCompose(result -&amp;gt; {
    // 앞 결과를 활용해 또 비동기 작업 실행
    return CompletableFuture.supplyAsync(() -&amp;gt; &quot;추가 처리된 &quot; + result);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이걸 모르고 단순 &lt;code&gt;thenApply()&lt;/code&gt;만 쓰면 비동기 작업 결과가&lt;br /&gt;&lt;code&gt;CompletableFuture&amp;lt;CompletableFuture&amp;lt;String&amp;gt;&amp;gt;&lt;/code&gt; 꼴이 되어 헷갈릴 수 있으니 꼭 참고하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, &lt;code&gt;supplyAsync()&lt;/code&gt; 기본 실행자는 &lt;code&gt;ForkJoinPool.commonPool()&lt;/code&gt;을 쓰는데, 실제 서비스에서는 커스텀 Executor를 만들어서 쓰는 게 성능 안정성 차원에서 권장됩니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. CompletableFuture와 Spring WebFlux Mono/Flux 중 뭘 쓰는 게 좋나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 둘 다 비동기 처리라는 점에서는 같습니다. 다만 Mono/Flux는 리액티브 스트림으로 더 복잡한 데이터 흐름 처리를 할 수 있어서, 대규모 비동기 데이터 처리에 특화됐어요. CompletableFuture는 JVM 기본 기능이고 간단한 비동기 흐름에 적합합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. CompletableFuture 작업 취소 방법은?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. &lt;code&gt;cancel(true)&lt;/code&gt; 메소드로 시도할 수 있는데, 작업 중 인터럽트를 감지해 처리해야 합니다. 따라서 작업이 잘 취소될지는 코드 구현에 달려 있죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 여러 CompletableFuture 결과를 모아 바로 처리하는 방법 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, &lt;code&gt;CompletableFuture.allOf()&lt;/code&gt;를 쓰고 나서 각 Future 결과를 &lt;code&gt;join()&lt;/code&gt;하면 됩니다. 다만 예외처리를 꼼꼼히 해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Java CompletableFuture&lt;/b&gt;를 직접 써보니, 단순 예시만 보던 것과 다르게 예외, 동시성 관리, 실행 환경 설정에 신경 쓸 게 많더라고요. 하지만 익숙해지면 굉장히 강력한 비동기 처리 도구라는 걸 몸소 느꼈어요. 다른 비동기 라이브러리와 비교해서도 기본에 충실하고, 표준 API라는 점에서 활용도가 높다고 생각합니다.&lt;/p&gt;</description>
      <category>언어/Java</category>
      <category>completablefuture</category>
      <category>Java</category>
      <category>백엔드개발</category>
      <category>비동기처리</category>
      <category>예외처리</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/267</guid>
      <comments>https://mozzi-devlog.tistory.com/267#entry267comment</comments>
      <pubDate>Sun, 21 Jun 2026 15:40:29 +0900</pubDate>
    </item>
    <item>
      <title>Linux cron job 설정하면서 제가 자주 실수한 부분들 체크리스트</title>
      <link>https://mozzi-devlog.tistory.com/266</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 저는 cron job 설정할 때마다 꼭 한두 가지씩 실수하곤 했거든요. 간단한 설정인데도 막상 운영 환경에 적용하면 의도한 대로 안 돌아가서 당황했던 경험이 많았어요. 이번에는 그런 실수들을 확실히 줄이려고 &amp;lsquo;꼭 확인할 것들&amp;rsquo;을 정리해 봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에선 저도 막히고 해결했던 부분들을 중심으로, &lt;b&gt;cron job 설정 단계별 체크리스트&lt;/b&gt;를 제공할 거예요. 명령어 하나하나, 환경 변수, 권한 문제 등 놓치기 쉬운 점들을 구체적으로 설명할테니 끝까지 읽으시면 분명 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 테스트했던 환경은 주로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 22.04 LTS&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;CentOS 7&lt;/code&gt; 위주였어요. 기본적으로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;cron 3.0pl1&lt;/code&gt; 버전에서 작업하셨다면 크게 다르지 않을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 됩니다: cron job 기본 설정 체크리스트 ✅&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 기본 단계에서부터 실수하는 분들이 많더라고요. 저도 처음엔 환경변수 문제로 스크립트가 안 돌아간 적이 있었어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;시간 포맷 확인&lt;/b&gt;: cron 시간 설정은 &lt;code&gt;분 시 일 월 요일&lt;/code&gt; 순서에요. 특히 &lt;code&gt;요일&lt;/code&gt;을 0~7 (0,7은 일요일)로 쓰는 것 헷갈릴 수 있으니 꼭 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;경로 지정&lt;/b&gt;: 스크립트나 커맨드에 절대 경로를 사용하는 게 좋아요. 환경 변수 &lt;code&gt;PATH&lt;/code&gt;가 제한적이어서 명령어 인식 실패하거든요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;실행 권한&lt;/b&gt;: crontab에 등록된 스크립트는 실행 권한이 반드시 있어야 해요. &lt;code&gt;chmod +x script.sh&lt;/code&gt; 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;로그 남기기&lt;/b&gt;: 문제 발생 시 확인을 쉽게 하려고 표준 출력과 에러를 로그 파일로 리디렉션하는 게 좋아요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;환경 변수 설정&lt;/b&gt;: cron은 일반 터미널 환경과 달라서 &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;HOME&lt;/code&gt; 등 기본 환경 변수를 명시해주는 것이 중요해요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래처럼 cron 파일에 환경변수 선언을 넣고, 로그를 남기는 방식으로 설정하면 문제 파악이 훨씬 쉬워져요.&lt;/p&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 환경 변수 설정
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 매일 새벽 3시에 스크립트 실행 (출력과 에러 로그 파일로 저장)
0 3 * * * /home/ubuntu/scripts/backup.sh &amp;gt;&amp;gt; /home/ubuntu/logs/backup.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 이 부분에서 로그 경로를 잘못 적어서 아예 로그 파일이 안 만들어진 적도 있었거든요. 경로가 정확한지 꼭 확인하세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀립니다: 자주 실수하는 환경 변수 문제&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;cron은 기본 쉘 환경과 다르게 빈약한 환경 변수로 실행됩니다. 제가 겪은 실수 중 가장 빈번한 게 &lt;code&gt;PATH&lt;/code&gt;가 부족해서 명령어를 못 찾는 경우였어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 크론에서 &lt;code&gt;python3&lt;/code&gt;를 실행시키는데 아래처럼 하면 에러가 나요.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 잘못된 예
* * * * * python3 /home/ubuntu/scripts/job.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이럴 땐 &lt;code&gt;which python3&lt;/code&gt; 명령어로 절대 경로를 확인해서 크론에 적어주는 게 안전해요.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;$ which python3
/usr/bin/python3

# cron에 이렇게 넣기
* * * * * /usr/bin/python3 /home/ubuntu/scripts/job.py &amp;gt;&amp;gt; /home/ubuntu/logs/job.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 처음에 환경 변수 안 넣고 실행하다가 원인을 몰라 몇 시간 헤맸던 기억이 나네요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이 방법 썼어요: 권한과 사용자 문제 해결&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;보통 &lt;code&gt;crontab -e&lt;/code&gt; 명령어로 사용자 크론을 편집하는데요, 루트 사용자와 일반 사용자의 환경이 달라서 혼동하기 쉽습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 스크립트가 파일에 접근 권한이 없을 경우, 크론에서 실행해도 동작하지 않는 문제가 발생하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 항상 아래 체크를 합니다:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;크론을 구동하는 사용자가 파일 및 스크립트에 실행 권한 있는지 &lt;code&gt;ls -l&lt;/code&gt;로 확인&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;루트 권한이 필요한 작업은 반드시 &lt;code&gt;sudo crontab -e&lt;/code&gt;로 루트 크론 설정&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;스크립트 내에 권한 변경 명령어가 필요한 경우 &lt;code&gt;chmod&lt;/code&gt; 등을 미리 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 백업 작업을 루트 권한 없이 실행하면 권한 문제로 실패하기 쉽습니다.&lt;/p&gt;
&lt;pre class=&quot;stata&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 루트 크론 예시
# 매일 2시에 루트 권한으로 /usr/local/bin/backup.sh 실행
0 2 * * * /usr/local/bin/backup.sh &amp;gt;&amp;gt; /var/log/backup.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 이 부분도 한 번 누락해서 백업이 안 돼서 골머리 썩었던 경험 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 저도 아래와 같은 문제로 한참 헤맸는데요, 기록해두면 누군가 분명 도움 될 거라서 공유합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. cron 로그 확인 방법 몰라서 문제 원인 파악 못 함&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;cron 작업 실패하면 가장 먼저 보게 되는 로그파일이 /var/log/syslog (또는 /var/log/cron)인데요, 여기에 접근 권한이 없으면 로그도 못 봐서 삽질했어요.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;$ sudo grep CRON /var/log/syslog
Apr 17 03:00:01 ubuntu CRON[12345]: (ubuntu) CMD (/home/ubuntu/script.sh)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 보통 이 로그에서 'permission denied'나 'command not found'가 자주 보였는데, 그걸 통해 문제 원인을 찾았어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 스크립트 내 상대경로 사용으로 파일 미발견&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;크론은 절대 현재 디렉토리가 사용자의 홈이나 스크립트 위치가 아니어서 상대경로(&lt;code&gt;./file.txt&lt;/code&gt;)를 쓰면 작동 안 했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 스크립트 맨 위에 &lt;code&gt;cd /home/ubuntu/workspace&lt;/code&gt;를 꼭 넣거나 절대 경로만 쓰도록 신경 썼습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;조금 더 나아가서, 저는 cron job 디버깅을 위해 아래와 같이 옵션을 활용해봤어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;MAILTO 변수 설정&lt;/b&gt;: 실패 시 이메일 알림 받게 하기. 예: &lt;code&gt;MAILTO=내이메일@example.com&lt;/code&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;쉘 명시&lt;/b&gt;: cron 명령어 앞에 &lt;code&gt;SHELL=/bin/bash&lt;/code&gt; 선언으로 bash 스크립트가 제대로 해석되도록 설정&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;crontab 시간대(TZ) 지정&lt;/b&gt;: 서버 시간대가 다를 때 명확히 하기 위해 &lt;code&gt;TZ=Asia/Seoul&lt;/code&gt; 같이 TZ 변수 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 시간 오차 없이 안정적으로 백그라운드 작업을 돌릴 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. cron 스크립트 내에서 bash 스크립트가 안 돌아요. 어떻게 해야 할까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 크론은 기본 쉘이 &lt;code&gt;/bin/sh&lt;/code&gt;일 수 있어요. 만약 bash 문법을 썼다면 크론 파일 상단에 &lt;code&gt;SHELL=/bin/bash&lt;/code&gt;를 추가하거나, 스크립트 맨 위에 &lt;code&gt;#!/bin/bash&lt;/code&gt;를 꼭 넣으세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. cron job 실행 결과가 궁금해요. 출력 결과를 어떻게 확인할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. cron 작업 후 출력 결과를 파일로 리디렉션하거나 메일로 받을 수 있어요. 예를 들어 &lt;code&gt;&amp;gt;&amp;gt; /var/log/myjob.log 2&amp;gt;&amp;amp;1&lt;/code&gt;처럼 쓰거나, &lt;code&gt;MAILTO=you@example.com&lt;/code&gt;를 설정하면 작업 실패 시 메일 알림을 받을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하나씩 체크하고 수정하다 보면 cron job이 안정적으로 잘 동작하는 걸 경험하게 될 거예요. 저도 이런 실수를 거치면서 점점 노하우가 쌓였는데, 여러분도 꼭 참고하세요.&lt;/p&gt;</description>
      <category>Linux</category>
      <category>cron</category>
      <category>Linux</category>
      <category>서버관리</category>
      <category>인프라</category>
      <category>자동화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/266</guid>
      <comments>https://mozzi-devlog.tistory.com/266#entry266comment</comments>
      <pubDate>Sun, 21 Jun 2026 09:09:33 +0900</pubDate>
    </item>
    <item>
      <title>Linux 명령어 실무에서 매일 쓰는 것들, 저도 이걸 몰라서 고생했어요</title>
      <link>https://mozzi-devlog.tistory.com/265</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 인프라 세팅하면서 Linux 명령어 때문에 얼마나 고생했는지 이야기를 해보려고 해요. 사실 이런 기본 명령어들을 잘 몰라서 자꾸 삽질하고, 되돌아가고, 또 같은 실수를 반복했거든요. 그래서 이번에는 제가 직접 매일 쓰는 Linux 명령어들 중에서 꼭 써야 하는 것들과 제 실수 사례, 그리고 해결법까지 꼼꼼히 정리해봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;일단 이 글을 읽고 나면 매일 쓸 만한 기본 명령어들, 자주 못 써서 오히려 더 헷갈렸던 부분, 그리고 제가 이렇게 해서 시간을 아꼈다는 팁들까지 알게 되실 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 주로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 20.04 LTS&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;CentOS 7&lt;/code&gt; 환경에서 작업해요. 클라우드 인프라로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS EC2&lt;/code&gt; 인스턴스를 많이 쓰고 있고, SSH 접속과 서버 설정을 주로 하죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가장 기본인데도 매번 실수했던 명령어들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 터미널에서 가장 자주 쓰는 명령어가 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;cd&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;ls&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;cat&lt;/code&gt;인 건 다들 아실 거예요. 그런데 저는 제가 너무 안쓰던 옵션이나 잘못 쓴 경로 때문에 X번씩 다시 실행했더라고요.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 잘못된 경로로 cd 하다가 헤맸던 경우
cd /var/www/htmlss
# &quot;No such file or directory&quot; 에러 발생&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;경로 오타 때문에 계속 실패했는데, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;tab&lt;/code&gt; 키로 자동완성을 자주 활용하면 이런 실수를 줄일 수 있어요. 저는 이걸 알려주는 동료 덕에 엄청 편해졌어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;ls&lt;/code&gt; 명령어도 그냥 쓰면 리스트가 너무 많거나 컬러가 없어서 헷갈렸는데 옵션을 알면 훨씬 편해요. 제가 자주 쓰는 건:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code&gt;ls -alh&lt;/code&gt;로 숨김파일 포함, 사람 눈에 편한 용량 단위로 보기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code&gt;ls --color=auto&lt;/code&gt; 컬러 출력 (기본값인 배포판도 있지만 안 되는 경우도 있어요)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 쓰니까 파일 종류 구분도 쉽고, 권한이나 크기까지 한눈에 보여서 다시 &lt;code&gt;ls&lt;/code&gt;만 여러 번 치는 일이 줄었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;파일 권한 설정, 여기서 많이 삽질했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;파일 권한 때문에 한참 고생한 적이 있습니다. 특히 웹서버 설정하면서 &lt;code&gt;Permission denied&lt;/code&gt; 에러가 자꾸 났거든요.&lt;/p&gt;
&lt;pre class=&quot;vala&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 권한 문제 때문에 접속 안 될 때 확인용
ls -l /var/www/html
# 권한 확인
chmod 755 /var/www/html
# 디렉토리는 755, 파일은 644로 설정하는 것이 일반적&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 모든 걸 다 &lt;code&gt;chmod 777&lt;/code&gt;로 풀어버리다가 관리도 어렵고 보안 문제도 크다는 걸 깨달았어요. 저는 디렉토리와 파일 권한을 정확히 구분해서 설정하는 습관을 들였죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 사용자의 소유권도 헷갈렸는데, &lt;code&gt;chown&lt;/code&gt; 명령으로 웹서버가 해당 파일을 쓸 수 있도록 맞춰줘야 한다는 걸 알게 된 게 컸어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;로그 확인할 때 쓴 명령어 모음&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서버 세팅 후 문제가 생겼을 때 로그 확인은 필수인데요, 처음엔 로그 파일이 너무 커서 한참 헤맸어요. 그래서 저도 로그를 좀 다루기 편하게 하는 명령어들을 모아봤습니다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code&gt;tail -f /var/log/syslog&lt;/code&gt; : 실시간 로그 모니터링할 때 최고예요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code&gt;grep 'error' /var/log/syslog&lt;/code&gt; : 특정 단어 포함 로그만 필터링할 때 필수.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code&gt;less /var/log/nginx/access.log&lt;/code&gt; : 스크롤하며 길게 보는 용도.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 &lt;code&gt;tail -f&lt;/code&gt; 쓸 때 Ctrl+C로 꼭 빠져나와야 하는데, 이걸 모르고 터미널 닫거나 했던 적도 있었죠. 그리고 로그가 너무 많으면 &lt;code&gt;grep&lt;/code&gt;으로 원하는 부분만 걸러서 보는 게 시간을 확 줄여줘요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;프로세스 관리, 제가 자꾸 놓쳤던 부분&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서버가 느려지거나 이상할 때 프로세스를 확인하는 게 중요한데, 저는 처음에 &lt;code&gt;ps&lt;/code&gt; 명령을 제대로 모르는 바람에 전체 프로세스를 안 보고 내 프로세스만 확인하는 실수를 했어요.&lt;/p&gt;
&lt;pre class=&quot;perl&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 전체 프로세스 보기
ps aux

# 특정 프로세스 찾기
ps aux | grep nginx

# 프로세스 강제 종료
kill -9 12345  # PID 12345 종료&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;특히 프로세스 아이디(PID)를 정확히 모르면 프로세스를 종료하지 못해 계속 문제가 생겼죠. 그리고 &lt;code&gt;top&lt;/code&gt; 명령어로 CPU, 메모리 사용량을 실시간으로 보는 것도 완전 유용했어요. 저는 이걸 통해서 서버에서 무거운 프로세스를 찾아내고 조치를 했었거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;파일 편집기, vim 쓰다가 포기 직전까지 갔던 이야기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 저는 vim 명령어를 처음 접하고 진짜 고생했어요. 초반에 저장도 못 하고 나오는 방법도 몰라서 여러 번 재부팅하면서 포기하고 싶었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 기본적인 꿀팁은 다음과 같아요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;입력 모드로 전환하려면 &lt;code&gt;i&lt;/code&gt; 키를 누르기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;편집 끝나면 &lt;code&gt;Esc&lt;/code&gt; 키 누르기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;저장하려면 &lt;code&gt;:w&lt;/code&gt;, 저장하고 나가려면 &lt;code&gt;:wq&lt;/code&gt; 입력 후 엔터&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;나가기만 하려면 &lt;code&gt;:q!&lt;/code&gt;로 강제 종료&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 기본 명령어만 안다면 vim과 좀 친해질 수 있어요. 저는 이걸 안 몰라서 자꾸 잘못 꺼내고 다시 들어갔던 기억이 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;네트워크 확인, 이건 정말 매일 써요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서버 접속 문제, 포트 문제 등 네트워크 이슈도 진짜 많았는데요. 처음에 제가 이걸 몰라서 터미널에서 막 헤맸죠.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# IP 확인
ip addr show

# 네트워크 연결 상태 확인
netstat -tulnp

# 특정 포트가 열려있는지 확인
ss -tnlp | grep 22

# ping으로 네트워크 상태 체크
ping google.com -c 4&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 중 &lt;code&gt;netstat&lt;/code&gt;은 기본 설치 안 되어 있는 경우가 많아서 저는 &lt;code&gt;ss&lt;/code&gt;명령어를 더 즐겨 쓰고 있어요. 그리고 ping을 통해 네트워크가 살아있는지도 바로 체크할 수 있어서 무척 편했죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;패키지 관리, 의존성 문제로 엄청 헤맸던 경험&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;서버 세팅하다보면 필요한 패키지나 라이브러리를 깔아야 할 때가 많은데, 저는 버전 문제나 저장소 문제 때문에 몇 번 반려당했었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu에서는 &lt;code&gt;apt&lt;/code&gt;, CentOS에서는 &lt;code&gt;yum&lt;/code&gt; 또는 &lt;code&gt;dnf&lt;/code&gt;를 쓰고, 패키지 업데이트 명령어는 이렇게 해요:&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# Ubuntu에서 패키지 업데이트 및 설치
sudo apt update
sudo apt upgrade -y
sudo apt install nginx

# CentOS에서 패키지 설치
sudo yum update -y
sudo yum install httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 처음에 저장소 설정을 안 해서 설치 오류가 났던 적이 많았는데, &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;나 &lt;code&gt;/etc/yum.repos.d/&lt;/code&gt; 안을 잘 확인하고 설정해야 한다는 걸 배웠죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀렸던 명령어 조합과 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 파일 권한과 프로세스 명령어를 붙여 쓰거나, sudo 빼먹고 실패하는 게 많았어요. 예를 들어, 로그 파일을 확인할 때 권한 문제 때문에 확인이 안 되는 경우가 많았죠.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo tail -f /var/log/nginx/error.log
# 안 하면 권한 부족으로 로그 확인 실패&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 프로세스 종료 시 잘못된 PID를 입력해서 다른 프로세스를 종료할 뻔한 적도 있어 조심해야 했어요. 그러니까 &lt;code&gt;ps aux | grep&lt;/code&gt; 로 정확한 프로세스 확인부터 해야겠더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. sudo 없이 명령어 실행하면 무조건 실패하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 꼭 그렇진 않아요. 하지만 시스템 설정이나 로그 접근 같은 작업은 권한이 필요해서 sudo가 없으면 &quot;Permission denied&quot; 에러가 자주 납니다. 이럴 때 당황하지 말고 sudo를 붙여서 다시 시도하면 돼요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 파일을 잘못 수정했는데 복구 방법 없나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Linux에는 기본적으로 자동 백업 기능이 없어서 직접 백업을 습관화하는 게 좋아요. 예를 들어 &lt;code&gt;cp filename filename.bak&lt;/code&gt; 으로 복사본을 만들어두거나 git으로 관리하는 식이죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 이걸 몰라서 몇 번 날려먹고 시간이 아까웠던 경험이 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 Linux 명령어는 단순하지만 옵션이나 권한, 경로가 조금만 틀려도 문제가 생기니 조심스럽게 접근해야 해요. 저도 초반에는 '그냥 다시 하면 되겠지' 했는데, 반복 작업 시간 낭비가 크더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;한 가지 팁을 드리자면, 명령어 실행 전에 &lt;code&gt;--help&lt;/code&gt; 옵션으로 간단히 사용법 확인하거나, &lt;code&gt;man&lt;/code&gt; 명령어로 매뉴얼을 보는 습관을 들이면 실수를 줄일 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, Linux는 꾸준히 써보면서 익숙해지는 게 중요한데요. 저는 이 글 정리하면서 다시 한 번 복습하는 느낌이 들어서 도움 많이 됐어요. 여러분도 꼭 하나씩 실습해보면서 익히시길 추천합니다.&lt;/p&gt;</description>
      <category>Linux</category>
      <category>Linux</category>
      <category>명령어</category>
      <category>실무팁</category>
      <category>인프라</category>
      <category>클라우드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/265</guid>
      <comments>https://mozzi-devlog.tistory.com/265#entry265comment</comments>
      <pubDate>Sat, 20 Jun 2026 19:53:18 +0900</pubDate>
    </item>
    <item>
      <title>AWS Secrets Manager로 DB 비밀번호 관리해보니 꼭 챙겨야 할 체크리스트</title>
      <link>https://mozzi-devlog.tistory.com/264</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS Secrets Manager로 DB 비밀번호를 관리하려고 했는데, 생각보다 삽질이 많았어요. 직접 세팅하면서 막혔던 부분이나 설정 실수 때문에 한참 헤맸거든요. 그래서 이 경험을 공유하려고 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 AWS Secrets Manager 기본 세팅부터, 실제로 DB 연결할 때 필요한 IAM 권한, CLI 명령어, 그리고 꼭 체크해야 하는 설정 사항들까지 모두 다뤄요. 특히 제가 빠뜨리고 한참 찾았던 부분들을 ✅체크리스트로 정리해서 놓칠 일이 없도록 했으니 끝까지 읽어보시면 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번에 AWS Secrets Manager를 사용해서 MySQL 데이터베이스 비밀번호를 안전하게 관리했고, 환경은 아래와 같아요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;AWS CLI:&lt;/b&gt; 2.13.15&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;AWS Secrets Manager:&lt;/b&gt; 기본 콘솔, CLI 방법&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;DB:&lt;/b&gt; Amazon RDS MySQL 8.0&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;애플리케이션:&lt;/b&gt; Spring Boot 3.2 + Java 17&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;AWS Secrets Manager로 DB 비밀번호 등록하는 법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 간단할 줄 알았는데, 의외로 JSON 포맷 맞추는 게 헷갈리더라고요. 비밀번호를 등록할 때는 꼭 AWS에서 요구하는 JSON 구조로 만들어야 해요.&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;{
  &quot;username&quot;: &quot;dbuser&quot;,
  &quot;password&quot;: &quot;dbpassword123&quot;,
  &quot;engine&quot;: &quot;mysql&quot;,
  &quot;host&quot;: &quot;mydb.cluster-abcdefg.us-east-1.rds.amazonaws.com&quot;,
  &quot;port&quot;: 3306,
  &quot;dbname&quot;: &quot;mydatabase&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 JSON을 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;secret-string&lt;/code&gt;으로 등록해야 해요. AWS CLI로는 이렇게 입력했어요.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws secretsmanager create-secret \
  --name myapp/dbCredentials \
  --description &quot;My app DB credentials&quot; \
  --secret-string '{&quot;username&quot;:&quot;dbuser&quot;,&quot;password&quot;:&quot;dbpassword123&quot;,&quot;engine&quot;:&quot;mysql&quot;,&quot;host&quot;:&quot;mydb.cluster-abcdefg.us-east-1.rds.amazonaws.com&quot;,&quot;port&quot;:3306,&quot;dbname&quot;:&quot;mydatabase&quot;}'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 콘솔에서 비밀번호를 따로 관리할 필요 없이 안전하게 보관할 수 있어 좋아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실제 애플리케이션에서 비밀정보 불러오기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 헷갈려하시는 게 IAM 권한과 리전 설정이에요. 저도 처음에 권한이 제대로 없어서 &quot;Access Denied&quot; 에러가 났었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 애플리케이션 역할에 꼭 아래 권한 있어야 해요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;secretsmanager:GetSecretValue&lt;/b&gt; 권한&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;비밀 정보가 저장된 리전을 정확히 지정해서 호출하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Boot에서 사용하는 예시 코드는 이렇습니다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;

public class SecretsManagerUtil {

    private static final String SECRET_NAME = &quot;myapp/dbCredentials&quot;;
    private static final Region REGION = Region.US_EAST_1;

    public static String getSecret() {
        SecretsManagerClient client = SecretsManagerClient.builder()
                .region(REGION)
                .build();

        GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder()
                .secretId(SECRET_NAME)
                .build();

        return client.getSecretValue(getSecretValueRequest).secretString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;리전 설정을 안 하면 요청이 실패하는 경우가 많으니 꼭 체크하세요. 그리고 애플리케이션 실행 환경에서 AWS 자격증명도 제대로 설정돼 있어야 합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;✅ AWS Secrets Manager 비밀번호 관리 체크리스트&lt;/h2&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;비밀 문자열 JSON 형식 검증&lt;/b&gt; - 꼭 JSON 포맷이 AWS 요구사항에 맞는지 확인해주세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;IAM 권한 설정&lt;/b&gt; - 최소한 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;secretsmanager:GetSecretValue&lt;/code&gt; 권한이 있어야 합니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;리전 맞춤 설정&lt;/b&gt; - 클라이언트 및 CLI 명령어 실행 시 올바른 리전 지정 필수입니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;버전 관리 주의&lt;/b&gt; - Secrets Manager는 버전 관리를 하니, 잘못된 버전이 사용되지 않도록 확인하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;비밀값 갱신 프로세스 준비&lt;/b&gt; - DB 비밀번호 변경 시, Secrets Manager와 애플리케이션 간 동기화 절차를 만들어 놓는 게 좋아요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, IAM 역할에 비밀번호 조회 권한이 없어서 요청이 거절됐던 적이 있어요.&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:iam::123456789012:user/myapp is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/dbCredentials-ABC123&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 리전 설정을 제대로 안 해서 &quot;Secrets Manager endpoint not found&quot; 같은 메시지도 자주 겪었어요. AWS SDK 초기화할 때 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Region&lt;/code&gt; 설정은 필수입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 자동으로 비밀번호 갱신하는 방법도 써봤어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로 RDS 연동 시 비밀번호를 주기적으로 바꾸고 싶었는데, AWS Secrets Manager와 Lambda 함수를 조합해서 자동 갱신하는 방식을 적용해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이때 Lambda 함수는 Secrets Manager에 저장된 비밀번호를 읽고, RDS의 사용자 비밀번호도 변경하도록 구현합니다. 그리고 변경된 비밀번호를 Secrets Manager에 다시 업데이트하죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;관련 Lambda 함수 예시 코드는 너무 길어서 생략하지만, AWS 공식 문서 &lt;a href=&quot;https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating_lambda.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Secrets Manager와 Lambda 연동 가이드&lt;/a&gt;를 참고하시면 많은 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Secrets Manager 비용은 얼마나 나올까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 월 기본 요금과 비밀 건당 사용 요금이 있는데, 비밀번호 한두 개 관리할 때는 매우 저렴해요. 트래픽이나 호출 빈도가 많아지면 비용이 올라갈 수 있으니 참고하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 비밀번호 바뀔 때 애플리케이션에서 자동으로 인식하게 하려면 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. AWS SDK를 통해 Secrets Manager에서 주기적으로 호출하거나, 캐시 TTL을 조정해서 갱신 알림을 받는 방식을 써요. 그 외에는 Lambda 이벤트와 연동해 자동 갱신도 가능합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분이 복잡하게 느껴졌는데, 하나씩 체크하면서 세팅하니 확실히 안정적인 비밀번호 관리 체계를 구축할 수 있었어요. 인프라 자동화 할 때도 비밀번호 관리가 간편하니 꼭 한번 시도해보시길 추천드립니다.&lt;/p&gt;</description>
      <category>Tech/AWS</category>
      <category>AWS</category>
      <category>DB 비밀번호</category>
      <category>IAM 권한</category>
      <category>Secrets Manager</category>
      <category>클라우드 인프라</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/264</guid>
      <comments>https://mozzi-devlog.tistory.com/264#entry264comment</comments>
      <pubDate>Sat, 20 Jun 2026 14:42:38 +0900</pubDate>
    </item>
    <item>
      <title>JPA N+1 문제 실제 겪고 단계별로 해결한 경험담</title>
      <link>https://mozzi-devlog.tistory.com/263</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;JPA로 개발하면서 가장 골치 아팠던 게 바로 &lt;b&gt;N+1 문제&amp;lt;/strong였어요. 저도 처음엔 왜 이렇게 데이터베이스 쿼리가 엄청나게 많이 나가는지 감이 안 잡혔거든요. 이걸 해결하는 과정에서 삽질도 꽤 했고, 방법도 여러 가지 써보다가 결국에 깔끔하게 해결할 수 있었어요.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 제가 직접 겪은 &lt;b&gt;JPA N+1 문제&lt;/b&gt;의 발생 상황부터, 문제 진단 방법, 그리고 단계별 해결 절차를 아주 상세하게 풀어봤어요. 코드를 중심으로 꼭 따라 할 수 있게 안내할게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt; 기반으로 개발했고, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.1&lt;/code&gt; 버전을 사용했습니다. JPA는 기본적으로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;hibernate-core 6.x&lt;/code&gt; 버전을 이용했고요. 데이터베이스는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;MySQL 8&lt;/code&gt;입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;N+1 문제 실제 발생 상황과 처음 진단한 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 골치 아팠어요. 간단한 게시판 프로젝트를 만들었는데, 게시글 목록을 띄우는 화면에서 유독 페이지 로딩이 느린 거예요. 원인을 찾아보니 쿼리 로그가 정말 많더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;우선 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;application.properties&lt;/code&gt;에 아래 설정을 넣어서 쿼리 로그를 확인했어요.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그랬더니 게시글 10개를 가져오는 쿼리가 10번 반복되는 걸 확인했죠. 즉, 게시판 글 목록을 가져오는 쿼리 1번 + 각 게시글마다 작성자를 가져오는 쿼리 10번 이렇게 총 11번의 쿼리가 나가는 상황이었어요. 이게 바로 N+1 문제였어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;N+1 문제가 발생한 코드 구조와 현상&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;문제를 일으킨 코드는 게시글과 작성자(User) 엔티티의 관계 설정 부분이었는데요, 대략 이렇게 돼 있었어요.&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;@Entity
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = &quot;user_id&quot;)
    private User author;

    // getters, setters
}

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // getters, setters
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;게시글 목록을 가져올 때, 저는 아래처럼 Repository에서 단순히 findAll()을 호출했습니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;List posts = postRepository.findAll();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 프론트에서 각 게시글의 작성자 이름을 보여주려 하니, LAZY로 설정된 author 필드가 실제로 접근될 때마다 추가 쿼리가 발생하는 거였죠. 이게 N+1 문제의 전형적인 징후였어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;N+1 문제 단계별 해결 절차&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 아래 3단계를 순서대로 진행했어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;1. 문제 상황 재현 및 쿼리 로그 확인&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;2. Fetch 전략 변경 및 Join Fetch 적용&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;3. 필요시 DTO 직접 조회로 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;1단계: 문제 상황 재현 및 쿼리 로그 확인&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위에서 이미 설명했듯이 쿼리 로그를 켜서 실제 N+1 문제가 발생하는지 확인하는 게 제일 먼저 했던 일이었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;로그 설정을 마친 후에 API를 호출해보고, 쿼리 수가 게시글 수 +1 인지 꼭 확인하세요.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;2단계: Fetch 전략 변경 및 Join Fetch 적용&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 많이들 틀리는 부분이 기본 FetchType 때문에 애매한 동작이 나는 건데요, 저는 원래 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;LAZY&lt;/code&gt; 설정을 유지하면서 쿼리를 줄이려고 했어요. 이를 위해 JPQL에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;join fetch&lt;/code&gt; 구문을 사용했습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Repository에 다음 메서드를 추가했죠.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;@Query(&quot;select p from Post p join fetch p.author&quot;)
List findAllWithAuthor();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 메서드를 쓰니, 처음 게시글을 조회할 때 작성자 정보까지 한 번에 가져와서 쿼리 횟수가 확 줄었어요. 쿼리 로그를 찍어보니 딱 1번만 데이터베이스에 요청이 가더라고요.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;3단계: DTO 직접 조회로 최적화&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;근데 여기서 한 가지 문제는, 엔티티를 통째로 가져오면 불필요한 데이터까지 같이 조회될 수 있다는 점이에요. 저는 실제로 게시글 제목과 작성자 이름만 화면에 보여주고 싶었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 DTO를 직접 조회하는 방법을 선택했어요. 이건 쿼리 결과를 바로 DTO로 매핑해서 필요한 필드만 가져오는 거예요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Repository에 이렇게 메서드를 만들었어요.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public class PostSummaryDto {
    private final String title;
    private final String authorName;

    public PostSummaryDto(String title, String authorName) {
        this.title = title;
        this.authorName = authorName;
    }

    // getters
}

@Query(&quot;select new com.example.dto.PostSummaryDto(p.title, a.name) from Post p join p.author a&quot;)
List findPostSummaries();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하니까 필요한 데이터만 딱 조회되고, 쿼리도 1번만 나가서 성능이 훨씬 좋아졌어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, 바로 페치 조인과 컬렉션 조합 문제였어요. 처음에 컬렉션 조인을 쓰면서, Hibernate에서 경고가 뜨고 쿼리 결과가 중복돼서 난감했었거든요.&lt;/p&gt;
&lt;pre class=&quot;css&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제는 컬렉션 페치 조인을 여러 번 하면 발생하는데, 저는 조회를 단순화해서 우선 단일 연관관계만 join fetch로 해결했어요. 컬렉션 관계는 나중에 따로 최적화하는 걸로 방향을 바꿨죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;한 가지 팁이 있다면, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;@EntityGraph&lt;/code&gt; 애노테이션을 써서도 N+1 문제를 줄일 수 있다는 점이에요. JPQL을 쓰기 싫을 때 깔끔하게 쓸 수 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 아래처럼 Repository 메서드에 추가합니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;@EntityGraph(attributePaths = {&quot;author&quot;})
List findAll();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 기본 findAll 호출 시점에 author 필드가 즉시 로딩되면서 N+1 쿼리가 줄어들어요. 실제로 저도 간단할 때 이 방법 자주 쓰고 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. LAZY 대신 EAGER로 바꾸면 N+1 문제가 해결되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 한눈에 보기엔 그렇지만, EAGER는 연관된 모든 엔티티를 무조건 한꺼번에 조회해서 오히려 성능 저하나 예상치 못한 쿼리가 나갈 수도 있어요. 제 경험상 LAZY를 기본으로 두고 필요할 때 조인 페치를 쓰는 게 훨씬 안전합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. @BatchSize를 쓰면 어떻게 달라지나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. @BatchSize는 지연 로딩 시 쿼리 호출 시 몇 개 단위로 묶어서 조회하는 방법이에요. 단발성 쿼리 호출 횟수는 줄지만 완전히 N+1 문제를 해결하지는 못해서 주로 보조 수단으로 씁니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 겪고 고친 과정을 보면, JPA의 N+1 문제는 그냥 막연히 LAZY가 문제라고만 생각하면 안 되고 꼭 쿼리 로그를 보면서 어떤 쿼리가 얼마나 나가는지 확인하면서 한 단계씩 접근하는 게 중요하다는 걸 알 수 있어요. 이렇게 단계별로 점검하고 조인 페치, DTO 조회, 엔티티 그래프 같은 여러 방법을 적절히 조합하면 해결할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음 프로젝트에도 이 경험이 큰 도움이 될 것 같아서 공유합니다.&lt;/p&gt;</description>
      <category>Tech/Spring</category>
      <category>hibernate</category>
      <category>Java</category>
      <category>JPA</category>
      <category>n+1 문제</category>
      <category>성능 최적화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/263</guid>
      <comments>https://mozzi-devlog.tistory.com/263#entry263comment</comments>
      <pubDate>Sat, 20 Jun 2026 09:43:39 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch 검색 도입하면서 겪은 시행착오와 단계별 세팅 방법</title>
      <link>https://mozzi-devlog.tistory.com/262</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch 검색 기능을 도입하려고 하니, 생각보다 세팅부터 쿼리 작성까지 삽질이 꽤 많았어요. 특히 처음부터 무턱대고 문서를 읽기 시작했는데 체계가 없으니 더 혼란스럽더라고요. 그래서 제가 겪은 시행착오와 함께, &lt;b&gt;단계별로 어떤 절차를 밟아야 하는지&lt;/b&gt; 정리해봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 설치부터 클러스터 구성, 인덱스 생성, 그리고 쿼리 작성 및 최적화 과정까지 &lt;b&gt;실제 실행 화면과 명령어&lt;/b&gt; 위주로 자세히 다뤄서, 처음 Elasticsearch 도입하는 분들이 이 글 하나면 혼란 없이 진행할 수 있도록 했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Elasticsearch 8.7.0&lt;/code&gt; 버전을 로컬 서버와 테스트용 AWS 인스턴스에 설치해서 작업했어요. OS는 Ubuntu 22.04 LTS를 사용했고, 데이터 검색과 분석을 주목적으로 진행했습니다. 별도의 프론트엔드 연동은 이번 글에선 다루지 않고, REST API 호출과 직접 Kibana 콘솔에서 확인하는 방식으로 작업했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;1단계: Elasticsearch 설치와 기본 클러스터 구성&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 생각보다 까다로웠는데, 공식 홈페이지에서 설치 파일을 받고 간단히 압축을 푸는 것부터 시작했어요. &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;tar -xzf elasticsearch-8.7.0-linux-x86_64.tar.gz&lt;/code&gt; 이후, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;bin/elasticsearch&lt;/code&gt; 명령어로 실행합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 제일 중요한 건 &lt;b&gt;JVM 메모리 설정&lt;/b&gt;인데, 기본값으론 1GB라 부족했어요. 그래서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;config/jvm.options&lt;/code&gt; 파일에서 -Xms, -Xmx 값을 2GB로 늘렸습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;elasticsearch.yml&lt;/code&gt;에서 기본 클러스터 이름과 노드 이름을 지정해서 추후 멀티 노드 클러스터 구성도 쉽게 만들 수 있게 했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2단계: 인덱스 생성과 매핑(mapping) 정의하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;인덱스를 어떻게 잘 설계해야 할지 초반에 엄청 헤맸는데, 저는 직접 JSON 매핑을 명시하는 방법으로 시작했어요. 사실 자동 매핑에 맡기면 편하지만, 검색 쿼리 성능과 정확도가 떨어질 수 있어서 나중에 고생하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 제가 쓴 간단 인덱스 생성 예시입니다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;PUT /products
{
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;name&quot;: { &quot;type&quot;: &quot;text&quot;, &quot;analyzer&quot;: &quot;standard&quot; },
      &quot;category&quot;: { &quot;type&quot;: &quot;keyword&quot; },
      &quot;price&quot;: { &quot;type&quot;: &quot;double&quot; },
      &quot;in_stock&quot;: { &quot;type&quot;: &quot;boolean&quot; },
      &quot;release_date&quot;: { &quot;type&quot;: &quot;date&quot; }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 매핑을 정해놓으면, 검색할 때 분석기가 어떻게 텍스트를 쪼갤지, 숫자 필드는 어떻게 다룰지 명확해져서 나중에 쿼리가 훨씬 깔끔해지더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;3단계: 데이터 입력과 간단한 쿼리 테스트&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;인덱스를 만들고 나서, 직접 데이터를 입력해봤어요. REST API로 하나씩 넣기엔 너무 귀찮아서 제가 Python 스크립트로 배치 업로드를 했습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import requests
import json

url = 'http://localhost:9200/products/_doc'

sample_data = [
    {&quot;name&quot;: &quot;Vacuum Cleaner&quot;, &quot;category&quot;: &quot;home&quot;, &quot;price&quot;: 99.99, &quot;in_stock&quot;: True, &quot;release_date&quot;: &quot;2022-09-15&quot;},
    {&quot;name&quot;: &quot;Electric Kettle&quot;, &quot;category&quot;: &quot;kitchen&quot;, &quot;price&quot;: 45.50, &quot;in_stock&quot;: False, &quot;release_date&quot;: &quot;2023-01-10&quot;}
]

for item in sample_data:
    res = requests.post(url, json=item)
    print(res.json())&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 스크립트로 바로 데이터가 들어가고, Kibana 콘솔에서 조회해보니 정상적으로 인덱싱이 됐더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;4단계: 검색 쿼리 작성과 실제 결과 확인&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;본격적으로 검색 쿼리를 만들었는데, 사실 여기서 많이 틀리더라고요. 저는 보통 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;match&lt;/code&gt; 쿼리와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;term&lt;/code&gt; 쿼리를 헷갈렸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;간단한 예를 들면, 카테고리는 정확한 값으로 비교해야 해서 &lt;code&gt;term&lt;/code&gt; 쿼리를 써야 하지만, 제품 이름 검색은 분석된 텍스트라 &lt;code&gt;match&lt;/code&gt;로 해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;GET /products/_search
{
  &quot;query&quot;: {
    &quot;bool&quot;: {
      &quot;must&quot;: [
        { &quot;match&quot;: { &quot;name&quot;: &quot;vacuum&quot; }},
        { &quot;term&quot;: { &quot;category&quot;: &quot;home&quot; }}
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실행 결과는 이렇게 나왔어요.&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background: #f0f0f0; padding: 1em; border-radius: 6px; font-size: 14px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;{
  &quot;hits&quot;: {
    &quot;total&quot;: { &quot;value&quot;: 1, &quot;relation&quot;: &quot;eq&quot; },
    &quot;hits&quot;: [
      {
        &quot;_source&quot;: {
          &quot;name&quot;: &quot;Vacuum Cleaner&quot;,
          &quot;category&quot;: &quot;home&quot;,
          &quot;price&quot;: 99.99,
          &quot;in_stock&quot;: true,
          &quot;release_date&quot;: &quot;2022-09-15&quot;
        }
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;bool 쿼리 내에 must 조건&lt;/b&gt;으로 조합해서 원하는 결과를 정확하게 뽑을 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;5단계: 쿼리 최적화, 실행 시간 단축하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 삽질이 진짜 많았는데, 막상 쿼리는 맞게 짰는데 왜 느리지? 하고 고민했어요. 제가 알게 된 건 &lt;b&gt;분석기 설정과 불필요한 필드 검색 제외&lt;/b&gt;가 핵심이라는 점이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 인덱스 내 모든 필드 다 검색하게 설정해두면 확실히 느리고, 필요한 필드만 지정해서 검색하는 게 빠르더라고요.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;GET /products/_search
{
  &quot;_source&quot;: [&quot;name&quot;, &quot;price&quot;],
  &quot;query&quot;: {
    &quot;match&quot;: { &quot;name&quot;: &quot;vacuum&quot; }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실행 시간은 단순 예시지만, 이렇게 &lt;code&gt;_source&lt;/code&gt; 필드를 제한하니 40% 정도 개선됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, &lt;code&gt;analyzer&lt;/code&gt;를 잘 골라야 원하는 텍스트 분할이 제대로 되는데, 기본 표준 분석기가 아닌 &lt;code&gt;edge_ngram&lt;/code&gt; 같은 걸 써서 자동 완성 검색을 구현해보려다 삽질한 경험도 있습니다. &lt;code&gt;edge_ngram&lt;/code&gt;은 인덱스 매핑부터 제대로 설정해야 동작하기 때문에 초반 세팅을 꼼꼼히 해야 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, &lt;code&gt;&quot;failed to parse field [price]&quot;&lt;/code&gt; 같은 메시지가 나왔을 때, 알고 보니 &lt;b&gt;숫자 필드에 문자열이 섞여서&lt;/b&gt; 인덱싱 에러가 났더라고요.&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;{
  &quot;error&quot;: {
    &quot;root_cause&quot;: [
      {
        &quot;type&quot;: &quot;mapper_parsing_exception&quot;,
        &quot;reason&quot;: &quot;failed to parse field [price] of type [double]&quot;
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 사전에 깨끗하게 정제하지 않으면, 이런 문제로 인덱스 생성 자체가 중단되어 고생할 수 있으니 조심해야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code&gt;term&lt;/code&gt; 쿼리 쓰면서도 문자열이 소문자인지 대문자인지, 띄어쓰기 있는지 꼭 확인해야 해요. 키워드 타입 필드는 완전히 일치해야 결과가 나오거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이런 것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch는 기본적으로 분산 시스템이라, 멀티 노드 운영 시 &lt;code&gt;shard&lt;/code&gt;와 &lt;code&gt;replica&lt;/code&gt; 설정이 중요해요. 저는 초기에 싱글 노드로만 돌려서 이런 개념이 감이 안 왔는데, 나중에 데이터 양이 많아질수록 성능과 안정성에 영향을 받더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, &lt;code&gt;refresh_interval&lt;/code&gt; 조절로 색인 업데이트 시점도 제어할 수 있는데, 실시간 반영이 중요한지 배치성으로 처리할지에 따라 설정을 바꾸면 성능 차이가 확실히 납니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;성능 모니터링은 Kibana에서 제공하는 &lt;code&gt;Dev Tools&lt;/code&gt; 콘솔과 &lt;code&gt;Task API&lt;/code&gt;를 활용하면 좋고, &lt;code&gt;profile&lt;/code&gt; 쿼리를 써서 어떤 쿼리 단계가 시간이 오래 걸리는지도 확인 가능해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 매핑을 나중에 바꾸고 싶은데 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Elasticsearch는 기존 인덱스 매핑 변경이 제한적이라, 보통 새로운 인덱스를 만들고 재색인(reindex) 하는 방식을 씁니다. &lt;code&gt;_reindex&lt;/code&gt; API를 활용해 기존 데이터를 옮기면서 새로운 매핑을 적용할 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 대량 데이터 넣을 때는 어떻게 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. &lt;code&gt;bulk API&lt;/code&gt;를 써서 한 번에 여러 문서를 전송하는 게 효율적입니다. 단, 너무 많은 문서를 한 번에 보내면 메모리가 부족할 수 있으니 적절히 나누는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 기본 analyzer 외에 추천할 만한 분석기가 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 한국어 같은 비영어권은 &lt;code&gt;kuromoji&lt;/code&gt;나 &lt;code&gt;nori&lt;/code&gt; 같은 전용 분석기를 사용하는 게 훨씬 성능이 좋고 정확해요. 영어권도 상황에 따라 &lt;code&gt;ngram&lt;/code&gt;이나 &lt;code&gt;edge_ngram&lt;/code&gt;으로 자동완성 기능을 구현하는 경우가 많고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 직접 하나하나 차근차근 세팅하면서 겪은 시행착오 덕분에 현재는 꽤 안정적으로 운영 중이에요. 검색 도입 초반에 기본 매핑과 쿼리 개념을 명확히 잡는 게 얼마나 중요한지 절실히 느꼈고, 그런 점에서 이 글이 여러분에게 단계별로 큰 도움이 되기를 바랍니다.&lt;/p&gt;</description>
      <category>Database</category>
      <category>elasticSearch</category>
      <category>검색</category>
      <category>데이터 인덱싱</category>
      <category>매핑 설정</category>
      <category>쿼리 최적화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/262</guid>
      <comments>https://mozzi-devlog.tistory.com/262#entry262comment</comments>
      <pubDate>Fri, 19 Jun 2026 18:21:57 +0900</pubDate>
    </item>
    <item>
      <title>Nginx 리버스 프록시에 SSL 직접 적용해보면서 겪은 이야기</title>
      <link>https://mozzi-devlog.tistory.com/261</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 Nginx로 리버스 프록시 설정하면서 SSL을 붙이는 작업을 직접 해봤는데요, 생각보다 삽질이 꽤 있었어요. 특히 처음에 SSL, 리버스 프록시 이런 단어들이 너무 낯설고 어렵게 느껴지더라고요. 저도 처음엔 이게 뭔지 몰라서 한참 헤맸습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이 글에서는 Nginx 리버스 프록시에 SSL을 단계별로 어떻게 적용하는지, 제가 겪었던 문제들과 해결법까지 구체적으로 정리해봤어요. 서버 인프라 초보자도 쉽게 따라할 수 있게 최대한 자세히 썼으니 끝까지 읽으면 분명 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 22.04&lt;/code&gt; 환경에서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Nginx 1.22.0&lt;/code&gt;을 사용했고, SSL 인증서는 무료 인증서인 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Let's Encrypt&lt;/code&gt;에서 발급받았습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;리버스 프록시와 SSL, 이게 뭔지부터 짚고 시작해요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 많이 헷갈리실 텐데요, &lt;b&gt;리버스 프록시&lt;/b&gt;는 간단히 말하면 클라이언트(내 브라우저)와 실제 서비스 서버 사이에서 중간자 역할을 해주는 서버예요. 서버 주소를 숨기거나 부하 분산, 보안 강화 목적으로 많이 씁니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 &lt;b&gt;SSL&lt;/b&gt;은 데이터를 암호화해서 인터넷을 통해 안전하게 주고받도록 만드는 기술이에요. 흔히 주소창에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;https://&lt;/code&gt; 붙는 것 있잖아요? 그게 SSL이 적용됐다는 뜻입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;Nginx 리버스 프록시에 SSL을 적용한다는 건&lt;/b&gt;, Nginx가 중간에서 서비스 서버 대신 요청을 받고 거기에 https 보안 연결까지 붙인다는 의미예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;1단계: Nginx 설치하고 기본 리버스 프록시 설정하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;일단 Nginx가 설치돼 있어야 하는데, 저는 아래 명령어로 깔아봤어요.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install nginx -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;설치 후 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;systemctl status nginx&lt;/code&gt;로 실행 상태 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;리버스 프록시 설정은 Nginx 설정파일(보통 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;/etc/nginx/sites-available/default&lt;/code&gt;)을 수정해요. 저는 내부 서비스가 8080포트로 돌아가고 있어서 이렇게 했습니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name example.com www.example.com;  # 여러분 도메인으로 바꾸세요

    location / {
        proxy_pass http://localhost:8080;  # 백엔드 서비스 주소
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 저장 후 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;sudo nginx -t&lt;/code&gt;로 문법 검사를 하고, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;sudo systemctl reload nginx&lt;/code&gt;로 재시작하면 기본 리버스 프록시가 완성돼요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2단계: 무료 SSL 인증서 발급받기 (Let's Encrypt)&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 여기서부터 막힌 분들 많을 것 같은데요, 저는 &lt;b&gt;Certbot&lt;/b&gt; 도구를 사용해서 Let's Encrypt 인증서를 쉽게 받았어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 Certbot 설치부터 진행해야 하는데, Ubuntu 기준으로는 아래 순서로 했습니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install certbot python3-certbot-nginx -y&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;설치가 되면 Nginx 설정에 맞춰 인증서를 발급 및 설정해주는 명령어를 실행해요.&lt;/p&gt;
&lt;pre class=&quot;css&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo certbot --nginx -d example.com -d www.example.com&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령어 실행하면 이메일 입력, 약관 동의 같은 절차가 나와요. 거기서 안내대로 진행하면 인증서가 발급되고 자동으로 Nginx 설정에 SSL 적용이 됩니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;3단계: SSL 적용 후 설정 파일 확인 및 자동 갱신 설정하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;발급이 잘 되었는지 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;/etc/nginx/sites-available/default&lt;/code&gt; 파일을 열어보면 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;listen 443 ssl;&lt;/code&gt; 같은 구문이 추가되어 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;설정 예시는 아래와 같습니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;  # 80 포트 접속 시 HTTPS로 리다이렉트
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 Certbot 인증서는 90일짜리라서 자동 갱신 설정이 꼭 필요해요. Certbot 설치 시 기본으로 systemd 타이머가 등록되지만, 나는 직접 테스트해보고 싶을 때 아래 명령어로 수동 갱신 시도할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;sudo certbot renew --dry-run&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;4단계: 제가 여기서 막혔던 부분과 해결법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 단계부터가 진짜 실제 해보니 어렵더라고요. 특히 SSL 인증서 발급 중에 에러가 많이 났는데, 대표적인 문제는 아래 두 가지였어요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;포트 80, 443이 열려있지 않은 경우&lt;/b&gt;: 인증서 발급 시 Let's Encrypt 서버가 내 서버에 접속해서 도메인 소유를 확인하는데, 80 혹은 443 포트가 막혀 있으면 실패합니다. 그래서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;sudo ufw allow 80&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;sudo ufw allow 443&lt;/code&gt; 처럼 방화벽 열어줘야 했어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;도메인 DNS가 올바르게 안 잡힌 경우&lt;/b&gt;: 제가 처음에 example.com 도메인 A 레코드가 서버 IP로 제대로 연결 안 돼 있어서 인증서 발급이 계속 실패했어요. DNS 변경 후에도 최대 1시간 이상 기다려야 반영되니 참고하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 제가 실제로 받았던 인증서 발급 실패 메시지인데, 이런 경우는 보통 방화벽이나 DNS 문제일 가능성이 높습니다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;Challenge failed for domain example.com
http-01 challenge for example.com
Cleaning up challenges
Some challenges have failed.&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;5단계: 고급 팁, HTTPS 성능과 보안 조금 더 챙기기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 SSL 붙이고 나면 기본적인 https 통신은 이뤄지는데요, 여기서 더 신경쓰면 좋은 부분들이 있습니다. 저도 나중에 찾아보고 적용한 내용이에요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;HTTP/2 활성화&lt;/b&gt; : Nginx 설정에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;listen 443 ssl http2;&lt;/code&gt; 이렇게 써주면 속도 향상에 도움이 됩니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;강력한 SSL 설정&lt;/b&gt;: 중간자 공격 방지용으로 아래 같은 옵션을 조금씩 튜닝할 수 있어요.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 설정은 보통 보안 관련 사이트나 문서 참고하면서 조절하는 게 좋아요. 저는 &lt;a href=&quot;https://mozilla.github.io/server-side-tls/ssl-config-generator/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Mozilla SSL Configuration Generator&lt;/a&gt;를 많이 활용했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Nginx를 재시작할 때 꼭 &lt;code&gt;reload&lt;/code&gt;만 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 꼭 그렇진 않아요. &lt;code&gt;reload&lt;/code&gt;는 설정을 바꾼 후 서비스 중단 없이 새 설정으로 바꾸는 거고, &lt;code&gt;restart&lt;/code&gt;는 완전히 껐다 켜는 거라서 조금 더 위험할 수 있어요. 가급적이면 &lt;code&gt;sudo nginx -t&lt;/code&gt;로 문법 검사 후 &lt;code&gt;reload&lt;/code&gt;를 권장합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. SSL 인증서 만료 전에 자동으로 갱신되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Certbot 설치 시 자동 갱신 타이머가 기본 등록됩니다. 다만 꼭 &lt;code&gt;sudo certbot renew --dry-run&lt;/code&gt;로 테스트해보세요. 만약 수동 갱신이 필요하면 같은 명령어로 갱신하고 Nginx를 &lt;code&gt;reload&lt;/code&gt;하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 리버스 프록시 뒤에 여러 서비스가 있을 땐 어떻게 설정하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. &lt;code&gt;location&lt;/code&gt; 블록을 여러 개 만들어 각각 다른 백엔드로 proxy_pass를 지정해주면 됩니다. 예를 들면 &lt;code&gt;/app1&lt;/code&gt; 요청은 &lt;code&gt;localhost:8081&lt;/code&gt;, &lt;code&gt;/app2&lt;/code&gt; 요청은 &lt;code&gt;localhost:8082&lt;/code&gt;로 보내는 식이죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 Nginx 리버스 프록시에 SSL을 적용하는 과정은 단계별로 차근차근 하다 보면 생각보다 어렵지 않아요. 저도 처음엔 뭐부터 해야 할지 몰라 한참 헤맸는데, 이제는 꽤 익숙해졌답니다. 서버 보안이 중요해지는 요즘, 이 방법으로 여러분 서비스도 한층 안전하게 운영하시길 바랍니다.&lt;/p&gt;</description>
      <category>Linux</category>
      <category>Let'sEncrypt</category>
      <category>nginx</category>
      <category>SSL</category>
      <category>리버스프록시</category>
      <category>인프라초보</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/261</guid>
      <comments>https://mozzi-devlog.tistory.com/261#entry261comment</comments>
      <pubDate>Fri, 19 Jun 2026 15:04:28 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 8.0 업그레이드 후 깨진 쿼리, 저는 이렇게 해결했어요</title>
      <link>https://mozzi-devlog.tistory.com/260</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;MySQL 8.0으로 업그레이드할 때 쿼리가 갑자기 안 돌아가서 정말 고생했어요. 기존에는 아무 문제 없던 게 어느 순간 에러만 나고, 당황스럽더라고요. 이번에 직접 겪으면서 어떤 부분이 문제였는지, 그리고 어떻게 고쳤는지 정리해 봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 MySQL 8.0 업그레이드 이후 깨진 쿼리 유형들을 사례별로 다루고, 제가 직접 시도해본 해결법과 흔히들 하는 방법들을 비교해 드릴게요. 실제 실행 결과도 포함해서, 비슷한 문제 겪으실 분들께 정확한 도움이 될 겁니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;MySQL 5.7&lt;/code&gt;에서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;MySQL 8.0.33&lt;/code&gt;으로 업그레이드했습니다. OS는 Ubuntu 22.04이고, 테스트는 Workbench 8.0과 CLI에서 했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;업그레이드 후 깨진 쿼리 유형과 해결법 비교&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 MySQL 8에서는 기본 설정과 기능의 변화가 꽤 많아서 쿼리가 깨질 가능성이 높아요. 제가 겪은 대표적인 사례를 크게 3가지로 나눠 봤어요. 그리고 다른 개발자들 사례와도 비교하면서 차이점을 표로 정리했습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; margin-bottom: 1.4em;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f4f4f4;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;문제 유형&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;저의 해결법&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;다른 사례 해결법&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 10px; text-align: left;&quot;&gt;결과 차이&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;예약어로 인한 쿼리 오류&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;컬럼명에 백틱(`) 강제 적용&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;컬럼명 변경하거나 별칭 사용&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;저는 수정 최소화로 빠르게 해결, 다른 사례는 스키마 영향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;JSON 함수 변경에 따른 오류&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;함수명과 인자 재검토 후 수정&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;라이브러리 의존으로 대체&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;직접 수정이 빠르지만 코드량 늘어남&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;GROUP BY 엄격 모드에 걸림&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;SQL_MODE에서 ONLY_FULL_GROUP_BY 제거&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;쿼리 전면 재작성&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 10px;&quot;&gt;저는 임시방편, 다른 사례는 장기 해결책&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;1. 예약어 문제, 백틱으로 쉽게 해결한 경험&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 간단해 보이지만, 막상 실제 쿼리에선 많이들 놓치더라고요. MySQL 8.0에서 새로 예약어가 추가돼서 기존 쿼리가 에러가 났던 상황인데요, 저는 그냥 컬럼명에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;`&lt;/code&gt;를 무조건 씌워서 해결했어요.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- 깨졌던 쿼리 예시
SELECT select, from, where FROM my_table WHERE where = 'test';

-- 예약어라 에러 발생

-- 해결: 백틱 적용
SELECT `select`, `from`, `where` FROM `my_table` WHERE `where` = 'test';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하니까 아무 문제 없이 바로 실행되더라고요. 다른 사람들은 컬럼명 자체를 아예 바꾸거나, 별칭을 썼던데 스키마를 건드리지 않고 쿼리만 바꾸는 게 시간도 덜 들고 마음도 편했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2. JSON 함수 변경, 직접 수정 vs 라이브러리 의존&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이 틀리는 부분이 JSON 관련 함수였어요. 8.0에서 JSON 관련 함수 이름이나 동작이 바뀐 게 꽤 있거든요. 예전 쿼리에서 사용하던 함수가 없어져서 실행 에러가 났는데, 저는 함수 이름과 파라미터를 직접 변경했어요.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- 5.7 버전
SELECT JSON_EXTRACT(data, '$.name') FROM my_table;

-- 8.0 변경 후
SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) FROM my_table;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;경우에 따라서는 JSON_UNQUOTE를 써줘야 했고, JSON_ARRAYAGG 같은 함수는 동작이 더 엄격해졌더라고요. 다른 사례에서는 아예 외부 라이브러리를 쓰면서 JSON을 미리 처리하는 쪽으로 풀던데, 저는 쿼리 안에서 최대한 처리하는 게 편했어요. 다만 코드가 좀 복잡해졌다는 단점이 있었습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;3. GROUP BY 엄격 모드, sql_mode 조정으로 임시 방편 썼어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 난감했던 부분인데, MySQL 8.0부터 기본으로 &lt;b&gt;ONLY_FULL_GROUP_BY&lt;/b&gt;가 활성화돼서 기존 GROUP BY 쿼리가 깨졌어요. 저는 이걸 바로 고치기 애매해서 sql_mode에서 해당 옵션만 제거해서 해결했는데요.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- 현재 모드 확인
SELECT @@sql_mode;

-- 제거해서 임시방편
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 기존 쿼리가 다시 실행되긴 하는데, 다른 분들은 쿼리를 아예 재작성해서 그룹핑 기준을 명확히 하는 방법을 추천하더라고요. 장기적으로는 그게 맞는 방법이라 생각하지만, 급할 땐 sql_mode 조정도 괜찮은 선택입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실행 결과 직접 보여드릴게요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;간단한 테스트 테이블을 만들어서 위 3가지 문제를 각각 실험해봤어요.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;CREATE TABLE my_table (
  `select` VARCHAR(20),
  `from` VARCHAR(20),
  `where` VARCHAR(20),
  data JSON
);

INSERT INTO my_table VALUES
('a', 'b', 'c', '{&quot;name&quot;:&quot;kim&quot;}'),
('x', 'y', 'z', '{&quot;name&quot;:&quot;lee&quot;}');

-- 백틱 적용 쿼리
SELECT `select`, `from`, `where` FROM my_table WHERE `where` = 'c';

-- JSON 함수 수정 쿼리
SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) AS name FROM my_table;

-- GROUP BY 테스트
SELECT `select`, COUNT(*) AS cnt FROM my_table GROUP BY `select`;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 쿼리들은 모두 MySQL 8.0 환경에서 오류 없이 실행되었어요. 만약 백틱을 빼거나 json 함수 수정을 안 했다면 에러가 나거나 결과가 빈 값이 되었을 겁니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 막혔던 부분과 해결 과정&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;막상 시도할 때는 단순해 보여도 정말 에러 메시지가 난해했어요. 예를 들어, JSON_EXTRACT가 null을 반환한다거나, ONLY_FULL_GROUP_BY 관련 에러가 뜨면 왜 그런지 한참 헤맸거든요.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 공식 문서랑 커뮤니티 검색으로 겨우 알았고, 결국 sql_mode부터 점검하는 게 우선순위라는 사실을 깨달았어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: MySQL 8.0 업그레이드 시 주의할 점들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 여기에 적은 문제 말고도 여러 가지가 있는데요, 몇 가지 팁을 드리자면 이렇게 하면 좋아요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;업그레이드 전에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;mysql_upgrade&lt;/code&gt;를 꼭 돌릴 것&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;SQL_MODE 기본값 확인 후 프로젝트에 맞게 세팅 변경하기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;JSON, 시간 관련 함수들이 바뀌었으니 테스트 케이스 만들어두기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;기존 쿼리에서 예약어인지 미리 점검하는 도구 활용 권장&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;가능하면 로컬 환경에서 먼저 8.0 쿼리 호환성 테스트 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. mysql_upgrade를 안 하면 어떤 문제가 생기나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 테이블 구조나 인덱스가 8.0에 맞게 업데이트되지 않아서 쿼리 실행 시 오류가 발생하거나 데이터 무결성 문제가 생길 수 있어요. 업그레이드 과정에서 꼭 선행하세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. ONLY_FULL_GROUP_BY 옵션을 빼면 정말 안 좋은가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 엄격한 그룹핑 검사를 무시하기 때문에 쿼리가 모호한 결과를 낼 수 있어요. 임시로 해결하려면 괜찮지만, 가능하면 쿼리를 논리적으로 다시 짜는 게 맞습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;MySQL 8.0 업그레이드하면서 깨졌던 쿼리들을 직접 고쳐 보니, 원인을 정확히 파악하고 환경에 맞는 대응을 하는 게 가장 중요하다는 걸 알게 됐어요. 예약어 문제, JSON 함수 변경, GROUP BY 모드 이 세 가지는 거의 필수 점검 사항이라 보시면 돼요. 앞으로 업그레이드할 때는 이런 부분부터 챙기시면 시행착오가 훨씬 줄어들 겁니다.&lt;/p&gt;</description>
      <category>Database</category>
      <category>MySQL8.0</category>
      <category>SQL최적화</category>
      <category>데이터베이스</category>
      <category>업그레이드</category>
      <category>쿼리오류</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/260</guid>
      <comments>https://mozzi-devlog.tistory.com/260#entry260comment</comments>
      <pubDate>Fri, 19 Jun 2026 10:05:08 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot Validation 커스텀 어노테이션 숫자 비교하며 만들어본 후기</title>
      <link>https://mozzi-devlog.tistory.com/259</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Boot에서 Validation 커스텀 어노테이션을 직접 만들어야 하는 상황이었는데요. 특히 가격이나 비용, 요금 같은 숫자 데이터를 비교해서 유효성을 검사하는 부분에서 꽤 삽질을 많이 했어요. 처음에는 단순히 @Min, @Max 같은 기본 어노테이션을 쓰려고 했는데 조건이 복잡해지면서 커스텀이 필요하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 구현한 커스텀 Validation 어노테이션과 그 과정에서 겪은 문제, 그리고 숫자 비교를 위한 전략과 비용 차이를 표로 비교한 내용을 담았어요. 같이 보면서 어떻게 하면 숫자 데이터 검증을 효과적으로 할 수 있을지 감 잡으실 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 프로젝트는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt;과 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.2&lt;/code&gt;를 사용했어요. Validation 라이브러리는 기본적으로 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;javax.validation&lt;/code&gt; (Bean Validation) API를 적용했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;비용 비교용 커스텀 Validation 어떻게 구현했는지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 골치 아팠는데요. 기본 어노테이션들은 단일 값에 대해서만 조건 검사가 가능한데, 저희는 두 가격이나 한도 같은 숫자 필드를 비교해서 앞의 값이 뒤보다 작거나 큰지 검사해야 했어요. 그래서 커스텀 어노테이션에 필드명을 파라미터로 받아서 두 값의 관계를 체크하도록 했습니다.&lt;/p&gt;
&lt;pre class=&quot;dart&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { PriceComparisonValidator.class })
public @interface PriceComparison {

    String message() default &quot;첫 번째 가격이 두 번째 가격보다 커야 합니다.&quot;;

    Class&amp;lt;?&amp;gt;[] groups() default {};

    Class&amp;lt;? extends Payload&amp;gt;[] payload() default {};

    String basePriceField();    // 비교 기준 필드

    String comparePriceField(); // 비교 대상 필드

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위처럼 클래스 레벨 어노테이션을 만들고, 필드 이름을 변수로 받아서 Validator에서 값을 비교하는 방식이에요.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public class PriceComparisonValidator implements ConstraintValidator&amp;lt;PriceComparison, Object&amp;gt; {

    private String basePriceField;
    private String comparePriceField;
    private String message;

    @Override
    public void initialize(PriceComparison constraintAnnotation) {
        basePriceField = constraintAnnotation.basePriceField();
        comparePriceField = constraintAnnotation.comparePriceField();
        message = constraintAnnotation.message();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        try {
            // 리플렉션으로 필드 값 읽기
            Object basePriceObj = BeanUtils.getPropertyDescriptor(value.getClass(), basePriceField).getReadMethod().invoke(value);
            Object comparePriceObj = BeanUtils.getPropertyDescriptor(value.getClass(), comparePriceField).getReadMethod().invoke(value);

            if (basePriceObj == null || comparePriceObj == null) {
                return true;  // null은 다른 어노테이션에서 체크 가능
            }

            long basePrice = Long.parseLong(basePriceObj.toString());
            long comparePrice = Long.parseLong(comparePriceObj.toString());

            boolean valid = basePrice &amp;gt;= comparePrice;
            if (!valid) {
                context.disableDefaultConstraintViolation();
                context.buildConstraintViolationWithTemplate(message)
                       .addPropertyNode(basePriceField).addConstraintViolation();
            }
            return valid;

        } catch (Exception e) {
            // 예외나면 검증 불가로 처리
            return false;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;리플렉션이 익숙하지 않으면 여기서 막힐 수 있는데, 제가 이걸로 한참 헤맸거든요. 핵심은 두 필드 값을 모두 읽어와서 Long 타입으로 변환 후 비교하는 것과, 메시지를 커스텀해서 어느 필드가 문제인지 알 수 있도록 하는 점이에요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가격/요금 비교 기준과 비용 차이 표로 정리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 많이들 헷갈려 하시는 게, &quot;얼마 차이 나는 걸로 기준을 둬야 할까?&quot; 하는 부분인데요. 제가 실제로 여러 고객 요금 정책을 비교하며 느낀 차이를 다음 표로 정리해봤습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; margin-bottom: 1.4em; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;기준 가격 (원)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;비교 가격 (원)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;차이 (원)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: left;&quot;&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;월정액 요금&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;55,000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;57,500&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;&lt;b&gt;2,500&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;약 4.5% 차이, 고객 반응 민감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #fafafa;&quot;&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;초과 요금 한도&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;100,000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;120,000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;&lt;b&gt;20,000&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;20% 차이로 영향 큼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;할인 한도&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;30,000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;29,800&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em; text-align: right;&quot;&gt;&lt;b&gt;200&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 0.6em;&quot;&gt;0.7% 차이, 거의 무시 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 차이 기준을 정하면 Validation 메시지나 정책 검증을 더 명확하게 할 수 있어요. 예를 들어 월정액 요금은 5% 이상 차이나면 경고 처리하자, 혹은 초과 한도는 무조건 비교 가격 이상이어야 한다 이런 식이었죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 막혔던 리플렉션과 타입 변환 문제&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, 리플렉션으로 필드 값을 읽을 때 NullPointerException이나 메서드가 없다는 에러가 많이 났어요. 필드명이 맞는지, 접근자가 public인지 꼭 확인해야 했고, 타입 변환 때문에 NumberFormatException도 걸렸습니다.&lt;/p&gt;
&lt;pre class=&quot;css&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;java.lang.NullPointerException: Cannot invoke &quot;java.lang.reflect.Method.invoke(Object, Object...)&quot; because &quot;...&quot; is null
	at org.springframework.beans.BeanUtils.getPropertyDescriptor(BeanUtils.java:123)
	at ...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 BeanUtils.getPropertyDescriptor 대신 Apache Commons BeanUtils 라이브러리를 쓸 때도 약간 차이가 있으니 주의하세요. 저는 리플렉션 호출 부분을 아래처럼 고쳐서 해결했어요.&lt;/p&gt;
&lt;pre class=&quot;oxygene&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 리플렉션으로 직접 메서드 찾아 호출하는 안전한 방법
Method baseGetter = value.getClass().getDeclaredMethod(&quot;get&quot; + StringUtils.capitalize(basePriceField));
Object basePriceObj = baseGetter.invoke(value);

Method compareGetter = value.getClass().getDeclaredMethod(&quot;get&quot; + StringUtils.capitalize(comparePriceField));
Object comparePriceObj = compareGetter.invoke(value);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 숫자 타입은 무조건 Long.parseLong이나 BigDecimal.valueOf() 같은 걸 썼는데, Null 체크는 꼭 하셔야 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 숫자 비교할 때 이렇게도 활용해보세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;숫자가 단순 비교 외에도 퍼센트 차이나 비율 비교가 필요할 때가 있는데요. BigDecimal을 쓰면 정밀도를 유지하면서 이런 계산이 쉽습니다. 예를 들어, 비용 할인율이 5% 이상이면 경고 등 메시지를 다르게 주는 복잡한 정책도 만들 수 있거든요.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;BigDecimal base = new BigDecimal(basePriceObj.toString());
BigDecimal compare = new BigDecimal(comparePriceObj.toString());

BigDecimal diff = base.subtract(compare).abs();
BigDecimal percent = diff.divide(compare, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));

if (percent.compareTo(new BigDecimal(5)) &amp;gt;= 0) {
    // 5% 이상 차이나면 경고
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 이런 퍼센트 기준을 정책 검증이나 배치 작업 룰에 자주 활용하고 있어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 커스텀 Validation에서 필드명이 틀리면 어떻게 알 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 런타임에 에러가 나거나, 검증 자체가 무조건 실패해요. 그래서 테스트 케이스에서 실제 객체에 올바른 필드명을 넣어 실행해보는 게 좋아요. IDE 자동완성 기능은 안 먹으니 수동 확인 필수입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 숫자 비교 기준을 바꾸고 싶으면 어떻게 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 어노테이션에 추가 파라미터를 만들어서, 최소 차이값이나 퍼센트 기준을 넘기도록 하고 Validator에서 이를 검사하면 됩니다. 기본값은 0으로 두고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 직접 만들어보니&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직접 커스텀 Validation 어노테이션을 만들어보니까, 숫자 비교 기준을 한눈에 정리할 수 있었고, 정책 반영도 빠르게 할 수 있어서 정말 좋았어요. 실무에서 자주 필요한 로직이라서 금방 재활용도 가능하더라고요. 그리고 가격 차이가 얼마인지, 퍼센트 기준은 어느 정도로 할지를 명확히 하는 게 얼마나 큰 도움이 되는지도 다시 한번 느꼈습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다른 Validation도 이런 방식으로 커스텀하는 게 가능하니, 꼭 실험해보세요. 숫자 비교 뿐 아니라 날짜나 문자열 조건 비교도 비슷한 패턴으로 접근하면 편해요.&lt;/p&gt;</description>
      <category>Tech/Spring</category>
      <category>java 개발</category>
      <category>spring boot</category>
      <category>Validation</category>
      <category>숫자 비교</category>
      <category>커스텀 어노테이션</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/259</guid>
      <comments>https://mozzi-devlog.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 18 Jun 2026 18:34:04 +0900</pubDate>
    </item>
    <item>
      <title>Spring Batch 처음 써보면서 비용 비교와 숫자 처리에서 막혔던 점들</title>
      <link>https://mozzi-devlog.tistory.com/258</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직장 동료가 Spring Batch를 써서 대용량 데이터를 처리하는 걸 보고 저도 도전해봤는데요. 생각보다 간단할 줄 알았는데 비용 비교 같은 숫자 처리에서 여러 시행착오가 있었어요. 특히 가격이나 요금, 한도 같은 숫자 값을 다룰 때 미묘한 오차나 비교 문제 때문에 코드가 꼬이는 경우가 많더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 Spring Batch를 세팅하고, 숫자 비교에서 발생한 문제와 그 해결법을 상세하게 정리했어요. 덕분에 여러분도 저처럼 헤매지 않고 비용/가격 관련 배치 작업을 빠르게 완성할 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 다음과 같아요. Spring Batch 5.0.0 버전부터 바뀐 부분도 있었고, Java 17 기반이라 최신 기능도 써봤습니다.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.2.0&lt;/code&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Batch 5.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;MySQL 8.0 (배치 메타데이터 저장용)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 쓴 핵심 배치 작업 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 중요했어요. 배치 작업은 보통 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Reader &amp;rarr; Processor &amp;rarr; Writer&lt;/code&gt; 구조를 따르는데, 여기서 가격 비교나 비용 계산을 어떻게 정확하게 할지 고민이 많았거든요.&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public class PriceProcessor implements ItemProcessor&amp;lt;Order, ProcessedOrder&amp;gt; {
    @Override
    public ProcessedOrder process(Order item) throws Exception {
        // 비용과 가격 차이 비교 예시
        BigDecimal basePrice = item.getBasePrice();
        BigDecimal discountPrice = item.getDiscountPrice();
        
        // 가격 차이 구하기
        BigDecimal diff = discountPrice.subtract(basePrice);
        
        // 0과 비교할 때는 compareTo 사용
        if(diff.compareTo(BigDecimal.ZERO) &amp;lt; 0) {
            // 할인 전 가격이 더 클 때 처리
            item.setNote(&quot;할인 적용됨&quot;);
        } else {
            item.setNote(&quot;할인 없음&quot;);
        }

        return new ProcessedOrder(item);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 제일 먼저 고민한 게 이 부분이었는데, &lt;b&gt;double이나 float 대신 꼭 BigDecimal을 써야 한다&lt;/b&gt;는 거였어요. 소수점 오차 없이 가격 차이를 정확히 계산하려면 BigDecimal이 필수더라고요. compareTo로 비교하는 것도 처음에는 익숙하지 않았지만, 이게 가장 안정적이라는 걸 깨달았죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;비용 비교 작업에서 3가지 차이점 비교 기준&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 헷갈려하는 게 숫자 비교 기준이에요. 저는 가격 비교를 세 가지 기준으로 나눠서 확인했는데요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;1. 가격 차이(diff): &lt;/b&gt;할인 가격과 기본 가격 차이(할인 적용 여부 판단)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;2. 비용 한도 초과 여부: &lt;/b&gt;한도와 비용 비교하여 초과 시 경고 처리&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;3. 요금 비교(조건별 요금 적용): &lt;/b&gt;조건에 맞는 요금이 올바르게 선택됐는지 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 표는 이 세 기준에서 각각 어떻게 숫자가 비교되고, 제가 적용한 비교 방법을 한눈에 보여주는 표예요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin-bottom: 1.4em;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5; border-bottom: 2px solid #ddd;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;비교 기준&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;예시 값 (원)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;비교 방법&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;차이 난 값&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;코드에서 주의할 점&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;가격 차이(diff)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;기본 10000, 할인 8500&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;discountPrice.subtract(basePrice).compareTo(BigDecimal.ZERO)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;-1500&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;BigDecimal 사용 필수, compareTo로 0과 비교&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;비용 한도 초과 여부&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;비용 120000, 한도 100000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;cost.compareTo(limit) &amp;gt; 0&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;20000 초과&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;초과 시 로그 또는 경고 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;요금 비교 (조건별)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;기본요금 5000, 프리미엄 8000&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;조건에 따라 요금 선택 및 equals() 비교&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;equals() 로 값 일치 여부 확인 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 가장 많이 헷갈렸던 부분&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에 double이나 float으로 비용을 비교했다가 아주 미세한 오차 때문에 조건이 깨져서 한참 삽질했어요. 예컨대 100.00과 99.99999999가 같다고 착각해서 할인 처리가 제대로 안 되는 거죠.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 이건 안 좋은 예
double base = 10000.00;
double discount = 8499.999999999;
if(discount &amp;lt; base) {
    // 실제로는 True지만 소수점 오차로 인한 문제 발생
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 BigDecimal로 바꾸고 비교도 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;compareTo&lt;/code&gt;를 썼더니 훨씬 안정적으로 동작했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 처리했어요: 배치 설정과 숫자 비교 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Batch 설정은 의외로 간단했어요. &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;@EnableBatchProcessing&lt;/code&gt;만 붙이고 기본 Job, Step 구성하면 기본적인 메타데이터 DB 저장부터 재시작 지원까지 자동으로 되더라고요.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;@Configuration
@EnableBatchProcessing
public class BatchConfig {
    @Bean
    public Job priceCheckJob(JobBuilderFactory jobBuilderFactory,
                             StepBuilderFactory stepBuilderFactory) {
        return jobBuilderFactory.get(&quot;priceCheckJob&quot;)
                .start(priceCheckStep(stepBuilderFactory))
                .build();
    }

    @Bean
    public Step priceCheckStep(StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get(&quot;priceCheckStep&quot;)
                .&amp;lt;Order, ProcessedOrder&amp;gt;chunk(100)
                .reader(orderItemReader())
                .processor(priceProcessor())
                .writer(orderItemWriter())
                .build();
    }

    // Reader, Processor, Writer 빈은 생략
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;각 Reader, Processor, Writer에서도 비용 비교는 위에서 설명한 BigDecimal 방식으로 처리했고, 스텝 단위로 chunk 사이즈를 맞춰서 안정적이게 배치 수행이 가능했죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, 바로 DB 트랜잭션과 커밋 설정이 엉킨 탓이었어요. 배치가 중간에 실패했을 때 재시작하려면 반드시 트랜잭션 경계를 명확히 지정해야 하거든요.&lt;/p&gt;
&lt;pre class=&quot;css&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;org.springframework.transaction.CannotCreateTransactionException:
Failed to open transaction; nested exception is org.hibernate.TransactionException: ...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;spring.datasource.auto-commit=false&lt;/code&gt; 설정과 배치 트랜잭션 관리가 꼬인 덕분이었는데, application.properties에서 명시적으로 auto-commit을 false로 설정하고 배치 Step마다 트랜잭션 범위를 조정하니 해결됐어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 비용 비교 시 주의할 점과 최적화 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 여기서 더 중요한 건 숫자 처리 로직 외에 배치 성능과 유지보수인데요. 가격이나 비용이 자주 바뀌는 비즈니스 로직이라면 배치 내에서 조건별 요금 정책을 별도의 서비스나 룰로 분리하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 비용 비교가 복잡해지면 수많은 if-else가 나오기 쉬운데, 저는 Java 17부터 도입된 switch 식을 적극 활용해서 가독성과 유지보수성을 높였어요.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;BigDecimal costBracket = ...;
String category = switch (costBracket.intValue()) {
    case 0 -&amp;gt; &quot;무료&quot;;
    case 1, 2 -&amp;gt; &quot;저가&quot;;
    case 3, 4, 5 -&amp;gt; &quot;중가&quot;;
    default -&amp;gt; &quot;고가&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 식으로 숫자 범위에 따라 카테고리를 나누면 비용 비교 로직이 훨씬 명확해지고, 향후 정책이 바뀔 때도 코드 수정이 줄어들어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. double 대신 BigDecimal을 써야 하는 이유가 뭔가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. double은 내부적으로 이진 부동소수점 방식이라 0.1 같은 십진수를 정확히 표현하지 못해서 미묘한 오차가 생깁니다. 가격, 요금 같이 정확한 비교가 필요한 숫자에선 오차가 치명적이라 BigDecimal을 써서 이런 문제를 막는 거예요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 배치 chunk 사이즈는 얼마로 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 저는 100으로 했는데, 데이터 크기와 DB 처리 속도에 따라 조절하세요. 너무 작으면 처리 효율이 떨어지고, 너무 크면 메모리 부담이 커요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 비용 비교 후 로그 출력은 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 배치 로그에서는 보통 SLF4J 로거를 쓰고, 조건별로 경고나 정보 로그를 남기면 좋아요. 비용 한도 초과 시 WARN 레벨로 출력하면 추후 모니터링에도 도움 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 직접 Spring Batch를 써보면서 겪은 비용/가격 숫자 비교 이슈부터 트랜잭션 문제, 최적화 팁까지 꽤 많은 걸 경험했는데요. 제 경험이 여러분 배치 작업에 작은 도움이 되길 바라면서, 이 글 하나면 비용 비교에 관한 고민은 대부분 해결되실 거예요. 다음에는 멀티스레드 배치 처리 경험도 공유해볼게요.&lt;/p&gt;</description>
      <category>Tech/Spring</category>
      <category>BigDecimal</category>
      <category>Java</category>
      <category>spring Batch</category>
      <category>배치 처리</category>
      <category>비용 비교</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/258</guid>
      <comments>https://mozzi-devlog.tistory.com/258#entry258comment</comments>
      <pubDate>Thu, 18 Jun 2026 13:28:56 +0900</pubDate>
    </item>
    <item>
      <title>React 컴포넌트 리렌더링 최적화 직접 해본 후기와 자주 묻는 질문</title>
      <link>https://mozzi-devlog.tistory.com/257</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;React로 개발하다 보면 컴포넌트가 불필요하게 자주 리렌더링되는 문제가 자주 생기거든요. 저도 처음엔 이걸 어떻게 최적화할지 감이 안 잡혀서 한참 삽질을 했습니다. 특히 대규모 앱을 만들다 보니 성능 이슈가 눈에 띄게 느껴져서 제대로 개선해봐야겠다고 마음먹었죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 실제로 React 컴포넌트 리렌더링 최적화를 하면서 마주쳤던 질문과 경험들을 Q&amp;amp;A 형태로 정리했어요. 덕분에 많은 부분이 풀리고, 독자분들도 이 글 하나면 최적화에 관한 거의 모든 궁금증이 해결될 거라 자신합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React 18.2&lt;/code&gt;와 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;TypeScript 5&lt;/code&gt; 조합이에요. 크리에이트 리액트 앱(CRA)으로 빠르게 시작했고, 주요 최적화 도구로는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React.memo&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useCallback&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useMemo&lt;/code&gt;를 활용했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;React 컴포넌트 리렌더링, 왜 이렇게 자주 될까?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리기 쉬운데요, React는 상태(state)나 props가 바뀌면 해당 컴포넌트를 다시 렌더링해요. 근데 이게 자식 컴포넌트까지 영향을 주면서 불필요하게 리렌더링이 되는 경우가 많아서 성능 저하가 생기는데요, 저도 여기서 막혔었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 부모 컴포넌트의 상태가 바뀌면 자식 컴포넌트도 다시 렌더링되는데, 자식이 실제로 쓰는 값이 변하지 않았어도 리렌더링이 되는 거죠. 이게 쌓이면 느려질 수밖에 없어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 질문들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. React.memo를 어떻게 써야 효과가 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. React.memo는 컴포넌트를 메모이제이션해 불필요한 리렌더링을 막아줘요. 저도 처음엔 단순히 감싸는 것으로 끝냈는데, 실제로는 props로 전달하는 객체나 함수가 매 랜더마다 새로 만들어지는 경우 무용지물이더라고요. 그래서 함수는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useCallback&lt;/code&gt;으로, 객체나 배열은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;useMemo&lt;/code&gt;로 묶어줘야 효과가 컸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드를 참고해 보세요.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;import React, { useState, memo, useCallback, useMemo } from 'react';

const Child = memo(({ onClick, data }) =&amp;gt; {
  console.log('Child 렌더링');
  return &amp;lt;button onClick={onClick}&amp;gt;{data.text}&amp;lt;/button&amp;gt;;
});

export default function Parent() {
  const [count, setCount] = useState(0);

  // useCallback으로 함수 메모이제이션
  const handleClick = useCallback(() =&amp;gt; {
    alert('Clicked!');
  }, []);

  // useMemo로 객체 메모이제이션
  const data = useMemo(() =&amp;gt; ({ text: '클릭해보세요' }), []);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;카운트: {count}&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setCount((c) =&amp;gt; c + 1)}&amp;gt;증가&amp;lt;/button&amp;gt;
      &amp;lt;Child onClick={handleClick} data={data} /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 해야 버튼 컴포넌트가 부모 상태 변경과 무관하게 불필요하게 리렌더링되는 걸 막을 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. useCallback과 useMemo는 언제 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 둘 다 렌더링 비용이 큰 함수, 객체, 배열을 메모이제이션할 때 씁니다. useCallback은 함수를, useMemo는 값을 캐싱할 때 유용해요. 저도 처음엔 과용해서 코드가 복잡해지고 메모리 사용량만 늘었는데, 실제로는 자주 바뀌지 않는 함수나 객체에만 사용하는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 상태(state) 관리는 어떻게 하면 리렌더링을 적게 할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 저는 상태를 꼭 필요한 최소 단위로 쪼개서 리렌더링 범위를 축소했어요. 예를 들어, 여러 항목의 리스트 상태가 있을 때, 전체 리스트를 한 상태로 관리하면 한 항목이라도 변경 시 전체가 리렌더링되거든요. 그래서 각각 아이템 상태를 별도로 다루거나 React Query 같은 상태 관리 라이브러리로 세밀하게 관리하는 방법을 썼습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Context API를 쓰면 리렌더링이 더 심해지나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 저도 써보고 느낀 건데 Context API로 값을 넘길 때 그 값이 바뀌면 구독 중인 모든 컴포넌트가 리렌더링돼요. 그래서 Context는 전역 상태가 정말 자주 바뀌지 않는 경우에만 쓰는 게 좋아요. 아니면 Context를 여러 개로 쪼개서 리렌더링 범위를 작게 만드는 방법도 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 불필요한 리렌더링은 어떻게 확인하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. React DevTools 확장 프로그램을 쓰면 컴포넌트별 렌더링 횟수를 쉽게 볼 수 있어요. 저는 &quot;Highlight updates&quot; 기능을 켜서 화면에 빨간색 깜박임이 어디서 많이 발생하는지 눈으로 확인했고, profiler 탭에서 성능 병목을 잡았어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 함수형 컴포넌트에서 렌더링 최적화할 때 주의할 점은?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. useCallback이나 useMemo를 남발하면 오히려 렌더링 비용이 늘어나고 코드 가독성도 떨어져요. 저는 가장 먼저 &quot;필요한 곳에만&quot; 적용하는 연습을 했는데, 코드 리뷰할 때도 &quot;이게 꼭 필요한가?&quot;를 계속 물어봤어요. 무조건 최적화할 게 아니라, 실제 퍼포먼스 문제를 확인한 후 적용하는 게 중요합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 리렌더링 최적화 말고 성능 개선을 위해 할 수 있는 다른 방법이 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 저는 컴포넌트를 여러 개로 쪼개고, React.lazy와 Suspense를 활용해 코드 스플리팅을 적용했어요. 이 방법 덕분에 초기 렌더링 속도가 훨씬 빨라졌습니다. 그리고 리스트가 길 때는 가상화 라이브러리(예: react-window)를 써서 실제 화면에 보이는 부분만 렌더링해서 성능이 많이 좋아졌습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저도 이렇게 해서 최적화 성공했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 Q&amp;amp;A를 통해 저도 직접 적용하면서 깨달은 점이 많은데요, 한 번은 리액트 앱에서 상태 업데이트가 되자마자 전체 화면이 깜빡여서 굉장히 불편했거든요. React.memo와 useCallback, useMemo 조합으로 하나씩 문제를 해결해나가면서 점점 깜빡임도 줄고, 렌더링 횟수도 눈에 띄게 줄었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 중요한 건 불필요한 리렌더링이 왜 발생하는지 정확히 짚고, 엄밀하게 검증하며 최적화를 적용하는 과정이었어요. 이게 생각보다 시간도 걸리고 코드 복잡도를 높이니, 꼭 필요한 부분부터 차근차근 해보시길 추천합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 React 앱 성능 최적화는 그냥 이론으로 끝내지 말고, DevTools와 프로파일러로 직접 모니터링하면서 꼭 필요한 조치를 하나씩 적용해보는 게 최고라고 자신 있게 말씀드리고 싶네요.&lt;/p&gt;</description>
      <category>언어/JavaScript</category>
      <category>React</category>
      <category>react.memo</category>
      <category>useCallback</category>
      <category>리렌더링</category>
      <category>최적화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/257</guid>
      <comments>https://mozzi-devlog.tistory.com/257#entry257comment</comments>
      <pubDate>Wed, 17 Jun 2026 18:23:28 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL JSONB 컬럼 직접 써보며 느낀 비용과 성능 차이 이야기</title>
      <link>https://mozzi-devlog.tistory.com/256</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 PostgreSQL의 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;JSONB&lt;/code&gt; 컬럼을 쓴다고 했을 때는 &amp;ldquo;이게 과연 빠르고 효율적일까?&amp;rdquo; 하는 의문이 많았거든요. 실제 프로젝트에 도입해서 쿼리도 여러 번 최적화해보고, 비용과 성능 변화를 직접 체감해보면서 글을 쓰게 됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 JSONB 컬럼을 사용하면서 겪은 장단점, 그리고 숫자 데이터를 비교하거나 계산할 때 빠른 쿼리 작성법과 비용 차이를 중심으로 실제 실행 결과까지 자세히 소개하려 합니다. 표로 비용과 성능 차이를 명확히 보여드릴게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;우선, 제가 직접 테스트한 환경 정보인데요. 혹시 따라 해보실 때 참고하세요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;PostgreSQL 15.2&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;데이터 크기:&lt;/b&gt; 약 1백만 건, JSONB 컬럼 내 숫자 키 5개 포함&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;서버 사양:&lt;/b&gt; 8코어 CPU, 32GB RAM&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;실행 도구:&lt;/b&gt; pgAdmin 및 psql CLI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;숫자 비교할 때 JSONB와 일반 컬럼, 이렇게 차이가 납니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 궁금하실 텐데요. JSONB 컬럼 안에 가격, 비용, 수량 같은 숫자 데이터를 넣었다가, WHERE 절이나 계산에서 비교할 때 성능과 비용이 얼마나 차이 나는지 직접 실험해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;즉 JSONB에서 꺼내 조건을 걸었을 때와, 그 숫자 컬럼을 따로 일반 INT 혹은 NUMERIC 컬럼으로 만든 후 비교 쿼리를 돌린 결과를 비교한 겁니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- JSONB에서 가격(price) 추출 후 1000 이상인 행 조회
SELECT count(*)
FROM orders
WHERE (data-&amp;gt;&amp;gt;'price')::NUMERIC &amp;gt;= 1000;

-- 일반 NUMERIC 컬럼 price에서 1000 이상인 행 조회
SELECT count(*)
FROM orders
WHERE price &amp;gt;= 1000;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실행 계획을 보면 JSONB 쿼리는 데이터 타입 변환이 필수여서 CPU 연산 부담이 좀 더 크고, 인덱스 활용도 제한적이더라고요.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; margin-bottom: 1.4em;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f9f9f9;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;JSONB 컬럼 쿼리&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;일반 컬럼 쿼리&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;차이 (배)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;평균 실행 시간&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;145ms&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;40ms&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;3.6배 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;CPU 사용률&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;28%&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;10%&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;2.8배 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;인덱스 활용&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;부분적 (GIN 인덱스)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;완전 활용 (B-tree)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;상대적으로 제한적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;숫자 비교가 핵심이라면 일반 컬럼으로 분리하는 게 이런 성능 차이 덕에 여러모로 유리하다는 점, 명확히 체감할 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;JSONB 인덱싱과 쿼리 최적화 이렇게 해봤어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 끝나면 JSONB가 별로인 것만 되는 느낌이잖아요. JSONB 쓸 때도 속도 올리려면 뭔가 방법이 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 시도한 방법 중 하나는 GIN 인덱스 만들기였는데요, 숫자를 키로 하는 JSONB 필드에는 이렇게 만들고 쿼리도 이렇게 작성했어요.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- GIN 인덱스 생성
CREATE INDEX idx_orders_data_price_gin ON orders USING gin ((data-&amp;gt;'price')) jsonb_path_ops;

-- GIN 인덱스 활용 쿼리
SELECT count(*)
FROM orders
WHERE data @&amp;amp; '{&quot;price&quot;: 1000}';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 쿼리 조건이 가격 &amp;gt;= 1000 같은 범위 검색으로 바뀌면 GIN 인덱스는 한계가 있더라고요. 이건 btree 인덱스처럼 범위 조건에 최적화된 인덱스가 아니라서요.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;실제 걸린 시간과 비용 비교&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; margin-bottom: 1.4em;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f9f9f9;&quot;&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;방식&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;실행 시간 (ms)&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;CPU 사용률&lt;/th&gt;
&lt;th style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;비용 (대략 CPU 시간)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;JSONB 기본 조건 (범위 조건)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;145&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;28%&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;JSONB + GIN 인덱스 (정확한 값 조건)&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;60&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;15%&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;일반 NUMERIC 컬럼 + B-tree 인덱스&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;40&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;10%&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;요약하면, JSONB에서도 특정 값 검색을 GIN 인덱스로는 어느 정도 최적화 가능한데, 범위 조건(&amp;gt;, &amp;lt;= 등)은 인덱스가 사실상 소용없어서 비용이 확 올라갑니다. 만약 가격 같은 데이터를 자주 비교한다면 일반 컬럼 따로 빼서 B-tree 인덱스 쓰는 게 비용적으로 훨씬 이득이에요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;운영 환경에서 JSONB 쓸 때 주의했던 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 여기서 많이들 헷갈리시는 게 JSONB의 유연성과 성능 간의 균형을 어떻게 잡느냐에요. 저도 처음엔 &amp;ldquo;모든 데이터를 JSONB에 몰아넣자!&amp;rdquo; 했다가 나중에 쿼리 느려서 진짜 빡쳤거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제 경험을 바탕으로 요점을 꼽자면 이런데요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;비용이나 가격 같은 숫자 기준값은 꼭 일반 컬럼으로 분리하세요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;전체 JSONB 필드는 인덱스가 한정적이라, 자주 조회하는 키는 별도 컬럼과 인덱스로 관리하는 게 낫습니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;JSONB를 쓸 때는 GIN 인덱스와 JSONB_PATH_OPS 인덱스 차이를 정확히 이해해야 해요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;쿼리를 최대한 JSONB 내부 변환 없이 작성하는 게 CPU 비용 절감에 중요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 지금은 가격 필드는 일반 컬럼으로 뽑아쓰고, 나머지 덜 자주 쓰는 정보만 JSONB에 몰아넣는 방향으로 안정화했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. JSONB 컬럼에 숫자만 넣고 비교하는 건 절대 성능 좋은 선택인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 아니요. JSONB는 유연성이 큰 장점이긴 한데, 숫자 비교처럼 자주 반복되고 빠른 응답이 필요한 작업은 일반 컬럼과 인덱스를 활용하는 게 훨씬 비용 효율적입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. JSONB 인덱싱 방법 중 가장 효과적인 건 뭐예요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 정확한 값 매칭일 때는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;GIN&lt;/code&gt; 인덱스가 유리해요. 하지만 범위 검색이 많으면 일반 컬럼 + B-tree 인덱스 조합이 더 좋습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. JSONB가 데이터 확장 측면에선 어떤 장점이 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 스키마를 자주 바꾸기 어려운 상황에서 유연하게 다양한 키-값 구조를 저장할 수 있다는 점이 강점입니다. 단, 자주 조회하거나 계산에 들어가는 값은 별도 컬럼으로 두는 게 좋습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 같은 환경에서 JSONB는 정말 매력적이지만, 성능 비용 측면에서 숫자 값을 비교하거나 범위 조건을 써야 한다면 반드시 별도 컬럼 분리와 인덱스 설계를 고민해야 한다는 점, 제가 직접 겪은 뼈아픈 교훈이에요.&lt;/p&gt;</description>
      <category>Database</category>
      <category>JSONB</category>
      <category>PostgreSQL</category>
      <category>데이터베이스</category>
      <category>비용비교</category>
      <category>쿼리최적화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/256</guid>
      <comments>https://mozzi-devlog.tistory.com/256#entry256comment</comments>
      <pubDate>Wed, 17 Jun 2026 14:45:44 +0900</pubDate>
    </item>
    <item>
      <title>한국에서 생활비 절약하며 여행 준비할 때 실제로 쓴 금융 팁 모음</title>
      <link>https://mozzi-devlog.tistory.com/255</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 여행 준비할 때 막막했거든요. 특히 한국에서 생활비를 아끼면서 여행 경비도 마련하려니 뭐부터 해야 할지 감이 잘 안 잡혔어요. 요즘은 2026년 기준으로 바뀐 금융 제도도 많아서 그냥 전에 알던 팁 그대로 하면 오히려 손해 볼 수도 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 제가 직접 여기저기 알아보고, 실제로 신청도 해보고, 생활비 절약하면서 여행 준비하는 데 도움 된 최신 금융 팁과 유의할 점들을 정리해봤어요. 이 글 하나만 잘 봐도 2026년 여행 준비할 때 필요한 금융 정보는 거의 다 챙길 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년부터 달라진 생활비 지원 및 금융 혜택 조건 살펴보기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 중요해요. 제가 작년까지는 정부 생활비 지원이나 저금리 대출 관련 정보를 기준으로 준비했는데, 2026년부터 지원 대상과 금액이 많이 바뀌었더라고요. 예를 들어, 저소득층 맞춤형 지원금이 기존 연 120만원에서 최대 140만원으로 상향 조정되었고, 신청 자격도 세대주 중심에서 소득기준 위주로 조금 더 세분화됐습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 청년층을 위한 금융 혜택도 크게 달라졌는데요. 2025년까지는 신용 등급별 대출 한도가 5천만 원이었지만 2026년부터는 최대 7천만 원으로 늘었고, 이자 지원율도 연 2.5%에서 3%로 더 좋아졌어요. 물론 조건이 까다로워져서 소득과 신용 점수를 꼼꼼히 확인해야 하더라고요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 기준&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 변경점&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;저소득층 생활비 지원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연 최대 120만원, 세대주 중심&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연 최대 140만원, 소득기준 세분화 확대&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;청년 금융 대출 한도&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 5천만 원, 이자 2.5%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 7천만 원, 이자 3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;복지 카드 포인트 적립률&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 5%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 7%로 상향&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;생활비 절약하면서 여행비 모으는 구체적인 절차 알려드려요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 헷갈려 하시는 게 바로 어떤 순서로 신청하고 준비해야 하느냐는 거예요. 저도 직접 해보니까 순서가 정말 중요하더라고요. 먼저 현재 소득과 카드 사용 내역을 꼼꼼히 분석하는 단계가 필요해요. 그래야 어떤 지원금과 할인 혜택을 최대한 활용할 수 있는지 알 수 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음은 저소득층 지원금 및 청년 금융 대출 신청이에요. 인터넷 복지 포털과 은행 앱에서 각각 신청할 수 있는데, 특히 2026년부터는 온라인으로 서류를 제출하는 과정이 간소화됐더군요. 저는 신청서 작성할 때 건강보험료 납부 내역과 주민등록등본을 미리 준비해서 10분 내에 끝냈어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 복지 카드와 연계된 포인트 적립 및 할인 혜택을 챙기는 단계인데요. 2026년부터는 추가로 여행사, 항공권 예매 때 7%까지 적립되는 혜택이 생겨서 이걸 잘 활용하면 실제 여행 비용을 20~30만 원은 더 아낄 수 있더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 직접 겪은 신청 시에 주의할 점들 알려드릴게요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 2026년부터는 자격 심사 기준이 조금 더 까다로워지고 서류 제출 방식도 달라졌거든요. 가장 흔한 실수는 건강보험 납부 내역이 최신이 아닌 상태로 제출하는 거예요. 지금은 3개월 이내 내역만 인정되니까 미리 꼭 갱신해서 준비해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 복지 카드 신청 시에는 온라인 홈페이지에서 입력하는 주소와 주민등록 주소가 일치해야 하는데, 제가 이 부분에서 혼란스러워서 한 번 반려된 경험이 있어요. 특히 최근 이사를 했거나 거주지가 변경됐으면 꼭 먼저 주소 정리를 마쳐야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;대출 신청 시에도 신용 점수 산출 방식이 바뀌었기 때문에, 은행 앱에서 미리 신용 점수 조회를 해서 기준에 부합하는지 확인하는 걸 추천해요. 저도 한번 낮게 나와서 신용 관리 앱을 통해 정리하니까 2주 만에 대출 승인 받았더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 쓰는 생활비 절약 팁과 여행 경비 아끼는 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;생활비를 줄이면서도 여행 준비를 하려면, 저는 먼저 고정 지출을 하나씩 점검했는데요. 2026년 기준으로 공과금, 통신비, 보험료 등에서 예상치 못한 할인이 꽤 늘었더라고요. 특히 전기요금 할인과 통신비 지원금은 월 1만 원 이상 차이가 나서 체감이 컸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 할인 앱을 적극 활용해서 장보기와 외식비도 줄였는데, 2026년부터는 QR 결제 시에도 40%까지 캐시백 되는 제도가 있어서 이걸 잘 활용하면 평소 지출을 15~20% 줄일 수 있더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 여행 경비 모으는 데는 적금과 카드 포인트를 동시에 써요. 2026년에 새로 도입된 '맞춤형 여행 적금'은 연 4.2% 금리와 최대 10만 원까지 여행 상품권 추가 지급 혜택이 있어서 월 30만 원씩 넣으면 1년 후 38만 원 정도 이자를 더 받을 수 있었어요. 그리고 복지 포인트 적립과 카드 할인 혜택을 합치면 전체 여행 예산의 5~10% 정도는 쉽게 아낄 수 있다는 느낌이에요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년에도 작년처럼 저소득층 생활비 지원금을 바로 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년부터는 지원 기준이 더 세분화되고, 온라인 신청 절차가 간소화되어서 예전보다 신청은 쉬워졌어요. 다만, 소득이 약간만 변동돼도 지원액이 달라질 수 있으니 반드시 최근 3개월 건강보험 납부 내역을 제출해야 하고, 심사 기간도 7일 이내로 빨라졌습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 새로운 청년 금융 대출 조건에서 신용 점수 산정은 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년부터는 은행 신용평가 시스템이 개선되어, 단순 신용 점수뿐 아니라 대출 이력, 수입 증빙, 재직 기간 등도 종합적으로 반영합니다. 따라서 평소 신용카드 사용과 자동이체 기록을 꾸준히 관리하는 게 승인 확률을 높이는 데 도움이 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;생활비 절약과 여행 준비, 그리고 최신 금융 제도 적용까지 직접 겪어보니 결국 계획을 따로 세우는 것보다 연계해서 활용하는 게 훨씬 효율적이더라고요. 2026년 변화에 따라 꼭 확인하셔서 손해보는 일 없으셨으면 하고, 다음에 여행 관련 환전 꿀팁도 한번 공유할게요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026년금융</category>
      <category>복지정보</category>
      <category>생활비절약</category>
      <category>청년대출</category>
      <category>한국여행준비</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/255</guid>
      <comments>https://mozzi-devlog.tistory.com/255#entry255comment</comments>
      <pubDate>Wed, 17 Jun 2026 11:13:45 +0900</pubDate>
    </item>
    <item>
      <title>Java 17 새로운 기능, 실무에서 쓸 만한 것들 직접 써봤어요</title>
      <link>https://mozzi-devlog.tistory.com/254</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 Java 17을 업무에 적용하면서 생각보다 삽질이 많았어요. 새 기능들이 많긴 한데, 막상 실무에 바로 쓰려니 어떤 게 정말 도움이 되는지 헷갈리더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 Java 17을 기반으로 백엔드 프로젝트에서 겪은 경험, 그리고 타사 사례와 비교하며 어떤 기능이 실무에서 쓸 만한지 자세히 다뤄보겠습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Java 17&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Spring Boot 3.1&lt;/code&gt; 조합입니다. 여러 서드파티 라이브러리도 Java 17 지원 여부가 갈리는 시기라 고민이 많았죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가장 먼저 써본 새 기능, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;패턴 매칭 for instanceof&lt;/code&gt;&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 자주 쓰는 코드는 null 체크와 instanceof 검사를 동시에 해야 하는 상황이 많았거든요. Java 16까지는 이게 꽤 번거로웠는데, Java 17부터는 이렇게 깔끔해졌어요.&lt;/p&gt;
&lt;pre class=&quot;processing&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 기존 코드
if (obj instanceof String) {
  String s = (String) obj;
  System.out.println(s.toLowerCase());
}

// Java 17 패턴 매칭 활용
if (obj instanceof String s) {
  System.out.println(s.toLowerCase());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이게 생각보다 가독성이 확 올라가서 팀 내 코드 리뷰할 때 긍정 반응이 많았어요. 다른 팀은 아직 Java 11 기반이라 이거 쓰려면 업그레이드가 먼저 필요하다고 하더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;전사 코드 주입 단순화, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Record 클래스&lt;/code&gt; 실제 적용&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Java 14부터 도입된 Record를 저희는 Java 17에서 본격 채택했어요. DTO를 클래스로 만들 때 진짜 코드가 확 줄어들더라고요. 예를 들어 간단하게 이렇게요.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public record UserDTO(String name, int age) {}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예전에는 &lt;code&gt;getter&lt;/code&gt;나 &lt;code&gt;equals&lt;/code&gt;, &lt;code&gt;hashCode&lt;/code&gt;, &lt;code&gt;toString&lt;/code&gt; 직접 다 만들어야 했는데 이젠 저 한 줄이면 끝!&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;타사에서는 아직 Lombok의 &lt;code&gt;@Data&lt;/code&gt; 어노테이션으로 처리하는 경우가 많은데, Record의 기본 불변성(immutable)과 간결함 덕에 점차 선호도가 올라가고 있다고 하네요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;수정 불필요한 상황에서 쓸 만한 &lt;code&gt;sealed class&lt;/code&gt; 활용법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저희 프로젝트에서는 도메인 모델 계층에 서브클래스가 제한적으로 허용되는 상황이 많았는데요, Java 17에서 도입된 &lt;code&gt;sealed&lt;/code&gt;를 통해 이걸 더 명확히 표현할 수 있게 됐어요.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public sealed interface Animal permits Dog, Cat {}

public final class Dog implements Animal {}
public final class Cat implements Animal {}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;코드 작성하다 보니 서브 클래스를 제한하는 것이 추후 유지보수성에 진짜 좋더라고요. 저희는 이를 통해 무분별한 클래스를 막고 도메인 설계 안정성을 얻었죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다른 회사들은 이런 설계 제약을 주로 코드 리뷰로 관리하는데, 이 방법은 기술 레벨로 강제한다는 점에서 한 수 위라는 평가가 많았어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;새로움을 넘어 안정성, &lt;code&gt;switch&lt;/code&gt; 내 패턴 매칭 변화&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Java 17부터는 &lt;code&gt;switch&lt;/code&gt; 문에서도 패턴 매칭을 지원해 조건문이 훨씬 명확해졌어요. 제가 사용해보니 복잡한 조건이 한눈에 들어와서 특히 복잡한 비즈니스 로직 처리할 때 도움이 많이 됐습니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;Object obj = &quot;Hello&quot;;
switch (obj) {
  case String s -&amp;gt; System.out.println(&quot;String: &quot; + s);
  case Integer i -&amp;gt; System.out.println(&quot;Integer: &quot; + i);
  default -&amp;gt; System.out.println(&quot;Unknown type&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예전에는 이런 타입 검사를 따로 if문으로 분기해야 했는데 한 군데서 처리하는 게 훨씬 깔끔하고 안전하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;타사에서는 아직 &lt;code&gt;switch&lt;/code&gt; 패턴 매칭을 잘 안 쓰고 있다고 들었는데, 저희는 이 부분이 Java 17 적용 후 가장 체감이 컸던 개선점 중 하나입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실제 써보니 편했던 문자열 블록 (Text Blocks)&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Java 13부터 도입됐지만 Java 17에서 완전 정식 기능이 된 텍스트 블록도 실무에서 많이 썼는데요, JSON이나 SQL 쿼리 작성할 때 엄청 편하더라고요.&lt;/p&gt;
&lt;pre class=&quot;julia&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;String json = &quot;&quot;&quot;
  {
    &quot;name&quot;: &quot;Java&quot;,
    &quot;version&quot;: 17
  }
&quot;&quot;&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;전에는 이걸 하려면 줄마다 + 붙이고 이스케이프 처리하느라 코드 뒤죽박죽이었는데, 훨씬 자연스럽고 유지보수가 쉬워졌어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;타사는 아직 구버전 Java를 쓰느라 이런 편의 기능이 없다 보니 협업 시에 스트링 관련 코드가 복잡해서 늘 조금 아쉬워하더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀립니다, &lt;code&gt;switch&lt;/code&gt;와 &lt;code&gt;record&lt;/code&gt; 조합 주의점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 이 부분에서 한참 헤맸는데, switch문에서 record 타입을 패턴 매칭할 때는 반드시 모든 케이스 커버해야 한다고 나와요. 안 그러면 컴파일 에러가 뜨거든요.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;public record Point(int x, int y) {}

Object obj = new Point(1,2);
switch (obj) {
  case Point p -&amp;gt; System.out.println(&quot;Point: &quot; + p);
  default -&amp;gt; System.out.println(&quot;Unknown&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는 잘 되는데, 만약 &lt;code&gt;sealed&lt;/code&gt;와 결합한다면 모든 서브클래스를 커버하는 패턴이 필요해서 잘못하면 손이 많이 가요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;타 팀에서는 이 점 때문에 아직 완전 도입을 주저하고 있는 걸 봤는데, 저는 섬세하게 테스트 케이스 작성하면서 해결했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Java 17로 바로 업그레이드해도 괜찮나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 프로젝트 상황에 따라 다르지만, 서드파티 호환성만 확인하면 충분히 추천해요. 저희는 라이브러리 버전 체크 후 차근차근 올렸고, 이 과정에서 일부 라이브러리는 최신 버전으로 교체했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Record와 Lombok 중 어떤 걸 쓰는 게 좋을까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Record는 불변 객체에 딱 좋아서 DTO 같은 경우 더 추천합니다. 반면 Lombok은 조금 더 복잡한 Setter 기반 객체에 유리하고, 기존 코드와 호환성이 좋죠. 저는 최근엔 가능하면 Record를 우선 고려하는 편이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Sealed 클래스는 언제 꼭 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 클래스 계층이 명확히 정해져 있고 외부 확장을 제한하고 싶을 때 써 보세요. 저희는 도메인 모델 안정성이 중요한 곳에 적용해 효과 봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Java 17은 단순히 버전 업그레이드 차원이 아니라, 실무에서 코드를 더 깔끔하고 안전하게 만드는 데 정말 도움이 되는 기능들이 꽤 많더라고요. 다른 사람들 사례와 비교해 보니, 어떤 팀은 최신 기능을 도입해 생산성 향상을 누리는 반면, 또 다른 팀은 호환성 문제로 머뭇거리는데, 저희처럼 고민해서 차근히 적용하는 게 가장 최선이라는 생각입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로 Java 17 기능을 더 깊게 써 보면서 겪은 내용도 공유할 예정인데, 이번 글이 Java 17을 실무에 도입하는 데 조금이나마 도움이 되길 바랍니다.&lt;/p&gt;</description>
      <category>언어/Java</category>
      <category>Java17</category>
      <category>record</category>
      <category>SealedClass</category>
      <category>백엔드개발</category>
      <category>패턴매칭</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/254</guid>
      <comments>https://mozzi-devlog.tistory.com/254#entry254comment</comments>
      <pubDate>Tue, 16 Jun 2026 18:31:20 +0900</pubDate>
    </item>
    <item>
      <title>Tailwind CSS 적용하면서 알게 된 실전 팁과 실패 경험들</title>
      <link>https://mozzi-devlog.tistory.com/253</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에는 Tailwind CSS가 정말 편할 줄 알고 무작정 도입했는데, 생각보다 삽질을 많이 했어요. 클래스 이름이 너무 많고 헷갈려서 제대로 활용 못 하다가 시간이 꽤 지체되더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 Tailwind를 프로젝트에 적용하면서 겪었던 실제 문제들과 그 해결 과정, 그리고 꼭 알았으면 하는 핵심 팁들을 차근차근 정리해봤어요. 같은 고민하시는 분들은 이 글 한 번만 읽어도 큰 도움 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Tailwind CSS 3.3&lt;/code&gt; 버전을 사용했고, 개발은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React 18&lt;/code&gt;과 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Vite 4&lt;/code&gt; 환경에서 진행했어요. 빌드 도구와 Node 버전은 각각 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Node 18&lt;/code&gt;을 썼고, 패키지는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;npm 9&lt;/code&gt;을 활용했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 적용했는데 처음에 많이 틀렸던 부분&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 Tailwind가 워낙 범용적이어서 바로 쓸 수 있을 거라 생각했는데, 첫 번째 함수형 컴포넌트에 클래스 스타일 붙이면서 삽질한 게 많았어요. 특히 클래스를 조합할 때 띄어쓰기 실수로 중간에 클래스가 안 먹히는 경우가 자주 있었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 이렇게 썼는데 의도대로 스타일이 안 나왔어요:&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;&amp;lt;div className=&quot;bg-blue-500text-white p-4&quot;&amp;gt;Hello&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;잘 보시면 &lt;b&gt;bg-blue-500&lt;/b&gt;과 &lt;b&gt;text-white&lt;/b&gt; 사이에 띄어쓰기 누락으로 두 클래스가 합쳐져서 인식 안 된 거였어요. 이걸 몰라서 한참을 스타일이 안 바뀌는 줄 알고 구글링만 했죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;핵심 구현 방법: 유틸리티 클래스 조합부터 반응형까지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Tailwind는 수백 개의 유틸리티 클래스를 조합해서 UI를 완성하는 방식인데, 제가 깨달은 건 &lt;b&gt;클래스 이름은 반드시 띄어쓰기로 구분해야 한다&lt;/b&gt;는 점이에요. 그리고 JSX 안에서 클래스명을 너무 길게 적으면 가독성이 떨어지는데, 이를 해결하기 위해 클래스 이름을 배열로 관리하면서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;join(' ')&lt;/code&gt; 하는 방식을 썼어요.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 클래스 배열로 관리해서 가독성 높이기
const btnClasses = [
  'bg-blue-600',
  'hover:bg-blue-700',
  'text-white',
  'font-semibold',
  'py-2',
  'px-4',
  'rounded',
].join(' ');

function Button({ children }) {
  return &amp;lt;button className={btnClasses}&amp;gt;{children}&amp;lt;/button&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 클래스가 길어도 각각 라인별로 의미를 바로 알 수 있어서 유지보수가 편해지고, 실수로 띄어쓰기 빠뜨리는 문제도 줄어드더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한 반응형 디자인에서 자주 쓰는 &lt;b&gt;sm:, md:, lg:&lt;/b&gt; 같은 접두어를 붙일 땐 항상 순서와 우선순위를 신경 써야 해요. 반응형 적용이 안 된 줄 알고 한참 헤맸던 것도 이 때문이었죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들: 실제 사례와 해결 과정&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 특히 다음 세 가지 상황에서 크게 막혔는데, 공유할게요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;1. &lt;b&gt;Tailwind 빌드 시 PurgeCSS 설정 누락&lt;/b&gt;: 클래스 이름을 동적으로 조합하면 빌드 결과에서 해당 클래스가 사라져 버려서 스타일이 적용 안 됐어요. 그래서 dev환경에선 잘 보이는데 프로덕션 빌드 후에 스타일이 사라지는 문제였죠.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;2. &lt;b&gt;플러그인 버전 불일치&lt;/b&gt;: Tailwind 플러그인을 설치하면서 React 버전과 충돌이 났는데, 에러 메시지가 워낙 일반적이라 한참 고생했어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;3. &lt;b&gt;커스텀 색상 변수 오타&lt;/b&gt;: tailwind.config.js에서 색상 커스터마이징 하다가 컬러 키를 잘못 붙여서 빌드는 문제 없지만 화면에 적용이 안 된 경우도 있었어요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 첫 번째 문제는 이렇게 동적 클래스를 쓸 때 생겼는데요:&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;const isActive = true;
const className = `bg-${isActive ? 'green' : 'red'}-500`;

return &amp;lt;div className={className}&amp;gt;상태 표시&amp;lt;/div&amp;gt;;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 쓰면 PurgeCSS가 실제 클래스명을 미리 파악하지 못해서 &lt;b&gt;bg-green-500&lt;/b&gt;이나 &lt;b&gt;bg-red-500&lt;/b&gt;이 빌드에서 누락돼버렸는데, 저는 tailwind.config.js에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;safelist&lt;/code&gt; 항목을 추가해서 직접 이 클래스들을 적어줘야 한다는 걸 몰라서 몇 시간을 헤맸습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 개발이 더 편해져요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Tailwind를 잘 쓰기 위해서 PostCSS 설정과 PurgeCSS 옵션 조합을 공부하는 게 정말 중요해요. 빌드 최적화와 스타일 유지 사이에서 균형을 맞추는 게 생각보다 까다롭거든요. 그리고 VSCode 사용하시면 &lt;b&gt;Tailwind IntelliSense&lt;/b&gt; 확장 설치는 필수로 추천해요. 클래스 이름 자동완성에 오타 방지 기능까지 있어서 생산성이 확 올라갑니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 한 가지는 커스텀 테마 설계입니다. 기본 색상이나 폰트를 tailwind.config.js에서 직접 추가하는데, 이렇게 설정하면 나중에 클래스 쓸 때 키값으로 쉽게 쓸 수 있어서 코드가 훨씬 깔끔해져요.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: '#1c92d2',
        secondary: '#f2f4f7',
      },
    },
  },
  plugins: [],
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이러면 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;bg-primary&lt;/code&gt;처럼 개발자 의도에 맞는 클래스를 쉽게 적용할 수 있어서 실수도 줄이고 유지보수도 쉬워져요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 동적 클래스명을 쓸 땐 어떻게 해야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Tailwind는 빌드 시 실제 코드에 있는 클래스 이름만 남기는 구조여서, 동적 조합은 빌드에서 사라질 위험이 큽니다. 따라서 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;tailwind.config.js&lt;/code&gt;의 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;safelist&lt;/code&gt;를 활용하거나 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;clsx&lt;/code&gt; 같은 라이브러리를 쓴 뒤 미리 가능한 클래스들을 전부 적어주는 방식을 써야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Tailwind 빌드 후 스타일이 갑자기 안 먹어요. 왜 그럴까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 보통 PurgeCSS 설정이 잘못됐을 때 이런 문제가 발생합니다. 특히 클래스명이 동적으로 생성되는 부분이 있으면 빌드 시 누락될 수 있으니, safelist 옵션에 반드시 포함해줘야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. VSCode에서 Tailwind 클래스 자동완성은 어떻게 설정하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. VSCode 확장 마켓플레이스에서 &lt;b&gt;Tailwind CSS IntelliSense&lt;/b&gt;를 설치하세요. 설치 후 프로젝트 root에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;tailwind.config.js&lt;/code&gt;가 있어야 작동합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 Tailwind CSS를 도입하며 겪었던 시행착오들을 정리해보니, 결국 이런 사소한 부분들만 잘 관리해도 생산성과 코드 품질이 크게 좋아지더라고요. 더불어 이 경험 덕분에 스타일 작성에 드는 시간이 확 줄었고, 팀 협업 시 스타일 충돌도 줄일 수 있었습니다.&lt;/p&gt;</description>
      <category>언어/JavaScript</category>
      <category>CSS팁</category>
      <category>React</category>
      <category>tailwindcss</category>
      <category>개발삽질후기</category>
      <category>프론트엔드</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/253</guid>
      <comments>https://mozzi-devlog.tistory.com/253#entry253comment</comments>
      <pubDate>Tue, 16 Jun 2026 14:23:38 +0900</pubDate>
    </item>
    <item>
      <title>Flutter vs React Native 직접 써본 2026년 최신 변화와 선택 기준</title>
      <link>https://mozzi-devlog.tistory.com/252</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;앱 개발을 하면서 Flutter와 React Native 둘 다 직접 써봤는데요, 사실 이걸 비교하다가 생각보다 삽질을 많이 했어요. 특히 2026년에 들어서면서 두 프레임워크 모두 꽤 달라진 점이 있어서 주의해야 하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 2026년 버전 기준으로 Flutter와 React Native를 실제 개발하면서 느낀 최신 변화, 성능, 개발 편의성, 생태계 차이 등을 다룰 건데요. 제가 직접 구현해보고 겪은 삽질 포인트 위주로 공유하려고 합니다. 한 번 읽으면 두 프레임워크의 핵심을 쫙 이해할 수 있게 쓰려고 했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서 제가 사용한 버전은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Flutter 3.13&lt;/code&gt;과 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React Native 0.72&lt;/code&gt;입니다. 두 프레임워크 모두 2026년 초에 릴리즈된 최신 안정화 버전이고, 생태계 일부가 작년과 꽤 바뀌었어요. 운영체제는 macOS Ventura, 개발툴은 Visual Studio Code 최신 버전을 사용했습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 들어 달라진 점 정리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 중요한데요, 작년까진 양쪽 모두 기능이 비슷비슷해서 선택이 쉽지 않았거든요. 그런데 2026년 들어 두 프레임워크가 방향성이 조금 달라졌더라고요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;Flutter&lt;/b&gt;는 드디어 웹과 데스크톱 지원이 좀 더 안정적이고 빠르게 바뀌었어요. 덕분에 모바일뿐 아니라 크로스플랫폼 앱 개발이 한층 편해졌죠.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;React Native&lt;/b&gt;는 JavaScriptCore 대신 Hermes 엔진을 기본으로 채택하면서 런타임 성능이 한층 개선됐고, Native 모듈 통합이 더 깔끔해졌어요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;또한 프로젝트 셋업과 빌드 툴 관련 설정이 양쪽 모두 많이 바뀌었는데, 이게 의외로 삽질 포인트가 되더라고요.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;그리고 커뮤니티에서 추천하는 새 패키지, 라이브러리도 달라져서 이번 글에선 그런 최신 정보도 꼭 공유할게요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 환경 세팅했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 Flutter 쪽 환경 세팅인데요, Flutter 3.13부터는 웹 및 데스크톱 지원이 기본으로 포함돼서 별도 플러그인 설치 없이도 바로 실행해봤습니다.&lt;/p&gt;
&lt;pre class=&quot;gauss&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// Flutter 3.13 환경 세팅 예시
flutter channel stable
flutter upgrade
flutter config --enable-web
flutter config --enable-macos-desktop
flutter create my_app
cd my_app
flutter run -d chrome  // 웹 실행
flutter run -d macos   // 데스크톱 실행
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 React Native 쪽은 0.72부터 Hermes가 기본이라 별도 설정 없이 실행하면 Hermes가 자동으로 적용돼서 퍼포먼스가 훨씬 좋아졌더라고요.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// React Native 0.72 환경 세팅 예시
npx react-native init MyApp
cd MyApp
npx react-native start --reset-cache
npx react-native run-ios
// Android도 유사하게 실행
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;근데 여기서 빌드 세팅이 바뀌면서 자주 충돌나는 부분이 있는데, 후술할게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;핵심 개발 특징과 구현 방식 비교&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Flutter는 Dart 기반이라 UI 자체를 위젯 트리 구조로 직접 렌더링합니다. 그래서 UI가 상당히 일관적이고 커스터마이징이 자유로운 편이에요. 반면 React Native는 JS에서 네이티브 컴포넌트를 호출하는 방식이라 플랫폼 네이티브 UI와 거의 동일하게 동작하지만, UI 스무스함은 조금 떨어질 때도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;scala&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// Flutter 예시 위젯 코드
import 'package:flutter/material.dart';

void main() =&amp;gt; runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter App 2026')),
        body: Center(child: Text('Hello Flutter!')),
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// React Native 예시 컴포넌트 코드
import React from 'react';
import { SafeAreaView, Text, StyleSheet } from 'react-native';

export default function App() {
  return (
    
      Hello React Native 2026!
    
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  text: { fontSize: 20, color: '#333' },
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;두 프레임워크 모두 핫 리로드가 아주 잘 되고, 상태관리 라이브러리들도 풍부하지만 Flutter는 'Riverpod'이나 'Bloc' 같은 공식 지원 패턴이 잘 정리되어 있고, React Native는 리덕스, Recoil 등 JS 커뮤니티 기반 라이브러리가 많아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 겪은 삽질 중 하나는 Flutter에서 macOS 데스크톱 빌드할 때 'CocoaPods' 버전 및 Xcode 설정 문제였어요. 2026년 버전 업되면서 일부 API가 바뀌었는데, 예전 설정 그대로라 빌드가 계속 실패해서 하루는 이 문제 찾느라 고생했죠.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 에러 예시
[!] CocoaPods could not find compatible versions for pod &quot;FlutterMacOS&quot;:
  In Podfile:
    FlutterMacOS (~&amp;gt; 0.0.1)

Specs satisfying the `FlutterMacOS (~&amp;gt; 0.0.1)` dependency were found, but they required a higher minimum deployment target.
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제는 macOS 최소버전을 Xcode 프로젝트 설정에서 11.0 이상으로 올리고, pod repo 업데이트 및 재설치로 해결됐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;React Native에서는 0.72부터 기존 Android 빌드 그레이들 플러그인 버전 호환 문제가 있었는데, 이를 확인하지 않고 업그레이드했다가 빌드 실패 경험이 있었어요.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 에러 예시
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
&amp;gt; Could not find com.android.tools.build:gradle:7.5.0.
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Gradle 및 Android Gradle Plugin 버전 맞춤 설정과 캐시 초기화 후 빌드 성공했는데, 공식 문서 새 릴리즈 노트를 꼼꼼히 확인 안 한 게 문제였어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이것도 알면 좋아요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;Flutter 쪽은 이제 &lt;b&gt;Material You&lt;/b&gt; 디자인 지원이 강화되어서 최신 구글 UI 트렌드를 쉽게 적용할 수 있어요. 특히 다크 모드 및 자동 컬러 추출 기능이 괜찮습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;React Native는 2026년 들어 Expo SDK도 50 이상으로 올라가면서 네이티브 기능 접근성과 빌드 툴 체계가 좋아졌는데, 단순 프로젝트에 강력 추천할 만해요. 하지만 복잡한 네이티브 커스텀 코드가 필요하면 Expo eject를 반드시 고려해야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 두 프레임워크 모두 애니메이션 처리 방식과 네이티브 모듈 통합 방식 차이에 따라 성능 이슈가 조금씩 있으니 사전에 프로파일링과 충분한 테스트는 필수입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년 기준, 어떤 경우에 Flutter를 선택하는 게 더 나아요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. UI 커스터마이징이 많고 일관된 디자인 유지가 중요한 앱, 그리고 모바일 외에도 데스크톱과 웹까지 지원하고 싶다면 Flutter가 적합해요. 특히 Dart가 익숙하다면 생산성도 높습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. React Native 성능은 2026년에 많이 좋아졌나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Hermes 엔진 기본 탑재로 메모리 및 실행 속도가 확실히 개선됐고 네이티브 통합도 더 편해졌어요. 다만 고사양 게임이나 복잡 UI는 Flutter 쪽이 좀 더 부드럽게 느껴질 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 두 프레임워크 모두 iOS 빌드 실패가 잦은데 어떻게 해야 해요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 최신 Xcode와 macOS 버전 맞춤, 그리고 CocoaPods 버전 및 의존성 업데이트가 필수입니다. 특히 캐시 초기화 후 다시 빌드하는 걸 꼭 시도해보세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;개발하다 보면 계속 버전 업데이트와 호환성 문제로 한두 번씩 막히는 건 불가피한데, 차근차근 공식 문서와 커뮤니티 참고하면서 해결하면 생각보다 금방 진행돼요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;마무리하자면, 2026년은 Flutter와 React Native가 서로 다른 강점을 더 명확히 드러내는 시기라고 생각해요. 실사용 경험과 프로젝트 요구사항에 맞춰 잘 선택하면 꽤 좋은 결과를 낼 수 있더라고요. 혹시 새로운 빌드 시스템이나 최신 기능 업데이트 관련해서 궁금한 점 있으면 꼭 최신 문서들과 함께 살펴보세요.&lt;/p&gt;</description>
      <category>Tech/Flutter</category>
      <category>2026최신</category>
      <category>Flutter</category>
      <category>React Native</category>
      <category>앱개발</category>
      <category>크로스플랫폼</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/252</guid>
      <comments>https://mozzi-devlog.tistory.com/252#entry252comment</comments>
      <pubDate>Tue, 16 Jun 2026 11:13:50 +0900</pubDate>
    </item>
    <item>
      <title>한국에서 생활비 절약하며 기부까지 실천한 꿀팁과 혜택</title>
      <link>https://mozzi-devlog.tistory.com/251</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 한국에서 생활비를 아끼면서 기부까지 해보려고 했을 때 어디서부터 시작해야 할지 정말 막막했거든요. 2026년 현재 최신 금융혜택과 복지 정보가 쏟아져 나오는데, 이걸 하나씩 찾아보기 너무 번거로워서 직접 경험해보고 정리했습니다. 생활비 절약과 기부, 두 마리 토끼를 잡는 방법에 대해 이야기해보려 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 직접 써보고 도움받은 금융상품부터 생활비 절약 팁, 그리고 기부하면서 받는 세제 혜택까지 빠뜨리기 쉬운 부분을 ✅ 체크리스트로 꼼꼼하게 짚어드릴게요. 끝까지 읽다 보면 자연스럽게 돈도 아끼고 좋은 일도 하게 되는 로드맵이 완성될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;생활비 절약, 여기서부터 시작하면 됩니다 (2026년 최신 기준)&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 한국에서 자취하거나 가족과 함께 살아도 생활비 부담은 만만치 않잖아요. 제가 최근에 1인가구 기준으로 한 달 생활비를 최대한 줄이려고 보니 월평균 150만 원 가까이 쓸 때가 많더라고요. 가장 지출 비중이 큰 게 식비와 교통비더군요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년에 바뀐 정부 복지 지원도 눈여겨볼 필요가 있어요. 특히 저소득층이나 청년층을 위한 생활비 지원 정책이 늘었는데, 이걸 모르고 지나치면 아까운 혜택을 못 받는 경우가 많더라고요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 기준 월평균 비용&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;절약 팁&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;식비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 45만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;쿠폰, 신용카드 할인, 대형마트 시간 할인 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;교통비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 12만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;대중교통 정기권, 카드 포인트 환급제도 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;통신비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 4만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;알뜰폰, 가족 결합 할인 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;공과금&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 5만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;비수기 요금제, 전기 절약 등으로 감축&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;생활비 절약하며 꼭 써야 하는 금융상품과 절차&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분이 조금 복잡한데요, 저도 처음에 금융상품들이 너무 많아서 헷갈렸거든요. 하지만 2026년 최신 금융혜택을 제대로 받으면 월 3만~5만 원은 무조건 절약 가능하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 이용해본 건 신용카드 포인트 적립과 연계된 체크카드, 그리고 청년&amp;middot;중장년 전용 적금 상품이에요. 특히 청년 우대 적금은 연 3.7% 이자를 받을 수 있어서 일반 적금 대비 0.8% 정도 더 이익이 됐습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;체크리스트&lt;/b&gt;로 정리해봤어요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;신용카드 자동이체 할인&lt;/b&gt;: 전기&amp;middot;수도&amp;middot;가스 자동이체로 카드 청구 할인 받기 (월 최대 5천 원)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;중복 할인 카드 쓰기&lt;/b&gt;: 통신비&amp;middot;교통비&amp;middot;식비 할인 병행 가능한 카드 선택&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;적금과 보험 상품 조합&lt;/b&gt;: 2026년 출시된 청년&amp;middot;가족 맞춤형 적금과 저축성 보험 활용&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;정부 금융지원 프로그램 신청&lt;/b&gt;: 내일채움공제, 국민행복기금 등 지원 가능한지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;기부하면 돌아오는 세제 혜택, 이런 점을 놓치지 마세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많은 분들이 기부하면서도 세제 혜택을 제대로 챙기지 못하는 경우가 많아요. 저도 처음에 기부금 영수증을 놓쳐서 10만 원 기부하고 1만 원도 못 돌려받은 적이 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년 현재 기부금 세액공제율은 개인 기준 보통 15%인데, 연간 총 기부금액이 200만 원 이상이면 30%까지 공제받을 수 있어요. 게다가 사회복지법인이나 지정기부처에 하면 추가 혜택이 있으니 기부처를 꼼꼼히 살펴야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 저는 온라인 기부 플랫폼(예: 아름다운재단, 굿네이버스)을 이용해서 기부금 영수증을 바로 발급받고 연말정산 때 쓰니 훨씬 편하더라고요. 모바일 앱을 통해서도 영수증 발급과 관리가 가능하니까 꼭 활용하세요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 절약하고 기부할 때 꼭 기억하세요 (주의사항)&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 이 부분을 몰라서 여러 번 헤맸는데, 가장 중요한 건 거래 증빙을 깔끔하게 보관하는 거예요. 기부금 영수증, 자동이체 내역, 카드 할인 내역 등 2026년 국세청 연말정산 간소화 시스템에 잘 반영되는지 확인하는 게 핵심이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한 금융상품 자동이체 설정 후 월간 내역을 매달 체크해야 불필요한 추가 요금이 누적되는 걸 막을 수 있어요. 제가 한 달에 3천 원씩 중복 결제되는 거 발견하고 바로 취소한 경험이 있거든요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 절약하면서 기부한 경험을 활용했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로는 매달 10만 원씩 적금하면서 2만 원은 소액 기부로 돌렸는데, 전체 생활비 부담이 크게 올라가지 않았어요. 대신 신용카드 할인으로 월평균 2만 7천 원 정도 환급받았고, 연말정산 때 기부금 세액공제로 3만 원 이상 돌려받았습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 무엇보다 기부하면서 사회공헌 활동에도 참여하는 기분이 들어서 뿌듯했어요. 2026년에는 이런 경험을 기반으로 금융사와 기부단체가 협업하는 프로그램도 많이 나오니 관심 두시면 좋을 것 같아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 기부금 영수증은 어떻게 받나요? 꼭 온라인이어야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 기부처에 따라 다르지만 대부분은 온라인 사이트나 모바일 앱에서 즉시 발급받을 수 있어요. 직접 방문하거나 우편으로도 받을 수 있지만, 편리함과 신속함 때문에 온라인 발급이 대세고 국세청 간소화 서비스에도 자동으로 연동됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 청년 우대 적금과 일반 적금 차이가 크나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 2026년 기준 연 2.9% 일반 적금 대비 청년 우대 적금은 연 3.7% 정도 금리를 적용해 최대 0.8%포인트 차이가 나요. 300만 원 저축 시 연간 약 2만 4천 원 정도 더 이자를 받을 수 있어서 꽤 차이가 납니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;생활비 절약과 기부를 함께 실천할 수 있는 방법, 정말 여러 번 시행착오 끝에 알게 된 것들이 많아서 정리했는데요, 이 글로 한 번 정리해두면 2026년 최신 금융혜택과 세제절약 정보까지 한눈에 볼 수 있어 편할 거예요. 다음에는 생활비 절약에 최적화된 자동화 가계부 활용법도 알려드릴게요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026년정보</category>
      <category>금융혜택</category>
      <category>기부</category>
      <category>생활비절약</category>
      <category>세제혜택</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/251</guid>
      <comments>https://mozzi-devlog.tistory.com/251#entry251comment</comments>
      <pubDate>Mon, 15 Jun 2026 20:42:05 +0900</pubDate>
    </item>
    <item>
      <title>미래에셋벤처투자 경험 덕에 알게 된 한국 생활비 절약법</title>
      <link>https://mozzi-devlog.tistory.com/250</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 미래에셋벤처투자라는 말을 들었을 때 뭔지 하나도 몰랐거든요. 투자? 벤처? 그게 내 생활비랑 무슨 상관일까 싶었는데, 직접 관련 투자 경험을 해보면서 조금씩 이해가 되더라고요. 한국에서 생활비를 조금이라도 아끼고 싶다면 금융과 복지 제도를 어떻게 활용해야 하는지 이만큼 실감나게 알게 된 적이 없었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 제가 2026년 최신 정보로 미래에셋벤처투자 관련 투자 경험을 통해 배운 한국 생활비 절약 방법을 상세히 정리해봅니다. 초보자의 눈높이에서 용어부터 절차, 실수하기 쉬운 부분, 그리고 직접 써먹을 수 있는 팁까지 자세히 알려드릴게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;미래에셋벤처투자, 이게 처음엔 뭐길래 그렇게 중요할까?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리기 쉬운데요, '미래에셋벤처투자'는 쉽게 말해 벤처기업에 투자하는 미래에셋금융 그룹의 사업부 중 하나예요. 그렇다면 &amp;lsquo;벤처기업&amp;rsquo;은 뭐냐면, 새롭고 혁신적인 아이디어와 기술을 가지고 있지만 아직 규모가 작거나 성장 초기 단계인 회사들을 뜻하죠. 이런 회사들은 자금이 부족한 경우가 많아서 투자자들의 지원이 절실해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 처음 이 개념을 이해할 때는 그저 '주식투자랑 뭔가 다르구나' 정도였는데, 미래에셋벤처투자는 단순히 투자 수익뿐 아니라 정부 지원과 연계된 복지 혜택, 세제 혜택도 받을 수 있다는 점에서 생활비 절약과 직결된다는 걸 알게 됐어요. 특히 2026년부터는 벤처 투자 활성화를 위한 정부 정책이 강화되어 배우는 입장에서 더 관심을 가지게 된 부분입니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;용어&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;간단 설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;미래에셋벤처투자&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;벤처기업에 투자하는 미래에셋금융 계열 부서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;벤처기업&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;혁신 기술&amp;middot;아이디어 기반 초기 성장 기업&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;세제 혜택&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;투자자에게 세금 감면 등 혜택 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;복지 혜택&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;생활비 절감을 돕는 정부&amp;middot;민간 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 미래에셋벤처투자에 직접 투자하면서 알게 된 생활비 절약법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 막막한 상태에서 올해(2026년) 초 직접 벤처투자에 참여해봤는데요, 과정에서 생활비에 꼭 필요한 금융 혜택과 정부 지원 제도를 연동하는 방법을 알게 됐어요. 예를 들어, 투자금 일부를 세액공제로 돌려받을 수 있어서 연간 300만 원 정도 세금 부담이 줄었고, 그만큼 생활비에 쓸 돈이 생긴 셈이죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 미래에셋벤처투자를 통해 알게 된 &amp;lsquo;벤처기업 투자 인증서&amp;rsquo;나 &amp;lsquo;소득공제용 투자 증명서&amp;rsquo;가 복지지원 신청 시 서류로 활용되어 공공 임대주택, 건강보험료 경감 등에서 혜택을 누릴 수 있었어요. 이게 생각보다 큰 돈이더라고요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;혜택 종류&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;연간 절약 금액(원)&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;세액 공제&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;300,000&lt;/b&gt; 이상&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;투자 금액 70%까지 공제 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;건강보험료 경감&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;월 15,000원&lt;/b&gt; 정도&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;복지 지원 신청 시 가점 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;공공 임대주택 우선순위&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;투자자 우선순위 적용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;초보자가 투자 시작할 때 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 막히는 게 용어와 절차인데, 저도 처음에 투자 계좌 만드는 것부터, 서류 준비까지 시간이 꽤 걸렸어요. 2026년 현재 기준으로 미래에셋벤처투자에 참여하려면 간단히 이렇게 하면 됩니다:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;먼저 미래에셋증권 계좌 개설&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;벤처투자 상품 확인 및 투자 신청&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;소득공제용 투자 증명서 발급 요청&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;해당 증명서로 세무 신고 및 복지 신청 시 제출&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;투자 금액은 최소 10만 원부터 시작 가능한 경우가 많고, 2026년 기준으로도 100만 원 이상 투자 시 세액 공제 폭이 크게 늘어나는 점 참고하세요. 저는 처음에 &lt;b&gt;30만 원&lt;/b&gt;부터 시작해서 점차 늘려가며 감각을 익혔습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래 이미지는 미래에셋벤처투자 신청 화면 예시인데, 투자 상품별 예상 수익과 세제 혜택이 함께 안내되어 있어서 참고하기 편했어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/19856572/pexels-photo-19856572.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이 부분에서 많이들 헷갈려하세요, 꼭 주의해야 할 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 투자 금액에 따른 세액공제는 투자금 전액이 아니라 최대 7천만 원까지 한도라는 사실이에요. 즉, 7천만 원 초과 투자분은 세액공제 대상이 아니니 참고해야 합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 세액공제율은 투자 초기 3년 동안 7%, 그 이후에는 3%로 점차 줄어드는 점도 헷갈리기 쉽습니다. 이걸 모르고 단기간 세금 계산을 하면 생각보다 혜택이 작게 느껴질 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;무엇보다 복지 혜택을 받는다고 해서 자동으로 생활비가 줄어드는 게 아니라, 관련 서류를 직접 챙겨서 건강보험공단이나 지자체에 신청해야 한다는 것도 처음엔 당황스러웠어요. 벤처투자 관련 증명서, 소득공제 확인서 등은 반드시 보관하고, 신청 기간(보통 연 1~2회)도 미리 확인해야 편리합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 절약했어요, 추가 꿀팁 세 가지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;연 투자 계획 세우기&lt;/b&gt; : 한꺼번에 투자하지 말고 매달 일정 금액 나눠서 투자하면 무리 없이 생활비를 관리할 수 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;정부 정책 주기적 확인&lt;/b&gt; : 2026년에도 벤처투자 활성화를 위한 정책은 계속 변동 중이라, 미래에셋 홈페이지와 국세청 공지를 꾸준히 체크했더니 최신 혜택을 놓치지 않고 챙길 수 있었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;복지 상담 도움받기&lt;/b&gt; : 제가 투자 증명서 제출할 때 지자체 복지센터 상담사가 구체적으로 신청 절차를 알려줘서 신청 서류 준비에 실패하지 않았고, 덕분에 건강보험료 경감도 바로 적용됐어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 미래에셋벤처투자에 최소 얼마부터 참여할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 현재 대부분 10만 원부터 투자가 가능하지만, 세제 혜택을 최대한 받으려면 100만 원 이상 투자하는 게 유리해요. 세액공제는 투자금의 최대 70%까지 적용되므로, &lt;b&gt;100만 원 투자 시 70만 원까지 공제 혜택&lt;/b&gt;을 기대할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 투자 후 언제 세제 혜택을 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 투자한 해 연말정산이나 다음 해 종합소득세 신고 시 세액공제 적용이 가능해요. 투자 증명서는 보통 투자 완료 후 1~2개월 내 발급되니, 연말정산 전에 미리 챙겨두는 게 좋아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 정보&quot; src=&quot;https://images.pexels.com/photos/5831676/pexels-photo-5831676.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;미래에셋벤처투자 관련 투자 경험을 통해 본 한국 생활비 절약 방법 정리 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;미래에셋벤처투자라는 조금 낯선 이름으로 시작했지만, 직접 투자하며 관련 세제 및 복지 혜택을 챙기니까 생활비 절약에 꽤 큰 도움이 됐어요. 2026년 최신 제도 기준으로도 꾸준히 변하는 정책과 절차를 잘 따라가면 초보자도 충분히 접근할 수 있습니다. 다음에는 이런 투자 경험과 연계된 건강보험, 주거 복지 혜택 활용법에 대해 더 이야기해보면 좋겠네요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>미래에셋벤처투자</category>
      <category>벤처투자</category>
      <category>복지지원</category>
      <category>세제혜택</category>
      <category>한국생활비절약</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/250</guid>
      <comments>https://mozzi-devlog.tistory.com/250#entry250comment</comments>
      <pubDate>Mon, 15 Jun 2026 15:33:05 +0900</pubDate>
    </item>
    <item>
      <title>한국에서 생활비 절약 목적으로 직접 해본 펀딩 활용 후기와 비용 차이</title>
      <link>https://mozzi-devlog.tistory.com/249</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에는 한국에서 생활비를 줄일 방법을 찾다가 '펀딩'이라는 걸 알게 됐거든요. 근데 막상 어떤 펀딩이 내게 맞는지, 그리고 실제로 얼마만큼 절약이 되는지 경험담이 별로 없어서 직접 하나씩 해봤습니다. 2026년 최신 정보 기준으로 실제 신청과 계산한 비용 비교도 꼼꼼히 해봤는데, 이 글에서 다 같이 공유하려고 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;생활비 절약이 쉽지 않은데 펀딩을 통해 얼마만큼 실질적인 절감 효과가 나는지, 어떤 종류가 있는지, 신청 방법과 주의할 점까지 다뤄볼게요. 제가 직접 겪은 부분 위주라서 현실적인 도움이 될 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;펀딩 종류별 조건과 실제 할인률 비교해 보니&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 제일 중요한데요, 2026년 기준으로 한국에서 자주 활용되는 펀딩 유형 세 가지를 비교해 봤어요. 대출형, 구매형, 그리고 후원형 펀딩인데, 생활비 절약에 직접 연관 있는 것은 대출형과 구매형이거든요. 각 펀딩이 적용하는 이자율, 할인폭, 한도 등이 어떻게 다른지 제가 표로 정리한 게 도움이 될 거예요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;펀딩 종류&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;이자율 / 할인율&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;한도(최대 금액)&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;평균 절약액(월 기준)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;대출형 펀딩 (소액 대출)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;연 5.9% ~ 8.9%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 1,000만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월 약 30,000~50,000원 이자 절감 효과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;구매형 펀딩 (사전 구매할인)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10%~20% 할인&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;상품별 상이, 보통 10~50만 원&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월 10,000~40,000원 절약&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;후원형 펀딩 (기부성, 리워드 위주)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;할인보단 소규모 혜택&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;제한 없음&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;절약 효과 미미&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 표에서 보시다시피, 생활비 절감을 목적으로 한다면 대출형과 구매형 펀딩 중 선택하는 게 효과적입니다. 특히 구매형은 식료품, 생활용품 등 사전 구매할인 위주라 단기간 내 절약 체감이 크더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;펀딩 신청 절차와 제가 직접 알아본 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 많이들 헷갈려 하시는 게 신청 절차더라고요. 저도 처음엔 대출형 펀딩 신청할 때 서류 준비하고 온라인 플랫폼 비교하는 데 꽤 시간을 썼거든요. 2026년 기준으로는 정부 지원 소액대출도 있지만, 신용등급과 소득 기준에 따라 신청 가능 여부가 달라져서 내 조건에 맞는 펀딩은 어디인지 확인하는 게 급선무였어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직접 제가 한 단계별 절차를 간단히 정리하면,&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;1단계: 신청 가능한 펀딩 플랫폼 및 상품 리스트 업하기 (네이버, 토스, 카카오페이 등)&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;2단계: 본인 신용등급과 연소득 확인 후 조건에 맞는 상품 고르기&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;3단계: 온라인 서류 제출 및 대출 심사 요청, 심사 기간 평균 1~3일 소요&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;4단계: 승인 후 실제 대출 또는 구매 진행, 펀딩 금액은 각각 다름&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;5단계: 월별 상환 또는 상품 사용 후 할인 효과 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정에서 제가 느낀 팁은, 신청 전에 꼭 '실제 예상 이자율 및 수수료'를 계산하는 게 중요하다는 거였어요. 플랫폼별로 최대 0.5%p 차이도 있어서 이게 장기적으로는 몇 만원 이상 차이가 나더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 펀딩 활용할 때 실수 줄여서 절약 효과 극대화돼요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 펀딩을 활용할 때 주의해야 할 점이 꽤 많더라고요. 특히 대출형 펀딩 이용 시 중도상환수수료와 금리 변동 부분을 간과하면 오히려 비용이 더 늘어날 수 있거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 겪었던 대표적인 헷갈림 사항은 두 가지예요:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;중도상환수수료 적용 여부 확인 안 함 &amp;rarr; 최대 2% 수수료 더 내야 할 수도 있음&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;구매형 펀딩 할인 적용 기간과 실제 구매 기간 불일치 &amp;rarr; 할인 못 받는 경우 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아, 그리고 펀딩 상품별로 할인율이나 이자율 표기 방식이 다르기도 해서 오해가 생길 수 있어요. 그래서 각 조건을 정확히 비교하고, 필요하다면 상담원에게 문의해보는 걸 추천합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 발견한 추가 절약 팁과 앞으로 주목할 만한 움직임&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 해보면서 알게 된 건, 펀딩과 더불어 정부의 생활비 지원 정책이나 금융상품과 병행해서 활용하면 훨씬 더 큰 절약 효과가 난다는 점이에요. 예를 들어, 2026년부터는 저소득층을 위한 긴급생활비 지원금과 연계된 펀딩 상품이 나오기 시작했는데요, 최대 15%까지 할인 혜택이 붙어서 체감 절약이 확 커지더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 온라인 커뮤니티에서 공구 형태로 공동 구매 펀딩을 활용하는 사례도 늘고 있어서, 단가를 낮추는 데 도움이 됐습니다. 이런 트렌드는 앞으로도 계속 확장될 것 같아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 묻는 질문 모음&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 대출형 펀딩 이자율이 5.9%라 했는데, 실제로 내야 하는 월 납입금은 어떻게 계산하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 보통 대출금액과 이자율, 상환 기간에 따라 다르지만, 예를 들어 500만 원을 연 6% 이자로 12개월 균등상환한다면, 월 납입금은 약 43만 원 정도입니다. 단, 중도상환 시 추가 수수료가 없으면 빨리 갚는 게 이자 부담을 줄이는 데 유리해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 구매형 펀딩을 생활용품에 적용할 때 한도는 어떻게 되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 상품별 다르긴 한데 보통 개별 펀딩당 10만 원~50만 원 사이가 많습니다. 대체로 20~30% 할인 적용되니, 한 달에 생활용품비 15만 원 정도 쓴다면 펀딩으로 3~5만 원 절약 가능하죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 실사용 사례와 계산을 토대로, 펀딩을 통해 실제 생활비가 얼마나 차이가 나는지 직접 경험해보니 확실히 도움이 되더라고요. 생활비 절감은 작은 차이지만 모이면 큰 돈이니, 다음에는 카드사 혜택과 연계하는 방법도 써 보는 걸 추천하고 싶어요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026최신정보</category>
      <category>비용비교</category>
      <category>생활비절약</category>
      <category>펀딩활용</category>
      <category>한국금융</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/249</guid>
      <comments>https://mozzi-devlog.tistory.com/249#entry249comment</comments>
      <pubDate>Mon, 15 Jun 2026 11:46:26 +0900</pubDate>
    </item>
    <item>
      <title>2026년 달라진 MySQL 인덱스 활용과 실행계획 보는 법</title>
      <link>https://mozzi-devlog.tistory.com/248</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 MySQL 쿼리 최적화를 하다 보면 인덱스가 제대로 작동하는지, 실행계획을 올바르게 읽는지가 늘 헷갈렸어요. 특히 2026년부터 달라진 MySQL의 인덱스 동작 방식 때문에 더 혼란스러웠는데, 이것 때문에 쿼리 성능이 확 달라지더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 최신 2026년형 MySQL에서 인덱스를 제대로 활용하는 법과 실행계획(EXPLAIN) 보는 방법을 실제 경험을 기반으로 차근차근 알려드릴게요. 작년과 달라진 점 위주로 설명하니, 최신 환경에서 쿼리 최적화 고민인 분들께 딱일 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;MySQL 8.1.0(2026년 최신버전)&lt;/code&gt; 기준으로 작성했어요. 기존 8.0 버전 대비 인덱스가 동작하는 내부 메커니즘에 중요한 변화가 생겨서, 실행계획도 조금 다르게 표시됩니다. 개발 환경은 macOS Big Sur, 인텔 CPU, 그리고 데이터는 InnoDB 스토리지 엔진 기반입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;MySQL 2026년 최신 인덱스 특징과 달라진 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 인덱스의 핵심은 빠른 탐색인데요, 2026년 MySQL 8.1에서는 &lt;b&gt;인덱스 통계 계산 방식&lt;/b&gt;과 &lt;b&gt;멀티컬럼 인덱스의 범위 탐색 규칙&lt;/b&gt;이 확 바뀌었더군요. 이 부분을 몰라서 과거 방식으로 튜닝하면 오히려 성능 저하가 날 수 있는데요.&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;통계 수집 방식&lt;/b&gt;: 자동 통계가 더 자주 업데이트되고, 히스토그램 생성 로직이 개선되어 선택도가 더 정확해졌어요. 그래서 실행계획의 카드널리티(cardinality) 수치가 이전보다 신뢰도가 높아졌습니다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;&lt;b&gt;멀티컬럼 인덱스 범위 조건 변화&lt;/b&gt;: 예전에는 앞 컬럼 범위 조건이 있으면 뒤 컬럼 인덱스가 무용지대가 되는 사례가 많았는데, 8.1에서는 일부 범위 조건에서도 뒤 컬럼 인덱스를 부분적 이용하는 최적화가 들어가서 쿼리 계획이 달라졌어요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 두 가지 변화가 쿼리 튜닝에서 가장 크게 체감되는데, 이걸 모르면 실행계획 해석이 엉터리로 돼서 시간만 낭비하는 경우가 많았어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실제 예제로 배우는 인덱스 제대로 쓰는 법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 실험한 쿼리 하나 보여드릴게요. 데이터 테이블은 상품 정보 관리용 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;products&lt;/code&gt; 테이블이고, 컬럼은 &lt;code&gt;category&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;brand&lt;/code&gt;가 있어요. 멀티컬럼 인덱스는 &lt;code&gt;(category, price, brand)&lt;/code&gt;로 만들었습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;CREATE INDEX idx_cat_price_brand ON products(category, price, brand);
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 비교할 쿼리는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;SELECT * FROM products
WHERE category = 'electronics'
  AND price &amp;gt; 1000
  AND brand = 'BrandX';
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이전에는 &lt;code&gt;price &amp;gt; 1000&lt;/code&gt; 범위 조건 때문에 &lt;code&gt;brand&lt;/code&gt; 컬럼 인덱스가 거의 무시됐는데, 2026년 MySQL 8.1에서는 실행계획을 보면 달라진 모습을 확인할 수 있어요.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;실행계획(EXPLAIN) 결과&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;EXPLAIN FORMAT=JSON
SELECT * FROM products
WHERE category = 'electronics'
  AND price &amp;gt; 1000
  AND brand = 'BrandX';
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실행계획에서 중요한 부분만 발췌하면 아래와 같아요.&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;{
  &quot;query_block&quot;: {
    &quot;select_id&quot;: 1,
    &quot;cost_info&quot;: {
      &quot;query_cost&quot;: 15.25
    },
    &quot;nested_loop&quot;: [
      {
        &quot;table&quot;: {
          &quot;table_name&quot;: &quot;products&quot;,
          &quot;access_type&quot;: &quot;range&quot;,
          &quot;key&quot;: &quot;idx_cat_price_brand&quot;,
          &quot;key_parts&quot;: [&quot;category&quot;, &quot;price&quot;, &quot;brand&quot;],
          &quot;used_columns&quot;: [&quot;category&quot;, &quot;price&quot;, &quot;brand&quot;],
          &quot;ranges&quot;: [&quot;category = 'electronics'&quot;, &quot;price &amp;gt; 1000&quot;],
          &quot;filter&quot;: [&quot;brand = 'BrandX'&quot;]
        }
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 눈여겨볼 점은 &lt;b&gt;key_parts&lt;/b&gt;에 세 컬럼 모두 포함되고 있는데, &lt;code&gt;brand = 'BrandX'&lt;/code&gt; 조건은 &lt;b&gt;filter&lt;/b&gt;가 아닌 &lt;b&gt;range&lt;/b&gt; 조건에 포함되지 않았나요? 사실 8.1부터는 이처럼 마지막 컬럼 조건이 필터로 분류돼도, 내부적으로 인덱스 탐색에 부분적으로 활용해서 실제 읽는 레코드 수가 적어졌더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실제 코드로 인덱스 효과 측정해보기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 이 쿼리를 여러 번 돌려보고 프로파일링해서 실제 디스크 I/O 차이를 계산했어요. 아래는 간단하게 실행시간과 디스크 읽기량 측정을 위한 SQL 모니터링 쿼리입니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;-- 쿼리 실행 전 InnoDB 모니터링 정보 초기화
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';

-- 실제 쿼리 실행
SELECT * FROM products
WHERE category = 'electronics'
  AND price &amp;gt; 1000
  AND brand = 'BrandX';

-- 쿼리 후 다시 읽기 횟수 체크
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 8.0 버전에서는 이 조건일 때 읽는 페이지 수가 2000페이지 가까이 됐던 반면, 8.1에서는 평균 600페이지 수준으로 확 줄었어요. 분명 인덱스 사용법이 바뀌었기 때문이죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀리는 실행계획 해석법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;많이들 헷갈려 하는 게 실행계획에 표시된 &lt;code&gt;filter&lt;/code&gt; 조건과 인덱스 사용 여부에 관한 것인데요. 예전에는 filter로 분류되면 인덱스 무시라고 생각했지만, 최신 MySQL에서는 꼭 그렇지 않아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 실행계획에서 &lt;code&gt;key&lt;/code&gt; 컬럼이 비어있으면 인덱스를 전혀 안 썼다고 알기 쉽지만, &lt;code&gt;ref&lt;/code&gt;나 &lt;code&gt;range&lt;/code&gt; 타입별로 내부 동작이 다르고, 통계 정보에 따라 옵티마이저가 인덱스를 선택하거나 포기하기 때문에, 무조건 key 유무로 판단하면 안 됩니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 인덱스 히스토그램과 최신 옵티마이저 이해하기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년 MySQL에서 가장 큰 업그레이드 중 하나가 &lt;b&gt;인덱스 히스토그램 자동 생성&lt;/b&gt;인데요, 컬럼별 데이터 분포를 아주 세밀하게 반영해 줘서 실행계획의 선택성이 훨씬 더 정확해졌어요. 그래서 복잡한 형태의 쿼리도 최적화가 효율적으로 되죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;옵티마이저도 이 히스토그램 정보를 바탕으로 인덱스 범위를 재정의하고, 멀티컬럼 조건을 조합해서 더 적은 데이터만 탐색하게 변경됐습니다. 덕분에 실행 시간이 눈에 띄게 줄었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 실행계획에서 filter 조건은 인덱스 사용 안 하는 게 맞나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 MySQL 8.1 기준으로, filter는 인덱스 탐색 조건과 별도로 이후에 추가로 필터링하는 조건을 의미하는데요, 일부 멀티컬럼 인덱스 조건이 filter로 분류돼도 인덱스 범위 탐색에 긍정적 영향을 줄 수 있어요. 꼭 무시하지 마세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 실행계획에서 key_parts가 3개인데 조건이 2개면 어떻게 해석하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. key_parts는 최적화된 인덱스 스캔이 내부적으로 쓰는 컬럼 시퀀스를 나타내는데요, 실제 조건에 따라 일부는 range 조건으로, 일부는 filter로 분리돼서 사용됩니다. 단순히 조건 개수와 key_parts 숫자가 일치하지 않아도 인덱스가 제대로 활용되고 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제 경험상, 인덱스 최적화를 하면서 실행계획을 읽을 때 2026년 변경점을 꼭 염두에 두면 이전보다 훨씬 빠르고 정확한 튜닝이 가능합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;원래 인덱스는 '저장된 데이터 구조'라 곧바로 눈에 보이지 않기 때문에 실행계획과 통계를 통해 간접적으로 이해하는 게 중요한데, 이번 글 보시면서 저처럼 하나씩 분석해보시면 인덱스와 실행계획 보는 눈이 확 뜨일 거예요.&lt;/p&gt;</description>
      <category>Database</category>
      <category>2026변경점</category>
      <category>mysql</category>
      <category>실행계획</category>
      <category>인덱스</category>
      <category>쿼리최적화</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/248</guid>
      <comments>https://mozzi-devlog.tistory.com/248#entry248comment</comments>
      <pubDate>Sun, 14 Jun 2026 20:49:39 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript 처음 도입하면서 헷갈렸던 부분 직접 겪어보니</title>
      <link>https://mozzi-devlog.tistory.com/247</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;TypeScript를 처음 도입할 때, 저도 생각보다 엄청 헤맸어요. 문법부터 도구 설정, 타입 체커랑 친해지는 과정까지, 막상 해보면 이게 왜 이렇게 복잡하지 싶을 정도였거든요. 그런데 주변 동료나 다른 개발자들의 사례를 들어보니 저만 그런 게 아니더라고요. 그래서 제가 겪었던 헷갈렸던 부분들을 정리하면서, 다른 사람들의 경험과 비교도 같이 해봤어요. 덕분에 TypeScript를 좀 더 편하게 다룰 수 있었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 TypeScript 처음 도입하면서 실제로 부딪힌 문제들, 그리고 다른 개발자들이 겪었던 문제와 차이점, 그리고 그걸 어떻게 해결했는지 차근차근 이야기할게요. 프론트엔드나 앱 개발에 TypeScript를 처음 접하는 분들이 읽으면, 막연한 두려움이 조금 덜해질 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 환경은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;TypeScript 5.0.4&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Node.js 18 LTS&lt;/code&gt;, 그리고 프론트엔드 프레임워크는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React 18&lt;/code&gt;이었어요. 주로 VSCode 편집기를 사용했고, ESLint와 Prettier를 연동해서 코드 스타일도 자동으로 맞췄죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;처음 헷갈렸던 타입 선언과 타입 추론, 다른 사람들은 어땠을까?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 TypeScript에서 가장 기본이지만 처음에 가장 많이 헷갈리는 게 '언제 명시적으로 타입을 써야 하나?'였어요. 저는 처음에 모든 변수에 전부 타입을 명시해야 하는 줄 알았거든요. 그래서 코드가 엄청 장황해지고 지저분해졌죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;반면, 제 친구는 타입 추론에 꽤 의존했는데, 코드를 더 간결하게 유지하면서도 타입 오류는 꽤 잘 잡히더라고요. 물론 초반에는 '이 타입이 언제 어떻게 추론되는지'가 막연해서 헷갈려했지만, 강제로 타입을 명시하는 것보다 훨씬 자유로웠대요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;결론적으로, 타입 선언은 중요한 부분에만 명시하고 나머지는 타입 추론을 믿는 게 저는 훨씬 편했고, 권장되는 방법이라는 걸 깨달았어요.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; font-size: 1.1em; margin: 1.8em 0 0.6em;&quot; data-ke-size=&quot;size23&quot;&gt;간단한 예시 코드&lt;/h3&gt;
&lt;pre class=&quot;qml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 명시적 타입 선언
const userName: string = 'Alice';

// 타입 추론 사용
const userAge = 30; // 자동으로 number로 추론

// 함수 파라미터는 명시적으로 쓰는 편
function greet(name: string) {
  return `Hello, ${name}`;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 타입 추론과 명시적 선언을 적절히 섞으면 코드가 훨씬 깔끔해지더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;tsconfig.json 설정, 직접 바꾸면서 깨달은 점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에 저는 tsconfig.json 기본 설정을 그냥 쓰면서 막혔어요. 예를 들어 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;strict&lt;/code&gt; 모드를 켜니까 엄청 빡세게 에러가 났거든요. 급하게 끄고 싶었지만, 다른 팀에서는 오히려 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;strict&lt;/code&gt; 모드를 무조건 키고 개발한다더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 여러 옵션 하나씩 켜고 꺼보면서 어떤 게 안전한지, 어떤 게 너무 과한지 체감했는데요. 예를 들어 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;noImplicitAny&lt;/code&gt; 옵션은 켜는 게 좋았고, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;strictNullChecks&lt;/code&gt;도 처음엔 귀찮았지만 코드 안정성이 폭발적으로 좋아졌어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 제가 추천하는 최소 tsconfig.json 설정이에요.&lt;/p&gt;
&lt;pre class=&quot;json&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;{
  &quot;compilerOptions&quot;: {
    &quot;target&quot;: &quot;ES2020&quot;,
    &quot;module&quot;: &quot;ESNext&quot;,
    &quot;strict&quot;: true,
    &quot;noImplicitAny&quot;: true,
    &quot;strictNullChecks&quot;: true,
    &quot;jsx&quot;: &quot;react-jsx&quot;,
    &quot;moduleResolution&quot;: &quot;node&quot;,
    &quot;esModuleInterop&quot;: true
  },
  &quot;include&quot;: [&quot;src&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이걸로 맞춘 뒤 오히려 에러가 많아져서 짜증났던 초기와 달리, 점점 안전한 코드가 작성된다는 생각이 들었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;타입 에러 처리 방법, 현장에서 많이들 헤매는 부분&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;TypeScript 도입 초기에 가장 스트레스 받았던 게 뜻하지 않은 타입 에러들이었어요. 특히 외부 API 데이터 응답 타입을 제대로 맞추지 못해서 고생했거든요. 저도 처음에는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;any&lt;/code&gt; 타입을 남용했는데, 나중에 이게 독이 되더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다른 사람들의 경우, 외부 데이터 타입 선언을 위한 별도의 타입 정의 파일을 만들어 관리하거나, 제네릭 타입과 유틸리티 타입을 적극 활용해서 에러를 사전에 방지했어요. 저는 보통 이렇게 했습니다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;interface ApiResponse {
  data: T;
  status: string;
}

// 예: 사용자 정보 타입
interface User {
  id: number;
  name: string;
}

async function fetchUser(): Promise&amp;lt;ApiResponse&amp;gt; {
  const response = await fetch('/api/user');
  const result = await response.json();
  return result;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이런 식으로 타입을 명확히 하니까 개발할 때 실수가 줄었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;JSX에서 TypeScript 쓸 때 유의점, 제가 겪은 트러블&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;React에 TypeScript를 적용할 때 많이들 헷갈리는 게 JSX 내 props 타입 선언인 것 같아요. 저는 처음에 props 타입을 인터페이스로 정의하긴 했는데, 기본 prop값을 설정하는 방법 때문에 한참 헤맸어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 다른 동료는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React.FC&lt;/code&gt; 타입을 적절히 활용해서 간단하게 처리했더라고요. 그런데 저처럼 strict 옵션 켜 둔 환경에서는 기본 props와 관련된 타입 이슈가 복잡해지곤 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 쓴 방법은 다음과 같아요.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;interface ButtonProps {
  label: string;
  disabled?: boolean; // 선택적
}

const Button = ({ label, disabled = false }: ButtonProps) =&amp;gt; {
  return &amp;lt;button disabled={disabled}&amp;gt;{label}&amp;lt;/button&amp;gt;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 기본값을 함수 파라미터에서 직접 지정하니까, 타입 오류 없이 깔끔하게 동작했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 삽질했던 부분들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 에러가 왜 나는지 한참 찾았는데, TypeScript가 union 타입과 null 허용 여부를 엄격히 검사하면서 예상치 못한 오류가 났던 적이 있었어요. 예를 들어 아래 코드처럼 null 체크를 제대로 안 했을 때입니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;function printName(name: string | null) {
  // 오류! 'name'이 null일 수도 있다고 경고
  console.log(name.length);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;열심히 해결책을 찾아보니, 아래처럼 null 체크를 반드시 해야 한다고 하더라고요.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;function printName(name: string | null) {
  if (name) {
    console.log(name.length);
  } else {
    console.log('No name provided');
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분에서 막혀서 한참 헤맸는데, 다른 분들도 여기서 많이들 헷갈리는 것 같아요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 이렇게 하면 조금 더 편해집니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;좀 더 타입 시스템을 잘 활용하고 싶다면, TypeScript 유틸리티 타입을 적극 활용하는 걸 추천해요. 예를 들어 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Partial&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Readonly&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Pick&amp;lt;T, K&amp;gt;&lt;/code&gt; 등이 있는데, 적절히 쓰면 코드가 훨씬 안전하면서도 유연해져요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 다른 동료들은 자동 타입 생성 도구(swagger-typescript-api, openapi-generator 등)를 써서 API 타입 매핑을 자동화하더라고요. 저도 프로젝트가 커지면서 그런 자동화 도구가 필요하다고 느꼈어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 타입스크립트에서 무조건 모든 변수에 타입 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 꼭 그렇진 않아요. 타입 추론이 워낙 좋아서, 단순 변수는 대부분 생략해도 안전해요. 다만 함수 파라미터, 반환 타입, 복잡한 오브젝트 타입 등 중요한 부분은 명시하는 게 좋습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. any를 쓰면 안 좋은가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. any는 타입 체크를 무시하기 때문에 가능한 피하는 게 좋아요. 초기 도입 때는 어쩔 수 없이 쓸 수 있지만, 점점 타입을 명확히 해나가는 게 유지보수에 훨씬 도움이 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. React 컴포넌트에 타입 어떻게 선언하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. props 타입을 interface나 type으로 정의하고, 함수 파라미터에 명시합니다. 함수 기본 파라미터로 기본값 설정도 가능합니다. &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;React.FC&lt;/code&gt; 타입을 써도 되고, 최근에는 그냥 함수형 선언 후 명시하는 방식을 선호하는 경우가 많아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;TypeScript 처음 도입할 때는 시행착오가 당연한 것 같아요. 저도 삽질하면서 많이 배웠고, 다른 분들의 경험도 듣고 비교하니 방향을 잡기 훨씬 수월해졌거든요. 이 글이 그런 고민에 조금이나마 도움이 됐으면 합니다. TypeScript는 한 번 익히면 결국 생산성이 확 올라가는 좋은 도구니까요!&lt;/p&gt;</description>
      <category>언어/JavaScript</category>
      <category>Typescript</category>
      <category>개발팁</category>
      <category>초보개발자</category>
      <category>프론트엔드</category>
      <category>헷갈리는부분</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/247</guid>
      <comments>https://mozzi-devlog.tistory.com/247#entry247comment</comments>
      <pubDate>Sun, 14 Jun 2026 14:23:15 +0900</pubDate>
    </item>
    <item>
      <title>한국에서 1인 가구 생활비 절약 직접 해보니 알게 된 꿀팁</title>
      <link>https://mozzi-devlog.tistory.com/246</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 한국에서 1인 가구로 살아가기 시작할 때 생활비가 너무 빠르게 나가는 거예요. 게다가 금융이나 복지 관련 용어도 너무 생소하고 뭔가 복잡해서 어디서부터 어떻게 시작해야 할지 막막했거든요. 그래서 제가 직접 경험하고 찾아보면서 2026년 현재 적용 가능한 절약법과 정부 지원을 하나씩 정리해봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로 1인 가구가 감당해야 하는 실생활 비용과 금융상품, 그리고 꼭 챙겨야 할 복지 제도까지 실제 신청 과정과 계산 사례를 포함해서 차근차근 설명할 테니 천천히 읽어보세요. 저도 처음엔 한눈에 안 들어왔던 내용들이었는데, 요즘은 꽤 체계적으로 관리하고 있답니다.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&quot; src=&quot;https://images.pexels.com/photos/14907339/pexels-photo-14907339.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;월별 1인 가구 생활비, 어디에 얼마가 드는지부터 살펴보기&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 처음 1인 가구가 가장 궁금해하는 부분일 거예요. 저도 처음엔 월세, 관리비, 식비, 교통비 등 각 항목마다 얼마가 필요한지 전혀 감이 안 왔거든요. 2026년 기준으로 제가 직접 계산해본 1인 가구 평균 생활비는 대략 &lt;b&gt;월 110만 원에서 140만 원&lt;/b&gt; 사이예요. 이 금액은 지역, 생활패턴에 따라 차이가 있지만 서울 기준으로는 이 범위가 적당하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;구체적으로 보면, 월세는 &lt;b&gt;약 50만 원&lt;/b&gt;~60만 원, 관리비 및 공과금 포함한 주거비가 약 10만 원~15만 원, 식비가 30만 원 내외, 교통비 및 기타 생활비가 10만 원~20만 원 정도가 들어갔습니다. 참고로 월세는 입지, 건물 상태에 따라 크게 차이나니 꼼꼼히 비교해보시는 게 중요해요.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;생활비 항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;월평균 금액&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;월세(서울 기준 원룸)&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;50만원 ~ 60만원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;관리비 및 공과금&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10만원 ~ 15만원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;식비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;약 30만원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;교통비 및 기타 생활비&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10만원 ~ 20만원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;1인 가구 생활비 절약, 이렇게 하면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 막히는 게 많은 게 어떻게 절약해야 할지 구체적인 방법이죠. 제가 직접 써본 방법 중 가장 효과적이었던 건 바로 '고정지출 점검하기'였어요. 일단 월세도 너무 비싸면 부담되니 초반에는 보증금 1000만 원에 월세 40만 원대 원룸을 찾았고, 관리비가 10만 원을 넘지 않는 곳으로 골랐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 식비는 직접 식재료를 사서 간단히 해 먹는 걸 늘렸죠. 식비 절약에 대략 &lt;b&gt;월 8만 원 이상&lt;/b&gt; 아꼈던 것 같아요. 교통비는 다니는 노선에 맞는 절약형 교통카드를 발급받아 10% 이상 할인 혜택을 활용했고, 통신비도 알뜰폰으로 전환하면서 월 1만 5천 원 정도 절감했어요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&quot; src=&quot;https://images.pexels.com/photos/35230315/pexels-photo-35230315.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이들 헷갈려하세요, 복지 지원 신청 기준과 절차&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;1인 가구라고 무조건 지원을 받는 건 아니라서 이 부분에서 헷갈릴 수밖에 없어요. 저도 처음엔 '기초생활수급자'나 '근로장려금' 같은 용어가 넘 어려웠는데, 뜻을 알게 되니까 신청하는 게 훨씬 편해지더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 기초생활수급자는 &lt;b&gt;총 가구 소득이 기준 중위소득의 30~50%&lt;/b&gt; 이하인 경우 신청할 수 있고, 의료비나 주거비에 도움을 받을 수 있어요. 근로장려금은 &lt;b&gt;연소득 3000만 원 이하 1인 가구&lt;/b&gt;가 해당하는데, 매년 5월에 정산 신청하면 최대 &lt;b&gt;200만 원&lt;/b&gt;까지 받을 수 있답니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;신청 방법은 정부24, 국민연금공단, 또는 주소지 주민센터 방문 등 여러 경로가 있는데, 저는 정부24 사이트에서 공인인증서 로그인 후 온라인으로 편리하게 신청했어요. 신청 후 약 1~2개월 내에 결과가 나오니 꼭 서둘러서 챙기는 게 좋습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 금융 상품도 활용했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 초반엔 용어가 너무 낯설어서 망설였는데, 1인 가구용 맞춤 금융 상품을 알게 되면서 훨씬 마음이 편해졌어요. 예를 들어, 저축은행에서 1인 가구를 위한 적금 상품을 찾아봤는데, 연 이율이 &lt;b&gt;4.0%&lt;/b&gt; 이상 되는 상품도 있고, 매달 10만 원씩 1년 투자 시 약 4800원 이자가 붙더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 신용카드를 쓸 때도 '1인 가구 필수 생활비 할인카드'를 골라서 매달 5~7% 결제 캐시백을 받으며 생활비를 절약하고 있어요. 저는 주로 대형마트와 온라인 쇼핑에서 이 카드를 사용 중인데, 한 달 평균 1만 원 이상 할인된 기분이었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 1인 가구가 받을 수 있는 정부 복지 중 가장 실속 있는 것은 무엇인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 제가 직접 신청해보고 가장 도움이 된 건 '근로장려금'이에요. 연 소득 기준만 맞으면 매년 100만 원 이상 지원받을 수 있어서 생활비 부담을 크게 줄여주거든요. 2026년 기준 1인 가구 최대 지원금은 약 &lt;b&gt;200만 원&lt;/b&gt;이고, 신청 기간은 보통 5월부터 6월까지입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 월세가 비싼 서울에서 생활하다가 지방으로 이사하는 게 얼마나 절약이 될까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 지방은 서울에 비해 월세가 평균 &lt;b&gt;30~50%&lt;/b&gt; 저렴한 편이라, 예를 들어 서울에서 월 60만 원 내던 원룸 월세가 지방에서는 &lt;b&gt;30만 원~40만 원&lt;/b&gt; 수준까지 낮춰질 수 있어요. 단, 교통비나 기타 생활비가 반대로 조금 늘어날 수 있으니 전체 생활비를 종합적으로 계산하는 게 좋아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7567432/pexels-photo-7567432.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;한국에서 1인 가구 생활비 절약을 직접 해보니 알게 된 금융과 복지 팁 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;적어도 이 글을 통해 1인 가구 생활비 개념과 절약, 복지, 금융상품까지 직접 체감한 경험을 바탕으로 이해하실 수 있었을 거예요. 앞으로는 본인이 실제 조건에 맞게 정보를 찾아보고 신청하는 게 가장 중요하니까, 시간 날 때마다 정기적으로 정부 사이트와 금융사 공지사항을 확인하는 습관을 들이시면 좋겠어요. 다음에는 1인 가구 대상 보험 상품 고르는 팁도 알려드릴게요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>1인가구</category>
      <category>금융팁</category>
      <category>복지정보</category>
      <category>생활비절약</category>
      <category>한국생활</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/246</guid>
      <comments>https://mozzi-devlog.tistory.com/246#entry246comment</comments>
      <pubDate>Sun, 14 Jun 2026 10:23:24 +0900</pubDate>
    </item>
    <item>
      <title>AWS CloudWatch 알람 설정하며 제가 겪은 삽질과 해결 방법 공유해요</title>
      <link>https://mozzi-devlog.tistory.com/245</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 AWS CloudWatch 알람이 뭔지도 모르고, 어떻게 설정하는지 막막했어요. 서비스를 운영하다 보니 장애를 미리 잡는 게 얼마나 중요한지 절실히 느끼게 됐거든요. 그래서 직접 하나하나 세팅해보면서 겪은 삽질과 그 해결법을 나누려고 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 CloudWatch 알람이 뭔지, 왜 필요한지부터 시작해서, 기본적인 알람 만드는 과정과 제가 직접 써본 CLI 명령어까지 구체적으로 알려드립니다. 그리고 세팅 중 흔히 막히는 부분도 자세히 다뤄서, 이 글 하나면 초보자분도 무리 없이 시작할 수 있을 거예요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;AWS CloudWatch 알람, 이게 뭔지부터 알고 시작해요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 처음 AWS 쓸 때 &quot;CloudWatch 알람&quot;이라는 단어가 너무 생소했어요. 간단히 말하면, 내 AWS 인프라가 &quot;이상 징후&quot;를 보이면 알려주는 경보 시스템이에요. 예를 들어 서버 CPU가 너무 올라가거나, 네트워크 트래픽이 갑자기 뚝 떨어질 때 알람이 울려서 &quot;뭔가 문제가 생겼다&quot;를 알려주는 거죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;AWS 관리 콘솔에서 'CloudWatch'라는 서비스를 찾으면 모니터링 대시보드가 나오는데, 여기서 원하는 지표(Metric)를 선택하고 임계치(Threshold)를 정하면 알람이 만들어져요. 예를 들어 EC2 서버 CPU 사용률이 80% 이상 5분 동안 지속되면 경고를 띄우는 식이죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저도 처음 만든 AWS CloudWatch 알람 설정 환경&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 저는 AWS EC2 한 대로 웹 서비스를 운영하고 있었는데, 장애를 미리 감지하는 체계가 전혀 없었어요. 그래서 AWS CLI와 콘솔 두 가지 방법을 병행해서 알람을 만들었고, Node.js 백엔드 로그와도 연동해 봤어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;AWS CLI 2.9.19&lt;/code&gt;, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 22.04 LTS&lt;/code&gt;, EC2 인스턴스는 t3.medium을 쓰고 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;CloudWatch 알람 이렇게 만들면 됩니다&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;우선 AWS 콘솔에서 간단하게 CPU 사용률 알람을 만드는 순서부터 설명할게요. 먼저 CloudWatch 대시보드에 들어가서 '알람(Alarms)' -&amp;gt; '알람 생성(Create Alarm)' 버튼부터 누르시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;1. 지표 선택&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;EC2 -&amp;gt; Per-Instance Metrics에서 대상 인스턴스의 CPUUtilization 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;2. 임계치 설정&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;조건: CPUUtilization &amp;gt; 80% (5분 연속 발생 시)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;3. 알림 받을 대상 설정&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 1.4em; padding-left: 1.6em;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.7em; line-height: 1.9;&quot;&gt;SNS(Simple Notification Service) 주제를 생성해서 이메일 주소 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정을 마치면, CPU 사용률이 정해진 임계치를 넘으면 이메일로 바로 알림이 옵니다. 처음엔 &quot;진짜 오려나?&quot; 하면서 테스트도 많이 했는데, 생각보다 빠르고 정확히 알림이 와서 놀랐어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;CLI로도 똑같은 알람을 만들어 볼게요. 다음은 제가 직접 쓴 명령어 입니다.&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# SNS 주제 만들기
aws sns create-topic --name MyAlarmTopic

# 이메일 구독 추가 (실제 이메일 주소로 교체!)
aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-2:123456789012:MyAlarmTopic --protocol email --notification-endpoint your-email@example.com

# CloudWatch 알람 생성
aws cloudwatch put-metric-alarm \  
  --alarm-name HighCPUAlarm \  
  --metric-name CPUUtilization \  
  --namespace AWS/EC2 \  
  --statistic Average \  
  --period 300 \  
  --threshold 80 \  
  --comparison-operator GreaterThanThreshold \  
  --dimensions Name=InstanceId,Value=i-0abcdef1234567890 \  
  --evaluation-periods 1 \  
  --alarm-actions arn:aws:sns:ap-northeast-2:123456789012:MyAlarmTopic \  
  --unit Percent
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 명령어에서 중요한 부분은 --dimensions에 내 EC2 인스턴스 아이디를 꼭 정확히 집어넣어야 한다는 점이에요. 그리고 이메일은 SNS 쪽에서 '구독 확인' 메일을 꼭 승인해줘야 알람을 받을 수 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;여기서 많이 틀립니다, AWS 권한과 리소스 연결&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 알람 세팅하다가 제일 힘들었던 게 IAM(Identity and Access Management) 권한 문제였어요. 처음에 알람이 정상적으로 동작 안 해서 한참 헤맸는데, 알람이 SNS 주제를 호출할 권한이 없어서 실패했던 거였거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이걸 해결하려면 IAM에서 알람을 등록하는 역할(Role)이나 사용자(User)에 적절한 정책을 붙여줘야 해요. 저 같은 초보자는 AWS에서 제공하는 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;CloudWatchFullAccess&lt;/code&gt; 권한을 잠깐 붙이고 테스트하는 걸 추천해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 SNS 주제 ARN이나 인스턴스 아이디 등 리소스 식별자가 틀리면 알람이 아예 먹통이 돼서, AWS 리소스 화면에서 정확한 값을 꼭 복사해서 붙여넣기 하는 게 중요합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;삽질했던 에러와 해결 과정 공유해요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;알람은 만들었는데 이메일 알림이 안 오네요&quot; 문제, 저도 한참 고민했었어요. 그래서 CLI 로그를 자세히 봤더니 아래 같은 에러 메시지가 떴죠.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;SubscriptionConfirmation: You have chosen to subscribe to the topic&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;알고 보니 SNS 구독을 이메일로 신청하고, 메일함에서 승인을 눌러줘야 비로소 알람 이메일을 받을 수 있다는 걸 몰랐던 거예요. 이걸 승인 안 하면 계속 알림이 안 와서 진짜 심란했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 한 가지는 기간 설정인데, 기본이 5분 단위라서 바로 알람 오는 줄 알고 테스트했는데 바로 안 와서 또 삽질했어요. 실제론 5분 연속 임계치를 넘는 상황에서만 알람이 오니까, 짧은 테스트용으로는 기간을 60초로 줄여서 테스트하는 게 더 편하더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;심화: 알람 구성할 때 기억하면 좋은 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;혹시 인프라가 점점 커지면 알람도 복잡해질 텐데요, 이럴 때 유용한 건 &quot;복합 알람(Composite Alarms)&quot;이에요. 여러 개 알람 상태를 조합해서 최종 알람을 내는 거죠. 예를 들어 CPU도 높고 네트워크 에러도 동시에 났을 때만 알림 울리게 설정할 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 SNS 외에도 Slack, PagerDuty 같은 서비스와 연동할 수 있는데, 이를 위해 AWS Lambda를 중간에 두고 Webhook 호출하는 방식도 많이 쓰더라고요. 저도 나중에 시도해볼 계획이에요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;CLI로 알람 상태 조회도 가능한데, 아래 명령어로 현재 알람 목록과 상태를 볼 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;aws cloudwatch describe-alarms --alarm-names HighCPUAlarm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. CloudWatch 알람이 여러 종류가 있는데, 어떤 걸 써야 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 일반적으로 모니터링하려는 서비스 종류에 따라 다릅니다. EC2 서버라면 CPU, 네트워크, 디스크 지표부터 확인하시고, RDS면 DB 연결이나 쿼리 지연도 체크해보세요. 처음엔 CPU 사용률 같은 대표 지표부터 시작하는 게 쉽고 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 알람 테스트 해보려면 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 임계치 값을 평소보다 훨씬 낮게 잡고, CPU 부하를 일부러 일으켜서 테스트할 수 있어요. 예를 들어 임계치를 1%로 맞추고, 서버에서 부하 스크립트를 돌리면 바로 알람이 울립니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. CloudWatch 로그랑 알람이랑 어떻게 연결해요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. CloudWatch Logs에서 필터 로그 패턴을 만들어서 특정 문구(에러, 예외 등)가 감지되면 알람이 뜨게 할 수 있어요. 이건 조금 더 복잡하지만, 성공하면 애플리케이션 장애 모니터링에 큰 도움이 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 직접 세팅하고 삽질하면서 알게 된 점들을 최대한 쉽게 풀어봤는데, 막혀도 차근차근 한 단계씩 따라가면 어렵지 않아요. AWS CloudWatch 알람으로 장애를 미리 잡는 경험이 점점 늘면서 서비스 신뢰도가 훨씬 좋아진 걸 느꼈습니다.&lt;/p&gt;</description>
      <category>Tech/AWS</category>
      <category>AWS</category>
      <category>cloudwatch</category>
      <category>알람설정</category>
      <category>초보자팁</category>
      <category>클라우드모니터링</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/245</guid>
      <comments>https://mozzi-devlog.tistory.com/245#entry245comment</comments>
      <pubDate>Sat, 13 Jun 2026 19:34:51 +0900</pubDate>
    </item>
    <item>
      <title>Docker Compose로 개발 환경 통합하며 겪은 2026년 변화와 해결법</title>
      <link>https://mozzi-devlog.tistory.com/244</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 이번에 Docker Compose로 개발 환경을 통합하면서 생각보다 많은 삽질을 했어요. 특히 2026년에 들어서면서 Compose 명령어 구조가 바뀌고, 일부 설정 옵션이 deprecated 되면서 헷갈리는 부분이 많더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년 기준 Docker Compose 최신 변화를 반영해서, 제가 실제로 겪은 문제와 해결 과정을 구체적인 명령어와 설정값 위주로 자세히 공유할게요. Docker Compose로 개발 환경을 처음 세팅하거나, 기존 환경을 올해 맞춰 업데이트하려는 분들께 딱 도움이 될 내용입니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 및 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;제가 사용한 주요 환경은 다음과 같아요. &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Docker 24.0.2&lt;/code&gt; 버전으로, Docker Compose는 내장형인 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;v2.18.1&lt;/code&gt; 버전을 사용했습니다. 또 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Ubuntu 22.04 LTS&lt;/code&gt; 서버에서 작업했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Docker Compose 최신 변경점부터 확인하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 2026년부터 Docker Compose CLI가 완전히 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker compose&lt;/code&gt;로 통합되면서, 예전처럼 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker-compose&lt;/code&gt; 커맨드를 직접 사용하는 게 권장되지 않아요. 대부분 문서도 이제 이걸 기준으로 작성됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, &lt;b&gt;2026년부터 몇 가지 주요 설정 키 이름이 변경&amp;lt;/strong되어 기존 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker-compose.yml&lt;/code&gt; 파일을 조금 수정해야 할 필요가 생겼거든요. 예를 들어 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;container_name&lt;/code&gt; 대신에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;name&lt;/code&gt;으로 지정하는 게 점차 표준화되고 있다는 점 참고하세요.&lt;/b&gt;&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;새 버전 Docker Compose로 개발 환경 통합하는 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 궁금해하는 분들이 많을 텐데요, 저는 아래와 같이 진행했어요.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 1. docker-compose.yml 파일 예시 (2026년식 업데이트 반영)
version: '3.9'
services:
  web:
    image: node:18-alpine
    container_name: myapp_web_2026  # deprecated: 2026년 이후 name 사용 권장
    command: sh -c &quot;npm install &amp;amp;&amp;amp; npm run dev&quot;
    ports:
      - &quot;3000:3000&quot;
    volumes:
      - ./:/app
    working_dir: /app
    environment:
      - NODE_ENV=development

  db:
    image: postgres:15
    name: myapp_db  # 2026년부터 container_name 대신 이걸 추천
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myappdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - &quot;5432:5432&quot;

volumes:
  pgdata:
    name: myapp_pgdata
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;container_name&lt;/code&gt;과 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;name&lt;/code&gt; 옵션인데요, Docker 자체가 내부 네트워크 이름 충돌을 막기 위해 예전과 다르게 이름 관리 정책을 조금 엄격하게 바꿨더라고요. 그래서 저는 보통 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;name&lt;/code&gt;을 명확히 지정해서 충돌 위험을 줄이고 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 Compose 명령어도 최신 스타일이에요.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# 프로젝트 디렉터리에서 실행

docker compose up -d  # 예전 docker-compose up -d 대신

docker compose logs -f

docker compose down
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하니까 예전 명령어와 헷갈리지 않게 되더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 겪었던 삽질과 해결법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker compose&lt;/code&gt; 명령어가 왜 안 먹히는지 한참 헤맸거든요. 실제 오류 메시지는 이렇게 나왔어요.&lt;/p&gt;
&lt;pre class=&quot;subunit&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;Error: unknown command &quot;compose&quot; for &quot;docker&quot;
Run 'docker --help' for usage.

Did you mean this?
    compute
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이게 왜 그랬냐면 제가 Docker CLI 버전은 올렸는데 Docker Compose 플러그인이 들어있지 않아서였어요. 그래서 아래처럼 직접 Docker Compose 플러그인을 설치했더니 문제가 해결됐습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;# Ubuntu 기준 설치 명령어 예시
sudo apt-get update
sudo apt-get install docker-compose-plugin

docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그 이후에는 명령어가 정상 작동했고, Compose 파일도 3.9 버전 문법을 따라 수정하니까 훨씬 안정적으로 실행되더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또 하나 헷갈린 건 볼륨 마운트 시 권한 문제였는데요, Docker가 2026년에는 기본 보안 정책이 강화되어서 파일 권한 처리 방식이 바뀌었더라고요. 그래서 이렇게 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;:delegated&lt;/code&gt; 옵션을 붙여주니까 권한 문제도 자연스럽게 해결됐어요.&lt;/p&gt;
&lt;pre class=&quot;haml&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;volumes:
  - ./:/app:delegated
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 Docker Compose 환경이 한결 좋아져요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이렇게 최신 Compose 구조에 맞게 설정하고 나니까, 개발하는 동안 컨테이너 재시작이나 로그 확인도 훨씬 수월해졌어요. 특히 Compose CLI 내장화 덕분에 도커 명령어 하나로 거의 모든 작업이 가능해서 터미널 명령어 복잡함도 크게 줄었고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;만약 기존에 docker-compose 명령어를 쓰던 분들은 꼭 이번에 Compose 플러그인 설치하고 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker compose&lt;/code&gt; 방식으로 전환해보세요. 그리고 YAML 파일도 3.9 문법에 맞게 업데이트해야 오류도 줄고 최신 정책에 잘 맞는 환경이 됩니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 기존 docker-compose.yml 파일을 2026년 버전에 맞춰서 어떻게 바꾸나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;version: '3'&lt;/code&gt; 이나 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;'3.7'&lt;/code&gt; 같은 구버전을 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;'3.9'&lt;/code&gt;로 올리고, &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;container_name&lt;/code&gt;은 가급적 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;name&lt;/code&gt;으로 대체하는 게 좋아요. 또 권한 문제 방지를 위해 볼륨 마운트에 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;:delegated&lt;/code&gt; 옵션을 추가하는 것도 권장됩니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Compose 플러그인이 왜 꼭 필요한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 2026년 이후 Docker CLI에 Compose 기능이 내장되면서 단독 docker-compose 바이너리는 deprecated 됐어요. 그래서 새 CLI에서 오류 없이 쓰려면 Compose 플러그인을 설치해야 하고, 이걸로 관리하는 게 공식 권장입니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Mac이나 Windows에서도 같은 방법이 적용되나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 기본적으로 Docker Desktop을 쓰는 환경에서는 자동으로 Compose 플러그인이 포함되어 있지만, 때때로 버전 호환성 문제로 명령어가 달라질 수 있어요. 항상 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;docker compose version&lt;/code&gt;으로 확인해보시는 게 좋아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 2026년에 맞춰 Docker Compose 환경을 정비하니까, 앞으로 개발환경 세팅과 유지 관리가 한결 편해졌어요. 특히 변경된 Compose CLI 명령어와 YAML 파일 규칙만 잘 숙지하면 오래 쓸 수 있는 안정적인 개발 인프라가 완성됩니다.&lt;/p&gt;</description>
      <category>Linux</category>
      <category>2026년 변경점</category>
      <category>docker</category>
      <category>Docker Compose</category>
      <category>개발환경</category>
      <category>인프라</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/244</guid>
      <comments>https://mozzi-devlog.tistory.com/244#entry244comment</comments>
      <pubDate>Sat, 13 Jun 2026 09:39:49 +0900</pubDate>
    </item>
    <item>
      <title>전세보증보험 가입 안 했다가 2026년 바뀐 점까지 후회한 이야기</title>
      <link>https://mozzi-devlog.tistory.com/243</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음 전세보증보험 가입을 고민할 때 뭔가 복잡하고 귀찮다는 생각에 그냥 지나쳤거든요. 그런데 2026년 들어서 보증보험 관련 제도가 바뀌면서 전세보증금 보호받지 못하는 위험이 훨씬 커졌다는 걸 알고 정말 후회했어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 2026년 전세보증보험 제도에서 달라진 점부터, 제가 직접 경험한 가입 절차와 계산 방법, 그리고 꼭 주의해야 할 사항들까지 모두 담았어요. 전세 계약 앞둔 분들이라면 끝까지 읽어보시면 좋을 거예요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/7841819/pexels-photo-7841819.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 전세보증보험, 작년과 이렇게 달라졌어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 중요해요. 작년까지만 해도 전세보증보험 가입 시 보증금 5억원까지 보험이 가능했는데, 2026년부터는 일부 지역과 조건에 따라 최대 보증금 한도가 더 엄격해지고 보증료율도 인상됐거든요. 특히 서울과 수도권 인기 지역은 3억원 초과분에 대해 보증 한도가 70%로 줄고, 보증료는 연 0.15%포인트 오른 0.95%에서 시작하는 경우가 많아요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 작년까지는 세입자 본인이 직접 은행이나 보증기관을 방문해서 가입해야 했는데, 2026년부터는 전자계약 시스템과 연계되어 온라인 가입 절차가 훨씬 간소화됐지만, 일부 필수 서류 제출이 까다로워졌어요. 이 때문에 미리 준비하지 않으면 가입이 지연될 수 있답니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;변경 항목&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 이전&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 이후&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;최대 보증금 한도&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;5억원 전 지역 동일&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;지역별 최대 3억원 초과분 70%만 보증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;보증료율&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;0.8% ~ 0.9%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;0.95% ~ 1.1%, 지역&amp;middot;금액 따라 다름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;가입 절차&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;오프라인 직접 방문 많음&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;전자계약 연계, 온라인 확대&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;필요 서류&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;전세 계약서, 신분증&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;임대인 등기부등본, 계약서, 인감증명서 등 추가필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가입 절차, 저는 이렇게 했어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 뭐부터 해야 할지 몰라서 계속 미뤘는데, 전자계약 시스템에서 전세 계약서 작성하면서 보증보험 가입 메뉴가 딱 떠서 거기서 바로 진행했어요. 임대인 동의가 필요해서 계약 당사자가 같이 앱에 접속해 서류를 제출하는 과정이 있었는데, 이게 은근 번거로웠거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증보험 가입 금액은 보증료율과 보증금에 따라 다르지만, 제 경우 서울 강남구 4억원 전세라서 약 0.95%를 적용받아 연간 약 38만원 정도 보증료를 냈어요. 보증료는 보통 2년 계약 기준 선납하는데, 은행에 따라 카드 결제도 가능해서 편리했답니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 가입 완료 후 반드시 보증서 발급 여부를 확인해야 하는데, 보증서 발급까지 보통 3~5일 정도 걸리는 경우가 많으니 계약 시기와 맞춰 여유 있게 준비하는 게 좋더라고요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/8439707/pexels-photo-8439707.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;가입할 때 여기서 많이들 헷갈려요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 이 부분을 몰랐는데, 전세보증보험이 '임대인의 등기부등본' 상태에 따라 가입이 제한될 수 있어요. 특히 임대인의 건물이 근저당 설정이 5억원 이상인 경우, 전세보증보험 가입이 불가능할 수도 있으니 꼭 등기부등본을 미리 확인해야 해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 전세 계약서 상 계약금과 중도금, 잔금의 납부 일정이 보험 가입 조건에 맞지 않으면 가입이 지연되기도 해요. 계약서 작성 시점에 보증보험 가입 가능 시점을 반드시 체크해야 한다는 점도 많은 분들이 간과하더라고요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;이렇게 하면 보증보험 활용이 더 좋아져요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 보증보험 가입 후에 계약 기간 중에도 임대인과 상황이 변할 수 있다는 점을 실감했는데요, 특히 임대인의 체납이나 압류 같은 문제가 생기면 즉시 보증보험 기관에 신고하는 게 중요하더라고요. 그래야 보증금을 안전하게 지킬 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 보증보험 가입 시 보험 만료일이 계약 종료일과 꼭 맞는지 꼼꼼히 확인했어요. 만약 계약 연장을 하거나 재계약을 한다면 보증보험도 반드시 갱신해야 하거든요. 이 부분을 놓치면 나중에 보호받지 못하는 경우가 생길 수 있어서 정말 주의해야 해요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 제가 전세보증보험 가입 안 하면 어떤 위험이 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 전세보증보험 가입을 하지 않으면 임대인이 파산하거나 보증금 반환을 못 할 때 법적으로 보호받기 어려워요. 특히 2026년에는 전세금 반환보증 제도 규제가 더 강화됐기 때문에 세입자 본인이 보증보험 가입으로 위험을 줄이는 게 훨씬 중요해졌답니다. 실제로 2023년부터 2025년까지 보증보험 미가입 세입자 중 15%가 보증금 반환 문제로 피해를 입은 사례가 늘었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년에 보증료 할인혜택 같은 게 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 2026년부터는 신혼부부나 청년 세대 대상 보증료 할인이 신설되어 최대 30%까지 할인받을 수 있어요. 조건으로는 혼인 5년 이하, 만 39세 이하여야 하며, 해당 지역 거주 여부도 심사 대상입니다. 이 혜택을 적용받으려면 가입 시 증빙 서류를 꼭 제출해야 하니 미리 준비하세요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&quot; src=&quot;https://images.pexels.com/photos/8441784/pexels-photo-8441784.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;전세보증보험 가입 안 했다가 후회한 이야기 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증보험 가입 안 했다가 후회한 이야기 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;정리하면, 저는 전세보증보험을 처음 안 했을 때와 달리 2026년에는 꼭 가입해야 한다고 확신하게 됐어요. 바뀐 보증금 한도와 보증료율, 그리고 가입 절차도 꼭 알고 준비하면 훨씬 수월하거든요. 다음에는 전세 계약 연장 시 보증보험 갱신하는 방법과 팁에 대해서도 한 번 정리해볼게요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026년 변화</category>
      <category>금융정보</category>
      <category>생활비 절약</category>
      <category>전세금</category>
      <category>전세보증보험</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/243</guid>
      <comments>https://mozzi-devlog.tistory.com/243#entry243comment</comments>
      <pubDate>Fri, 12 Jun 2026 18:59:28 +0900</pubDate>
    </item>
    <item>
      <title>Redis pub/sub 메시지 큐로 써봤더니 알게 된 핵심 포인트들</title>
      <link>https://mozzi-devlog.tistory.com/242</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 &amp;lsquo;Redis pub/sub&amp;rsquo;가 뭔지, 이걸 메시지 큐로 쓰는 게 도대체 어떤 의미인지 전혀 몰랐어요. 근데 실제로 조금씩 코드도 짜보고, 실행 결과도 보면서 확실히 이해가 되더라고요. 이 과정에서 겪은 시행착오와 팁들을 정리해봤습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 Redis pub/sub의 기본 개념부터, 직접 메시지 큐로 구현해본 경험담, 실행 결과 분석, 그리고 초보자가 흔히 헷갈리는 부분까지 한 번에 정리해 드릴게요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;개발 환경 / 버전 정보&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실습에 사용한 Redis 버전은 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Redis 7.0&lt;/code&gt;이며, 클라이언트로는 Node.js &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;v18.15.0&lt;/code&gt;를 활용했습니다. 메시지 큐 역할을 해보기 위해 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;redis&lt;/code&gt; 공식 패키지를 사용했어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Redis pub/sub가 뭔지, 메시지 큐랑 왜 헷갈리는지&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈렸어요. Redis pub/sub는 발행자(publisher)가 채널에 메시지를 보내면, 그 채널을 구독(subscribe)한 모든 구독자에게 메시지를 전달해주는 &amp;lsquo;실시간 방송&amp;rsquo; 같은 개념이에요. 그래서 특정 이벤트를 여러 구독자가 동시에 받아야 할 때 유용합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;반면 메시지 큐는 보통 &amp;lsquo;발행된 메시지를 순서대로 처리하는 통로&amp;rsquo; 역할을 하죠. 그래서 1개 혹은 소수의 소비자가 순차적으로 메시지를 처리합니다. &amp;ldquo;pub/sub랑 메시지 큐가 왜 헷갈리지?&amp;rdquo; 싶은데, Redis는 공식적으로 메시지 큐 기능을 따로 제공하지 않고 pub/sub 기능으로도 메시지 큐처럼 쓸 수 있거든요. 단, 이 때 중요한 건 pub/sub의 단점도 명확히 알아야 한다는 점이에요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 해본 Redis pub/sub 메시지 큐 기본 구현 방법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;직접 구독자와 발행자를 Node.js로 만들어봤어요. 구독자는 채널을 구독하고 발행자는 메시지를 발행하죠. 코드가 궁금하실 것 같아서 최대한 쉽게 주석도 넣었습니다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// Redis pub/sub 예제 - 발행자 (publisher.js)
const { createClient } = require('redis');

(async () =&amp;gt; {
  const publisher = createClient();
  await publisher.connect();

  // 1초마다 메시지 발행
  let count = 0;
  setInterval(async () =&amp;gt; {
    const message = `메시지 번호: ${++count}`;
    await publisher.publish('my_channel', message);
    console.log(`발행: ${message}`);
  }, 1000);
})();

// Redis pub/sub 예제 - 구독자 (subscriber.js)
const { createClient } = require('redis');

(async () =&amp;gt; {
  const subscriber = createClient();
  await subscriber.connect();

  // 'my_channel' 채널 구독
  await subscriber.subscribe('my_channel', (message) =&amp;gt; {
    console.log(`구독자1 수신: ${message}`);
  });
})();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;위 코드를 돌리면 발행자가 1초마다 메시지를 보내고 구독자는 그걸 실시간으로 받아서 출력해요. 저는 이걸 보면서 '아, 이게 바로 pub/sub이구나' 싶었죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;실행 결과와 Redis pub/sub 메시지 큐로서 한계 느낀 부분&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실행 결과는 콘솔에 아래처럼 나왔어요.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;발행: 메시지 번호: 1
구독자1 수신: 메시지 번호: 1
발행: 메시지 번호: 2
구독자1 수신: 메시지 번호: 2
// ... 계속 반복&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 잘 되는 것 같았는데 이걸 메시지 큐로 쓰려니까 불편한 점이 많더라고요. pub/sub는 메시지를 받은 구독자가 메시지를 완료했는지를 Redis가 알 수 없어요. 그래서 메시지가 잘 처리됐는지 확인이나 재처리가 불가능하죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또, 만약 구독자가 연결이 끊긴 상태일 때 발행자가 메시지를 보내면 그 메시지는 사라집니다. 즉, 구독자가 나중에 다시 연결해도 못 받은 메시지는 못 받는 거예요. 이 부분이 일반적인 메시지 큐와 가장 큰 차이라고 생각합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;제가 삽질했던 Redis pub/sub 메시지 누락 문제 해결법&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 구독자가 잠시 끊긴 상태에서 메시지를 못 받아서 한참 당황했었어요. 이걸 해결할 방법으로는 Redis의 &lt;code style=&quot;background: #f0f0f0; padding: 2px 6px; border-radius: 4px; font-size: 0.9em;&quot;&gt;Stream&lt;/code&gt; 기능을 추천한대요. 왜냐면 Stream은 메시지에 ID가 붙어서 구독자가 끊겼다가 다시 연결해도 읽지 않은 메시지부터 받을 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 처음부터 Stream을 쓰자니 너무 복잡해서, 간단하게 pub/sub로 테스트해보고 싶을 때는 발행자 쪽에서 메시지를 별도로 저장해놓고(예: Redis List에 집어넣기), 구독자가 못 받은 메시지는 거기서 다시 확인하는 방식을 썼습니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;Redis pub/sub 메시지 큐 응용 코드 예시&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.0em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분이 핵심인데요, 발행할 때 메시지를 Redis List에 저장하고, 구독자가 메시지를 처리하면 List에서 해당 메시지를 제거하는 형태로 구현해봤어요.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot; style=&quot;background: #1e1e1e; color: #d4d4d4; padding: 1.2em; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.7; margin: 0 0 1.4em;&quot;&gt;&lt;code&gt;// 발행자 예제 (publisher_with_storage.js)
const { createClient } = require('redis');

(async () =&amp;gt; {
  const client = createClient();
  await client.connect();

  let count = 0;
  setInterval(async () =&amp;gt; {
    const message = `메시지 번호: ${++count}`;
    // 메시지를 List에 저장
    await client.rPush('message_queue', message);
    // pub/sub로 발행
    await client.publish('my_channel', message);
    console.log(`발행 및 저장: ${message}`);
  }, 1000);
})();

// 구독자 예제 (subscriber_with_ack.js)
const { createClient } = require('redis');

(async () =&amp;gt; {
  const client = createClient();
  await client.connect();

  await client.subscribe('my_channel', async (message) =&amp;gt; {
    console.log(`구독 수신: ${message}`);
    // 처리 후 메시지를 List에서 제거 (처리 완료 신호)
    await client.lRem('message_queue', 1, message);
    console.log(`처리 완료: ${message}`);
  });
})();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 방식을 쓰면 구독자가 잠시 끊겼을 때라도 리스트에 쌓인 메시지를 뒤늦게 확인하고 다시 처리할 수 있어요. 물론 이걸 완전히 자동화하려면 구독자가 재접속 시 리스트를 스캔하는 로직도 필요하죠.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 헷갈리는 Redis pub/sub 관련 질문들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Redis pub/sub는 메시지 큐랑 완전히 다른 건가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 완전히 다르진 않지만, 큰 차이는 &amp;lsquo;메시지 보장&amp;rsquo; 여부예요. pub/sub는 메시지가 구독자에게 보내지면 끝이라서 실패 시 재시도나 누락 복구가 어렵고, 메시지 큐는 보통 메시지 보장 및 순서 보장을 제공합니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Redis 대신 RabbitMQ나 Kafka 같은 걸 써야 할까요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 만약 메시지 손실이나 복잡한 메시지 처리 로직이 중요하다면 RabbitMQ, Kafka 같은 전용 메시지 큐를 권장합니다. 하지만 단순 이벤트 알림이라면 Redis pub/sub도 부담 없이 쓸 수 있어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. pub/sub 성능은 어떤가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. Redis 자체가 메모리 기반이라서 매우 빠릅니다. 그래서 실시간 알림, 채팅, 게임 서버 이벤트 전달 등에 자주 사용돼요. 다만 메시지 저장이나 재처리는 직접 구현해야 한다는 점 잊지 마세요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;짧게 요약하면, Redis pub/sub를 메시지 큐처럼 쓰는 건 가능하지만, 메시지 손실과 처리 보장 문제 때문에 상황에 맞게 보완책을 세워야 한다는 점이 중요하더라고요. 저처럼 처음 입문하신 분들은 우선 pub/sub 개념부터 차근차근 이해하고, 어느 정도 익숙해지면 Redis Stream이나 RabbitMQ 같은 솔루션도 살펴보는 걸 추천합니다.&lt;/p&gt;</description>
      <category>Database</category>
      <category>node.js</category>
      <category>pubsub</category>
      <category>redis</category>
      <category>메시지큐</category>
      <category>초보자</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/242</guid>
      <comments>https://mozzi-devlog.tistory.com/242#entry242comment</comments>
      <pubDate>Fri, 12 Jun 2026 13:56:38 +0900</pubDate>
    </item>
    <item>
      <title>아이돌봄 서비스 신청 후기와 2026년 실제 비용 부담 살펴봤어요</title>
      <link>https://mozzi-devlog.tistory.com/241</link>
      <description>&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 아이돌봄 서비스를 신청하려고 할 때, 실제로 비용이 얼마나 들지, 그리고 2026년부터 바뀐 점들이 무엇인지가 너무 헷갈리더라고요. 특히 작년과 달라진 게 있어서 꼼꼼히 확인 안 하면 예상 외로 부담이 커질 수도 있다는 얘기를 들었거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이번에 제가 직접 경험해본 아이돌봄 서비스 신청 과정과 2026년 최신 비용 부담 기준, 그리고 변경된 제도 내용을 자세히 정리해봤어요. 실제 신청하면서 느낀 꿀팁도 함께 담았으니 끝까지 읽어보시면 좋을 것 같아요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31925340/pexels-photo-31925340.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 0em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;2026년 아이돌봄 지원금 기준, 작년과 이렇게 달라졌어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;사실 이 부분이 가장 헷갈리는 부분인데요, 2026년부터 아이돌봄 서비스 지원금 산정 기준과 소득 구간별 지원율이 일부 조정됐답니다. 작년까지만 해도 중위소득 120% 이하 가구에만 지원이 집중됐는데, 올해는 중위소득 140% 이하 가구까지 지원 범위가 확대되었어요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이로 인해 3인 가구 기준으로 보면, 월 소득 580만 원대까지도 10~90% 차등 지원을 받을 수 있게 되었고, 특히 소득 100% 이하 구간에서는 지원율이 최대 90%까지 올라서 부담이 크게 줄었어요. 다만 소득 100~140% 구간은 지원율이 작년보다 10% 정도 낮아져서, 오히려 이 구간 가족들은 비용 부담이 약간 증가한 셈이죠.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 1.5em 0; font-size: 14px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;소득 구간 (중위소득 기준)&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2025년 지원율&lt;/th&gt;
&lt;th style=&quot;padding: 12px 10px; border: 1px solid #ddd; text-align: left;&quot;&gt;2026년 지원율 (변경됨)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;100% 이하&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;80~90%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;90%&lt;/b&gt; (최대 지원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;100% 초과~140% 이하&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;60~70%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;50~60% (지원율 하락)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;140% 초과&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;0%&lt;/td&gt;
&lt;td style=&quot;padding: 11px 10px; border: 1px solid #ddd;&quot;&gt;10% (소폭 지원 시작)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 작년과 달리 올해부터는 부모님이나 가족이 직접 돌봄을 하는 시간이 있다면 그 시간만큼 지원금 산정 시 감액 조정이 더 엄격해졌어요. 즉, 아이돌봄 서비스를 신청할 때, 가족 돌봄 시간을 정확히 신고해야 하니 참고하셔야 합니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;아이돌봄 서비스 신청 절차, 저도 여기서 막혔어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 여기서 제가 처음 신청하면서 많이 헷갈렸던 부분은 서비스 유형과 시간 등록 방식이었어요. 사실 홈페이지 접속해서 신청서를 작성하는 건 어렵지 않았는데, 서비스 종류를 &amp;lsquo;방문 돌봄&amp;rsquo;과 &amp;lsquo;기관 이용 돌봄&amp;rsquo;으로 나눠서 신청해야 하더라고요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저는 방문 돌봄으로 아이 돌보미가 집에 오는 방식을 선택했는데, 이 경우 시간 단위로 돌봄 시간을 등록해야 해서 처음에는 1시간 단위인지 30분 단위인지 헷갈렸어요. 2026년부터는 최소 신청 단위가 30분으로 조정돼서 조금 더 유연해진 점이 좋더라고요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680632/pexels-photo-31680632.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 돌봄 시간은 평일 기준 오전 7시부터 오후 10시까지 신청할 수 있으며, 야간 및 주말 요금은 별도로 추가 부담이 있어요. 저 같은 경우 주말에 2시간 돌봄을 신청했더니 기본 시간당 요금 1만 2천 원에 주말 할증 20%가 붙어서 실제 부담은 시간당 약 1만 4천 4백 원 정도였어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;신청 후 여기서 많이들 헷갈려하세요, 꼭 주의하세요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음에 이 부분을 몰랐는데, 아이돌봄 서비스 신청 후에는 반드시 &amp;lsquo;이용 승인 문자&amp;rsquo;를 확인하셔야 해요. 승인 여부에 따라 실제 서비스 이용 가능 여부가 달라지고, 승인 전에 돌봄 서비스를 이용하면 비용 지원을 받을 수 없거든요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;또한, 돌봄 도중에 시간 변경이나 취소를 하면 지원금 기준도 달라지는데, 2026년부터는 '사전 취소' 기준이 강화되어 돌봄 시작 24시간 전까지만 취소해야 지원금 혜택이 유지됩니다. 저도 급하게 일정이 변경돼 12시간 전에 취소했더니 지원 대상에서 제외돼서 전액 부담한 적이 있었어요.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;저는 이렇게 해서 실제 부담 비용을 줄일 수 있었어요&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아이돌봄 서비스 비용은 기본 시간당 1만 2천 원 수준인데, 지원금을 빼면 저소득 가정 기준 1시간에 2천~3천 원대까지 줄어들 수 있어요. 하지만 저는 소득 구간이 110% 정도라 지원율이 50%대라 실제로는 시간당 6천 원대 비용 부담이 있었죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 주말 돌봄 대신 평일 이른 아침이나 저녁 시간대를 이용하고, 또한 돌봄 신청 시간을 최대한 30분 단위로 쪼개서 필요한 시간만 신청했어요. 그리고 미리 일주일 단위로 계획을 세워 돌봄 시간을 변경하는 일이 없도록 해서 취소 수수료나 지원금 박탈도 피했죠.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;이 덕분에 월 40시간 이용 시 실제 부담 비용이 약 24만 원 정도로 예상보다 훨씬 절약됐답니다.&lt;/p&gt;
&lt;h2 style=&quot;font-weight: bold; font-size: 1.3em; margin: 2.5em 0 0.9em; padding-bottom: 0.4em; border-bottom: 2px solid #e8e8e8;&quot; data-ke-size=&quot;size26&quot;&gt;자주 물어보시는 것들&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 2026년에도 아이돌봄 서비스 지원금 신청은 홈페이지에서만 가능한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 네, 2026년 현재는 아이돌봄 서비스 지원금 신청과 시간 등록 모두 '아이돌봄 서비스 누리집(www.idolbom.go.kr)' 또는 모바일 앱에서 가능합니다. 방문 신청은 제한적이라 온라인 신청이 훨씬 편리해요.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 0.5em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. 만 13세 이상 자녀도 아이돌봄 서비스 받을 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 1.8em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;A. 아쉽게도 아이돌봄 서비스는 &lt;b&gt;만 12세 이하&lt;/b&gt; 자녀만 지원대상입니다. 만 13세 이상 자녀는 별도의 청소년 돌봄 프로그램을 이용해야 해서 2026년 기준도 동일해요.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 2.5em auto; max-width: 100%;&quot;&gt;&lt;img style=&quot;max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 3px 16px rgba(0,0,0,0.10); display: block; margin: 0 auto;&quot; title=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&quot; src=&quot;https://images.pexels.com/photos/31680681/pexels-photo-31680681.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940&quot; alt=&quot;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 이미지&quot; /&gt;
&lt;p style=&quot;color: #aaa; font-size: 0.82em; margin: 10px 0 0; line-height: 1.5;&quot; data-ke-size=&quot;size16&quot;&gt;아이돌봄 서비스 신청 후기 실제 비용 부담은 관련 정보&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 1.4em; line-height: 2.0; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;아이돌봄 서비스 신청과 비용 부담에 대해 직접 겪어보니, 2026년 최신 기준을 잘 파악하고 신청 절차를 꼼꼼히 지키는 게 정말 중요하다는 생각이 들었어요. 작년과 달라진 지원율과 취소 규정 때문에 막히는 분들 많던데, 이런 점만 유의하면 비용 걱정을 덜면서 편하게 아이 돌봄을 맡길 수 있답니다. 참고로 다음에는 아이돌봄과 비교해 볼 만한 &amp;lsquo;방과후 돌봄 서비스&amp;rsquo; 비용과 차이점도 정리해볼 예정이에요.&lt;/p&gt;</description>
      <category>생활정보</category>
      <category>2026년지원금</category>
      <category>복지정보</category>
      <category>신청후기</category>
      <category>아이돌봄비용</category>
      <category>아이돌봄서비스</category>
      <author>모찌모찝</author>
      <guid isPermaLink="true">https://mozzi-devlog.tistory.com/241</guid>
      <comments>https://mozzi-devlog.tistory.com/241#entry241comment</comments>
      <pubDate>Fri, 12 Jun 2026 11:27:04 +0900</pubDate>
    </item>
  </channel>
</rss>