<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>IT 나누기</title>
    <link>https://togethergrow.tistory.com/</link>
    <description>IT 종사자의 일상 나누기
- 보안, OS, 네트워크, DBMS</description>
    <language>ko</language>
    <pubDate>Thu, 13 Aug 2026 03:35:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>하루하루 IT 나누기</managingEditor>
    <image>
      <title>IT 나누기</title>
      <url>https://tistory1.daumcdn.net/tistory/8304655/attach/889c419722954970a26b5e4a65781542</url>
      <link>https://togethergrow.tistory.com</link>
    </image>
    <item>
      <title>2026 부산국제록페스티벌 일정&amp;middot;장소&amp;middot;티켓&amp;middot;프로그램 총정리</title>
      <link>https://togethergrow.tistory.com/entry/2026-%EB%B6%80%EC%82%B0%EA%B5%AD%EC%A0%9C%EB%A1%9D%ED%8E%98%EC%8A%A4%ED%8B%B0%EB%B2%8C-%EC%9D%BC%EC%A0%95%C2%B7%EC%9E%A5%EC%86%8C%C2%B7%ED%8B%B0%EC%BC%93%C2%B7%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%B4%9D%EC%A0%95%EB%A6%AC</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8146cbf1-2012-4178-aa12-06ddfb702361_127.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yW7Xp/dJMcafgvR6b/5uZL8tF7YO4bcZ5dqHADhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yW7Xp/dJMcafgvR6b/5uZL8tF7YO4bcZ5dqHADhK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yW7Xp/dJMcafgvR6b/5uZL8tF7YO4bcZ5dqHADhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyW7Xp%2FdJMcafgvR6b%2F5uZL8tF7YO4bcZ5dqHADhK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2026 부산국제록페스티벌 일정&amp;middot;장소&amp;middot;티켓&amp;middot;프로그램 총정리&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;627&quot; data-filename=&quot;8146cbf1-2012-4178-aa12-06ddfb702361_127.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;article class=&quot;festival-article&quot;&gt;
  &lt;style&gt;
    .festival-article {
      max-width: 920px;
      margin: 0 auto;
      color: #202124;
      font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans KR&quot;, Arial, sans-serif;
      font-size: 16px;
      line-height: 1.8;
      word-break: keep-all;
      overflow-wrap: anywhere;
    }

```
.festival-article * {
  box-sizing: border-box;
}

.festival-article h1,
.festival-article h2,
.festival-article h3 {
  color: #171717;
  line-height: 1.4;
}

.festival-article h1 {
  margin: 0 0 22px;
  font-size: clamp(28px, 5vw, 40px);
}

.festival-article h2 {
  margin: 48px 0 18px;
  padding-bottom: 10px;
  border-bottom: 2px solid #e5e7eb;
  font-size: clamp(23px, 4vw, 30px);
}

.festival-article h3 {
  margin: 30px 0 12px;
  font-size: clamp(19px, 3.5vw, 23px);
}

.festival-article p {
  margin: 0 0 18px;
}

.festival-article ul,
.festival-article ol {
  margin: 12px 0 22px;
  padding-left: 24px;
}

.festival-article li {
  margin-bottom: 8px;
}

.festival-article a {
  color: #b42318;
  text-decoration: underline;
  text-underline-offset: 3px;
}

.festival-article .hero {
  margin-bottom: 30px;
  padding: 30px;
  border-radius: 16px;
  background: linear-gradient(135deg, #fff1f2 0%, #fff7ed 55%, #f7fee7 100%);
}

.festival-article .hero-label {
  display: inline-block;
  margin-bottom: 12px;
  padding: 6px 11px;
  border-radius: 999px;
  background: #171717;
  color: #ffffff;
  font-size: 14px;
  font-weight: 700;
}

.festival-article .hero-copy {
  margin-bottom: 0;
  color: #4b5563;
  font-size: 18px;
}

.festival-article .summary-box,
.festival-article .notice-box,
.festival-article .tip-box {
  margin: 24px 0;
  padding: 20px;
  border-radius: 12px;
}

.festival-article .summary-box {
  border-left: 5px solid #dc2626;
  background: #fff1f2;
}

.festival-article .notice-box {
  border-left: 5px solid #d97706;
  background: #fffbeb;
}

.festival-article .tip-box {
  border-left: 5px solid #15803d;
  background: #f0fdf4;
}

.festival-article .summary-box p:last-child,
.festival-article .notice-box p:last-child,
.festival-article .tip-box p:last-child {
  margin-bottom: 0;
}

.festival-article .table-wrap {
  margin: 22px 0 30px;
  overflow-x: auto;
  border: 1px solid #d1d5db;
  border-radius: 12px;
  -webkit-overflow-scrolling: touch;
}

.festival-article table {
  width: 100%;
  min-width: 680px;
  border-collapse: collapse;
  background: #ffffff;
}

.festival-article caption {
  padding: 15px;
  background: #f9fafb;
  font-weight: 700;
  text-align: left;
}

.festival-article th,
.festival-article td {
  padding: 14px 15px;
  border-bottom: 1px solid #e5e7eb;
  text-align: left;
  vertical-align: top;
}

.festival-article th {
  width: 24%;
  background: #f3f4f6;
  color: #111827;
}

.festival-article tr:last-child th,
.festival-article tr:last-child td {
  border-bottom: 0;
}

.festival-article .program-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
  margin: 22px 0 28px;
}

.festival-article .program-card {
  padding: 20px;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  background: #ffffff;
}

.festival-article .program-card h3 {
  margin-top: 0;
}

.festival-article .program-card p:last-child {
  margin-bottom: 0;
}

.festival-article .checklist {
  padding: 20px 20px 12px;
  border: 1px solid #d1d5db;
  border-radius: 12px;
  background: #f9fafb;
}

.festival-article .faq-item {
  margin-bottom: 16px;
  padding: 20px;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  background: #ffffff;
}

.festival-article .faq-item h3 {
  margin-top: 0;
}

.festival-article .faq-item p:last-child {
  margin-bottom: 0;
}

.festival-article .link-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 20px 0 30px;
}

.festival-article .link-buttons a {
  display: inline-block;
  padding: 11px 16px;
  border-radius: 8px;
  background: #171717;
  color: #ffffff;
  font-weight: 700;
  text-decoration: none;
}

.festival-article .tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 36px;
  padding: 0;
  list-style: none;
}

.festival-article .tag-list li {
  margin: 0;
  padding: 7px 12px;
  border-radius: 999px;
  background: #f3f4f6;
  color: #374151;
  font-size: 14px;
}

@media (max-width: 760px) {
  .festival-article .program-grid {
    grid-template-columns: 1fr;
  }

  .festival-article .hero {
    padding: 22px;
  }

  .festival-article .hero-copy {
    font-size: 16px;
  }
}
```

  &lt;/style&gt;

  &lt;header class=&quot;hero&quot;&gt;
    &lt;span class=&quot;hero-label&quot;&gt;2026 부산 가을 축제&lt;/span&gt;
    &lt;h1&gt;2026 부산국제록페스티벌 일정·장소·티켓·프로그램 총정리&lt;/h1&gt;
    &lt;p class=&quot;hero-copy&quot;&gt;
      음악이 즐겁고, 사람이 즐겁고, 자연이 즐거운 삼락(三樂).
      국내 최장수 국제 록 음악 축제인 부산국제록페스티벌이 2026년 10월 삼락생태공원에서 열립니다.
    &lt;/p&gt;
  &lt;/header&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nykq8/dJMcajwqXHC/OVpyVkobqTsukOAGvYl8o1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nykq8/dJMcajwqXHC/OVpyVkobqTsukOAGvYl8o1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;8146cbf1-2012-4178-aa12-06ddfb702361_128.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nykq8/dJMcajwqXHC/OVpyVkobqTsukOAGvYl8o1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNykq8%2FdJMcajwqXHC%2FOVpyVkobqTsukOAGvYl8o1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yUsF8/dJMcaiKXYYc/auMNo4Dxw0W9fd0glQh8KK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yUsF8/dJMcaiKXYYc/auMNo4Dxw0W9fd0glQh8KK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;8146cbf1-2012-4178-aa12-06ddfb702361_130.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yUsF8/dJMcaiKXYYc/auMNo4Dxw0W9fd0glQh8KK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyUsF8%2FdJMcaiKXYYc%2FauMNo4Dxw0W9fd0glQh8KK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VyQYJ/dJMcajwqXHD/9MGy9LLvqdxEiTbBjoyQJ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VyQYJ/dJMcajwqXHD/9MGy9LLvqdxEiTbBjoyQJ1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;8146cbf1-2012-4178-aa12-06ddfb702361_129.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VyQYJ/dJMcajwqXHD/9MGy9LLvqdxEiTbBjoyQJ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVyQYJ%2FdJMcajwqXHD%2F9MGy9LLvqdxEiTbBjoyQJ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;출처 : 대한민국 구석구석&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
  &lt;main&gt;
    &lt;section&gt;
      &lt;div class=&quot;summary-box&quot;&gt;
        &lt;p&gt;
          &lt;strong&gt;2026 부산국제록페스티벌은 10월 2일 금요일부터 10월 4일 일요일까지 3일간 부산 삼락생태공원에서 개최됩니다.&lt;/strong&gt;
          공연은 유료로 운영되며, 국내외 아티스트 공연과 신진 음악인 발굴 프로그램, 푸드코트, MD 부스, 캠핑존 등 다양한 프로그램이 마련될 예정입니다.
          공식 홈페이지에서도 같은 개최 일정과 장소를 안내하고 있습니다. 
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/section&gt;

```
&lt;section&gt;
  &lt;h2&gt;2026 부산국제록페스티벌 기본 정보&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;2026 부산국제록페스티벌 행사 정보&lt;/caption&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;축제명&lt;/th&gt;
          &lt;td&gt;2026 부산국제록페스티벌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;슬로건&lt;/th&gt;
          &lt;td&gt;삼락(三樂) : 음악이 즐겁고, 사람이 즐겁고, 자연이 즐겁다&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;기간&lt;/th&gt;
          &lt;td&gt;2026년 10월 2일 금요일부터 10월 4일 일요일까지&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;행사 기간&lt;/th&gt;
          &lt;td&gt;총 3일&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;장소&lt;/th&gt;
          &lt;td&gt;부산광역시 사상구 삼락동 29-50, 삼락생태공원&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;관람료&lt;/th&gt;
          &lt;td&gt;유료&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;주최·주관&lt;/th&gt;
          &lt;td&gt;부산광역시·부산축제조직위원회&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;문의&lt;/th&gt;
          &lt;td&gt;051-713-5000&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;공식 인스타그램&lt;/th&gt;
          &lt;td&gt;@busanrockfest&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;공식 홈페이지&lt;/th&gt;
          &lt;td&gt;
            &lt;a href=&quot;https://busanrockfestival.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
              부산국제록페스티벌 공식 홈페이지
            &lt;/a&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;location&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://map.daum.net/?latlng=128.97318637650778,35.16913430208613&amp;amp;q=%EC%82%BC%EB%9D%BD%EC%83%9D%ED%83%9C%EA%B3%B5%EC%9B%90&amp;amp;itemId=7921318&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;span class=&quot;location-info&quot;&gt; &lt;span class=&quot;location-name&quot;&gt;삼락생태공원&lt;/span&gt; &lt;span class=&quot;location-address&quot;&gt;부산 사상구 삼락동 29-46&lt;/span&gt; &lt;/span&gt; &lt;/a&gt;&lt;/figure&gt;
  &lt;p&gt;
    부산축제조직위원회 공식 안내에서도 2026년 행사를 10월 2일부터 4일까지 삼락생태공원에서 개최하는 것으로 소개하고 있습니다. 
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;부산국제록페스티벌은 어떤 축제인가&lt;/h2&gt;

  &lt;p&gt;
    부산국제록페스티벌은 2000년 처음 시작된 국내 최초이자 최장수 국제 록 페스티벌입니다.
    2026년에는 27년째 명맥을 이어가며 국내외 음악 팬을 만날 예정입니다. 
  &lt;/p&gt;

  &lt;p&gt;
    단순히 유명 아티스트의 공연만 감상하는 행사가 아니라 신진 아티스트부터 글로벌 헤드라이너까지
    다양한 음악을 한 장소에서 즐길 수 있는 대형 야외 음악 축제입니다.
    삼락생태공원 곳곳에 여러 무대가 조성되기 때문에 관람객은 자신의 음악 취향과 공연 일정에 맞춰 무대를 이동하며 관람할 수 있습니다.
  &lt;/p&gt;

  &lt;p&gt;
    축제 이름에 담긴 ‘삼락’은 음악, 사람, 자연이 함께 즐거운 축제를 뜻합니다.
    넓은 생태공원에서 라이브 공연을 감상하고 음식과 캠핑, 참여 이벤트를 함께 즐길 수 있다는 점이 부산국제록페스티벌의 대표적인 특징입니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;주요 행사 프로그램&lt;/h2&gt;

  &lt;div class=&quot;program-grid&quot;&gt;
    &lt;article class=&quot;program-card&quot;&gt;
      &lt;h3&gt;메인 공연&lt;/h3&gt;
      &lt;p&gt;
        국내외 아티스트가 참여하는 부산국제록페스티벌의 중심 프로그램입니다.
        신진 뮤지션부터 대형 헤드라이너까지 다양한 무대가 진행될 예정입니다.
      &lt;/p&gt;
    &lt;/article&gt;

    &lt;article class=&quot;program-card&quot;&gt;
      &lt;h3&gt;신진 아티스트 프로그램&lt;/h3&gt;
      &lt;p&gt;
        Rookies on the BU-ROCK과 Road to BU-ROCK 등을 통해 새로운 음악인을 발굴하고
        관객에게 다양한 아티스트를 소개합니다.
      &lt;/p&gt;
    &lt;/article&gt;

    &lt;article class=&quot;program-card&quot;&gt;
      &lt;h3&gt;부대 행사&lt;/h3&gt;
      &lt;p&gt;
        관람객 참여 이벤트, 노래자랑, MD 부스, 푸드코트 라운지,
        캠핑존 등 공연 외에도 즐길 수 있는 프로그램이 운영될 예정입니다.
      &lt;/p&gt;
    &lt;/article&gt;
  &lt;/div&gt;

  &lt;p&gt;
    공식 소개에서는 공원 곳곳의 공연 무대와 함께 관람객 참여형 게임, 푸드코트 라운지,
    캠핑존 등의 부대 프로그램을 안내하고 있습니다. 
  &lt;/p&gt;

  &lt;h3&gt;Rookies on the BU-ROCK&lt;/h3&gt;

  &lt;p&gt;
    신진 아티스트와 새로운 음악을 발견할 수 있는 프로그램입니다.
    이미 알려진 뮤지션의 무대뿐 아니라 앞으로 성장할 아티스트를 만날 수 있다는 점에서
    부산국제록페스티벌의 정체성을 보여주는 프로그램으로 볼 수 있습니다.
  &lt;/p&gt;

  &lt;h3&gt;Road to BU-ROCK&lt;/h3&gt;

  &lt;p&gt;
    부산국제록페스티벌 본 행사와 연계하여 다양한 지역과 무대에서 아티스트를 발굴하고
    축제로 연결하는 프로그램입니다. 세부 일정과 출연진은 공식 공지를 통해 확인하는 것이 좋습니다.
  &lt;/p&gt;

  &lt;h3&gt;푸드코트와 MD 부스&lt;/h3&gt;

  &lt;p&gt;
    축제장에서는 부산 지역의 음식과 다양한 메뉴를 판매하는 푸드코트 라운지를 이용할 수 있습니다.
    공식 굿즈와 아티스트 관련 상품을 판매하는 MD 부스도 운영될 예정이므로 인기 상품을 구매하려면
    행사장 입장 후 판매 위치와 운영 시간을 먼저 확인하는 것이 좋습니다.
  &lt;/p&gt;

  &lt;h3&gt;삼락 오토 캠핑존&lt;/h3&gt;

  &lt;p&gt;
    공연과 캠핑을 함께 즐길 수 있는 캠핑 프로그램도 부산국제록페스티벌의 특징입니다.
    캠핑존은 일반 공연 티켓과 예약 조건이 다를 수 있으므로 이용 가능 여부,
    입·퇴실 시간, 차량 출입 기준과 준비물은 별도 공지를 확인해야 합니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;2026 부산국제록페스티벌 티켓 가격&lt;/h2&gt;

  &lt;p&gt;
    2026년 정규 티켓은 1일권, 2일권, 3일권으로 구분됩니다.
    공식 공지 기준 정규 티켓 가격은 1일권 12만 원, 2일권 19만 3천 원,
    3일권 26만 6천 원이며 예스24 티켓에서 판매됩니다. 한정 수량이 소진되면 조기 마감될 수 있습니다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;2026 부산국제록페스티벌 정규 티켓 가격&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;티켓 종류&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;정규 가격&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;이용 기간&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;1일권&lt;/td&gt;
          &lt;td&gt;120,000원&lt;/td&gt;
          &lt;td&gt;선택한 하루&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;2일권&lt;/td&gt;
          &lt;td&gt;193,000원&lt;/td&gt;
          &lt;td&gt;선택 조건은 예매 상세 페이지 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;3일권&lt;/td&gt;
          &lt;td&gt;266,000원&lt;/td&gt;
          &lt;td&gt;10월 2일부터 4일까지&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div class=&quot;notice-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;티켓 가격과 판매 상태는 변경될 수 있습니다.&lt;/strong&gt;
      예매 전 공식 홈페이지와 예스24 예매 페이지에서 판매 여부, 취소 수수료,
      손목밴드 교환 방법, 재입장 규정을 반드시 확인하세요.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;라인업과 공연 시간표 확인 방법&lt;/h2&gt;

  &lt;p&gt;
    2026 부산국제록페스티벌은 1차와 2차 라인업을 순차적으로 공개했습니다.
    공식 홈페이지에는 라인업과 티켓, 프로그램, 셔틀버스 등 행사 관련 메뉴가 마련되어 있습니다.
  &lt;/p&gt;

  &lt;p&gt;
    아티스트별 출연 날짜와 공연 시간은 추후 변경될 수 있으므로
    티켓을 구매한 뒤에도 공식 홈페이지와 인스타그램의 최신 공지를 지속해서 확인하는 것이 좋습니다.
    특히 여러 무대의 공연이 동시에 진행될 수 있으므로 타임테이블이 공개되면 우선 관람할 아티스트와
    무대 이동 시간을 미리 정리해 두는 것이 좋습니다.
  &lt;/p&gt;

  &lt;div class=&quot;link-buttons&quot;&gt;
    &lt;a href=&quot;https://busanrockfestival.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
      공식 홈페이지 확인
    &lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/busanrockfest/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
      공식 인스타그램 확인
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;삼락생태공원 축제 관람 준비물&lt;/h2&gt;

  &lt;p&gt;
    부산국제록페스티벌은 야외 생태공원에서 장시간 진행되는 행사입니다.
    실내 공연과 달리 날씨, 이동 거리, 체력 관리가 관람 만족도에 큰 영향을 줄 수 있습니다.
  &lt;/p&gt;

  &lt;div class=&quot;checklist&quot;&gt;
    &lt;ul&gt;
      &lt;li&gt;모바일 티켓 또는 예매 확인 자료&lt;/li&gt;
      &lt;li&gt;본인 확인에 필요한 신분증&lt;/li&gt;
      &lt;li&gt;충전된 스마트폰과 보조 배터리&lt;/li&gt;
      &lt;li&gt;편안한 운동화와 활동하기 좋은 옷&lt;/li&gt;
      &lt;li&gt;일교차에 대비한 얇은 겉옷&lt;/li&gt;
      &lt;li&gt;햇빛을 막을 모자와 자외선 차단제&lt;/li&gt;
      &lt;li&gt;우천 예보가 있다면 우비와 방수 가방&lt;/li&gt;
      &lt;li&gt;개인 상비약과 필요한 위생용품&lt;/li&gt;
      &lt;li&gt;재사용 가능한 물병의 반입 가능 여부 사전 확인&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;div class=&quot;tip-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;관람 팁:&lt;/strong&gt;
      10월 초 부산은 낮과 밤의 체감온도 차이가 날 수 있습니다.
      공연 중에는 덥더라도 밤에는 쌀쌀할 수 있으므로 가볍게 걸칠 수 있는 옷을 준비하는 편이 좋습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;방문 전 확인해야 할 사항&lt;/h2&gt;

  &lt;ol&gt;
    &lt;li&gt;공식 타임테이블과 출연진 변경 여부를 확인합니다.&lt;/li&gt;
    &lt;li&gt;티켓 수령 또는 손목밴드 교환 장소와 운영 시간을 확인합니다.&lt;/li&gt;
    &lt;li&gt;공연장 입장 가능 시간과 재입장 규정을 확인합니다.&lt;/li&gt;
    &lt;li&gt;반입 금지 물품과 카메라 촬영 기준을 확인합니다.&lt;/li&gt;
    &lt;li&gt;공식 셔틀버스 또는 대중교통 운행 정보를 확인합니다.&lt;/li&gt;
    &lt;li&gt;우천 시 운영 기준과 공연 변경 공지를 확인합니다.&lt;/li&gt;
    &lt;li&gt;캠핑존을 이용한다면 별도 예약과 차량 출입 규정을 확인합니다.&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;
    공식 홈페이지에는 셔틀버스와 티켓 관련 공지가 게시되고 있으므로
    방문 직전 최신 공지를 다시 확인하는 것이 안전합니다. 
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;자주 묻는 질문&lt;/h2&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;2026 부산국제록페스티벌은 언제 열리나요?&lt;/h3&gt;
    &lt;p&gt;
      2026년 10월 2일 금요일부터 10월 4일 일요일까지 총 3일간 열립니다.
    &lt;/p&gt;
  &lt;/article&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;부산국제록페스티벌 장소는 어디인가요?&lt;/h3&gt;
    &lt;p&gt;
      부산광역시 사상구에 있는 삼락생태공원에서 개최됩니다.
      행사장 세부 출입구와 티켓 교환 장소는 추후 공식 안내를 확인해야 합니다.
    &lt;/p&gt;
  &lt;/article&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;무료 축제인가요?&lt;/h3&gt;
    &lt;p&gt;
      메인 공연은 유료 티켓이 필요한 행사입니다.
      일부 무료 개방형 프로그램이 운영될 수 있지만 프로그램별 입장 기준은 공식 공지를 확인하는 것이 정확합니다.
    &lt;/p&gt;
  &lt;/article&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;하루만 관람할 수 있나요?&lt;/h3&gt;
    &lt;p&gt;
      정규 티켓에는 1일권이 포함되어 있어 원하는 날짜의 공연만 관람할 수 있습니다.
      다만 날짜별 라인업과 티켓 잔여 수량을 확인한 뒤 예매해야 합니다.
    &lt;/p&gt;
  &lt;/article&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;비가 오면 축제가 취소되나요?&lt;/h3&gt;
    &lt;p&gt;
      야외 공연은 기상 상황과 안전 기준에 따라 운영 방식이 달라질 수 있습니다.
      우천 시 진행 여부나 일정 변경은 행사 직전 공식 홈페이지와 SNS 공지를 확인하세요.
    &lt;/p&gt;
  &lt;/article&gt;

  &lt;article class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;캠핑존은 공연 티켓만 있으면 이용할 수 있나요?&lt;/h3&gt;
    &lt;p&gt;
      캠핑존은 공연 티켓과 별도의 예약 또는 이용 조건이 적용될 수 있습니다.
      캠핑 패키지, 차량 등록, 입·퇴실 기준이 공지되면 세부 내용을 확인해야 합니다.
    &lt;/p&gt;
  &lt;/article&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;마무리&lt;/h2&gt;

  &lt;p&gt;
    2026 부산국제록페스티벌은 10월 2일부터 4일까지 삼락생태공원에서 열리는
    부산의 대표적인 가을 음악 축제입니다.
    국내외 아티스트의 공연뿐 아니라 신진 아티스트 프로그램, 참여 이벤트,
    푸드코트, MD 부스와 캠핑존까지 함께 즐길 수 있습니다.
  &lt;/p&gt;

  &lt;p&gt;
    축제 방문을 계획한다면 원하는 아티스트의 출연 날짜를 먼저 확인하고,
    티켓과 숙박, 교통편을 미리 준비하는 것이 좋습니다.
    공연 시간표와 입장 규정, 셔틀버스, 캠핑존 운영 방식은 변경될 수 있으므로
    행사 직전 공식 홈페이지와 인스타그램의 최신 공지를 다시 확인하세요.
  &lt;/p&gt;
&lt;/section&gt;
```

  &lt;/main&gt;

  &lt;footer&gt;
    &lt;ul class=&quot;tag-list&quot; aria-label=&quot;관련 태그&quot;&gt;
      &lt;li&gt;부산국제록페스티벌&lt;/li&gt;
      &lt;li&gt;2026부산축제&lt;/li&gt;
      &lt;li&gt;부산가을축제&lt;/li&gt;
      &lt;li&gt;삼락생태공원&lt;/li&gt;
      &lt;li&gt;부산록페스티벌&lt;/li&gt;
      &lt;li&gt;부산공연&lt;/li&gt;
      &lt;li&gt;록페스티벌&lt;/li&gt;
      &lt;li&gt;부산여행&lt;/li&gt;
      &lt;li&gt;부산축제일정&lt;/li&gt;
      &lt;li&gt;부산콘서트&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/footer&gt;
&lt;/article&gt;</description>
      <category>일상 정보/전국 소식</category>
      <category>2026부산축제</category>
      <category>&amp;lt;p&amp;gt;부산국제록페스티벌</category>
      <category>록페스티벌</category>
      <category>부산가을축제</category>
      <category>부산공연</category>
      <category>부산록페스티벌</category>
      <category>부산여행</category>
      <category>부산축제일정</category>
      <category>부산콘서트</category>
      <category>삼락생태공원</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/599</guid>
      <comments>https://togethergrow.tistory.com/entry/2026-%EB%B6%80%EC%82%B0%EA%B5%AD%EC%A0%9C%EB%A1%9D%ED%8E%98%EC%8A%A4%ED%8B%B0%EB%B2%8C-%EC%9D%BC%EC%A0%95%C2%B7%EC%9E%A5%EC%86%8C%C2%B7%ED%8B%B0%EC%BC%93%C2%B7%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%B4%9D%EC%A0%95%EB%A6%AC#entry599comment</comments>
      <pubDate>Mon, 3 Aug 2026 14:34:23 +0900</pubDate>
    </item>
    <item>
      <title>폐쇄망 파일전송 망연계 환경에서 A 서버에서 C 서버로 nc 테스트</title>
      <link>https://togethergrow.tistory.com/entry/%ED%8F%90%EC%87%84%EB%A7%9D-%ED%8C%8C%EC%9D%BC%EC%A0%84%EC%86%A1-%EB%A7%9D%EC%97%B0%EA%B3%84-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-A-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-C-%EC%84%9C%EB%B2%84%EB%A1%9C-nc-%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
      <description>&lt;article class=&quot;tistory-tech-article&quot;&gt;
  &lt;style&gt;
    .tistory-tech-article {
      max-width: 920px;
      margin: 0 auto;
      color: #1f2937;
      font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans KR&quot;, Arial, sans-serif;
      font-size: 16px;
      line-height: 1.8;
      word-break: keep-all;
      overflow-wrap: anywhere;
    }

```
.tistory-tech-article * {
  box-sizing: border-box;
}

.tistory-tech-article h1,
.tistory-tech-article h2,
.tistory-tech-article h3 {
  color: #111827;
  line-height: 1.4;
  word-break: keep-all;
}

.tistory-tech-article h1 {
  margin: 0 0 24px;
  font-size: clamp(28px, 5vw, 40px);
}

.tistory-tech-article h2 {
  margin: 52px 0 18px;
  padding-bottom: 10px;
  border-bottom: 2px solid #e5e7eb;
  font-size: clamp(23px, 4vw, 30px);
}

.tistory-tech-article h3 {
  margin: 32px 0 12px;
  font-size: clamp(19px, 3.5vw, 23px);
}

.tistory-tech-article p {
  margin: 0 0 18px;
}

.tistory-tech-article ul,
.tistory-tech-article ol {
  margin: 12px 0 22px;
  padding-left: 24px;
}

.tistory-tech-article li {
  margin-bottom: 8px;
}

.tistory-tech-article strong {
  color: #111827;
}

.tistory-tech-article code {
  padding: 2px 6px;
  border-radius: 5px;
  background: #f3f4f6;
  color: #b42318;
  font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
  font-size: 0.92em;
}

.tistory-tech-article pre {
  margin: 18px 0 24px;
  padding: 18px;
  overflow-x: auto;
  border: 1px solid #d1d5db;
  border-radius: 10px;
  background: #111827;
  color: #f9fafb;
  line-height: 1.65;
  white-space: pre;
  -webkit-overflow-scrolling: touch;
}

.tistory-tech-article pre code {
  padding: 0;
  background: transparent;
  color: inherit;
  font-size: 14px;
}

.tistory-tech-article .summary-box,
.tistory-tech-article .info-box,
.tistory-tech-article .warning-box,
.tistory-tech-article .success-box {
  margin: 24px 0;
  padding: 20px;
  border-radius: 10px;
}

.tistory-tech-article .summary-box {
  border-left: 5px solid #2563eb;
  background: #eff6ff;
}

.tistory-tech-article .info-box {
  border-left: 5px solid #0f766e;
  background: #f0fdfa;
}

.tistory-tech-article .warning-box {
  border-left: 5px solid #d97706;
  background: #fffbeb;
}

.tistory-tech-article .success-box {
  border-left: 5px solid #15803d;
  background: #f0fdf4;
}

.tistory-tech-article .summary-box p:last-child,
.tistory-tech-article .info-box p:last-child,
.tistory-tech-article .warning-box p:last-child,
.tistory-tech-article .success-box p:last-child {
  margin-bottom: 0;
}

.tistory-tech-article .table-wrap {
  margin: 20px 0 28px;
  overflow-x: auto;
  border: 1px solid #d1d5db;
  border-radius: 10px;
  -webkit-overflow-scrolling: touch;
}

.tistory-tech-article table {
  width: 100%;
  min-width: 680px;
  border-collapse: collapse;
  background: #ffffff;
}

.tistory-tech-article caption {
  padding: 14px;
  background: #f9fafb;
  font-weight: 700;
  text-align: left;
}

.tistory-tech-article th,
.tistory-tech-article td {
  padding: 13px 14px;
  border-bottom: 1px solid #e5e7eb;
  text-align: left;
  vertical-align: top;
}

.tistory-tech-article th {
  background: #f3f4f6;
  color: #111827;
}

.tistory-tech-article tr:last-child td {
  border-bottom: 0;
}

.tistory-tech-article .flow-box {
  margin: 20px 0 28px;
  padding: 20px;
  overflow-x: auto;
  border: 1px solid #d1d5db;
  border-radius: 10px;
  background: #f9fafb;
}

.tistory-tech-article .flow-box pre {
  min-width: 640px;
  margin: 0;
  border: 0;
  background: transparent;
  color: #111827;
}

.tistory-tech-article .checklist {
  padding: 20px 20px 12px;
  border: 1px solid #d1d5db;
  border-radius: 10px;
  background: #ffffff;
}

.tistory-tech-article .checklist li {
  margin-bottom: 12px;
}

.tistory-tech-article .faq-item {
  margin-bottom: 16px;
  padding: 20px;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  background: #ffffff;
}

.tistory-tech-article .faq-item h3 {
  margin-top: 0;
}

.tistory-tech-article .faq-item p:last-child {
  margin-bottom: 0;
}

.tistory-tech-article .tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 32px;
  padding: 0;
  list-style: none;
}

.tistory-tech-article .tag-list li {
  margin: 0;
  padding: 7px 11px;
  border-radius: 999px;
  background: #f3f4f6;
  color: #374151;
  font-size: 14px;
}

@media (max-width: 640px) {
  .tistory-tech-article {
    font-size: 15.5px;
    line-height: 1.75;
  }

  .tistory-tech-article h2 {
    margin-top: 42px;
  }

  .tistory-tech-article pre,
  .tistory-tech-article .summary-box,
  .tistory-tech-article .info-box,
  .tistory-tech-article .warning-box,
  .tistory-tech-article .success-box {
    padding: 16px;
  }
}
```

  &lt;/style&gt;

  &lt;header&gt;
    &lt;h1&gt;폐쇄망 파일전송 망연계 환경에서 A 서버에서 C 서버로 nc 테스트가 실패하는 이유와 점검 방법&lt;/h1&gt;

```
&lt;p&gt;
  폐쇄망에 있는 A 서버에서 외부망의 C 서버로 파일을 전송하기 위해 망연계 B 서버를 경유하는 환경에서는
  &lt;code&gt;nc -zv C_IP PORT&lt;/code&gt; 명령이 실패할 수 있습니다.
  특히 망연계 방식이 &lt;strong&gt;파일전송 전용 망연계&lt;/strong&gt;라면 A 서버와 C 서버 사이에 직접 TCP 세션이 생성되지 않기 때문에,
  이 결과만으로 방화벽 정책이나 망연계 장애를 판단하면 안 됩니다.
&lt;/p&gt;

&lt;div class=&quot;summary-box&quot;&gt;
  &lt;p&gt;
    &lt;strong&gt;핵심 결론:&lt;/strong&gt;
    파일전송 망연계 환경에서는 A 서버가 C 서버의 업무 포트로 직접 접속하지 않습니다.
    따라서 A 서버에서 C 서버를 대상으로 실행한 &lt;code&gt;nc&lt;/code&gt; 테스트가 실패하는 것은 정상일 수 있습니다.
    정상 여부는 실제 망연계 통신 구간, 망연계 전송 정책, 에이전트 상태, 전송 로그 및 최종 파일 도착 여부로 확인해야 합니다.
  &lt;/p&gt;
&lt;/div&gt;
```

  &lt;/header&gt;

  &lt;main&gt;
    &lt;section&gt;
      &lt;h2&gt;1. 현재 네트워크 구조 이해하기&lt;/h2&gt;

```
  &lt;p&gt;질문의 환경을 단순화하면 다음과 같습니다.&lt;/p&gt;

  &lt;div class=&quot;flow-box&quot; role=&quot;img&quot; aria-label=&quot;A 서버에서 망연계 B 서버를 거쳐 C 서버로 파일을 전달하는 구조&quot;&gt;
    &lt;pre&gt;&lt;code&gt;A 서버
```

폐쇄망·업무망
│
│ 망연계 에이전트 또는 전송 프로그램
▼
B 망연계 구간
전송 서버·게이트웨이·중계 시스템
│
│ 수신망 에이전트 또는 별도 전송 채널
▼
C 서버
외부망·수신망&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt;

```
  &lt;p&gt;
    겉으로는 A 서버에서 B 서버를 거쳐 C 서버로 이동하는 것처럼 보이지만,
    네트워크 계층에서는 A 서버의 패킷이 B 서버를 통과하여 C 서버까지 그대로 라우팅되는 구조가 아닐 수 있습니다.
  &lt;/p&gt;

  &lt;p&gt;
    파일전송 망연계는 일반적으로 파일을 송신 측에서 수집한 뒤,
    망연계 솔루션의 정책과 보안 절차에 따라 반대편 네트워크로 전달하는 애플리케이션 기반 시스템입니다.
    따라서 다음 두 개념을 구분해야 합니다.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;논리적 전송:&lt;/strong&gt; A 서버에서 생성된 파일이 최종적으로 C 서버에 전달됩니다.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;직접 네트워크 연결:&lt;/strong&gt; A 서버가 C 서버의 IP 주소와 포트로 TCP 세션을 생성합니다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    파일전송 망연계는 논리적인 A → C 파일전송을 제공할 수 있지만,
    이것이 A 서버에서 C 서버로 직접 TCP 연결이 가능하다는 의미는 아닙니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;2. A 서버에서 C 서버로 nc 테스트가 실패하는 이유&lt;/h2&gt;

  &lt;p&gt;
    &lt;code&gt;nc -zv&lt;/code&gt;는 지정한 목적지 IP와 TCP 포트로 직접 연결을 시도하는 명령입니다.
    예를 들어 다음 명령은 A 서버가 C 서버의 443번 포트까지 직접 TCP 세션을 생성할 수 있는지 확인합니다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv C_IP 443&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;하지만 파일전송 망연계 구조에서는 일반적으로 다음과 같은 직접 연결이 존재하지 않습니다.&lt;/p&gt;

  &lt;div class=&quot;flow-box&quot; role=&quot;img&quot; aria-label=&quot;A 서버와 C 서버 사이의 직접 TCP 연결이 차단된 구조&quot;&gt;
    &lt;pre&gt;&lt;code&gt;A 서버 ────────────────X──────────────── C 서버
    직접 TCP 연결 또는 직접 라우팅 없음
```

A 서버 ── 망연계 통신 ── B 구간 ── 망연계 통신 ── C 서버&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt;

```
  &lt;p&gt;
    A 서버에는 C 서버 대역으로 가는 라우팅 정보가 없을 수 있고,
    중간 방화벽에서도 A 서버의 원본 IP를 기준으로 C 서버 접근을 허용하지 않을 수 있습니다.
    망연계 B 시스템 역시 일반 라우터처럼 패킷을 전달하지 않고 파일을 애플리케이션 수준에서 다시 전송할 수 있습니다.
  &lt;/p&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;주의:&lt;/strong&gt;
      B 서버가 경유지라는 표현만 보고 일반적인 L3 라우터, NAT 장비 또는 점프 서버처럼 판단하면 안 됩니다.
      망연계 제품에 따라 B는 하나의 서버가 아니라 송신망 구간과 수신망 구간에 분리된 장비 또는 논리 서버 쌍으로 구성될 수도 있습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;3. 일반 라우팅과 파일전송 망연계의 차이&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;통신 방식별 A 서버의 C 서버 직접 접속 가능 여부&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;구성 방식&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;A → C 직접 TCP&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;nc 테스트&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;주요 검증 방법&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;L3 라우팅과 방화벽 허용&lt;/td&gt;
          &lt;td&gt;가능&lt;/td&gt;
          &lt;td&gt;C 서버 대상으로 수행&lt;/td&gt;
          &lt;td&gt;라우팅, 방화벽, 서비스 Listen 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;NAT 또는 포트 포워딩&lt;/td&gt;
          &lt;td&gt;지정된 주소와 포트로 가능&lt;/td&gt;
          &lt;td&gt;NAT 주소 또는 포워딩 포트 대상으로 수행&lt;/td&gt;
          &lt;td&gt;NAT 정책, 포트 매핑, 반환 경로 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;애플리케이션 프록시&lt;/td&gt;
          &lt;td&gt;일반적으로 불가능&lt;/td&gt;
          &lt;td&gt;프록시 주소와 서비스 포트 대상으로 수행&lt;/td&gt;
          &lt;td&gt;프록시 정책, 인증, 백엔드 연결 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;TCP 릴레이&lt;/td&gt;
          &lt;td&gt;C 서버에 직접 연결하지 않음&lt;/td&gt;
          &lt;td&gt;B의 릴레이 수신 포트를 대상으로 수행&lt;/td&gt;
          &lt;td&gt;릴레이 수신 포트와 목적지 매핑 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;파일전송 망연계&lt;/td&gt;
          &lt;td&gt;불가능한 경우가 대부분&lt;/td&gt;
          &lt;td&gt;C 업무 포트 테스트는 부적절할 수 있음&lt;/td&gt;
          &lt;td&gt;전송 정책, 에이전트, 전송 로그, 파일 도착 확인&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;
    따라서 현재 환경이 파일전송 망연계라면 A 서버에서 C 서버의 SSH, HTTPS, 데이터베이스 또는 애플리케이션 포트를
    직접 확인하는 방식은 실제 파일전송 경로를 검증하지 못합니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;4. 방화벽은 어떤 구간을 열어야 하는가&lt;/h2&gt;

  &lt;p&gt;
    방화벽 정책은 사용자가 인식하는 논리적 목적지인 A → C만 보고 작성하면 안 됩니다.
    실제로 TCP 세션을 생성하는 송신지, 목적지, 프로토콜 및 포트를 기준으로 작성해야 합니다.
  &lt;/p&gt;

  &lt;p&gt;예를 들어 실제 통신 구조가 다음과 같다고 가정하겠습니다.&lt;/p&gt;

  &lt;div class=&quot;flow-box&quot; role=&quot;img&quot; aria-label=&quot;망연계 구간별 실제 방화벽 허용 예시&quot;&gt;
    &lt;pre&gt;&lt;code&gt;A 서버
```

│
│ TCP 9000
▼
송신측 망연계 서버 또는 에이전트 수신 포트
│
│ 망연계 내부 전송 채널
▼
수신측 망연계 서버
│
│ TCP 22 또는 제품 전용 포트
▼
C 서버&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt;

```
  &lt;p&gt;이 경우 검토해야 할 정책은 다음과 같습니다.&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;A 서버에서 송신측 망연계 시스템으로 연결하는 정책&lt;/li&gt;
    &lt;li&gt;송신측과 수신측 망연계 구성요소 사이의 제품 전용 정책&lt;/li&gt;
    &lt;li&gt;수신측 망연계 시스템에서 C 서버로 파일을 전달하는 정책&lt;/li&gt;
    &lt;li&gt;필요한 경우 응답 트래픽과 상태 기반 방화벽 정책&lt;/li&gt;
  &lt;/ol&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;망연계 포트를 임의로 9000번과 같이 가정하면 안 됩니다.&lt;/strong&gt;
      제품과 구성 방식에 따라 에이전트 포트, 관리 포트, 전송 포트, SFTP 포트 또는 별도의 데이터 채널이 사용될 수 있습니다.
      실제 포트는 망연계 솔루션의 구성 정보와 제조사 문서를 기준으로 확인해야 합니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;p&gt;
    또한 수신측 망연계 시스템이 C 서버의 로컬 디렉터리에 직접 파일을 저장하는 구조라면
    B → C TCP 연결 자체가 없을 수도 있습니다.
    반대로 SFTP, FTPS, SMB, NFS 또는 전용 에이전트 방식으로 전달한다면 해당 프로토콜에 필요한 포트를 허용해야 합니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;5. 올바른 nc 테스트 방법&lt;/h2&gt;

  &lt;p&gt;
    &lt;code&gt;nc&lt;/code&gt;는 파일전송 망연계 전체를 한 번에 검증하는 명령이 아닙니다.
    다만 실제 TCP 연결이 생성되는 각 구간의 네트워크 연결성을 확인하는 용도로는 사용할 수 있습니다.
  &lt;/p&gt;

  &lt;h3&gt;5.1 A 서버에서 확인할 항목&lt;/h3&gt;

  &lt;p&gt;A 서버가 실제로 접속하는 대상이 B 망연계 서버라면 다음과 같이 테스트합니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv -w 3 B_IP 망연계_수신_포트&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;여러 포트를 확인해야 한다면 포트별로 명확하게 실행합니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv -w 3 B_IP 9000
```

nc -zv -w 3 B_IP 9443&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;단, 에이전트가 자체 통신 방식을 사용하거나 TLS 인증을 요구한다면 nc 성공은 TCP 연결만 확인할 뿐, 정상적인 망연계 통신까지 보장하지 않습니다.&lt;/p&gt;

  &lt;h3&gt;5.2 B 또는 수신측 망연계 서버에서 확인할 항목&lt;/h3&gt;

  &lt;p&gt;수신측 망연계 시스템이 C 서버의 특정 서비스로 연결한다면 해당 구간을 테스트합니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv -w 3 C_IP 실제_수신_포트&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;예를 들어 수신측 망연계 서버가 C 서버의 SFTP 서비스로 파일을 전달한다면 다음과 같이 확인할 수 있습니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv -w 3 C_IP 22&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    반면 C 서버에 망연계 수신 에이전트가 설치되어 있고 전용 포트를 사용한다면,
    SSH 22번이 아니라 해당 에이전트의 실제 Listen 포트를 확인해야 합니다.
  &lt;/p&gt;

  &lt;h3&gt;5.3 C 서버에서 확인할 항목&lt;/h3&gt;

  &lt;p&gt;Linux 서버에서는 다음 명령으로 실제 서비스가 대기 중인지 확인할 수 있습니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;ss -lntp
```

ss -lntp | grep ':포트번호'&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;UDP 서비스라면 다음과 같이 확인합니다.&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;ss -lnup
```

ss -lnup | grep ':포트번호'&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    서비스가 특정 인터페이스에만 바인딩되어 있는지도 확인해야 합니다.
    예를 들어 &lt;code&gt;127.0.0.1:9000&lt;/code&gt;으로만 Listen 중이라면 외부 서버에서는 접속할 수 없습니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;6. nc 결과 메시지로 원인 구분하기&lt;/h2&gt;

  &lt;p&gt;
    다음 해석은 해당 목적지까지 직접 TCP 연결을 시도하는 구조에서만 유효합니다.
    파일전송 망연계에서 A 서버가 C 서버를 직접 테스트한 결과에는 그대로 적용하기 어렵습니다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;nc 오류 메시지별 일반적인 의미&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;결과&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;일반적인 의미&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;주요 확인 항목&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;succeeded&lt;/code&gt; 또는 &lt;code&gt;open&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;TCP 연결이 성립됨&lt;/td&gt;
          &lt;td&gt;애플리케이션 인증, 프로토콜, 전송 정책 별도 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Connection refused&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;대상 호스트에서 연결 거부 응답을 반환함&lt;/td&gt;
          &lt;td&gt;서비스 미기동, 포트 미사용, 로컬 방화벽 REJECT&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;timed out&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;정해진 시간 안에 응답을 받지 못함&lt;/td&gt;
          &lt;td&gt;방화벽 DROP, 라우팅, ACL, 보안 장비, 반환 경로&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;No route to host&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;경로가 없거나 네트워크 계층에서 도달 불가 오류가 반환됨&lt;/td&gt;
          &lt;td&gt;라우팅 테이블, 게이트웨이, 인터페이스, ICMP 오류&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Network is unreachable&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;목적지 네트워크로 사용할 경로가 없음&lt;/td&gt;
          &lt;td&gt;정적 라우팅, 기본 게이트웨이, 네트워크 설정&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Name or service not known&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;호스트 이름 또는 서비스 이름 해석 실패&lt;/td&gt;
          &lt;td&gt;DNS, &lt;code&gt;/etc/hosts&lt;/code&gt;, 명령어 오타&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div class=&quot;info-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;Connection refused가 항상 C 서버까지 정상 도달했다는 뜻은 아닙니다.&lt;/strong&gt;
      중간 방화벽이나 보안 장비가 TCP RST 또는 REJECT 응답을 반환하는 구성도 있으므로,
      패킷 캡처와 방화벽 로그를 함께 확인해야 정확한 발생 지점을 판단할 수 있습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;7. 파일전송 망연계에서 실제로 확인해야 할 항목&lt;/h2&gt;

  &lt;h3&gt;7.1 A 서버의 송신 에이전트 상태&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;망연계 송신 에이전트 또는 전송 프로그램이 실행 중인지 확인합니다.&lt;/li&gt;
    &lt;li&gt;에이전트가 B 시스템에 정상적으로 로그인하거나 연결되었는지 확인합니다.&lt;/li&gt;
    &lt;li&gt;송신 대상 디렉터리와 파일 권한이 올바른지 확인합니다.&lt;/li&gt;
    &lt;li&gt;전송 파일명, 확장자, 크기 및 패턴이 정책 조건과 일치하는지 확인합니다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.2 망연계 전송 정책&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;A 서버 또는 송신 시스템이 허용된 출발지로 등록되어 있는지 확인합니다.&lt;/li&gt;
    &lt;li&gt;C 서버 또는 수신 시스템이 허용된 목적지로 등록되어 있는지 확인합니다.&lt;/li&gt;
    &lt;li&gt;송신 디렉터리와 수신 디렉터리 매핑이 정확한지 확인합니다.&lt;/li&gt;
    &lt;li&gt;파일 확장자, 최대 크기, 전송 시간 및 승인 조건을 확인합니다.&lt;/li&gt;
    &lt;li&gt;악성코드 검사, 개인정보 검사 또는 관리자 승인 단계에서 대기 중인지 확인합니다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.3 B 망연계 시스템 상태&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;송신 측과 수신 측 망연계 서비스가 모두 정상인지 확인합니다.&lt;/li&gt;
    &lt;li&gt;전송 큐에 파일이 적체되어 있는지 확인합니다.&lt;/li&gt;
    &lt;li&gt;디스크 사용량과 임시 저장 공간이 충분한지 확인합니다.&lt;/li&gt;
    &lt;li&gt;라이선스, 인증서 및 내부 연계 채널 상태를 확인합니다.&lt;/li&gt;
    &lt;li&gt;전송 실패, 검사 실패, 정책 불일치 로그를 확인합니다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;7.4 C 서버의 수신 상태&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;수신 에이전트 또는 파일 수신 서비스가 실행 중인지 확인합니다.&lt;/li&gt;
    &lt;li&gt;수신 디렉터리가 존재하고 쓰기 권한이 있는지 확인합니다.&lt;/li&gt;
    &lt;li&gt;디스크 여유 공간과 inode 사용량을 확인합니다.&lt;/li&gt;
    &lt;li&gt;수신 후 파일 소유자와 권한 변경 정책을 확인합니다.&lt;/li&gt;
    &lt;li&gt;파일이 도착했지만 후속 처리 프로그램에서 이동하거나 삭제하지 않았는지 확인합니다.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;8. 가장 정확한 정상 여부 검증 방법&lt;/h2&gt;

  &lt;p&gt;
    파일전송 망연계의 최종 목적은 포트 연결 성공이 아니라 파일을 안전하게 전달하는 것입니다.
    따라서 가장 정확한 검증 방법은 테스트 파일을 이용한 종단 간 전송입니다.
  &lt;/p&gt;

  &lt;h3&gt;8.1 테스트 파일 생성&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;printf 'network-transfer-test\n' &amp;gt; transfer_test.txt
```

sha256sum transfer_test.txt&lt;/code&gt;&lt;/pre&gt;

```
  &lt;h3&gt;8.2 망연계 정책을 통해 파일 전송&lt;/h3&gt;

  &lt;p&gt;
    운영 절차에 따라 송신 디렉터리에 파일을 배치하거나,
    전송 클라이언트에서 등록된 목적지를 선택하여 파일을 전송합니다.
  &lt;/p&gt;

  &lt;h3&gt;8.3 구간별 로그 확인&lt;/h3&gt;

  &lt;ol&gt;
    &lt;li&gt;A 서버 또는 송신 에이전트에서 전송 접수 여부를 확인합니다.&lt;/li&gt;
    &lt;li&gt;B 망연계 시스템에서 파일 수신, 검사, 승인 및 반출 상태를 확인합니다.&lt;/li&gt;
    &lt;li&gt;수신측 망연계 시스템에서 C 서버 전달 성공 여부를 확인합니다.&lt;/li&gt;
    &lt;li&gt;C 서버에서 실제 파일 생성 여부를 확인합니다.&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h3&gt;8.4 C 서버에서 무결성 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;ls -l 수신_디렉터리/transfer_test.txt
```

sha256sum 수신_디렉터리/transfer_test.txt&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    A 서버에서 계산한 SHA-256 값과 C 서버에서 계산한 값이 같으면
    파일 내용이 전송 중 변경되지 않았음을 확인할 수 있습니다.
  &lt;/p&gt;

  &lt;div class=&quot;success-box&quot;&gt;
    &lt;p&gt;
      &lt;strong&gt;권장 성공 기준:&lt;/strong&gt;
      송신 접수 성공, 망연계 정책 처리 성공, 보안 검사 통과, 수신 서버 파일 생성,
      파일 크기 일치 및 해시값 일치까지 확인해야 종단 간 파일전송이 정상이라고 판단할 수 있습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;9. 장애 발생 지점을 단계별로 구분하는 방법&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;파일전송 상태에 따른 장애 구간 추정&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;확인 결과&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;가능성이 높은 구간&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;다음 확인 사항&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;A 서버에서 전송 등록 자체가 실패함&lt;/td&gt;
          &lt;td&gt;A 서버 또는 송신 에이전트&lt;/td&gt;
          &lt;td&gt;프로세스, 권한, 설정, B 연결, 인증 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;A에서 등록됐지만 B에 접수되지 않음&lt;/td&gt;
          &lt;td&gt;A → 송신측 B 구간&lt;/td&gt;
          &lt;td&gt;방화벽, 에이전트 로그, 포트, 인증서 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;B에 접수됐지만 검사 또는 승인에서 정지함&lt;/td&gt;
          &lt;td&gt;망연계 정책 또는 보안 검사&lt;/td&gt;
          &lt;td&gt;확장자, 용량, 승인 상태, 악성코드 검사 결과 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;B에서 전송 완료됐지만 C에 파일이 없음&lt;/td&gt;
          &lt;td&gt;수신측 B → C 구간&lt;/td&gt;
          &lt;td&gt;수신 에이전트, 목적지 경로, 권한, 전달 로그 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;C에 파일은 있으나 내용 또는 크기가 다름&lt;/td&gt;
          &lt;td&gt;전송 후 처리 또는 파일 변환&lt;/td&gt;
          &lt;td&gt;후처리 스크립트, 인코딩, 압축, 덮어쓰기 정책 확인&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;작은 파일은 성공하고 큰 파일만 실패함&lt;/td&gt;
          &lt;td&gt;정책 제한 또는 저장 공간&lt;/td&gt;
          &lt;td&gt;최대 파일 크기, 타임아웃, 디스크 공간, 검사 제한 확인&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;10. traceroute와 ping만으로 판단하면 안 되는 이유&lt;/h2&gt;

  &lt;p&gt;
    &lt;code&gt;traceroute&lt;/code&gt;, &lt;code&gt;tracepath&lt;/code&gt;, &lt;code&gt;ping&lt;/code&gt;은 네트워크 상태를 확인하는 데 도움이 되지만,
    파일전송 망연계의 정상 여부를 직접 증명하지는 못합니다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;ip route get C_IP
```

traceroute C_IP
tracepath C_IP
ping -c 4 C_IP&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;결과를 해석할 때는 다음 사항을 고려해야 합니다.&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;폐쇄망에서는 C 서버 대역으로 가는 라우팅이 처음부터 존재하지 않을 수 있습니다.&lt;/li&gt;
    &lt;li&gt;망연계 시스템은 일반 IP 라우터가 아니므로 traceroute 경로에 B 서버가 표시되지 않을 수 있습니다.&lt;/li&gt;
    &lt;li&gt;중간 장비에서 ICMP를 차단하면 정상 경로도 별표 또는 시간 초과로 표시될 수 있습니다.&lt;/li&gt;
    &lt;li&gt;ping이 실패해도 TCP 기반 망연계 에이전트 통신은 정상일 수 있습니다.&lt;/li&gt;
    &lt;li&gt;ping이 성공해도 파일전송 정책이나 에이전트 오류로 실제 전송은 실패할 수 있습니다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    따라서 이러한 명령은 보조 자료로만 사용하고,
    실제 TCP 세션과 망연계 전송 로그를 기준으로 판단해야 합니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;11. 방화벽 신청서 작성 시 필요한 정보&lt;/h2&gt;

  &lt;p&gt;
    보안팀이나 네트워크팀에 방화벽 오픈을 요청할 때는 단순히
    “A 서버에서 C 서버로 포트를 열어 달라”고 작성하지 않는 것이 좋습니다.
    실제 세션 기준으로 구간을 분리해야 합니다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;방화벽 정책 신청 시 정리할 항목&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;항목&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;작성 내용&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;송신지&lt;/td&gt;
          &lt;td&gt;실제로 TCP 연결을 생성하는 서버 또는 에이전트 IP&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;목적지&lt;/td&gt;
          &lt;td&gt;실제로 연결을 수신하는 망연계 서버 또는 C 서버 IP&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;프로토콜&lt;/td&gt;
          &lt;td&gt;TCP 또는 UDP&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;포트&lt;/td&gt;
          &lt;td&gt;제품 전용 포트, SFTP, HTTPS 등 실제 Listen 포트&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;방향&lt;/td&gt;
          &lt;td&gt;단방향 연결인지 양방향 세션이 필요한지 명시&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;용도&lt;/td&gt;
          &lt;td&gt;파일전송 망연계 에이전트 통신 또는 수신 서버 전달&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;적용 기간&lt;/td&gt;
          &lt;td&gt;상시 또는 작업 기간&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;근거 자료&lt;/td&gt;
          &lt;td&gt;망연계 구성도, 제품 포트 목록, 전송 정책 번호&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div class=&quot;info-box&quot;&gt;
    &lt;p&gt;
      논리적인 업무 흐름은 A → C이더라도 실제 방화벽 정책은
      A → 송신측 망연계 서버, 수신측 망연계 서버 → C처럼 여러 건으로 분리될 수 있습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;12. 운영 환경 점검 명령어&lt;/h2&gt;

  &lt;h3&gt;12.1 A 서버 라우팅 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;ip route
```

ip route get B_IP
ip route get C_IP&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    파일전송 망연계 환경에서는 &lt;code&gt;ip route get C_IP&lt;/code&gt;가 실패하거나 기본 경로로 표시되어도
    그것만으로 망연계 장애라고 판단하지 않습니다.
    A 서버가 실제로 접근해야 하는 B 서버의 경로가 정상인지가 더 중요합니다.
  &lt;/p&gt;

  &lt;h3&gt;12.2 DNS 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;getent hosts B_HOSTNAME
```

getent hosts C_HOSTNAME&lt;/code&gt;&lt;/pre&gt;

```
  &lt;h3&gt;12.3 포트 연결 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;nc -zv -w 3 B_IP 실제_포트&lt;/code&gt;&lt;/pre&gt;

  &lt;h3&gt;12.4 로컬 방화벽 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;sudo nft list ruleset
```

sudo iptables -L -n -v
sudo firewall-cmd --list-all&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    운영체제와 방화벽 구성에 따라 실제 사용하는 명령만 선택해야 합니다.
    조회 명령에도 관리자 권한이 필요할 수 있습니다.
  &lt;/p&gt;

  &lt;h3&gt;12.5 패킷 캡처&lt;/h3&gt;

  &lt;pre&gt;&lt;code&gt;sudo tcpdump -ni any host B_IP and port 실제_포트&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    패킷 캡처를 통해 SYN 패킷 송신 여부, SYN-ACK 또는 RST 수신 여부,
    재전송 발생 여부를 확인할 수 있습니다.
    캡처 파일에는 내부 IP와 통신 정보가 포함될 수 있으므로 보안 정책에 따라 취급해야 합니다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;13. 실무 점검 체크리스트&lt;/h2&gt;

  &lt;div class=&quot;checklist&quot;&gt;
    &lt;ul&gt;
      &lt;li&gt;망연계 방식이 파일전송, 프록시, 릴레이 또는 L3 라우팅 중 무엇인지 확인했는가?&lt;/li&gt;
      &lt;li&gt;B가 단일 서버인지 송신측·수신측으로 분리된 망연계 장비인지 확인했는가?&lt;/li&gt;
      &lt;li&gt;A 서버가 실제로 접속하는 목적지 IP와 포트를 확인했는가?&lt;/li&gt;
      &lt;li&gt;수신측 망연계 시스템이 C 서버로 어떤 방식으로 파일을 전달하는지 확인했는가?&lt;/li&gt;
      &lt;li&gt;A → B 구간의 방화벽과 라우팅이 허용되어 있는가?&lt;/li&gt;
      &lt;li&gt;필요한 경우 수신측 B → C 구간의 방화벽이 허용되어 있는가?&lt;/li&gt;
      &lt;li&gt;망연계 전송 정책에 출발지, 목적지, 경로 및 파일 조건이 등록되어 있는가?&lt;/li&gt;
      &lt;li&gt;송신·수신 에이전트와 관련 서비스가 정상 실행 중인가?&lt;/li&gt;
      &lt;li&gt;전송 큐, 검사 결과, 승인 상태 및 오류 로그를 확인했는가?&lt;/li&gt;
      &lt;li&gt;C 서버의 수신 디렉터리와 쓰기 권한을 확인했는가?&lt;/li&gt;
      &lt;li&gt;테스트 파일을 전송하고 크기와 SHA-256 해시값을 비교했는가?&lt;/li&gt;
      &lt;li&gt;A → C 직접 nc 실패를 망연계 장애로 잘못 판단하고 있지 않은가?&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;14. 자주 묻는 질문&lt;/h2&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;A 서버에서 C 서버의 22번 포트가 열려 있어야 하나요?&lt;/h3&gt;
    &lt;p&gt;
      반드시 그렇지는 않습니다.
      A 서버가 C 서버로 직접 SFTP 연결을 생성하는 구조가 아니라면 A → C의 22번 포트는 필요하지 않습니다.
      수신측 망연계 서버가 C 서버로 SFTP 전송을 수행하는 경우에는 수신측 망연계 서버 → C 서버의 22번 포트가 필요할 수 있습니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;A 서버에서 C 서버로 방화벽을 허용하면 nc가 성공하나요?&lt;/h3&gt;
    &lt;p&gt;
      라우팅과 직접 TCP 경로가 없는 파일전송 망연계 구조라면 방화벽 정책만 추가해도 성공하지 않을 수 있습니다.
      직접 통신을 허용하는 것은 망분리 정책과 보안 설계에 위배될 수도 있으므로 임의로 구성하면 안 됩니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;A 서버에서 B 서버로 nc가 성공하면 파일전송도 정상인가요?&lt;/h3&gt;
    &lt;p&gt;
      아닙니다.
      nc 성공은 해당 TCP 포트까지 연결할 수 있다는 의미일 뿐입니다.
      인증, 암호화, 전송 정책, 파일 검사, 승인, 수신 경로 및 권한 문제는 별도로 확인해야 합니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;B 서버에서 C 서버로 nc가 실패하면 무엇을 확인해야 하나요?&lt;/h3&gt;
    &lt;p&gt;
      먼저 B가 실제로 C 서버로 TCP 연결을 생성하는 구성인지 확인해야 합니다.
      실제 연결이 필요한 구조라면 B의 라우팅, 중간 방화벽, C 서버의 Listen 상태,
      C 서버 로컬 방화벽 및 반환 경로를 확인합니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;파일전송 망연계의 최종 성공 기준은 무엇인가요?&lt;/h3&gt;
    &lt;p&gt;
      송신 접수, 보안 검사, 정책 처리, 수신 서버 파일 생성 및 파일 무결성 확인까지 완료되어야 합니다.
      포트 테스트 하나만으로는 정상 여부를 확정할 수 없습니다.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;결론&lt;/h2&gt;

  &lt;p&gt;
    파일전송 망연계 환경에서 A 서버와 C 서버는 논리적으로 연결되어 있지만,
    일반적인 네트워크 관점에서 직접 TCP 세션을 생성하지 않는 경우가 대부분입니다.
    따라서 A 서버에서 실행한 &lt;code&gt;nc -zv C_IP PORT&lt;/code&gt;가 실패하더라도
    그 결과만으로 방화벽이나 망연계 장애라고 판단할 수 없습니다.
  &lt;/p&gt;

  &lt;p&gt;
    점검은 A → B, 망연계 내부 구간, 수신측 망연계 시스템 → C처럼
    실제 TCP 세션이 생성되는 구간별로 수행해야 합니다.
    이후 망연계 전송 정책, 에이전트 상태, 전송 큐, 보안 검사 결과,
    C 서버의 수신 경로와 파일 권한을 함께 확인해야 합니다.
  &lt;/p&gt;

  &lt;p&gt;
    최종적으로는 테스트 파일을 실제 망연계 정책으로 전송한 뒤,
    C 서버에서 파일 도착 여부와 SHA-256 해시값까지 비교하는 방식이 가장 정확합니다.
  &lt;/p&gt;
&lt;/section&gt;
```

  &lt;/main&gt;

  &lt;footer&gt;
    &lt;ul class=&quot;tag-list&quot; aria-label=&quot;관련 태그&quot;&gt;
      &lt;li&gt;폐쇄망&lt;/li&gt;
      &lt;li&gt;망연계&lt;/li&gt;
      &lt;li&gt;파일전송 망연계&lt;/li&gt;
      &lt;li&gt;방화벽&lt;/li&gt;
      &lt;li&gt;nc 명령어&lt;/li&gt;
      &lt;li&gt;netcat&lt;/li&gt;
      &lt;li&gt;네트워크 점검&lt;/li&gt;
      &lt;li&gt;리눅스 서버&lt;/li&gt;
      &lt;li&gt;포트 테스트&lt;/li&gt;
      &lt;li&gt;망분리&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/footer&gt;
&lt;/article&gt;</description>
      <category>지식 공유/ETC</category>
      <category>nc명령어</category>
      <category>netcat</category>
      <category>네트워크점검</category>
      <category>리눅스서버</category>
      <category>망분리</category>
      <category>망연계</category>
      <category>방화벽</category>
      <category>파일전송망연계</category>
      <category>폐쇄망</category>
      <category>포트테스트</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/598</guid>
      <comments>https://togethergrow.tistory.com/entry/%ED%8F%90%EC%87%84%EB%A7%9D-%ED%8C%8C%EC%9D%BC%EC%A0%84%EC%86%A1-%EB%A7%9D%EC%97%B0%EA%B3%84-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-A-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-C-%EC%84%9C%EB%B2%84%EB%A1%9C-nc-%ED%85%8C%EC%8A%A4%ED%8A%B8#entry598comment</comments>
      <pubDate>Mon, 3 Aug 2026 14:26:40 +0900</pubDate>
    </item>
    <item>
      <title>SUSE Linux Zypper 명령어 사용법: 패키지 설치, RPM 다운로드, 저장소 관리</title>
      <link>https://togethergrow.tistory.com/entry/SUSE-Linux-Zypper-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%84%A4%EC%B9%98-RPM-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EC%A0%80%EC%9E%A5%EC%86%8C-%EA%B4%80%EB%A6%AC</link>
      <description>&lt;style&gt;
  .tistory-tech-post {
    max-width: 860px;
    margin: 0 auto;
    color: #222;
    font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Noto Sans KR&quot;, Arial, sans-serif;
    font-size: 16px;
    line-height: 1.75;
    word-break: keep-all;
  }

  .tistory-tech-post h1,
  .tistory-tech-post h2,
  .tistory-tech-post h3 {
    line-height: 1.4;
    word-break: keep-all;
  }

  .tistory-tech-post h1 {
    margin: 0 0 24px;
    font-size: 2rem;
  }

  .tistory-tech-post h2 {
    margin: 48px 0 16px;
    padding-bottom: 10px;
    border-bottom: 2px solid #222;
    font-size: 1.55rem;
  }

  .tistory-tech-post h3 {
    margin: 32px 0 12px;
    font-size: 1.2rem;
  }

  .tistory-tech-post p {
    margin: 12px 0;
  }

  .tistory-tech-post pre {
    margin: 16px 0;
    padding: 18px;
    overflow-x: auto;
    border-radius: 8px;
    background: #1f2328;
    color: #f6f8fa;
    font-size: 14px;
    line-height: 1.65;
    white-space: pre;
  }

  .tistory-tech-post code {
    font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
  }

  .tistory-tech-post :not(pre) &gt; code {
    padding: 2px 6px;
    border-radius: 4px;
    background: #f1f3f5;
    color: #c7254e;
    font-size: 0.92em;
  }

  .tistory-tech-post .summary-box,
  .tistory-tech-post .note-box,
  .tistory-tech-post .warning-box {
    margin: 22px 0;
    padding: 18px 20px;
    border-radius: 8px;
  }

  .tistory-tech-post .summary-box {
    border-left: 5px solid #2563eb;
    background: #eff6ff;
  }

  .tistory-tech-post .note-box {
    border-left: 5px solid #64748b;
    background: #f8fafc;
  }

  .tistory-tech-post .warning-box {
    border-left: 5px solid #d97706;
    background: #fffbeb;
  }

  .tistory-tech-post .table-wrap {
    margin: 20px 0;
    overflow-x: auto;
  }

  .tistory-tech-post table {
    width: 100%;
    min-width: 680px;
    border-collapse: collapse;
    font-size: 15px;
  }

  .tistory-tech-post caption {
    margin-bottom: 10px;
    text-align: left;
    font-weight: 700;
  }

  .tistory-tech-post th,
  .tistory-tech-post td {
    padding: 12px 14px;
    border: 1px solid #d7dce1;
    text-align: left;
    vertical-align: top;
  }

  .tistory-tech-post th {
    background: #f3f4f6;
  }

  .tistory-tech-post ul {
    margin: 12px 0;
    padding-left: 24px;
  }

  .tistory-tech-post li {
    margin: 7px 0;
  }

  @media (max-width: 640px) {
    .tistory-tech-post {
      font-size: 15px;
    }

    .tistory-tech-post h1 {
      font-size: 1.7rem;
    }

    .tistory-tech-post h2 {
      font-size: 1.35rem;
    }

    .tistory-tech-post pre {
      padding: 15px;
      font-size: 13px;
    }
  }
&lt;/style&gt;

&lt;main class=&quot;tistory-tech-post&quot;&gt;
  &lt;article&gt;
    &lt;header&gt;
      &lt;h1&gt;SUSE Linux Zypper 명령어 사용법: 패키지 설치, RPM 다운로드, 저장소 관리&lt;/h1&gt;

```
  &lt;p&gt;
    &lt;strong&gt;Zypper&lt;/strong&gt;는 SUSE Linux Enterprise Server와 openSUSE에서 사용하는 명령줄 패키지 관리자다.
    패키지 설치와 제거뿐 아니라 의존성 해결, 소프트웨어 저장소 새로고침, 패키지 검색과 RPM 다운로드 작업도 수행할 수 있다.
  &lt;/p&gt;

  &lt;div class=&quot;summary-box&quot;&gt;
    &lt;strong&gt;핵심 요약&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;패키지 설치: &lt;code&gt;zypper install&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;설치된 패키지 검색: &lt;code&gt;zypper search -i&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;라이브러리 제공 패키지 검색: &lt;code&gt;zypper search --provides&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;저장소 목록 확인: &lt;code&gt;zypper repos&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;저장소 메타데이터 갱신: &lt;code&gt;zypper refresh&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;section&gt;
  &lt;h2&gt;Zypper 기본 명령어 구조&lt;/h2&gt;

  &lt;p&gt;Zypper 명령어는 일반적으로 다음 구조로 실행한다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper [전역 옵션] &amp;lt;하위 명령어&amp;gt; [명령어 옵션] [인수]&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    패키지 설치나 저장소 갱신처럼 시스템을 변경하는 명령은 일반 사용자 권한으로 실행할 수 없으므로
    일반적으로 &lt;code&gt;sudo&lt;/code&gt;를 함께 사용한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install &amp;lt;패키지명&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Zypper 주요 명령어 한눈에 보기&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;SUSE Linux에서 자주 사용하는 Zypper 명령어&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;작업&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;명령어&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;설명&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;패키지 설치&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper install 패키지명&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;활성화된 저장소에서 패키지와 필요한 의존성을 설치한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;로컬 RPM 설치&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper install ./파일.rpm&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;현재 디렉터리에 있는 RPM 파일을 의존성과 함께 설치한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;전체 파일 선다운로드&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper install --download-in-advance ./파일.rpm&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;설치 트랜잭션에 필요한 패키지를 모두 받은 후 설치를 시작한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;RPM 다운로드&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper download 패키지명&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;패키지를 설치하지 않고 RPM 파일만 다운로드한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;설치된 패키지 검색&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper search -i 패키지명&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;검색 결과를 현재 설치된 패키지로 제한한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;라이브러리 제공 패키지 검색&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper search --provides '라이브러리명'&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;특정 파일이나 기능을 제공하는 패키지를 검색한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;저장소 목록 확인&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper repos&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;시스템에 등록된 소프트웨어 저장소를 표시한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;저장소 새로고침&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper refresh&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;활성화된 저장소의 패키지 메타데이터를 갱신한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;명령어 도움말&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zypper help download&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;지정한 하위 명령어의 옵션과 사용법을 출력한다.&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;패키지 설치&lt;/h2&gt;

  &lt;h3&gt;저장소에서 패키지 설치&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install &amp;lt;패키지명&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    활성화된 저장소에서 지정한 패키지를 검색하고, 필요한 의존성 패키지를 함께 설치한다.
    &lt;code&gt;install&lt;/code&gt;은 &lt;code&gt;in&lt;/code&gt;으로 줄여서 사용할 수도 있다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install vim
```

# 단축 명령어

sudo zypper in vim&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;여러 패키지를 한 번에 설치하려면 패키지 이름을 공백으로 구분한다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install vim curl wget&lt;/code&gt;&lt;/pre&gt;

  &lt;div class=&quot;note-box&quot;&gt;
    패키지 설치 전에 저장소 정보를 최신 상태로 맞추려면
    &lt;code&gt;sudo zypper refresh&lt;/code&gt;를 먼저 실행하는 것이 좋다.
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;로컬 RPM 파일 설치&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install ./&amp;lt;패키지명&amp;gt;.rpm&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    현재 디렉터리에 있는 RPM 파일을 설치한다.
    파일명 앞에 &lt;code&gt;./&lt;/code&gt; 또는 절대 경로를 지정하면 Zypper가 패키지 이름이 아닌 로컬 파일로 인식한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install ./example-package.rpm
```

# 절대 경로 사용

sudo zypper install /tmp/example-package.rpm&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    &lt;code&gt;rpm -ivh&lt;/code&gt;와 달리 Zypper는 등록된 저장소를 이용해 부족한 의존성 패키지를 해결할 수 있다.
    다만 필요한 의존성 패키지가 활성화된 저장소에 존재하지 않으면 설치가 실패한다.
  &lt;/p&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    인터넷에서 받은 RPM을 설치하기 전에는 배포처, 패키지 서명, 대상 SUSE 버전과 CPU 아키텍처를 확인해야 한다.
    다른 배포판용 RPM은 의존성 충돌이나 시스템 파일 손상을 유발할 수 있다.
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;필요한 패키지를 먼저 다운로드한 후 설치&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install --download-in-advance ./&amp;lt;패키지명&amp;gt;.rpm&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    &lt;code&gt;--download-in-advance&lt;/code&gt; 옵션은 설치 트랜잭션에 필요한 RPM 파일을 모두 다운로드한 다음
    실제 설치 작업을 시작하도록 지정한다.
  &lt;/p&gt;

  &lt;p&gt;
    네트워크 연결이 불안정한 환경에서는 일부 패키지를 설치한 뒤 나머지 파일 다운로드에 실패하는 상황을 줄이는 데 도움이 된다.
    전체 파일이 준비되므로 설치 전에 파일 충돌 검사도 더 정확하게 수행할 수 있다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install --download-in-advance nginx&lt;/code&gt;&lt;/pre&gt;

  &lt;div class=&quot;note-box&quot;&gt;
    현재 Zypper에서는 &lt;code&gt;--download-in-advance&lt;/code&gt;가 기본 다운로드·설치 방식으로 안내된다.
    명시적으로 옵션을 적으면 스크립트의 실행 의도를 더 분명하게 표현할 수 있다.
    :contentReference[oaicite:0]{index=0}
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;RPM 파일만 다운로드&lt;/h2&gt;

  &lt;h3&gt;패키지 하나 다운로드&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper download &amp;lt;패키지명&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    패키지를 시스템에 설치하지 않고 RPM 파일만 내려받는다.
    오프라인 서버에 전달하거나 패키지 파일을 별도로 분석해야 할 때 사용할 수 있다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper download curl&lt;/code&gt;&lt;/pre&gt;

  &lt;h3&gt;여러 패키지 한 번에 다운로드&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper download &amp;lt;패키지1&amp;gt; &amp;lt;패키지2&amp;gt; &amp;lt;패키지3&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;다운로드할 패키지 이름을 공백으로 구분해 여러 개를 지정할 수 있다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper download curl wget vim&lt;/code&gt;&lt;/pre&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    &lt;code&gt;zypper download&lt;/code&gt;는 지정한 패키지의 RPM 파일을 받는 용도다.
    해당 패키지를 다른 시스템에 설치할 때 필요한 모든 의존성 RPM까지 자동으로 완전하게 수집한다는 의미는 아니다.
    오프라인 설치 자료를 준비할 때는 의존성 포함 여부를 별도로 확인해야 한다.
  &lt;/div&gt;

  &lt;p&gt;
    시스템에서 &lt;code&gt;download&lt;/code&gt; 명령을 인식하지 못한다면 현재 Zypper의 하위 명령어 목록과
    설치된 확장 기능을 확인한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper help
```

zypper help download&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

```
&lt;section&gt;
  &lt;h2&gt;설치된 패키지 검색&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper search -i &amp;lt;패키지명&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    &lt;code&gt;search&lt;/code&gt;는 저장소에서 검색 가능한 패키지를 조회하며,
    &lt;code&gt;-i&lt;/code&gt; 또는 &lt;code&gt;--installed-only&lt;/code&gt; 옵션을 사용하면 설치된 패키지만 표시한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper search -i curl
```

# search 단축 명령어 사용

zypper se -i curl&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;패키지 이름을 정확히 모를 때는 일부 문자열만 입력해 검색할 수 있다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper se -i python&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    검색 결과의 상태 열에서는 사용자가 직접 설치한 패키지와 의존성으로 자동 설치된 패키지가
    서로 다른 상태 값으로 표시될 수 있다. :contentReference[oaicite:1]{index=1}
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;특정 라이브러리를 제공하는 패키지 검색&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper search --provides '&amp;lt;라이브러리명&amp;gt;'&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    프로그램 실행 중 공유 라이브러리나 특정 파일이 없다는 오류가 발생했을 때,
    해당 파일 또는 기능을 제공하는 패키지를 찾는 데 사용한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper search --provides 'libssl.so.3'
```

zypper search --provides '/usr/bin/curl'&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    검색 문자열에 &lt;code&gt;*&lt;/code&gt; 같은 셸 특수문자가 들어갈 수 있으므로
    작은따옴표로 감싸는 것이 안전하다.
  &lt;/p&gt;

  &lt;div class=&quot;note-box&quot;&gt;
    SUSE Linux 버전이나 활성화된 모듈이 다르면 같은 라이브러리를 제공하는 패키지 이름도 달라질 수 있다.
    검색 결과가 없다면 먼저 저장소를 새로고침하고 필요한 제품 모듈이나 저장소가 활성화되어 있는지 확인한다.
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;저장소 목록 확인&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper lr&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    &lt;code&gt;lr&lt;/code&gt;은 &lt;code&gt;repos&lt;/code&gt; 명령의 단축형이다.
    등록된 저장소의 번호, 별칭, 이름, 활성화 상태와 자동 새로고침 여부를 확인할 수 있다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper repos
```

# 저장소 URL과 우선순위 등 상세 정보 표시

zypper repos --details

# 단축 옵션

zypper lr -d&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    저장소 번호는 저장소를 추가하거나 삭제한 뒤 변경될 수 있으므로,
    자동화 스크립트에서는 번호보다 고유한 저장소 별칭을 사용하는 것이 안전하다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;저장소 새로고침&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper ref&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    &lt;code&gt;ref&lt;/code&gt;는 &lt;code&gt;refresh&lt;/code&gt;의 단축형이다.
    활성화된 저장소에서 최신 패키지 목록과 메타데이터를 내려받아 로컬 캐시를 갱신한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper refresh&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    패키지를 찾지 못하거나 저장소의 패키지 버전이 실제 서버와 맞지 않을 때 먼저 실행할 수 있다.
    저장소 메타데이터를 강제로 다시 내려받으려면 &lt;code&gt;--force&lt;/code&gt; 옵션을 사용한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper refresh --force
```

# 단축형

sudo zypper ref -f&lt;/code&gt;&lt;/pre&gt;

```
  &lt;div class=&quot;note-box&quot;&gt;
    일부 Zypper 명령은 필요한 경우 저장소를 자동으로 새로고침한다.
    따라서 모든 설치 작업 전에 반드시 수동으로 실행해야 하는 것은 아니다.
    :contentReference[oaicite:2]{index=2}
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Download 명령어 도움말 확인&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper help download&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    특정 하위 명령어에서 지원하는 옵션, 인수와 사용 예시를 확인한다.
    설치된 Zypper 버전에 따라 지원되는 옵션이 다를 수 있으므로 운영 서버에서는 로컬 도움말을 우선 확인하는 것이 정확하다.
  &lt;/p&gt;

  &lt;p&gt;동일한 방식으로 다른 명령어의 도움말도 확인할 수 있다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zypper help install
```

zypper help search
zypper help repos
zypper help refresh&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

```
&lt;section&gt;
  &lt;h2&gt;실무에서 자주 사용하는 실행 순서&lt;/h2&gt;

  &lt;p&gt;저장소를 갱신한 후 패키지를 검색하고 설치하는 기본 흐름은 다음과 같다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 저장소 상태 확인
```

zypper lr -d

# 2. 저장소 메타데이터 새로고침

sudo zypper ref

# 3. 패키지 검색

zypper se nginx

# 4. 패키지 설치

sudo zypper in nginx

# 5. 설치 여부 확인

zypper se -i nginx&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;로컬 RPM을 설치해야 하는 경우에는 다음과 같이 진행할 수 있다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# RPM 파일 확인
```

ls -lh ./example-package.rpm

# 전체 패키지를 먼저 다운로드한 후 설치

sudo zypper install --download-in-advance ./example-package.rpm

# 설치 결과 검색

zypper se -i example-package&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

```
&lt;section&gt;
  &lt;h2&gt;명령어 실행 시 주의사항&lt;/h2&gt;

  &lt;ul&gt;
    &lt;li&gt;패키지 설치와 저장소 새로고침은 일반적으로 관리자 권한이 필요하다.&lt;/li&gt;
    &lt;li&gt;운영 서버에서는 설치 전 변경 대상 패키지와 의존성 목록을 확인한다.&lt;/li&gt;
    &lt;li&gt;외부 RPM은 배포처, GPG 서명, SUSE 버전과 아키텍처 호환성을 확인한다.&lt;/li&gt;
    &lt;li&gt;저장소 우선순위와 공급업체가 다르면 예기치 않은 패키지 교체가 발생할 수 있다.&lt;/li&gt;
    &lt;li&gt;트랜잭션 기반 읽기 전용 시스템에서는 일반 Zypper 대신 별도의 업데이트 방식이 적용될 수 있다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;실제 설치를 수행하지 않고 결과를 미리 확인하려면 지원되는 환경에서 &lt;code&gt;--dry-run&lt;/code&gt;을 활용한다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo zypper install --dry-run &amp;lt;패키지명&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;정리&lt;/h2&gt;

  &lt;p&gt;
    SUSE Linux에서 Zypper를 사용하면 저장소 패키지와 로컬 RPM을 동일한 방식으로 관리할 수 있다.
    일반적인 작업에서는 &lt;code&gt;zypper ref&lt;/code&gt;로 저장소 정보를 갱신하고,
    &lt;code&gt;zypper se&lt;/code&gt;로 패키지를 검색한 다음 &lt;code&gt;zypper in&lt;/code&gt;으로 설치한다.
  &lt;/p&gt;

  &lt;p&gt;
    RPM 파일만 필요할 때는 &lt;code&gt;zypper download&lt;/code&gt;를 사용하고,
    특정 라이브러리를 제공하는 패키지를 찾을 때는 &lt;code&gt;zypper search --provides&lt;/code&gt;를 사용하면 된다.
    옵션 지원 여부가 불확실한 경우에는 현재 시스템의 &lt;code&gt;zypper help&lt;/code&gt; 결과를 기준으로 판단해야 한다.
  &lt;/p&gt;
&lt;/section&gt;
```

  &lt;/article&gt;
&lt;/main&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;SUSE Linux Zypper 명령어 사용법: 패키지 설치, RPM 다운로드, 저장소 관리&quot;,
  &quot;description&quot;: &quot;SUSE Linux에서 Zypper를 이용해 패키지와 로컬 RPM을 설치하고, RPM 다운로드, 설치된 패키지 검색, 라이브러리 제공 패키지 검색, 저장소 조회와 새로고침을 수행하는 방법을 설명합니다.&quot;,
  &quot;inLanguage&quot;: &quot;ko-KR&quot;,
  &quot;keywords&quot;: [
    &quot;SUSE Linux&quot;,
    &quot;Zypper&quot;,
    &quot;Zypper 명령어&quot;,
    &quot;RPM 설치&quot;,
    &quot;패키지 관리&quot;,
    &quot;SLES&quot;,
    &quot;openSUSE&quot;
  ],
  &quot;articleSection&quot;: &quot;Linux&quot;,
  &quot;about&quot;: {
    &quot;@type&quot;: &quot;SoftwareApplication&quot;,
    &quot;name&quot;: &quot;Zypper&quot;,
    &quot;applicationCategory&quot;: &quot;Package Manager&quot;,
    &quot;operatingSystem&quot;: &quot;SUSE Linux Enterprise, openSUSE&quot;
  }
}
&lt;/script&gt;

&lt;!--
SEO 제목: SUSE Linux Zypper 명령어 사용법: 설치·검색·RPM 다운로드
메타 설명: SUSE Linux에서 Zypper로 패키지와 로컬 RPM을 설치하고, RPM 다운로드, 설치 패키지 검색, 라이브러리 제공 패키지 조회, 저장소 새로고침을 수행하는 방법을 정리합니다.
권장 슬러그: suse-linux-zypper-commands
태그: SUSE Linux, Zypper, SLES, openSUSE, RPM, 리눅스 패키지 관리, 서버 관리
--&gt;</description>
      <category>지식 공유/Server</category>
      <category>opensuse</category>
      <category>RPM</category>
      <category>SLES</category>
      <category>SuSE Linux</category>
      <category>Zypper</category>
      <category>리눅스 패키지 관리</category>
      <category>서버 관리</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/597</guid>
      <comments>https://togethergrow.tistory.com/entry/SUSE-Linux-Zypper-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%84%A4%EC%B9%98-RPM-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EC%A0%80%EC%9E%A5%EC%86%8C-%EA%B4%80%EB%A6%AC#entry597comment</comments>
      <pubDate>Mon, 27 Jul 2026 17:29:09 +0900</pubDate>
    </item>
    <item>
      <title>오픈 웨이트 AI는 Kubernetes의 순간을 맞고 있는가</title>
      <link>https://togethergrow.tistory.com/entry/%EC%98%A4%ED%94%88-%EC%9B%A8%EC%9D%B4%ED%8A%B8-AI%EB%8A%94-Kubernetes%EC%9D%98-%EC%88%9C%EA%B0%84%EC%9D%84-%EB%A7%9E%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B0%80</link>
      <description>&lt;article class=&quot;tistory-article&quot;&gt;
  &lt;header&gt;
    &lt;p&gt;&lt;strong&gt;핵심 요약&lt;/strong&gt;&lt;/p&gt;
    &lt;h1&gt;오픈 웨이트 AI는 Kubernetes의 순간을 맞고 있는가&lt;/h1&gt;
    &lt;p&gt;
      충분한 성능과 이식성을 갖춘 오픈 웨이트 모델은 단순한 다운로드 파일을 넘어,
      모델 서빙·미세조정·에이전트 런타임·평가·관측성 도구가 함께 성장하는 플랫폼의 기반이 되고 있다.
      Kubernetes가 공통 인터페이스를 중심으로 클라우드 네이티브 생태계를 결집한 것처럼,
      AI에서도 단일 모델 공급자가 독점하기 어려운 개방형 프로덕션 스택이 형성될 가능성이 커지고 있다.
    &lt;/p&gt;
  &lt;/header&gt;

  &lt;nav aria-label=&quot;목차&quot;&gt;
    &lt;h2&gt;목차&lt;/h2&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#kubernetes-moment&quot;&gt;Kubernetes의 순간이 의미하는 것&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#open-weight-open-source&quot;&gt;오픈 웨이트와 오픈 소스 AI의 차이&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#platform-stack&quot;&gt;셀프 호스팅에서 모델 플랫폼으로&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#performance-gap&quot;&gt;최전선 모델과 좁아지는 성능 격차&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#limitations&quot;&gt;Kubernetes 비유의 한계&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#china-ban&quot;&gt;중국산 모델 제한이 미국에 미칠 영향&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#competition-strategy&quot;&gt;미국이 경쟁할 네 가지 방법&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#conclusion&quot;&gt;개방형 AI 생태계의 승자는 누구인가&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/nav&gt;

  &lt;main&gt;
    &lt;section id=&quot;kubernetes-moment&quot;&gt;
      &lt;h2&gt;Kubernetes의 순간이 의미하는 것&lt;/h2&gt;

```
  &lt;p&gt;
    “오픈 웨이트 AI가 Kubernetes의 순간을 맞고 있다”는 표현은 두 기술이 동일하다는 뜻이 아니다.
    핵심은 &lt;strong&gt;충분히 유용하고 이식 가능한 기반 기술이 등장하면 원 제작자가 직접 만들 수 있는 범위를 넘어
    주변 생태계의 혁신을 끌어들인다&lt;/strong&gt;는 데 있다.
  &lt;/p&gt;

  &lt;p&gt;
    Mesosphere는 Apache Mesos를 기반으로 클라우드 네이티브 소프트웨어를 개발하고,
    그 주변에 DC/OS를 구축해 지원과 기업용 기능을 포함한 배포판으로 상용화했다.
    그러나 이후 Kubernetes가 더 넓은 클라우드 네이티브 커뮤니티를 결집하면서
    혁신의 중심은 점차 Kubernetes로 이동했다.
  &lt;/p&gt;

  &lt;p&gt;
    세계 각지의 분산 시스템·인프라 엔지니어가 Kubernetes 생태계에 참여하자
    네트워킹, 스토리지, 관측성, 배포 자동화, 정책 엔진 등 프로덕션 운영에 필요한 구성요소가 빠르게 개발됐다.
    클라우드 사업자와 Red Hat, Rancher를 비롯한 기업들은 핵심 프로젝트를 독점하기보다
    통합, 관리 기능, 운영 자동화, 기술 지원을 중심으로 사업을 구축했다.
  &lt;/p&gt;

  &lt;p&gt;
    Kubernetes의 성공은 단순히 소스 저장소를 공개했기 때문에 발생한 것이 아니다.
    공통 인터페이스, 이식성, 공급업체 중립성, 예측 가능한 거버넌스가 결합되면서
    여러 참여자가 장기적으로 제품과 서비스를 개발할 수 있는 신뢰가 형성됐다.
  &lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;
      개방형 플랫폼이 산업의 중심이 되면 단일 공급자는 생태계 전체가 만들어 내는
      결합된 혁신 속도를 따라가기 어려워진다.
    &lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/section&gt;

&lt;section id=&quot;open-weight-open-source&quot;&gt;
  &lt;h2&gt;오픈 웨이트와 오픈 소스 AI의 차이&lt;/h2&gt;

  &lt;p&gt;
    공개된 AI 모델을 모두 오픈 소스라고 부르는 경우가 많지만,
    실제로는 &lt;strong&gt;오픈 웨이트 모델&lt;/strong&gt;인 경우가 대부분이다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;오픈 웨이트 AI와 오픈 소스 AI의 개념 비교&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;구분&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;일반적인 공개 범위&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;사용자가 할 수 있는 작업&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;오픈 웨이트 모델&lt;/th&gt;
          &lt;td&gt;학습이 완료된 가중치와 추론 코드&lt;/td&gt;
          &lt;td&gt;다운로드, 실행, 양자화, 미세조정, 재배포&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;오픈 소스 AI&lt;/th&gt;
          &lt;td&gt;가중치뿐 아니라 학습과 수정에 필요한 충분한 정보&lt;/td&gt;
          &lt;td&gt;모델의 작동 원리 검토, 재현, 수정, 파생 모델 개발&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;
    오픈 웨이트 모델은 학습된 매개변수를 내려받아 실행하거나 수정할 수 있지만,
    학습 데이터와 전체 학습 과정, 데이터 정제 방식, 훈련 코드가 모두 공개된다는 뜻은 아니다.
    따라서 상당수 공개 모델은 Open Source Initiative가 제시한 오픈 소스 AI의 기준을
    완전히 충족하지 못한다.
  &lt;/p&gt;

  &lt;p&gt;
    그러나 완전한 오픈 소스가 아니더라도 사용자가 직접 실행하고 수정할 수 있는 산출물이 제공되면
    그 주변에 별도의 생태계가 형성될 수 있다. 양자화 모델, LoRA 어댑터, 도메인별 미세조정,
    런타임 최적화, 평가 도구가 대표적인 사례다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;platform-stack&quot;&gt;
  &lt;h2&gt;셀프 호스팅에서 모델 플랫폼으로&lt;/h2&gt;

  &lt;p&gt;
    기업이 오픈 웨이트 모델을 도입한 초기 이유는 주로 셀프 호스팅이었다.
    민감한 데이터를 외부 API로 전송하지 않고 자체 클라우드나 데이터센터에서 모델을 실행하면
    데이터 처리 위치와 접근 정책을 직접 통제할 수 있기 때문이다.
  &lt;/p&gt;

  &lt;p&gt;
    AI 사용량이 증가한 뒤에는 비용 통제도 중요한 요인이 됐다.
    API 호출량에 따라 비용이 증가하는 구조 대신,
    조직이 보유하거나 임대한 가속기에서 추론 워크로드를 직접 운영하려는 수요가 커졌다.
  &lt;/p&gt;

  &lt;p&gt;
    이러한 수요를 바탕으로 다음과 같은 오픈 소스 모델 실행 도구가 성장했다.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;vLLM&lt;/strong&gt;: 높은 처리량을 목표로 하는 서버형 추론 엔진&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;SGLang&lt;/strong&gt;: 구조화된 생성과 에이전트 워크로드를 지원하는 런타임&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt;: CPU와 다양한 로컬 하드웨어에서 실행할 수 있는 경량 런타임&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ollama&lt;/strong&gt;: 로컬 모델 다운로드와 실행 과정을 단순화한 개발 도구&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;MLX&lt;/strong&gt;: Apple Silicon 환경을 위한 머신러닝 프레임워크와 모델 생태계&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    오픈 웨이트 모델의 가치는 셀프 호스팅에만 머물지 않는다.
    개발자가 모델을 수정하고 목적에 맞게 다시 배포할 수 있다는 점이 더 큰 플랫폼 효과를 만든다.
    Hugging Face 생태계는 이미 약 200만 개 규모의 모델을 분석하는 연구가 나올 만큼 확장됐으며,
    Qwen과 Gemma 같은 인기 모델 계열 주변에는 수많은 파생 산출물이 형성되고 있다. :contentReference[oaicite:0]{index=0}
  &lt;/p&gt;

  &lt;h3&gt;모델 주변에서 만들어지는 파생 생태계&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;GPU·CPU·NPU와 메모리 용량에 맞춘 양자화 가중치&lt;/li&gt;
    &lt;li&gt;TensorRT-LLM, vLLM, MLX 등 특정 런타임에 최적화한 변환 모델&lt;/li&gt;
    &lt;li&gt;코딩, 의료, 법률, 수학, 고객 지원용 미세조정 모델&lt;/li&gt;
    &lt;li&gt;기존 가중치에 덧붙여 사용하는 LoRA 어댑터&lt;/li&gt;
    &lt;li&gt;서로 다른 미세조정 결과를 조합한 모델 병합&lt;/li&gt;
    &lt;li&gt;에이전트 실행 환경, 샌드박스, 평가 및 관측성 도구&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    이 구조에서는 특정 모델 하나보다 &lt;strong&gt;모델을 교체하고 비교하며 운영할 수 있는 전체 스택&lt;/strong&gt;이
    더 중요한 경쟁력이 된다. 모델은 플랫폼의 핵심 구성요소이지만,
    실제 기업 환경에서는 서빙, 권한 관리, 평가, 모니터링, 비용 관리, 장애 대응이 함께 작동해야 한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;performance-gap&quot;&gt;
  &lt;h2&gt;최전선 모델과 좁아지는 성능 격차&lt;/h2&gt;

  &lt;p&gt;
    과거 오픈 웨이트 모델은 복잡한 코딩과 장기 에이전트 작업에서 폐쇄형 최전선 모델보다
    성능이 크게 낮은 경우가 많았다. 기반 모델의 성능이 부족하면
    그 위에 구축되는 에이전트 런타임이나 자동화 도구도 실용적인 한계에 부딪힐 수밖에 없다.
  &lt;/p&gt;

  &lt;p&gt;
    그러나 2026년에는 일부 오픈 웨이트 모델이 특정 코딩 평가에서
    폐쇄형 모델과 경쟁 가능한 결과를 제시하기 시작했다.
    Z.ai가 발표한 GLM-5.2 자료에서는 장기 작업과 코딩 관련 벤치마크에서
    GPT-5.5를 일부 앞서거나 유사한 성능을 기록했다고 설명한다. :contentReference[oaicite:1]{index=1}
  &lt;/p&gt;

  &lt;p&gt;
    특히 SWE-bench Pro 관련 자료에서는 GLM-5.2가 62.1%, GPT-5.5가 58.6%로 제시되기도 한다.
    다만 이 수치는 모든 모델을 동일한 독립 하네스에서 비교한 단일 공식 순위로 해석해서는 안 된다.
    벤치마크 점수는 에이전트 하네스, 추론 설정, 샘플링 방식, 도구 접근 권한에 따라 달라질 수 있으며,
    GLM-5.2의 62.1% 결과가 표준화된 공개 리더보드 항목은 아니라는 지적도 있다. :contentReference[oaicite:2]{index=2}
  &lt;/p&gt;

  &lt;aside&gt;
    &lt;h3&gt;벤치마크를 읽을 때 확인할 항목&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;모델 개발사가 직접 수행한 평가인지&lt;/li&gt;
      &lt;li&gt;독립 평가 기관이 같은 조건에서 비교했는지&lt;/li&gt;
      &lt;li&gt;사용된 에이전트 하네스와 도구가 동일한지&lt;/li&gt;
      &lt;li&gt;공개 문제와 비공개 문제를 어떻게 분리했는지&lt;/li&gt;
      &lt;li&gt;Pass@1, 평균 점수 등 평가 지표가 동일한지&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/aside&gt;

  &lt;p&gt;
    Kimi K3도 장기 코딩과 에이전트 작업에서 폐쇄형 최전선 모델에 근접한 사례로 언급된다.
    Artificial Analysis 자료를 인용한 공개 정보에서는 Kimi K3가 Intelligence Index에서
    Opus 4.8과 GPT-5.5에 가까운 구간에 위치한 것으로 소개됐다. 다만 최고 성능의 폐쇄형 모델을
    전반적으로 능가했다는 의미는 아니며, 특정 평가에서 경쟁 가능한 수준에 도달했다는 해석이 적절하다. :contentReference[oaicite:3]{index=3}
  &lt;/p&gt;

  &lt;p&gt;
    중요한 변화는 오픈 모델이 모든 벤치마크에서 1위를 차지했는지가 아니다.
    개발자가 실제 제품과 연구를 시작할 수 있을 만큼 기반 성능이 높아졌다는 점이다.
    모델 성능이 실용적인 임계점을 넘으면 에이전트 런타임, 코딩 하네스, 샌드박스,
    평가, 관측성, 전문 미세조정 프로젝트가 연쇄적으로 성장할 수 있다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;limitations&quot;&gt;
  &lt;h2&gt;Kubernetes 비유의 한계&lt;/h2&gt;

  &lt;p&gt;
    오픈 웨이트 AI와 Kubernetes 사이에는 분명한 공통점이 있지만,
    두 생태계를 동일하게 볼 수는 없다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;Kubernetes와 오픈 웨이트 AI 생태계의 구조적 차이&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;항목&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;Kubernetes&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;오픈 웨이트 AI&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;수정 대상&lt;/th&gt;
          &lt;td&gt;사람이 읽고 변경할 수 있는 소스 코드&lt;/td&gt;
          &lt;td&gt;학습 결과물인 대규모 매개변수&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;업스트림 기여&lt;/th&gt;
          &lt;td&gt;패치와 기능을 공통 프로젝트에 반영 가능&lt;/td&gt;
          &lt;td&gt;미세조정 결과가 원 모델에 직접 병합되기 어려움&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;실행 비용&lt;/th&gt;
          &lt;td&gt;상대적으로 다양한 환경에서 접근 가능&lt;/td&gt;
          &lt;td&gt;최전선 모델은 대규모 가속기와 메모리가 필요할 수 있음&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;중립 거버넌스&lt;/th&gt;
          &lt;td&gt;CNCF와 표준화된 프로젝트 운영 구조 존재&lt;/td&gt;
          &lt;td&gt;AI 전체를 포괄하는 동일 수준의 중립 조직이 부재&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;공통 인터페이스&lt;/th&gt;
          &lt;td&gt;Kubernetes API가 생태계의 중심 역할&lt;/td&gt;
          &lt;td&gt;모델 API와 런타임 형식이 아직 다원화됨&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;
    Kubernetes 기여자는 소스 코드를 조사하고 변경한 뒤 개선 사항을 공유 프로젝트에 반영할 수 있다.
    반면 AI 모델을 미세조정해 얻은 결과는 원래 기반 모델에 동일한 방식으로 병합되지 않는다.
    학습 데이터와 전체 훈련 과정이 공개되지 않았다면 모델의 형성 과정을 완전히 재현하기도 어렵다.
  &lt;/p&gt;

  &lt;p&gt;
    실행 비용도 중요한 차이다. 공개 가중치를 내려받을 수 있다고 해서 누구나 최전선 모델을
    저렴하게 운영할 수 있는 것은 아니다. 모델 크기, 활성 파라미터 수, 정밀도,
    컨텍스트 길이에 따라 다수의 고성능 GPU와 대용량 메모리가 필요할 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    따라서 AI의 Kubernetes 순간은 단일 프로젝트가 모든 것을 통합하는 형태보다,
    여러 모델을 공통 런타임과 운영 계층에서 교환할 수 있는
    &lt;strong&gt;상호운용 가능한 모델 플랫폼&lt;/strong&gt;의 등장으로 나타날 가능성이 높다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;china-ban&quot;&gt;
  &lt;h2&gt;중국산 모델 제한이 미국에 미칠 영향&lt;/h2&gt;

  &lt;p&gt;
    Kimi K3와 GLM-5.2 같은 중국계 오픈 웨이트 모델의 경쟁력이 높아지면서
    미국에서는 안보와 사이버 보안을 이유로 중국산 AI 모델의 사용을 제한해야 한다는 논의가 이어지고 있다.
    보도에 따르면 미국 정부 내에서 중국산 공개 모델에 대한 규제 또는 제한 방안이 다시 검토되는 것으로 알려졌지만,
    구체적인 범위와 집행 방식은 확정되지 않은 상태다. :contentReference[oaicite:4]{index=4}
  &lt;/p&gt;

  &lt;p&gt;
    보안 검토가 필요한 정부·국방·핵심 인프라 환경과
    민간 연구자가 공개 가중치를 분석하는 행위는 구분할 필요가 있다.
    공급망 위험이나 악성 코드, 외부 통신, 데이터 처리 정책을 검증하는 것은 필요하지만,
    출처 국가만을 기준으로 모든 모델의 연구와 실행을 광범위하게 차단하면
    미국 연구자와 기업이 글로벌 생태계에서 분리될 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    Hugging Face가 2026년 봄 공개한 분석에 따르면,
    직전 1년 동안 중국계 모델은 플랫폼 전체 다운로드의 41%를 차지했다.
    이는 중국이 공개 모델 생태계에서 이미 주변적인 참여자가 아니라
    주요 모델 공급처가 됐다는 사실을 보여준다. :contentReference[oaicite:5]{index=5}
  &lt;/p&gt;

  &lt;p&gt;
    미국 내 사용이 제한되더라도 다른 국가의 개발자와 기업은 해당 모델을 계속 활용할 수 있다.
    성능과 라이선스 조건이 충분히 매력적이라면 서빙 도구, 양자화 모델, 미세조정,
    평가 데이터와 운영 노하우가 그 모델 계열 주변에 축적될 가능성이 있다.
  &lt;/p&gt;

  &lt;p&gt;
    이 경우 제한 정책은 중국 모델의 세계적 확산을 중단시키기보다,
    미국 개발자만 해당 생태계의 학습과 혁신에서 제외하는 결과를 만들 수 있다.
    오픈 웨이트 파일은 복제와 재배포가 가능하므로 전면 금지의 실효성을 확보하기도 쉽지 않다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;competition-strategy&quot;&gt;
  &lt;h2&gt;미국이 경쟁할 네 가지 방법&lt;/h2&gt;

  &lt;h3&gt;1. 상업적으로 활용 가능한 최전선급 모델 공개&lt;/h3&gt;

  &lt;p&gt;
    미국 연구소가 오픈 웨이트 생태계에서 경쟁하려면
    단순한 실험용 모델이 아니라 스타트업과 기업이 실제 제품을 구축할 수 있는
    성능과 라이선스를 갖춘 모델을 제공해야 한다.
  &lt;/p&gt;

  &lt;p&gt;
    공개 모델이 폐쇄형 최전선 모델보다 여러 세대 뒤처져 있다면
    개발자와 인프라 기업이 장기적인 제품 전략을 그 주변에 구축할 유인은 약해진다.
    반대로 충분한 성능과 명확한 상업적 사용 조건이 제공되면
    모델 개발사가 직접 만들지 않은 수많은 파생 제품이 등장할 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;2. 정부 조달로 이식성과 상호운용성에 수요 제공&lt;/h3&gt;

  &lt;p&gt;
    정부 조달은 특정 API 공급업체에 영구적으로 종속되는 시스템보다
    모델 교체 가능성, 데이터 이동성, 공개 인터페이스, 자체 운영 능력을 갖춘 시스템을 우선할 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    조달 기준에 이식성과 상호운용성이 포함되면 기업은 단일 모델에 종속된 제품보다
    여러 모델과 런타임을 지원하는 구조를 개발할 경제적 유인을 얻게 된다.
    이는 공공기관의 공급망 위험을 줄이는 동시에 민간 시장의 개방형 도구 개발도 촉진할 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;3. 모델 외 전체 프로덕션 스택 구축&lt;/h3&gt;

  &lt;p&gt;
    경쟁의 대상은 기반 모델 하나가 아니다. 기업이 AI를 실제 서비스에 적용하려면
    다음과 같은 운영 계층이 필요하다.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;고성능 모델 서빙과 자동 확장&lt;/li&gt;
    &lt;li&gt;미세조정 및 어댑터 관리&lt;/li&gt;
    &lt;li&gt;에이전트 런타임과 도구 권한 통제&lt;/li&gt;
    &lt;li&gt;격리된 코드 실행 샌드박스&lt;/li&gt;
    &lt;li&gt;오프라인·온라인 평가 자동화&lt;/li&gt;
    &lt;li&gt;프롬프트, 응답, 비용, 지연시간 관측성&lt;/li&gt;
    &lt;li&gt;정책 관리, 감사 로그, 보안 검토&lt;/li&gt;
    &lt;li&gt;하드웨어별 양자화와 추론 최적화&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    반도체 기업은 모델 실행 효율을 높일 수 있고,
    클라우드와 네오클라우드 사업자는 관리형 오픈 웨이트 서비스를 제공할 수 있다.
    스타트업은 도메인별 미세조정, 평가, 운영 자동화, 보안 계층에서 사업을 구축할 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;4. 전면 금지 대신 독립 시험과 표준 도입&lt;/h3&gt;

  &lt;p&gt;
    안전성은 공개 모델 제한을 주장하는 가장 강한 근거다.
    그러나 위험 수준과 사용 환경을 구분하지 않는 전면적 금지는
    연구, 분석, 방어 기술 개발까지 함께 위축시킬 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    더 실용적인 접근은 최전선 모델을 대상으로 독립적인 안전성 시험과 배포 기준을 마련하는 것이다.
    시험 항목에는 사이버 공격 능력, 생물학적 위험 정보 제공, 자율적 도구 사용,
    권한 상승, 모델 변조 탐지, 데이터 유출 가능성 등이 포함될 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    Kubernetes 적합성 시험은 기능 호환성을 검증하는 제도이므로
    AI 안전성 평가와 정확히 대응하는 사례는 아니다.
    다만 공급업체와 분리된 시험 체계, 공개된 기준, 중립적 거버넌스라는 운영 원칙은 참고할 수 있다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;개방형 AI 스택이 갖춰야 할 조건&lt;/h2&gt;

  &lt;p&gt;
    오픈 웨이트 모델이 실제로 Kubernetes와 같은 플랫폼 효과를 만들기 위해서는
    가중치 공개만으로 충분하지 않다.
  &lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;
      &lt;strong&gt;충분한 기반 성능&lt;/strong&gt;
      &lt;p&gt;개발자가 제품을 만들 수 있을 정도로 코딩, 추론, 도구 사용 능력이 안정적이어야 한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;명확하고 지속 가능한 라이선스&lt;/strong&gt;
      &lt;p&gt;상업적 사용, 수정, 재배포, 파생 모델 공개 조건이 예측 가능해야 한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;런타임 이식성&lt;/strong&gt;
      &lt;p&gt;특정 클라우드나 가속기에서만 실행되지 않고 다양한 하드웨어와 서빙 환경을 지원해야 한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;공통 인터페이스&lt;/strong&gt;
      &lt;p&gt;모델을 교체해도 애플리케이션과 운영 계층을 전면 재작성하지 않도록 API와 도구 규격이 정리돼야 한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;독립 평가&lt;/strong&gt;
      &lt;p&gt;모델 개발사의 자체 벤치마크와 별도로 재현 가능한 평가와 안전성 시험이 제공돼야 한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;중립적 거버넌스&lt;/strong&gt;
      &lt;p&gt;특정 모델 공급자가 인터페이스와 인증 기준을 일방적으로 변경하지 못하는 운영 구조가 필요하다.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/section&gt;

&lt;section id=&quot;conclusion&quot;&gt;
  &lt;h2&gt;개방형 AI 생태계의 승자는 누구인가&lt;/h2&gt;

  &lt;p&gt;
    오픈 웨이트 AI의 경쟁은 가장 높은 벤치마크 점수를 기록한 모델 하나를 선정하는 경기가 아니다.
    개발자, 클라우드 사업자, 반도체 기업, 스타트업과 기업 사용자가
    같은 기반 위에서 얼마나 쉽게 제품을 만들고 운영할 수 있는지가 더 중요하다.
  &lt;/p&gt;

  &lt;p&gt;
    미국이 경쟁력을 유지하려면 자국 개발자 주변에 장벽을 세우는 것보다
    중국산 모델을 직접 실행하고, 내부 동작을 분석하고, 동일한 조건에서 평가하고,
    더 나은 미국산 대안을 구축하는 전략이 필요하다.
  &lt;/p&gt;

  &lt;p&gt;
    동시에 미국산 AI 스택을 세계에서 가장 도입하기 쉬운 선택지로 만들어야 한다.
    성능뿐 아니라 라이선스, 이식성, 서빙 도구, 하드웨어 지원, 평가,
    보안 기준과 운영 경험이 함께 제공돼야 한다.
  &lt;/p&gt;

  &lt;p&gt;
    Kubernetes가 보여준 교훈은 명확하다.
    충분히 좋은 개방형 기반이 공통 인터페이스와 신뢰할 수 있는 거버넌스를 확보하면
    혁신은 원 제작자의 조직 경계를 넘어 확장된다.
    AI에서도 장기적인 승자는 모델을 가장 강하게 통제하는 국가나 기업이 아니라,
    세계의 개발자가 참여할 이유를 가장 많이 제공하는 생태계가 될 가능성이 높다.
  &lt;/p&gt;
&lt;/section&gt;
```

  &lt;/main&gt;

  &lt;footer&gt;
    &lt;h2&gt;참고 사항&lt;/h2&gt;
    &lt;p&gt;
      이 글에 언급된 모델 성능 수치는 특정 시점의 자체 평가 또는 외부 평가 결과다.
      벤치마크 환경과 에이전트 하네스가 다르면 결과도 달라질 수 있으므로,
      실제 도입 전에는 조직의 데이터와 워크로드를 사용한 별도 검증이 필요하다.
    &lt;/p&gt;

  &lt;/footer&gt;
&lt;/article&gt;

&lt;style&gt;
  .tistory-article {
    max-width: 860px;
    margin: 0 auto;
    color: #1f2937;
    font-size: 17px;
    line-height: 1.8;
    word-break: keep-all;
    overflow-wrap: break-word;
  }

  .tistory-article h1 {
    margin: 0.4em 0 0.8em;
    font-size: clamp(2rem, 6vw, 2.8rem);
    line-height: 1.25;
    color: #111827;
  }

  .tistory-article h2 {
    margin-top: 2.4em;
    padding-bottom: 0.35em;
    border-bottom: 2px solid #e5e7eb;
    font-size: clamp(1.5rem, 4.5vw, 2rem);
    line-height: 1.35;
    color: #111827;
  }

  .tistory-article h3 {
    margin-top: 1.8em;
    font-size: clamp(1.2rem, 3.8vw, 1.45rem);
    line-height: 1.4;
    color: #1f2937;
  }

  .tistory-article p {
    margin: 1em 0;
  }

  .tistory-article nav {
    margin: 2em 0;
    padding: 1.25em 1.4em;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    background: #f9fafb;
  }

  .tistory-article nav h2 {
    margin-top: 0;
    border-bottom: 0;
    font-size: 1.25rem;
  }

  .tistory-article a {
    color: #1d4ed8;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }

  .tistory-article ul,
  .tistory-article ol {
    padding-left: 1.5em;
  }

  .tistory-article li {
    margin: 0.55em 0;
  }

  .tistory-article blockquote {
    margin: 1.6em 0;
    padding: 1em 1.25em;
    border-left: 4px solid #4b5563;
    background: #f3f4f6;
  }

  .tistory-article blockquote p {
    margin: 0;
  }

  .tistory-article aside {
    margin: 1.7em 0;
    padding: 1.2em 1.35em;
    border: 1px solid #d1d5db;
    border-radius: 12px;
    background: #f9fafb;
  }

  .tistory-article aside h3 {
    margin-top: 0;
  }

  .table-wrap {
    width: 100%;
    margin: 1.5em 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .tistory-article table {
    width: 100%;
    min-width: 640px;
    border-collapse: collapse;
    font-size: 0.95em;
  }

  .tistory-article caption {
    margin-bottom: 0.7em;
    font-weight: 700;
    text-align: left;
    color: #374151;
  }

  .tistory-article th,
  .tistory-article td {
    padding: 0.8em;
    border: 1px solid #d1d5db;
    text-align: left;
    vertical-align: top;
  }

  .tistory-article th {
    background: #f3f4f6;
    color: #111827;
  }

  .tistory-article footer {
    margin-top: 3em;
    padding-top: 1.5em;
    border-top: 1px solid #d1d5db;
    font-size: 0.95em;
    color: #4b5563;
  }

  @media (max-width: 640px) {
    .tistory-article {
      font-size: 16px;
      line-height: 1.75;
    }

    .tistory-article nav,
    .tistory-article aside {
      padding: 1em;
    }
  }
&lt;/style&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;오픈 웨이트 AI는 Kubernetes의 순간을 맞고 있는가&quot;,
  &quot;description&quot;: &quot;오픈 웨이트 AI 생태계가 Kubernetes와 유사한 플랫폼 효과를 만들 수 있는 이유와 한계, 중국 모델 규제 논쟁, 미국의 개방형 AI 경쟁 전략을 분석한다.&quot;,
  &quot;inLanguage&quot;: &quot;ko-KR&quot;,
  &quot;keywords&quot;: [
    &quot;오픈 웨이트 AI&quot;,
    &quot;오픈 소스 AI&quot;,
    &quot;Kubernetes&quot;,
    &quot;AI 생태계&quot;,
    &quot;AI 거버넌스&quot;,
    &quot;GLM-5.2&quot;,
    &quot;Kimi K3&quot;,
    &quot;Hugging Face&quot;
  ],
  &quot;articleSection&quot;: [
    &quot;Kubernetes의 플랫폼 효과&quot;,
    &quot;오픈 웨이트와 오픈 소스 AI&quot;,
    &quot;AI 모델 서빙 생태계&quot;,
    &quot;오픈 웨이트 모델 성능&quot;,
    &quot;중국 AI 모델 규제&quot;,
    &quot;미국의 AI 경쟁 전략&quot;
  ],
  &quot;about&quot;: [
    {
      &quot;@type&quot;: &quot;Thing&quot;,
      &quot;name&quot;: &quot;Open-weight artificial intelligence&quot;
    },
    {
      &quot;@type&quot;: &quot;SoftwareApplication&quot;,
      &quot;name&quot;: &quot;Kubernetes&quot;,
      &quot;applicationCategory&quot;: &quot;Cloud Computing Platform&quot;
    }
  ]
}
&lt;/script&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI모델</category>
      <category>ai생태계</category>
      <category>GLM-5.2</category>
      <category>Huggingface</category>
      <category>KimiK3</category>
      <category>kubernetes</category>
      <category>vllm</category>
      <category>생성형AI</category>
      <category>오픈소스ai</category>
      <category>오픈웨이트AI</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/596</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%98%A4%ED%94%88-%EC%9B%A8%EC%9D%B4%ED%8A%B8-AI%EB%8A%94-Kubernetes%EC%9D%98-%EC%88%9C%EA%B0%84%EC%9D%84-%EB%A7%9E%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B0%80#entry596comment</comments>
      <pubDate>Mon, 27 Jul 2026 17:23:59 +0900</pubDate>
    </item>
    <item>
      <title>중첩 본딩의 위험과 MLAG를 이용한 2:2 단일 본딩 40G 구성 방법</title>
      <link>https://togethergrow.tistory.com/entry/%EC%A4%91%EC%B2%A9-%EB%B3%B8%EB%94%A9%EC%9D%98-%EC%9C%84%ED%97%98%EA%B3%BC-MLAG%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-22-%EB%8B%A8%EC%9D%BC-%EB%B3%B8%EB%94%A9-40G-%EA%B5%AC%EC%84%B1-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;article class=&quot;tistory-tech-article&quot;&gt;
  &lt;header&gt;
    &lt;p class=&quot;article-category&quot;&gt;네트워크 일반형&lt;/p&gt;
    &lt;h1&gt;중첩 본딩의 위험과 MLAG를 이용한 2:2 단일 본딩 40G 구성 방법&lt;/h1&gt;
    &lt;p class=&quot;article-summary&quot;&gt;
      10GbE 포트 4개를 단순히 여러 단계로 본딩하는 방식은 장애 감지, 해시 분산, MAC 주소 학습 및 복구 절차를 복잡하게 만든다.
      이 글에서는 중첩 본딩을 피해야 하는 이유와 두 대의 스위치에 각각 2포트를 연결한 뒤 MLAG와 LACP를 이용해 하나의 40G 논리 본드로 구성하는 방법을 설명한다.
    &lt;/p&gt;
  &lt;/header&gt;

  &lt;aside class=&quot;info-box&quot; aria-label=&quot;핵심 요약&quot;&gt;
    &lt;strong&gt;핵심 결론&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;서버에서는 4개의 10GbE NIC를 하나의 802.3ad 본드로 구성한다.&lt;/li&gt;
      &lt;li&gt;스위치 두 대에는 각각 2개의 서버 포트를 배치한다.&lt;/li&gt;
      &lt;li&gt;두 스위치는 MLAG 도메인으로 묶고 동일한 MLAG ID를 사용한다.&lt;/li&gt;
      &lt;li&gt;서버가 인식하는 LACP 파트너는 하나의 논리 스위치여야 한다.&lt;/li&gt;
      &lt;li&gt;40Gbps는 여러 흐름이 분산될 때 얻을 수 있는 집계 대역폭이며, 단일 TCP 흐름이 자동으로 40Gbps가 되는 것은 아니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/aside&gt;

  &lt;nav class=&quot;toc&quot; aria-label=&quot;목차&quot;&gt;
    &lt;strong&gt;목차&lt;/strong&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#overview&quot;&gt;구성 목표&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#nested-bonding&quot;&gt;중첩 본딩이란 무엇인가&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#risk&quot;&gt;중첩 본딩의 주요 위험&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#mlag&quot;&gt;MLAG가 필요한 이유&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#topology&quot;&gt;2:2 단일 본딩 40G 토폴로지&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#traffic&quot;&gt;트래픽 분산 방식과 성능 한계&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#configuration&quot;&gt;구성 절차&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;Linux 서버 본딩 예시&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#switch&quot;&gt;MLAG 스위치 구성 예시&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#failure&quot;&gt;장애 시나리오&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#validation&quot;&gt;검증 방법&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#checklist&quot;&gt;운영 체크리스트&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#faq&quot;&gt;자주 묻는 질문&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/nav&gt;

  &lt;main&gt;
    &lt;section id=&quot;overview&quot;&gt;
      &lt;h2&gt;구성 목표&lt;/h2&gt;
      &lt;p&gt;
        목표는 서버에 장착된 10GbE NIC 4개를 이용하여 최대 40Gbps의 집계 대역폭과 스위치 이중화를 동시에 확보하는 것이다.
        물리 연결은 스위치 A에 2포트, 스위치 B에 2포트를 연결하는 2:2 구조로 설계한다.
      &lt;/p&gt;

```
  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;2:2 단일 본딩 구성 요소&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;구성 요소&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;수량&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;역할&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;서버 10GbE 포트&lt;/td&gt;
          &lt;td&gt;4개&lt;/td&gt;
          &lt;td&gt;하나의 802.3ad 본드에 참여&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;MLAG 스위치&lt;/td&gt;
          &lt;td&gt;2대&lt;/td&gt;
          &lt;td&gt;서버에 하나의 논리 LACP 파트너처럼 동작&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;스위치별 서버 연결&lt;/td&gt;
          &lt;td&gt;2개&lt;/td&gt;
          &lt;td&gt;각 스위치가 20Gbps의 물리 용량 제공&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;MLAG Peer Link&lt;/td&gt;
          &lt;td&gt;권장 2포트 이상&lt;/td&gt;
          &lt;td&gt;상태 동기화 및 필요한 경우 데이터 전달&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;서버 논리 인터페이스&lt;/td&gt;
          &lt;td&gt;1개&lt;/td&gt;
          &lt;td&gt;bond0 또는 팀 인터페이스&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;
    MLAG는 서버의 LAG 또는 본드에 속한 포트를 서로 다른 물리 스위치에 연결하면서도 서버가 이를 하나의 논리 스위치에 연결된 링크로 인식하게 한다.
    이를 통해 링크 장애뿐 아니라 스위치 한 대의 장애에도 대응할 수 있다. 
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;nested-bonding&quot;&gt;
  &lt;h2&gt;중첩 본딩이란 무엇인가&lt;/h2&gt;
  &lt;p&gt;
    중첩 본딩은 이미 집계된 논리 인터페이스를 다시 다른 본딩이나 집계 그룹의 멤버로 넣는 구조를 의미한다.
    예를 들어 물리 NIC 두 개로 만든 &lt;code&gt;bond0&lt;/code&gt;와 다른 물리 NIC 두 개로 만든 &lt;code&gt;bond1&lt;/code&gt;을 다시 상위 &lt;code&gt;bond2&lt;/code&gt;에 넣는 방식이다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;eth0 ─┐
  ├─ bond0 ─┐
```

eth1 ─┘         │
├─ bond2
eth2 ─┐         │
├─ bond1 ─┘
eth3 ─┘&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    스위치에서도 두 개의 하위 LAG를 다시 상위 LAG처럼 취급하거나, 서버에서는 본딩하고 가상화 계층에서 다시 팀 구성을 추가하는 사례가 있다.
    그러나 IEEE 802.3ad LACP는 일반적으로 하나의 논리 집계 인터페이스와 하나의 논리 파트너 사이의 멤버 링크를 관리하는 구조다.
    여러 단계의 독립적인 해시와 장애 상태를 겹치면 각 계층이 전체 물리 상태를 정확히 이해하기 어려워진다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;risk&quot;&gt;
  &lt;h2&gt;중첩 본딩의 주요 위험&lt;/h2&gt;

  &lt;h3&gt;독립적인 해시 계산으로 인한 불균형&lt;/h3&gt;
  &lt;p&gt;
    하위 본드와 상위 본드가 각각 별도의 해시를 수행하면 특정 하위 그룹에 트래픽이 몰릴 수 있다.
    상위 계층에서는 두 개의 논리 인터페이스가 동일한 용량으로 보이더라도, 하위 계층의 실제 멤버 상태나 흐름 분포는 다를 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    예를 들어 상위 본드가 특정 흐름을 &lt;code&gt;bond0&lt;/code&gt;에 배치하고, &lt;code&gt;bond0&lt;/code&gt;의 해시도 같은 물리 NIC에 여러 흐름을 배치하면
    일부 10GbE 링크만 포화되고 나머지 링크는 거의 사용되지 않을 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;장애 감지 지연과 부분 장애 은폐&lt;/h3&gt;
  &lt;p&gt;
    하위 본드의 멤버 한 개가 장애를 일으켜도 상위 본드에서는 하위 본드 인터페이스 자체가 여전히 정상 상태로 보일 수 있다.
    이 경우 상위 계층은 실제 용량 감소를 인식하지 못하고 계속 동일한 비율로 트래픽을 전달한다.
  &lt;/p&gt;

  &lt;h3&gt;LACP 상태 불일치&lt;/h3&gt;
  &lt;p&gt;
    LACP는 Actor와 Partner의 시스템 ID, 포트 키, 집계 상태를 기준으로 멤버를 하나의 Aggregator에 포함한다.
    중간에 또 다른 논리 집계 계층이 존재하면 실제 물리 포트의 LACP 상태와 상위 인터페이스 상태가 분리될 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;패킷 순서 변경 가능성&lt;/h3&gt;
  &lt;p&gt;
    여러 계층에서 서로 다른 해시 정책을 적용하거나 장애 시 재분배가 연속적으로 발생하면 동일 세션의 패킷 경로가 예상보다 자주 변경될 수 있다.
    TCP는 일부 순서 변경을 복구할 수 있지만, 대량의 재정렬은 재전송과 처리량 저하로 이어질 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;장애 원인 추적의 복잡성&lt;/h3&gt;
  &lt;p&gt;
    물리 NIC, 하위 본드, 상위 본드, 브리지, 가상 스위치, MLAG 포트채널을 각각 확인해야 하므로 운영 복잡도가 크게 증가한다.
    인터페이스 카운터만으로는 어느 계층에서 드롭이나 불균형이 발생했는지 판단하기 어렵다.
  &lt;/p&gt;

  &lt;h3&gt;벤더 지원 범위 이탈&lt;/h3&gt;
  &lt;p&gt;
    운영체제나 NIC 드라이버가 논리 본드를 다른 본드의 멤버로 사용하는 구성을 허용하더라도, 해당 구성이 공식적으로 지원되거나 검증되었다는 의미는 아니다.
    특히 LACP, SR-IOV, OVS, 하이퍼바이저 가상 스위치가 함께 사용되면 지원 범위를 반드시 확인해야 한다.
  &lt;/p&gt;

  &lt;aside class=&quot;warning-box&quot; aria-label=&quot;중첩 본딩 주의사항&quot;&gt;
    &lt;strong&gt;권장하지 않는 구성&lt;/strong&gt;
    &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;bond0 = eth0 + eth1
```

bond1 = eth2 + eth3
bond2 = bond0 + bond1&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;
동일 목적의 4개 링크라면 하위 본드를 두 개 만들지 말고, 4개 물리 NIC를 하나의 802.3ad 본드에 직접 포함하는 편이 구조와 장애 처리가 명확하다. &lt;/p&gt; &lt;/aside&gt; &lt;/section&gt;

```
&lt;section id=&quot;mlag&quot;&gt;
  &lt;h2&gt;MLAG가 필요한 이유&lt;/h2&gt;
  &lt;p&gt;
    일반적인 LACP 포트채널은 하나의 논리 장비를 기준으로 구성한다.
    서로 독립된 두 스위치에 서버의 본드 멤버를 나누어 연결하면 서버는 서로 다른 LACP System ID를 가진 두 파트너를 발견할 수 있다.
    이 상태에서는 4개 포트가 하나의 정상적인 Aggregator에 들어가지 않거나, 일부 포트만 활성화될 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    MLAG는 두 물리 스위치가 서버 방향에서 공통된 논리 시스템처럼 동작하도록 제어 상태를 동기화한다.
    서버는 4개의 링크를 하나의 LACP 파트너와 협상하는 것으로 인식하고, 두 스위치의 포트를 하나의 논리 LAG에 포함할 수 있다.
    MLAG의 핵심 목적은 서로 다른 스위치에 연결된 링크를 하나의 LAG로 운용하여 스위치 수준의 이중화와 active-active 전달을 제공하는 것이다.
  &lt;/p&gt;

  &lt;div class=&quot;comparison-grid&quot;&gt;
    &lt;div&gt;
      &lt;h3&gt;MLAG 없이 두 스위치에 연결&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;LACP 파트너 시스템 ID가 달라질 수 있음&lt;/li&gt;
        &lt;li&gt;4개 링크가 하나의 Aggregator로 결합되지 않을 수 있음&lt;/li&gt;
        &lt;li&gt;active-backup 설계가 필요할 수 있음&lt;/li&gt;
        &lt;li&gt;전체 링크를 동시에 사용하기 어려움&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;h3&gt;MLAG를 이용해 연결&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;두 스위치가 하나의 논리 LACP 파트너처럼 동작&lt;/li&gt;
        &lt;li&gt;4개 링크를 하나의 본드에 포함&lt;/li&gt;
        &lt;li&gt;active-active 트래픽 전달 가능&lt;/li&gt;
        &lt;li&gt;링크와 스위치 장애 모두 대응 가능&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;topology&quot;&gt;
  &lt;h2&gt;2:2 단일 본딩 40G 토폴로지&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;                         ┌─────────────────────────────┐
                     │          Linux Server       │
                     │                             │
                     │  eth0  eth1  eth2  eth3     │
                     │    \    |      |    /       │
                     │     \   |      |   /        │
                     │      bond0: 802.3ad          │
                     │      Aggregate: 40Gbps      │
                     └──────┬──┬──────┬──┬─────────┘
                            │  │      │  │
                       10G  │  │10G   │  │ 10G
                            │  │      │  │
                  ┌─────────┘  │      │  └─────────┐
                  │            │      │            │
            ┌─────▼────────────▼─┐  ┌─▼────────────▼─────┐
            │     Switch A       │  │      Switch B      │
            │                    │  │                    │
            │ Ethernet 1, 2      │  │ Ethernet 1, 2     │
            │ Port-Channel 10    │  │ Port-Channel 10   │
            │ MLAG ID 10         │  │ MLAG ID 10        │
            └─────────┬──────────┘  └──────────┬─────────┘
                      │                        │
                      ├────── MLAG Peer Link ──┤
                      │                        │
                      └──── Peer Keepalive ────┘&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    서버에서는 네 포트를 각각 별도의 본드로 나누지 않고 모두 하나의 &lt;code&gt;bond0&lt;/code&gt;에 직접 포함한다.
    스위치 A와 B에서는 서버 연결 포트를 동일한 MLAG ID를 가진 포트채널로 구성한다.
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;서버와 스위치의 논리 구성 관계&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;서버 포트&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;연결 스위치&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;스위치 포트채널&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;MLAG ID&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;eth0&lt;/td&gt;
          &lt;td&gt;Switch A&lt;/td&gt;
          &lt;td&gt;Port-Channel 10&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;eth1&lt;/td&gt;
          &lt;td&gt;Switch A&lt;/td&gt;
          &lt;td&gt;Port-Channel 10&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;eth2&lt;/td&gt;
          &lt;td&gt;Switch B&lt;/td&gt;
          &lt;td&gt;Port-Channel 10&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;eth3&lt;/td&gt;
          &lt;td&gt;Switch B&lt;/td&gt;
          &lt;td&gt;Port-Channel 10&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;traffic&quot;&gt;
  &lt;h2&gt;트래픽 분산 방식과 성능 한계&lt;/h2&gt;

  &lt;h3&gt;40G는 집계 대역폭이다&lt;/h3&gt;
  &lt;p&gt;
    4개의 10GbE 링크를 LACP로 묶었다고 해서 하나의 TCP 연결이 40Gbps로 전송되는 것은 아니다.
    LACP 본딩은 일반적으로 패킷 또는 프레임의 헤더 정보를 해시하여 하나의 흐름을 특정 멤버 링크에 배치한다.
    따라서 하나의 세션은 보통 하나의 10GbE 링크 용량에 제한된다.
  &lt;/p&gt;

  &lt;p&gt;
    Linux 본딩 드라이버는 여러 물리 인터페이스를 하나의 논리 본드로 구성하며,
    802.3ad 모드에서는 전송 해시 정책을 사용해 트래픽을 멤버 포트에 배분한다. 
  &lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;예상 가능한 처리량 예시&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;트래픽 조건&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;예상 최대치&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;설명&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;단일 TCP 흐름&lt;/td&gt;
          &lt;td&gt;약 10Gbps 이하&lt;/td&gt;
          &lt;td&gt;하나의 흐름이 일반적으로 하나의 멤버 링크를 사용&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;서로 다른 2개 흐름&lt;/td&gt;
          &lt;td&gt;최대 약 20Gbps&lt;/td&gt;
          &lt;td&gt;해시 결과가 서로 다른 멤버로 분산될 때&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;충분히 다양한 다중 흐름&lt;/td&gt;
          &lt;td&gt;최대 약 40Gbps&lt;/td&gt;
          &lt;td&gt;4개 링크에 비교적 균등하게 분산될 때&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;스위치 한 대 장애&lt;/td&gt;
          &lt;td&gt;최대 약 20Gbps&lt;/td&gt;
          &lt;td&gt;남은 스위치의 2개 링크만 사용&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;링크 한 개 장애&lt;/td&gt;
          &lt;td&gt;최대 약 30Gbps&lt;/td&gt;
          &lt;td&gt;나머지 3개 링크로 재분배&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h3&gt;해시 정책 선택&lt;/h3&gt;
  &lt;p&gt;
    Linux에서 자주 사용하는 정책은 &lt;code&gt;layer2&lt;/code&gt;, &lt;code&gt;layer2+3&lt;/code&gt;, &lt;code&gt;layer3+4&lt;/code&gt;다.
    다수의 서버와 다수의 TCP 또는 UDP 세션을 분산하려는 환경에서는 &lt;code&gt;layer3+4&lt;/code&gt;가 유리할 수 있지만,
    네트워크 구성, 프래그먼테이션, 스위치 해시 정책 및 운영체제 지원 범위를 함께 검토해야 한다.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;layer2:&lt;/strong&gt; MAC 주소를 중심으로 해시한다.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;layer2+3:&lt;/strong&gt; MAC 주소와 IP 주소를 조합한다.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;layer3+4:&lt;/strong&gt; IP 주소와 TCP 또는 UDP 포트를 조합한다.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;aside class=&quot;warning-box&quot; aria-label=&quot;성능 테스트 주의사항&quot;&gt;
    &lt;strong&gt;iperf3 한 개 세션만으로 40G를 검증하면 안 된다.&lt;/strong&gt;
    &lt;p&gt;
      여러 병렬 스트림과 여러 송신·수신 조합을 사용해야 네 개의 멤버 링크가 실제로 분산되는지 확인할 수 있다.
      단일 흐름 기반 테스트에서는 정상적인 4포트 LACP 구성도 약 10Gbps 수준으로 측정될 수 있다.
    &lt;/p&gt;
  &lt;/aside&gt;
&lt;/section&gt;

&lt;section id=&quot;configuration&quot;&gt;
  &lt;h2&gt;구성 절차&lt;/h2&gt;

  &lt;ol class=&quot;step-list&quot;&gt;
    &lt;li&gt;
      &lt;strong&gt;스위치 두 대의 MLAG 호환성 확인&lt;/strong&gt;
      &lt;p&gt;동일 모델, 동일 또는 호환되는 운영체제 버전, MLAG 기능 및 라이선스 요구사항을 확인한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;MLAG Peer Link 구성&lt;/strong&gt;
      &lt;p&gt;두 스위치 사이에 충분한 용량과 이중성을 가진 Peer Link를 구성한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;Peer Keepalive 또는 Backup 경로 구성&lt;/strong&gt;
      &lt;p&gt;가능하면 Peer Link와 물리적으로 분리된 관리망 또는 별도 L3 경로를 사용한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;서버 연결 포트채널 생성&lt;/strong&gt;
      &lt;p&gt;각 스위치의 서버 연결 2포트를 하나의 로컬 포트채널에 포함한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;동일한 MLAG ID 적용&lt;/strong&gt;
      &lt;p&gt;스위치 A와 B의 서버용 포트채널에 동일한 MLAG ID를 지정한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;VLAN과 MTU 정렬&lt;/strong&gt;
      &lt;p&gt;서버 포트채널, Peer Link, 상위 네트워크의 VLAN 허용 목록과 MTU를 일치시킨다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;서버에서 4포트 단일 LACP 본드 생성&lt;/strong&gt;
      &lt;p&gt;네 개의 물리 NIC를 하나의 &lt;code&gt;bond0&lt;/code&gt;에 직접 포함한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;LACP와 MLAG 상태 검증&lt;/strong&gt;
      &lt;p&gt;모든 멤버가 Collecting 및 Distributing 상태인지 확인한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;다중 흐름 성능 시험&lt;/strong&gt;
      &lt;p&gt;여러 병렬 세션을 생성하고 각 물리 포트 카운터가 증가하는지 확인한다.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;장애 시험&lt;/strong&gt;
      &lt;p&gt;링크, 스위치, Peer Link를 순차적으로 차단하여 서비스 영향과 복구 시간을 측정한다.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/section&gt;

&lt;section id=&quot;linux&quot;&gt;
  &lt;h2&gt;Linux 서버 4포트 LACP 본딩 예시&lt;/h2&gt;

  &lt;p&gt;
    다음 예시는 Ubuntu 계열 Netplan 구성이다.
    실제 NIC 이름, IP 주소, VLAN, MTU 및 라우팅 값은 운영 환경에 맞게 변경해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;Netplan 구성&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;network:
```

version: 2
renderer: networkd

ethernets:
enp65s0f0:
mtu: 9000
enp65s0f1:
mtu: 9000
enp129s0f0:
mtu: 9000
enp129s0f1:
mtu: 9000

bonds:
bond0:
interfaces:
- enp65s0f0
- enp65s0f1
- enp129s0f0
- enp129s0f1
mtu: 9000
addresses:
- 192.0.2.10/24
routes:
- to: default
via: 192.0.2.1
nameservers:
addresses:
- 192.0.2.53
- 192.0.2.54
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
transmit-hash-policy: layer3+4&lt;/code&gt;&lt;/pre&gt;

```
  &lt;h3&gt;적용 전 주의사항&lt;/h3&gt;
  &lt;aside class=&quot;danger-box&quot; aria-label=&quot;원격 작업 경고&quot;&gt;
    &lt;strong&gt;원격 접속 상태에서 즉시 적용하지 않는다.&lt;/strong&gt;
    &lt;p&gt;
      네트워크 설정 오류가 발생하면 SSH 연결과 기본 경로가 동시에 끊길 수 있다.
      콘솔, IPMI, iDRAC, iLO 또는 하이퍼바이저 콘솔을 확보한 상태에서 작업한다.
    &lt;/p&gt;
  &lt;/aside&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo netplan generate
```

sudo netplan try
sudo netplan apply&lt;/code&gt;&lt;/pre&gt;

```
  &lt;h3&gt;Linux 본딩 상태 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat /proc/net/bonding/bond0
```

ip -br link
ip -br address
ip route
ethtool bond0
networkctl status bond0&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;정상 상태에서는 다음 항목을 확인해야 한다.&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;Bonding Mode: IEEE 802.3ad Dynamic link aggregation&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;4개의 Slave Interface가 모두 표시되는지 확인&lt;/li&gt;
    &lt;li&gt;각 멤버의 &lt;code&gt;MII Status&lt;/code&gt;가 &lt;code&gt;up&lt;/code&gt;인지 확인&lt;/li&gt;
    &lt;li&gt;각 멤버의 &lt;code&gt;Aggregator ID&lt;/code&gt;가 동일한지 확인&lt;/li&gt;
    &lt;li&gt;Actor와 Partner의 LACP 정보가 정상인지 확인&lt;/li&gt;
    &lt;li&gt;링크 속도가 각각 10000Mbps로 인식되는지 확인&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;NetworkManager nmcli 예시&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo nmcli connection add \
```

type bond 
ifname bond0 
con-name bond0 
bond.options &quot;mode=802.3ad,lacp_rate=fast,miimon=100,xmit_hash_policy=layer3+4&quot;

sudo nmcli connection add type ethernet ifname enp65s0f0 
con-name bond0-enp65s0f0 master bond0

sudo nmcli connection add type ethernet ifname enp65s0f1 
con-name bond0-enp65s0f1 master bond0

sudo nmcli connection add type ethernet ifname enp129s0f0 
con-name bond0-enp129s0f0 master bond0

sudo nmcli connection add type ethernet ifname enp129s0f1 
con-name bond0-enp129s0f1 master bond0

sudo nmcli connection modify bond0 
ipv4.method manual 
ipv4.addresses 192.0.2.10/24 
ipv4.gateway 192.0.2.1 
ipv4.dns &quot;192.0.2.53 192.0.2.54&quot; 
802-3-ethernet.mtu 9000

sudo nmcli connection up bond0&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

```
&lt;section id=&quot;switch&quot;&gt;
  &lt;h2&gt;MLAG 스위치 구성 예시&lt;/h2&gt;

  &lt;aside class=&quot;info-box&quot; aria-label=&quot;벤더별 차이&quot;&gt;
    &lt;strong&gt;아래 명령은 구조를 설명하기 위한 예시다.&lt;/strong&gt;
    &lt;p&gt;
      MLAG, MC-LAG, vPC, VLT, VSX, IRF, VSF 등 명칭과 문법은 제조사 및 운영체제에 따라 다르다.
      실제 장비에는 해당 모델과 버전의 공식 구성 가이드를 적용해야 한다.
    &lt;/p&gt;
  &lt;/aside&gt;

  &lt;h3&gt;Switch A 개념 구성&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;! 1. MLAG peer-link용 포트채널
```

interface Ethernet49
channel-group 1000 mode active

interface Ethernet50
channel-group 1000 mode active

interface Port-Channel1000
description MLAG_PEER_LINK
switchport mode trunk

! 2. MLAG peer 통신용 VLAN 및 SVI
vlan 4094
name MLAG_PEER

interface Vlan4094
ip address 169.254.100.1/30

! 3. MLAG 도메인
mlag configuration
domain-id DC-MLAG-01
local-interface Vlan4094
peer-address 169.254.100.2
peer-link Port-Channel1000
peer-address heartbeat 192.0.2.202

! 4. 서버 연결 포트
interface Ethernet1
description SERVER01_NIC1
channel-group 10 mode active

interface Ethernet2
description SERVER01_NIC2
channel-group 10 mode active

interface Port-Channel10
description SERVER01_BOND0
switchport mode trunk
switchport trunk allowed vlan 100,200
mlag 10&lt;/code&gt;&lt;/pre&gt;

```
  &lt;h3&gt;Switch B 개념 구성&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;interface Ethernet49
```

channel-group 1000 mode active

interface Ethernet50
channel-group 1000 mode active

interface Port-Channel1000
description MLAG_PEER_LINK
switchport mode trunk

vlan 4094
name MLAG_PEER

interface Vlan4094
ip address 169.254.100.2/30

mlag configuration
domain-id DC-MLAG-01
local-interface Vlan4094
peer-address 169.254.100.1
peer-link Port-Channel1000
peer-address heartbeat 192.0.2.201

interface Ethernet1
description SERVER01_NIC3
channel-group 10 mode active

interface Ethernet2
description SERVER01_NIC4
channel-group 10 mode active

interface Port-Channel10
description SERVER01_BOND0
switchport mode trunk
switchport trunk allowed vlan 100,200
mlag 10&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    MLAG Peer Link는 단순한 장애 감지 링크가 아니다.
    MLAG 제어 정보 교환뿐 아니라 토폴로지와 트래픽 방향에 따라 데이터 트래픽을 전달할 수 있으므로,
    장애 상황과 비대칭 트래픽을 고려해 용량을 산정해야 한다. 
  &lt;/p&gt;

  &lt;h3&gt;설정 정합성 항목&lt;/h3&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;두 MLAG 피어에서 반드시 확인할 항목&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;항목&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;요구사항&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;불일치 시 영향&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;MLAG Domain ID&lt;/td&gt;
          &lt;td&gt;동일&lt;/td&gt;
          &lt;td&gt;피어 관계 형성 실패&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;서버 Port-Channel의 MLAG ID&lt;/td&gt;
          &lt;td&gt;동일&lt;/td&gt;
          &lt;td&gt;하나의 논리 LAG로 동작하지 않음&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;VLAN 허용 목록&lt;/td&gt;
          &lt;td&gt;동일&lt;/td&gt;
          &lt;td&gt;특정 VLAN의 단방향 통신 또는 블랙홀&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Native VLAN&lt;/td&gt;
          &lt;td&gt;동일&lt;/td&gt;
          &lt;td&gt;태깅 불일치 및 VLAN 누수&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;MTU&lt;/td&gt;
          &lt;td&gt;경로 전체에서 일치&lt;/td&gt;
          &lt;td&gt;대형 프레임 드롭&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;LACP 모드&lt;/td&gt;
          &lt;td&gt;일반적으로 active 권장&lt;/td&gt;
          &lt;td&gt;LACP 협상 지연 또는 미형성&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;STP 설정&lt;/td&gt;
          &lt;td&gt;벤더 권장값 적용&lt;/td&gt;
          &lt;td&gt;루프 또는 예상치 못한 포트 차단&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;MLAG System ID&lt;/td&gt;
          &lt;td&gt;논리적으로 일관&lt;/td&gt;
          &lt;td&gt;서버 측 Aggregator 분리&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;failure&quot;&gt;
  &lt;h2&gt;장애 시나리오별 동작&lt;/h2&gt;

  &lt;h3&gt;서버 링크 한 개 장애&lt;/h3&gt;
  &lt;p&gt;
    장애 링크는 본드와 포트채널에서 제외되고 나머지 3개 링크가 계속 전달한다.
    집계 물리 용량은 40Gbps에서 30Gbps로 감소한다.
    기존 흐름 중 장애 링크에 배치된 흐름은 남은 링크로 재해시될 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;스위치 한 대 전체 장애&lt;/h3&gt;
  &lt;p&gt;
    장애 스위치에 연결된 2개 링크가 동시에 내려가고, 서버는 나머지 스위치의 2개 링크로 통신을 유지한다.
    정상적인 2:2 구성이라면 집계 물리 용량은 최대 20Gbps로 감소하지만 연결성은 유지되어야 한다.
  &lt;/p&gt;

  &lt;h3&gt;MLAG Peer Link 장애&lt;/h3&gt;
  &lt;p&gt;
    Peer Link만 장애이고 두 스위치가 모두 동작하는 상황은 가장 주의해야 한다.
    두 장비가 서로의 상태를 동기화하지 못하면 Split Brain 또는 Dual-Primary 상황이 발생할 수 있다.
  &lt;/p&gt;

  &lt;p&gt;
    벤더 구현에 따라 Secondary 피어의 MLAG 멤버를 차단하거나, Keepalive 결과를 이용해 특정 포트를 비활성화한다.
    Peer Link와 Keepalive가 동시에 단절되는 경우를 반드시 시험해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;Peer Link와 Keepalive 동시 장애&lt;/h3&gt;
  &lt;p&gt;
    두 스위치가 상대방을 장애로 판단하면서 자신이 Primary라고 동작할 수 있다.
    이 상태에서는 MAC 주소 중복, 잘못된 전달, 루프, ARP 이상 또는 블랙홀 위험이 커진다.
    따라서 Peer Link와 Keepalive는 가능한 한 서로 다른 물리 경로와 장애 영역에 배치한다.
  &lt;/p&gt;

  &lt;h3&gt;서버 NIC 드라이버 또는 펌웨어 이상&lt;/h3&gt;
  &lt;p&gt;
    물리 링크가 Up 상태더라도 실제 패킷 전달이 불가능한 단방향 장애가 발생할 수 있다.
    단순한 링크 캐리어 기반 &lt;code&gt;miimon&lt;/code&gt;만으로 감지되지 않는 장애가 있는지 검토하고,
    스위치 카운터, NIC 오류 카운터 및 상위 헬스 체크를 함께 사용한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;validation&quot;&gt;
  &lt;h2&gt;구성 검증 방법&lt;/h2&gt;

  &lt;h3&gt;1. 물리 링크 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;for nic in enp65s0f0 enp65s0f1 enp129s0f0 enp129s0f1
```

do
echo &quot;===== ${nic} =====&quot;
ethtool &quot;${nic}&quot; | grep -E &quot;Speed|Duplex|Link detected&quot;
done&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;각 NIC가 다음 조건을 만족하는지 확인한다.&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Speed: 10000Mb/s&lt;/li&gt;
    &lt;li&gt;Duplex: Full&lt;/li&gt;
    &lt;li&gt;Link detected: yes&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;2. LACP Aggregator 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat /proc/net/bonding/bond0&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    네 개 멤버의 Aggregator ID가 다르다면 MLAG 또는 LACP 파라미터가 일치하지 않을 가능성이 있다.
    파트너 MAC 주소나 Partner Key가 스위치별로 다르게 표시되는지도 확인한다.
  &lt;/p&gt;

  &lt;h3&gt;3. 포트별 트래픽 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;watch -n 1 '
```

ip -s link show enp65s0f0
ip -s link show enp65s0f1
ip -s link show enp129s0f0
ip -s link show enp129s0f1
'&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    여러 흐름을 발생시킨 상태에서 네 인터페이스의 TX 및 RX 카운터가 모두 증가하는지 확인한다.
    정확히 동일한 비율일 필요는 없지만 한 포트만 지속적으로 포화된다면 해시 분포를 검토해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;4. 다중 스트림 성능 시험&lt;/h3&gt;

  &lt;p&gt;수신 서버에서 다음 명령을 실행한다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;iperf3 -s&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;송신 서버에서는 여러 병렬 스트림으로 시험한다.&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;iperf3 -c 192.0.2.20 -P 16 -t 60
```

iperf3 -c 192.0.2.20 -P 32 -t 60&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    하나의 송신지와 하나의 수신지 조합만으로는 스위치 해시 결과가 제한될 수 있다.
    가능하면 여러 클라이언트, 여러 서버, 서로 다른 포트 번호 및 양방향 트래픽을 사용한다.
  &lt;/p&gt;

  &lt;h3&gt;5. 장애 시험 순서&lt;/h3&gt;

  &lt;ol&gt;
    &lt;li&gt;서버 NIC 케이블 한 개 제거&lt;/li&gt;
    &lt;li&gt;동일 스위치에 연결된 두 링크 중 한 개 차단&lt;/li&gt;
    &lt;li&gt;스위치 A에 연결된 서버 링크 두 개 차단&lt;/li&gt;
    &lt;li&gt;스위치 A 전원 또는 관련 프로세스 장애 시험&lt;/li&gt;
    &lt;li&gt;MLAG Peer Link의 한 멤버 차단&lt;/li&gt;
    &lt;li&gt;MLAG Peer Link 전체 차단&lt;/li&gt;
    &lt;li&gt;Keepalive 경로 차단&lt;/li&gt;
    &lt;li&gt;Peer Link와 Keepalive 동시 단절 시험&lt;/li&gt;
    &lt;li&gt;복구 후 멤버가 자동으로 정상 편입되는지 확인&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h3&gt;6. 패킷 손실과 복구 시간 측정&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ping -D -i 0.1 192.0.2.20
```

# 또는 fping 사용

fping -D -p 100 192.0.2.20&lt;/code&gt;&lt;/pre&gt;

```
  &lt;p&gt;
    단순히 “통신이 다시 된다”는 것만 확인하지 말고 장애 발생 시 손실 패킷 수, 복구 시간,
    TCP 세션 유지 여부 및 애플리케이션 타임아웃을 기록해야 한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;checklist&quot;&gt;
  &lt;h2&gt;운영 체크리스트&lt;/h2&gt;

  &lt;ul class=&quot;checklist&quot;&gt;
    &lt;li&gt;서버의 4개 NIC가 하나의 본드에 직접 포함되어 있다.&lt;/li&gt;
    &lt;li&gt;본드 위에 또 다른 본드를 생성하지 않았다.&lt;/li&gt;
    &lt;li&gt;본딩 모드는 &lt;code&gt;802.3ad&lt;/code&gt;다.&lt;/li&gt;
    &lt;li&gt;네 개의 링크가 동일한 Aggregator에 참여한다.&lt;/li&gt;
    &lt;li&gt;스위치 두 대의 MLAG 상태가 정상이다.&lt;/li&gt;
    &lt;li&gt;서버용 포트채널의 MLAG ID가 양쪽에서 동일하다.&lt;/li&gt;
    &lt;li&gt;VLAN, Native VLAN, MTU, LACP 설정이 양쪽에서 일치한다.&lt;/li&gt;
    &lt;li&gt;Peer Link가 단일 물리 링크에 의존하지 않는다.&lt;/li&gt;
    &lt;li&gt;Keepalive 경로가 Peer Link와 분리되어 있다.&lt;/li&gt;
    &lt;li&gt;Peer Link 용량이 장애 시 발생할 수 있는 트래픽을 감당한다.&lt;/li&gt;
    &lt;li&gt;서버와 스위치의 해시 정책을 검토했다.&lt;/li&gt;
    &lt;li&gt;단일 스트림과 집계 처리량을 구분해 성능 목표를 정의했다.&lt;/li&gt;
    &lt;li&gt;링크 장애와 스위치 장애 시험을 완료했다.&lt;/li&gt;
    &lt;li&gt;Split Brain 방지 동작을 검증했다.&lt;/li&gt;
    &lt;li&gt;운영 중 포트별 트래픽과 오류 카운터를 모니터링한다.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section id=&quot;faq&quot;&gt;
  &lt;h2&gt;자주 묻는 질문&lt;/h2&gt;

  &lt;details&gt;
    &lt;summary&gt;4개의 10G 포트를 본딩하면 단일 파일 전송도 40G가 되는가?&lt;/summary&gt;
    &lt;p&gt;
      일반적으로 그렇지 않다. 하나의 TCP 또는 UDP 흐름은 해시 결과에 따라 하나의 물리 링크를 사용하므로 약 10Gbps 수준으로 제한될 수 있다.
      여러 독립적인 흐름이 네 링크에 분산되어야 총 40Gbps에 가까운 집계 처리량을 기대할 수 있다.
    &lt;/p&gt;
  &lt;/details&gt;

  &lt;details&gt;
    &lt;summary&gt;MLAG 없이 두 스위치에 각각 두 포트를 연결할 수 있는가?&lt;/summary&gt;
    &lt;p&gt;
      active-backup처럼 하나의 스위치만 활성화하는 방식은 가능할 수 있다.
      그러나 두 스위치의 네 포트를 하나의 active-active LACP Aggregator로 사용하려면 두 스위치가 MLAG, MC-LAG, vPC, VLT 또는 이에 준하는 기능을 지원해야 한다.
    &lt;/p&gt;
  &lt;/details&gt;

  &lt;details&gt;
    &lt;summary&gt;스위치 한 대가 장애 나면 40G가 유지되는가?&lt;/summary&gt;
    &lt;p&gt;
      아니다. 2:2 구조에서는 장애 스위치에 연결된 2개의 10G 링크가 제외되므로 남은 집계 물리 용량은 최대 20Gbps다.
      이 구성의 목적은 장애 중에도 40G를 유지하는 것이 아니라 연결성을 유지하면서 성능을 단계적으로 축소하는 것이다.
    &lt;/p&gt;
  &lt;/details&gt;

  &lt;details&gt;
    &lt;summary&gt;Peer Link도 40G 이상이어야 하는가?&lt;/summary&gt;
    &lt;p&gt;
      항상 모든 정상 트래픽이 Peer Link를 통과하는 것은 아니다.
      그러나 비대칭 전달, Single-Attached 장비, 장애 상황 및 특정 제어 동작에서 데이터 트래픽이 Peer Link를 사용할 수 있다.
      실제 예상 트래픽과 장애 모델을 기준으로 용량을 산정하고, 최소 두 개 이상의 물리 링크로 이중화하는 것이 바람직하다.
    &lt;/p&gt;
  &lt;/details&gt;

  &lt;details&gt;
    &lt;summary&gt;Jumbo Frame을 사용하면 모든 구간의 MTU가 같아야 하는가?&lt;/summary&gt;
    &lt;p&gt;
      서버 NIC, 본드, VLAN 인터페이스, 서버 연결 포트채널, MLAG Peer Link 및 종단 간 경로가 대형 프레임을 전달할 수 있어야 한다.
      중간 구간의 MTU가 작으면 대형 프레임이 드롭되거나 통신이 불안정해질 수 있다.
    &lt;/p&gt;
  &lt;/details&gt;

  &lt;details&gt;
    &lt;summary&gt;중첩 본딩이 반드시 동작하지 않는 구성인가?&lt;/summary&gt;
    &lt;p&gt;
      일부 운영체제나 소프트웨어 조합에서는 설정 자체가 가능할 수 있다.
      그러나 다단계 해시, 장애 상태 은폐, 지원 범위 및 운영 복잡성 때문에 동일 목적의 물리 NIC를 하나의 본드에 직접 포함하는 구조가 일반적으로 더 안전하다.
    &lt;/p&gt;
  &lt;/details&gt;
&lt;/section&gt;

&lt;section id=&quot;conclusion&quot;&gt;
  &lt;h2&gt;결론&lt;/h2&gt;
  &lt;p&gt;
    두 대의 스위치와 네 개의 10GbE 서버 포트를 이용해 40G급 집계 네트워크를 구성할 때는
    2포트 본드를 두 개 만든 뒤 다시 상위 본드로 묶는 중첩 구조보다, 네 물리 포트를 하나의 802.3ad 본드에 직접 포함하는 방식이 적합하다.
  &lt;/p&gt;
  &lt;p&gt;
    스위치 측에서는 각 장비에 서버 포트 2개를 배치하고 동일한 MLAG ID로 묶어야 한다.
    이 구조는 정상 상태에서 네 링크를 active-active로 사용할 수 있고, 링크 한 개 장애 시 30G,
    스위치 한 대 장애 시 20G 수준으로 용량을 축소하면서 연결을 유지할 수 있다.
  &lt;/p&gt;
  &lt;p&gt;
    다만 40G는 단일 흐름의 속도가 아니라 여러 흐름이 분산되었을 때의 집계 용량이다.
    구축 후에는 LACP Aggregator 상태, 포트별 카운터, 다중 스트림 처리량, Peer Link 장애 및 Split Brain 방지 동작까지 검증해야 한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;references&quot;&gt;
  &lt;h2&gt;참고 자료&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Linux Kernel Bonding Driver 문서 &lt;/li&gt;
    &lt;li&gt;NVIDIA Cumulus Linux MLAG 문서 &lt;/li&gt;
    &lt;li&gt;Arista EOS Multi-Chassis Link Aggregation 문서 &lt;/li&gt;
    &lt;li&gt;Red Hat Enterprise Linux Network Bond 구성 문서 &lt;/li&gt;
    &lt;li&gt;콘텐츠 생성 구조 및 HTML 출력 원칙 &lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;
```

  &lt;/main&gt;
&lt;/article&gt;

&lt;style&gt;
  .tistory-tech-article {
    max-width: 920px;
    margin: 0 auto;
    color: #202124;
    font-size: 16px;
    line-height: 1.78;
    word-break: keep-all;
    overflow-wrap: break-word;
  }

  .tistory-tech-article header {
    margin-bottom: 32px;
  }

  .tistory-tech-article h1 {
    margin: 8px 0 18px;
    font-size: clamp(1.9rem, 5vw, 2.7rem);
    line-height: 1.3;
  }

  .tistory-tech-article h2 {
    margin: 56px 0 20px;
    padding-bottom: 10px;
    border-bottom: 2px solid #e5e7eb;
    font-size: clamp(1.45rem, 4vw, 1.9rem);
    line-height: 1.4;
  }

  .tistory-tech-article h3 {
    margin: 34px 0 12px;
    font-size: 1.22rem;
    line-height: 1.5;
  }

  .tistory-tech-article p {
    margin: 12px 0;
  }

  .tistory-tech-article a {
    color: #1558d6;
    text-decoration: underline;
    text-underline-offset: 3px;
  }

  .article-category {
    margin: 0;
    font-weight: 700;
  }

  .article-summary {
    font-size: 1.08rem;
  }

  .toc,
  .info-box,
  .warning-box,
  .danger-box {
    margin: 28px 0;
    padding: 20px;
    border: 1px solid #d8dde6;
    border-radius: 10px;
  }

  .warning-box {
    border-left: 5px solid #d97706;
  }

  .danger-box {
    border-left: 5px solid #c62828;
  }

  .info-box {
    border-left: 5px solid #2563eb;
  }

  .toc ol,
  .tistory-tech-article ul,
  .tistory-tech-article ol {
    padding-left: 24px;
  }

  .toc li,
  .tistory-tech-article li {
    margin: 7px 0;
  }

  .table-wrap {
    margin: 24px 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .tistory-tech-article table {
    width: 100%;
    min-width: 640px;
    border-collapse: collapse;
  }

  .tistory-tech-article caption {
    margin-bottom: 10px;
    font-weight: 700;
    text-align: left;
  }

  .tistory-tech-article th,
  .tistory-tech-article td {
    padding: 12px;
    border: 1px solid #d8dde6;
    text-align: left;
    vertical-align: top;
  }

  .tistory-tech-article th {
    font-weight: 700;
  }

  .tistory-tech-article pre {
    margin: 20px 0;
    padding: 18px;
    overflow-x: auto;
    border: 1px solid #d8dde6;
    border-radius: 8px;
    line-height: 1.55;
    white-space: pre;
    tab-size: 2;
  }

  .tistory-tech-article code {
    font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
    font-size: 0.92em;
  }

  .tistory-tech-article p code,
  .tistory-tech-article li code,
  .tistory-tech-article td code {
    padding: 2px 5px;
    border: 1px solid #d8dde6;
    border-radius: 4px;
  }

  .comparison-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin: 24px 0;
  }

  .comparison-grid &gt; div {
    padding: 18px;
    border: 1px solid #d8dde6;
    border-radius: 10px;
  }

  .step-list &gt; li {
    margin-bottom: 18px;
  }

  .checklist {
    list-style: none;
    padding-left: 0 !important;
  }

  .checklist li {
    position: relative;
    padding-left: 28px;
  }

  .checklist li::before {
    position: absolute;
    left: 0;
    content: &quot;✓&quot;;
    font-weight: 700;
  }

  .tistory-tech-article details {
    margin: 14px 0;
    padding: 16px 18px;
    border: 1px solid #d8dde6;
    border-radius: 8px;
  }

  .tistory-tech-article summary {
    cursor: pointer;
    font-weight: 700;
  }

  @media (max-width: 680px) {
    .tistory-tech-article {
      font-size: 15.5px;
    }

    .comparison-grid {
      grid-template-columns: 1fr;
    }

    .toc,
    .info-box,
    .warning-box,
    .danger-box {
      padding: 16px;
    }

    .tistory-tech-article pre {
      padding: 14px;
      font-size: 13px;
    }
  }
&lt;/style&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;중첩 본딩의 위험과 MLAG를 이용한 2:2 단일 본딩 40G 구성 방법&quot;,
  &quot;description&quot;: &quot;중첩 본딩의 구조적 위험을 분석하고 10GbE 포트 4개를 두 대의 MLAG 스위치에 2:2로 연결하여 하나의 40G LACP 본드로 구성하는 방법을 설명합니다.&quot;,
  &quot;inLanguage&quot;: &quot;ko-KR&quot;,
  &quot;keywords&quot;: [
    &quot;MLAG&quot;,
    &quot;중첩 본딩&quot;,
    &quot;Linux bonding&quot;,
    &quot;LACP&quot;,
    &quot;802.3ad&quot;,
    &quot;40G 본딩&quot;,
    &quot;2:2 본딩&quot;,
    &quot;네트워크 이중화&quot;
  ],
  &quot;articleSection&quot;: [
    &quot;중첩 본딩 위험&quot;,
    &quot;MLAG 구성&quot;,
    &quot;Linux LACP 본딩&quot;,
    &quot;40G 네트워크&quot;,
    &quot;장애 검증&quot;
  ],
  &quot;about&quot;: [
    {
      &quot;@type&quot;: &quot;Thing&quot;,
      &quot;name&quot;: &quot;Multi-Chassis Link Aggregation&quot;
    },
    {
      &quot;@type&quot;: &quot;Thing&quot;,
      &quot;name&quot;: &quot;IEEE 802.3ad&quot;
    },
    {
      &quot;@type&quot;: &quot;Thing&quot;,
      &quot;name&quot;: &quot;Linux network bonding&quot;
    }
  ]
}
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/Bonding-%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C-active-backup-%C2%B7-8023ad-%C2%B7-Bond-Mode-%EB%B9%84%EA%B5%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.11.17 - [지식 공유/Server] - Bonding 설정 가이드 (active-backup &amp;middot; 802.3ad &amp;middot; Bond Mode 비교)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784793845001&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Bonding 설정 가이드 (active-backup &amp;middot; 802.3ad &amp;middot; Bond Mode 비교)&quot; data-og-description=&quot;Linux Bonding 구성 가이드 (active-backup &amp;middot; 802.3ad &amp;middot; Bond Mode 비교)Bonding은 서버 네트워크 인터페이스를 묶어 고가용성(HA) 또는 부하 분산(LB)을 제공하는 핵심 기술입니다.본 문서에서는 nmcli 기반 설정 &quot; data-og-host=&quot;one-day-growth.com&quot; data-og-source-url=&quot;https://one-day-growth.com/entry/Bonding-%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C-active-backup-%C2%B7-8023ad-%C2%B7-Bond-Mode-%EB%B9%84%EA%B5%90&quot; data-og-url=&quot;https://one-day-growth.com/entry/Bonding-%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C-active-backup-%C2%B7-8023ad-%C2%B7-Bond-Mode-%EB%B9%84%EA%B5%90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c6vsOv/dJMb9c9K3hr/NbwFo2kVamZpJHzQlrHVT0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/Bonding-%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C-active-backup-%C2%B7-8023ad-%C2%B7-Bond-Mode-%EB%B9%84%EA%B5%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://one-day-growth.com/entry/Bonding-%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C-active-backup-%C2%B7-8023ad-%C2%B7-Bond-Mode-%EB%B9%84%EA%B5%90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c6vsOv/dJMb9c9K3hr/NbwFo2kVamZpJHzQlrHVT0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Bonding 설정 가이드 (active-backup &amp;middot; 802.3ad &amp;middot; Bond Mode 비교)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Linux Bonding 구성 가이드 (active-backup &amp;middot; 802.3ad &amp;middot; Bond Mode 비교)Bonding은 서버 네트워크 인터페이스를 묶어 고가용성(HA) 또는 부하 분산(LB)을 제공하는 핵심 기술입니다.본 문서에서는 nmcli 기반 설정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;one-day-growth.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/LACP-Bonding8023ad&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.11.21 - [지식 공유/Server] - LACP Bonding(802.3ad)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784793850584&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;LACP Bonding(802.3ad)&quot; data-og-description=&quot;LACP 본딩(802.3ad) 1️⃣ LACP 본딩이 단일 NIC보다 무조건 빠른가? 결론부터 말하면 &amp;ldquo;무조건 빠르다&amp;rdquo;는 잘못된 표현이며, 정확한 표현은 환경에 따라 대역폭 확장 + 안정성이 크게 강화되는 구조라&quot; data-og-host=&quot;one-day-growth.com&quot; data-og-source-url=&quot;https://one-day-growth.com/entry/LACP-Bonding8023ad&quot; data-og-url=&quot;https://one-day-growth.com/entry/LACP-Bonding8023ad&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjnVyO/dJMb84Yb10A/liItwuRZGhOB99r9gbiNE1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/LACP-Bonding8023ad&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://one-day-growth.com/entry/LACP-Bonding8023ad&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjnVyO/dJMb84Yb10A/liItwuRZGhOB99r9gbiNE1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;LACP Bonding(802.3ad)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;LACP 본딩(802.3ad) 1️⃣ LACP 본딩이 단일 NIC보다 무조건 빠른가? 결론부터 말하면 &amp;ldquo;무조건 빠르다&amp;rdquo;는 잘못된 표현이며, 정확한 표현은 환경에 따라 대역폭 확장 + 안정성이 크게 강화되는 구조라&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;one-day-growth.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>지식 공유/Server</category>
      <category>40G네트워크</category>
      <category>802.3ad</category>
      <category>LACP</category>
      <category>Linux본딩</category>
      <category>MC-LAG</category>
      <category>MLAG</category>
      <category>네트워크이중화</category>
      <category>링크어그리게이션</category>
      <category>서버네트워크</category>
      <category>중첩본딩</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/595</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%A4%91%EC%B2%A9-%EB%B3%B8%EB%94%A9%EC%9D%98-%EC%9C%84%ED%97%98%EA%B3%BC-MLAG%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-22-%EB%8B%A8%EC%9D%BC-%EB%B3%B8%EB%94%A9-40G-%EA%B5%AC%EC%84%B1-%EB%B0%A9%EB%B2%95#entry595comment</comments>
      <pubDate>Thu, 23 Jul 2026 17:10:52 +0900</pubDate>
    </item>
    <item>
      <title>오라클 이중화 리스너 Fail-Over 스크립트 적용</title>
      <link>https://togethergrow.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%9D%B4%EC%A4%91%ED%99%94-%EB%A6%AC%EC%8A%A4%EB%84%88-Fail-Over-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%81%EC%9A%A9</link>
      <description>&lt;style&gt;
  .oracle-ha-post {
    max-width: 920px;
    margin: 0 auto;
    color: #222;
    font-size: 16px;
    line-height: 1.75;
    word-break: keep-all;
  }

  .oracle-ha-post * {
    box-sizing: border-box;
  }

  .oracle-ha-post h1,
  .oracle-ha-post h2,
  .oracle-ha-post h3 {
    line-height: 1.4;
    color: #151515;
  }

  .oracle-ha-post h1 {
    margin: 0 0 24px;
    font-size: 2rem;
  }

  .oracle-ha-post h2 {
    margin: 48px 0 18px;
    padding-bottom: 10px;
    border-bottom: 2px solid #e5e5e5;
    font-size: 1.55rem;
  }

  .oracle-ha-post h3 {
    margin: 32px 0 12px;
    font-size: 1.2rem;
  }

  .oracle-ha-post p {
    margin: 12px 0;
  }

  .oracle-ha-post ul,
  .oracle-ha-post ol {
    padding-left: 24px;
  }

  .oracle-ha-post li {
    margin: 7px 0;
  }

  .oracle-ha-post code {
    padding: 2px 5px;
    border-radius: 4px;
    background: #f3f4f6;
    font-family: Consolas, Monaco, monospace;
    font-size: 0.92em;
  }

  .oracle-ha-post pre {
    overflow-x: auto;
    margin: 18px 0;
    padding: 18px;
    border-radius: 8px;
    background: #1f2329;
    color: #f3f3f3;
    line-height: 1.55;
    white-space: pre;
  }

  .oracle-ha-post pre code {
    padding: 0;
    background: transparent;
    color: inherit;
    font-size: 14px;
  }

  .oracle-ha-post .summary-box,
  .oracle-ha-post .notice-box,
  .oracle-ha-post .warning-box {
    margin: 22px 0;
    padding: 18px 20px;
    border-radius: 8px;
  }

  .oracle-ha-post .summary-box {
    border-left: 5px solid #2563eb;
    background: #eff6ff;
  }

  .oracle-ha-post .notice-box {
    border-left: 5px solid #059669;
    background: #ecfdf5;
  }

  .oracle-ha-post .warning-box {
    border-left: 5px solid #dc2626;
    background: #fef2f2;
  }

  .oracle-ha-post .table-wrap {
    overflow-x: auto;
    margin: 20px 0;
  }

  .oracle-ha-post table {
    width: 100%;
    min-width: 640px;
    border-collapse: collapse;
  }

  .oracle-ha-post caption {
    margin-bottom: 10px;
    text-align: left;
    font-weight: 700;
  }

  .oracle-ha-post th,
  .oracle-ha-post td {
    padding: 12px;
    border: 1px solid #d9d9d9;
    text-align: left;
    vertical-align: top;
  }

  .oracle-ha-post th {
    background: #f7f7f7;
  }

  .oracle-ha-post a {
    color: #1d4ed8;
    text-decoration: underline;
  }

  .oracle-ha-post .checklist {
    padding: 18px 20px 18px 42px;
    border: 1px solid #dedede;
    border-radius: 8px;
    background: #fafafa;
  }

  .oracle-ha-post .tag-list {
    margin-top: 42px;
    padding-top: 18px;
    border-top: 1px solid #e5e5e5;
    color: #555;
  }

  @media (max-width: 640px) {
    .oracle-ha-post {
      font-size: 15px;
      line-height: 1.7;
    }

    .oracle-ha-post h1 {
      font-size: 1.65rem;
    }

    .oracle-ha-post h2 {
      font-size: 1.35rem;
    }

    .oracle-ha-post pre {
      padding: 14px;
    }
  }
&lt;/style&gt;&lt;main class=&quot;oracle-ha-post&quot;&gt;
  &lt;article&gt;
    &lt;header&gt;
      &lt;h1&gt;오라클 이중화 리스너 Failover 스크립트 적용하기&lt;/h1&gt;&lt;p&gt;
    오라클 데이터베이스를 이중화했더라도 애플리케이션이 장애가 발생한 리스너 주소만 계속 바라보고 있다면
    실제 서비스 전환은 이루어지지 않는다. 이 글에서는 운영 서버에서 Oracle Listener와 데이터베이스 서비스를
    점검한 뒤 애플리케이션용 TNS 접속 정보를 자동으로 전환하는 Failover 스크립트를 구성한다.
  &lt;/p&gt;

  &lt;div class=&quot;summary-box&quot;&gt;
    &lt;strong&gt;핵심 구성&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;Primary와 Standby 접속 별칭을 각각 구성한다.&lt;/li&gt;
      &lt;li&gt;단순 포트가 아니라 실제 SQL 접속 결과로 정상 여부를 판단한다.&lt;/li&gt;
      &lt;li&gt;정상 노드의 접속 정보를 임시 파일에 생성한 후 원자적으로 교체한다.&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;flock&lt;/code&gt;으로 스크립트 중복 실행을 방지한다.&lt;/li&gt;
      &lt;li&gt;cron 또는 systemd timer로 주기적인 상태 점검을 수행한다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/header&gt;

&lt;section&gt;
  &lt;h2&gt;먼저 확인할 점: 스크립트보다 Oracle Net Failover가 우선이다&lt;/h2&gt;

  &lt;p&gt;
    Oracle Net은 하나의 접속 기술자에 여러 리스너 주소를 정의하고
    &lt;code&gt;FAILOVER=ON&lt;/code&gt;을 설정하는 Connect-Time Failover 기능을 제공한다.
    여러 주소가 설정된 경우 첫 번째 주소 연결에 실패하면 다음 주소로 연결을 시도할 수 있다.
    &lt;code&gt;LOAD_BALANCE=OFF&lt;/code&gt;를 함께 설정하면 주소가 작성된 순서대로 접속을 시도한다.
    0
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;APPDB =

(DESCRIPTION = (CONNECT_TIMEOUT = 5) (TRANSPORT_CONNECT_TIMEOUT = 3) (RETRY_COUNT = 1) (ADDRESS_LIST = (LOAD_BALANCE = OFF) (FAILOVER = ON) (ADDRESS = (PROTOCOL = TCP)(HOST = db-primary.example.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = db-standby.example.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = appdb_service) ) )&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    신규 연결만 전환하면 되는 환경에서는 위와 같은 Oracle Net 설정이 스크립트보다 단순하고 안정적이다.
    &lt;code&gt;CONNECT_TIMEOUT&lt;/code&gt;과 &lt;code&gt;TRANSPORT_CONNECT_TIMEOUT&lt;/code&gt;은 접속 실패를 감지하는 시간을 제한하며,
    타임아웃 값은 네트워크 지연과 리스너 처리 시간을 고려해 운영 환경에서 조정해야 한다.
    1
  &lt;/p&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    &lt;strong&gt;주의:&lt;/strong&gt;
    Connect-Time Failover는 새로운 접속을 다른 주소로 시도하는 기능이다.
    이미 실행 중인 세션이나 처리 중인 트랜잭션을 자동으로 다른 데이터베이스에 옮기는 기능은 아니다.
    기존 세션 보호가 필요하면 RAC, Data Guard, FAN, Application Continuity 또는 애플리케이션의 재연결 정책을
    별도로 검토해야 한다.
  &lt;/div&gt;

  &lt;p&gt;
    다음과 같은 레거시 환경에서는 운영 스크립트를 함께 사용할 수 있다.
  &lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;애플리케이션이 다중 &lt;code&gt;ADDRESS_LIST&lt;/code&gt; 접속 문자열을 지원하지 않는 경우&lt;/li&gt;
    &lt;li&gt;항상 하나의 고정된 TNS 별칭만 사용해야 하는 경우&lt;/li&gt;
    &lt;li&gt;주 서버 복구 후 자동 원복 여부를 운영 정책으로 제어해야 하는 경우&lt;/li&gt;
    &lt;li&gt;전환 이력과 장애 감지 결과를 별도 로그로 관리해야 하는 경우&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;구성 시나리오&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;예제 운영 환경&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;구분&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;Primary&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;Standby&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;호스트&lt;/th&gt;
          &lt;td&gt;&lt;code&gt;db-primary.example.com&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;db-standby.example.com&lt;/code&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;리스너 포트&lt;/th&gt;
          &lt;td&gt;&lt;code&gt;1521&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;1521&lt;/code&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;서비스 이름&lt;/th&gt;
          &lt;td&gt;&lt;code&gt;appdb_service&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;appdb_service&lt;/code&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;점검 별칭&lt;/th&gt;
          &lt;td&gt;&lt;code&gt;DB_PRIMARY_CHECK&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;DB_STANDBY_CHECK&lt;/code&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;애플리케이션 별칭&lt;/th&gt;
          &lt;td colspan=&quot;2&quot;&gt;&lt;code&gt;APPDB&lt;/code&gt;&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;
    이 스크립트는 애플리케이션 서버에서 실행한다.
    Oracle Client와 SQL*Plus가 설치되어 있고, &lt;code&gt;TNS_ADMIN&lt;/code&gt; 디렉터리를 애플리케이션이 동일하게 사용한다는
    전제다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;1. 작업 디렉터리 생성&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo mkdir -p /opt/app/oracle/network/admin

sudo mkdir -p /var/log/oracle-failover sudo chown -R appuser:appgroup /opt/app/oracle/network sudo chown -R appuser:appgroup /var/log/oracle-failover sudo chmod 750 /opt/app/oracle/network/admin sudo chmod 750 /var/log/oracle-failover&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    예제의 실행 계정은 &lt;code&gt;appuser&lt;/code&gt;다. 실제 운영 환경에서는 Oracle Client를 사용하는 애플리케이션 계정에
    맞게 소유자와 권한을 변경한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;2. 상태 점검용 TNS 별칭 구성&lt;/h2&gt;

  &lt;p&gt;
    다음 파일은 스크립트가 유지해야 할 고정 설정이다. 애플리케이션용 &lt;code&gt;APPDB&lt;/code&gt; 항목은 스크립트가
    이 파일 뒤에 추가한다.
  &lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;파일:&lt;/strong&gt; &lt;code&gt;/opt/app/oracle/network/admin/tnsnames.static.ora&lt;/code&gt;&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;DB_PRIMARY_CHECK =

(DESCRIPTION = (CONNECT_TIMEOUT = 5) (TRANSPORT_CONNECT_TIMEOUT = 3) (RETRY_COUNT = 0) (ADDRESS = (PROTOCOL = TCP) (HOST = db-primary.example.com) (PORT = 1521) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = appdb_service) ) )

DB_STANDBY_CHECK = (DESCRIPTION = (CONNECT_TIMEOUT = 5) (TRANSPORT_CONNECT_TIMEOUT = 3) (RETRY_COUNT = 0) (ADDRESS = (PROTOCOL = TCP) (HOST = db-standby.example.com) (PORT = 1521) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = appdb_service) ) )&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    &lt;code&gt;lsnrctl status&lt;/code&gt;는 리스너 상태와 등록 서비스 정보를 확인할 때 유용하다.
    다만 애플리케이션 서버에서 실제 서비스 접속 가능 여부까지 판단하려면 SQL*Plus로
    &lt;code&gt;SELECT 1 FROM DUAL&lt;/code&gt;을 실행하는 방식이 더 적합하다.
    Oracle 문서에서도 &lt;code&gt;STATUS&lt;/code&gt;는 리스너 상태를, &lt;code&gt;SERVICES&lt;/code&gt;는 등록된 서비스와 인스턴스를
    확인하는 명령으로 구분한다. 2
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;3. 최초 tnsnames.ora 생성&lt;/h2&gt;

  &lt;p&gt;
    스크립트가 처음 실행되기 전에도 상태 점검 별칭을 찾을 수 있도록 고정 파일을
    &lt;code&gt;tnsnames.ora&lt;/code&gt;로 복사한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp /opt/app/oracle/network/admin/tnsnames.static.ora \

/opt/app/oracle/network/admin/tnsnames.ora

chmod 640 /opt/app/oracle/network/admin/tnsnames.static.ora chmod 640 /opt/app/oracle/network/admin/tnsnames.ora&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;notice-box&quot;&gt;
    &lt;strong&gt;TNS_ADMIN 적용:&lt;/strong&gt;
    애플리케이션과 스크립트 모두
    &lt;code&gt;/opt/app/oracle/network/admin&lt;/code&gt;을 &lt;code&gt;TNS_ADMIN&lt;/code&gt;으로 사용해야 한다.
    Oracle Client는 &lt;code&gt;TNS_ADMIN&lt;/code&gt;이 설정되어 있으면 해당 디렉터리의
    &lt;code&gt;tnsnames.ora&lt;/code&gt;를 우선 확인한다. 3
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;4. DB 계정 비밀번호를 스크립트에 작성하지 않는다&lt;/h2&gt;

  &lt;p&gt;
    운영 스크립트 안에 데이터베이스 사용자명과 비밀번호를 평문으로 저장하면 안 된다.
    예제는 Oracle Wallet의 외부 인증 정보를 사용해 다음 형식으로 접속한다고 가정한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sqlplus -L -s /@DB_PRIMARY_CHECK&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    Wallet을 사용하지 않는 환경이라면 보안팀 정책에 맞는 Secret Manager나 자격 증명 공급 방식을 적용해야 한다.
    환경 변수에 비밀번호를 직접 노출하거나 명령행 인수로 전달하는 방식도 운영 서버에서는 피하는 것이 좋다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;5. Listener Failover 스크립트 작성&lt;/h2&gt;

  &lt;p&gt;&lt;strong&gt;파일:&lt;/strong&gt; &lt;code&gt;/opt/app/oracle/bin/oracle-listener-failover.sh&lt;/code&gt;&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/usr/bin/env bash

set -Eeuo pipefail umask 027

------------------------------------------------------------

Oracle Client 환경

------------------------------------------------------------

ORACLE_HOME=&quot;/opt/oracle/instantclient&quot; TNS_ADMIN=&quot;/opt/app/oracle/network/admin&quot; PATH=&quot;${ORACLE_HOME}:${PATH}&quot;

export ORACLE_HOME export TNS_ADMIN export PATH

------------------------------------------------------------

TNS 및 상태 파일

------------------------------------------------------------

STATIC_TNS=&quot;${TNS_ADMIN}/tnsnames.static.ora&quot; ACTIVE_TNS=&quot;${TNS_ADMIN}/tnsnames.ora&quot; STATE_FILE=&quot;${TNS_ADMIN}/.active-db&quot; LOCK_FILE=&quot;/var/run/oracle-listener-failover.lock&quot; LOG_FILE=&quot;/var/log/oracle-failover/failover.log&quot;

PRIMARY_ALIAS=&quot;DB_PRIMARY_CHECK&quot; STANDBY_ALIAS=&quot;DB_STANDBY_CHECK&quot; APP_ALIAS=&quot;APPDB&quot;

PRIMARY_HOST=&quot;db-primary.example.com&quot; STANDBY_HOST=&quot;db-standby.example.com&quot; LISTENER_PORT=&quot;1521&quot; SERVICE_NAME=&quot;appdb_service&quot;

SQL*Plus 프로세스 전체 제한 시간

CHECK_TIMEOUT=&quot;10&quot;

true: Primary가 복구되면 자동 원복

false: Standby 사용 중에는 Standby 장애 전까지 유지

AUTO_FAILBACK=&quot;false&quot;

------------------------------------------------------------

공통 함수

------------------------------------------------------------

log() { local level=&quot;$1&quot; shift

printf '%s [%s] %s\n' 
&quot;$(date '+%Y-%m-%d %H:%M:%S')&quot; 
&quot;${level}&quot; 
&quot;$*&quot; | tee -a &quot;${LOG_FILE}&quot; }

validate_environment() { if [[ ! -x &quot;${ORACLE_HOME}/sqlplus&quot; ]]; then log &quot;ERROR&quot; &quot;sqlplus 실행 파일을 찾을 수 없습니다: ${ORACLE_HOME}/sqlplus&quot; exit 10 fi

if [[ ! -r &quot;${STATIC_TNS}&quot; ]]; then log &quot;ERROR&quot; &quot;고정 TNS 파일을 읽을 수 없습니다: ${STATIC_TNS}&quot; exit 11 fi

mkdir -p &quot;$(dirname &quot;${LOG_FILE}&quot;)&quot; }

check_database() { local alias=&quot;$1&quot;

timeout &quot;${CHECK_TIMEOUT}&quot; 
&quot;${ORACLE_HOME}/sqlplus&quot; -L -s &quot;/@${alias}&quot; &gt;/dev/null 2&gt;&amp;1 &lt;&lt;'SQL' WHENEVER OSERROR EXIT FAILURE ROLLBACK WHENEVER SQLERROR EXIT FAILURE ROLLBACK

SET HEADING OFF SET FEEDBACK OFF SET PAGESIZE 0 SET VERIFY OFF SET ECHO OFF

SELECT 1 FROM dual;

EXIT SUCCESS SQL }

write_app_alias() { local target=&quot;$1&quot; local host=&quot;&quot; local temp_file=&quot;&quot;

case &quot;${target}&quot; in PRIMARY) host=&quot;${PRIMARY_HOST}&quot; ;; STANDBY) host=&quot;${STANDBY_HOST}&quot; ;; *) log &quot;ERROR&quot; &quot;지원하지 않는 전환 대상입니다: ${target}&quot; return 1 ;; esac

temp_file=&quot;$(mktemp &quot;${TNS_ADMIN}/tnsnames.ora.tmp.XXXXXX&quot;)&quot;

{ cat &quot;${STATIC_TNS}&quot;

cat &amp;lt;&amp;lt;EOF

${APP_ALIAS} = (DESCRIPTION = (CONNECT_TIMEOUT = 5) (TRANSPORT_CONNECT_TIMEOUT = 3) (RETRY_COUNT = 1) (ADDRESS = (PROTOCOL = TCP) (HOST = ${host}) (PORT = ${LISTENER_PORT}) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ${SERVICE_NAME}) ) ) EOF } &gt;&quot;${temp_file}&quot;

chmod 640 &quot;${temp_file}&quot;

같은 파일시스템에서 mv를 사용해 설정 파일을 원자적으로 교체한다.

mv -f &quot;${temp_file}&quot; &quot;${ACTIVE_TNS}&quot;

printf '%s\n' &quot;${target}&quot; &gt;&quot;${STATE_FILE}&quot; chmod 640 &quot;${STATE_FILE}&quot;

log &quot;INFO&quot; &quot;${APP_ALIAS} 접속 대상을 ${target}(${host})로 설정했습니다.&quot; }

read_current_target() { if [[ -r &quot;${STATE_FILE}&quot; ]]; then tr -d '[:space:]' &lt;&quot;${STATE_FILE}&quot; else printf '%s\n' &quot;UNKNOWN&quot; fi }

select_target() { local current_target=&quot;$1&quot;

자동 원복을 사용하는 경우 Primary를 항상 먼저 점검한다.

if [[ &quot;${AUTO_FAILBACK}&quot; == &quot;true&quot; ]]; then if check_database &quot;${PRIMARY_ALIAS}&quot;; then printf '%s\n' &quot;PRIMARY&quot; return 0 fi

if check_database &quot;${STANDBY_ALIAS}&quot;; then
  printf '%s\n' &quot;STANDBY&quot;
  return 0
fi

return 1

fi

자동 원복을 사용하지 않고 현재 Standby인 경우 Standby를 우선 유지한다.

if [[ &quot;${current_target}&quot; == &quot;STANDBY&quot; ]]; then if check_database &quot;${STANDBY_ALIAS}&quot;; then printf '%s\n' &quot;STANDBY&quot; return 0 fi

if check_database &quot;${PRIMARY_ALIAS}&quot;; then
  printf '%s\n' &quot;PRIMARY&quot;
  return 0
fi

return 1

fi

최초 실행 또는 현재 Primary인 경우 Primary를 먼저 점검한다.

if check_database &quot;${PRIMARY_ALIAS}&quot;; then printf '%s\n' &quot;PRIMARY&quot; return 0 fi

if check_database &quot;${STANDBY_ALIAS}&quot;; then printf '%s\n' &quot;STANDBY&quot; return 0 fi

return 1 }

main() { local current_target=&quot;&quot; local selected_target=&quot;&quot;

validate_environment

동일 스크립트의 중복 실행을 방지한다.

exec 9&gt;&quot;${LOCK_FILE}&quot;

if ! flock -n 9; then log &quot;WARN&quot; &quot;이전 Failover 점검 프로세스가 실행 중이므로 종료합니다.&quot; exit 20 fi

current_target=&quot;$(read_current_target)&quot; log &quot;INFO&quot; &quot;점검을 시작합니다. 현재 대상=${current_target}&quot;

if ! selected_target=&quot;$(select_target &quot;${current_target}&quot;)&quot;; then log &quot;ERROR&quot; &quot;Primary와 Standby 모두 SQL 접속에 실패했습니다.&quot;

# 양쪽 모두 실패한 경우 기존 설정을 임의로 변경하지 않는다.
exit 30

fi

if [[ &quot;${selected_target}&quot; == &quot;${current_target}&quot; ]] 
&amp;&amp; [[ -s &quot;${ACTIVE_TNS}&quot; ]]; then log &quot;INFO&quot; &quot;현재 대상이 정상입니다. 설정 변경 없이 종료합니다.&quot; exit 0 fi

write_app_alias &quot;${selected_target}&quot; log &quot;INFO&quot; &quot;Failover 점검을 정상적으로 완료했습니다.&quot; }

main &quot;$@&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    스크립트는 두 데이터베이스 모두 접속에 실패했을 때 기존 &lt;code&gt;tnsnames.ora&lt;/code&gt;를 유지한다.
    장애 판단이 불가능한 상황에서 임의의 접속 대상으로 변경하지 않기 위한 조치다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;6. 실행 권한과 디렉터리 권한 설정&lt;/h2&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo mkdir -p /opt/app/oracle/bin

sudo chown appuser:appgroup 
/opt/app/oracle/bin/oracle-listener-failover.sh

sudo chmod 750 
/opt/app/oracle/bin/oracle-listener-failover.sh&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    로그 파일과 TNS 파일에는 데이터베이스 구성 정보가 포함될 수 있으므로 일반 사용자에게 쓰기 권한을
    부여하지 않는다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;7. 수동 실행 테스트&lt;/h2&gt;

  &lt;h3&gt;구문 검사&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash -n /opt/app/oracle/bin/oracle-listener-failover.sh&lt;/code&gt;&lt;/pre&gt;

  &lt;h3&gt;실행 테스트&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo -u appuser \

/opt/app/oracle/bin/oracle-listener-failover.sh&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;생성된 접속 정보 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat /opt/app/oracle/network/admin/.active-db

grep -A 15 '^APPDB' 
/opt/app/oracle/network/admin/tnsnames.ora&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;애플리케이션 별칭으로 SQL 접속 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export TNS_ADMIN=/opt/app/oracle/network/admin

sqlplus -L -s /@APPDB &lt;&lt;'SQL' SET HEADING OFF SET FEEDBACK OFF SELECT sys_context('USERENV', 'DB_UNIQUE_NAME') FROM dual; EXIT SQL&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
    출력된 &lt;code&gt;DB_UNIQUE_NAME&lt;/code&gt;을 확인하면 실제로 어느 데이터베이스에 접속했는지 검증할 수 있다.
    운영 환경에 따라 &lt;code&gt;DATABASE_ROLE&lt;/code&gt;도 함께 확인할 수 있다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;SELECT
name,
db_unique_name,
database_role,
open_mode

FROM v$database;&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;8. cron으로 주기 실행&lt;/h2&gt;

  &lt;p&gt;
    예를 들어 1분마다 상태를 점검하려면 애플리케이션 계정의 crontab에 다음 항목을 추가한다.
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;crontab -e&lt;/code&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;* * * * * /opt/app/oracle/bin/oracle-listener-failover.sh &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    스크립트 자체에서 로그를 기록하므로 cron 출력은 별도로 저장하지 않았다.
    단, 운영 표준에 따라 syslog 또는 중앙 로그 수집 시스템으로 전달하도록 변경할 수 있다.
  &lt;/p&gt;

  &lt;div class=&quot;warning-box&quot;&gt;
    cron의 실행 환경에는 로그인 셸의 환경 변수가 자동으로 적용되지 않는다.
    따라서 스크립트 내부에서 &lt;code&gt;ORACLE_HOME&lt;/code&gt;, &lt;code&gt;TNS_ADMIN&lt;/code&gt;,
    &lt;code&gt;PATH&lt;/code&gt;를 명시해야 한다.
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;9. systemd timer로 실행하는 방법&lt;/h2&gt;

  &lt;p&gt;
    장애 처리 로그와 실행 상태를 systemd에서 관리하려면 cron 대신 timer를 사용할 수 있다.
  &lt;/p&gt;

  &lt;h3&gt;Service 파일&lt;/h3&gt;

  &lt;p&gt;&lt;code&gt;/etc/systemd/system/oracle-listener-failover.service&lt;/code&gt;&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[Unit]

Description=Oracle Listener Failover Check After=network-online.target Wants=network-online.target

[Service] Type=oneshot User=appuser Group=appgroup ExecStart=/opt/app/oracle/bin/oracle-listener-failover.sh TimeoutStartSec=30

[Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Timer 파일&lt;/h3&gt;

  &lt;p&gt;&lt;code&gt;/etc/systemd/system/oracle-listener-failover.timer&lt;/code&gt;&lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[Unit]

Description=Run Oracle Listener Failover Check Every Minute

[Timer] OnBootSec=30s OnUnitActiveSec=60s AccuracySec=5s Persistent=true Unit=oracle-listener-failover.service

[Install] WantedBy=timers.target&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;등록 및 실행&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl daemon-reload

sudo systemctl enable --now oracle-listener-failover.timer

sudo systemctl status oracle-listener-failover.timer sudo systemctl list-timers oracle-listener-failover.timer&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;실행 로그 확인&lt;/h3&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo journalctl \

-u oracle-listener-failover.service 
--since today&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;10. 실제 장애 전환 테스트&lt;/h2&gt;

  &lt;p&gt;
    운영 반영 전에는 반드시 별도의 검증 환경에서 장애 상황을 재현한다.
    단순히 리스너 프로세스를 중지하는 것뿐 아니라 네트워크 단절, 서비스 미등록, 데이터베이스 미오픈 상태도
    구분해서 확인해야 한다.
  &lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;Primary와 Standby가 모두 정상인 상태에서 Primary가 선택되는지 확인한다.&lt;/li&gt;
    &lt;li&gt;Primary 리스너를 중지하거나 테스트 방화벽으로 1521 포트를 차단한다.&lt;/li&gt;
    &lt;li&gt;스크립트 실행 후 &lt;code&gt;.active-db&lt;/code&gt; 값이 &lt;code&gt;STANDBY&lt;/code&gt;인지 확인한다.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;APPDB&lt;/code&gt; 별칭으로 새로운 SQL 접속이 가능한지 확인한다.&lt;/li&gt;
    &lt;li&gt;애플리케이션 커넥션 풀의 기존 연결이 제거되고 재생성되는지 확인한다.&lt;/li&gt;
    &lt;li&gt;Primary를 복구한 후 자동 원복 정책에 맞게 동작하는지 확인한다.&lt;/li&gt;
    &lt;li&gt;양쪽 접속을 모두 차단했을 때 기존 TNS 설정이 유지되는지 확인한다.&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;
    리스너의 현재 상태는 &lt;code&gt;lsnrctl STATUS&lt;/code&gt;로 확인할 수 있으며,
    등록 서비스와 인스턴스 정보는 &lt;code&gt;lsnrctl SERVICES&lt;/code&gt;로 확인할 수 있다.
    4
  &lt;/p&gt;

  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;lsnrctl status LISTENER

lsnrctl services LISTENER&lt;/code&gt;&lt;/pre&gt; &lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;운영 환경에서 반드시 보완할 항목&lt;/h2&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;Failover 스크립트 운영 체크 항목&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;항목&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;권장 사항&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;장애 판정&lt;/th&gt;
          &lt;td&gt;포트 점검만 사용하지 말고 실제 서비스명으로 SQL 접속을 수행한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;오탐 방지&lt;/th&gt;
          &lt;td&gt;한 번의 실패로 즉시 전환하지 않고 연속 실패 횟수 또는 모니터링 시스템 결과를 반영한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;자동 원복&lt;/th&gt;
          &lt;td&gt;Primary 복구 즉시 원복할지 운영자 승인 후 원복할지 사전에 결정한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;DB 역할 확인&lt;/th&gt;
          &lt;td&gt;Standby가 실제 서비스 제공이 가능한 역할과 Open Mode인지 확인한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;커넥션 풀&lt;/th&gt;
          &lt;td&gt;TNS 파일 변경만으로 기존 커넥션이 바뀌지 않으므로 연결 검증과 재생성 정책을 적용한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;동시 실행&lt;/th&gt;
          &lt;td&gt;&lt;code&gt;flock&lt;/code&gt;이나 systemd 실행 제어로 중복 파일 변경을 방지한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;설정 파일 교체&lt;/th&gt;
          &lt;td&gt;임시 파일을 완성한 뒤 동일 파일시스템에서 &lt;code&gt;mv&lt;/code&gt;로 교체한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;인증 정보&lt;/th&gt;
          &lt;td&gt;비밀번호를 스크립트에 넣지 말고 Wallet 또는 승인된 Secret 저장소를 사용한다.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;row&quot;&gt;모니터링&lt;/th&gt;
          &lt;td&gt;전환 성공, 양쪽 장애, 자동 원복 발생 시 운영 알림을 전송한다.&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;Failover가 적용됐는데도 접속이 바뀌지 않는 원인&lt;/h2&gt;

  &lt;h3&gt;기존 커넥션 풀이 남아 있는 경우&lt;/h3&gt;

  &lt;p&gt;
    &lt;code&gt;tnsnames.ora&lt;/code&gt; 변경은 이후 생성되는 연결에 적용된다.
    애플리케이션 서버가 기존 커넥션을 계속 재사용하면 접속 대상이 즉시 바뀌지 않을 수 있다.
    커넥션 검증 쿼리, 연결 최대 수명, 장애 연결 제거 정책을 함께 설정해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;TNS_ADMIN 경로가 다른 경우&lt;/h3&gt;

  &lt;p&gt;
    스크립트가 수정하는 파일과 애플리케이션이 읽는 파일이 다르면 전환 효과가 없다.
    애플리케이션 프로세스의 환경 변수와 Oracle Client 설정을 기준으로 실제
    &lt;code&gt;tnsnames.ora&lt;/code&gt; 위치를 확인한다.
  &lt;/p&gt;

  &lt;h3&gt;리스너는 정상이나 서비스가 등록되지 않은 경우&lt;/h3&gt;

  &lt;p&gt;
    TCP 1521 포트가 열려 있더라도 요청한 &lt;code&gt;SERVICE_NAME&lt;/code&gt;이 리스너에 등록되지 않으면
    애플리케이션 연결은 실패한다. 따라서 단순 포트 점검이 아니라 SQL 접속 또는
    &lt;code&gt;lsnrctl services&lt;/code&gt; 결과를 확인해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;Standby가 Read Only 또는 Mounted 상태인 경우&lt;/h3&gt;

  &lt;p&gt;
    리스너 접속 가능 여부와 업무 수행 가능 여부는 다르다.
    Data Guard 구성에서는 데이터베이스 역할과 &lt;code&gt;OPEN_MODE&lt;/code&gt;, 서비스 시작 조건을 기준으로
    서비스 제공 가능 여부를 검증해야 한다.
  &lt;/p&gt;

  &lt;h3&gt;자동 원복으로 접속이 반복 전환되는 경우&lt;/h3&gt;

  &lt;p&gt;
    Primary 상태가 불안정할 때 자동 원복을 활성화하면 Primary와 Standby 사이에서 접속 대상이 반복 변경될 수 있다.
    운영 환경에서는 연속 성공 횟수, 안정화 대기 시간 또는 운영자 승인 절차를 추가하는 것이 안전하다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;최종 점검 체크리스트&lt;/h2&gt;

  &lt;ul class=&quot;checklist&quot;&gt;
    &lt;li&gt;Primary와 Standby에 동일한 업무용 서비스 이름이 준비되어 있는가?&lt;/li&gt;
    &lt;li&gt;스크립트가 사용하는 접속 계정에 최소 권한만 부여했는가?&lt;/li&gt;
    &lt;li&gt;비밀번호가 소스와 프로세스 목록에 노출되지 않는가?&lt;/li&gt;
    &lt;li&gt;애플리케이션과 스크립트가 동일한 &lt;code&gt;TNS_ADMIN&lt;/code&gt;을 사용하는가?&lt;/li&gt;
    &lt;li&gt;양쪽 리스너 장애 시 기존 설정을 유지하는가?&lt;/li&gt;
    &lt;li&gt;전환 로그와 운영 알림이 정상적으로 생성되는가?&lt;/li&gt;
    &lt;li&gt;커넥션 풀이 장애 연결을 폐기하고 새 연결을 생성하는가?&lt;/li&gt;
    &lt;li&gt;Primary 복구 후 자동 원복 정책이 명확한가?&lt;/li&gt;
    &lt;li&gt;스위치오버와 비정상 Failover 시나리오를 각각 테스트했는가?&lt;/li&gt;
    &lt;li&gt;롤백 절차와 수동 전환 절차를 운영 문서에 기록했는가?&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;정리&lt;/h2&gt;

  &lt;p&gt;
    오라클 이중화 환경에서는 우선 다중 &lt;code&gt;ADDRESS&lt;/code&gt;와
    &lt;code&gt;FAILOVER=ON&lt;/code&gt;을 이용한 Oracle Net Connect-Time Failover 적용을 검토하는 것이 좋다.
    Oracle은 고가용성 접속 문자열에서 접속 타임아웃과 재시도 설정을 함께 사용하는 구성을 안내하고 있다.
    5
  &lt;/p&gt;

  &lt;p&gt;
    레거시 애플리케이션처럼 하나의 고정 접속 정보만 사용할 수 있다면 상태 점검 스크립트로
    애플리케이션용 TNS 별칭을 전환할 수 있다. 이때 장애 판단 기준은 리스너 포트가 아니라 실제 SQL 접속이어야 하며,
    설정 파일은 임시 파일 작성 후 원자적으로 교체해야 한다.
  &lt;/p&gt;

  &lt;p&gt;
    마지막으로 TNS 전환은 새로운 데이터베이스 연결의 목적지를 변경하는 작업이다.
    기존 세션과 처리 중인 트랜잭션까지 보호하려면 데이터베이스 고가용성 구성과 애플리케이션 재연결 정책을
    함께 설계해야 한다.
  &lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
  &lt;h2&gt;참고 자료&lt;/h2&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/enabling-advanced-features.html&quot;
         target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        Oracle Net Services Administrator's Guide - Connect-Time Failover
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/21/netrf/local-naming-parameters-in-tns-ora-file.html&quot;
         target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        Oracle Database Net Services Reference - tnsnames.ora Parameters
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/26/netag/determining-current-status-listener.html&quot;
         target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        Oracle Net Listener Status 확인
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/26/netag/monitoring-services-listener.html&quot;
         target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
        Oracle Listener 등록 서비스 모니터링
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

&lt;footer class=&quot;tag-list&quot;&gt;
  &lt;strong&gt;태그:&lt;/strong&gt;
  오라클, Oracle, 오라클이중화, OracleListener, ListenerFailover,
  tnsnames, TNS_ADMIN, DataGuard, 데이터베이스이중화, 리스너장애,
  Failover스크립트, 오라클운영, DBA
&lt;/footer&gt;

  &lt;/article&gt;
&lt;/main&gt;&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;오라클 이중화 리스너 Failover 스크립트 적용하기&quot;,
  &quot;description&quot;: &quot;Oracle Primary와 Standby 리스너 및 데이터베이스 서비스를 점검하고 애플리케이션용 TNS 접속 정보를 자동 전환하는 실무형 Failover 스크립트 구성 방법입니다.&quot;,
  &quot;articleSection&quot;: [
    &quot;Oracle&quot;,
    &quot;Database&quot;,
    &quot;High Availability&quot;,
    &quot;Listener Failover&quot;
  ],
  &quot;keywords&quot;: [
    &quot;오라클 이중화&quot;,
    &quot;Oracle Listener Failover&quot;,
    &quot;tnsnames.ora&quot;,
    &quot;TNS_ADMIN&quot;,
    &quot;Data Guard&quot;,
    &quot;Failover Script&quot;
  ],
  &quot;inLanguage&quot;: &quot;ko-KR&quot;
}
  &lt;/script&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>DataGuard</category>
      <category>ListenerFailover</category>
      <category>oracle</category>
      <category>OracleListener</category>
      <category>tnsnames</category>
      <category>TNS_ADMIN</category>
      <category>데이터베이스이중화</category>
      <category>리스너장애</category>
      <category>오라클</category>
      <category>오라클이중화</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/594</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%9D%B4%EC%A4%91%ED%99%94-%EB%A6%AC%EC%8A%A4%EB%84%88-Fail-Over-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%81%EC%9A%A9#entry594comment</comments>
      <pubDate>Thu, 16 Jul 2026 19:22:50 +0900</pubDate>
    </item>
    <item>
      <title>WildFly&amp;middot;JBoss WAR 배포 시 WFLYSRV0153 PARSE 오류 원인과 해결 방법</title>
      <link>https://togethergrow.tistory.com/entry/WildFly%C2%B7JBoss-WAR-%EB%B0%B0%ED%8F%AC-%EC%8B%9C-WFLYSRV0153-PARSE-%EC%98%A4%EB%A5%98-%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;article class=&quot;tistory-tech-post&quot;&gt;
&lt;style&gt;
.tistory-tech-post{max-width:860px;margin:0 auto;color:#222;font-size:16px;line-height:1.75;word-break:keep-all}
.tistory-tech-post h1{font-size:2rem;line-height:1.35;margin:0 0 1.5rem}
.tistory-tech-post h2{font-size:1.55rem;line-height:1.4;margin:2.8rem 0 1rem;padding-bottom:.45rem;border-bottom:2px solid #222}
.tistory-tech-post h3{font-size:1.2rem;margin:2rem 0 .7rem}
.tistory-tech-post p{margin:.8rem 0}
.tistory-tech-post ul,.tistory-tech-post ol{padding-left:1.4rem}
.tistory-tech-post li{margin:.45rem 0}
.tistory-tech-post code{font-family:Consolas,Monaco,monospace;background:#f3f4f6;padding:.15rem .35rem;border-radius:4px;word-break:break-all}
.tistory-tech-post pre{overflow-x:auto;margin:1rem 0;padding:1rem;background:#1f2937;color:#f9fafb;border-radius:7px;line-height:1.55}
.tistory-tech-post pre code{padding:0;background:transparent;color:inherit;word-break:normal}
.tistory-tech-post table{width:100%;border-collapse:collapse;margin:1rem 0;font-size:.95rem}
.tistory-tech-post th,.tistory-tech-post td{padding:.75rem;border:1px solid #d1d5db;text-align:left;vertical-align:top}
.tistory-tech-post th{background:#f3f4f6}
.tistory-tech-post .table-wrap{overflow-x:auto}
.tistory-tech-post .summary-box,.tistory-tech-post .warning-box,.tistory-tech-post .tip-box{margin:1.2rem 0;padding:1rem 1.1rem;border-radius:7px}
.tistory-tech-post .summary-box{background:#eef6ff;border-left:5px solid #2563eb}
.tistory-tech-post .warning-box{background:#fff7ed;border-left:5px solid #ea580c}
.tistory-tech-post .tip-box{background:#f0fdf4;border-left:5px solid #16a34a}
.tistory-tech-post .small{font-size:.92rem;color:#555}
@media(max-width:640px){
  .tistory-tech-post{font-size:15px}
  .tistory-tech-post h1{font-size:1.65rem}
  .tistory-tech-post h2{font-size:1.35rem}
  .tistory-tech-post th,.tistory-tech-post td{min-width:130px;padding:.6rem}
}
&lt;/style&gt;

&lt;header&gt;
&lt;h1&gt;WildFly·JBoss WAR 배포 시 WFLYSRV0153 PARSE 오류 원인과 해결 방법&lt;/h1&gt;
&lt;p&gt;WildFly 또는 JBoss EAP에 WAR 파일을 배포할 때 다음과 같은 오류가 발생할 수 있습니다.&lt;/p&gt;
&lt;/header&gt;

&lt;main&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4)
MSC000001: Failed to start service
jboss.deployment.unit.&quot;test.war&quot;.PARSE:

org.jboss.msc.service.StartException:
WFLYSRV0153: Failed to process phase PARSE
of deployment &quot;test.war&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;summary-box&quot;&gt;
&lt;strong&gt;핵심 판단:&lt;/strong&gt;
&lt;p&gt;배포 디렉터리에 WAR 파일이 2개 있었고, 하나를 삭제한 뒤 정상 배포되었다면 두 애플리케이션 사이의 &lt;strong&gt;배포 이름, 컨텍스트 경로, 모듈 또는 서버 자원 충돌&lt;/strong&gt; 가능성이 높습니다.&lt;/p&gt;
&lt;p&gt;다만 &lt;code&gt;WFLYSRV0153&lt;/code&gt; 자체는 최종 원인을 나타내는 오류가 아닙니다. 정확한 원인은 로그 아래쪽에 있는 마지막 &lt;code&gt;Caused by:&lt;/code&gt; 메시지에서 확인해야 합니다.&lt;/p&gt;
&lt;/div&gt;

&lt;h2&gt;1. 오류 메시지가 의미하는 것&lt;/h2&gt;

&lt;p&gt;WildFly의 배포 과정은 여러 단계로 진행됩니다. 대표적으로 다음과 같은 단계가 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;STRUCTURE
PARSE
DEPENDENCIES
CONFIGURE_MODULE
POST_MODULE
INSTALL&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;이번 오류의 &lt;code&gt;PARSE&lt;/code&gt;는 서버가 WAR 내부의 배포 기술자와 메타데이터를 분석하는 단계입니다.&lt;/p&gt;

&lt;p&gt;이 단계에서는 다음 파일과 구성요소가 처리될 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WEB-INF/web.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEB-INF/jboss-web.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEB-INF/jboss-deployment-structure.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;META-INF/MANIFEST.MF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Servlet, CDI, JPA, EJB 관련 XML 및 애노테이션 정보&lt;/li&gt;
&lt;li&gt;WAR 내부에 포함된 JAR의 메타데이터&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;WFLYSRV0153&lt;/code&gt;은 해당 단계에서 예외가 발생했다는 상위 메시지입니다. 따라서 아래 한 줄만으로는 XML 오류인지, 중복 배포인지, 라이브러리 문제인지 확정할 수 없습니다.&lt;/p&gt;

&lt;h2&gt;2. WAR 파일 하나를 삭제하자 배포된 이유&lt;/h2&gt;

&lt;p&gt;관찰된 현상을 기준으로 보면 WAR 파일 자체가 무조건 손상된 것보다는, &lt;strong&gt;두 WAR가 동시에 배포될 때 충돌하는 구조&lt;/strong&gt;였을 가능성이 큽니다.&lt;/p&gt;

&lt;div class=&quot;table-wrap&quot;&gt;
&lt;table&gt;
&lt;caption&gt;WAR 파일이 2개일 때 발생할 수 있는 주요 충돌&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;원인&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;th&gt;확인할 로그&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;같은 배포 이름&lt;/td&gt;
&lt;td&gt;동일하거나 유사한 이름으로 서버에 중복 등록된 경우입니다.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DuplicateServiceException&lt;/code&gt;, &lt;code&gt;already registered&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;같은 Context Root&lt;/td&gt;
&lt;td&gt;두 WAR가 동일한 URL 경로를 사용하려고 한 경우입니다.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WFLYUT0105&lt;/code&gt;, &lt;code&gt;DuplicateServiceException&lt;/code&gt;, Undertow 관련 오류&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;동일 애플리케이션의 구버전과 신버전&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test.war&lt;/code&gt;와 &lt;code&gt;test-1.0.war&lt;/code&gt;처럼 같은 애플리케이션을 두 번 배포한 경우입니다.&lt;/td&gt;
&lt;td&gt;JNDI, EJB, persistence unit 또는 서비스 중복 등록 메시지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;배포 마커 파일 불일치&lt;/td&gt;
&lt;td&gt;삭제된 WAR의 &lt;code&gt;.deployed&lt;/code&gt;, &lt;code&gt;.failed&lt;/code&gt;, &lt;code&gt;.dodeploy&lt;/code&gt; 파일이 남아 있는 경우입니다.&lt;/td&gt;
&lt;td&gt;Deployment Scanner 관련 메시지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WAR 내부 설정 중복&lt;/td&gt;
&lt;td&gt;두 애플리케이션이 같은 EJB 이름, JNDI 이름, 데이터소스 또는 영속성 단위를 등록하는 경우입니다.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;already registered&lt;/code&gt;, &lt;code&gt;duplicate&lt;/code&gt;, &lt;code&gt;WFLYNAM&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;WildFly는 상위 배포 모듈에 배포 파일명을 기반으로 한 이름을 사용합니다. 또한 배포 스캐너는 &lt;code&gt;.deployed&lt;/code&gt;, &lt;code&gt;.failed&lt;/code&gt;, &lt;code&gt;.dodeploy&lt;/code&gt;와 같은 마커 파일로 배포 상태를 관리합니다. &lt;/p&gt;

&lt;h2&gt;3. 가장 가능성이 높은 원인&lt;/h2&gt;

&lt;h3&gt;3.1 같은 애플리케이션의 WAR가 두 개 있었던 경우&lt;/h3&gt;

&lt;p&gt;예를 들어 배포 디렉터리가 다음과 같았다면 충돌 가능성이 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;$JBOSS_HOME/standalone/deployments/
├── test.war
├── test-1.0.0.war
├── test.war.deployed
└── test-1.0.0.war.failed&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;파일 이름은 다르더라도 두 WAR 내부의 설정이 같을 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;jboss-web.xml&lt;/code&gt;의 &lt;code&gt;context-root&lt;/code&gt;가 동일함&lt;/li&gt;
&lt;li&gt;&lt;code&gt;web.xml&lt;/code&gt;의 애플리케이션 이름이 동일함&lt;/li&gt;
&lt;li&gt;같은 EJB 또는 JNDI 이름을 사용함&lt;/li&gt;
&lt;li&gt;&lt;code&gt;persistence.xml&lt;/code&gt;의 persistence unit 이름이 동일함&lt;/li&gt;
&lt;li&gt;같은 서버 자원을 중복 등록함&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;실제 WildFly 배포 오류에서도 동일한 서비스가 이미 등록되어 있을 때 &lt;code&gt;DuplicateServiceException&lt;/code&gt;과 &lt;code&gt;already registered&lt;/code&gt;가 하위 원인으로 기록될 수 있습니다. &lt;/p&gt;

&lt;h3&gt;3.2 두 WAR의 Context Root가 같았던 경우&lt;/h3&gt;

&lt;p&gt;다음처럼 두 애플리케이션이 같은 경로를 사용하면 충돌할 수 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- 첫 번째 WAR의 WEB-INF/jboss-web.xml --&amp;gt;
&amp;lt;jboss-web&amp;gt;
    &amp;lt;context-root&amp;gt;/test&amp;lt;/context-root&amp;gt;
&amp;lt;/jboss-web&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- 두 번째 WAR의 WEB-INF/jboss-web.xml --&amp;gt;
&amp;lt;jboss-web&amp;gt;
    &amp;lt;context-root&amp;gt;/test&amp;lt;/context-root&amp;gt;
&amp;lt;/jboss-web&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;두 애플리케이션을 모두 배포해야 한다면 서로 다른 경로로 변경해야 합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- 첫 번째 WAR --&amp;gt;
&amp;lt;jboss-web&amp;gt;
    &amp;lt;context-root&amp;gt;/test&amp;lt;/context-root&amp;gt;
&amp;lt;/jboss-web&amp;gt;

&amp;lt;!-- 두 번째 WAR --&amp;gt;
&amp;lt;jboss-web&amp;gt;
    &amp;lt;context-root&amp;gt;/test-admin&amp;lt;/context-root&amp;gt;
&amp;lt;/jboss-web&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;3.3 파일명 또는 확장자가 잘못된 경우&lt;/h3&gt;

&lt;p&gt;제시된 로그에는 다음과 비슷한 표현이 포함되어 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;jboss.deployment.unit.&quot;test,war&quot;.PARSE&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;실제 로그에도 &lt;code&gt;test,war&lt;/code&gt;처럼 쉼표가 들어가 있었다면 파일명이 잘못되었는지 확인해야 합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;잘못된 예
test,war

정상 예
test.war&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;warning-box&quot;&gt;
&lt;strong&gt;주의:&lt;/strong&gt;
&lt;p&gt;질문을 작성하면서 마침표가 쉼표로 입력된 것이라면 이 항목은 무시해도 됩니다. 실제 서버 파일명과 &lt;code&gt;server.log&lt;/code&gt; 원문을 기준으로 판단해야 합니다.&lt;/p&gt;
&lt;/div&gt;

&lt;h3&gt;3.4 남아 있는 배포 마커 파일 문제&lt;/h3&gt;

&lt;p&gt;WildFly의 파일 시스템 배포 스캐너는 WAR 옆에 상태 파일을 생성합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;test.war.deployed
test.war.failed
test.war.dodeploy
test.war.isdeploying
test.war.pending
test.war.undeployed&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;.failed&lt;/code&gt; 파일에는 배포 실패 원인 일부가 기록될 수 있습니다. 또한 이전 WAR를 삭제한 뒤 마커 파일만 남아 있으면 배포 상태가 혼란스러워질 수 있습니다. WildFly 공식 관리 문서에서도 이러한 마커 파일이 배포 스캐너의 상태 관리에 사용된다고 설명합니다. &lt;/p&gt;

&lt;h2&gt;4. 권장 조치 방법&lt;/h2&gt;

&lt;h3&gt;조치 1. 배포 디렉터리 정리&lt;/h3&gt;

&lt;p&gt;WildFly를 정상 종료한 다음 배포 디렉터리를 확인합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd &quot;$JBOSS_HOME/standalone/deployments&quot;
ls -al&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;배포할 WAR 하나만 남기고, 해당 애플리케이션과 관련된 오래된 마커 파일을 정리합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rm -f test.war.failed
rm -f test.war.deployed
rm -f test.war.dodeploy
rm -f test.war.isdeploying
rm -f test.war.pending
rm -f test.war.undeployed&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;운영 서버에서는 파일을 삭제하기 전에 현재 배포 대상과 롤백 파일을 별도 경로에 백업하는 것이 안전합니다.&lt;/p&gt;

&lt;h3&gt;조치 2. 두 WAR의 내부 설정 비교&lt;/h3&gt;

&lt;p&gt;WAR 파일은 ZIP 형식이므로 압축을 풀지 않고 목록을 확인할 수 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;jar tf test.war
jar tf test-old.war&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;임시 디렉터리에 각각 압축을 해제합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p /tmp/war-check/test
mkdir -p /tmp/war-check/test-old

cd /tmp/war-check/test
jar xf /deploy/test.war

cd /tmp/war-check/test-old
jar xf /deploy/test-old.war&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;다음 파일을 우선 비교합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;diff -u \
  /tmp/war-check/test/WEB-INF/jboss-web.xml \
  /tmp/war-check/test-old/WEB-INF/jboss-web.xml

diff -u \
  /tmp/war-check/test/WEB-INF/web.xml \
  /tmp/war-check/test-old/WEB-INF/web.xml

find /tmp/war-check -name &quot;persistence.xml&quot; -print
find /tmp/war-check -name &quot;jboss-deployment-structure.xml&quot; -print&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;조치 3. WildFly에 등록된 배포 목록 확인&lt;/h3&gt;

&lt;p&gt;파일을 삭제했더라도 관리 모델에 배포 정보가 남아 있는지 확인합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$JBOSS_HOME/bin/jboss-cli.sh --connect \
  --command=&quot;/deployment=*:read-resource&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;간단히 배포 이름만 확인하려면 다음 명령을 사용할 수 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$JBOSS_HOME/bin/jboss-cli.sh --connect \
  --command=&quot;deployment-info&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;불필요한 이전 배포가 등록되어 있다면 정상적인 undeploy 절차로 제거합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$JBOSS_HOME/bin/jboss-cli.sh --connect \
  --command=&quot;undeploy test-old.war&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;조치 4. 두 WAR를 모두 사용해야 한다면 이름과 경로 분리&lt;/h3&gt;

&lt;p&gt;두 WAR가 서로 다른 애플리케이션이라면 최소한 다음 항목을 분리해야 합니다.&lt;/p&gt;

&lt;div class=&quot;table-wrap&quot;&gt;
&lt;table&gt;
&lt;caption&gt;두 WAR 동시 배포 시 확인 항목&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;WAR 1 예시&lt;/th&gt;
&lt;th&gt;WAR 2 예시&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WAR 파일명&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test.war&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test-admin.war&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Root&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/test-admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EJB 이름&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestService&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestAdminService&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persistence Unit&lt;/td&gt;
&lt;td&gt;&lt;code&gt;testPU&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;testAdminPU&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JNDI 이름&lt;/td&gt;
&lt;td&gt;&lt;code&gt;java:/jdbc/TestDS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;java:/jdbc/TestAdminDS&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3&gt;조치 5. 로그의 마지막 Caused by 확인&lt;/h3&gt;

&lt;p&gt;현재 제공된 스택 트레이스는 중간까지만 포함되어 있습니다. 다음과 같이 오류 발생 지점 전후를 확인해야 합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;grep -n -A 80 -B 20 \
  'WFLYSRV0153.*test.war' \
  &quot;$JBOSS_HOME/standalone/log/server.log&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;압축된 로그까지 함께 확인하려면 다음과 같이 검색할 수 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zgrep -n -A 80 -B 20 \
  'WFLYSRV0153.*test.war' \
  &quot;$JBOSS_HOME&quot;/standalone/log/server.log*&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;특히 아래 키워드를 찾습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Caused by:
DuplicateServiceException
already registered
Duplicate
context root
ParseError
XMLStreamException
SAXParseException
ZipException
ClassNotFoundException
DeploymentUnitProcessingException&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;tip-box&quot;&gt;
&lt;strong&gt;진짜 원인 찾는 방법:&lt;/strong&gt;
&lt;p&gt;첫 번째 &lt;code&gt;WFLYSRV0153&lt;/code&gt;가 아니라, 해당 스택 트레이스의 가장 아래쪽에 있는 마지막 &lt;code&gt;Caused by:&lt;/code&gt;를 확인합니다. 예를 들어 &lt;code&gt;SAXParseException&lt;/code&gt;이면 XML 문제이고, &lt;code&gt;DuplicateServiceException&lt;/code&gt;이면 중복 등록 문제입니다.&lt;/p&gt;
&lt;/div&gt;

&lt;h2&gt;5. 원인별 추가 조치&lt;/h2&gt;

&lt;h3&gt;DuplicateServiceException이 표시되는 경우&lt;/h3&gt;

&lt;p&gt;서비스, EJB, JNDI 또는 웹 컨텍스트가 중복된 상태입니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;두 WAR의 &lt;code&gt;jboss-web.xml&lt;/code&gt;에서 Context Root를 비교합니다.&lt;/li&gt;
&lt;li&gt;EJB 클래스의 &lt;code&gt;@Stateless(name = &quot;...&quot;)&lt;/code&gt; 또는 &lt;code&gt;@Singleton(name = &quot;...&quot;)&lt;/code&gt; 값을 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;persistence.xml&lt;/code&gt;의 persistence unit 이름을 비교합니다.&lt;/li&gt;
&lt;li&gt;동일 애플리케이션의 이전 버전을 undeploy합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;SAXParseException 또는 XMLStreamException이 표시되는 경우&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;web.xml&lt;/code&gt;이나 JBoss 전용 XML 설정의 문법 또는 네임스페이스를 확인합니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;xmllint --noout WEB-INF/web.xml
xmllint --noout WEB-INF/jboss-web.xml
xmllint --noout WEB-INF/jboss-deployment-structure.xml&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;PARSE 단계는 XML 및 배포 메타데이터 분석 중에도 실패할 수 있으므로, 두 번째 WAR를 삭제한 것이 직접적인 해결이 아니라 재배포 과정에서 문제가 우연히 사라진 것인지도 확인해야 합니다.&lt;/p&gt;

&lt;h3&gt;ZipException이 표시되는 경우&lt;/h3&gt;

&lt;p&gt;WAR 파일이 손상되었거나 서버가 복사 중인 파일을 읽었을 가능성이 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;unzip -t test.war
jar tf test.war &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;운영 중인 배포 디렉터리에 WAR를 직접 천천히 복사하기보다는 임시 이름으로 복사한 후 원자적으로 이름을 변경하거나, 관리 CLI를 사용해 배포하는 방법이 더 안전합니다. 최신 WildFly 문서도 파일 시스템 스캐너보다 관리 API를 통한 설치를 권장합니다. &lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp test.war /tmp/test.war
mv /tmp/test.war &quot;$JBOSS_HOME/standalone/deployments/test.war&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;6. 최종 결론&lt;/h2&gt;

&lt;p&gt;현재 정황에서는 다음 순서로 판단할 수 있습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WAR 파일이 2개일 때만 실패했다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;하나를 삭제한 후 정상 배포되었다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;따라서 동일 애플리케이션의 중복 배포 또는 Context Root·EJB·JNDI·Persistence Unit 같은 서버 자원 충돌 가능성이 가장 높습니다.&lt;/li&gt;
&lt;li&gt;다만 &lt;code&gt;WFLYSRV0153&lt;/code&gt;은 상위 오류이므로, 최종 확정은 &lt;code&gt;server.log&lt;/code&gt;의 마지막 &lt;code&gt;Caused by:&lt;/code&gt;를 기준으로 해야 합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;summary-box&quot;&gt;
&lt;strong&gt;권장 처리 순서&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;배포 디렉터리에 실제 WAR가 몇 개 있는지 확인합니다.&lt;/li&gt;
&lt;li&gt;이전 WAR와 관련된 마커 파일을 정리합니다.&lt;/li&gt;
&lt;li&gt;CLI의 &lt;code&gt;deployment-info&lt;/code&gt;로 등록된 배포를 확인합니다.&lt;/li&gt;
&lt;li&gt;두 WAR의 Context Root와 내부 설정을 비교합니다.&lt;/li&gt;
&lt;li&gt;로그의 마지막 &lt;code&gt;Caused by:&lt;/code&gt;를 확인합니다.&lt;/li&gt;
&lt;li&gt;같은 애플리케이션의 구버전이라면 한 개만 배포합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;h2&gt;FAQ&lt;/h2&gt;

&lt;h3&gt;WFLYSRV0153은 정확히 어떤 오류인가요?&lt;/h3&gt;
&lt;p&gt;WildFly의 특정 배포 처리 단계가 실패했다는 공통 오류입니다. 원인 자체는 아니며, 이어지는 &lt;code&gt;Caused by:&lt;/code&gt; 메시지를 확인해야 합니다.&lt;/p&gt;

&lt;h3&gt;WAR 파일 이름만 다르면 동시에 배포해도 되나요?&lt;/h3&gt;
&lt;p&gt;항상 그런 것은 아닙니다. 파일명이 달라도 Context Root, EJB 이름, JNDI 이름, persistence unit 또는 기타 서버 자원이 동일하면 충돌할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;하나를 삭제하니 배포되었다면 해결된 것인가요?&lt;/h3&gt;
&lt;p&gt;같은 애플리케이션의 이전 버전을 실수로 함께 배포한 상황이라면 해결된 것입니다. 그러나 두 WAR를 모두 운영해야 한다면 충돌 항목을 찾아 각각 고유한 이름과 경로로 분리해야 합니다.&lt;/p&gt;

&lt;h3&gt;.failed 파일은 삭제해도 되나요?&lt;/h3&gt;
&lt;p&gt;실패 원인을 먼저 확인한 후 삭제할 수 있습니다. 자동 배포 모드에서는 &lt;code&gt;.failed&lt;/code&gt; 파일을 제거하면 다시 배포 대상이 될 수 있으므로, 원인 수정 없이 삭제만 반복해서는 안 됩니다. &lt;/p&gt;
&lt;/main&gt;
&lt;/article&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;WildFly·JBoss WAR 배포 시 WFLYSRV0153 PARSE 오류 원인과 해결 방법&quot;,
  &quot;description&quot;: &quot;WildFly 또는 JBoss에서 WAR 파일 배포 중 WFLYSRV0153 PARSE 오류가 발생하고 WAR 하나를 제거했을 때 정상 배포되는 현상의 원인과 조치 방법을 설명합니다.&quot;,
  &quot;inLanguage&quot;: &quot;ko-KR&quot;
}
&lt;/script&gt;

&lt;!-- 티스토리 태그: WildFly, JBoss, WAR배포, WFLYSRV0153, MSC000001, 배포오류, Java, JBossEAP, DeploymentScanner, 서버운영 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>DeploymentScanner</category>
      <category>java</category>
      <category>JBoss</category>
      <category>JBossEAP</category>
      <category>MSC000001</category>
      <category>war배포</category>
      <category>WFLYSRV0153</category>
      <category>wildfly</category>
      <category>배포오류</category>
      <category>서버운영</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/593</guid>
      <comments>https://togethergrow.tistory.com/entry/WildFly%C2%B7JBoss-WAR-%EB%B0%B0%ED%8F%AC-%EC%8B%9C-WFLYSRV0153-PARSE-%EC%98%A4%EB%A5%98-%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95#entry593comment</comments>
      <pubDate>Thu, 16 Jul 2026 15:48:13 +0900</pubDate>
    </item>
    <item>
      <title>정부, &amp;lsquo;K-팔란티어&amp;rsquo; 육성 추진&amp;hellip;AI&amp;middot;드론&amp;middot;우주&amp;middot;사이버보안에 최대 10조 원 투자</title>
      <link>https://togethergrow.tistory.com/entry/%EC%A0%95%EB%B6%80-%E2%80%98K-%ED%8C%94%EB%9E%80%ED%8B%B0%EC%96%B4%E2%80%99-%EC%9C%A1%EC%84%B1-%EC%B6%94%EC%A7%84%E2%80%A6AI%C2%B7%EB%93%9C%EB%A1%A0%C2%B7%EC%9A%B0%EC%A3%BC%C2%B7%EC%82%AC%EC%9D%B4%EB%B2%84%EB%B3%B4%EC%95%88%EC%97%90-%EC%B5%9C%EB%8C%80-10%EC%A1%B0-%EC%9B%90-%ED%88%AC%EC%9E%90</link>
      <description>&lt;article class=&quot;tistory-tech-article&quot;&gt;
  &lt;style&gt;
    .tistory-tech-article {
      max-width: 860px;
      margin: 0 auto;
      color: #202124;
      font-size: 16px;
      line-height: 1.8;
      word-break: keep-all;
      overflow-wrap: break-word;
    }

```
.tistory-tech-article * {
  box-sizing: border-box;
}

.tistory-tech-article h1,
.tistory-tech-article h2,
.tistory-tech-article h3 {
  color: #111827;
  line-height: 1.4;
}

.tistory-tech-article h1 {
  margin: 0 0 24px;
  font-size: 2rem;
  letter-spacing: -0.04em;
}

.tistory-tech-article h2 {
  margin: 48px 0 18px;
  padding-bottom: 10px;
  border-bottom: 2px solid #e5e7eb;
  font-size: 1.55rem;
  letter-spacing: -0.03em;
}

.tistory-tech-article h3 {
  margin: 32px 0 12px;
  font-size: 1.2rem;
  letter-spacing: -0.02em;
}

.tistory-tech-article p {
  margin: 0 0 18px;
}

.tistory-tech-article a {
  color: #1557b0;
  text-decoration: underline;
  text-underline-offset: 3px;
}

.article-summary,
.key-point,
.notice-box {
  margin: 24px 0;
  padding: 20px;
  border-radius: 10px;
}

.article-summary {
  border-left: 5px solid #2563eb;
  background: #eff6ff;
}

.key-point {
  border: 1px solid #dbeafe;
  background: #f8fbff;
}

.notice-box {
  border: 1px solid #e5e7eb;
  background: #f9fafb;
}

.article-summary p:last-child,
.key-point p:last-child,
.notice-box p:last-child {
  margin-bottom: 0;
}

.toc {
  margin: 28px 0;
  padding: 22px;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  background: #ffffff;
}

.toc strong {
  display: block;
  margin-bottom: 10px;
  color: #111827;
  font-size: 1.05rem;
}

.toc ol {
  margin: 0;
  padding-left: 22px;
}

.toc li {
  margin: 5px 0;
}

.table-wrap {
  width: 100%;
  margin: 24px 0;
  overflow-x: auto;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
}

.tistory-tech-article table {
  width: 100%;
  min-width: 640px;
  border-collapse: collapse;
  background: #ffffff;
}

.tistory-tech-article caption {
  padding: 14px;
  color: #374151;
  font-weight: 700;
  text-align: left;
  background: #f9fafb;
}

.tistory-tech-article th,
.tistory-tech-article td {
  padding: 13px 14px;
  border-bottom: 1px solid #e5e7eb;
  text-align: left;
  vertical-align: top;
}

.tistory-tech-article th {
  color: #111827;
  background: #f3f4f6;
  white-space: nowrap;
}

.tistory-tech-article tr:last-child td {
  border-bottom: 0;
}

.tistory-tech-article ul,
.tistory-tech-article ol {
  margin: 0 0 20px;
  padding-left: 24px;
}

.tistory-tech-article li {
  margin: 7px 0;
}

.faq-item {
  margin: 18px 0;
  padding: 20px;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  background: #ffffff;
}

.faq-item h3 {
  margin-top: 0;
}

.faq-item p:last-child {
  margin-bottom: 0;
}

.source-list {
  font-size: 0.94rem;
  color: #4b5563;
}

@media (max-width: 640px) {
  .tistory-tech-article {
    font-size: 15.5px;
    line-height: 1.75;
  }

  .tistory-tech-article h1 {
    font-size: 1.65rem;
  }

  .tistory-tech-article h2 {
    margin-top: 40px;
    font-size: 1.35rem;
  }

  .article-summary,
  .key-point,
  .notice-box,
  .toc,
  .faq-item {
    padding: 17px;
  }
}
```

  &lt;/style&gt;

  &lt;header&gt;
    &lt;h1&gt;정부, ‘K-팔란티어’ 육성 추진…AI·드론·우주·사이버보안에 최대 10조 원 투자&lt;/h1&gt;

```
&lt;div class=&quot;article-summary&quot;&gt;
  &lt;p&gt;&lt;strong&gt;정부가 인공지능(AI), 드론·로봇, 우주·항공, 사이버보안·양자통신 등 신안보 전략산업을 집중적으로 육성한다.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;2030년까지 기업가치 1조 원 이상 기업 5개와 매출 1,000억 원 이상 혁신기업 50개를 배출하고, 향후 5년간 최대 10조 원 규모의 투자재원 조성을 추진한다는 계획이다.&lt;/p&gt;
&lt;/div&gt;
```

  &lt;/header&gt;

  &lt;nav class=&quot;toc&quot; aria-label=&quot;목차&quot;&gt;
    &lt;strong&gt;목차&lt;/strong&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#policy-overview&quot;&gt;K-팔란티어 육성 정책 핵심&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#strategic-industries&quot;&gt;신안보 전략산업 지원 분야&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#procurement&quot;&gt;신속 조달체계와 혁신 계약제도&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#research&quot;&gt;기업당 최대 100억 원 R&amp;amp;D 지원&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#investment&quot;&gt;한국형 인큐텔과 최대 10조 원 투자&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#defense-ai&quot;&gt;국방 AI·드론 실증 확대&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#space-industry&quot;&gt;위성정보 개방과 우주데이터센터&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#implications&quot;&gt;정책의 의미와 확인할 과제&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/nav&gt;

  &lt;main&gt;
    &lt;section id=&quot;policy-overview&quot;&gt;
      &lt;h2&gt;K-팔란티어 육성 정책 핵심&lt;/h2&gt;

```
  &lt;p&gt;중소벤처기업부와 국방부, 우주항공청은 2026년 6월 26일 열린 ‘미래 신안보 혁신기업 육성 전략회의’에서 &lt;strong&gt;‘미래 신안보 혁신기업 육성 방향’&lt;/strong&gt;을 발표했다.&lt;/p&gt;

  &lt;p&gt;이번 정책의 핵심은 민간이 개발한 AI와 소프트웨어, 드론, 우주·항공, 사이버보안 기술을 국방과 국가안보 현장에 신속하게 적용하고, 공공 수요를 기업 성장으로 연결하는 데 있다.&lt;/p&gt;

  &lt;p&gt;정부는 이를 통해 미국의 팔란티어와 같이 데이터와 AI 기술을 기반으로 국가안보 시장에서 성장하는 글로벌 기술기업을 국내에서도 육성한다는 목표를 제시했다.&lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;미래 신안보 혁신기업 육성 목표&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;구분&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;정부 목표&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;정책 목표 시점&lt;/td&gt;
          &lt;td&gt;2030년&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;기업가치 1조 원 이상 기업&lt;/td&gt;
          &lt;td&gt;5개사 육성&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;매출 1,000억 원 이상 혁신기업&lt;/td&gt;
          &lt;td&gt;50개사 육성&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;개별 기업 연구개발 지원&lt;/td&gt;
          &lt;td&gt;최대 5년간 100억 원&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;성장 투자재원&lt;/td&gt;
          &lt;td&gt;향후 5년간 최대 10조 원 조성 추진&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;첨단기술 최초 배치 목표&lt;/td&gt;
          &lt;td&gt;1년 이내로 단축 추진&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div class=&quot;notice-box&quot;&gt;
    &lt;p&gt;&lt;strong&gt;주의할 점:&lt;/strong&gt; 최대 10조 원은 특정 기업 한 곳에 직접 지급되는 금액이 아니다. 정부가 향후 5년 동안 정책펀드와 민간 투자 등을 연계해 조성하려는 전체 투자재원 목표를 의미한다.&lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;strategic-industries&quot;&gt;
  &lt;h2&gt;AI·드론·우주·사이버보안 등 신안보 전략산업 지원&lt;/h2&gt;

  &lt;p&gt;정부가 제시한 신안보 분야는 전통적인 방산 제조업에만 한정되지 않는다. 소프트웨어와 데이터, 반도체, 첨단소재 및 민간 우주기술까지 폭넓게 포함한다.&lt;/p&gt;

  &lt;div class=&quot;table-wrap&quot;&gt;
    &lt;table&gt;
      &lt;caption&gt;주요 신안보 전략 분야&lt;/caption&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th scope=&quot;col&quot;&gt;분야&lt;/th&gt;
          &lt;th scope=&quot;col&quot;&gt;주요 기술과 활용 방향&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;드론·로봇&lt;/td&gt;
          &lt;td&gt;무인기, 대드론 체계, 자율주행 로봇, 감시·정찰 및 군수지원&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;국방 AI·반도체&lt;/td&gt;
          &lt;td&gt;지휘통제, 전장 데이터 분석, 국방 특화 AI 모델 및 연산 인프라&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;국방 센서·미래소재&lt;/td&gt;
          &lt;td&gt;감시·탐지 센서, 첨단부품, 경량·고내구성 소재&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;우주·항공&lt;/td&gt;
          &lt;td&gt;위성 데이터, 우주데이터센터, 무인기 및 미래항공 모빌리티&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;사이버보안·양자통신&lt;/td&gt;
          &lt;td&gt;국가 기반시설 보호, 정보보호, 보안통신 및 양자 기술&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;p&gt;정부는 혁신성과 성장 가능성을 갖춘 기업을 후보기업과 혁신기업으로 지정하고, 연구개발부터 실증, 조달, 투자, 사업화, 수출까지 성장 단계별 지원체계를 마련할 계획이다.&lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;procurement&quot;&gt;
  &lt;h2&gt;신속 조달체계와 혁신 촉진형 계약제도 도입&lt;/h2&gt;

  &lt;p&gt;AI와 드론, 소프트웨어 기술은 개발 주기가 짧고 업데이트가 빠르다. 반면 기존 국방 획득체계는 소요기획, 시험평가, 계약, 전력화 등 여러 단계를 거치기 때문에 민간의 최신 기술을 적시에 도입하기 어렵다는 문제가 있었다.&lt;/p&gt;

  &lt;p&gt;정부는 이러한 격차를 줄이기 위해 첨단무기체계와 신기술 제품의 최초 배치 기간을 &lt;strong&gt;1년 이내로 단축하는 신속 조달체계&lt;/strong&gt;를 추진한다.&lt;/p&gt;

  &lt;h3&gt;공모형 획득 방식 확대&lt;/h3&gt;

  &lt;p&gt;정부와 군이 필요한 제품의 세부 사양을 미리 모두 결정하는 방식에서 벗어나, 민간기업이 기술과 해결 방식을 직접 제안하는 공모형 획득 방식을 확대한다.&lt;/p&gt;

  &lt;p&gt;군이 제품을 우선 사용한 뒤 실제 현장에서 수집한 데이터를 바탕으로 성능을 개선하는 방식도 함께 검토한다. 완성된 제품을 한 번에 구매하기보다 현장 실증과 개선을 반복하는 구조다.&lt;/p&gt;

  &lt;h3&gt;혁신 촉진형 계약과 마일스톤 지급&lt;/h3&gt;

  &lt;p&gt;우주·항공과 사이버보안 등 비국방 안보 분야에는 국가계약법상 &lt;strong&gt;혁신 촉진형 계약제도&lt;/strong&gt; 도입을 추진한다.&lt;/p&gt;

  &lt;p&gt;연구개발이 모두 끝난 뒤 비용을 지급하는 방식이 아니라, 중간 기술목표 달성 여부를 평가해 단계별로 대금을 지급하는 마일스톤 방식도 마련할 계획이다.&lt;/p&gt;

  &lt;p&gt;정해진 절차를 준수한 상태에서 기술적 장애나 실패가 발생한 경우 기업과 구매 담당자의 부담을 줄이는 면책제도 역시 추진 대상에 포함됐다.&lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;research&quot;&gt;
  &lt;h2&gt;신안보 기업당 최대 5년간 100억 원 R&amp;amp;D 지원&lt;/h2&gt;

  &lt;p&gt;정부는 연구개발과 현장 실증, 구매를 하나의 과정으로 연결하는 &lt;strong&gt;신안보 전용 OTA형 연구개발 사업&lt;/strong&gt;을 도입한다.&lt;/p&gt;

  &lt;p&gt;OTA는 미국 일부 연방기관이 혁신기술을 기존 조달 절차보다 신속하게 계약하고 실증·구매할 수 있도록 활용하는 방식이다.&lt;/p&gt;

  &lt;p&gt;국내에서는 신안보 혁신기업 한 곳당 최대 5년 동안 100억 원 규모의 연구개발 비용을 지원하는 방안이 제시됐다. 기업이 실제 군 작전과 훈련 현장을 경험하고, 실증 데이터를 확보할 수 있도록 현장 연계 지원도 강화한다.&lt;/p&gt;

  &lt;div class=&quot;key-point&quot;&gt;
    &lt;p&gt;&lt;strong&gt;지원 구조의 핵심&lt;/strong&gt;&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;연구개발 지원에서 끝나지 않고 실증과 구매까지 연계&lt;/li&gt;
      &lt;li&gt;기업이 군 현장의 문제와 운용 조건을 직접 확인&lt;/li&gt;
      &lt;li&gt;실제 사용 데이터를 이용해 제품 성능을 반복 개선&lt;/li&gt;
      &lt;li&gt;정부 수요를 초기 시장으로 활용해 사업화 가능성 확대&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;investment&quot;&gt;
  &lt;h2&gt;한국형 인큐텔 설립과 최대 10조 원 투자재원 조성&lt;/h2&gt;

  &lt;p&gt;초기 보안기업과 첨단기술 스타트업을 위한 전문 투자체계도 구축한다.&lt;/p&gt;

  &lt;p&gt;정부는 미국 중앙정보국과 연계된 비영리 벤처투자기관인 인큐텔(In-Q-Tel) 모델을 참고해 신안보 기술기업에 직접 투자하는 &lt;strong&gt;‘한국형 인큐텔’&lt;/strong&gt; 설립을 추진한다.&lt;/p&gt;

  &lt;p&gt;인큐텔 모델은 안보에 필요한 기술을 가진 스타트업에 투자하고, 해당 기술을 정부기관의 실제 수요와 연결하는 방식이다. 단순한 재무 투자보다 국가안보에 필요한 기술 발굴과 조기 도입에 초점을 둔다.&lt;/p&gt;

  &lt;p&gt;한국형 인큐텔은 초기기업이 기술을 개발하는 과정에서 겪는 자금 공백을 줄이고, 정부 수요와 기술 개발을 연결하는 역할을 맡을 예정이다.&lt;/p&gt;

  &lt;h3&gt;정책펀드와 민간 투자 연계&lt;/h3&gt;

  &lt;p&gt;정부는 1조 원 이상 규모의 모태펀드와 방산펀드를 활용해 기업의 성장자금을 지원한다. 기술특화 자산운용사인 가칭 &lt;strong&gt;‘한국전략기술파트너스’&lt;/strong&gt; 설립도 지원할 계획이다.&lt;/p&gt;

  &lt;p&gt;이러한 정책금융과 민간 자금을 연계해 향후 5년간 최대 10조 원 규모의 투자재원을 조성하고, 신안보 혁신기업에 공급한다는 구상이다.&lt;/p&gt;

  &lt;p&gt;정부와 기업이 공동 개발한 기술의 지식재산권은 기업이 민간 사업과 해외시장 진출에 활용할 수 있도록 보장하고, 기술사업화와 수출을 지원하는 별도 패키지도 마련한다.&lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;defense-ai&quot;&gt;
  &lt;h2&gt;국방 AI·드론 실증전담부대 9개로 확대&lt;/h2&gt;

  &lt;p&gt;국방부는 군이 AI와 드론 기술의 초기 수요자가 되어 민간 기술의 실증과 신속 도입을 지원하는 방안을 추진한다.&lt;/p&gt;

  &lt;p&gt;혁신기업이 실제 군부대에서 기술을 시험할 수 있도록 실증전담부대를 2026년까지 9개로 확대하고, 부대별 혁신랩을 구축할 계획이다.&lt;/p&gt;

  &lt;h3&gt;국방 데이터 활용 기반 구축&lt;/h3&gt;

  &lt;p&gt;민간기업이 활용 가능한 군 데이터의 종류와 공개 범위를 확인할 수 있는 &lt;strong&gt;국방데이터 카탈로그&lt;/strong&gt;를 구축한다. 공개 가능한 데이터를 늘리고 국방 AI 학습에 필요한 고품질 데이터 구축도 추진한다.&lt;/p&gt;

  &lt;p&gt;산업계와 대학, 연구기관이 국방 데이터를 활용할 수 있도록 국방 AX 거점을 조성하고, 데이터 활용을 제한해 온 관련 보안제도도 개선할 방침이다.&lt;/p&gt;

  &lt;h3&gt;드론·국방 AI 주요 사업&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;드론과 대드론 기술 검증을 위한 ‘2026 대한민국 드론공방전’ 개최&lt;/li&gt;
    &lt;li&gt;민간기업의 기술 검증을 위한 군 훈련장 개방&lt;/li&gt;
    &lt;li&gt;민간 AI 기술을 군 현장에 적용하는 국방 AX 스프린트 확대&lt;/li&gt;
    &lt;li&gt;상용 소형드론의 공급망·보안·품질을 검증하는 K-BLUE UAS 인증체계 마련&lt;/li&gt;
    &lt;li&gt;한국군 특화 AI 운영체계 ‘K-메이븐’과 국방 특화 AI 모델 개발&lt;/li&gt;
    &lt;li&gt;실제 작전환경을 가상으로 구현하는 국방 월드모델 개발&lt;/li&gt;
    &lt;li&gt;한국형 장거리 자폭무인기 K-LUCAS 도입 추진&lt;/li&gt;
    &lt;li&gt;드론 운용인력 양성을 위한 교육용 상용드론 확보&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;기술 변화가 빠른 첨단전력을 신속하게 확보할 수 있도록 &lt;strong&gt;국방첨단전력사업법&lt;/strong&gt; 제정도 추진한다. 다만 법률과 인증체계 등은 향후 입법 및 세부 제도 설계 과정에서 내용과 일정이 달라질 수 있다.&lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;space-industry&quot;&gt;
  &lt;h2&gt;위성정보 개방하고 우주데이터센터 구축&lt;/h2&gt;

  &lt;p&gt;우주항공청은 민간 우주산업의 성장이 국가안보 역량 강화로 이어지는 산업구조를 구축할 계획이다.&lt;/p&gt;

  &lt;p&gt;‘K-문샷 프로젝트’의 하나로 우주데이터센터 핵심기술을 개발하고 우주환경에서 기술을 검증한다. 국내 기업을 중심으로 위성 데이터를 처리하고 저장하는 차세대 데이터 인프라 시장을 육성한다는 구상이다.&lt;/p&gt;

  &lt;h3&gt;국가 위성정보 공개 플랫폼&lt;/h3&gt;

  &lt;p&gt;정부가 보유한 위성영상과 관측 데이터를 민간이 활용할 수 있도록 국가 위성정보 공개 플랫폼을 구축한다.&lt;/p&gt;

  &lt;p&gt;이를 통해 위성정보 분석, 재난 대응, 국토 관리, 농업, 환경, 국방·안보 서비스를 개발하는 스타트업의 시장 진입을 지원할 계획이다.&lt;/p&gt;

  &lt;h3&gt;AI 무인기와 미래항공 모빌리티 개발&lt;/h3&gt;

  &lt;p&gt;AI 기반 무인기와 전기·하이브리드 추진 수직이착륙 항공기의 자체 개발도 추진한다. 공공·국방 임무에서 기술을 실증한 뒤 민간과 군에서 함께 사용할 수 있는 항공 모빌리티로 상용화하는 것이 목표다.&lt;/p&gt;

  &lt;p&gt;반도체와 소재, 부품 등 국내 비우주 산업에서 경쟁력을 확보한 기술을 우주환경에서 검증해 국내 우주산업 공급망으로 편입하는 방안도 포함됐다.&lt;/p&gt;
&lt;/section&gt;

&lt;section id=&quot;implications&quot;&gt;
  &lt;h2&gt;K-팔란티어 정책의 의미와 앞으로 확인할 과제&lt;/h2&gt;

  &lt;p&gt;이번 정책은 국가안보 산업의 중심이 전통적인 무기 하드웨어에서 AI, 데이터, 소프트웨어, 무인체계 및 사이버보안으로 확장되고 있음을 보여준다.&lt;/p&gt;

  &lt;p&gt;특히 정부가 초기 구매자 역할을 맡아 실증과 조달을 지원하면 민간 스타트업은 제품을 실제 환경에서 검증하고 안정적인 초기 매출을 확보할 기회를 얻을 수 있다.&lt;/p&gt;

  &lt;p&gt;다만 발표된 내용 중 상당수는 앞으로 추진될 정책과 제도다. 실제 성과를 판단하려면 다음 사항을 지속해서 확인해야 한다.&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;투자재원 조성 방식:&lt;/strong&gt; 최대 10조 원 가운데 정부와 민간 자금의 구성 및 집행 일정&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;기업 선정 기준:&lt;/strong&gt; 후보기업과 혁신기업의 기술성·보안성·성장성 평가 방식&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;신속 조달의 실효성:&lt;/strong&gt; 시험평가와 보안 검증을 유지하면서 도입 기간을 줄일 수 있는지 여부&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;국방 데이터 개방 범위:&lt;/strong&gt; 보안성을 유지하면서 민간이 활용할 수 있는 데이터의 수준&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;지식재산권 운영:&lt;/strong&gt; 공동 개발 기술의 소유권과 국내외 사업화 권한&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;입법 진행 상황:&lt;/strong&gt; 특별법과 국가계약법, 국방첨단전력사업법의 제·개정 여부&lt;/li&gt;
  &lt;/ol&gt;

  &lt;div class=&quot;key-point&quot;&gt;
    &lt;p&gt;&lt;strong&gt;핵심 정리&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;K-팔란티어 정책은 단순한 스타트업 지원사업이 아니라 연구개발, 군 현장 실증, 공공 조달, 정책금융, 민간 투자 및 해외 진출을 하나의 성장 경로로 연결하려는 국가 차원의 신안보 산업 육성 전략이다.&lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;faq&quot;&gt;
  &lt;h2&gt;자주 묻는 질문&lt;/h2&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;K-팔란티어는 특정 기업의 이름인가요?&lt;/h3&gt;
    &lt;p&gt;아니다. 현재 발표에서 K-팔란티어는 미국 팔란티어와 같이 AI와 데이터를 기반으로 국가안보 분야에서 성장하는 국내 글로벌 기술기업을 육성하겠다는 정책적 표현으로 사용됐다.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;정부가 한 기업에 10조 원을 투자하나요?&lt;/h3&gt;
    &lt;p&gt;아니다. 최대 10조 원은 향후 5년 동안 정책펀드와 민간 투자 등을 연계해 조성하려는 전체 투자재원 목표다. 개별 기업의 실제 투자금액과 지원 조건은 향후 사업별로 결정된다.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;어떤 기업이 지원 대상이 되나요?&lt;/h3&gt;
    &lt;p&gt;드론·로봇, 국방 AI·반도체, 국방 센서·미래소재, 우주·항공, 사이버보안·양자통신 등 신안보 분야에서 기술력과 성장 가능성을 갖춘 기업이 주요 대상이다. 구체적인 선정 기준은 후속 공고를 확인해야 한다.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;h3&gt;모든 정책이 이미 시행되고 있나요?&lt;/h3&gt;
    &lt;p&gt;아니다. 이번 발표에는 현재 진행 중인 사업과 앞으로 도입하거나 확대할 계획이 함께 포함돼 있다. 한국형 인큐텔 설립, 관련 법률 제정, 혁신 계약제도 등은 후속 입법과 예산 편성 및 세부 사업 설계가 필요하다.&lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;section id=&quot;sources&quot;&gt;
  &lt;h2&gt;자료 출처&lt;/h2&gt;
  &lt;ul class=&quot;source-list&quot;&gt;
    &lt;li&gt;
      중소벤처기업부·국방부·우주항공청, 「K-팔란티어 육성을 위한 미래 신안보 혁신기업 육성 방향」, 2026년 6월 26일
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://www.kasa.go.kr/prog/plcyBrf/brief/kor/sub01_01_04/view.do?plcyBrfNo=430&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;우주항공청 보도자료&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://www.dailysecu.com/news/articleView.html?idxno=207600&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;데일리시큐 관련 기사&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div class=&quot;notice-box&quot;&gt;
    &lt;p&gt;이 글은 정부 발표자료와 공개 보도를 바탕으로 정책의 주요 내용을 정리한 것이다. 투자 규모, 지원 대상, 사업 일정과 법률 제정 여부는 후속 공고 및 관계기관 발표에 따라 변경될 수 있다.&lt;/p&gt;
  &lt;/div&gt;
&lt;/section&gt;
```

  &lt;/main&gt;
&lt;/article&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;Article&quot;,
  &quot;headline&quot;: &quot;정부, ‘K-팔란티어’ 육성 추진…AI·드론·우주·사이버보안에 최대 10조 원 투자&quot;,
  &quot;description&quot;: &quot;정부가 AI, 드론, 우주·항공, 사이버보안 등 신안보 전략산업을 육성하고 2030년까지 기업가치 1조 원 이상 기업 5개를 배출하기 위해 신속 조달, OTA형 연구개발, 한국형 인큐텔과 최대 10조 원 규모의 투자재원 조성을 추진한다.&quot;,
  &quot;articleSection&quot;: &quot;AI·국방·사이버보안 정책&quot;,
  &quot;keywords&quot;: [
    &quot;K-팔란티어&quot;,
    &quot;신안보 혁신기업&quot;,
    &quot;국방 AI&quot;,
    &quot;사이버보안&quot;,
    &quot;드론&quot;,
    &quot;우주항공&quot;,
    &quot;한국형 인큐텔&quot;,
    &quot;OTA형 연구개발&quot;
  ],
  &quot;inLanguage&quot;: &quot;ko-KR&quot;
}
&lt;/script&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>K-팔란티어</category>
      <category>OTA형 연구개발</category>
      <category>국방 AI</category>
      <category>드론</category>
      <category>사이버보안</category>
      <category>신안보 혁신기업</category>
      <category>우주항공</category>
      <category>한국형 인큐텔</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/592</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%A0%95%EB%B6%80-%E2%80%98K-%ED%8C%94%EB%9E%80%ED%8B%B0%EC%96%B4%E2%80%99-%EC%9C%A1%EC%84%B1-%EC%B6%94%EC%A7%84%E2%80%A6AI%C2%B7%EB%93%9C%EB%A1%A0%C2%B7%EC%9A%B0%EC%A3%BC%C2%B7%EC%82%AC%EC%9D%B4%EB%B2%84%EB%B3%B4%EC%95%88%EC%97%90-%EC%B5%9C%EB%8C%80-10%EC%A1%B0-%EC%9B%90-%ED%88%AC%EC%9E%90#entry592comment</comments>
      <pubDate>Wed, 15 Jul 2026 16:52:53 +0900</pubDate>
    </item>
    <item>
      <title>프로젝트 캐노피, 전자정부 표준프레임워크 취약점 990건 분석 결과 공개</title>
      <link>https://togethergrow.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%BA%90%EB%85%B8%ED%94%BC-%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%B7%A8%EC%95%BD%EC%A0%90-990%EA%B1%B4-%EB%B6%84%EC%84%9D-%EA%B2%B0%EA%B3%BC-%EA%B3%B5%EA%B0%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2026.07.15 - [IT 소식 뉴스/IT 소식] - 전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784081044397&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&quot; data-og-description=&quot;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심 전자정부 표준프레임워크 5.0은 단순한 라이브러리 버전 업데이트가 아니다. JDK 17, Spring Framework 6.2 계열과 Jakarta 기반 기술 스택을 적용하&quot; data-og-host=&quot;one-day-growth.com&quot; data-og-source-url=&quot;https://one-day-growth.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC&quot; data-og-url=&quot;https://one-day-growth.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHVwuk/dJMb9lljkO8/ibLpyr234Uir4TWSApjzM1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://one-day-growth.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHVwuk/dJMb9lljkO8/ibLpyr234Uir4TWSApjzM1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심 전자정부 표준프레임워크 5.0은 단순한 라이브러리 버전 업데이트가 아니다. JDK 17, Spring Framework 6.2 계열과 Jakarta 기반 기술 스택을 적용하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;one-day-growth.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;style&gt;
  .post-content-wrap {
    width: 100%;
    max-width: 920px;
    margin: 0 auto;
    padding: 22px 18px 48px;
    line-height: 1.75;
    word-break: keep-all;
    overflow-wrap: break-word;
    color: inherit;
  }

  .post-content-wrap .post-intro {
    margin-bottom: 32px;
  }

  .post-content-wrap .lead {
    margin: 0 0 18px;
    font-size: 1.08rem;
    line-height: 1.8;
  }

  .post-content-wrap h2 {
    margin: 46px 0 18px;
    padding-bottom: 10px;
    border-bottom: 2px solid rgba(120, 120, 120, 0.22);
    font-size: 1.5rem;
    line-height: 1.45;
  }

  .post-content-wrap h3 {
    margin: 28px 0 12px;
    font-size: 1.18rem;
    line-height: 1.5;
  }

  .post-content-wrap p {
    margin: 0 0 18px;
  }

  .post-content-wrap .key-box {
    margin: 26px 0;
    padding: 20px 22px;
    border-left: 4px solid #3b82f6;
    border-radius: 8px;
    background: rgba(59, 130, 246, 0.08);
  }

  .post-content-wrap .key-box p:last-child {
    margin-bottom: 0;
  }

  .post-content-wrap .risk-list,
  .post-content-wrap .check-list {
    margin: 12px 0 20px;
    padding-left: 22px;
  }

  .post-content-wrap .risk-list li,
  .post-content-wrap .check-list li {
    margin-bottom: 10px;
  }

  .post-content-wrap .table-scroll {
    width: 100%;
    margin: 22px 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .post-content-wrap table {
    width: 100%;
    min-width: 680px;
    border-collapse: collapse;
  }

  .post-content-wrap th,
  .post-content-wrap td {
    padding: 13px 14px;
    border: 1px solid rgba(120, 120, 120, 0.25);
    text-align: left;
    vertical-align: top;
  }

  .post-content-wrap th {
    background: rgba(120, 120, 120, 0.1);
    font-weight: 700;
  }

  .post-content-wrap .notice-box {
    margin: 26px 0;
    padding: 20px 22px;
    border: 1px solid rgba(239, 68, 68, 0.28);
    border-radius: 8px;
    background: rgba(239, 68, 68, 0.06);
  }

  .post-content-wrap .notice-box p:last-child {
    margin-bottom: 0;
  }

  .post-content-wrap .source-note {
    margin-top: 42px;
    padding-top: 18px;
    border-top: 1px solid rgba(120, 120, 120, 0.2);
    font-size: 0.92rem;
    opacity: 0.82;
  }

  .post-content-wrap .source-note a {
    word-break: break-all;
  }

  @media (max-width: 700px) {
    .post-content-wrap {
      padding: 18px 14px 40px;
    }

    .post-content-wrap .lead {
      font-size: 1rem;
    }

    .post-content-wrap h2 {
      margin-top: 38px;
      font-size: 1.32rem;
    }

    .post-content-wrap .key-box,
    .post-content-wrap .notice-box {
      padding: 17px 16px;
    }
  }
&lt;/style&gt;

&lt;article class=&quot;post-content-wrap&quot;&gt;
  &lt;header class=&quot;post-intro&quot;&gt;
    &lt;p class=&quot;lead&quot;&gt;
      공익 AI 보안 이니셔티브 프로젝트 캐노피가 전자정부 표준프레임워크를 대상으로 수행한 보안 분석 결과를 공개했다. AI 기반 자동 분석으로 탐지한 약 1,300건의 후보 가운데 오탐 가능성이 높은 항목을 걸러내고, 구조적 결함과 보안 취약점 990건을 최종 식별했다는 내용이다.
    &lt;/p&gt;
    &lt;p&gt;
      식별 항목 중 약 10%는 심각 또는 높음 등급으로 분류됐으며, 프로젝트 캐노피와 유관 기관은 검증과 패치 작업을 순차적으로 진행하고 있다. 전자정부 표준프레임워크 기반 시스템을 운영하는 기관과 기업은 적용 버전과 사용 컴포넌트를 확인하고 관련 패치 반영 여부를 점검할 필요가 있다.
    &lt;/p&gt;
  &lt;/header&gt;

  &lt;div class=&quot;key-box&quot;&gt;
    &lt;p&gt;&lt;strong&gt;핵심 내용&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;
      프로젝트 캐노피는 전자정부 표준프레임워크의 기존 모놀리식 컴포넌트와 신규 MSA용 공공 컴포넌트를 분석했다. 최종 식별된 취약점은 990건이며, 인증 우회와 임의 SQL 실행, 암호키 노출, IDOR·BOLA 유형의 권한 검증 문제 등이 주요 사례로 제시됐다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;section&gt;
    &lt;h2&gt;전자정부 표준프레임워크에서 990건 취약점 식별&lt;/h2&gt;
    &lt;p&gt;
      프로젝트 캐노피는 사단법인 프로젝트 플라즈마가 안전하고 지속 가능한 오픈소스 소프트웨어 생태계 구축을 목표로 출범한 공익 보안 이니셔티브다. 첫 번째 분석 대상으로 국내 공공 및 민간 시스템 통합 프로젝트에 널리 활용되는 전자정부 표준프레임워크를 선정했다.
    &lt;/p&gt;
    &lt;p&gt;
      분석 범위에는 기존 모놀리식 구조의 공공 컴포넌트와 신규 MSA 환경을 위한 컴포넌트가 포함됐다. AI 기반 자동화 취약점 분석 엔진으로 약 1,300건의 후보를 탐지한 뒤 별도의 정제 시스템을 적용해 오탐 가능성이 높은 항목을 제외했다.
    &lt;/p&gt;
    &lt;p&gt;
      정제 이후 시스템 오류나 권한 상승으로 이어질 수 있는 구조적 결함과 보안 취약점 990건이 최종 식별됐다. 프로젝트 캐노피 측은 자동 탐지 결과를 그대로 공개한 것이 아니라 실무 검토에 활용할 수 있도록 신뢰도를 높이는 정제 과정을 거쳤다고 설명했다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;주요 취약점 유형과 예상되는 보안 영향&lt;/h2&gt;
    &lt;p&gt;
      공개된 내용에 따르면 전체 식별 항목의 약 10%는 심각 또는 높음 등급에 해당한다. 주요 사례는 인증과 권한 검증, 데이터베이스 접근, 암호키 관리 영역에 집중돼 있다.
    &lt;/p&gt;

```
&lt;div class=&quot;table-scroll&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;취약점 유형&lt;/th&gt;
        &lt;th&gt;주요 내용&lt;/th&gt;
        &lt;th&gt;예상 영향&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;인증 우회&lt;/td&gt;
        &lt;td&gt;비밀번호 검증 없이 임의 계정으로 접근할 가능성&lt;/td&gt;
        &lt;td&gt;계정 탈취, 비인가 기능 접근&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;임의 SQL 실행&lt;/td&gt;
        &lt;td&gt;일반 사용자가 서버 권한으로 데이터베이스 명령을 실행할 가능성&lt;/td&gt;
        &lt;td&gt;데이터 조회·변조·삭제 위험&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;고정 암호키 노출&lt;/td&gt;
        &lt;td&gt;소스 코드 또는 설정에 고정된 암호키가 포함된 구조&lt;/td&gt;
        &lt;td&gt;보호 파일이나 민감 정보 탈취 가능성&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;IDOR·BOLA&lt;/td&gt;
        &lt;td&gt;객체 식별자 변경만으로 다른 사용자 자원에 접근할 가능성&lt;/td&gt;
        &lt;td&gt;권한 상승, 타 사용자 데이터 접근&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;
  개별 시스템의 실제 영향은 적용된 전자정부 표준프레임워크 버전과 컴포넌트, 사용자 인증 구조, 외부 노출 범위에 따라 달라질 수 있다. 따라서 공개된 취약점 수만으로 개별 서비스의 침해 여부를 단정하기보다 사용 코드와 패치 상태를 함께 확인해야 한다.
&lt;/p&gt;
```

  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;복제형 컴포넌트 구조에서 발생하는 패치 고립 문제&lt;/h2&gt;
    &lt;p&gt;
      전자정부 표준프레임워크의 공공 컴포넌트는 필요한 소스 코드를 프로젝트에 복사해 사용하는 형태가 많다. 중앙 라이브러리만 갱신하면 모든 시스템에 변경 사항이 반영되는 구조와 달리, 복제된 코드는 각 프로젝트에서 별도로 수정하고 배포해야 한다.
    &lt;/p&gt;
    &lt;p&gt;
      이 구조에서는 원본 컴포넌트에 보안 패치가 제공되더라도 이미 구축된 시스템에 자동으로 반영되지 않을 수 있다. 같은 취약한 코드가 여러 공공기관과 민간 서비스에 남아 있는 패치 고립 현상이 발생하기 쉬운 이유다.
    &lt;/p&gt;
    &lt;p&gt;
      단일 컴포넌트의 결함이 다양한 시스템에 복제돼 있다면 개별 시스템의 문제가 아니라 공통 공급망 위험으로 확대될 수 있다. 프레임워크 운영 주체의 수정만으로 끝나는 것이 아니라 해당 코드를 가져다 사용한 각 기관과 개발·운영 사업자의 후속 조치가 필요하다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;AI 자동 탐지 이후 검증과 패치가 중요한 이유&lt;/h2&gt;
    &lt;p&gt;
      프로젝트 캐노피는 AI 기술을 활용해 대규모 소스 코드에서 취약점 후보를 빠르게 찾는 데 초점을 맞췄다. 다만 자동 분석으로 탐지된 항목은 실제 취약 여부와 악용 가능성, 서비스 영향 범위를 사람이 다시 검증해야 한다.
    &lt;/p&gt;
    &lt;p&gt;
      탐지 속도가 빨라질수록 분석가 검증과 수정 코드 작성, 회귀 테스트, 패치 배포 과정이 새로운 병목이 될 수 있다. 프로젝트 캐노피가 현재 집중하는 부분도 자동 탐지 이후의 검증과 패치 처리 속도를 높이는 협업 구조다.
    &lt;/p&gt;
    &lt;p&gt;
      유관 기관들은 공식 제보된 취약점을 순차적으로 수정해 최신 소프트웨어 버전에 반영하고 있다. 조치 대기 중인 잔여 취약점 정보와 적용된 패치 정보는 프로젝트 캐노피 파트너 회원사에 우선 제공되는 것으로 전해졌다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;전자정부 표준프레임워크 사용 기관의 점검 항목&lt;/h2&gt;
    &lt;p&gt;
      전자정부 표준프레임워크 기반 시스템을 운영하는 기관과 기업은 단순히 프레임워크 버전만 확인해서는 부족하다. 실제 프로젝트에 복사된 공공 컴포넌트와 이후 자체 수정된 코드까지 함께 살펴봐야 한다.
    &lt;/p&gt;

```
&lt;ul class=&quot;check-list&quot;&gt;
  &lt;li&gt;현재 운영 중인 전자정부 표준프레임워크 버전과 적용 컴포넌트를 식별한다.&lt;/li&gt;
  &lt;li&gt;모놀리식 또는 MSA 공공 컴포넌트의 소스 코드 복제 여부를 확인한다.&lt;/li&gt;
  &lt;li&gt;인증, 권한 검증, SQL 실행, 파일 처리, 암호키 관리 영역을 우선 점검한다.&lt;/li&gt;
  &lt;li&gt;최신 배포 버전과 현재 운영 코드의 변경 사항을 비교한다.&lt;/li&gt;
  &lt;li&gt;공식 패치가 제공된 항목은 영향 분석과 회귀 테스트 후 반영한다.&lt;/li&gt;
  &lt;li&gt;직접 수정한 코드가 향후 프레임워크 업데이트 과정에서 누락되지 않도록 변경 이력을 관리한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;notice-box&quot;&gt;
  &lt;p&gt;&lt;strong&gt;주의할 점&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;
    취약점 정보가 공개됐다는 이유만으로 운영 시스템에 임의 수정 사항을 바로 적용하면 기능 오류나 호환성 문제가 발생할 수 있다. 운영 반영 전에는 적용 버전, 컴포넌트 사용 여부, 수정 범위와 서비스 영향을 확인하고 테스트 환경에서 검증해야 한다.
  &lt;/p&gt;
&lt;/div&gt;
```

  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;오픈소스 보안 분석 대상으로 확대 예정&lt;/h2&gt;
    &lt;p&gt;
      프로젝트 캐노피는 전자정부 표준프레임워크 분석을 시작으로 국내외에서 널리 사용되는 주요 오픈소스 소프트웨어에 대한 보안 분석을 정기적으로 수행할 계획이다.
    &lt;/p&gt;
    &lt;p&gt;
      박세준 프로젝트 캐노피 위원장은 취약점 탐지 기술의 발전에 맞춰 검증과 패치를 신속하게 배포할 수 있는 협업 플랫폼을 구축하겠다는 방향을 밝혔다. 앞으로는 취약점 탐지 건수뿐 아니라 실제 패치 반영 속도와 기존 구축 시스템까지 수정 사항을 전달하는 체계가 중요한 평가 기준이 될 것으로 보인다.
    &lt;/p&gt;
  &lt;/section&gt;

&lt;/article&gt;
</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI보안</category>
      <category>egovframe</category>
      <category>IDOR</category>
      <category>공공시스템보안</category>
      <category>보안패치</category>
      <category>오픈소스보안</category>
      <category>인증우회</category>
      <category>전자정부표준프레임워크</category>
      <category>취약점분석</category>
      <category>프로젝트캐노피</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/591</guid>
      <comments>https://togethergrow.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%BA%90%EB%85%B8%ED%94%BC-%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%B7%A8%EC%95%BD%EC%A0%90-990%EA%B1%B4-%EB%B6%84%EC%84%9D-%EA%B2%B0%EA%B3%BC-%EA%B3%B5%EA%B0%9C#entry591comment</comments>
      <pubDate>Wed, 15 Jul 2026 11:06:42 +0900</pubDate>
    </item>
    <item>
      <title>전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심</title>
      <link>https://togethergrow.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC</link>
      <description>&lt;!doctype html&gt;

&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;전자정부 표준프레임워크 5.0의 JDK 17, Spring Framework 6.2, Spring Boot 3, Jakarta 전환 내용과 기존 4.x 프로젝트의 마이그레이션 주의사항을 자세히 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;전자정부 표준프레임워크 5.0,eGovFrame 5.0,Spring Framework 6,Spring Boot 3,Jakarta EE,JDK 17,javax jakarta 전환,공통컴포넌트 5.0,공공 SI,프레임워크 마이그레이션&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;eGovFrame 5.0에서 달라진 Java, Spring, Jakarta 기술 스택과 기존 프로젝트 전환 시 확인할 내용을 설명합니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/egovframe-5-spring-jakarta&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/replace-og-image.jpg&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;JDK 17, Spring 6.2, Spring Boot 3와 Jakarta 전환을 중심으로 eGovFrame 5.0을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;egov5-article&quot;&gt;
    &lt;style&gt;
      .egov5-article {
        width: 100%;
        max-width: 920px;
        margin: 0 auto;
        padding: 22px 18px 48px;
        line-height: 1.75;
        word-break: keep-all;
        overflow-wrap: break-word;
      }.egov5-article h1 {
    margin: 0 0 26px;
    font-size: 2.08rem;
    line-height: 1.38;
    letter-spacing: -0.04em;
  }

  .egov5-article h2 {
    margin: 48px 0 20px;
    padding-bottom: 10px;
    border-bottom: 2px solid rgba(120, 120, 120, 0.22);
    font-size: 1.52rem;
    line-height: 1.45;
    letter-spacing: -0.025em;
  }

  .egov5-article h3 {
    margin: 30px 0 12px;
    font-size: 1.18rem;
    line-height: 1.5;
  }

  .egov5-article p {
    margin: 0 0 18px;
  }

  .egov5-article ul,
  .egov5-article ol {
    margin: 12px 0 22px;
    padding-left: 1.4rem;
  }

  .egov5-article li {
    margin-bottom: 8px;
  }

  .egov5-article code {
    padding: 2px 6px;
    border-radius: 4px;
    background: rgba(120, 120, 120, 0.12);
    font-size: 0.92em;
  }

  .egov5-article pre {
    margin: 20px 0 28px;
    padding: 18px;
    overflow-x: auto;
    border: 1px solid rgba(120, 120, 120, 0.24);
    border-radius: 10px;
    background: rgba(120, 120, 120, 0.08);
    line-height: 1.65;
    white-space: pre;
  }

  .egov5-article pre code {
    padding: 0;
    background: transparent;
  }

  .egov5-article .lead {
    margin-bottom: 26px;
    font-size: 1.07rem;
  }

  .egov5-article .info-box,
  .egov5-article .point-box,
  .egov5-article .warning-box {
    margin: 24px 0;
    padding: 19px 21px;
    border: 1px solid rgba(120, 120, 120, 0.28);
    border-radius: 11px;
    background: rgba(120, 120, 120, 0.06);
  }

  .egov5-article .point-box {
    border-left: 5px solid #2563eb;
  }

  .egov5-article .warning-box {
    border-left: 5px solid #d97706;
  }

  .egov5-article .table-scroll {
    width: 100%;
    margin: 22px 0 30px;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border: 1px solid rgba(120, 120, 120, 0.24);
    border-radius: 10px;
  }

  .egov5-article table {
    width: 100%;
    min-width: 720px;
    border-collapse: collapse;
  }

  .egov5-article th,
  .egov5-article td {
    padding: 13px 14px;
    border-right: 1px solid rgba(120, 120, 120, 0.18);
    border-bottom: 1px solid rgba(120, 120, 120, 0.18);
    text-align: left;
    vertical-align: top;
  }

  .egov5-article th {
    background: rgba(120, 120, 120, 0.1);
    font-weight: 700;
  }

  .egov5-article th:last-child,
  .egov5-article td:last-child {
    border-right: 0;
  }

  .egov5-article tr:last-child td {
    border-bottom: 0;
  }

  .egov5-article .stack-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin: 22px 0 30px;
  }

  .egov5-article .stack-card {
    padding: 18px;
    border: 1px solid rgba(120, 120, 120, 0.25);
    border-radius: 10px;
  }

  .egov5-article .stack-card strong {
    display: block;
    margin-bottom: 7px;
    font-size: 1.05rem;
  }

  .egov5-article .check-list {
    padding-left: 0;
    list-style: none;
  }

  .egov5-article .check-list li {
    position: relative;
    padding-left: 27px;
  }

  .egov5-article .check-list li::before {
    position: absolute;
    left: 0;
    content: &quot;✓&quot;;
    font-weight: 700;
  }

  .egov5-article .number-list {
    counter-reset: egov-step;
    padding-left: 0;
    list-style: none;
  }

  .egov5-article .number-list li {
    position: relative;
    margin-bottom: 18px;
    padding-left: 42px;
  }

  .egov5-article .number-list li::before {
    position: absolute;
    top: 0;
    left: 0;
    width: 29px;
    height: 29px;
    border-radius: 50%;
    background: rgba(120, 120, 120, 0.14);
    content: counter(egov-step);
    counter-increment: egov-step;
    text-align: center;
    line-height: 29px;
    font-weight: 700;
  }

  .egov5-article .official-link {
    display: inline-block;
    margin-top: 3px;
  }

  @media (max-width: 700px) {
    .egov5-article {
      padding: 18px 14px 40px;
    }

    .egov5-article h1 {
      font-size: 1.7rem;
    }

    .egov5-article h2 {
      margin-top: 40px;
      font-size: 1.35rem;
    }

    .egov5-article .stack-grid {
      grid-template-columns: 1fr;
    }

    .egov5-article .info-box,
    .egov5-article .point-box,
    .egov5-article .warning-box {
      padding: 16px;
    }
  }
&lt;/style&gt;

&lt;article&gt;
  &lt;header&gt;
    &lt;h1&gt;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&lt;/h1&gt;

    &lt;p class=&quot;lead&quot;&gt;
      전자정부 표준프레임워크 5.0은 단순한 라이브러리 버전 업데이트가 아니다. JDK 17, Spring Framework 6.2 계열과 Jakarta 기반 기술 스택을 적용하면서 과거 Java EE와 Spring 5 중심의 구조에서 현대적인 Java 애플리케이션 환경으로 이동한 버전이다. 기존 4.x 프로젝트를 운영하는 조직이라면 신규 기능보다 호환성 변화와 마이그레이션 범위를 먼저 확인해야 한다.
    &lt;/p&gt;

    &lt;div class=&quot;point-box&quot;&gt;
      &lt;strong&gt;핵심 요약&lt;/strong&gt;&lt;br&gt;
      전자정부 표준프레임워크 5.0 실행환경은 JDK 17을 기본 전제로 한다.&lt;br&gt;
      Spring Framework는 5.3 계열에서 6.2 계열로 올라갔다.&lt;br&gt;
      기존 &lt;code&gt;javax.*&lt;/code&gt; 기반 코드는 &lt;code&gt;jakarta.*&lt;/code&gt; 전환 여부를 반드시 점검해야 한다.&lt;br&gt;
      Spring Boot 기반 템플릿은 Boot 3 계열을 사용하므로 기존 Boot 2 프로젝트와 직접 호환되지 않는다.
    &lt;/div&gt;
  &lt;/header&gt;

  &lt;section&gt;
    &lt;h2&gt;전자정부 표준프레임워크 5.0은 무엇이 달라졌나&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크는 Spring을 기반으로 공공 정보시스템 개발에 필요한 실행환경, 개발환경, 공통컴포넌트와 예제 프로젝트를 제공한다. 5.0에서는 기반 프레임워크와 Java 버전이 크게 변경되면서 프로젝트의 최소 실행 조건도 달라졌다.
    &lt;/p&gt;

    &lt;div class=&quot;stack-grid&quot;&gt;
      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;JDK 17&lt;/strong&gt;
        이전 Java 버전을 계속 사용하는 프로젝트는 빌드와 실행 환경부터 변경해야 한다.
      &lt;/div&gt;

      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;Spring Framework 6.2&lt;/strong&gt;
        Spring 5.3 기반이었던 4.x와 주요 API 및 기반 사양이 달라졌다.
      &lt;/div&gt;

      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;Jakarta 기반&lt;/strong&gt;
        Servlet, Validation, Persistence 등에서 &lt;code&gt;javax&lt;/code&gt; 대신 &lt;code&gt;jakarta&lt;/code&gt; 패키지를 사용한다.
      &lt;/div&gt;

      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;Spring Boot 3&lt;/strong&gt;
        Boot 기반 프로젝트는 Jakarta 전환과 JDK 17 요구사항을 함께 적용받는다.
      &lt;/div&gt;

      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;공통컴포넌트 5.0&lt;/strong&gt;
        실행환경 5.0에 맞게 공통 업무 기능과 프로젝트 구성이 갱신됐다.
      &lt;/div&gt;

      &lt;div class=&quot;stack-card&quot;&gt;
        &lt;strong&gt;현대화된 개발 구조&lt;/strong&gt;
        전통적인 JSP·XML 방식과 함께 Java Config, REST API, 프런트엔드 분리형 예제가 제공된다.
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;
      공식 실행환경 저장소에서는 전자정부 표준프레임워크 5.0이 Spring Framework 6.2.11과 Java 17을 기반으로 한다고 안내한다. Boot 기반 예제에서는 Spring Boot 3.5 계열과 Jakarta EE 10 구성이 사용되며, 전통적인 웹 템플릿은 Jakarta EE 9와 Servlet 5 조합을 사용하는 사례도 있다.
    &lt;/p&gt;

    &lt;div class=&quot;warning-box&quot;&gt;
      &lt;strong&gt;프로젝트마다 Jakarta 버전이 같다고 단정하면 안 된다&lt;/strong&gt;&lt;br&gt;
      Boot 기반 예제와 외부 WAS에 배포하는 전통적인 WAR 템플릿은 기술 구성이 다를 수 있다.&lt;br&gt;
      Jakarta EE 9인지 10인지, Servlet 5인지 6인지 프로젝트 템플릿과 배포 서버별로 확인해야 한다.&lt;br&gt;
      프레임워크 5.0이라는 이름만 보고 모든 서버에서 같은 사양을 지원한다고 판단하면 안 된다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;주요 기술 스택 비교&lt;/h2&gt;

    &lt;div class=&quot;table-scroll&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;구분&lt;/th&gt;
            &lt;th&gt;전자정부 표준프레임워크 4.x&lt;/th&gt;
            &lt;th&gt;전자정부 표준프레임워크 5.0&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;기본 Java&lt;/td&gt;
            &lt;td&gt;프로젝트 버전에 따라 Java 8 이상 중심&lt;/td&gt;
            &lt;td&gt;JDK 17 필수&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Spring Framework&lt;/td&gt;
            &lt;td&gt;5.3 계열&lt;/td&gt;
            &lt;td&gt;6.2.11 기반&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Spring Boot&lt;/td&gt;
            &lt;td&gt;Boot 2 계열 중심&lt;/td&gt;
            &lt;td&gt;Boot 3.5 계열 기반 예제 제공&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;엔터프라이즈 API&lt;/td&gt;
            &lt;td&gt;Java EE와 &lt;code&gt;javax.*&lt;/code&gt; 중심&lt;/td&gt;
            &lt;td&gt;Jakarta EE와 &lt;code&gt;jakarta.*&lt;/code&gt; 중심&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Servlet API&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;javax.servlet&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;jakarta.servlet&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Validation API&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;javax.validation&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;jakarta.validation&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Persistence API&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;javax.persistence&lt;/code&gt;&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;jakarta.persistence&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;배포 서버&lt;/td&gt;
            &lt;td&gt;Java EE·Servlet 구형 사양 지원 서버&lt;/td&gt;
            &lt;td&gt;Jakarta EE 9 이상 또는 Servlet 5 이상 지원 서버 필요&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;호환성&lt;/td&gt;
            &lt;td&gt;5.0 실행환경과 직접 호환되지 않음&lt;/td&gt;
            &lt;td&gt;코드와 의존성 마이그레이션 필요&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;권장 적용&lt;/td&gt;
            &lt;td&gt;기존 운영 시스템 유지&lt;/td&gt;
            &lt;td&gt;신규 구축 또는 계획된 현대화 프로젝트&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;Spring Framework 6.2 전환의 의미&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크 5.0은 Spring Framework 6.2 계열을 기반으로 한다. Spring 6은 Java 17과 Jakarta EE를 기본 전제로 하므로 기존 Spring 5 프로젝트에서 단순히 Maven 버전만 바꾸는 방식으로는 전환하기 어렵다.
    &lt;/p&gt;

    &lt;h3&gt;Java 17이 최소 기준이 된다&lt;/h3&gt;

    &lt;p&gt;
      빌드 서버, 개발자 PC, WAS와 컨테이너 이미지의 Java 버전을 모두 확인해야 한다. 애플리케이션은 JDK 17로 빌드했지만 운영 WAS가 이전 Java 버전으로 실행된다면 배포 단계에서 실패한다.
    &lt;/p&gt;

    &lt;p&gt;
      운영 환경에서는 애플리케이션 서버만 확인해서는 부족하다. Jenkins, Maven 실행 환경, 정적 분석 도구, 테스트 도구와 에이전트가 JDK 17을 지원하는지도 함께 확인해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;Spring 5용 확장 라이브러리 호환성을 확인해야 한다&lt;/h3&gt;

    &lt;p&gt;
      Spring Security, Spring Batch, Spring Data, ORM 연동 라이브러리와 사내 공통 모듈이 Spring 6을 지원하는지 확인해야 한다. 오래된 라이브러리가 &lt;code&gt;javax.servlet&lt;/code&gt;이나 제거된 Spring API를 참조하면 컴파일 또는 실행 오류가 발생할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;XML 설정을 반드시 버릴 필요는 없다&lt;/h3&gt;

    &lt;p&gt;
      Spring 6을 사용한다고 해서 모든 XML 설정을 Java Config로 바꿔야 하는 것은 아니다. 기존 XML 기반 애플리케이션도 호환되는 스키마와 클래스를 사용하면 운영할 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      다만 신규 프로젝트에서는 Java Config, 컴포넌트 스캔과 Boot 자동 설정을 활용하면 설정 변경 추적과 테스트가 쉬워질 수 있다. 기존 시스템은 안정성을 우선하고 신규 모듈부터 단계적으로 전환하는 방법이 현실적이다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;Jakarta 전환에서 가장 많이 생기는 문제&lt;/h2&gt;

    &lt;p&gt;
      Java EE 사양이 Eclipse 재단으로 이전되면서 패키지 이름이 &lt;code&gt;javax&lt;/code&gt;에서 &lt;code&gt;jakarta&lt;/code&gt;로 변경됐다. 전자정부 표준프레임워크 5.0과 Spring 6은 이 Jakarta 기반 API를 사용한다.
    &lt;/p&gt;

    &lt;pre&gt;&lt;code&gt;// 기존 코드

import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import javax.persistence.Entity;

// 전환 코드 import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import jakarta.persistence.Entity;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
      패키지 이름을 일괄 치환하는 것만으로 전환이 끝나는 것은 아니다. 사용 중인 라이브러리, WAS, 배포 기술자와 테스트 코드가 모두 Jakarta API를 지원해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;Servlet 필터와 리스너&lt;/h3&gt;

    &lt;p&gt;
      직접 구현한 Filter, ServletContextListener, HttpSessionListener와 파일 업로드 코드는 &lt;code&gt;jakarta.servlet&lt;/code&gt; 기반으로 수정해야 한다. 보안 필터나 사내 인증 모듈이 오래된 &lt;code&gt;javax.servlet&lt;/code&gt; API를 사용한다면 별도 업그레이드가 필요하다.
    &lt;/p&gt;

    &lt;h3&gt;JPA와 데이터 접근 계층&lt;/h3&gt;

    &lt;p&gt;
      JPA를 사용하는 프로젝트는 Entity, PersistenceContext와 관련 annotation을 &lt;code&gt;jakarta.persistence&lt;/code&gt;로 바꿔야 한다. Hibernate 같은 구현체도 Jakarta 대응 버전으로 올려야 한다.
    &lt;/p&gt;

    &lt;p&gt;
      MyBatis 중심 프로젝트는 JPA 프로젝트보다 영향을 적게 받을 수 있지만, 트랜잭션과 Spring 연동 모듈의 버전 호환성은 별도로 확인해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;Validation과 Bean Validation&lt;/h3&gt;

    &lt;p&gt;
      &lt;code&gt;javax.validation&lt;/code&gt;을 사용하는 DTO와 폼 객체는 &lt;code&gt;jakarta.validation&lt;/code&gt;으로 변경해야 한다. Validator 구현체와 메시지 처리 설정도 새로운 사양을 지원하는 버전인지 확인해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;JSP 태그와 WAS 호환성&lt;/h3&gt;

    &lt;p&gt;
      JSP를 계속 사용할 수는 있지만 Jakarta 사양에 맞는 Servlet 컨테이너가 필요하다. 기존 Tomcat 9 계열은 &lt;code&gt;javax&lt;/code&gt; 기반이므로 일반적으로 Jakarta 기반 애플리케이션을 그대로 배포할 수 없다.
    &lt;/p&gt;

    &lt;p&gt;
      Tomcat 10 이상이나 Jakarta EE 지원 WAS를 사용해야 하며, 실제 템플릿이 요구하는 Servlet 사양과 서버 버전을 맞춰야 한다.
    &lt;/p&gt;

    &lt;div class=&quot;warning-box&quot;&gt;
      &lt;strong&gt;javax와 jakarta 라이브러리를 한 애플리케이션에 혼합하지 않는다&lt;/strong&gt;&lt;br&gt;
      이름이 비슷해도 서로 다른 타입이므로 자동 호환되지 않는다.&lt;br&gt;
      필터, 요청 객체, Validation annotation과 JPA Entity가 서로 다른 패키지를 사용하면 런타임 오류가 발생할 수 있다.&lt;br&gt;
      애플리케이션과 주요 라이브러리를 같은 Jakarta 세대로 맞추는 것이 중요하다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;Spring Boot 3 기반 개발에서 달라지는 점&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크 5.0은 Spring Boot 기반 starter와 예제 프로젝트를 제공한다. Boot 기반으로 구성하면 내장 서버, 자동 설정, 외부 설정과 실행 가능한 패키징 방식을 활용할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;외부 WAS 없이 실행할 수 있다&lt;/h3&gt;

    &lt;p&gt;
      내장 Tomcat을 사용하는 Boot 프로젝트는 별도의 WAS 설치 없이 애플리케이션을 실행할 수 있다. 개발 환경과 테스트 자동화에서는 서버 설치 과정이 줄어들고, 컨테이너 이미지에도 애플리케이션 실행 환경을 함께 포함할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;설정 방식을 단순화할 수 있다&lt;/h3&gt;

    &lt;p&gt;
      전통적인 XML 설정을 모두 제거할 필요는 없지만, &lt;code&gt;application.yml&lt;/code&gt;과 Java Config를 사용하면 환경별 설정을 외부화하기 쉽다. 데이터소스, 로그 수준, 프로파일과 서버 포트도 배포 환경에서 주입할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;배포 단위가 달라질 수 있다&lt;/h3&gt;

    &lt;p&gt;
      기존 공공 프로젝트는 WAR 파일을 외부 WAS에 배포하는 방식이 많았다. Boot 프로젝트는 실행 가능한 JAR 또는 컨테이너 이미지로 배포할 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      단, 기관 운영 표준이 외부 WAS 배포를 요구하거나 여러 애플리케이션을 하나의 WAS에서 관리한다면 기존 WAR 방식이 필요할 수 있다. 기술적으로 가능하다는 이유만으로 운영 표준을 무시해서는 안 된다.
    &lt;/p&gt;

    &lt;div class=&quot;info-box&quot;&gt;
      &lt;strong&gt;실무 기준으로 보면&lt;/strong&gt;&lt;br&gt;
      신규 REST API나 컨테이너 기반 시스템은 Boot 방식이 유리한 경우가 많다.&lt;br&gt;
      기존 JSP 중심 업무 시스템은 전통적인 WAR 구조를 유지하는 편이 전환 위험을 줄일 수 있다.&lt;br&gt;
      같은 기관에서도 시스템 성격에 따라 두 방식을 나누어 적용할 수 있다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;전통적인 웹 프로젝트와 Boot 프로젝트 비교&lt;/h2&gt;

    &lt;div class=&quot;table-scroll&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;비교 항목&lt;/th&gt;
            &lt;th&gt;전통적인 WAR 프로젝트&lt;/th&gt;
            &lt;th&gt;Spring Boot 프로젝트&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;배포 방식&lt;/td&gt;
            &lt;td&gt;외부 WAS 또는 Servlet 컨테이너에 WAR 배포&lt;/td&gt;
            &lt;td&gt;실행 가능한 JAR 또는 컨테이너 이미지&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;서버 구성&lt;/td&gt;
            &lt;td&gt;운영 서버에 WAS를 별도 설치&lt;/td&gt;
            &lt;td&gt;내장 서버를 애플리케이션과 함께 구성 가능&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;설정 형태&lt;/td&gt;
            &lt;td&gt;XML과 WAS 설정 비중이 높음&lt;/td&gt;
            &lt;td&gt;Java Config와 외부 설정 중심&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;JSP 사용&lt;/td&gt;
            &lt;td&gt;적용하기 쉬움&lt;/td&gt;
            &lt;td&gt;가능하지만 패키징과 뷰 구성을 신중히 설계&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;REST API&lt;/td&gt;
            &lt;td&gt;구현 가능&lt;/td&gt;
            &lt;td&gt;API 중심 구조에 상대적으로 편리&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;컨테이너 배포&lt;/td&gt;
            &lt;td&gt;WAS 이미지와 배포 구조를 함께 관리&lt;/td&gt;
            &lt;td&gt;애플리케이션 단위 이미지 구성에 유리&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;운영 독립성&lt;/td&gt;
            &lt;td&gt;공용 WAS 운영 정책에 영향&lt;/td&gt;
            &lt;td&gt;서비스별 버전과 설정을 독립적으로 관리하기 쉬움&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;적합한 환경&lt;/td&gt;
            &lt;td&gt;기존 JSP 업무 시스템과 중앙 WAS 운영&lt;/td&gt;
            &lt;td&gt;신규 API, 독립 서비스와 클라우드 환경&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;공통컴포넌트 5.0에서 확인할 점&lt;/h2&gt;

    &lt;p&gt;
      공통컴포넌트 5.0은 로그인, 권한, 게시판, 파일, 통계와 시스템 관리 같은 공통 업무 기능을 제공한다. 신규 프로젝트에서는 필요한 컴포넌트만 선택하고 실제 보안 정책과 업무 요구사항에 맞게 검토해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;전체 컴포넌트를 무조건 설치하지 않는다&lt;/h3&gt;

    &lt;p&gt;
      all-in-one 예제는 학습과 기능 확인에는 편리하지만 실제 운영 시스템에 불필요한 기능까지 포함할 수 있다. 사용하지 않는 Controller, 관리자 화면과 테이블이 남아 있으면 관리 범위와 보안 점검 대상이 늘어난다.
    &lt;/p&gt;

    &lt;h3&gt;인증과 권한 기능을 그대로 운영하지 않는다&lt;/h3&gt;

    &lt;p&gt;
      로그인과 권한 컴포넌트는 기관의 인증 체계, 개인정보 처리 기준, 비밀번호 정책과 감사 요구사항에 맞게 검토해야 한다. SSO, 행정전자서명, 민간 인증 또는 기관 통합 인증을 사용한다면 별도 연계 설계가 필요하다.
    &lt;/p&gt;

    &lt;h3&gt;제공 예제와 운영 코드를 구분한다&lt;/h3&gt;

    &lt;p&gt;
      공통컴포넌트는 개발을 시작하기 위한 기반이지 완성된 업무 시스템 전체를 의미하지 않는다. 화면, 예외 처리, 개인정보 마스킹, 접근 통제, 로깅과 성능 설정을 운영 기준에 맞게 수정해야 한다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;AI 기능이 포함됐다는 의미&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크 5.0 개발가이드에는 Spring AI와 LangChain4j 연계 계층 및 예제 프로젝트가 포함되어 있다. 프레임워크가 관련 의존성 버전을 관리해 생성형 AI 기능을 프로젝트에 연결하는 출발점을 제공한다.
    &lt;/p&gt;

    &lt;p&gt;
      이것이 공공 시스템에서 생성형 AI를 바로 운영해도 된다는 의미는 아니다. 외부 AI 서비스에 전송되는 데이터, 개인정보와 행정정보의 저장 위치, 프롬프트 기록, 모델 응답 검증과 비용 통제가 별도로 필요하다.
    &lt;/p&gt;

    &lt;div class=&quot;warning-box&quot;&gt;
      &lt;strong&gt;AI 연계 기능 적용 전 확인할 내용&lt;/strong&gt;&lt;br&gt;
      개인정보와 비공개 행정정보를 외부 모델로 전송할 수 있는지 검토한다.&lt;br&gt;
      모델 응답을 업무 의사결정에 그대로 사용하지 않도록 검증 절차를 둔다.&lt;br&gt;
      프롬프트와 응답 로그의 보존 기간 및 접근 권한을 정의한다.&lt;br&gt;
      모델 장애나 사용량 제한이 발생했을 때의 대체 흐름을 마련한다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;기존 4.x 프로젝트를 5.0으로 옮길 때 어려운 이유&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크 5.0은 Spring 6과 Jakarta 전환 때문에 이전 실행환경과 직접 호환되지 않는다. 따라서 실행환경 의존성 버전만 5.0으로 변경하는 방식은 권장하기 어렵다.
    &lt;/p&gt;

    &lt;h3&gt;소스 코드 변경&lt;/h3&gt;

    &lt;p&gt;
      &lt;code&gt;javax&lt;/code&gt; import를 &lt;code&gt;jakarta&lt;/code&gt;로 변경하고 제거되거나 변경된 Spring API를 수정해야 한다. 사내 공통 라이브러리와 외부 솔루션의 연동 모듈도 함께 점검해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;빌드 환경 변경&lt;/h3&gt;

    &lt;p&gt;
      Maven Compiler 설정, Java 버전, 플러그인과 테스트 환경을 JDK 17 기준으로 맞춰야 한다. 오래된 Maven 플러그인이 Java 17에서 정상 동작하지 않을 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;WAS 변경&lt;/h3&gt;

    &lt;p&gt;
      기존 WAS가 Jakarta EE 또는 Servlet 5 이상을 지원하지 않으면 서버 업그레이드나 교체가 필요하다. WAS 버전 변경은 JVM 옵션, 데이터소스, 세션 클러스터링과 보안 설정까지 영향을 줄 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;연계 모듈 변경&lt;/h3&gt;

    &lt;p&gt;
      전자결재, SSO, 리포팅, DRM, 파일 변환, 메시징과 대외 연계 솔루션이 Jakarta 환경을 지원하는지 확인해야 한다. 핵심 애플리케이션을 전환했더라도 연계 모듈 하나가 호환되지 않으면 전체 배포가 지연될 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;회귀 테스트 확대&lt;/h3&gt;

    &lt;p&gt;
      컴파일 성공만으로 호환성이 확인되는 것은 아니다. 로그인, 권한, 파일 업로드, 배치, 트랜잭션, 세션, 엑셀 다운로드, 보고서 출력과 대외 연계를 실제 운영 조건으로 테스트해야 한다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;5.0 마이그레이션 권장 순서&lt;/h2&gt;

    &lt;ol class=&quot;number-list&quot;&gt;
      &lt;li&gt;
        &lt;strong&gt;현재 기술 스택을 조사한다.&lt;/strong&gt;&lt;br&gt;
        Java, Spring, Servlet, WAS, 데이터베이스 드라이버와 외부 라이브러리 버전을 목록화한다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;javax 사용 범위를 검색한다.&lt;/strong&gt;&lt;br&gt;
        애플리케이션 코드뿐 아니라 사내 공통 모듈과 배포 라이브러리까지 조사한다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;JDK 17 빌드 환경을 먼저 만든다.&lt;/strong&gt;&lt;br&gt;
        개발 PC와 CI 서버가 같은 JDK 및 Maven 버전을 사용하도록 맞춘다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;Jakarta 지원 WAS를 선정한다.&lt;/strong&gt;&lt;br&gt;
        사용할 템플릿의 Servlet 및 Jakarta 사양과 서버 지원 범위를 일치시킨다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;대표 업무 한 개를 시험 전환한다.&lt;/strong&gt;&lt;br&gt;
        로그인, 데이터 조회, 저장, 파일과 외부 연계가 포함된 업무를 선정한다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;의존성을 단계적으로 교체한다.&lt;/strong&gt;&lt;br&gt;
        Spring, 보안, 데이터 접근, 로깅과 테스트 라이브러리를 호환되는 세대로 맞춘다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;성능과 장애 복구를 검증한다.&lt;/strong&gt;&lt;br&gt;
        정상 부하뿐 아니라 WAS 재시작, DB 단절과 세션 장애 상황도 시험한다.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;병행 운영과 롤백 절차를 마련한다.&lt;/strong&gt;&lt;br&gt;
        전환 중 문제가 발생하면 기존 4.x 환경으로 되돌릴 수 있어야 한다.
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;의존성 설정에서 확인할 부분&lt;/h2&gt;

    &lt;p&gt;
      Boot 기반 프로젝트에서는 전자정부 표준프레임워크가 제공하는 parent 또는 BOM을 사용해 주요 의존성 버전을 관리할 수 있다. 개별 라이브러리 버전을 임의로 덮어쓰면 호환성 문제가 생길 수 있으므로 필요한 경우에만 변경하는 것이 좋다.
    &lt;/p&gt;

    &lt;pre&gt;&lt;code&gt;&amp;lt;parent&amp;gt;
&amp;lt;groupId&amp;gt;org.egovframe.boot&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;egovframe-boot-starter-parent&amp;lt;/artifactId&amp;gt;
&amp;lt;version&amp;gt;5.0.0&amp;lt;/version&amp;gt;
&amp;lt;relativePath/&amp;gt;

&lt;/parent&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
      실제 프로젝트에서는 공식 템플릿의 최신 설정을 기준으로 groupId, artifactId와 버전을 확인해야 한다. 프레임워크 의존성만 5.0으로 바꾸고 Spring 또는 Boot 버전을 별도로 낮추는 구성은 피하는 것이 안전하다.
    &lt;/p&gt;

    &lt;div class=&quot;info-box&quot;&gt;
      &lt;strong&gt;의존성 충돌 점검 방법&lt;/strong&gt;&lt;br&gt;
      Maven dependency tree로 Spring과 Jakarta API가 여러 버전으로 섞였는지 확인한다.&lt;br&gt;
      WAS가 제공하는 라이브러리와 애플리케이션에 포함된 라이브러리의 중복을 확인한다.&lt;br&gt;
      테스트와 운영에서 같은 dependency lock 또는 빌드 결과물을 사용한다.&lt;br&gt;
      보안 취약점 때문에 버전을 변경할 때는 프레임워크 호환성 테스트를 함께 진행한다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;신규 프로젝트에 5.0이 적합한 경우&lt;/h2&gt;

    &lt;ul class=&quot;check-list&quot;&gt;
      &lt;li&gt;신규 공공 Java 시스템을 JDK 17 이상으로 구축한다.&lt;/li&gt;
      &lt;li&gt;Spring 6과 Jakarta 기반 기술 스택을 사용할 계획이다.&lt;/li&gt;
      &lt;li&gt;기존 &lt;code&gt;javax&lt;/code&gt; 라이브러리 의존성이 없다.&lt;/li&gt;
      &lt;li&gt;REST API와 프런트엔드 분리형 구조를 적용한다.&lt;/li&gt;
      &lt;li&gt;Spring Boot와 컨테이너 기반 배포를 검토하고 있다.&lt;/li&gt;
      &lt;li&gt;Jakarta 지원 WAS 또는 최신 Servlet 컨테이너를 사용할 수 있다.&lt;/li&gt;
      &lt;li&gt;공통컴포넌트를 필요한 범위만 선별해 적용할 수 있다.&lt;/li&gt;
      &lt;li&gt;JDK 17 기반 CI/CD와 보안 점검 체계를 준비할 수 있다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;기존 4.x를 당장 유지하는 편이 나은 경우&lt;/h2&gt;

    &lt;ul class=&quot;check-list&quot;&gt;
      &lt;li&gt;서비스 종료나 재구축 일정이 가까운 시스템이다.&lt;/li&gt;
      &lt;li&gt;사용 중인 WAS와 상용 솔루션이 Jakarta를 지원하지 않는다.&lt;/li&gt;
      &lt;li&gt;대규모 &lt;code&gt;javax&lt;/code&gt; 기반 사내 공통 모듈을 사용하고 있다.&lt;/li&gt;
      &lt;li&gt;업그레이드 테스트와 업무 회귀 테스트 기간을 확보하기 어렵다.&lt;/li&gt;
      &lt;li&gt;현재 시스템이 안정적으로 운영되고 보안 지원도 유지되고 있다.&lt;/li&gt;
      &lt;li&gt;단순 버전 변경보다 전체 시스템 재구축 비용이 더 큰 상황이다.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;
      다만 유지 결정을 내렸더라도 Java와 Spring의 보안 지원 기간, 사용 중인 WAS의 제품 수명주기와 외부 솔루션 지원 종료 시점은 계속 확인해야 한다. 장기적으로는 Jakarta 전환을 피하기 어렵기 때문에 기술 부채와 예상 전환 비용을 문서화하는 것이 좋다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;운영 환경에서 반드시 확인할 체크리스트&lt;/h2&gt;

    &lt;div class=&quot;table-scroll&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;확인 영역&lt;/th&gt;
            &lt;th&gt;주요 점검 내용&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;Java&lt;/td&gt;
            &lt;td&gt;개발, 빌드, 테스트, 운영 환경의 JDK 17 통일 여부&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Spring&lt;/td&gt;
            &lt;td&gt;Spring 6 미지원 라이브러리와 제거된 API 사용 여부&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Jakarta&lt;/td&gt;
            &lt;td&gt;&lt;code&gt;javax&lt;/code&gt;와 &lt;code&gt;jakarta&lt;/code&gt; API 혼재 여부&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;WAS&lt;/td&gt;
            &lt;td&gt;Jakarta EE와 Servlet 사양 지원 버전 확인&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;데이터베이스&lt;/td&gt;
            &lt;td&gt;JDK 17 대응 JDBC 드라이버와 커넥션 풀 설정&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;인증·보안&lt;/td&gt;
            &lt;td&gt;SSO, 인증 모듈, Spring Security와 세션 정책 호환성&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;공통컴포넌트&lt;/td&gt;
            &lt;td&gt;실제 사용하는 기능만 포함했는지 확인&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;배치&lt;/td&gt;
            &lt;td&gt;Spring Batch 버전 변화와 재시작·중복 실행 검증&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;외부 연계&lt;/td&gt;
            &lt;td&gt;리포팅, DRM, 메시징과 전자결재 모듈의 Jakarta 지원&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;운영 도구&lt;/td&gt;
            &lt;td&gt;APM, 보안 에이전트, 로그 수집기와 JDK 17 호환성&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;성능&lt;/td&gt;
            &lt;td&gt;응답 시간, 메모리, GC, 스레드와 커넥션 풀 재측정&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;복구&lt;/td&gt;
            &lt;td&gt;배포 실패와 운영 장애 발생 시 롤백 절차&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;전자정부 표준프레임워크 5.0의 기대 효과&lt;/h2&gt;

    &lt;h3&gt;장기 지원 가능한 Java 기반 확보&lt;/h3&gt;

    &lt;p&gt;
      JDK 17과 Spring 6 기반으로 전환하면 오래된 Java 환경에서 벗어나 최신 라이브러리와 도구를 적용하기 쉬워진다. 신규 보안 패치와 생태계 지원을 받을 수 있는 기반도 마련된다.
    &lt;/p&gt;

    &lt;h3&gt;Jakarta 생태계와의 호환성&lt;/h3&gt;

    &lt;p&gt;
      최신 Tomcat, WildFly, JBoss EAP와 Jakarta 지원 상용 WAS 등 현대적인 애플리케이션 서버 환경을 사용할 수 있다. 앞으로 제공되는 Java 엔터프라이즈 라이브러리도 대부분 Jakarta 패키지를 기준으로 개발된다.
    &lt;/p&gt;

    &lt;h3&gt;Boot와 컨테이너 적용 확대&lt;/h3&gt;

    &lt;p&gt;
      서비스별 독립 배포, 외부 설정, 상태 점검과 컨테이너 이미지 기반 운영을 적용하기 쉬워진다. 공용 WAS에 여러 애플리케이션을 배포하던 구조에서 서비스 단위 운영으로 전환할 수도 있다.
    &lt;/p&gt;

    &lt;h3&gt;기존 공공 개발 자산 활용&lt;/h3&gt;

    &lt;p&gt;
      전자정부 표준프레임워크의 계층 구조와 공통컴포넌트를 유지하면서 기반 기술을 최신 세대로 전환할 수 있다. 완전히 새로운 프레임워크로 교체하는 것보다 기존 개발자와 운영자의 경험을 활용하기 좋다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;도입 시 주의해야 할 오해&lt;/h2&gt;

    &lt;h3&gt;5.0으로 올리면 자동으로 클라우드 네이티브가 되는가&lt;/h3&gt;

    &lt;p&gt;
      그렇지 않다. Spring Boot를 사용하더라도 세션을 로컬 메모리에 저장하고 파일을 서버 디스크에 직접 쓰거나 서버 주소를 코드에 고정하면 컨테이너 확장에 적합하지 않다.
    &lt;/p&gt;

    &lt;h3&gt;Jakarta로 패키지만 바꾸면 끝나는가&lt;/h3&gt;

    &lt;p&gt;
      아니다. 연동 라이브러리, WAS, 데이터베이스 드라이버와 테스트 코드가 모두 새로운 사양을 지원해야 한다. 패키지 치환은 전체 전환 과정 중 일부에 불과하다.
    &lt;/p&gt;

    &lt;h3&gt;공통컴포넌트를 모두 사용해야 표준프레임워크인가&lt;/h3&gt;

    &lt;p&gt;
      아니다. 필요한 실행환경과 공통 기능을 선별해 사용할 수 있다. 불필요한 기능을 포함하는 것은 유지보수와 보안 측면에서 오히려 불리할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;기존 프로젝트도 무조건 즉시 업그레이드해야 하는가&lt;/h3&gt;

    &lt;p&gt;
      아니다. 서비스 중요도, 지원 종료 일정, 전환 비용과 연계 솔루션 호환성을 기준으로 판단해야 한다. 신규 시스템은 5.0을 우선 검토하고 기존 시스템은 계획된 현대화 일정에 맞춰 단계적으로 전환하는 방식이 현실적이다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;최종 정리&lt;/h2&gt;

    &lt;p&gt;
      전자정부 표준프레임워크 5.0의 핵심은 JDK 17, Spring Framework 6.2와 Jakarta 기반으로의 전환이다. 이는 최신 Java 생태계를 활용할 수 있다는 장점이 있지만, 이전 4.x 프로젝트와의 직접 호환성이 낮다는 의미이기도 하다.
    &lt;/p&gt;

    &lt;p&gt;
      신규 프로젝트라면 Spring Boot, REST API, 컨테이너와 프런트엔드 분리형 구조를 함께 검토할 수 있다. 기존 프로젝트라면 &lt;code&gt;javax&lt;/code&gt; 패키지, WAS, 사내 공통 모듈과 외부 솔루션의 호환성을 먼저 조사해야 한다.
    &lt;/p&gt;

    &lt;div class=&quot;point-box&quot;&gt;
      &lt;strong&gt;한 줄 정리&lt;/strong&gt;&lt;br&gt;
      전자정부 표준프레임워크 5.0은 단순 업데이트가 아니라 Spring 6와 Jakarta 시대로 넘어가는 전환점이다.&lt;br&gt;
      신규 구축에는 적극적으로 검토할 수 있지만 기존 4.x 시스템은 별도의 마이그레이션 프로젝트로 접근해야 한다.&lt;br&gt;
      버전 숫자보다 Java, WAS, 라이브러리와 운영 체계 전체의 호환성을 기준으로 판단해야 한다.
    &lt;/div&gt;
  &lt;/section&gt;
&lt;/article&gt;

  &lt;/main&gt;  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/egovframe-5-spring-jakarta#article&quot;,
        &quot;url&quot;: &quot;https://example.com/egovframe-5-spring-jakarta&quot;,
        &quot;headline&quot;: &quot;전자정부 표준프레임워크 5.0, Spring 6와 Jakarta 전환 핵심&quot;,
        &quot;description&quot;: &quot;전자정부 표준프레임워크 5.0의 JDK 17, Spring Framework 6.2, Spring Boot 3, Jakarta 전환 내용과 기존 프로젝트 마이그레이션 주의사항을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/egovframe-5-spring-jakarta&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/images/replace-og-image.jpg&quot;
        },
        &quot;keywords&quot;: [
          &quot;전자정부 표준프레임워크 5.0&quot;,
          &quot;eGovFrame 5.0&quot;,
          &quot;Spring Framework 6&quot;,
          &quot;Spring Boot 3&quot;,
          &quot;Jakarta EE&quot;,
          &quot;JDK 17&quot;,
          &quot;javax jakarta 전환&quot;,
          &quot;공통컴포넌트 5.0&quot;,
          &quot;공공 SI&quot;,
          &quot;프레임워크 마이그레이션&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;전자정부 표준프레임워크 5.0&quot;,
            &quot;applicationCategory&quot;: &quot;Application Framework&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;Spring Framework 6&quot;,
            &quot;applicationCategory&quot;: &quot;Application Framework&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Jakarta EE&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/egovframe-5-spring-jakarta#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;공공 개발&quot;,
            &quot;item&quot;: &quot;https://example.com/public-development&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;전자정부 표준프레임워크 5.0&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;  &lt;!-- 관리자 입력용 태그 10개: 전자정부 표준프레임워크 5.0, eGovFrame 5.0, Spring Framework 6, Spring Boot 3, Jakarta EE, JDK 17, javax jakarta 전환, 공통컴포넌트 5.0, 공공 SI, 프레임워크 마이그레이션 --&gt;&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>eGovFrame 5.0</category>
      <category>jakarta EE</category>
      <category>javax jakarta 전환</category>
      <category>JDK 17</category>
      <category>spring boot 3</category>
      <category>Spring Framework 6</category>
      <category>공공 SI</category>
      <category>공통컴포넌트 5.0</category>
      <category>전자정부 표준프레임워크 5.0</category>
      <category>프레임워크 마이그레이션</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/590</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%91%9C%EC%A4%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-50-Spring-6%EC%99%80-Jakarta-%EC%A0%84%ED%99%98-%ED%95%B5%EC%8B%AC#entry590comment</comments>
      <pubDate>Wed, 15 Jul 2026 00:09:59 +0900</pubDate>
    </item>
    <item>
      <title>WebtoB&amp;middot;JEUS 대신 WildFly를 선택하는 이유</title>
      <link>https://togethergrow.tistory.com/entry/WebtoB%C2%B7JEUS-%EB%8C%80%EC%8B%A0-WildFly%EB%A5%BC-%EC%84%A0%ED%83%9D%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;!doctype html&gt;

&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;WebtoB·JEUS 대신 WildFly를 선택하는 이유&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;WebtoB와 JEUS 중심의 상용 미들웨어 구성 대신 WildFly를 검토하는 이유를 비용, 표준 기술, 개발 생산성, 컨테이너 운영, 기술 종속성과 지원 체계 관점에서 비교합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;WildFly,WebtoB,JEUS,WAS 비교,자카르타 EE,오픈소스 WAS,미들웨어 전환,쿠버네티스 WAS,JBoss EAP,Java 애플리케이션 서버&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;WebtoB·JEUS 대신 WildFly를 선택하는 이유&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;WildFly가 비용 절감만이 아니라 표준 기술, 자동화, 컨테이너 운영과 개발 환경 통합 측면에서 선택되는 이유를 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/wildfly-vs-webtob-jeus&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/replace-og-image.jpg&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;WebtoB·JEUS 대신 WildFly를 선택하는 이유&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;WebtoB·JEUS 구성과 WildFly의 차이, 전환 효과와 실제 선택 기준을 자세히 살펴봅니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;wildfly-comparison&quot;&gt;
    &lt;style&gt;
      .wildfly-comparison {
        width: 100%;
        max-width: 920px;
        margin: 0 auto;
        padding: 24px 18px 48px;
        line-height: 1.75;
        word-break: keep-all;
        overflow-wrap: break-word;
      }.wildfly-comparison h1 {
    margin: 0 0 26px;
    font-size: 2.1rem;
    line-height: 1.38;
    letter-spacing: -0.04em;
  }

  .wildfly-comparison h2 {
    margin: 50px 0 20px;
    padding-bottom: 10px;
    border-bottom: 2px solid rgba(120, 120, 120, 0.22);
    font-size: 1.52rem;
    line-height: 1.45;
    letter-spacing: -0.025em;
  }

  .wildfly-comparison h3 {
    margin: 30px 0 12px;
    font-size: 1.18rem;
    line-height: 1.5;
  }

  .wildfly-comparison p {
    margin: 0 0 18px;
  }

  .wildfly-comparison ul,
  .wildfly-comparison ol {
    margin: 12px 0 22px;
    padding-left: 1.4rem;
  }

  .wildfly-comparison li {
    margin-bottom: 8px;
  }

  .wildfly-comparison code {
    padding: 2px 6px;
    border-radius: 4px;
    background: rgba(120, 120, 120, 0.12);
    font-size: 0.92em;
  }

  .wildfly-comparison .lead {
    margin-bottom: 26px;
    font-size: 1.07rem;
  }

  .wildfly-comparison .info-box,
  .wildfly-comparison .point-box,
  .wildfly-comparison .warning-box {
    margin: 24px 0;
    padding: 19px 21px;
    border: 1px solid rgba(120, 120, 120, 0.28);
    border-radius: 11px;
    background: rgba(120, 120, 120, 0.06);
  }

  .wildfly-comparison .point-box {
    border-left: 5px solid #2563eb;
  }

  .wildfly-comparison .warning-box {
    border-left: 5px solid #d97706;
  }

  .wildfly-comparison .table-scroll {
    width: 100%;
    margin: 22px 0 30px;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border: 1px solid rgba(120, 120, 120, 0.24);
    border-radius: 10px;
  }

  .wildfly-comparison table {
    width: 100%;
    min-width: 740px;
    border-collapse: collapse;
  }

  .wildfly-comparison th,
  .wildfly-comparison td {
    padding: 13px 14px;
    border-right: 1px solid rgba(120, 120, 120, 0.18);
    border-bottom: 1px solid rgba(120, 120, 120, 0.18);
    text-align: left;
    vertical-align: top;
  }

  .wildfly-comparison th {
    background: rgba(120, 120, 120, 0.1);
    font-weight: 700;
  }

  .wildfly-comparison th:last-child,
  .wildfly-comparison td:last-child {
    border-right: 0;
  }

  .wildfly-comparison tr:last-child td {
    border-bottom: 0;
  }

  .wildfly-comparison .flow-box {
    margin: 20px 0 28px;
    padding: 16px;
    border-radius: 9px;
    background: rgba(120, 120, 120, 0.08);
    text-align: center;
    font-weight: 600;
  }

  .wildfly-comparison .check-list {
    padding-left: 0;
    list-style: none;
  }

  .wildfly-comparison .check-list li {
    position: relative;
    padding-left: 27px;
  }

  .wildfly-comparison .check-list li::before {
    position: absolute;
    left: 0;
    content: &quot;✓&quot;;
    font-weight: 700;
  }

  .wildfly-comparison .official-link {
    display: inline-block;
    margin: 2px 0;
  }

  @media (max-width: 700px) {
    .wildfly-comparison {
      padding: 18px 14px 40px;
    }

    .wildfly-comparison h1 {
      font-size: 1.7rem;
    }

    .wildfly-comparison h2 {
      margin-top: 42px;
      font-size: 1.36rem;
    }

    .wildfly-comparison .info-box,
    .wildfly-comparison .point-box,
    .wildfly-comparison .warning-box {
      padding: 16px;
    }
  }
&lt;/style&gt;

&lt;article&gt;
  &lt;header&gt;
    &lt;h1&gt;WebtoB·JEUS 대신 WildFly를 선택하는 이유&lt;/h1&gt;

    &lt;p class=&quot;lead&quot;&gt;
      국내 기업과 공공기관의 전통적인 Java 시스템에서는 WebtoB를 웹 서버로, JEUS를 웹 애플리케이션 서버로 사용하는 구성이 익숙하다. 그러나 신규 시스템이나 클라우드 전환 프로젝트에서는 WildFly 같은 오픈소스 애플리케이션 서버를 검토하는 사례도 늘고 있다. 단순히 라이선스 비용을 줄이기 위해서가 아니라 표준 기술 활용, 개발 환경 통합, 컨테이너 배포와 자동화 측면에서 선택지가 달라졌기 때문이다.
    &lt;/p&gt;

    &lt;div class=&quot;point-box&quot;&gt;
      &lt;strong&gt;먼저 알아둘 핵심&lt;/strong&gt;&lt;br&gt;
      WebtoB는 웹 서버이고 JEUS와 WildFly는 웹 애플리케이션 서버이므로 완전히 같은 제품을 일대일로 비교하는 것은 정확하지 않다.&lt;br&gt;
      실제 비교 대상은 WebtoB·JEUS로 구성된 상용 미들웨어 구조와 리버스 프록시·WildFly로 구성한 개방형 구조다.&lt;br&gt;
      WildFly가 항상 더 좋은 것은 아니며 운영 지원, 기존 자산과 장애 대응 체계를 함께 판단해야 한다.
    &lt;/div&gt;
  &lt;/header&gt;

  &lt;section&gt;
    &lt;h2&gt;WebtoB, JEUS, WildFly의 역할부터 구분하기&lt;/h2&gt;

    &lt;p&gt;
      WebtoB는 정적 콘텐츠 처리, HTTP 연결 관리, SSL 종료와 리버스 프록시 역할을 수행하는 웹 서버다. JEUS는 Servlet, JSP, 트랜잭션, 데이터소스, 메시징과 같은 엔터프라이즈 Java 기능을 제공하는 웹 애플리케이션 서버다.
    &lt;/p&gt;

    &lt;p&gt;
      따라서 전통적인 구성은 외부 요청을 WebtoB가 먼저 받은 뒤 JEUS로 전달하는 형태가 많다. 두 제품은 제조사에서 제공하는 전용 연계 방식과 관리 기능을 활용할 수 있다는 장점이 있다.
    &lt;/p&gt;

    &lt;div class=&quot;flow-box&quot;&gt;
      사용자 → WebtoB → JEUS → 업무 애플리케이션
    &lt;/div&gt;

    &lt;p&gt;
      WildFly는 Jakarta EE와 Eclipse MicroProfile 기술을 구현하는 오픈소스 애플리케이션 서버다. WildFly 앞에는 NGINX, Apache HTTP Server, 클라우드 로드 밸런서 또는 Kubernetes Ingress·Gateway를 배치할 수 있다.
    &lt;/p&gt;

    &lt;div class=&quot;flow-box&quot;&gt;
      사용자 → NGINX·클라우드 로드 밸런서·Gateway → WildFly → 업무 애플리케이션
    &lt;/div&gt;

    &lt;p&gt;
      즉 WildFly를 선택한다는 것은 WebtoB 기능까지 WildFly 하나로 대체한다는 의미가 아니다. 웹 계층과 WAS 계층을 개방형 구성 요소로 다시 설계한다는 의미에 가깝다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WildFly가 검토되는 가장 큰 이유&lt;/h2&gt;

    &lt;h3&gt;1. 소프트웨어 비용 구조를 단순화할 수 있다&lt;/h3&gt;

    &lt;p&gt;
      WildFly는 오픈소스로 제공되므로 소프트웨어를 설치하고 사용하는 것 자체에 상용 라이선스 계약이 필수는 아니다. 개발, 테스트, 교육과 소규모 운영 환경을 만들 때 라이선스 수량을 먼저 확보해야 하는 부담이 줄어든다.
    &lt;/p&gt;

    &lt;p&gt;
      특히 개발자 개인 환경, 임시 검증 환경, 자동화 테스트 환경과 단기간 사용하는 프로젝트 환경을 여러 개 만들 때 차이가 커질 수 있다. 컨테이너를 필요할 때 생성하고 제거하는 구조에서도 서버 인스턴스 수를 라이선스 기준과 계속 대조해야 하는 부담을 줄일 수 있다.
    &lt;/p&gt;

    &lt;div class=&quot;warning-box&quot;&gt;
      &lt;strong&gt;오픈소스가 무료 운영을 의미하지는 않는다&lt;/strong&gt;&lt;br&gt;
      WildFly를 안정적으로 운영하려면 설치 자동화, 보안 업데이트, 장애 분석과 성능 튜닝 역량이 필요하다.&lt;br&gt;
      자체 운영 인력이 부족하면 기술 지원 계약이나 외부 전문 인력 비용이 발생한다.&lt;br&gt;
      라이선스 비용만 비교하지 말고 3년에서 5년 동안의 전체 운영 비용을 계산해야 한다.
    &lt;/div&gt;

    &lt;h3&gt;2. 표준 기술 중심으로 개발할 수 있다&lt;/h3&gt;

    &lt;p&gt;
      WildFly는 Jakarta EE와 MicroProfile 사양을 중심으로 동작한다. Servlet, CDI, JPA, JTA, Jakarta REST, Bean Validation과 같은 표준 API를 사용하면 특정 제조사 전용 API에 대한 의존도를 줄일 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      표준 API를 사용한다고 해서 다른 WAS로 자동 이전되는 것은 아니다. 클래스 로딩, 보안 영역, 데이터소스, 트랜잭션, 관리 스크립트와 배포 구조는 제품마다 다를 수 있다. 그럼에도 업무 코드가 표준에 가까울수록 장기적인 이전 비용과 기술 종속 위험을 줄이기 쉽다.
    &lt;/p&gt;

    &lt;p&gt;
      WildFly는 공식 문서에서 Jakarta EE와 MicroProfile 기반의 표준 지향성을 주요 특징으로 안내하고 있다.
      &lt;a class=&quot;official-link&quot; href=&quot;https://www.wildfly.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;wildfly.org&lt;/a&gt;&lt;br&gt;
    &lt;/p&gt;

    &lt;h3&gt;3. 개발자 접근성이 좋다&lt;/h3&gt;

    &lt;p&gt;
      WildFly는 배포 파일, 설정 예제, Maven 플러그인과 다양한 quickstart를 공개하고 있다. 개발자가 별도의 폐쇄된 설치 매체나 제한된 계정 없이도 로컬 환경을 구성하고 문제를 재현하기 쉽다.
    &lt;/p&gt;

    &lt;p&gt;
      Maven과 Gradle을 사용하는 Java 프로젝트에서는 빌드, 테스트, 애플리케이션 서버 구성과 배포 절차를 CI 파이프라인에 연결할 수 있다. 수동 관리 콘솔 작업을 줄이고 설정을 코드와 함께 관리하는 방식에도 잘 맞는다.
    &lt;/p&gt;

    &lt;p&gt;
      공식 문서에는 Maven 플러그인, Bootable JAR, 컨테이너 이미지, Helm과 Kubernetes 운영 방식이 함께 안내되어 있다.
      &lt;a class=&quot;official-link&quot; href=&quot;https://docs.wildfly.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;docs.wildfly.org&lt;/a&gt;&lt;br&gt;
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;클라우드와 컨테이너 환경에서 유리한 점&lt;/h2&gt;

    &lt;h3&gt;이미지 기반 배포에 적용하기 쉽다&lt;/h3&gt;

    &lt;p&gt;
      전통적인 WAS 운영은 서버를 먼저 설치한 뒤 관리자가 데이터소스, JVM 옵션, 로깅과 배포 설정을 추가하는 방식이 많다. 이 방식은 오래 운영한 서버일수록 초기 설치 상태와 현재 상태의 차이를 확인하기 어려워질 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      WildFly는 공식 컨테이너 이미지를 기반으로 애플리케이션과 설정을 포함한 이미지를 만들 수 있다. 같은 이미지를 개발, 검증과 운영 환경에 전달하면 환경 차이로 발생하는 문제를 줄일 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;Kubernetes 운영 도구와 연결하기 쉽다&lt;/h3&gt;

    &lt;p&gt;
      WildFly는 컨테이너 이미지뿐 아니라 Kubernetes와 OpenShift에서 사용할 수 있는 Helm Chart와 Operator 기반 운영 방식을 제공한다. 배포 수량, 리소스 제한, 상태 확인과 롤링 업데이트를 플랫폼의 선언형 리소스로 관리할 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      이는 WildFly만의 독점 기능이라기보다 Kubernetes 생태계를 따르는 장점이다. 특정 관리 콘솔에서만 서버를 생성하고 수정하는 방식보다 GitOps와 CI/CD 체계에 연결하기 쉽다는 의미다.
    &lt;/p&gt;

    &lt;h3&gt;불변 인프라 운영에 더 잘 맞는다&lt;/h3&gt;

    &lt;p&gt;
      컨테이너 환경에서는 실행 중인 서버에 접속해 설정을 직접 바꾸기보다 변경된 설정으로 새 이미지를 만들고 인스턴스를 교체하는 방식이 권장된다. WildFly의 CLI, 환경 변수, Maven 플러그인과 이미지 빌드 방식을 조합하면 이러한 운영 모델을 구현하기 쉽다.
    &lt;/p&gt;

    &lt;div class=&quot;info-box&quot;&gt;
      &lt;strong&gt;운영 환경에서는&lt;/strong&gt;&lt;br&gt;
      관리 콘솔에서 직접 변경한 설정보다 Git에 기록된 설정을 배포하는 방식이 추적과 복구에 유리하다.&lt;br&gt;
      서버 장애 시 기존 인스턴스를 수리하기보다 동일한 이미지로 새 인스턴스를 생성하는 구조가 안정적이다.&lt;br&gt;
      WildFly 선택의 장점은 제품 하나보다 이러한 자동화 방식과 함께 사용할 때 커진다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WebtoB·JEUS와 WildFly 구성 비교&lt;/h2&gt;

    &lt;div class=&quot;table-scroll&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;비교 항목&lt;/th&gt;
            &lt;th&gt;WebtoB·JEUS 구성&lt;/th&gt;
            &lt;th&gt;WildFly 중심 구성&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;기본 구조&lt;/td&gt;
            &lt;td&gt;WebtoB 웹 서버와 JEUS WAS의 통합 구성&lt;/td&gt;
            &lt;td&gt;NGINX·로드 밸런서·Gateway와 WildFly 조합&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;라이선스&lt;/td&gt;
            &lt;td&gt;상용 계약과 지원 정책을 기준으로 운영&lt;/td&gt;
            &lt;td&gt;WildFly 자체는 오픈소스로 사용 가능&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;기술 지원&lt;/td&gt;
            &lt;td&gt;제조사 중심의 공식 지원 체계&lt;/td&gt;
            &lt;td&gt;커뮤니티 지원 또는 별도 상용 지원 선택&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;표준 기술&lt;/td&gt;
            &lt;td&gt;Jakarta EE 지원과 제품 고유 기능 병행&lt;/td&gt;
            &lt;td&gt;Jakarta EE와 MicroProfile 중심&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;개발 환경 구축&lt;/td&gt;
            &lt;td&gt;계약과 배포 정책에 따라 제약 가능&lt;/td&gt;
            &lt;td&gt;다운로드와 로컬 실행이 비교적 자유로움&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;컨테이너 이미지&lt;/td&gt;
            &lt;td&gt;제품별 클라우드 지원 방식 확인 필요&lt;/td&gt;
            &lt;td&gt;공식 이미지와 빌드 도구 활용 가능&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Kubernetes 연동&lt;/td&gt;
            &lt;td&gt;제품과 버전에 따른 전용 기능 활용&lt;/td&gt;
            &lt;td&gt;Helm, Operator와 일반 Kubernetes 도구 활용&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;설정 자동화&lt;/td&gt;
            &lt;td&gt;관리 도구와 제품별 스크립트 중심&lt;/td&gt;
            &lt;td&gt;CLI, Maven, 이미지 빌드와 GitOps 구성에 유리&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;인력 확보&lt;/td&gt;
            &lt;td&gt;국내 공공·금융 프로젝트 경험자 확보에 유리&lt;/td&gt;
            &lt;td&gt;글로벌 Java·JBoss 생태계 경험 활용 가능&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;장애 책임&lt;/td&gt;
            &lt;td&gt;공식 지원 계약을 통한 제조사 협업 가능&lt;/td&gt;
            &lt;td&gt;자체 분석 역량 또는 별도 지원 계약 필요&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;제품 종속성&lt;/td&gt;
            &lt;td&gt;관리 방식과 전용 연계 기능에 종속될 수 있음&lt;/td&gt;
            &lt;td&gt;표준 API 중심이면 종속성을 줄이기 쉬움&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;적합한 환경&lt;/td&gt;
            &lt;td&gt;기존 자산과 공식 지원 체계가 중요한 환경&lt;/td&gt;
            &lt;td&gt;자동화, 개방형 기술과 클라우드 전환이 중요한 환경&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WildFly가 개발 생산성에 미치는 영향&lt;/h2&gt;

    &lt;h3&gt;개발자마다 동일한 환경을 만들기 쉽다&lt;/h3&gt;

    &lt;p&gt;
      WildFly 버전과 설정을 프로젝트 파일로 관리하면 신규 개발자도 같은 서버 환경을 빠르게 구성할 수 있다. 컨테이너 이미지를 사용하면 운영체제와 로컬 설치 상태에 따른 차이도 줄일 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;CI 파이프라인에서 통합 테스트하기 쉽다&lt;/h3&gt;

    &lt;p&gt;
      빌드 과정에서 임시 WildFly 인스턴스를 실행하고 애플리케이션을 배포한 뒤 통합 테스트를 수행할 수 있다. 테스트가 끝나면 인스턴스를 제거할 수 있으므로 공유 개발 서버의 상태에 의존하지 않아도 된다.
    &lt;/p&gt;

    &lt;h3&gt;설정 변경을 코드 검토 대상으로 만들 수 있다&lt;/h3&gt;

    &lt;p&gt;
      데이터소스, 보안 설정, JVM 옵션과 로깅 정책을 스크립트나 이미지 빌드 파일로 관리하면 애플리케이션 코드처럼 변경 이력을 확인할 수 있다. 운영자가 관리 콘솔에서 직접 변경한 뒤 내용을 별도 문서에 기록하는 방식보다 재현성이 높다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WildFly가 비용 절감으로 이어지는 조건&lt;/h2&gt;

    &lt;p&gt;
      WildFly로 바꾸면 상용 라이선스 항목을 줄일 가능성이 있지만 운영 비용이 자동으로 낮아지는 것은 아니다. 비용 절감 효과는 조직이 어느 정도의 기술 역량과 자동화 기반을 갖추고 있는지에 따라 달라진다.
    &lt;/p&gt;

    &lt;ul class=&quot;check-list&quot;&gt;
      &lt;li&gt;내부에 Java와 Linux 미들웨어 운영 경험자가 있다.&lt;/li&gt;
      &lt;li&gt;CI/CD와 컨테이너 이미지 관리 체계가 마련되어 있다.&lt;/li&gt;
      &lt;li&gt;장애 재현과 로그 분석을 내부에서 수행할 수 있다.&lt;/li&gt;
      &lt;li&gt;보안 업데이트와 버전 업그레이드 절차가 정해져 있다.&lt;/li&gt;
      &lt;li&gt;상용 지원이 필요한 시스템과 자체 지원 가능한 시스템을 구분할 수 있다.&lt;/li&gt;
      &lt;li&gt;제품 전용 기능을 표준 API 또는 외부 구성 요소로 바꿀 수 있다.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;
      반대로 미들웨어를 전담하는 인력이 없고 장애 발생 시 제조사의 즉각적인 분석과 책임 있는 지원이 필요하다면 상용 제품의 비용이 단순한 라이선스 비용만은 아닐 수 있다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;상용 지원이 필요하면 JBoss EAP도 검토해야 한다&lt;/h2&gt;

    &lt;p&gt;
      WildFly는 커뮤니티 프로젝트다. 빠르게 새로운 기능을 반영할 수 있지만 조직이 요구하는 장기 지원 기간, 보안 패치 정책과 공식 기술 지원을 WildFly 커뮤니티만으로 충족하기 어려울 수 있다.
    &lt;/p&gt;

    &lt;p&gt;
      이런 경우에는 WildFly와 기술적 계보를 공유하는 Red Hat JBoss Enterprise Application Platform을 검토할 수 있다. JBoss EAP는 기업용 지원과 제품 수명주기, 인증된 구성과 OpenShift 연동을 제공하는 상용 플랫폼이다.
    &lt;/p&gt;

    &lt;p&gt;
      WildFly를 먼저 검증한 뒤 운영 중요도에 따라 커뮤니티 WildFly와 JBoss EAP를 구분하는 전략도 가능하다. 다만 WildFly 최신 버전과 JBoss EAP의 기능과 버전이 항상 동일한 것은 아니므로 별도의 호환성 검증이 필요하다.
    &lt;/p&gt;

    &lt;p&gt;
      JBoss EAP의 OpenShift 배포와 운영 기능은 공식 제품 문서에서 확인할 수 있다.
      &lt;a class=&quot;official-link&quot; href=&quot;https://docs.redhat.com/en/documentation/red_hat_jboss_enterprise_application_platform/8.0/html-single/using_jboss_eap_on_openshift_container_platform/index&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;docs.redhat.com&lt;/a&gt;&lt;br&gt;
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WildFly 전환이 적합한 경우&lt;/h2&gt;

    &lt;ul class=&quot;check-list&quot;&gt;
      &lt;li&gt;신규 Java 시스템을 Jakarta EE 표준 중심으로 개발한다.&lt;/li&gt;
      &lt;li&gt;개발, 테스트와 운영 환경을 컨테이너 이미지로 통일하려고 한다.&lt;/li&gt;
      &lt;li&gt;Kubernetes 또는 OpenShift 기반 배포를 계획하고 있다.&lt;/li&gt;
      &lt;li&gt;미들웨어 설정과 배포를 Git과 CI/CD로 자동화하려고 한다.&lt;/li&gt;
      &lt;li&gt;상용 라이선스 수량에 따른 환경 확장 제약을 줄이고 싶다.&lt;/li&gt;
      &lt;li&gt;특정 제조사 관리 도구와 전용 API에 대한 의존도를 줄이고 싶다.&lt;/li&gt;
      &lt;li&gt;Java 미들웨어를 직접 운영하거나 상용 지원을 별도로 구매할 역량이 있다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;WebtoB·JEUS 유지가 더 적합한 경우&lt;/h2&gt;

    &lt;ul class=&quot;check-list&quot;&gt;
      &lt;li&gt;현재 시스템이 WebtoB와 JEUS의 전용 기능에 깊게 의존한다.&lt;/li&gt;
      &lt;li&gt;공공기관이나 금융권 표준 아키텍처에서 지정된 제품을 사용해야 한다.&lt;/li&gt;
      &lt;li&gt;기존 운영자와 협력사가 WebtoB·JEUS 운영에 최적화되어 있다.&lt;/li&gt;
      &lt;li&gt;장애 발생 시 제조사의 공식 분석과 책임 있는 지원이 매우 중요하다.&lt;/li&gt;
      &lt;li&gt;미들웨어 변경에 따른 애플리케이션 수정과 재검증 비용이 크다.&lt;/li&gt;
      &lt;li&gt;현재 인프라가 안정적이며 컨테이너 전환 계획이 없다.&lt;/li&gt;
      &lt;li&gt;라이선스 절감보다 변경 위험 최소화가 더 중요한 시스템이다.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class=&quot;warning-box&quot;&gt;
      &lt;strong&gt;정상적으로 운영 중인 시스템을 유행만으로 교체하면 안 된다&lt;/strong&gt;&lt;br&gt;
      WAS 전환은 설치 프로그램만 바꾸는 작업이 아니다.&lt;br&gt;
      클래스 로딩, 세션, 트랜잭션, 보안, 데이터소스, 배치와 운영 도구를 모두 다시 검증해야 한다.&lt;br&gt;
      기존 시스템의 안정성이 중요하다면 신규 업무부터 WildFly를 적용하는 단계적 접근이 안전하다.
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;JEUS에서 WildFly로 옮길 때 확인할 항목&lt;/h2&gt;

    &lt;h3&gt;1. Java와 Jakarta EE 버전&lt;/h3&gt;

    &lt;p&gt;
      기존 애플리케이션이 사용하는 Java 버전과 Java EE 또는 Jakarta EE 버전을 확인해야 한다. 특히 &lt;code&gt;javax.*&lt;/code&gt;에서 &lt;code&gt;jakarta.*&lt;/code&gt;로 패키지가 변경되는 구간에서는 단순 재배포가 아니라 코드와 라이브러리 수정이 필요할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;2. 제조사 전용 설정과 API&lt;/h3&gt;

    &lt;p&gt;
      JEUS 전용 배포 기술자, 보안 설정, 세션 처리, JNDI 이름과 관리 API 사용 여부를 조사해야 한다. 표준 API로 교체할 수 없는 기능은 WildFly 설정 또는 별도 솔루션으로 재설계해야 한다.
    &lt;/p&gt;

    &lt;h3&gt;3. 클래스 로딩&lt;/h3&gt;

    &lt;p&gt;
      애플리케이션에 포함된 라이브러리와 WAS가 제공하는 모듈 사이의 충돌을 확인해야 한다. 동일한 라이브러리라도 제품마다 클래스 로딩 우선순위가 달라 실행 결과가 달라질 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;4. 데이터소스와 트랜잭션&lt;/h3&gt;

    &lt;p&gt;
      JDBC 드라이버, 커넥션 풀 크기, 검증 쿼리, 장애 연결 제거와 분산 트랜잭션 설정을 다시 구성해야 한다. 기존 설정값을 그대로 옮기기보다 실제 동시 요청과 데이터베이스 제한을 기준으로 재조정하는 것이 좋다.
    &lt;/p&gt;

    &lt;h3&gt;5. 세션과 클러스터링&lt;/h3&gt;

    &lt;p&gt;
      세션 복제, 로드 밸런서의 고정 세션, 클러스터 멤버 검색과 장애 복구 방식을 확인해야 한다. Kubernetes에서는 Pod 주소가 변경될 수 있으므로 기존 물리 서버 기반 클러스터 설정을 그대로 적용해서는 안 된다.
    &lt;/p&gt;

    &lt;h3&gt;6. WebtoB 기능 대체&lt;/h3&gt;

    &lt;p&gt;
      SSL 종료, 정적 콘텐츠, 압축, 캐시, 접근 제어, 요청 제한과 리버스 프록시 기능을 어디에서 처리할지 정해야 한다. NGINX, Apache HTTP Server, 클라우드 로드 밸런서 또는 Kubernetes Gateway를 선택할 수 있다.
    &lt;/p&gt;

    &lt;h3&gt;7. 운영 도구와 모니터링&lt;/h3&gt;

    &lt;p&gt;
      기존 관리 콘솔에서 확인하던 JVM, 스레드, 데이터소스, 세션과 배포 상태를 어떤 도구로 대체할지 정해야 한다. Prometheus, OpenTelemetry, 중앙 로그 시스템과 알림 정책까지 함께 설계해야 한다.
    &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;도입 전에 수행할 검증 절차&lt;/h2&gt;

    &lt;ol&gt;
      &lt;li&gt;현재 애플리케이션의 JEUS·WebtoB 전용 기능과 설정을 목록화한다.&lt;/li&gt;
      &lt;li&gt;대표 애플리케이션 하나를 선정해 WildFly에서 기능 테스트를 진행한다.&lt;/li&gt;
      &lt;li&gt;로그인, 세션, 파일 업로드, 배치, 메시징과 트랜잭션을 검증한다.&lt;/li&gt;
      &lt;li&gt;평상시와 최대 부하에서 응답 시간과 JVM 자원 사용량을 측정한다.&lt;/li&gt;
      &lt;li&gt;WAS 재시작, Pod 종료, 데이터베이스 연결 장애와 네트워크 단절을 시험한다.&lt;/li&gt;
      &lt;li&gt;보안 취약점 대응, 업그레이드와 긴급 롤백 절차를 문서화한다.&lt;/li&gt;
      &lt;li&gt;자체 지원과 상용 지원 중 운영 중요도에 맞는 방식을 선택한다.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;선택을 위한 빠른 비교&lt;/h2&gt;

    &lt;div class=&quot;table-scroll&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;확인 질문&lt;/th&gt;
            &lt;th&gt;권장 방향&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;신규 시스템이며 특정 제품 의존성이 없는가?&lt;/td&gt;
            &lt;td&gt;WildFly 우선 검토&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Kubernetes와 CI/CD가 핵심 운영 방식인가?&lt;/td&gt;
            &lt;td&gt;WildFly 또는 JBoss EAP 검토&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;공식 제조사 지원과 기존 운영 체계가 가장 중요한가?&lt;/td&gt;
            &lt;td&gt;WebtoB·JEUS 유지 검토&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;개발·검증 환경을 자유롭게 확장해야 하는가?&lt;/td&gt;
            &lt;td&gt;WildFly가 유리&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;JEUS 전용 기능을 다수 사용하고 있는가?&lt;/td&gt;
            &lt;td&gt;전환 비용을 먼저 분석&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;오픈소스 운영 인력이 부족한가?&lt;/td&gt;
            &lt;td&gt;JEUS 유지 또는 JBoss EAP 검토&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;표준 API와 제품 독립성이 중요한가?&lt;/td&gt;
            &lt;td&gt;WildFly 우선 검토&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;현재 시스템이 안정적이고 변경 필요가 적은가?&lt;/td&gt;
            &lt;td&gt;기존 구성 유지가 합리적&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;최종 정리&lt;/h2&gt;

    &lt;p&gt;
      WildFly가 선택되는 이유는 단순히 무료 WAS이기 때문만은 아니다. Jakarta EE와 MicroProfile 중심의 표준 기술, 공개된 개발 환경, 컨테이너 이미지, Maven 기반 자동화와 Kubernetes 연동이 현대적인 개발·운영 방식에 잘 맞기 때문이다.
    &lt;/p&gt;

    &lt;p&gt;
      반면 WebtoB·JEUS는 국내 엔터프라이즈 환경에서 축적된 운영 경험, 두 제품의 긴밀한 연계와 제조사의 공식 지원 체계가 강점이다. 대규모 기존 시스템에서는 제품 비용보다 마이그레이션 위험과 운영 안정성이 더 중요할 수 있다.
    &lt;/p&gt;

    &lt;div class=&quot;point-box&quot;&gt;
      &lt;strong&gt;선택 기준 한 줄 정리&lt;/strong&gt;&lt;br&gt;
      신규 시스템, 표준 기술, 자동화와 클라우드 전환이 우선이면 WildFly가 유리하다.&lt;br&gt;
      기존 자산, 국내 운영 경험과 공식 지원이 우선이면 WebtoB·JEUS 유지가 합리적일 수 있다.&lt;br&gt;
      상용 지원과 개방형 기술이 모두 필요하면 JBoss EAP도 함께 비교해야 한다.
    &lt;/div&gt;
  &lt;/section&gt;
&lt;/article&gt;

  &lt;/main&gt;  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/wildfly-vs-webtob-jeus#article&quot;,
        &quot;url&quot;: &quot;https://example.com/wildfly-vs-webtob-jeus&quot;,
        &quot;headline&quot;: &quot;WebtoB·JEUS 대신 WildFly를 선택하는 이유&quot;,
        &quot;description&quot;: &quot;WebtoB와 JEUS 중심의 상용 미들웨어 구성 대신 WildFly를 검토하는 이유를 비용, 표준 기술, 개발 생산성, 컨테이너 운영, 기술 종속성과 지원 체계 관점에서 비교합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/wildfly-vs-webtob-jeus&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/images/replace-og-image.jpg&quot;
        },
        &quot;keywords&quot;: [
          &quot;WildFly&quot;,
          &quot;WebtoB&quot;,
          &quot;JEUS&quot;,
          &quot;WAS 비교&quot;,
          &quot;자카르타 EE&quot;,
          &quot;오픈소스 WAS&quot;,
          &quot;미들웨어 전환&quot;,
          &quot;쿠버네티스 WAS&quot;,
          &quot;JBoss EAP&quot;,
          &quot;Java 애플리케이션 서버&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;WildFly&quot;,
            &quot;applicationCategory&quot;: &quot;Application Server&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;JEUS&quot;,
            &quot;applicationCategory&quot;: &quot;Application Server&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;WebtoB&quot;,
            &quot;applicationCategory&quot;: &quot;Web Server&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/wildfly-vs-webtob-jeus#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;미들웨어&quot;,
            &quot;item&quot;: &quot;https://example.com/middleware&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;WildFly와 WebtoB·JEUS 비교&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;  &lt;!-- 관리자 입력용 태그 10개: WildFly, WebtoB, JEUS, WAS 비교, 자카르타 EE, 오픈소스 WAS, 미들웨어 전환, 쿠버네티스, JBoss EAP, Java 서버 --&gt;&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/ETC</category>
      <category>Java 애플리케이션 서버</category>
      <category>jboss eap</category>
      <category>JEUS</category>
      <category>WAS 비교</category>
      <category>WebtoB</category>
      <category>wildfly</category>
      <category>미들웨어 전환</category>
      <category>오픈소스 WAS</category>
      <category>자카르타 EE</category>
      <category>쿠버네티스 WAS</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/589</guid>
      <comments>https://togethergrow.tistory.com/entry/WebtoB%C2%B7JEUS-%EB%8C%80%EC%8B%A0-WildFly%EB%A5%BC-%EC%84%A0%ED%83%9D%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0#entry589comment</comments>
      <pubDate>Tue, 14 Jul 2026 23:56:17 +0900</pubDate>
    </item>
    <item>
      <title>Ingress NGINX 대안으로 보는 NGINX Gateway Fabric과 Istio 비교</title>
      <link>https://togethergrow.tistory.com/entry/Ingress-NGINX-%EB%8C%80%EC%95%88%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-NGINX-Gateway-Fabric%EA%B3%BC-Istio-%EB%B9%84%EA%B5%90</link>
      <description>&lt;style&gt;
.post-ngf-istio {
  width: 100%;
  max-width: 920px;
  margin: 0 auto;
  padding: 12px 0 40px;
  line-height: 1.75;
  word-break: keep-all;
  overflow-wrap: break-word;
}

.post-ngf-istio h1 {
  margin: 0 0 26px;
  font-size: 2rem;
  line-height: 1.4;
  letter-spacing: -0.04em;
}

.post-ngf-istio h2 {
  margin: 48px 0 20px;
  padding-bottom: 10px;
  border-bottom: 2px solid rgba(120, 120, 120, 0.22);
  font-size: 1.5rem;
  line-height: 1.45;
  letter-spacing: -0.025em;
}

.post-ngf-istio h3 {
  margin: 30px 0 12px;
  font-size: 1.16rem;
  line-height: 1.5;
}

.post-ngf-istio p {
  margin: 0 0 18px;
}

.post-ngf-istio ul,
.post-ngf-istio ol {
  margin: 12px 0 22px;
  padding-left: 1.4rem;
}

.post-ngf-istio li {
  margin-bottom: 8px;
}

.post-ngf-istio code {
  padding: 2px 6px;
  border-radius: 4px;
  background: rgba(120, 120, 120, 0.12);
  font-size: 0.92em;
}

.post-ngf-istio .post-lead {
  margin-bottom: 26px;
  font-size: 1.06rem;
}

.post-ngf-istio .post-box {
  margin: 24px 0;
  padding: 18px 20px;
  border: 1px solid rgba(120, 120, 120, 0.28);
  border-left: 5px solid #2563eb;
  border-radius: 10px;
  background: rgba(120, 120, 120, 0.06);
}

.post-ngf-istio .post-warning {
  border-left-color: #d97706;
}

.post-ngf-istio .post-table {
  width: 100%;
  margin: 22px 0 30px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.post-ngf-istio table {
  width: 100%;
  min-width: 700px;
  border-collapse: collapse;
  border: 1px solid rgba(120, 120, 120, 0.24);
}

.post-ngf-istio th,
.post-ngf-istio td {
  padding: 12px 13px;
  border-right: 1px solid rgba(120, 120, 120, 0.18);
  border-bottom: 1px solid rgba(120, 120, 120, 0.18);
  text-align: left;
  vertical-align: top;
}

.post-ngf-istio th {
  background: rgba(120, 120, 120, 0.1);
  font-weight: 700;
}

.post-ngf-istio th:last-child,
.post-ngf-istio td:last-child {
  border-right: 0;
}

.post-ngf-istio tr:last-child td {
  border-bottom: 0;
}

.post-ngf-istio .post-flow {
  margin: 18px 0 26px;
  padding: 16px;
  border-radius: 8px;
  background: rgba(120, 120, 120, 0.08);
  text-align: center;
  font-weight: 600;
}

.post-ngf-istio .post-check {
  padding-left: 0;
  list-style: none;
}

.post-ngf-istio .post-check li {
  position: relative;
  padding-left: 25px;
}

.post-ngf-istio .post-check li:before {
  position: absolute;
  left: 0;
  content: &quot;✓&quot;;
  font-weight: 700;
}

@media (max-width: 700px) {
  .post-ngf-istio {
    padding: 8px 0 32px;
  }

  .post-ngf-istio h1 {
    font-size: 1.65rem;
  }

  .post-ngf-istio h2 {
    margin-top: 40px;
    font-size: 1.35rem;
  }

  .post-ngf-istio .post-box {
    padding: 16px;
  }
}
&lt;/style&gt;

&lt;main class=&quot;post-ngf-istio&quot;&gt;
  &lt;article&gt;
    &lt;header&gt;
      &lt;h1&gt;Ingress NGINX 대안으로 보는 NGINX Gateway Fabric과 Istio 비교&lt;/h1&gt;

      &lt;p class=&quot;post-lead&quot;&gt;
        Kubernetes에서 Ingress NGINX을 대체하려고 하면 NGINX Gateway Fabric과 Istio가 자주 후보로 등장한다. 그러나 두 제품은 같은 범위의 도구가 아니다. NGINX Gateway Fabric은 외부에서 들어오는 트래픽을 처리하는 게이트웨이에 가깝고, Istio는 외부 트래픽과 서비스 간 통신까지 관리하는 서비스 메시다.
      &lt;/p&gt;

      &lt;div class=&quot;post-box&quot;&gt;
        &lt;strong&gt;핵심 결론&lt;/strong&gt;&lt;br&gt;
        외부 HTTP·HTTPS 라우팅과 Gateway API 전환이 목적이라면 NGINX Gateway Fabric이 더 직접적인 선택이다.&lt;br&gt;
        서비스 간 mTLS, 워크로드 기반 접근 제어, 내부 트래픽 정책과 분산 관측성이 필요하다면 Istio가 적합하다.&lt;br&gt;
        단순한 인그레스 교체만을 위해 Istio를 도입하면 운영 범위가 지나치게 넓어질 수 있다.
      &lt;/div&gt;
    &lt;/header&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2026.07.07 - [IT 소식 뉴스/IT 소식] - 쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784073976505&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&quot; data-og-description=&quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준 2026년 3월, 쿠버네티스에서 널리 사용되던 Ingress NGINX의 지원이 종료되면서 Gateway API 이전은 더 이상 미룰 수 없는 과제가 됐다. &quot; data-og-host=&quot;one-day-growth.com&quot; data-og-source-url=&quot;https://one-day-growth.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80&quot; data-og-url=&quot;https://one-day-growth.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cxYdj3/dJMb87giSKP/LhK8dzIBMVt21NMjPuZg21/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://one-day-growth.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://one-day-growth.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cxYdj3/dJMb87giSKP/LhK8dzIBMVt21NMjPuZg21/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준 2026년 3월, 쿠버네티스에서 널리 사용되던 Ingress NGINX의 지원이 종료되면서 Gateway API 이전은 더 이상 미룰 수 없는 과제가 됐다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;one-day-growth.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
    &lt;section&gt;
      &lt;h2&gt;두 제품을 같은 인그레스 컨트롤러로 보면 안 되는 이유&lt;/h2&gt;

      &lt;p&gt;
        기존 Kubernetes Ingress는 호스트와 URL 경로를 기준으로 외부 요청을 내부 Service에 전달한다. 고급 기능은 컨트롤러별 annotation에 의존하는 경우가 많기 때문에 구현체를 교체하면 기존 설정을 그대로 사용할 수 없는 문제가 생긴다.
      &lt;/p&gt;

      &lt;p&gt;
        Gateway API는 이런 한계를 줄이기 위해 역할 분리와 확장성을 강화한 API다. 인프라 담당자는 &lt;code&gt;GatewayClass&lt;/code&gt;와 &lt;code&gt;Gateway&lt;/code&gt;를 관리하고, 애플리케이션 담당자는 &lt;code&gt;HTTPRoute&lt;/code&gt;로 자신의 서비스 라우팅을 정의할 수 있다.
      &lt;/p&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 Gateway API를 중심으로 외부 진입 트래픽을 관리한다. Istio도 Gateway API를 지원하지만 서비스 간 통신, 보안 정책, 장애 제어와 텔레메트리까지 관리한다.
      &lt;/p&gt;

      &lt;div class=&quot;post-box post-warning&quot;&gt;
        &lt;strong&gt;이름을 구분해야 한다&lt;/strong&gt;&lt;br&gt;
        Kubernetes 커뮤니티의 Ingress NGINX과 NGINX Gateway Fabric은 별개의 프로젝트다.&lt;br&gt;
        NGINX Ingress Controller와 NGINX Gateway Fabric도 설치 방식과 지원 API가 다르다.&lt;br&gt;
        이전 전에는 현재 사용하는 컨트롤러의 정확한 제품명과 배포 방식을 먼저 확인해야 한다.
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;NGINX Gateway Fabric의 역할&lt;/h2&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 Kubernetes Gateway API 리소스를 감시하고 그 내용을 기반으로 NGINX 데이터 플레인을 구성한다. 주된 역할은 클러스터 외부에서 내부로 들어오는 north-south 트래픽을 처리하는 것이다.
      &lt;/p&gt;

      &lt;div class=&quot;post-flow&quot;&gt;
        외부 사용자 → LoadBalancer → NGINX Gateway → Kubernetes Service → Pod
      &lt;/div&gt;

      &lt;h3&gt;주요 장점&lt;/h3&gt;

      &lt;ul&gt;
        &lt;li&gt;기존 인그레스 계층과 역할이 비슷해 전환 목적을 이해하기 쉽다.&lt;/li&gt;
        &lt;li&gt;Gateway API를 사용해 annotation 의존도를 줄일 수 있다.&lt;/li&gt;
        &lt;li&gt;NGINX 프록시 운영 경험을 이어가기 좋다.&lt;/li&gt;
        &lt;li&gt;호스트, 경로, 헤더 기반 라우팅과 트래픽 분할에 적합하다.&lt;/li&gt;
        &lt;li&gt;애플리케이션 Pod마다 프록시를 추가하지 않아 구조가 비교적 단순하다.&lt;/li&gt;
        &lt;li&gt;서비스 메시를 도입하지 않고 외부 진입 계층만 운영할 수 있다.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;h3&gt;한계&lt;/h3&gt;

      &lt;ul&gt;
        &lt;li&gt;서비스 간 통신 전체를 관리하는 플랫폼은 아니다.&lt;/li&gt;
        &lt;li&gt;클러스터 내부 모든 서비스에 자동 mTLS를 적용하는 기능은 핵심 범위가 아니다.&lt;/li&gt;
        &lt;li&gt;워크로드 신원 기반 내부 접근 제어는 별도 보안 체계가 필요하다.&lt;/li&gt;
        &lt;li&gt;서비스 호출 관계와 내부 분산 추적은 별도로 구성해야 한다.&lt;/li&gt;
        &lt;li&gt;기존 Ingress annotation과 Gateway API 기능이 완전히 일대일 대응하지 않을 수 있다.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;Istio의 역할&lt;/h2&gt;

      &lt;p&gt;
        Istio는 Kubernetes 서비스 메시다. 외부에서 들어오는 요청뿐 아니라 서비스 A에서 서비스 B로 이동하는 내부 요청까지 데이터 플레인을 통해 관리할 수 있다.
      &lt;/p&gt;

      &lt;p&gt;
        사이드카 모드에서는 애플리케이션 Pod마다 프록시가 함께 배치된다. ambient 모드에서는 노드 단위 프록시가 기본 통신을 처리하고, L7 정책이 필요한 워크로드에 waypoint 프록시를 추가할 수 있다.
      &lt;/p&gt;

      &lt;div class=&quot;post-flow&quot;&gt;
        외부 사용자 → Istio Gateway → Service A → Istio 데이터 플레인 → Service B
      &lt;/div&gt;

      &lt;h3&gt;주요 장점&lt;/h3&gt;

      &lt;ul&gt;
        &lt;li&gt;서비스 간 통신을 mTLS로 암호화하고 워크로드 신원을 확인할 수 있다.&lt;/li&gt;
        &lt;li&gt;서비스 계정, 네임스페이스, 요청 경로에 따라 접근을 제어할 수 있다.&lt;/li&gt;
        &lt;li&gt;내부 호출에 재시도, 타임아웃, 카나리와 트래픽 미러링을 적용할 수 있다.&lt;/li&gt;
        &lt;li&gt;서비스 간 성공률, 지연 시간, 호출 관계를 공통 방식으로 관찰하기 쉽다.&lt;/li&gt;
        &lt;li&gt;외부 진입과 외부로 나가는 트래픽을 함께 통제할 수 있다.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;h3&gt;운영 부담&lt;/h3&gt;

      &lt;ul&gt;
        &lt;li&gt;컨트롤 플레인과 데이터 플레인 구조를 함께 이해해야 한다.&lt;/li&gt;
        &lt;li&gt;인증서, 정책, 프록시, 네트워크와 텔레메트리까지 운영 범위가 넓다.&lt;/li&gt;
        &lt;li&gt;잘못된 재시도와 타임아웃 정책이 장애를 확대할 수 있다.&lt;/li&gt;
        &lt;li&gt;사이드카 또는 ambient 구성에 따른 추가 리소스가 필요하다.&lt;/li&gt;
        &lt;li&gt;단순한 외부 라우팅만 필요한 환경에는 과도할 수 있다.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;핵심 기능 비교&lt;/h2&gt;

      &lt;div class=&quot;post-table&quot;&gt;
        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;비교 항목&lt;/th&gt;
              &lt;th&gt;NGINX Gateway Fabric&lt;/th&gt;
              &lt;th&gt;Istio&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 목적&lt;/td&gt;
              &lt;td&gt;외부 트래픽을 내부 서비스로 전달&lt;/td&gt;
              &lt;td&gt;외부 진입과 서비스 간 통신 전체 관리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제품 성격&lt;/td&gt;
              &lt;td&gt;Gateway API 구현체&lt;/td&gt;
              &lt;td&gt;서비스 메시 플랫폼&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;트래픽 범위&lt;/td&gt;
              &lt;td&gt;North-south 중심&lt;/td&gt;
              &lt;td&gt;North-south와 east-west&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터 플레인&lt;/td&gt;
              &lt;td&gt;NGINX&lt;/td&gt;
              &lt;td&gt;Envoy, ztunnel, waypoint&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Ingress 대체 적합성&lt;/td&gt;
              &lt;td&gt;직접적&lt;/td&gt;
              &lt;td&gt;가능하지만 범위가 넓음&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;외부 TLS 종료&lt;/td&gt;
              &lt;td&gt;지원&lt;/td&gt;
              &lt;td&gt;지원&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;서비스 간 자동 mTLS&lt;/td&gt;
              &lt;td&gt;핵심 기능 아님&lt;/td&gt;
              &lt;td&gt;핵심 기능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;워크로드 기반 접근 제어&lt;/td&gt;
              &lt;td&gt;별도 구성 필요&lt;/td&gt;
              &lt;td&gt;세밀한 정책 구성 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;카나리 배포&lt;/td&gt;
              &lt;td&gt;외부 유입 트래픽 중심&lt;/td&gt;
              &lt;td&gt;외부와 내부 호출 모두 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;재시도와 타임아웃&lt;/td&gt;
              &lt;td&gt;게이트웨이 구간 중심&lt;/td&gt;
              &lt;td&gt;서비스 간 요청에도 적용 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분산 추적&lt;/td&gt;
              &lt;td&gt;별도 연동 필요&lt;/td&gt;
              &lt;td&gt;메시 전체 추적 구성에 유리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 난이도&lt;/td&gt;
              &lt;td&gt;낮음에서 중간&lt;/td&gt;
              &lt;td&gt;중간에서 높음&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;보안 기능 비교&lt;/h2&gt;

      &lt;h3&gt;외부 HTTPS&lt;/h3&gt;

      &lt;p&gt;
        외부 사용자가 HTTPS로 접근하고 게이트웨이에서 TLS를 종료하는 요구는 두 제품 모두 처리할 수 있다. 외부 클라이언트와 게이트웨이 사이의 HTTPS만 필요하다면 NGINX Gateway Fabric으로 충분한 경우가 많다.
      &lt;/p&gt;

      &lt;h3&gt;서비스 간 mTLS&lt;/h3&gt;

      &lt;p&gt;
        Istio는 내부 워크로드에 인증서를 배포하고 서비스 간 통신을 mTLS로 전환할 수 있다. 애플리케이션마다 인증서 발급과 갱신 기능을 직접 구현하지 않아도 된다는 점이 장점이다.
      &lt;/p&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 외부 게이트웨이 역할이 중심이다. 클러스터 안의 모든 서비스 사이에 자동으로 워크로드 신원 기반 mTLS를 제공하는 서비스 메시와는 범위가 다르다.
      &lt;/p&gt;

      &lt;h3&gt;접근 제어&lt;/h3&gt;

      &lt;p&gt;
        Istio는 호출자의 서비스 계정, 네임스페이스, HTTP 메서드와 요청 경로를 기준으로 접근 정책을 구성할 수 있다. 내부 서비스에 제로 트러스트 정책이 필요한 경우 유리하다.
      &lt;/p&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 외부 요청의 호스트, 경로와 헤더를 기준으로 라우팅과 필터링을 적용하는 데 적합하다.
      &lt;/p&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;트래픽 관리 비교&lt;/h2&gt;

      &lt;h3&gt;카나리 배포&lt;/h3&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 HTTPRoute에서 여러 백엔드에 가중치를 지정해 외부 요청을 분산할 수 있다. 신규 버전에 10%, 기존 버전에 90%를 전달하는 방식의 배포에 적합하다.
      &lt;/p&gt;

      &lt;p&gt;
        Istio는 외부 요청뿐 아니라 내부 서비스가 특정 버전을 호출하는 비율도 제어할 수 있다. 호출 서비스, 헤더 또는 사용자 조건에 따라 서로 다른 버전을 선택하는 정책에도 유리하다.
      &lt;/p&gt;

      &lt;h3&gt;재시도와 타임아웃&lt;/h3&gt;

      &lt;p&gt;
        NGINX Gateway Fabric은 외부 요청이 백엔드에 도달하는 구간을 중심으로 정책을 적용한다. Istio는 서비스 A에서 서비스 B로 이어지는 내부 호출에도 재시도와 타임아웃을 적용할 수 있다.
      &lt;/p&gt;

      &lt;div class=&quot;post-box post-warning&quot;&gt;
        &lt;strong&gt;재시도 설정 주의&lt;/strong&gt;&lt;br&gt;
        장애 상황에서 과도한 재시도는 요청 수를 급격하게 늘릴 수 있다.&lt;br&gt;
        결제나 주문처럼 중복 처리 위험이 있는 요청은 멱등성을 먼저 확인해야 한다.&lt;br&gt;
        재시도와 타임아웃은 전체 호출 구조를 기준으로 설계해야 한다.
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;성능과 리소스 사용량&lt;/h2&gt;

      &lt;p&gt;
        성능은 NGINX와 Envoy 중 어느 프록시가 더 빠른지만으로 결정할 수 없다. TLS, 로그 수준, 메트릭 수집, 필터 수, 라우팅 규칙과 CPU 제한에 따라 결과가 달라진다.
      &lt;/p&gt;

      &lt;h3&gt;NGINX Gateway Fabric&lt;/h3&gt;

      &lt;p&gt;
        프록시가 클러스터 진입 지점에 집중되기 때문에 필요한 Pod 수와 리소스를 비교적 쉽게 계산할 수 있다. 애플리케이션 Pod마다 프록시를 추가하지 않는다는 점도 장점이다.
      &lt;/p&gt;

      &lt;h3&gt;Istio&lt;/h3&gt;

      &lt;p&gt;
        사이드카 모드에서는 각 Pod에 프록시가 추가되므로 CPU와 메모리 사용량이 증가할 수 있다. ambient 모드는 사이드카 부담을 줄일 수 있지만 ztunnel과 waypoint 운영이 필요하다.
      &lt;/p&gt;

      &lt;div class=&quot;post-box&quot;&gt;
        &lt;strong&gt;실무 기준으로 보면&lt;/strong&gt;&lt;br&gt;
        외부 게이트웨이 기능만 켠 테스트와 서비스 메시 기능을 모두 켠 테스트는 같은 조건이 아니다.&lt;br&gt;
        실제 라우팅, TLS, 로그, 메트릭과 보안 정책을 적용한 상태에서 부하 테스트를 진행해야 한다.
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;NGINX Gateway Fabric이 적합한 경우&lt;/h2&gt;

      &lt;ul class=&quot;post-check&quot;&gt;
        &lt;li&gt;외부 HTTP·HTTPS 라우팅이 핵심 요구사항이다.&lt;/li&gt;
        &lt;li&gt;Ingress annotation을 줄이고 Gateway API로 전환하려고 한다.&lt;/li&gt;
        &lt;li&gt;서비스 간 자동 mTLS가 필수 요구사항은 아니다.&lt;/li&gt;
        &lt;li&gt;기존 운영팀이 NGINX 구조와 로그에 익숙하다.&lt;/li&gt;
        &lt;li&gt;구성 요소와 장애 지점을 단순하게 유지하고 싶다.&lt;/li&gt;
        &lt;li&gt;인그레스 계층에서 카나리 배포가 필요하다.&lt;/li&gt;
        &lt;li&gt;서비스 메시 전담 운영 인력이 충분하지 않다.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;Istio가 적합한 경우&lt;/h2&gt;

      &lt;ul class=&quot;post-check&quot;&gt;
        &lt;li&gt;서비스 간 통신 암호화가 필수다.&lt;/li&gt;
        &lt;li&gt;서비스 계정과 네임스페이스 단위 접근 제어가 필요하다.&lt;/li&gt;
        &lt;li&gt;내부 호출까지 포함한 카나리 배포가 필요하다.&lt;/li&gt;
        &lt;li&gt;서비스별 재시도와 장애 격리 정책을 통일해야 한다.&lt;/li&gt;
        &lt;li&gt;다수의 마이크로서비스 호출 관계를 관찰해야 한다.&lt;/li&gt;
        &lt;li&gt;외부로 나가는 트래픽도 통제해야 한다.&lt;/li&gt;
        &lt;li&gt;서비스 메시를 운영할 전담 인력과 절차가 준비되어 있다.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;Ingress NGINX에서 이전할 때 점검할 항목&lt;/h2&gt;

      &lt;ol&gt;
        &lt;li&gt;rewrite, 정규식 경로, 인증, CORS, 요청 크기, 타임아웃과 snippet annotation을 목록화한다.&lt;/li&gt;
        &lt;li&gt;표준 HTTPRoute로 옮길 기능과 구현체 전용 확장이 필요한 기능을 구분한다.&lt;/li&gt;
        &lt;li&gt;플랫폼 팀과 애플리케이션 팀의 Gateway API 관리 권한을 분리한다.&lt;/li&gt;
        &lt;li&gt;새 게이트웨이에 별도 주소를 할당하고 인증서와 라우팅을 먼저 검증한다.&lt;/li&gt;
        &lt;li&gt;요청 수, 오류율, P95·P99 지연 시간과 리소스 사용량을 비교한다.&lt;/li&gt;
        &lt;li&gt;기존 인그레스로 되돌릴 수 있는 DNS 또는 로드 밸런서 롤백 절차를 준비한다.&lt;/li&gt;
      &lt;/ol&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;최종 정리&lt;/h2&gt;

      &lt;p&gt;
        NGINX Gateway Fabric과 Istio는 일부 기능이 겹치지만 기본 목적은 다르다. NGINX Gateway Fabric은 Gateway API를 활용해 외부 진입 경로를 현대화하는 도구이고, Istio는 외부 트래픽과 서비스 간 통신을 함께 관리하는 서비스 메시다.
      &lt;/p&gt;

      &lt;p&gt;
        Ingress NGINX 대안을 찾는 상황에서 외부 라우팅만 필요하다면 NGINX Gateway Fabric이 더 단순하고 직접적이다. 내부 통신 보안, 서비스 신원과 분산 관측성이 중요하다면 Istio가 더 적합하다.
      &lt;/p&gt;

      &lt;div class=&quot;post-box&quot;&gt;
        &lt;strong&gt;선택 기준&lt;/strong&gt;&lt;br&gt;
        인그레스 현대화가 목표라면 NGINX Gateway Fabric을 우선 검토한다.&lt;br&gt;
        서비스 간 보안과 내부 트래픽 제어가 목표라면 Istio를 우선 검토한다.&lt;br&gt;
        기능 수보다 실제 관리해야 하는 트래픽 범위를 기준으로 선택해야 한다.
      &lt;/div&gt;
    &lt;/section&gt;
  &lt;/article&gt;
&lt;/main&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@graph&quot;: [
    {
      &quot;@type&quot;: &quot;TechArticle&quot;,
      &quot;headline&quot;: &quot;Ingress NGINX 대안으로 보는 NGINX Gateway Fabric과 Istio 비교&quot;,
      &quot;description&quot;: &quot;Ingress NGINX 대안을 검토할 때 자주 비교되는 NGINX Gateway Fabric과 Istio의 구조, 기능, 보안, 운영 난이도와 선택 기준을 자세히 정리합니다.&quot;,
      &quot;inLanguage&quot;: &quot;ko-KR&quot;,
      &quot;keywords&quot;: [
        &quot;Ingress NGINX 대안&quot;,
        &quot;NGINX Gateway Fabric&quot;,
        &quot;Istio&quot;,
        &quot;Gateway API&quot;,
        &quot;쿠버네티스 게이트웨이&quot;,
        &quot;서비스 메시&quot;,
        &quot;mTLS&quot;,
        &quot;트래픽 관리&quot;,
        &quot;인그레스 컨트롤러&quot;,
        &quot;쿠버네티스 네트워크&quot;
      ]
    },
    {
      &quot;@type&quot;: &quot;BreadcrumbList&quot;,
      &quot;itemListElement&quot;: [
        {
          &quot;@type&quot;: &quot;ListItem&quot;,
          &quot;position&quot;: 1,
          &quot;name&quot;: &quot;홈&quot;
        },
        {
          &quot;@type&quot;: &quot;ListItem&quot;,
          &quot;position&quot;: 2,
          &quot;name&quot;: &quot;쿠버네티스&quot;
        },
        {
          &quot;@type&quot;: &quot;ListItem&quot;,
          &quot;position&quot;: 3,
          &quot;name&quot;: &quot;NGINX Gateway Fabric과 Istio 비교&quot;
        }
      ]
    }
  ]
}
&lt;/script&gt;

&lt;!-- 관리자 입력용 태그 10개: Ingress NGINX 대안, NGINX Gateway Fabric, Istio, Gateway API, 쿠버네티스, 서비스 메시, mTLS, 트래픽 관리, 인그레스 컨트롤러, 쿠버네티스 네트워크 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>Gateway API</category>
      <category>Ingress NGINX 대안</category>
      <category>Istio</category>
      <category>mtls</category>
      <category>NGINX Gateway Fabric</category>
      <category>서비스 메시</category>
      <category>인그레스 컨트롤러</category>
      <category>쿠버네티스</category>
      <category>쿠버네티스 네트워크</category>
      <category>트래픽 관리</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/588</guid>
      <comments>https://togethergrow.tistory.com/entry/Ingress-NGINX-%EB%8C%80%EC%95%88%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-NGINX-Gateway-Fabric%EA%B3%BC-Istio-%EB%B9%84%EA%B5%90#entry588comment</comments>
      <pubDate>Tue, 14 Jul 2026 23:44:10 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준</title>
      <link>https://togethergrow.tistory.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Ingress NGINX 지원 종료 이후 Gateway API v1.4 기준으로 7개 주요 쿠버네티스 게이트웨이를 다시 검증하며 달라진 결과와 선택 기준을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;쿠버네티스, Gateway API, Ingress NGINX, ingress-nginx, Kubernetes, IngressNightmare, Kong Gateway, Traefik Gateway, Envoy Gateway, Istio Gateway&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;Ingress NGINX 지원 종료 이후 Gateway API v1.4 기준으로 7개 주요 쿠버네티스 게이트웨이를 다시 검증하며 달라진 결과와 선택 기준을 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/kubernetes-gateway-api-v14-poc&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Ingress NGINX 지원 종료 이후 Gateway API v1.4 기준으로 7개 주요 쿠버네티스 게이트웨이를 다시 검증하며 달라진 결과와 선택 기준을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
    }

    .post-content .content-wrap {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.45;
      margin: 2.8rem 0 0.9rem;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 0.8rem;
    }

    .post-content h3 {
      font-size: 1.15rem;
      line-height: 1.5;
      margin: 2rem 0 0.75rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.05rem;
      margin-bottom: 1.4rem;
    }

    .post-content .note-box,
    .post-content .summary-box,
    .post-content .warning-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1rem 1.1rem;
      margin: 1.4rem 0;
    }

    .post-content .summary-box strong,
    .post-content .note-box strong,
    .post-content .warning-box strong {
      display: inline-block;
      margin-bottom: 0.35rem;
    }

    .post-content ul,
    .post-content ol {
      margin: 0.8rem 0 1.2rem 1.2rem;
      padding: 0;
    }

    .post-content li {
      margin: 0.45rem 0;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.4rem 0;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.75rem;
      vertical-align: top;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content .table-scroll {
      overflow-x: auto;
      margin: 1.4rem 0;
    }

    .post-content .small-text {
      font-size: 0.92rem;
      opacity: 0.9;
    }

    .post-content .check-list li {
      margin-bottom: 0.65rem;
    }

    .post-content code {
      padding: 0.1rem 0.25rem;
      border-radius: 4px;
      background: rgba(120, 120, 120, 0.12);
    }

    .post-content .conclusion {
      border-top: 1px solid rgba(120, 120, 120, 0.35);
      margin-top: 2.5rem;
      padding-top: 1.4rem;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;content-wrap&quot;&gt;
      &lt;h1&gt;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        2026년 3월, 쿠버네티스에서 널리 사용되던 Ingress NGINX의 지원이 종료되면서 Gateway API 이전은 더 이상 미룰 수 없는 과제가 됐다. 여기에 ingress-nginx의 설정 주입 방식에서 비롯된 IngressNightmare 취약점까지 드러나며, 다음 게이트웨이를 무엇으로 선택할지 다시 검증해야 할 필요성이 커졌다.
      &lt;/p&gt;

      &lt;p&gt;
        지난해에는 Gateway API 구현체 7종을 비교하며 Kong과 Traefik이 기본 테스트를 통과하지 못한다고 판단했다. 하지만 실제 이전 시점이 다가오면서 당시 결과를 다시 살펴보니, 제품 자체보다 측정 환경과 측정 방식에 문제가 있었을 가능성이 보였다.
      &lt;/p&gt;

      &lt;p&gt;
        그래서 동일한 7개 구현체를 Gateway API v1.4 기준으로 처음부터 다시 측정했다. 이번에는 Kong과 Traefik 모두 Core 테스트를 통과했고, 작년 결과는 제품의 근본적인 한계라기보다 측정 조건과 설계의 문제였다는 점을 확인했다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;왜 다시 측정하기로 했나&lt;/h2&gt;

        &lt;p&gt;
          지난해 작성한 쿠버네티스 게이트웨이 기술 검증에서는 Ingress NGINX 지원 종료 이후 어떤 Gateway API 구현체가 적합한지 확인하기 위해 7개 구현체에 17개 테스트를 각각 100회씩 실행했다. 당시에는 통과율을 기준으로 등급을 매겼고, Kong과 Traefik은 가장 낮은 등급으로 기록됐다.
        &lt;/p&gt;

        &lt;p&gt;
          Kong은 라우트가 동기화되지 않아 &lt;code&gt;no Route matched&lt;/code&gt; 오류가 발생했고, Traefik은 &lt;code&gt;404 page not found&lt;/code&gt;와 &lt;code&gt;Gateway not ready&lt;/code&gt;를 반환했다. 결과만 보면 두 구현체 모두 기본 라우팅조차 통과하지 못한 셈이었다.
        &lt;/p&gt;

        &lt;p&gt;
          하지만 Kong은 API 게이트웨이 시장에서 오래 검증된 제품이고, Traefik 역시 많은 팀이 프로덕션 환경에서 사용하고 있다. 그런 제품이 기본 라우팅을 통과하지 못했다면, 제품 결함 외에도 설치 방식이나 측정 절차의 문제를 함께 의심해야 했다. 운영 환경에서는 측정 결과 하나가 실제 도입 판단으로 이어질 수 있기 때문이다.
        &lt;/p&gt;

        &lt;div class=&quot;summary-box&quot;&gt;
          &lt;strong&gt;재측정을 결정한 핵심 이유&lt;/strong&gt;&lt;br&gt;
          Ingress NGINX 지원 종료가 실제로 발생해 이전 판단이 필요해졌다.&lt;br&gt;
          IngressNightmare 같은 심각한 보안 취약점으로 기존 구조의 위험성이 커졌다.&lt;br&gt;
          기존 통과율 기반 채점 방식에 기술적 한계가 있었다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기존 채점 방식의 한계&lt;/h2&gt;

        &lt;p&gt;
          다시 살펴보니 지난해의 통과율 기반 평가는 세 가지 구조적 문제를 가지고 있었다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;
            &lt;strong&gt;미지원 기능이 점수에 거의 반영되지 않았다.&lt;/strong&gt;&lt;br&gt;
            PASS와 FAIL만 계산하고 SKIP 항목을 제외하다 보니, 기능을 아예 지원하지 않는 구현체가 감점 대신 계산 대상에서 빠졌다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;필수 기능과 부가 기능을 같은 무게로 측정했다.&lt;/strong&gt;&lt;br&gt;
            반드시 지원해야 하는 host 라우팅과 표준에도 없는 rate limiting을 같은 가중치로 평가했다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;100%와 95%를 구분하지 못했다.&lt;/strong&gt;&lt;br&gt;
            A/F 중심의 등급 체계에서는 거의 모든 테스트를 통과한 구현체와 기본 기능부터 실패한 구현체가 같은 등급으로 묶일 수 있었다.
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          이번 재측정은 새 데이터를 더 모으는 작업이기 전에, 작년에 내렸던 결론을 내려놓는 일에서 시작했다. 기술 검증에서 중요한 것은 결과를 방어하는 것이 아니라, 결과가 나온 조건까지 함께 검증하는 일이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Gateway API 공식 적합성 모델로 다시 설계하다&lt;/h2&gt;

        &lt;p&gt;
          이번에는 임의의 점수 체계를 만들지 않고 Gateway API의 공식 적합성 모델에 맞춰 측정 구조를 다시 설계했다. Gateway API는 기존 Ingress를 대체하기 위해 쿠버네티스 커뮤니티가 만든 차세대 트래픽 라우팅 표준이다.
        &lt;/p&gt;

        &lt;p&gt;
          Gateway API는 역할을 GatewayClass, Gateway, HTTPRoute로 나눠 인프라 담당자, 클러스터 운영자, 애플리케이션 개발자 사이의 책임을 분리한다. Ingress 시절에는 같은 설정이라도 구현체에 따라 동작이 달라지는 일이 많았지만, Gateway API는 이러한 파편화를 줄이기 위해 공식 적합성 테스트를 제공한다.
        &lt;/p&gt;

        &lt;div class=&quot;table-scroll&quot;&gt;
          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;의미&lt;/th&gt;
                &lt;th&gt;이번 평가 방식&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;Core&lt;/td&gt;
                &lt;td&gt;모든 구현체가 반드시 지원해야 하는 필수 기능&lt;/td&gt;
                &lt;td&gt;7개 항목을 모두 통과해야 적합한 상태로 판단&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Extended&lt;/td&gt;
                &lt;td&gt;표준에 포함됐지만 선택적으로 지원하는 기능&lt;/td&gt;
                &lt;td&gt;감점이 아니라 지원 범위로 비교&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;구현체 고유 기능&lt;/td&gt;
                &lt;td&gt;rate limiting, 외부 인증 등 표준 밖 기능&lt;/td&gt;
                &lt;td&gt;등급에는 반영하지 않고 별도 매트릭스로 비교&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/div&gt;

        &lt;p&gt;
          결과적으로 이번 평가는 하나의 통과율이 아니라 세 가지 질문으로 나뉘었다. Core를 모두 통과했는가, Extended 기능을 얼마나 지원하는가, 구현체 고유 기능은 무엇을 제공하는가. 이전 A/F 등급보다 훨씬 많은 정보를 담을 수 있는 방식이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;원인은 제품보다 측정 방법과 조건에 가까웠다&lt;/h2&gt;

        &lt;p&gt;
          Gateway API v1.4 기준으로 7개 구현체를 라이브 클러스터에서 다시 측정한 결과, 지난해 통과하지 못했던 Kong과 Traefik 모두 Core 7개 항목을 통과했다. 또한 지난해 arm64 이미지 지원 문제로 제외했던 kgateway도 이번에는 측정 대상에 포함됐다.
        &lt;/p&gt;

        &lt;p&gt;
          결과가 달라진 이유는 하나가 아니었다. 가장 먼저 표준이 성숙했다. 지난해 측정은 Gateway API v1.2 기준이었고, 이번 측정은 v1.4 기준이었다. 그 사이 실험 단계였거나 구현체마다 다르게 처리되던 기능들이 공식 표준으로 정리됐다.
        &lt;/p&gt;

        &lt;p&gt;
          설치 방식도 달라졌다. 지난해 Kong은 오래된 KIC(Unmanaged) 방식으로 설치했지만, 이번에는 Gateway API 운영 방식에 맞는 KGO Managed 구성을 사용했다. 같은 제품이라도 현재 권장되는 설치 경로를 따르자 결과가 달라졌다.
        &lt;/p&gt;

        &lt;p&gt;
          측정 방식의 변화도 결정적이었다. Kong은 설정을 한 덩어리로 묶어 동기화하는 특성이 있어, 지원하지 않는 기능이 하나라도 포함되면 전체 적용이 거부될 수 있다. 지난해의 &lt;code&gt;no Route matched&lt;/code&gt; 오류는 이 영향으로 기본 라우팅까지 함께 실패한 사례였다. 이번에는 기능별로 라우트를 분리해 적용했고, 지원하지 않는 기능만 제외한 상태에서 Core 기능은 정상 동작했다.
        &lt;/p&gt;

        &lt;p&gt;
          Traefik은 Gateway 리스너가 바라보는 포트와 내부 entrypoint 포트가 맞지 않아 Ready 상태로 올라오지 못했다. 포트 구성을 맞추자 &lt;code&gt;Gateway not ready&lt;/code&gt;와 404 오류가 해소됐다.
        &lt;/p&gt;

        &lt;div class=&quot;note-box&quot;&gt;
          &lt;strong&gt;이번 재측정의 핵심 교훈&lt;/strong&gt;&lt;br&gt;
          점수가 낮게 나오면 제품부터 의심하기 쉽다.&lt;br&gt;
          하지만 기술 검증에서는 제품만큼 측정 조건과 테스트 설계도 함께 의심해야 한다.&lt;br&gt;
          특히 공개된 결과가 누군가의 도입 판단에 쓰인다면 더 엄격해야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;측정하며 확인한 네 가지 문제&lt;/h2&gt;

        &lt;h3&gt;1. 공식 적합성 인증이 기능 수준의 동일함을 뜻하지는 않는다&lt;/h3&gt;
        &lt;p&gt;
          Gateway API의 공식 권고는 conformant 구현체를 선택하라는 것이다. 하지만 실제 측정 결과, 공식 인증을 받은 7개 구현체도 Extended 기능 지원 범위는 6개에서 13개까지 차이가 컸다.
        &lt;/p&gt;

        &lt;p&gt;
          Envoy Gateway와 Istio는 Extended 13개 기능을 모두 지원했고, Cilium과 kgateway는 12개, NGINX Gateway Fabric은 11개, Traefik은 10개, Kong은 6개를 지원했다. conformant 인증은 합격선이지, 모든 구현체가 같은 수준이라는 보증은 아니다.
        &lt;/p&gt;

        &lt;h3&gt;2. 변환된다는 것과 동작한다는 것은 다르다&lt;/h3&gt;
        &lt;p&gt;
          ingress-nginx 설정을 Gateway API로 변환하는 ingress2gateway는 30개가 넘는 어노테이션을 자동 변환할 수 있다. 그러나 변환이 성공했다고 해서 실제 트래픽에서 동작한다는 뜻은 아니었다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 CORS 관련 어노테이션은 변환 결과가 깔끔했지만, 실측에서는 일부 구현체만 테스트를 통과했다. 반면 &lt;code&gt;x-forwarded-prefix&lt;/code&gt;처럼 헤더를 추가하는 어노테이션은 변환 시 경고 없이 사라졌다. 그래서 이번 비교에서는 변환 여부와 실제 동작 여부를 분리했다.
        &lt;/p&gt;

        &lt;h3&gt;3. TLS 연결과 인증서 검증은 다르다&lt;/h3&gt;
        &lt;p&gt;
          backend-tls 테스트를 처음 구성했을 때는 TLS 연결이 맺어지고 응답이 오는지만 확인하고 있었다. 하지만 이것만으로는 잘못된 인증서를 거부하는지 알 수 없다.
        &lt;/p&gt;

        &lt;p&gt;
          이후 의도적으로 잘못된 CA 인증서를 적용해 다시 테스트했고, 통과한 구현체들이 인증서 검증을 제대로 강제하는지 확인했다. 이 단계를 생략했다면 실제로는 보안 검증이 되지 않는데도 보안 기능이 통과했다는 잘못된 결론을 낼 수 있었다.
        &lt;/p&gt;

        &lt;h3&gt;4. 표준 외부 인증 필터는 아직 운영 전환 기준으로 보기 어렵다&lt;/h3&gt;
        &lt;p&gt;
          ingress-nginx에서 &lt;code&gt;auth-url&lt;/code&gt;을 사용하던 환경이라면 외부 인증 이전 가능성이 가장 궁금할 것이다. Gateway API에는 외부 인증을 위한 표준 필터가 실험 단계로 포함돼 있지만, 이번 측정에서는 이 표준 필터를 완전하게 강제하는 구현체를 확인하지 못했다.
        &lt;/p&gt;

        &lt;p&gt;
          일부 구현체는 필터를 거부하거나 오류를 냈고, 일부 구현체는 표준 필터 자체를 구현하지 않아 인증 절차 없이 트래픽이 그대로 통과했다. 실제 사용 시 외부 인증은 아직 표준 필터만 믿기보다 각 구현체의 고유 기능을 함께 검토해야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;7개 구현체별 재측정 결과&lt;/h2&gt;

        &lt;div class=&quot;table-scroll&quot;&gt;
          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구현체&lt;/th&gt;
                &lt;th&gt;한 줄 평가&lt;/th&gt;
                &lt;th&gt;Core&lt;/th&gt;
                &lt;th&gt;Extended&lt;/th&gt;
                &lt;th&gt;특징&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;NGINX Gateway Fabric&lt;/td&gt;
                &lt;td&gt;검증된 NGINX의 안정성을 Gateway API로 계승&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;11/13&lt;/td&gt;
                &lt;td&gt;ingress-nginx에서 가장 매끄러운 이행 경로&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Envoy Gateway&lt;/td&gt;
                &lt;td&gt;가장 넓은 기능 폭을 가진 CNCF 차세대 표준 후보&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;13/13&lt;/td&gt;
                &lt;td&gt;확장 기능과 관측성에서 강점&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Istio Gateway&lt;/td&gt;
                &lt;td&gt;서비스 메시와 게이트웨이를 통합&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;13/13&lt;/td&gt;
                &lt;td&gt;자동 mTLS와 무중단 복구가 강점&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Cilium Gateway&lt;/td&gt;
                &lt;td&gt;eBPF 데이터플레인과 CNI 통합&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;12/13&lt;/td&gt;
                &lt;td&gt;Cilium CNI 사용 환경에 적합&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Kong Gateway&lt;/td&gt;
                &lt;td&gt;엔터프라이즈 API 게이트웨이와 플러그인 생태계&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;6/13&lt;/td&gt;
                &lt;td&gt;Core는 통과했지만 Extended 폭과 복구 시간은 확인 필요&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Traefik Gateway&lt;/td&gt;
                &lt;td&gt;자동 서비스 디스커버리와 간편한 운영&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;10/13&lt;/td&gt;
                &lt;td&gt;포트 구성 교정 후 Core 통과&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;kgateway&lt;/td&gt;
                &lt;td&gt;Envoy 기반 게이트웨이, arm64 환경까지 합류&lt;/td&gt;
                &lt;td&gt;7/7&lt;/td&gt;
                &lt;td&gt;12/13&lt;/td&gt;
                &lt;td&gt;무중단 복구와 성능 측면에서 주목할 만함&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/div&gt;

        &lt;h3&gt;NGINX Gateway Fabric&lt;/h3&gt;
        &lt;p&gt;
          NGINX Gateway Fabric의 가장 큰 장점은 결국 NGINX라는 점이다. rate-limit, body-size, basic-auth를 네이티브로 지원하고 문서와 커뮤니티도 풍부하다. ingress-nginx에서 Gateway API로 이동하는 팀에게 부담이 가장 적은 선택지다. 다만 Extended는 11개로 최상위권은 아니며, active health check는 상용 버전인 Plus 전용이라는 점을 고려해야 한다.
        &lt;/p&gt;

        &lt;h3&gt;Envoy Gateway&lt;/h3&gt;
        &lt;p&gt;
          Envoy Gateway는 Extended 13개를 모두 지원하며 기능 폭에서 가장 앞선다. 실험 채널 기능도 빠르게 따라가고, rate-limit를 네이티브로 지원하며 관측성도 뛰어나다. 다만 Envoy 자체의 복잡성으로 인한 학습 곡선과 상대적으로 짧은 운영 역사는 감안해야 한다.
        &lt;/p&gt;

        &lt;h3&gt;Istio Gateway&lt;/h3&gt;
        &lt;p&gt;
          Istio Gateway는 서비스 메시와의 통합이 가장 큰 장점이다. Extended 13개를 모두 지원하고 mTLS가 자동 적용되며, 파드 교체 시에도 무중단으로 동작했다. 다만 전체 서비스 메시 스택을 함께 고려해야 하므로 단순 게이트웨이 도입보다 운영 복잡도가 높을 수 있다.
        &lt;/p&gt;

        &lt;h3&gt;Cilium Gateway&lt;/h3&gt;
        &lt;p&gt;
          Cilium Gateway는 eBPF 기반 데이터플레인을 활용하고 Cilium 네트워크 정책과 자연스럽게 연동된다. Core를 모두 통과했고 Extended도 12개를 지원했다. 다만 Cilium CNI가 필수이며, rate-limit와 body-size는 표준 경로에서 지원하지 않는다.
        &lt;/p&gt;

        &lt;h3&gt;Kong Gateway&lt;/h3&gt;
        &lt;p&gt;
          Kong Gateway는 엔터프라이즈 API 게이트웨이 시장에서 강력한 플러그인 생태계와 API 관리 기능을 갖춘 제품이다. 지난해와 달리 이번에는 Core 7개를 모두 통과했다. 다만 Extended는 6개로 가장 좁고, 복구 시간도 약 34초로 가장 느렸다. 설정을 일괄 적용하는 구조가 테스트 설계에 영향을 줄 수 있다는 점도 유의해야 한다.
        &lt;/p&gt;

        &lt;h3&gt;Traefik Gateway&lt;/h3&gt;
        &lt;p&gt;
          Traefik Gateway는 자동 서비스 디스커버리와 대시보드로 유명한 클라우드 네이티브 프록시다. 지난해에는 포트 구성 문제로 Core 테스트를 통과하지 못했지만, 이번에는 리스너 포트를 교정한 뒤 Core 7개를 모두 통과했다. 간편한 운영을 중시하는 팀에게 적합하다.
        &lt;/p&gt;

        &lt;h3&gt;kgateway&lt;/h3&gt;
        &lt;p&gt;
          kgateway는 Envoy 기반 게이트웨이로 Extended 12개와 무중단 복구 결과를 보여줬다. 지난해에는 arm64 지원 문제로 측정에서 제외됐지만, 이번에는 Apple Silicon 기반 환경에서도 측정 대상에 포함됐다. 다만 외부 인증 표준 필터와 커뮤니티 성숙도는 계속 확인해야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;그래서 어떤 구현체를 골라야 할까&lt;/h2&gt;

        &lt;p&gt;
          이번 재측정 결과, 7개 구현체 모두 Core는 통과했다. 이제 선택 기준은 단순한 합격 여부가 아니라 확장 기능의 폭, 데이터플레인 구조, 운영 경험, 커뮤니티, 기존 환경과의 궁합으로 옮겨간다.
        &lt;/p&gt;

        &lt;div class=&quot;table-scroll&quot;&gt;
          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;상황&lt;/th&gt;
                &lt;th&gt;우선 검토할 구현체&lt;/th&gt;
                &lt;th&gt;판단 이유&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;ingress-nginx에서 가장 부담 없이 이전&lt;/td&gt;
                &lt;td&gt;NGINX Gateway Fabric&lt;/td&gt;
                &lt;td&gt;기존 NGINX 운영 경험을 활용하기 쉽고 이행 경로가 자연스럽다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Gateway API 기능 폭 최우선&lt;/td&gt;
                &lt;td&gt;Envoy Gateway, Istio Gateway&lt;/td&gt;
                &lt;td&gt;Extended 13개를 모두 지원해 표준 기능 범위가 가장 넓다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;서비스 메시와 함께 운영&lt;/td&gt;
                &lt;td&gt;Istio Gateway&lt;/td&gt;
                &lt;td&gt;mTLS와 메시 기능을 게이트웨이와 통합할 수 있다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Cilium CNI를 이미 사용&lt;/td&gt;
                &lt;td&gt;Cilium Gateway&lt;/td&gt;
                &lt;td&gt;네트워크 정책과 eBPF 데이터플레인을 자연스럽게 활용할 수 있다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;API 관리와 플러그인 생태계 중요&lt;/td&gt;
                &lt;td&gt;Kong Gateway&lt;/td&gt;
                &lt;td&gt;엔터프라이즈 API 게이트웨이 기능이 강하다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;간편한 운영과 자동 디스커버리 중시&lt;/td&gt;
                &lt;td&gt;Traefik Gateway&lt;/td&gt;
                &lt;td&gt;운영 편의성과 대시보드 경험이 좋다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Envoy 기반 고성능 게이트웨이 검토&lt;/td&gt;
                &lt;td&gt;kgateway&lt;/td&gt;
                &lt;td&gt;무중단 복구와 Envoy 기반 구조가 강점이다.&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;ingress-nginx에서 옮길 때 가장 막히는 것들&lt;/h2&gt;

        &lt;p&gt;
          기능 지원 범위와 별개로, ingress-nginx에서 자주 쓰던 일부 기능은 Gateway API로 그대로 옮기기 어렵다. 마이그레이션을 검토한다면 먼저 현재 Ingress 설정에서 어떤 어노테이션을 사용 중인지 목록화해야 한다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;
            &lt;strong&gt;configuration-snippet, server-snippet은 대체 수단이 없다.&lt;/strong&gt;&lt;br&gt;
            이 기능은 raw NGINX 지시문을 직접 주입하는 방식이다. Gateway API는 이런 주입 경로를 제공하지 않는다. 헤더 수정이나 타임아웃처럼 흔한 기능은 표준 기능으로 옮겨갈 수 있지만, 임의 지시문 주입에 의존했다면 구조를 다시 설계해야 한다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;mTLS 클라이언트 인증은 Gateway API v1.4에 표준 필드가 없다.&lt;/strong&gt;&lt;br&gt;
            업그레이드된 스펙을 기다리거나 구현체 고유 기능을 활용해야 한다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;세션 어피니티는 구현체별 차이가 크다.&lt;/strong&gt;&lt;br&gt;
            쿠키 기반 Sticky 설정은 스펙과 구현 방식의 차이를 함께 확인해야 하며, 변환 도구가 자동으로 처리하지 못할 수 있다.
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;장애 복구는 얼마나 빨랐나&lt;/h2&gt;

        &lt;p&gt;
          이번 실험에서는 conformance 테스트가 다루지 않는 운영 지표도 함께 측정했다. 기본 설치 환경에서 트래픽을 받는 프록시 파드를 강제로 삭제한 뒤, 2초 간격으로 요청을 보내며 트래픽이 돌아올 때까지 걸린 시간을 확인했다.
        &lt;/p&gt;

        &lt;div class=&quot;table-scroll&quot;&gt;
          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구현체&lt;/th&gt;
                &lt;th&gt;복구 결과&lt;/th&gt;
                &lt;th&gt;해석&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;Istio Gateway&lt;/td&gt;
                &lt;td&gt;무중단&lt;/td&gt;
                &lt;td&gt;파드 교대 과정이 매끄럽게 처리됐다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;kgateway&lt;/td&gt;
                &lt;td&gt;무중단&lt;/td&gt;
                &lt;td&gt;실패 요청 없이 새 파드로 전환됐다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;NGINX Gateway Fabric&lt;/td&gt;
                &lt;td&gt;약 13초&lt;/td&gt;
                &lt;td&gt;단일 파드 환경에서는 짧은 공백이 발생했다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Envoy Gateway&lt;/td&gt;
                &lt;td&gt;약 13초&lt;/td&gt;
                &lt;td&gt;기본 구성 기준 복구 시간이 관측됐다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Traefik Gateway&lt;/td&gt;
                &lt;td&gt;약 13초&lt;/td&gt;
                &lt;td&gt;파드 교체 중 일부 공백이 있었다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Kong Gateway&lt;/td&gt;
                &lt;td&gt;약 34초&lt;/td&gt;
                &lt;td&gt;이번 측정에서 가장 긴 복구 시간이 나왔다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;Cilium Gateway&lt;/td&gt;
                &lt;td&gt;측정 제외&lt;/td&gt;
                &lt;td&gt;공유 eBPF 데이터플레인 특성상 동일 조건 비교에서 제외했다.&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/div&gt;

        &lt;p&gt;
          파드를 삭제했는데도 무중단이 가능했던 이유는 쿠버네티스의 종료 유예 시간 때문이다. 파드는 삭제 명령을 받자마자 사라지지 않고 일정 시간 살아 있으며, 그 사이 새 파드가 올라온다. 기존 파드가 남은 트래픽을 처리하고 새 파드와 자연스럽게 교대하면 외부에서는 끊김이 보이지 않는다.
        &lt;/p&gt;

        &lt;p&gt;
          물론 실제 프로덕션에서는 replica를 여러 개 두는 것이 일반적이다. 하지만 단일 노드 엣지 환경처럼 replica를 늘리기 어려운 곳에서는 이 복구 공백이 그대로 사용자에게 노출될 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;실제로 도입할 때 확인해야 할 것들&lt;/h2&gt;

        &lt;p&gt;
          수치는 어디까지나 수치다. 실제 이전에서는 현재 사용 중인 기능, 운영 환경, 지원 버전, 장애 대응 방식까지 함께 봐야 한다. 관리자 입장에서 보면 다음 세 가지를 먼저 확인하는 것이 안전하다.
        &lt;/p&gt;

        &lt;ol class=&quot;check-list&quot;&gt;
          &lt;li&gt;
            &lt;strong&gt;현재 사용하는 어노테이션 목록을 만든다.&lt;/strong&gt;&lt;br&gt;
            configuration-snippet, server-snippet, mTLS 클라이언트 인증, 세션 어피니티를 사용 중이라면 표준 기능만으로는 바로 옮기기 어렵다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;변환 도구의 출력은 검증까지 완료한다.&lt;/strong&gt;&lt;br&gt;
            ingress2gateway로 1차 변환을 수행하되, 변환 성공을 실제 동작 성공으로 보지 말고 항목별로 호출 테스트를 해야 한다.
          &lt;/li&gt;
          &lt;li&gt;
            &lt;strong&gt;Gateway API 버전과 컨트롤러 버전을 함께 고정한다.&lt;/strong&gt;&lt;br&gt;
            컨트롤러가 지원하는 범위보다 먼저 CRD를 올리면 새로운 리소스가 정상적으로 동작하지 않을 수 있다. 릴리스 노트에서 지원 Gateway API 버전을 확인한 뒤 업그레이드해야 한다.
          &lt;/li&gt;
        &lt;/ol&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          &lt;strong&gt;버전 해석 주의&lt;/strong&gt;&lt;br&gt;
          이번 결과는 2026년 6월, Gateway API v1.4 기준의 스냅샷이다.&lt;br&gt;
          측정 이후 상위 버전에서 일부 미지원 기능이 해소됐을 수 있다.&lt;br&gt;
          따라서 결과를 볼 때는 반드시 측정 버전과 현재 사용하려는 버전을 함께 비교해야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section class=&quot;conclusion&quot;&gt;
        &lt;h2&gt;마무리&lt;/h2&gt;

        &lt;p&gt;
          이번 재측정의 결론은 특정 구현체 하나를 무조건 추천하는 데 있지 않다. 더 중요한 결론은 Gateway API 선택에서 Core 통과 여부만으로는 충분하지 않다는 점이다. 7개 구현체 모두 Core를 통과했지만 Extended 기능 폭, 외부 인증 처리, 복구 시간, 설치 방식, 데이터플레인 구조는 크게 달랐다.
        &lt;/p&gt;

        &lt;p&gt;
          또한 지난해 Kong과 Traefik의 결과가 바뀐 것처럼, 측정 결과는 제품만이 아니라 표준 버전, 설치 방식, 테스트 설계에 따라 달라질 수 있다. Gateway API로 이전하려는 팀이라면 먼저 현재 ingress-nginx 설정을 목록화하고, 변환 결과를 실제 트래픽으로 검증한 뒤, 도입 후보의 Gateway API 지원 버전을 고정해 비교하는 과정이 필요하다.
        &lt;/p&gt;

        &lt;p&gt;
          Ingress NGINX 이후의 선택지는 하나가 아니다. 이제 중요한 것은 어떤 구현체가 가장 유명한지가 아니라, 우리 환경에서 필요한 기능을 표준으로 제공하는지, 표준 밖 기능은 어떻게 보완하는지, 장애 상황에서 얼마나 예측 가능하게 동작하는지를 확인하는 일이다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/kubernetes-gateway-api-v14-poc#blogposting&quot;,
        &quot;headline&quot;: &quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&quot;,
        &quot;description&quot;: &quot;Ingress NGINX 지원 종료 이후 Gateway API v1.4 기준으로 7개 주요 쿠버네티스 게이트웨이를 다시 검증하며 달라진 결과와 선택 기준을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/kubernetes-gateway-api-v14-poc&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-og-image.jpg&quot;,
        &quot;keywords&quot;: [
          &quot;쿠버네티스&quot;,
          &quot;Gateway API&quot;,
          &quot;Ingress NGINX&quot;,
          &quot;ingress-nginx&quot;,
          &quot;Kubernetes&quot;,
          &quot;IngressNightmare&quot;,
          &quot;Kong Gateway&quot;,
          &quot;Traefik Gateway&quot;,
          &quot;Envoy Gateway&quot;,
          &quot;Istio Gateway&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Gateway API&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Kubernetes&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Ingress NGINX&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/kubernetes-gateway-api-v14-poc#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;쿠버네티스&quot;,
            &quot;item&quot;: &quot;https://example.com/category/kubernetes&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;쿠버네티스 Gateway API v1.4 재측정으로 본 7개 게이트웨이 선택 기준&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;

  &lt;!-- 관리자 입력용 태그 10개: 쿠버네티스, Gateway API, Ingress NGINX, ingress-nginx, Kubernetes, IngressNightmare, Kong Gateway, Traefik Gateway, Envoy Gateway, Istio Gateway --&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>Envoy Gateway</category>
      <category>Gateway API</category>
      <category>Ingress NGINX</category>
      <category>ingress-nginx</category>
      <category>IngressNightmare</category>
      <category>istio gateway</category>
      <category>Kong Gateway</category>
      <category>kubernetes</category>
      <category>Traefik Gateway</category>
      <category>쿠버네티스</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/587</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-Gateway-API-v14-%EC%9E%AC%EC%B8%A1%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%B3%B8-7%EA%B0%9C-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80#entry587comment</comments>
      <pubDate>Tue, 7 Jul 2026 21:48:23 +0900</pubDate>
    </item>
    <item>
      <title>앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대</title>
      <link>https://togethergrow.tistory.com/entry/%EC%95%A4%ED%8A%B8%EB%A1%9C%ED%94%BD-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%B5%9C%EC%83%81%EC%9C%84-%EB%AA%A8%EB%8D%B8-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%9E%AC%EA%B0%9C%EC%99%80-%EC%8B%A0%EC%9B%90%EC%9D%B8%EC%A6%9D-%ED%99%95%EB%8C%80</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;미국 수출 규제 해제로 앤트로픽이 클로드 최상위 모델 서비스 복원에 나서면서 고성능 AI 기능 이용자를 대상으로 한 신원확인 절차도 함께 확대되고 있다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;앤트로픽, 클로드, 클로드 페이블 5, 클로드 미토스 5, 미국 수출 규제, 신원확인, KYC, 퍼소나 아이덴티티, AI 규제, AI 보안&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;앤트로픽이 미국 수출 통제 해제 이후 클로드 페이블 5 서비스 복원에 나서고, 일부 고성능 AI 기능에 신원확인 절차를 확대한다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/anthropic-claude-fable-5-kyc&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;수출 규제 해제와 KYC 확대가 앤트로픽 클로드 서비스 이용 환경에 어떤 변화를 가져오는지 정리했다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
      max-width: 860px;
      margin: 0 auto;
      padding: 1rem;
      box-sizing: border-box;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.45;
      margin: 2.4rem 0 0.7rem;
      letter-spacing: -0.02em;
    }

    .post-content .section-space {
      height: 0.5rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .summary-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1rem 1.1rem;
      margin: 1.5rem 0 2rem;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .summary-box strong {
      display: block;
      margin-bottom: 0.4rem;
    }

    .post-content .info-table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0 1.8rem;
      font-size: 0.96rem;
    }

    .post-content .info-table th,
    .post-content .info-table td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.8rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content .info-table th {
      width: 28%;
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content .callout {
      border-left: 4px solid rgba(120, 120, 120, 0.7);
      padding: 0.9rem 1rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
      border-radius: 0 12px 12px 0;
    }

    .post-content code {
      padding: 0.15rem 0.35rem;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
      font-size: 0.92em;
    }

    .post-content ul {
      margin: 0.3rem 0 1.2rem 1.2rem;
      padding: 0;
    }

    .post-content li {
      margin-bottom: 0.45rem;
    }

    @media (max-width: 640px) {
      .post-content {
        padding: 0.8rem;
      }

      .post-content h1 {
        font-size: 1.65rem;
      }

      .post-content h2 {
        font-size: 1.25rem;
      }

      .post-content .info-table th,
      .post-content .info-table td {
        display: block;
        width: 100%;
        box-sizing: border-box;
      }
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        앤트로픽이 미국 정부의 수출 통제 해제에 따라 자사의 최상위 AI 모델인 클로드 페이블 5 서비스 복원에 나선다. 동시에 일부 고성능 AI 기능 이용자를 대상으로 신원확인 절차를 확대하면서, AI 서비스 이용 환경이 접근성 중심에서 신뢰성과 책임성 중심으로 이동하는 흐름이 뚜렷해지고 있다.
      &lt;/p&gt;

      &lt;div class=&quot;summary-box&quot;&gt;
        &lt;strong&gt;핵심 요약&lt;/strong&gt;
        앤트로픽은 미국 상무부의 수출 통제 해제 통보 이후 클로드 페이블 5 접근 권한을 순차적으로 복원할 예정이다.&lt;br&gt;
        클로드 미토스 5는 당분간 일부 기업 고객에게만 제공되며 일반 공개 일정은 확정되지 않았다.&lt;br&gt;
        일부 고성능 클로드 기능에는 신원확인 절차가 확대 적용된다.&lt;br&gt;
        신원확인은 AI 악용 방지, 이용 정책 집행, 법률·안전 규정 준수를 위한 조치로 설명되고 있다.
      &lt;/div&gt;

      &lt;section&gt;
        &lt;h2&gt;클로드 페이블 5 서비스 복원&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 미국 정부의 수출 통제 해제에 따라 클로드 페이블 5 서비스 복원에 나선다. 회사는 미국 상무부로부터 클로드 페이블 5와 클로드 미토스 5에 적용됐던 수출 통제가 해제됐다는 통보를 받았다고 밝혔다.
        &lt;/p&gt;

        &lt;p&gt;
          이에 따라 앤트로픽은 수요일부터 클로드 페이블 5 접근 권한을 순차적으로 복원할 예정이다. 그동안 최상위 모델 이용 제한으로 영향을 받았던 이용자와 기업 고객에게는 서비스 정상화가 중요한 변화가 될 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          다만 클로드 미토스 5는 당분간 일부 기업 고객에게만 제공된다. 일반 이용자 대상 공개 일정은 아직 발표되지 않았다. 클로드 페이블 5가 미국 외 국가 이용자에게도 동시에 제공될지 역시 현재로서는 확정되지 않았고, 국가별 서비스 일정은 추후 공개될 가능성이 크다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;수출 규제 해제가 의미하는 변화&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 조치는 고성능 AI 모델 제공을 둘러싼 미국 정부의 통제와 기업 서비스 운영이 밀접하게 연결돼 있음을 보여준다. AI 모델은 단순한 소프트웨어 상품을 넘어 국가 안보, 산업 경쟁력, 기술 이전 관리와 관련된 전략 자산으로 평가되고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          앤트로픽 입장에서는 수출 통제 해제가 최상위 모델 공급 확대의 계기가 될 수 있다. 하지만 서비스가 완전히 이전과 같은 방식으로 돌아간다고 보기는 어렵다. 수출 규제 완화와 동시에 신원확인 절차가 확대되고 있기 때문이다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          운영 환경에서는 고성능 AI 모델의 접근 권한이 단순 구독 여부만으로 결정되기 어렵다.&lt;br&gt;
          국가별 규제, 기업 고객 유형, 기능 위험도, 이용자 신뢰도 같은 요소가 함께 반영될 가능성이 커지고 있다.&lt;br&gt;
          앞으로 최상위 AI 모델 이용은 성능뿐 아니라 인증과 책임 체계를 함께 요구하는 방향으로 바뀔 수 있다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;신원확인 절차도 함께 확대&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 최근 고객지원 문서를 통해 일부 서비스에서 이용자 신원확인 절차를 도입하고 있다고 공개했다. 회사는 특정 클로드 기능을 사용할 때, 플랫폼 무결성 점검 과정에서, 또는 법률·안전 규정 준수가 필요한 경우 신원확인을 요구할 수 있다고 설명했다.
        &lt;/p&gt;

        &lt;p&gt;
          신원확인은 글로벌 디지털 신원 인증 기업 퍼소나 아이덴티티가 담당한다. 이용자는 여권, 운전면허증, 국가 신분증 등 정부가 발급한 사진이 포함된 신분증을 제출해야 한다.
        &lt;/p&gt;

        &lt;p&gt;
          경우에 따라 스마트폰이나 PC 카메라를 이용한 실시간 얼굴 촬영 절차도 진행될 수 있다. 앤트로픽은 인증 절차가 일반적으로 5분 이내에 완료된다고 안내했다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;적용 대상&lt;/th&gt;
              &lt;td&gt;일부 고성능 클로드 기능, 플랫폼 무결성 점검 대상, 법률·안전 규정 준수가 필요한 이용자&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;인증 담당&lt;/th&gt;
              &lt;td&gt;퍼소나 아이덴티티&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;허용 신분증&lt;/th&gt;
              &lt;td&gt;여권, 운전면허증, 국가 신분증 등 정부 발급 사진 신분증&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;추가 절차&lt;/th&gt;
              &lt;td&gt;스마트폰 또는 PC 카메라를 이용한 실시간 얼굴 촬영이 요구될 수 있음&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;제외 대상&lt;/th&gt;
              &lt;td&gt;신분증 사본, 스크린샷, 스캔 문서, 모바일 신분증, 학생증, 사원증, 은행카드, 임시 종이 신분증&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;앤트로픽이 밝힌 도입 목적&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 신원확인 도입 목적을 AI 악용 방지와 법적 의무 준수라고 설명했다. 강력한 기술을 책임감 있게 제공하기 위해서는 누가 서비스를 사용하는지 확인하는 과정이 필요하다는 입장이다.
        &lt;/p&gt;

        &lt;p&gt;
          회사는 신원확인이 서비스 남용을 막고 이용 정책을 집행하며 각국 규제를 준수하기 위한 절차라고 밝혔다. 이는 고성능 AI 모델이 악성코드 제작, 피싱 자동화, 신원 위조, 불법 콘텐츠 생성 등에 악용될 가능성이 커지는 상황과 맞닿아 있다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 최상위 AI 모델은 일반 모델보다 추론 능력과 자동화 능력이 강한 만큼, 접근 권한을 더 세밀하게 관리해야 한다는 요구가 커지고 있다. 앤트로픽의 클로드 신원확인 확대도 이런 흐름 안에서 이해할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;개인정보 처리는 어떻게 설명됐나&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 신분증과 얼굴 인증 데이터가 퍼소나 시스템에서 관리되며 자사 서버에 직접 저장되지 않는다고 설명했다. 다만 이용자가 인증 결과에 이의를 제기하는 경우 등 필요한 상황에서는 퍼소나를 통해 인증 기록을 확인할 수 있다고 밝혔다.
        &lt;/p&gt;

        &lt;p&gt;
          회사는 신원확인 정보를 이용자의 신원을 확인하기 위한 목적 외에는 사용하지 않는다고 강조했다. 또한 해당 정보를 AI 모델 학습에도 활용하지 않는다고 밝혔다.
        &lt;/p&gt;

        &lt;p&gt;
          신원확인 확대는 보안과 규제 대응 측면에서는 필요한 조치로 볼 수 있지만, 이용자 입장에서는 개인정보 제공 범위와 보관 방식, 제3자 인증기관의 관리 체계가 중요한 판단 기준이 된다. 실제 사용 시에는 어떤 기능을 이용할 때 신원확인이 필요한지, 인증 데이터가 어디에서 어떻게 처리되는지를 확인할 필요가 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AI 서비스도 실명 기반 신뢰로 이동&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          최근 글로벌 AI 기업들은 생성형 AI 성능이 빠르게 향상되면서 이용자 검증과 접근 권한 관리를 강화하고 있다. 초기 AI 서비스가 빠른 가입과 폭넓은 접근성을 앞세웠다면, 이제는 고성능 기능일수록 신뢰 기반 운영 체계가 중요해지고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          앤트로픽 역시 클로드 페이블 5 같은 최상위 모델의 접근 복원과 함께 신원확인 절차를 확대하고 있다. 이는 AI 서비스 운영 기준이 성능 경쟁만이 아니라 남용 방지, 규제 준수, 책임 있는 이용으로 넓어지고 있음을 보여준다.
        &lt;/p&gt;

        &lt;p&gt;
          업계에서는 앞으로 고성능 AI 모델일수록 이용자 인증, 계정 신뢰도, 지역별 규제 준수 여부가 핵심 운영 기준으로 자리 잡을 가능성이 높다고 본다. 단순히 모델을 사용할 수 있는지가 아니라, 어떤 이용자가 어떤 조건에서 사용할 수 있는지가 더 중요해지는 것이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;성능 경쟁 이후의 핵심은 책임성&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          미국 정부의 수출 통제 완화로 앤트로픽의 최상위 AI 모델 공급은 다시 확대되는 방향으로 움직이고 있다. 그러나 동시에 신원확인 절차가 강화되면서, AI 산업은 더 강한 성능을 제공하는 것만으로는 충분하지 않은 단계에 들어서고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          클로드 페이블 5 서비스 재개는 이용자에게 더 높은 성능의 AI 기능을 다시 제공한다는 의미가 있다. 반면 KYC 확대는 고성능 AI 이용에 더 명확한 책임과 검증 절차가 따라붙는다는 신호다.
        &lt;/p&gt;

        &lt;p&gt;
          앞으로 AI 기업들은 모델 성능, 서비스 접근성, 개인정보 보호, 규제 대응 사이에서 균형을 찾아야 한다. 앤트로픽의 이번 조치는 최상위 AI 모델 시장이 성능 경쟁을 넘어 신뢰성과 책임성을 함께 요구받는 방향으로 이동하고 있음을 보여준다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/anthropic-claude-fable-5-kyc#blogposting&quot;,
        &quot;headline&quot;: &quot;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&quot;,
        &quot;description&quot;: &quot;미국 수출 규제 해제로 앤트로픽이 클로드 최상위 모델 서비스 복원에 나서면서 고성능 AI 기능 이용자를 대상으로 한 신원확인 절차도 함께 확대되고 있다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/anthropic-claude-fable-5-kyc&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;keywords&quot;: [
          &quot;앤트로픽&quot;,
          &quot;클로드&quot;,
          &quot;클로드 페이블 5&quot;,
          &quot;클로드 미토스 5&quot;,
          &quot;미국 수출 규제&quot;,
          &quot;신원확인&quot;,
          &quot;KYC&quot;,
          &quot;퍼소나 아이덴티티&quot;,
          &quot;AI 규제&quot;,
          &quot;AI 보안&quot;
        ],
        &quot;articleSection&quot;: &quot;AI 보안&quot;,
        &quot;datePublished&quot;: &quot;2026-07-03&quot;,
        &quot;dateModified&quot;: &quot;2026-07-03&quot;
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/anthropic-claude-fable-5-kyc#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;AI 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/category/ai-security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;앤트로픽, 클로드 최상위 모델 서비스 재개와 신원인증 확대&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: 앤트로픽, 클로드, 클로드 페이블 5, 클로드 미토스 5, 미국 수출 규제, 신원확인, KYC, 퍼소나 아이덴티티, AI 규제, AI 보안 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI 규제</category>
      <category>AI 보안</category>
      <category>KYC</category>
      <category>미국 수출 규제</category>
      <category>신원확인</category>
      <category>앤트로픽</category>
      <category>클로드</category>
      <category>클로드 미토스 5</category>
      <category>클로드 페이블 5</category>
      <category>퍼소나 아이덴티티</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/586</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%95%A4%ED%8A%B8%EB%A1%9C%ED%94%BD-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%B5%9C%EC%83%81%EC%9C%84-%EB%AA%A8%EB%8D%B8-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%9E%AC%EA%B0%9C%EC%99%80-%EC%8B%A0%EC%9B%90%EC%9D%B8%EC%A6%9D-%ED%99%95%EB%8C%80#entry586comment</comments>
      <pubDate>Fri, 3 Jul 2026 14:13:39 +0900</pubDate>
    </item>
    <item>
      <title>앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제</title>
      <link>https://togethergrow.tistory.com/entry/%EC%95%A4%ED%8A%B8%EB%A1%9C%ED%94%BD-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%BD%94%EB%93%9C-%EC%88%A8%EC%9D%80-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%8B%9D%EB%B3%84-%EA%B8%B0%EB%8A%A5-%EC%82%AD%EC%A0%9C</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;앤트로픽이 클로드 코드에 적용했던 숨은 사용자 식별 기능을 삭제하면서 모델 도용 방어와 개발자 도구 투명성 논란이 다시 주목받고 있다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;앤트로픽, 클로드 코드, 사용자 식별, 디스틸레이션, 시스템 프롬프트, 스테가노그래피, API 게이트웨이, 프록시, 개발자 도구, AI 보안&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;클로드 코드에 숨겨졌던 사용자 식별 기능 삭제를 계기로 AI 모델 보호와 사용자 투명성의 균형이 쟁점으로 떠올랐다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/anthropic-claude-code-user-identification&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;앤트로픽의 클로드 코드 식별 기능 삭제와 디스틸레이션 방어 논란을 정리했다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
      max-width: 860px;
      margin: 0 auto;
      padding: 1rem;
      box-sizing: border-box;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.45;
      margin: 2.4rem 0 0.7rem;
      letter-spacing: -0.02em;
    }

    .post-content .section-space {
      height: 0.5rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .summary-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1rem 1.1rem;
      margin: 1.5rem 0 2rem;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .summary-box strong {
      display: block;
      margin-bottom: 0.4rem;
    }

    .post-content .info-table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0 1.8rem;
      font-size: 0.96rem;
    }

    .post-content .info-table th,
    .post-content .info-table td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.8rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content .info-table th {
      width: 28%;
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content .callout {
      border-left: 4px solid rgba(120, 120, 120, 0.7);
      padding: 0.9rem 1rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
      border-radius: 0 12px 12px 0;
    }

    .post-content code {
      padding: 0.15rem 0.35rem;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
      font-size: 0.92em;
    }

    .post-content ul {
      margin: 0.3rem 0 1.2rem 1.2rem;
      padding: 0;
    }

    .post-content li {
      margin-bottom: 0.45rem;
    }

    @media (max-width: 640px) {
      .post-content {
        padding: 0.8rem;
      }

      .post-content h1 {
        font-size: 1.65rem;
      }

      .post-content h2 {
        font-size: 1.25rem;
      }

      .post-content .info-table th,
      .post-content .info-table td {
        display: block;
        width: 100%;
        box-sizing: border-box;
      }
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        앤트로픽이 코딩 도구 클로드 코드에 넣었던 숨은 사용자 식별 기능을 삭제했다. 이 기능은 중국 인공지능 기업, 무단 계정 재판매업자, 비공식 API 게이트웨이 이용자를 탐지하기 위한 실험으로 운영됐지만, 시스템 프롬프트에 보이지 않는 표식을 삽입했다는 점에서 개발자 도구의 투명성 논란으로 이어졌다.
      &lt;/p&gt;

      &lt;div class=&quot;summary-box&quot;&gt;
        &lt;strong&gt;핵심 요약&lt;/strong&gt;
        앤트로픽은 클로드 코드에 적용했던 사용자 식별 기능을 2026년 7월 1일 공개 버전에서 제거했다.&lt;br&gt;
        해당 기능은 프록시, API 게이트웨이, 시스템 시간대, 특정 도메인 접속 여부를 확인하는 방식으로 작동했다.&lt;br&gt;
        탐지 결과는 일반 로그가 아니라 시스템 프롬프트 내부의 보이지 않는 표식으로 반영됐다.&lt;br&gt;
        목적은 디스틸레이션 방어였지만, 사용자 고지와 투명성 부족이 핵심 쟁점으로 떠올랐다.
      &lt;/div&gt;

      &lt;section&gt;
        &lt;h2&gt;무엇이 삭제됐나&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 클로드 코드에 포함됐던 사용자 식별 기능을 삭제했다. 클로드 코드는 개발자가 소스코드를 분석하고 파일을 수정하며 명령어 실행까지 연계할 수 있는 코딩 도구다. 일반 챗봇보다 사용자의 개발 환경에 더 깊게 접근할 수 있기 때문에, 어떤 정보를 확인하고 전송하는지가 특히 민감한 영역에 속한다.
        &lt;/p&gt;

        &lt;p&gt;
          해당 기능은 2026년 3월부터 실험 형태로 적용됐고, 2026년 6월 30일 클로드 코드 개발팀 엔지니어 타리크 시히파르가 관련 내용을 설명했다. 앤트로픽은 무단 계정 재판매와 클로드 답변 대량 수집을 막기 위한 목적이었다고 밝혔다. 이후 더 강력한 대응책을 마련했다며 기존 코드를 제거했고, 삭제 내용은 2026년 7월 1일 공개된 클로드 코드 버전에 반영됐다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;식별 기능은 어떻게 작동했나&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          문제가 된 기능은 사용자가 앤트로픽 공식 서버가 아닌 프록시나 API 게이트웨이를 통해 클로드 코드에 접속할 때 작동했다. 클로드 코드는 사용자의 시스템 시간대와 접속하려는 서버 주소를 확인했다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 대상&lt;/th&gt;
              &lt;td&gt;시스템 시간대, 접속 서버 주소, 프록시 또는 API 게이트웨이 사용 여부&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;탐지 조건&lt;/th&gt;
              &lt;td&gt;중국 지역 시간대 설정, 중국 AI 기업 또는 계정 리셀러 관련 도메인과의 일치&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;표시 방식&lt;/th&gt;
              &lt;td&gt;일반 로그가 아니라 시스템 프롬프트 안의 보이지 않는 표식으로 반영&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;논란 지점&lt;/th&gt;
              &lt;td&gt;사용자에게 명확히 알리지 않은 상태에서 접속 환경을 확인하고 은닉 신호를 삽입했다는 점&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          시간대가 중국 지역으로 설정됐거나 접속 주소가 중국 AI 기업, 계정 리셀러, 비공식 게이트웨이 도메인 목록과 일치하면 클로드 코드는 이를 별도로 표시했다. 다만 이 정보는 일반적인 로그 항목처럼 전송된 것이 아니라, 모델에 전달되는 시스템 프롬프트 내부에 숨겨진 형태로 반영됐다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;시스템 프롬프트에 숨겨진 표식&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽의 클로드 코드 식별 기능이 논란을 키운 이유는 탐지 결과를 드러나는 데이터 필드가 아니라 시스템 프롬프트의 미세한 차이로 표현했다는 점이다. 예를 들어 날짜를 표시하는 문장에서 하이픈을 슬래시로 바꾸거나, 화면상으로는 거의 구분하기 어려운 유니코드 문자를 삽입하는 방식이 사용됐다.
        &lt;/p&gt;

        &lt;p&gt;
          사람의 눈에는 평범한 문장처럼 보이지만, 컴퓨터는 서로 다른 문자와 형식을 구분할 수 있다. 이처럼 일반 데이터 안에 비밀 정보를 숨기는 방식을 스테가노그래피라고 부른다. 이번 클로드 코드 사례에서는 이 방식이 사용자 접속 환경을 구분하는 신호로 활용됐다는 점이 핵심이다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          실무 기준으로 보면 보안 탐지는 필요할 수 있다.&lt;br&gt;
          그러나 탐지 목적, 수집 정보, 처리 방식이 사용자에게 명확히 설명되지 않으면 개발자 도구에 대한 신뢰가 흔들릴 수 있다.&lt;br&gt;
          특히 클로드 코드처럼 높은 권한을 가질 수 있는 도구에서는 투명성이 보안만큼 중요하다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;중국 AI 기업과 리셀러 탐지가 목적&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          공개된 코드에는 딥시크, 문샷AI, 미니맥스, 즈푸AI 등 중국 AI 기업과 관련된 문자열이 포함된 것으로 알려졌다. 바이두, 알리바바, 바이트댄스 등 중국 기업의 도메인도 탐지 목록에 들어 있었다.
        &lt;/p&gt;

        &lt;p&gt;
          이 도메인 목록은 소스코드에서 바로 확인하기 어렵도록 XOR 연산과 베이스64 방식으로 숨겨졌다. 앤트로픽 입장에서는 탐지 회피를 막기 위한 조치로 볼 수 있지만, 외부 개발자 입장에서는 도구가 어떤 조건에서 어떤 신호를 생성하는지 확인하기 어려운 구조였다는 점이 문제로 지적됐다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 정상적으로 자체 프록시나 내부 API 게이트웨이를 사용하는 기업까지 탐지 대상에 포함될 수 있다는 우려도 제기됐다. 많은 기업은 보안 관리, 비용 통제, 접속 기록 보관을 위해 AI 요청을 내부 게이트웨이로 보내기 때문이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;디스틸레이션 방어와 모델 도용 문제&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 기능의 배경에는 AI 모델 디스틸레이션 방어가 있다. 디스틸레이션은 성능이 높은 AI 모델에 반복적으로 질문하고 답변을 수집해 다른 모델을 학습시키는 기술이다. 자체 모델을 가볍게 만들거나 성능을 개선하기 위한 정상적인 연구·개발 방식으로도 쓰인다.
        &lt;/p&gt;

        &lt;p&gt;
          문제는 경쟁사의 상용 서비스를 무단으로 이용해 답변을 대량 수집하는 경우다. 이런 방식은 모델의 추론 능력, 코딩 능력, 도구 사용 패턴을 우회적으로 복제하는 모델 도용 논란으로 이어질 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          앤트로픽은 2026년 2월 딥시크, 문샷AI, 미니맥스가 약 2만4000개의 허위 계정을 이용해 클로드와 1600만건이 넘는 대화를 생성했다고 주장했다. 이들이 클로드의 추론, 코딩, 도구 사용 능력을 수집해 자체 모델 개발에 활용하려 했다는 설명이다.
        &lt;/p&gt;

        &lt;p&gt;
          클로드 코드에서는 &lt;code&gt;ANTI_DISTILLATION_CC&lt;/code&gt;라는 기능도 발견됐다. 이 기능은 API 요청에 가짜 도구 정보를 섞어 경쟁 모델이 해당 데이터를 학습할 경우 학습 품질을 떨어뜨리는 방식으로 설계된 것으로 알려졌다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;투명성 논란이 남긴 쟁점&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          앤트로픽은 해당 기능으로 몇 명의 사용자를 식별했는지, 수집한 정보를 어떻게 저장하거나 활용했는지는 공개하지 않았다. 서비스 약관이나 개인정보 관련 문서에 이 기능을 명확히 알렸는지에 대해서도 구체적인 설명을 내놓지 않았다. 새로 적용한 더 강력한 대응책의 내용 역시 공개하지 않았다.
        &lt;/p&gt;

        &lt;p&gt;
          모델 도용 방어는 AI 기업에 중요한 보안 과제다. 그러나 보안 기능이라는 이유만으로 사용자에게 알리지 않고 접속 환경을 확인하거나 숨겨진 신호를 전송하면 신뢰 문제가 발생한다. 특히 개발자 도구는 사용자의 코드, 파일, 명령 실행 환경과 맞닿아 있기 때문에 일반 서비스보다 더 높은 투명성이 요구된다.
        &lt;/p&gt;

        &lt;p&gt;
          이번 앤트로픽 클로드 코드 사례는 AI 모델 보호와 사용자 투명성 사이의 균형을 다시 묻는 사건이다. 보안 목적의 탐지라 하더라도 사용자에게 어떤 정보가 확인되는지, 어떤 기준으로 식별되는지, 해당 정보가 어떻게 처리되는지 명확히 공개하는 절차가 필요하다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;개발자 도구가 지켜야 할 기준&lt;/h2&gt;
        &lt;div class=&quot;section-space&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          클로드 코드 논란은 단순한 기능 삭제로 끝나기 어렵다. AI 개발자 도구가 더 강력해질수록 사용자의 개발 환경을 이해하고 조작할 수 있는 권한도 커진다. 그만큼 보안 기능을 설계할 때도 은닉보다 고지, 추적보다 설명, 차단보다 검증 가능한 절차가 중요해진다.
        &lt;/p&gt;

        &lt;p&gt;
          앤트로픽이 클로드 코드의 사용자 식별 기능을 삭제한 것은 논란을 줄이기 위한 조치로 볼 수 있다. 그러나 앞으로의 핵심은 어떤 새로운 대응책을 적용했는지, 그 대응책이 사용자 권리와 기업 보안 요구를 어떻게 함께 충족하는지에 있다.
        &lt;/p&gt;

        &lt;p&gt;
          AI 모델 보호는 필요하지만, 개발자가 신뢰하는 도구라면 보안 장치 역시 신뢰 가능한 방식으로 작동해야 한다. 이번 사건은 AI 보안 기술이 기술적 정교함뿐 아니라 설명 가능성과 투명성을 함께 갖춰야 한다는 점을 보여준다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/anthropic-claude-code-user-identification#blogposting&quot;,
        &quot;headline&quot;: &quot;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&quot;,
        &quot;description&quot;: &quot;앤트로픽이 클로드 코드에 적용했던 숨은 사용자 식별 기능을 삭제하면서 모델 도용 방어와 개발자 도구 투명성 논란이 다시 주목받고 있다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/anthropic-claude-code-user-identification&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;keywords&quot;: [
          &quot;앤트로픽&quot;,
          &quot;클로드 코드&quot;,
          &quot;사용자 식별&quot;,
          &quot;디스틸레이션&quot;,
          &quot;시스템 프롬프트&quot;,
          &quot;스테가노그래피&quot;,
          &quot;API 게이트웨이&quot;,
          &quot;프록시&quot;,
          &quot;개발자 도구&quot;,
          &quot;AI 보안&quot;
        ],
        &quot;articleSection&quot;: &quot;AI 보안&quot;,
        &quot;datePublished&quot;: &quot;2026-07-03&quot;,
        &quot;dateModified&quot;: &quot;2026-07-03&quot;
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/anthropic-claude-code-user-identification#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;AI 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/category/ai-security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;앤트로픽, 클로드 코드 숨은 사용자 식별 기능 삭제&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: 앤트로픽, 클로드 코드, 사용자 식별, 디스틸레이션, 시스템 프롬프트, 스테가노그래피, API 게이트웨이, 프록시, 개발자 도구, AI 보안 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI 보안</category>
      <category>API 게이트웨이</category>
      <category>개발자 도구</category>
      <category>디스틸레이션</category>
      <category>사용자 식별</category>
      <category>스테가노그래피</category>
      <category>시스템 프롬프트</category>
      <category>앤트로픽</category>
      <category>클로드 코드</category>
      <category>프록시</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/585</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%95%A4%ED%8A%B8%EB%A1%9C%ED%94%BD-%ED%81%B4%EB%A1%9C%EB%93%9C-%EC%BD%94%EB%93%9C-%EC%88%A8%EC%9D%80-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%8B%9D%EB%B3%84-%EA%B8%B0%EB%8A%A5-%EC%82%AD%EC%A0%9C#entry585comment</comments>
      <pubDate>Fri, 3 Jul 2026 14:12:38 +0900</pubDate>
    </item>
    <item>
      <title>Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법</title>
      <link>https://togethergrow.tistory.com/entry/Tibero-5-JDBC-590743-%EB%AC%B8%EC%9E%90%EC%85%8B-%EB%B3%80%ED%99%98-%EC%98%A4%EB%A5%98-%EC%A0%90%EA%B2%80-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Tibero 5에서 INSERT 시 JDBC-590743 Character set conversion failed 오류가 발생하는 원인과 문자셋, JDBC, 입력 데이터 점검 절차를 정리한다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;Tibero, Tibero 5, JDBC-590743, 문자셋 오류, Character set conversion failed, invalid input, INSERT 오류, JDBC 인코딩, DB 문자셋, 데이터 이관&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;INSERT 시 발생하는 Tibero JDBC-590743 문자셋 변환 실패 오류를 DB 문자셋, JDBC 드라이버, 입력 데이터 관점에서 점검한다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Tibero 5 INSERT 중 JDBC-590743 오류가 발생할 때 확인해야 할 문자셋과 입력 데이터 점검 절차를 정리한다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .content-wrap {
        max-width: 860px;
        margin: 0 auto;
        padding: 20px 16px;
      }

      .post-content h1 {
        font-size: 2rem;
        line-height: 1.35;
        margin: 0 0 18px;
        letter-spacing: -0.03em;
      }

      .post-content h2 {
        font-size: 1.35rem;
        line-height: 1.45;
        margin: 38px 0 18px;
        letter-spacing: -0.02em;
      }

      .post-content p {
        margin: 0 0 16px;
      }

      .post-content .lead {
        font-size: 1.08rem;
        margin-bottom: 22px;
      }

      .post-content .summary-box {
        border: 1px solid #d9e2ef;
        border-radius: 14px;
        padding: 18px;
        margin: 24px 0 30px;
        background: #f8fbff;
      }

      .post-content .summary-box strong {
        display: block;
        margin-bottom: 8px;
      }

      .post-content .info-table {
        width: 100%;
        border-collapse: collapse;
        margin: 18px 0 26px;
      }

      .post-content .info-table th,
      .post-content .info-table td {
        border: 1px solid #e1e5ec;
        padding: 12px 14px;
        text-align: left;
        vertical-align: top;
      }

      .post-content .info-table th {
        width: 30%;
        background: #f5f7fa;
        font-weight: 700;
      }

      .post-content .callout {
        border-left: 4px solid #3b6ea8;
        padding: 14px 16px;
        margin: 24px 0;
        background: #f7faff;
      }

      .post-content pre {
        overflow-x: auto;
        border: 1px solid #e1e5ec;
        border-radius: 12px;
        padding: 16px;
        background: #f6f8fa;
        margin: 18px 0 26px;
      }

      .post-content code {
        font-family: Consolas, Monaco, monospace;
        font-size: 0.95rem;
      }

      .post-content .check-list {
        margin: 12px 0 24px;
        padding-left: 20px;
      }

      .post-content .check-list li {
        margin-bottom: 8px;
      }

      .post-content .warn-box {
        border: 1px solid #ead2a8;
        border-radius: 14px;
        padding: 16px;
        margin: 22px 0;
        background: #fffaf0;
      }
    &lt;/style&gt;

    &lt;article class=&quot;content-wrap&quot;&gt;
      &lt;h1&gt;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        Tibero 5에서 Java 애플리케이션으로 &lt;code&gt;INSERT&lt;/code&gt;를 수행할 때 &lt;code&gt;JDBC-590743: Character set conversion failed: invalid input&lt;/code&gt; 오류가 발생한다면, 우선 DB 문자셋과 JDBC 클라이언트 인코딩, 실제 입력 문자열에 DB 문자셋으로 변환할 수 없는 문자가 포함되어 있는지를 함께 확인해야 한다.
      &lt;/p&gt;

      &lt;section class=&quot;summary-box&quot; aria-label=&quot;핵심 요약&quot;&gt;
        &lt;strong&gt;핵심 요약&lt;/strong&gt;
        &lt;code&gt;JDBC-590743&lt;/code&gt;은 문자열을 Tibero 서버 문자셋으로 변환하는 과정에서 유효하지 않은 입력이 들어왔을 때 발생할 수 있다.&lt;br&gt;
        특히 Tibero 5 환경에서 DB 문자셋이 &lt;code&gt;MSWIN949&lt;/code&gt;, &lt;code&gt;EUC-KR&lt;/code&gt;, &lt;code&gt;KSC5601&lt;/code&gt; 계열인데 애플리케이션이 UTF-8 데이터를 넣는 경우 자주 확인된다.&lt;br&gt;
        한글 자체보다 이모지, 특수기호, 깨진 바이트, 잘못 디코딩된 파일 데이터, 외부 시스템에서 넘어온 비정상 문자열이 원인이 되는 경우가 많다.&lt;br&gt;
        해결은 DB 문자셋 확인, JDBC 드라이버 확인, 입력 데이터 재현, 문제 문자 제거 또는 DB 문자셋 정책 재검토 순서로 진행하는 것이 안전하다.
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;개요&lt;/h2&gt;

        &lt;p&gt;
          제시된 오류 메시지는 다음과 같다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;java.sql.SQLException: JDBC-590743:
Character set conversion failed: invalid input. - 57133&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 오류는 SQL 문법 오류라기보다는 &lt;code&gt;INSERT&lt;/code&gt; 대상 문자열이 Tibero 내부 문자셋으로 변환되는 과정에서 실패했다는 의미로 보는 것이 맞다. 즉, 테이블 구조나 컬럼 길이 문제만 확인해서는 원인을 찾기 어렵고, 문자열이 어떤 인코딩으로 생성되었고 DB가 어떤 문자셋을 사용하는지를 같이 봐야 한다.
        &lt;/p&gt;

        &lt;p&gt;
          운영 환경에서는 오류가 발생한 SQL 한 줄만 보는 것보다, 입력값이 만들어진 경로를 추적하는 것이 중요하다. 화면 입력값인지, 파일 업로드 데이터인지, 다른 DB에서 이관한 값인지, 외부 API 응답인지에 따라 원인 지점이 달라진다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;환경&lt;/h2&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;DBMS&lt;/th&gt;
              &lt;td&gt;Tibero 5&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;발생 작업&lt;/th&gt;
              &lt;td&gt;Java 애플리케이션 또는 JDBC 기반 프로그램에서 &lt;code&gt;INSERT&lt;/code&gt; 수행&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;오류 메시지&lt;/th&gt;
              &lt;td&gt;&lt;code&gt;JDBC-590743: Character set conversion failed: invalid input. - 57133&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;주요 의심 구간&lt;/th&gt;
              &lt;td&gt;DB 문자셋, JDBC 드라이버, JVM 인코딩, 입력 파일 인코딩, 외부 시스템 문자열&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          Tibero 5는 오래 운영된 시스템에서 많이 사용되므로, DB 문자셋이 UTF-8이 아닌 한글 완성형 계열로 구성된 경우가 있다. 이 상태에서 Java 애플리케이션이 UTF-8 기준 문자열을 그대로 전달하면 일부 문자는 DB 문자셋으로 변환되지 못할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;증상&lt;/h2&gt;

        &lt;p&gt;
          대표적인 증상은 &lt;code&gt;INSERT&lt;/code&gt; 또는 &lt;code&gt;PreparedStatement&lt;/code&gt; 실행 시점에 예외가 발생하는 것이다. 같은 SQL 구조라도 입력값에 따라 정상 수행되거나 실패할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;PreparedStatement pstmt = conn.prepareStatement(
    &quot;insert into sample_table (id, memo) values (?, ?)&quot;
);

pstmt.setInt(1, 1);
pstmt.setString(2, inputText);
pstmt.executeUpdate();&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          위 코드에서 &lt;code&gt;inputText&lt;/code&gt; 값이 단순 영문, 숫자, 일반 한글일 때는 성공하지만 특정 특수문자나 이모지, 복사해 온 문자가 포함될 때만 실패한다면 문자셋 변환 오류 가능성이 높다.
        &lt;/p&gt;

        &lt;div class=&quot;warn-box&quot;&gt;
          예를 들어 DB 문자셋이 한글 완성형 계열인데 입력값에 이모지, 일부 확장 한자, 특수 따옴표, 비표준 공백, 깨진 surrogate 문자가 포함되면 변환 실패가 발생할 수 있다.&lt;br&gt;
          이 경우 컬럼 길이를 늘려도 해결되지 않는다.&lt;br&gt;
          길이 문제가 아니라 문자 표현 가능 범위 문제이기 때문이다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;1차 점검&lt;/h2&gt;

        &lt;p&gt;
          먼저 Tibero 서버의 문자셋을 확인한다. 운영 중인 Tibero 5 환경에서는 아래 조회 중 사용 가능한 뷰를 기준으로 확인하면 된다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- DB 문자셋 확인 예시 1
select *
from nls_database_parameters
where parameter like '%CHARACTERSET%';

-- DB 문자셋 확인 예시 2
select *
from v$nls_parameters
where parameter like '%CHARACTERSET%';&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          여기서 &lt;code&gt;NLS_CHARACTERSET&lt;/code&gt; 값이 &lt;code&gt;UTF8&lt;/code&gt; 또는 &lt;code&gt;AL32UTF8&lt;/code&gt; 계열인지, 아니면 &lt;code&gt;MSWIN949&lt;/code&gt;, &lt;code&gt;EUC-KR&lt;/code&gt;, &lt;code&gt;KSC5601&lt;/code&gt; 계열인지 확인한다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 항목&lt;/th&gt;
              &lt;th&gt;점검 내용&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;DB 문자셋&lt;/td&gt;
              &lt;td&gt;서버가 저장 가능한 문자 범위를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;JDBC 드라이버 버전&lt;/td&gt;
              &lt;td&gt;Tibero 5 서버와 호환되는 JDBC 드라이버인지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;JVM 인코딩&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;file.encoding&lt;/code&gt;, 애플리케이션 서버 인코딩, 배치 실행 환경을 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;입력 데이터 출처&lt;/td&gt;
              &lt;td&gt;파일, API, 화면, 타 DB 이관 등 문자열 생성 경로를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;문제 값 재현&lt;/td&gt;
              &lt;td&gt;실패한 row의 실제 문자열을 분리해 최소 재현 데이터를 만든다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          다음으로 동일한 SQL에 정상 문자열과 실패 문자열을 각각 넣어 본다. SQL 구조가 같고 특정 데이터에서만 실패한다면 DB 오브젝트 문제보다는 입력 문자열 문제일 가능성이 높다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;심화 분석&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;JDBC-590743&lt;/code&gt;의 핵심은 “어떤 문자 또는 바이트가 변환되지 못했는가”를 찾는 것이다. Java의 &lt;code&gt;String&lt;/code&gt;은 내부적으로 유니코드 문자열이지만, DB로 전달되는 과정에서는 JDBC 드라이버와 서버 문자셋 사이에서 변환이 발생한다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 애플리케이션에서 보이는 문자열이 정상처럼 보여도, 실제로는 잘못 디코딩된 문자나 DB 문자셋으로 표현할 수 없는 문자가 포함되어 있을 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 문제가 되는 값을 작게 나누어 재현
insert into sample_table (memo) values ('정상 한글');
insert into sample_table (memo) values ('특수문자 테스트');
insert into sample_table (memo) values ('문제 의심 문자열을 여기 넣고 확인');&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          Java 쪽에서는 실패한 문자열의 코드 포인트를 출력해 문제 문자를 찾을 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;String value = inputText;

value.codePoints().forEach(cp -&gt; {
    System.out.printf(&quot;U+%04X : %s%n&quot;, cp, new String(Character.toChars(cp)));
});&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          특히 다음 문자가 포함되어 있으면 우선 의심해 볼 수 있다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;이모지 또는 4바이트 유니코드 문자&lt;/li&gt;
          &lt;li&gt;일부 확장 한자 또는 특수 기호&lt;/li&gt;
          &lt;li&gt;워드 문서나 웹에서 복사한 스마트 따옴표&lt;/li&gt;
          &lt;li&gt;눈에 보이지 않는 제어 문자&lt;/li&gt;
          &lt;li&gt;비정상 surrogate pair가 포함된 문자열&lt;/li&gt;
          &lt;li&gt;UTF-8 파일을 EUC-KR로 잘못 읽어 생성된 깨진 문자열&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;callout&quot;&gt;
          관리자 입장에서 이 오류는 “INSERT가 안 된다”가 아니라 “입력 데이터가 현재 DB 문자셋으로 안전하게 변환되지 않는다”로 분류해야 한다.&lt;br&gt;
          같은 테이블, 같은 컬럼, 같은 SQL이라도 입력값 하나 때문에 재현 여부가 달라질 수 있다.&lt;br&gt;
          그래서 실패 row를 확보하고 문제 문자를 찾는 과정이 가장 중요하다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;복구&lt;/h2&gt;

        &lt;p&gt;
          복구 방향은 크게 세 가지다. 첫째, 입력값에서 DB 문자셋으로 저장할 수 없는 문자를 제거하거나 대체한다. 둘째, 파일이나 외부 연동 데이터의 인코딩을 올바르게 읽도록 수정한다. 셋째, 장기적으로 DB 문자셋 정책을 UTF-8 기반으로 전환할 수 있는지 검토한다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;상황&lt;/th&gt;
              &lt;th&gt;조치 방향&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;특정 특수문자만 실패&lt;/td&gt;
              &lt;td&gt;문제 문자를 제거하거나 허용 가능한 문자로 치환한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;파일 업로드 후 실패&lt;/td&gt;
              &lt;td&gt;파일의 실제 인코딩과 Java에서 읽는 인코딩을 일치시킨다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;외부 API 데이터 실패&lt;/td&gt;
              &lt;td&gt;수신 데이터의 charset 헤더와 실제 바이트 인코딩을 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이관 데이터에서 반복 발생&lt;/td&gt;
              &lt;td&gt;이관 전 문자 정제 절차를 추가하고 실패 row를 별도 적재한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이모지 저장 필요&lt;/td&gt;
              &lt;td&gt;현재 DB 문자셋에서 지원 가능한지 확인하고 UTF-8 전환을 검토한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          Java에서 파일을 읽는 경우에는 기본 인코딩에 의존하지 말고 명시적으로 인코딩을 지정하는 것이 좋다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 잘못된 접근 예시
-- 실행 OS나 JVM 옵션에 따라 기본 인코딩이 달라질 수 있다.

new InputStreamReader(inputStream);

-- 명시적 인코딩 지정 예시

new InputStreamReader(inputStream, StandardCharsets.UTF_8);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          다만 DB 문자셋이 &lt;code&gt;MSWIN949&lt;/code&gt; 계열인데 애플리케이션에서 UTF-8로 정상 처리한 문자열을 전달하더라도, 해당 문자가 &lt;code&gt;MSWIN949&lt;/code&gt;로 표현 불가능하다면 여전히 실패할 수 있다. 이 경우에는 애플리케이션에서 사전 필터링을 해야 한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;Charset targetCharset = Charset.forName(&quot;MS949&quot;);
CharsetEncoder encoder = targetCharset.newEncoder();

if (!encoder.canEncode(inputText)) {
    throw new IllegalArgumentException(&quot;DB 문자셋으로 저장할 수 없는 문자가 포함되어 있습니다.&quot;);
}&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;JDBC 드라이버와 서버 버전 확인&lt;/h2&gt;

        &lt;p&gt;
          Tibero 5 환경에서는 JDBC 드라이버 버전도 함께 확인해야 한다. 서버 버전과 맞지 않는 드라이버를 사용하거나, 오래된 드라이버에 문자셋 처리 관련 문제가 있는 경우 비슷한 증상이 발생할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 애플리케이션 배포 파일에서 확인할 항목
tibero5-jdbc.jar
tibero6-jdbc.jar
tbJDBC.jar

-- 점검 포인트
1. Tibero 5 서버에 맞는 JDBC 드라이버인지 확인
2. 운영 서버와 개발 서버의 JDBC jar가 동일한지 확인
3. WAS lib, 애플리케이션 lib에 중복 jar가 있는지 확인
4. 패치 권고 버전이 있는지 벤더 지원 채널로 확인&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          JDBC jar가 여러 경로에 중복 배치되어 있으면 개발자가 의도한 드라이버가 아니라 다른 버전의 드라이버가 로딩될 수 있다. 이 경우 로컬에서는 정상인데 운영에서만 오류가 나는 현상이 나타날 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;재발 방지&lt;/h2&gt;

        &lt;p&gt;
          문자셋 오류는 한 번 수정해도 데이터 유입 경로가 여러 개라면 반복될 수 있다. 따라서 단순히 문제가 된 문자열 하나를 고치는 데서 끝내지 말고, 입력 단계에서 검증하는 구조를 추가하는 것이 좋다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;DB 문자셋을 기준으로 저장 가능한 문자 범위를 문서화한다.&lt;/li&gt;
          &lt;li&gt;사용자 입력, 파일 업로드, API 수신 구간에 문자 검증 로직을 둔다.&lt;/li&gt;
          &lt;li&gt;배치 프로그램은 파일 인코딩을 명시적으로 지정한다.&lt;/li&gt;
          &lt;li&gt;실패 row는 버리지 말고 별도 로그 테이블이나 파일로 분리한다.&lt;/li&gt;
          &lt;li&gt;JDBC 드라이버 버전을 서버 버전과 맞춰 관리한다.&lt;/li&gt;
          &lt;li&gt;운영과 개발 환경의 JVM 옵션, WAS 인코딩, JDBC jar 경로를 동일하게 맞춘다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;callout&quot;&gt;
          실제 사용 시 가장 안정적인 방식은 “DB에 넣다가 실패하면 확인”이 아니라 “DB에 넣기 전에 현재 DB 문자셋으로 저장 가능한지 검증”하는 것이다.&lt;br&gt;
          특히 Tibero 5처럼 오래된 운영 시스템에서는 UTF-8 데이터가 외부에서 유입되는 경로가 늘어나면서 문자셋 변환 오류가 뒤늦게 드러나는 경우가 많다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          Tibero 5에서 &lt;code&gt;INSERT&lt;/code&gt; 시 발생하는 &lt;code&gt;JDBC-590743: Character set conversion failed: invalid input&lt;/code&gt; 오류는 대체로 SQL 문법 문제가 아니라 문자셋 변환 실패 문제로 접근해야 한다.
        &lt;/p&gt;

        &lt;p&gt;
          우선 DB의 &lt;code&gt;NLS_CHARACTERSET&lt;/code&gt;을 확인하고, JDBC 드라이버 버전과 애플리케이션 입력 데이터의 실제 인코딩을 점검해야 한다. 이후 실패한 문자열을 최소 단위로 재현해 DB 문자셋으로 표현할 수 없는 문자를 찾는 것이 핵심이다.
        &lt;/p&gt;

        &lt;p&gt;
          단기적으로는 문제 문자를 제거하거나 치환하고, 파일·API·배치 입력 구간의 인코딩을 명확히 지정해야 한다. 장기적으로 이모지나 다양한 유니코드 문자를 저장해야 하는 업무라면 DB 문자셋 정책 자체를 재검토하는 것이 필요하다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/tibero5-jdbc-590743-character-set-error#techarticle&quot;,
        &quot;headline&quot;: &quot;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&quot;,
        &quot;description&quot;: &quot;Tibero 5에서 INSERT 시 JDBC-590743 Character set conversion failed 오류가 발생하는 원인과 문자셋, JDBC, 입력 데이터 점검 절차를 정리한다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;articleSection&quot;: &quot;Tibero 오류&quot;,
        &quot;keywords&quot;: [
          &quot;Tibero&quot;,
          &quot;Tibero 5&quot;,
          &quot;JDBC-590743&quot;,
          &quot;문자셋 오류&quot;,
          &quot;Character set conversion failed&quot;,
          &quot;invalid input&quot;,
          &quot;INSERT 오류&quot;,
          &quot;JDBC 인코딩&quot;,
          &quot;DB 문자셋&quot;,
          &quot;데이터 이관&quot;
        ],
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/tibero5-jdbc-590743-character-set-error&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Tibero 5&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;JDBC-590743&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;문자셋 변환 오류&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/tibero5-jdbc-590743-character-set-error#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;DB 오류&quot;,
            &quot;item&quot;: &quot;https://example.com/database-error&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;Tibero 5 JDBC-590743 문자셋 변환 오류 점검 방법&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>Character set conversion failed</category>
      <category>DB 문자셋</category>
      <category>INSERT 오류</category>
      <category>invalid input</category>
      <category>JDBC 인코딩</category>
      <category>JDBC-590743</category>
      <category>tibero</category>
      <category>Tibero 5</category>
      <category>데이터 이관</category>
      <category>문자셋 오류</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/584</guid>
      <comments>https://togethergrow.tistory.com/entry/Tibero-5-JDBC-590743-%EB%AC%B8%EC%9E%90%EC%85%8B-%EB%B3%80%ED%99%98-%EC%98%A4%EB%A5%98-%EC%A0%90%EA%B2%80-%EB%B0%A9%EB%B2%95#entry584comment</comments>
      <pubDate>Thu, 2 Jul 2026 13:47:17 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유</title>
      <link>https://togethergrow.tistory.com/entry/PostgreSQL-VACUUM-FULL-%ED%9B%84-relfrozenxid-age%EA%B0%80-1%EB%A1%9C-%EC%A4%84%EC%96%B4%EB%93%9C%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;PostgreSQL에서 VACUUM FULL 수행 후 relfrozenxid age가 낮아지는 이유와 일반 VACUUM, FREEZE, 복제 환경에서의 반영 방식을 정리한다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;PostgreSQL, VACUUM FULL, relfrozenxid, age, VACUUM FREEZE, PostgreSQL 복제, 트랜잭션 ID, wraparound, 테이블 재작성, DB 운영&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;VACUUM FULL이 일반 VACUUM과 다르게 테이블을 재작성하면서 relfrozenxid age가 어떻게 변하는지 운영 관점에서 설명한다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;PostgreSQL VACUUM FULL, relfrozenxid, age 변화, 복제 반영 구조를 정리한다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .content-wrap {
        max-width: 860px;
        margin: 0 auto;
        padding: 20px 16px;
      }

      .post-content h1 {
        font-size: 2rem;
        line-height: 1.35;
        margin: 0 0 18px;
        letter-spacing: -0.03em;
      }

      .post-content h2 {
        font-size: 1.35rem;
        line-height: 1.45;
        margin: 38px 0 18px;
        letter-spacing: -0.02em;
      }

      .post-content p {
        margin: 0 0 16px;
      }

      .post-content .lead {
        font-size: 1.08rem;
        margin-bottom: 22px;
      }

      .post-content .summary-box {
        border: 1px solid #d9e2ef;
        border-radius: 14px;
        padding: 18px;
        margin: 24px 0 30px;
        background: #f8fbff;
      }

      .post-content .summary-box strong {
        display: block;
        margin-bottom: 8px;
      }

      .post-content .info-table {
        width: 100%;
        border-collapse: collapse;
        margin: 18px 0 26px;
      }

      .post-content .info-table th,
      .post-content .info-table td {
        border: 1px solid #e1e5ec;
        padding: 12px 14px;
        text-align: left;
        vertical-align: top;
      }

      .post-content .info-table th {
        width: 28%;
        background: #f5f7fa;
        font-weight: 700;
      }

      .post-content .callout {
        border-left: 4px solid #3b6ea8;
        padding: 14px 16px;
        margin: 24px 0;
        background: #f7faff;
      }

      .post-content pre {
        overflow-x: auto;
        border: 1px solid #e1e5ec;
        border-radius: 12px;
        padding: 16px;
        background: #f6f8fa;
        margin: 18px 0 26px;
      }

      .post-content code {
        font-family: Consolas, Monaco, monospace;
        font-size: 0.95rem;
      }

      .post-content .check-list {
        margin: 12px 0 24px;
        padding-left: 20px;
      }

      .post-content .check-list li {
        margin-bottom: 8px;
      }
    &lt;/style&gt;

    &lt;article class=&quot;content-wrap&quot;&gt;
      &lt;h1&gt;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        PostgreSQL에서 &lt;code&gt;VACUUM FULL&lt;/code&gt;을 수행한 뒤 &lt;code&gt;pg_class.relfrozenxid&lt;/code&gt;의 &lt;code&gt;age&lt;/code&gt; 값이 크게 낮아지는 현상은 정상적인 동작이다. 일반 &lt;code&gt;VACUUM&lt;/code&gt;이 기존 테이블 파일 안에서 불필요한 튜플을 정리하는 방식이라면, &lt;code&gt;VACUUM FULL&lt;/code&gt;은 테이블을 새로 재작성하는 방식에 가깝기 때문이다.
      &lt;/p&gt;

      &lt;section class=&quot;summary-box&quot; aria-label=&quot;핵심 요약&quot;&gt;
        &lt;strong&gt;핵심 요약&lt;/strong&gt;
        &lt;code&gt;VACUUM FULL&lt;/code&gt;은 일반 &lt;code&gt;VACUUM&lt;/code&gt;처럼 일부 페이지만 정리하는 작업이 아니라 테이블을 새 relfilenode로 재작성한다.&lt;br&gt;
        이 과정에서 살아 있는 튜플만 새 테이블로 복사되고, 새 테이블의 &lt;code&gt;relfrozenxid&lt;/code&gt;도 최근 기준으로 갱신된다.&lt;br&gt;
        따라서 수행 후 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 1처럼 매우 낮은 값으로 보일 수 있다.&lt;br&gt;
        스트리밍 복제 환경에서는 이 변경이 WAL을 통해 replica에도 반영되므로 primary와 replica에서 동일하게 age가 낮아진다.
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;질문의 핵심은 VACUUM FULL이 freeze인지 rewrite인지다&lt;/h2&gt;

        &lt;p&gt;
          질문에서 제시한 테스트 결과는 다음과 같은 흐름이다. primary node에서 &lt;code&gt;pgbench_accounts&lt;/code&gt; 테이블의 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 434158이었고, &lt;code&gt;VACUUM FULL&lt;/code&gt; 수행 후 age가 1로 감소했다. replica node에서도 동일하게 age가 434158에서 1로 변경됐다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;primary node

postgres=# select relname, age(relfrozenxid)
           from pg_class
           where relname = 'pgbench_accounts';

     relname      |  age
------------------+--------
 pgbench_accounts | 434158

postgres=# vacuum full pgbench_accounts;
VACUUM

postgres=# select relname, age(relfrozenxid)
           from pg_class
           where relname = 'pgbench_accounts';

     relname      | age
------------------+-----
 pgbench_accounts |   1&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 결과만 보면 &lt;code&gt;VACUUM FULL&lt;/code&gt;이 &lt;code&gt;VACUUM FREEZE&lt;/code&gt;처럼 freeze를 수행한 것인지, 아니면 Oracle의 reorg처럼 테이블을 재구성하면서 age가 초기화된 것인지가 궁금해질 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          결론부터 말하면 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 일반 &lt;code&gt;VACUUM&lt;/code&gt;의 EAGER 또는 LAZY 처리와 동일한 관점으로 보기보다는, 테이블을 새로 재작성하는 작업으로 이해하는 것이 맞다. 그 결과 새로 만들어진 테이블의 &lt;code&gt;relfrozenxid&lt;/code&gt;가 최근 트랜잭션 기준으로 갱신되면서 &lt;code&gt;age&lt;/code&gt;가 매우 낮아질 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;일반 VACUUM과 VACUUM FULL의 차이&lt;/h2&gt;

        &lt;p&gt;
          일반 &lt;code&gt;VACUUM&lt;/code&gt;은 테이블에 남아 있는 dead tuple을 정리하고, 재사용 가능한 공간으로 표시한다. 기본적으로 테이블 파일 자체를 완전히 새로 만들지는 않는다. 그래서 일반 &lt;code&gt;VACUUM&lt;/code&gt;은 디스크 파일 크기를 운영체제에 즉시 반환하기보다는 PostgreSQL 내부에서 재사용 가능한 공간을 확보하는 성격이 강하다.
        &lt;/p&gt;

        &lt;p&gt;
          반면 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 테이블 전체를 새 파일로 재작성한다. 살아 있는 row만 새 테이블 구조로 옮기고, 인덱스도 다시 구성된다. 이 과정에서 기존 테이블의 물리적 bloat가 제거되고, 작업이 끝나면 새 relfilenode가 기존 테이블을 대체한다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;일반 VACUUM&lt;/th&gt;
              &lt;th&gt;VACUUM FULL&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;처리 방식&lt;/td&gt;
              &lt;td&gt;기존 테이블 내부 정리&lt;/td&gt;
              &lt;td&gt;테이블 재작성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;공간 반환&lt;/td&gt;
              &lt;td&gt;대부분 내부 재사용 공간 확보&lt;/td&gt;
              &lt;td&gt;물리적 파일 축소 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;잠금 영향&lt;/td&gt;
              &lt;td&gt;상대적으로 낮음&lt;/td&gt;
              &lt;td&gt;강한 잠금 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;relfrozenxid 변화&lt;/td&gt;
              &lt;td&gt;조건에 따라 제한적으로 전진&lt;/td&gt;
              &lt;td&gt;재작성 결과로 크게 전진 가능&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          실무 기준으로 보면 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 단순한 청소 작업이라기보다 테이블 재구성 작업에 가깝다. 따라서 age 변화도 일반 &lt;code&gt;VACUUM&lt;/code&gt;의 freeze 조건만으로 해석하면 혼동이 생길 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;relfrozenxid와 age가 의미하는 것&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;pg_class.relfrozenxid&lt;/code&gt;는 해당 테이블에서 이 값보다 오래된 트랜잭션 ID가 더 이상 wraparound 위험을 만들지 않는다고 볼 수 있는 기준값이다. &lt;code&gt;age(relfrozenxid)&lt;/code&gt;는 현재 트랜잭션 ID 기준으로 이 기준값이 얼마나 오래되었는지를 보여준다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 높다는 것은 해당 테이블의 freeze 기준이 오래되었다는 뜻이다. 이 값이 계속 커지면 PostgreSQL은 트랜잭션 ID wraparound를 막기 위해 더 적극적인 vacuum을 수행해야 한다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          &lt;code&gt;age(relfrozenxid)&lt;/code&gt;는 테이블의 데이터가 오래됐다는 의미가 아니다.&lt;br&gt;
          테이블 안에 남아 있는 트랜잭션 ID 기준점이 현재 트랜잭션 ID와 얼마나 떨어져 있는지를 보여주는 값이다.&lt;br&gt;
          따라서 운영 환경에서는 테이블 bloat와 별도로 wraparound 관점의 관리 지표로 봐야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;VACUUM FULL 후 age가 1로 줄어드는 이유&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;VACUUM FULL&lt;/code&gt;을 수행하면 PostgreSQL은 기존 테이블을 그대로 압축하는 것이 아니라 새 테이블 파일을 만들고 살아 있는 튜플을 다시 적재한다. 이때 새로 만들어진 relation의 freeze 기준 정보도 함께 갱신된다.
        &lt;/p&gt;

        &lt;p&gt;
          그래서 기존 테이블의 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 434158이었다 하더라도, &lt;code&gt;VACUUM FULL&lt;/code&gt; 이후 새 relation의 &lt;code&gt;relfrozenxid&lt;/code&gt;가 최근 기준으로 설정되면 &lt;code&gt;age&lt;/code&gt;는 1처럼 낮은 값으로 나타날 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          이 동작은 “기존 테이블의 오래된 age 값이 그대로 유지된 채 공간만 줄어든다”는 방식이 아니다. 재작성된 테이블은 새로운 물리 구조를 가지며, 그 과정에서 &lt;code&gt;relfrozenxid&lt;/code&gt;도 현재 기준에 가깝게 이동한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 확인 쿼리 예시
select
    relname,
    relfrozenxid,
    age(relfrozenxid)
from pg_class
where relname = 'pgbench_accounts';&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;VACUUM FREEZE와 같은 의미로 봐도 되는가&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;VACUUM FULL&lt;/code&gt; 결과로 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 낮아진다고 해서, 이를 일반적인 &lt;code&gt;VACUUM FREEZE&lt;/code&gt;와 완전히 같은 작업으로 이해하면 안 된다. 두 작업은 목적과 수행 방식이 다르다.
        &lt;/p&gt;

        &lt;p&gt;
          &lt;code&gt;VACUUM FREEZE&lt;/code&gt;는 기존 테이블을 대상으로 가능한 튜플의 트랜잭션 ID를 freeze 처리하는 데 초점이 있다. 반면 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 테이블을 새로 작성하면서 공간 회수와 물리적 재구성을 수행한다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;VACUUM FREEZE&lt;/th&gt;
              &lt;th&gt;VACUUM FULL&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 목적&lt;/td&gt;
              &lt;td&gt;트랜잭션 ID wraparound 방지&lt;/td&gt;
              &lt;td&gt;bloat 제거와 테이블 물리 재작성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;테이블 재작성&lt;/td&gt;
              &lt;td&gt;기본적으로 재작성하지 않음&lt;/td&gt;
              &lt;td&gt;재작성함&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;age 감소&lt;/td&gt;
              &lt;td&gt;freeze 범위에 따라 감소&lt;/td&gt;
              &lt;td&gt;재작성 결과로 크게 감소 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 영향&lt;/td&gt;
              &lt;td&gt;상대적으로 낮음&lt;/td&gt;
              &lt;td&gt;잠금과 I/O 영향이 큼&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          따라서 “&lt;code&gt;VACUUM FULL&lt;/code&gt;이 freeze 파라미터 조건에 걸린 오래된 XID만 freeze해서 age가 줄어든다”기보다는, “테이블 재작성 과정에서 새 relation의 &lt;code&gt;relfrozenxid&lt;/code&gt;가 최근 기준으로 갱신되어 age가 낮아진다”고 보는 편이 더 정확하다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;vacuum_freeze_min_age와 vacuum_freeze_table_age의 영향&lt;/h2&gt;

        &lt;p&gt;
          일반 &lt;code&gt;VACUUM&lt;/code&gt;에서는 &lt;code&gt;vacuum_freeze_min_age&lt;/code&gt;, &lt;code&gt;vacuum_freeze_table_age&lt;/code&gt;, &lt;code&gt;autovacuum_freeze_max_age&lt;/code&gt; 같은 설정이 중요하다. 이 설정들은 언제 튜플을 freeze 대상으로 볼지, 언제 더 적극적인 vacuum을 수행할지에 영향을 준다.
        &lt;/p&gt;

        &lt;p&gt;
          하지만 질문의 테스트처럼 &lt;code&gt;VACUUM FULL&lt;/code&gt;을 수행해 테이블이 재작성되는 경우에는, 일반 &lt;code&gt;VACUUM&lt;/code&gt;이 특정 페이지나 특정 오래된 튜플만 대상으로 freeze를 수행하는 상황과 다르게 해석해야 한다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          일반 &lt;code&gt;VACUUM&lt;/code&gt;에서는 freeze 관련 파라미터가 “어느 정도 오래된 XID를 freeze할 것인가”에 영향을 준다.&lt;br&gt;
          &lt;code&gt;VACUUM FULL&lt;/code&gt;에서는 테이블 재작성 결과로 relation 기준 정보가 새로 잡히므로 age가 급격히 낮아질 수 있다.&lt;br&gt;
          따라서 테스트 결과의 age 1은 비정상 값이 아니라 재작성 후 자연스럽게 나타날 수 있는 값이다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;replica에서도 age가 1로 바뀌는 이유&lt;/h2&gt;

        &lt;p&gt;
          스트리밍 복제 환경에서 primary에서 수행한 &lt;code&gt;VACUUM FULL&lt;/code&gt;의 결과는 WAL을 통해 replica에 전달된다. &lt;code&gt;VACUUM FULL&lt;/code&gt;은 단순히 primary 메모리 안에서만 상태를 바꾸는 작업이 아니라 relation 파일과 시스템 카탈로그 변경을 동반하는 작업이다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 primary에서 새 relfilenode가 만들어지고 &lt;code&gt;pg_class&lt;/code&gt;의 relation 메타데이터가 변경되면, replica도 WAL replay를 통해 같은 변경을 반영한다. 그 결과 replica에서 다시 조회했을 때도 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 1로 보일 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;replica node

postgres=# select relname, age(relfrozenxid)
           from pg_class
           where relname = 'pgbench_accounts';

     relname      |  age
------------------+--------
 pgbench_accounts | 434158

-- primary의 VACUUM FULL 변경이 WAL replay로 반영된 뒤

postgres=# select relname, age(relfrozenxid)
           from pg_class
           where relname = 'pgbench_accounts';

     relname      | age
------------------+-----
 pgbench_accounts |   1&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          즉 replica에서 age가 낮아진 것은 replica가 별도로 &lt;code&gt;VACUUM FULL&lt;/code&gt;을 실행했기 때문이 아니라, primary의 재작성 결과와 카탈로그 변경이 복제로 반영됐기 때문이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Oracle reorg와 비교할 때 주의할 점&lt;/h2&gt;

        &lt;p&gt;
          Oracle의 reorg와 PostgreSQL의 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 모두 물리 구조를 정리하거나 재구성한다는 점에서는 비슷하게 보일 수 있다. 하지만 PostgreSQL에서는 MVCC와 트랜잭션 ID wraparound 관리가 강하게 연결되어 있기 때문에 &lt;code&gt;relfrozenxid&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt;, freeze 개념까지 함께 봐야 한다.
        &lt;/p&gt;

        &lt;p&gt;
          PostgreSQL의 &lt;code&gt;VACUUM FULL&lt;/code&gt;은 bloat 제거를 위해 테이블을 재작성하는 작업이며, 이 과정에서 새 relation의 트랜잭션 ID 기준 정보가 갱신된다. 그래서 단순히 “공간 재정렬”로만 이해하면 &lt;code&gt;age&lt;/code&gt;가 왜 1로 바뀌는지 설명하기 어렵다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 시 확인해야 할 사항&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;VACUUM FULL&lt;/code&gt;은 age를 낮추고 물리적 bloat를 제거하는 데 효과가 있을 수 있지만, 운영 중인 서비스에서는 신중하게 사용해야 한다. 테이블에 강한 잠금이 필요하고, 테이블 크기에 따라 많은 I/O와 임시 디스크 공간이 필요할 수 있다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;대상 테이블의 크기와 bloat 수준을 먼저 확인한다.&lt;/li&gt;
          &lt;li&gt;서비스 영향이 적은 시간대에 수행한다.&lt;/li&gt;
          &lt;li&gt;replica 지연이 발생할 수 있으므로 replication lag를 함께 모니터링한다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;age(datfrozenxid)&lt;/code&gt;, &lt;code&gt;age(relfrozenxid)&lt;/code&gt;를 정기적으로 점검한다.&lt;/li&gt;
          &lt;li&gt;단순 wraparound 예방 목적이라면 &lt;code&gt;VACUUM FREEZE&lt;/code&gt; 또는 autovacuum 튜닝을 먼저 검토한다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;pre&gt;&lt;code&gt;-- 테이블별 relfrozenxid age 확인
select
    n.nspname as schema_name,
    c.relname as table_name,
    age(c.relfrozenxid) as relfrozenxid_age
from pg_class c
join pg_namespace n
  on n.oid = c.relnamespace
where c.relkind in ('r', 't', 'm')
order by age(c.relfrozenxid) desc
limit 20;

-- 데이터베이스별 datfrozenxid age 확인
select
    datname,
    age(datfrozenxid) as datfrozenxid_age
from pg_database
order by age(datfrozenxid) desc;&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리하면&lt;/h2&gt;

        &lt;p&gt;
          질문의 테스트에서 &lt;code&gt;VACUUM FULL pgbench_accounts&lt;/code&gt; 수행 후 primary와 replica 모두 &lt;code&gt;age(relfrozenxid)&lt;/code&gt;가 434158에서 1로 줄어든 것은 정상적인 결과로 볼 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          핵심은 &lt;code&gt;VACUUM FULL&lt;/code&gt;이 일반 &lt;code&gt;VACUUM&lt;/code&gt;처럼 기존 테이블 안에서 제한적으로 정리만 하는 작업이 아니라, 살아 있는 튜플을 기반으로 테이블을 새로 재작성하는 작업이라는 점이다. 이 재작성 결과로 relation의 &lt;code&gt;relfrozenxid&lt;/code&gt;가 최근 기준으로 갱신되면서 age가 낮아진다.
        &lt;/p&gt;

        &lt;p&gt;
          replica에서도 동일한 값이 보이는 이유는 primary에서 발생한 테이블 재작성과 시스템 카탈로그 변경이 WAL을 통해 복제되기 때문이다. 따라서 이 현상은 “replica에서 별도의 freeze가 수행됐다”기보다는 “primary의 &lt;code&gt;VACUUM FULL&lt;/code&gt; 결과가 복제로 반영됐다”고 이해하는 것이 맞다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-vacuum-full-relfrozenxid-age#techarticle&quot;,
        &quot;headline&quot;: &quot;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&quot;,
        &quot;description&quot;: &quot;PostgreSQL에서 VACUUM FULL 수행 후 relfrozenxid age가 낮아지는 이유와 일반 VACUUM, FREEZE, 복제 환경에서의 반영 방식을 정리한다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;articleSection&quot;: &quot;PostgreSQL 운영&quot;,
        &quot;keywords&quot;: [
          &quot;PostgreSQL&quot;,
          &quot;VACUUM FULL&quot;,
          &quot;relfrozenxid&quot;,
          &quot;age&quot;,
          &quot;VACUUM FREEZE&quot;,
          &quot;PostgreSQL 복제&quot;,
          &quot;트랜잭션 ID&quot;,
          &quot;wraparound&quot;,
          &quot;테이블 재작성&quot;,
          &quot;DB 운영&quot;
        ],
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/postgresql-vacuum-full-relfrozenxid-age&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;PostgreSQL VACUUM FULL&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;relfrozenxid&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;트랜잭션 ID wraparound&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-vacuum-full-relfrozenxid-age#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;PostgreSQL 운영&quot;,
            &quot;item&quot;: &quot;https://example.com/postgresql&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;PostgreSQL VACUUM FULL 후 relfrozenxid age가 1로 줄어드는 이유&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>age</category>
      <category>DB 운영</category>
      <category>PostgreSQL</category>
      <category>PostgreSQL 복제</category>
      <category>relfrozenxid</category>
      <category>VACUUM FREEZE</category>
      <category>vacuum full</category>
      <category>wraparound</category>
      <category>테이블 재작성</category>
      <category>트랜잭션 ID</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/583</guid>
      <comments>https://togethergrow.tistory.com/entry/PostgreSQL-VACUUM-FULL-%ED%9B%84-relfrozenxid-age%EA%B0%80-1%EB%A1%9C-%EC%A4%84%EC%96%B4%EB%93%9C%EB%8A%94-%EC%9D%B4%EC%9C%A0#entry583comment</comments>
      <pubDate>Thu, 2 Jul 2026 13:44:08 +0900</pubDate>
    </item>
    <item>
      <title>&amp;gt;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성</title>
      <link>https://togethergrow.tistory.com/entry/%EA%B3%BC%EA%B8%B0%EC%A0%95%ED%86%B5%EB%B6%80-%EC%96%91%EC%9E%90%EB%82%B4%EC%84%B1%EC%95%94%ED%98%B8-%EC%A0%84%EB%AC%B8%EA%B5%90%EC%9C%A1-7%EC%9B%94-%EC%8B%9C%EC%9E%91-620%EB%AA%85-%EC%9D%B8%EB%A0%A5-%EC%96%91%EC%84%B1</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;207382_208283_5315.jpg&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv6Kis/dJMcah57hD5/kYBgZ5aQDbe6cvFkReEjf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv6Kis/dJMcah57hD5/kYBgZ5aQDbe6cvFkReEjf0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv6Kis/dJMcah57hD5/kYBgZ5aQDbe6cvFkReEjf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv6Kis%2FdJMcah57hD5%2FkYBgZ5aQDbe6cvFkReEjf0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;과기정통부와 KISA가 양자컴퓨터 시대의 암호체계 전환에 대비해 개발&amp;middot;전환&amp;middot;실무 3개 과정으로 양자내성암호 전문인력 620명을 양성한다&quot; loading=&quot;lazy&quot; width=&quot;755&quot; height=&quot;622&quot; data-filename=&quot;207382_208283_5315.jpg&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;과기정통부와 KISA가 양자컴퓨터 시대의 암호체계 전환에 대비해 개발·전환·실무 3개 과정으로 양자내성암호 전문인력 620명을 양성한다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;양자내성암호, 과기정통부, KISA, 암호체계 전환, 양자컴퓨터 보안, 정보보호 교육, 공개키 암호, 사이버보안, 전문인력 양성, PQC&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;개발·전환·실무 과정으로 구성된 양자내성암호 전문교육이 7월부터 11월까지 순차 운영된다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;과기정통부와 KISA가 양자컴퓨터 위협에 대비해 양자내성암호 전환 인력 620명을 양성한다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .content-wrap {
        max-width: 860px;
        margin: 0 auto;
        padding: 20px 16px;
      }

      .post-content h1 {
        font-size: 2rem;
        line-height: 1.35;
        margin: 0 0 18px;
        letter-spacing: -0.03em;
      }

      .post-content h2 {
        font-size: 1.35rem;
        line-height: 1.45;
        margin: 38px 0 18px;
        letter-spacing: -0.02em;
      }

      .post-content p {
        margin: 0 0 16px;
      }

      .post-content .lead {
        font-size: 1.08rem;
        margin-bottom: 22px;
      }

      .post-content .summary-box {
        border: 1px solid #d9e2ef;
        border-radius: 14px;
        padding: 18px;
        margin: 24px 0 30px;
        background: #f8fbff;
      }

      .post-content .summary-box strong {
        display: block;
        margin-bottom: 8px;
      }

      .post-content .info-table {
        width: 100%;
        border-collapse: collapse;
        margin: 18px 0 26px;
      }

      .post-content .info-table th,
      .post-content .info-table td {
        border: 1px solid #e1e5ec;
        padding: 12px 14px;
        text-align: left;
        vertical-align: top;
      }

      .post-content .info-table th {
        width: 28%;
        background: #f5f7fa;
        font-weight: 700;
      }

      .post-content .callout {
        border-left: 4px solid #3b6ea8;
        padding: 14px 16px;
        margin: 24px 0;
        background: #f7faff;
      }

      .post-content .check-list {
        margin: 12px 0 24px;
        padding-left: 20px;
      }

      .post-content .check-list li {
        margin-bottom: 8px;
      }

      .post-content a {
        color: #1d5fa7;
        text-decoration: underline;
      }
    &lt;/style&gt;

    &lt;article class=&quot;content-wrap&quot;&gt;
      &lt;h1&gt;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        과학기술정보통신부와 한국인터넷진흥원(KISA)이 양자컴퓨터 시대에 대비해 양자내성암호 전환을 담당할 전문인력 양성에 나선다. 올해 교육은 7월부터 11월까지 순차적으로 운영되며, 개발·전환·실무 등 3개 과정으로 구성된다.
      &lt;/p&gt;

      &lt;section class=&quot;summary-box&quot; aria-label=&quot;핵심 요약&quot;&gt;
        &lt;strong&gt;핵심 요약&lt;/strong&gt;
        과기정통부와 KISA는 총 620명을 대상으로 양자내성암호 전문교육을 운영한다.&lt;br&gt;
        개발과정 90명, 전환과정 90명, 실무과정 440명 규모로 진행된다.&lt;br&gt;
        교육은 암호 알고리즘 구현부터 기존 시스템 전환 실습, 기관·기업 담당자 대상 실무교육까지 단계별로 마련된다.
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;양자컴퓨터 위협에 대비한 암호 전환 교육&lt;/h2&gt;

        &lt;p&gt;
          이번 양자내성암호 전문교육은 양자컴퓨터 발전으로 기존 공개키 암호체계가 위협받을 가능성에 대비해 마련됐다. 대규모 양자컴퓨터가 상용화될 경우 현재 널리 쓰이는 RSA와 타원곡선암호(ECC) 등 일부 공개키 기반 암호체계가 공격에 취약해질 수 있다는 우려가 제기되고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          양자내성암호는 양자컴퓨터를 이용한 공격에도 안전하도록 설계된 차세대 공개키 암호기술이다. 과기정통부는 이번 교육을 통해 암호 알고리즘을 직접 구현하는 개발자부터 기업과 기관의 시스템 전환을 담당하는 보안 실무자까지 단계별 전문인력을 양성한다는 계획이다.
        &lt;/p&gt;

        &lt;p&gt;
          운영 환경에서는 암호 알고리즘 자체를 이해하는 역량뿐 아니라 기존 시스템과 서비스에 어떤 방식으로 적용하고 전환할지 판단하는 능력이 중요하다. 이번 교육이 개발·전환·실무 과정으로 나뉜 것도 실제 현장에서 필요한 역할이 서로 다르기 때문이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;교육 규모와 대상&lt;/h2&gt;

        &lt;p&gt;
          과기정통부는 올해 총 620명의 양자내성암호 전문인력을 양성할 계획이다. 과정별로는 개발과정 90명, 전환과정 90명, 실무과정 440명이다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;운영 기관&lt;/th&gt;
              &lt;td&gt;과학기술정보통신부, 한국인터넷진흥원(KISA)&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;교육 기간&lt;/th&gt;
              &lt;td&gt;2026년 7월부터 11월까지 순차 운영&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;전체 규모&lt;/th&gt;
              &lt;td&gt;총 620명&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;과정 구성&lt;/th&gt;
              &lt;td&gt;개발과정, 전환과정, 실무과정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;주요 대상&lt;/th&gt;
              &lt;td&gt;대학생, 대학원생, 취업준비생, 보안 솔루션 개발자, 연구원, 기업·공공기관 정보보호 담당자&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          교육 대상은 대학생과 대학원생, 취업준비생, 보안 모듈·솔루션 개발자, 연구원, 기업과 공공기관의 정보보호 담당자 등이다. 양자내성암호에 대한 이해가 필요한 예비 인력과 현업 담당자를 함께 포괄한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;개발과정은 알고리즘 구현 역량에 초점&lt;/h2&gt;

        &lt;p&gt;
          개발과정은 양자내성암호 알고리즘의 원리와 구조를 이해하고 실제 구현 기술을 익히는 2일 과정으로 운영된다. 주요 대상은 대학생과 대학원생, 보안 모듈·솔루션 개발자, 연구원 등 암호 알고리즘 구현 역량을 갖추려는 교육생이다.
        &lt;/p&gt;

        &lt;p&gt;
          교육생들은 양자내성암호의 수학적 원리와 연산 구조를 학습하고, 이를 프로그램으로 구현하는 실습을 진행한다. 단순 개념 교육에 머무르지 않고 알고리즘 구현 흐름을 직접 다루는 방식이다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          개발과정의 핵심은 양자내성암호를 이론으로만 이해하는 것이 아니라 실제 코드와 구현 관점에서 다루는 데 있다.&lt;br&gt;
          보안 제품과 암호 모듈 개발을 준비하는 인력에게 기초 구현 역량을 제공하는 과정으로 볼 수 있다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;전환과정은 기존 시스템 교체와 병행 적용 실습&lt;/h2&gt;

        &lt;p&gt;
          전환과정 역시 2일 동안 운영된다. 이 과정에서는 현재 사용 중인 공개키 기반 암호체계를 양자내성암호로 교체하거나 기존 암호체계와 함께 사용하는 방법을 다룬다.
        &lt;/p&gt;

        &lt;p&gt;
          정보기술(IT)·보안 시스템 개발자와 기업·기관 보안 담당자가 실제 업무에서 활용할 수 있도록 시나리오 기반 실습 중심으로 진행된다. 기존 시스템을 한 번에 모두 바꾸기 어려운 환경을 고려하면, 전환 절차와 병행 적용 방식에 대한 이해가 중요하다.
        &lt;/p&gt;

        &lt;p&gt;
          관리자 입장에서 양자내성암호 전환은 단순히 암호 알고리즘을 바꾸는 작업이 아니라 자산 식별, 영향도 분석, 호환성 검토, 단계별 적용 계획 수립이 함께 필요한 보안 과제다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기관·기업 담당자 대상 실무교육 확대&lt;/h2&gt;

        &lt;p&gt;
          실무과정은 정부와 공공기관, 민간기업의 정보보호·정보시스템 담당자를 대상으로 하루 동안 진행된다. 교육 규모는 440명으로, 세 과정 중 가장 크다.
        &lt;/p&gt;

        &lt;p&gt;
          교육 내용은 국내외 양자내성암호 정책과 기술 동향, 암호체계 전환 필요성, 단계별 전환 절차, 산업별 적용 사례 등으로 구성된다. 기관과 기업이 보유한 암호 자산을 점검하고 장기적인 전환계획을 수립하는 데 필요한 기초 역량을 제공하는 것이 목적이다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;국내외 양자내성암호 정책과 기술 동향 이해&lt;/li&gt;
          &lt;li&gt;조직 내 암호 자산 점검 필요성 확인&lt;/li&gt;
          &lt;li&gt;단계별 암호체계 전환 절차 학습&lt;/li&gt;
          &lt;li&gt;산업별 적용 사례를 통한 실무 관점 확보&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;모집 일정과 신청 방법&lt;/h2&gt;

        &lt;p&gt;
          개발과정과 전환과정 교육생 모집은 2026년 6월 30일부터 시작된다. 실무과정 모집 일정은 추후 별도로 공지될 예정이다.
        &lt;/p&gt;

        &lt;p&gt;
          과정별 세부 일정과 신청 방법은 한국인터넷진흥원이 운영하는 암호이용활성화 누리집에서 확인할 수 있다. 신청자는 본인의 역할과 필요 역량에 따라 개발과정, 전환과정, 실무과정 중 적합한 과정을 선택해 확인하는 것이 좋다.
        &lt;/p&gt;

        &lt;table class=&quot;info-table&quot;&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;개발과정 모집&lt;/th&gt;
              &lt;td&gt;2026년 6월 30일부터&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;전환과정 모집&lt;/th&gt;
              &lt;td&gt;2026년 6월 30일부터&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;실무과정 모집&lt;/th&gt;
              &lt;td&gt;추후 별도 공지&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 경로&lt;/th&gt;
              &lt;td&gt;
                &lt;a href=&quot;https://seed.kisa.or.kr&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;seed.kisa.or.kr&lt;/a&gt;&lt;br&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;국가 디지털 신뢰를 위한 선제 대응&lt;/h2&gt;

        &lt;p&gt;
          과기정통부는 국정과제인 인공지능 시대의 디지털 보안·안전 체계 구축과 범국가 양자내성암호체계 전환 계획, 양자과학기술 및 양자산업 육성 계획에 맞춰 국가 암호체계 전환을 준비해 왔다.
        &lt;/p&gt;

        &lt;p&gt;
          양자내성암호 전문교육은 이러한 전환을 실제 현장에서 수행할 인력을 확보하기 위한 기반 작업이다. 양자컴퓨터 상용화 시점이 불확실하더라도, 주요 시스템의 암호 전환은 장기간의 준비가 필요한 만큼 선제적인 인력 양성이 중요하다.
        &lt;/p&gt;

        &lt;p&gt;
          이번 교육을 통해 공공과 민간 영역에서 양자내성암호에 대한 이해가 확산되고, 향후 국가 차원의 암호체계 전환을 실행할 수 있는 실무 기반이 강화될 것으로 보인다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/pqc-training-2026#blogposting&quot;,
        &quot;headline&quot;: &quot;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&quot;,
        &quot;description&quot;: &quot;과기정통부와 KISA가 양자컴퓨터 시대의 암호체계 전환에 대비해 개발·전환·실무 3개 과정으로 양자내성암호 전문인력 620명을 양성한다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;articleSection&quot;: &quot;디지털 보안&quot;,
        &quot;keywords&quot;: [
          &quot;양자내성암호&quot;,
          &quot;과기정통부&quot;,
          &quot;KISA&quot;,
          &quot;암호체계 전환&quot;,
          &quot;양자컴퓨터 보안&quot;,
          &quot;정보보호 교육&quot;,
          &quot;공개키 암호&quot;,
          &quot;사이버보안&quot;,
          &quot;전문인력 양성&quot;,
          &quot;PQC&quot;
        ],
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/pqc-training-2026&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;양자내성암호&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;암호체계 전환&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;양자컴퓨터 보안&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/pqc-training-2026#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;디지털 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;과기정통부 양자내성암호 전문교육 7월 시작, 620명 인력 양성&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>KISA</category>
      <category>PQC</category>
      <category>공개키 암호</category>
      <category>과기정통부</category>
      <category>사이버보안</category>
      <category>암호체계 전환</category>
      <category>양자내성암호</category>
      <category>양자컴퓨터 보안</category>
      <category>전문인력 양성</category>
      <category>정보보호 교육</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/582</guid>
      <comments>https://togethergrow.tistory.com/entry/%EA%B3%BC%EA%B8%B0%EC%A0%95%ED%86%B5%EB%B6%80-%EC%96%91%EC%9E%90%EB%82%B4%EC%84%B1%EC%95%94%ED%98%B8-%EC%A0%84%EB%AC%B8%EA%B5%90%EC%9C%A1-7%EC%9B%94-%EC%8B%9C%EC%9E%91-620%EB%AA%85-%EC%9D%B8%EB%A0%A5-%EC%96%91%EC%84%B1#entry582comment</comments>
      <pubDate>Thu, 2 Jul 2026 10:35:11 +0900</pubDate>
    </item>
    <item>
      <title>도수치료 관리급여와 체외충격파 실손보험 기준 변화</title>
      <link>https://togethergrow.tistory.com/entry/%EB%8F%84%EC%88%98%EC%B9%98%EB%A3%8C-%EA%B4%80%EB%A6%AC%EA%B8%89%EC%97%AC%EC%99%80-%EC%B2%B4%EC%99%B8%EC%B6%A9%EA%B2%A9%ED%8C%8C-%EC%8B%A4%EC%86%90%EB%B3%B4%ED%97%98-%EA%B8%B0%EC%A4%80-%EB%B3%80%ED%99%94</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image 2026년 7월 1일 오후 07_22_46.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djmIEW/dJMcadCsHGB/2SPPkeeHUAgLl90JdCy481/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djmIEW/dJMcadCsHGB/2SPPkeeHUAgLl90JdCy481/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djmIEW/dJMcadCsHGB/2SPPkeeHUAgLl90JdCy481/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjmIEW%2FdJMcadCsHGB%2F2SPPkeeHUAgLl90JdCy481%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;금융감독원 금융행정지도 행2026-41003과 관련해 도수치료 관리급여 시행, 체외충격파 치료가이드, 분쟁조정 기준 변화가 실손보험 청구에 미치는 영향을 정리합니다&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image 2026년 7월 1일 오후 07_22_46.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;도수치료 관리급여와 체외충격파 실손보험 기준 변화&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;금융감독원 금융행정지도 행2026-41003과 관련해 도수치료 관리급여 시행, 체외충격파 치료가이드, 분쟁조정 기준 변화가 실손보험 청구에 미치는 영향을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;도수치료,관리급여,체외충격파,실손보험,금융감독원,금융행정지도,행2026-41003,분쟁조정,치료가이드,보험금청구&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;도수치료 관리급여와 체외충격파 실손보험 기준 변화&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;도수치료 관리급여 시행과 체외충격파 치료가이드·분쟁조정 기준 마련이 실손보험 청구와 의료 이용에 미치는 영향을 핵심만 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/og-image-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/manual-therapy-shockwave-insurance-guide&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;도수치료 관리급여와 체외충격파 실손보험 기준 변화&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;금융감독원 금융행정지도 행2026-41003 관련 도수치료·체외충격파 실손보험 기준 변화를 소비자 관점에서 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/og-image-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      word-break: keep-all;
    }

    .post-content .article-wrap {
      max-width: 860px;
      margin: 0 auto;
      padding: 24px 16px;
    }

    .post-content h1 {
      font-size: 1.9rem;
      line-height: 1.35;
      margin: 0 0 20px;
    }

    .post-content h2 {
      font-size: 1.35rem;
      line-height: 1.45;
      margin: 34px 0 12px;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 12px;
    }

    .post-content p {
      margin: 0 0 16px;
    }

    .post-content .summary-box {
      border: 1px solid #d9e2ec;
      border-radius: 14px;
      padding: 18px;
      margin: 22px 0;
      background: #f8fbff;
    }

    .post-content .note-box {
      border-left: 4px solid #6b7c93;
      padding: 14px 16px;
      margin: 20px 0;
      background: #f6f8fa;
    }

    .post-content .check-list {
      padding-left: 20px;
      margin: 12px 0 20px;
    }

    .post-content .check-list li {
      margin-bottom: 10px;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0 24px;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid #d8dee4;
      padding: 12px;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      background: #f3f6f9;
      font-weight: 700;
    }

    .post-content .highlight {
      font-weight: 700;
    }

    .post-content .admin-tags {
      display: none;
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;도수치료 관리급여와 체외충격파 실손보험 기준 변화&lt;/h1&gt;

      &lt;section&gt;
        &lt;p&gt;
          금융감독원 금융행정지도 행2026-41003은 도수치료 관리급여 시행과 체외충격파 치료가이드 및 분쟁조정 기준 마련이라는 두 흐름에서 이해할 필요가 있습니다.
          핵심은 비급여 치료를 둘러싼 실손보험 청구 기준을 더 명확히 하고, 보험금 지급 분쟁에서 판단 기준을 일관되게 만드는 데 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;summary-box&quot;&gt;
          도수치료는 관리급여 체계로 편입되면서 치료 필요성, 횟수, 의학적 근거가 더 중요해질 가능성이 큽니다.&lt;br&gt;
          체외충격파 치료는 질환별 적용 기준과 치료 효과 확인 절차가 분쟁 판단의 핵심이 될 수 있습니다.&lt;br&gt;
          실제 사용 시에는 병원 진료기록, 의사 소견, 치료 경과 자료를 함께 보관하는 것이 보험금 청구 안정성에 도움이 됩니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;왜 이번 행정지도가 중요한가&lt;/h2&gt;

        &lt;p&gt;
          도수치료와 체외충격파는 실손보험 청구에서 자주 다뤄지는 대표적인 비급여 치료입니다.
          치료 자체가 필요한 경우도 많지만, 병원별 비용 차이와 반복 치료 횟수, 치료 효과 입증 문제 때문에 보험사와 가입자 사이의 분쟁이 반복돼 왔습니다.
        &lt;/p&gt;

        &lt;p&gt;
          이번 금융행정지도는 단순히 특정 치료비를 제한하는 문제가 아니라, &lt;span class=&quot;highlight&quot;&gt;어떤 경우에 치료 필요성이 인정되고 어떤 자료가 보험금 판단에 필요한지&lt;/span&gt;를 정리하는 방향으로 볼 수 있습니다.
          관리자 입장에서 보면 보험금 지급 심사와 민원 처리 기준을 표준화하는 효과가 있고, 소비자 입장에서는 청구 전에 필요한 자료를 미리 확인해야 한다는 의미가 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;도수치료 관리급여 시행의 핵심&lt;/h2&gt;

        &lt;p&gt;
          도수치료 관리급여 시행은 기존처럼 병원이 자율적으로 비용을 정하고 환자가 실손보험으로 보전받는 구조에 변화를 줄 수 있습니다.
          관리급여는 일반적인 건강보험 급여와 달리 본인부담이 높게 설정될 수 있으며, 정부가 가격과 관리 기준을 정하는 방식으로 운영될 가능성이 큽니다.
        &lt;/p&gt;

        &lt;p&gt;
          이 변화가 적용되면 도수치료를 받는 환자는 단순히 “실손보험이 있으니 청구하면 된다”는 방식으로 접근하기 어렵습니다.
          치료 전 진단명, 치료 목적, 회차별 경과, 다른 치료와의 병행 여부 등이 보험금 판단에서 더 중요해질 수 있습니다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;치료 전 의학적 필요성이 진료기록에 남아 있는지 확인해야 합니다.&lt;/li&gt;
          &lt;li&gt;반복 치료를 받는 경우 회차별 증상 변화와 치료 반응이 기록돼야 합니다.&lt;/li&gt;
          &lt;li&gt;단순 피로 회복, 체형 관리, 예방 목적처럼 보일 수 있는 표현은 분쟁의 원인이 될 수 있습니다.&lt;/li&gt;
          &lt;li&gt;실손보험 약관의 보장 범위와 면책 기준을 치료 전에 확인하는 것이 안전합니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;체외충격파 치료가이드가 필요한 이유&lt;/h2&gt;

        &lt;p&gt;
          체외충격파 치료는 근골격계 통증 치료에 활용되지만, 질환과 부위, 치료 강도, 치료 횟수에 따라 효과와 필요성 판단이 달라질 수 있습니다.
          따라서 치료가이드가 마련되면 보험금 청구 과정에서 “필요한 치료였는지”, “적정 횟수였는지”, “효과 확인이 있었는지”가 더 구체적으로 검토될 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          체외충격파 치료가이드의 실무적 의미는 의료기관과 보험사, 소비자가 같은 기준으로 자료를 확인하도록 만드는 데 있습니다.
          운영 환경에서는 치료명이 같더라도 진단명과 치료 목적이 불분명하면 보험금 지급 판단이 지연될 수 있으므로, 진료기록의 구체성이 중요합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;분쟁조정 기준에서 달라질 수 있는 부분&lt;/h2&gt;

        &lt;p&gt;
          분쟁조정 기준이 마련되면 보험금 지급 여부를 판단할 때 개별 보험사의 내부 기준만으로 판단하기보다, 공통 기준에 따라 분쟁을 해석하는 흐름이 강화될 수 있습니다.
          특히 도수치료와 체외충격파처럼 반복 진료가 많은 항목은 횟수, 기간, 증상 개선 여부, 의사의 판단 근거가 중요한 요소가 됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;주요 쟁점&lt;/th&gt;
              &lt;th&gt;소비자가 확인할 부분&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;도수치료&lt;/td&gt;
              &lt;td&gt;반복 치료의 필요성, 치료 목적, 증상 개선 여부&lt;/td&gt;
              &lt;td&gt;진단명, 의사 소견, 회차별 치료기록, 증상 변화&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;체외충격파&lt;/td&gt;
              &lt;td&gt;질환별 적용 가능성, 치료 강도와 횟수, 효과 확인&lt;/td&gt;
              &lt;td&gt;치료 부위, 시행 사유, 경과 기록, 추가 검사 여부&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;실손보험 청구&lt;/td&gt;
              &lt;td&gt;약관상 보장 대상 여부, 면책 사유, 과잉진료 판단&lt;/td&gt;
              &lt;td&gt;보험 약관, 진료비 세부내역서, 영수증, 진료확인서&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;보험금 청구 전 준비할 자료&lt;/h2&gt;

        &lt;p&gt;
          도수치료나 체외충격파 치료 후 실손보험을 청구하려면 기본 영수증만으로는 부족할 수 있습니다.
          치료 필요성과 경과를 설명할 수 있는 자료가 함께 준비돼야 분쟁 가능성을 줄일 수 있습니다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;진료비 영수증과 진료비 세부산정내역서&lt;/li&gt;
          &lt;li&gt;진단명 또는 질병분류코드가 포함된 진료확인서&lt;/li&gt;
          &lt;li&gt;의사의 치료 필요성 소견이 확인되는 진료기록&lt;/li&gt;
          &lt;li&gt;반복 치료 시 회차별 경과 또는 증상 변화 기록&lt;/li&gt;
          &lt;li&gt;보험사가 추가 요청할 수 있는 검사 결과 또는 의무기록 사본&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;note-box&quot;&gt;
          보험금 청구 과정에서 가장 중요한 것은 치료명이 아니라 치료의 필요성을 입증하는 자료입니다.&lt;br&gt;
          도수치료와 체외충격파 모두 통증 완화 목적만 적혀 있으면 판단이 모호해질 수 있습니다.&lt;br&gt;
          치료 전후 상태, 진단 근거, 치료 계획이 함께 남아 있어야 분쟁 대응력이 높아집니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;소비자가 주의해야 할 점&lt;/h2&gt;

        &lt;p&gt;
          도수치료 관리급여 시행과 체외충격파 치료가이드 마련은 소비자에게 불리한 변화로만 볼 수는 없습니다.
          기준이 명확해지면 부당한 보험금 삭감이나 지급 지연에 대응할 근거도 생길 수 있기 때문입니다.
          다만 기준이 강화되는 만큼 치료 전 설명을 충분히 듣고, 필요한 자료를 챙기는 습관이 중요합니다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 실손보험은 가입 시기와 상품 세대에 따라 보장 방식이 다릅니다.
          같은 도수치료라도 가입한 실손보험 약관, 자기부담률, 면책 조항, 갱신 조건에 따라 실제 보장 금액이 달라질 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;앞으로 확인해야 할 핵심 포인트&lt;/h2&gt;

        &lt;p&gt;
          금융감독원 금융행정지도 행2026-41003 관련 변화는 의료기관, 보험사, 소비자 모두에게 청구와 심사 기준을 더 구체적으로 요구하는 방향입니다.
          도수치료 관리급여 시행 이후에는 비용 구조와 청구 방식이 달라질 수 있고, 체외충격파 치료는 질환별 가이드와 분쟁조정 기준에 따라 인정 범위가 정리될 가능성이 있습니다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;도수치료가 관리급여로 적용되는 시점과 본인부담 구조&lt;/li&gt;
          &lt;li&gt;체외충격파 치료가이드의 적용 질환과 권장 치료 기준&lt;/li&gt;
          &lt;li&gt;실손보험 세대별 보장 범위와 자기부담률&lt;/li&gt;
          &lt;li&gt;분쟁조정에서 인정되는 진료기록과 의학적 근거&lt;/li&gt;
          &lt;li&gt;보험금 청구 시 추가 서류 요청 가능성&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          도수치료 관리급여와 체외충격파 치료가이드 마련은 실손보험 청구 환경을 바꾸는 중요한 기준 변화입니다.
          앞으로는 치료를 받았다는 사실보다 치료가 왜 필요했는지, 적정한 횟수였는지, 실제 경과가 어땠는지를 기록으로 설명하는 것이 더 중요해질 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          소비자는 치료 전에 보험 약관과 의료기관의 설명을 확인하고, 치료 후에는 진료기록과 세부내역서를 빠짐없이 보관해야 합니다.
          이러한 준비가 도수치료와 체외충격파 실손보험 청구에서 불필요한 분쟁을 줄이는 가장 현실적인 대응 방법입니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;div class=&quot;admin-tags&quot;&gt;
        도수치료, 관리급여, 체외충격파, 실손보험, 금융감독원, 금융행정지도, 행2026-41003, 분쟁조정, 치료가이드, 보험금청구
      &lt;/div&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/manual-therapy-shockwave-insurance-guide#blogposting&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/manual-therapy-shockwave-insurance-guide&quot;
        },
        &quot;headline&quot;: &quot;도수치료 관리급여와 체외충격파 실손보험 기준 변화&quot;,
        &quot;description&quot;: &quot;금융감독원 금융행정지도 행2026-41003과 관련해 도수치료 관리급여 시행, 체외충격파 치료가이드, 분쟁조정 기준 변화가 실손보험 청구에 미치는 영향을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/og-image-placeholder.jpg&quot;
        },
        &quot;keywords&quot;: [
          &quot;도수치료&quot;,
          &quot;관리급여&quot;,
          &quot;체외충격파&quot;,
          &quot;실손보험&quot;,
          &quot;금융감독원&quot;,
          &quot;금융행정지도&quot;,
          &quot;행2026-41003&quot;,
          &quot;분쟁조정&quot;,
          &quot;치료가이드&quot;,
          &quot;보험금청구&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;도수치료 관리급여&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;체외충격파 치료가이드&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;실손보험 분쟁조정&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/manual-therapy-shockwave-insurance-guide#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;금융&quot;,
            &quot;item&quot;: &quot;https://example.com/category/finance&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;도수치료 관리급여와 체외충격파 실손보험 기준 변화&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>일상 정보/전국 소식</category>
      <category>관리급여</category>
      <category>금융감독원</category>
      <category>금융행정지도</category>
      <category>도수치료</category>
      <category>보험금청구</category>
      <category>분쟁조정</category>
      <category>실손보험</category>
      <category>체외충격파</category>
      <category>치료가이드</category>
      <category>행2026-41003</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/581</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%8F%84%EC%88%98%EC%B9%98%EB%A3%8C-%EA%B4%80%EB%A6%AC%EA%B8%89%EC%97%AC%EC%99%80-%EC%B2%B4%EC%99%B8%EC%B6%A9%EA%B2%A9%ED%8C%8C-%EC%8B%A4%EC%86%90%EB%B3%B4%ED%97%98-%EA%B8%B0%EC%A4%80-%EB%B3%80%ED%99%94#entry581comment</comments>
      <pubDate>Wed, 1 Jul 2026 19:23:14 +0900</pubDate>
    </item>
    <item>
      <title>Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기</title>
      <link>https://togethergrow.tistory.com/entry/Tomcat-%EB%B0%A9%EC%8B%9D%EA%B3%BC-Pod-%EB%B0%A9%EC%8B%9D-%EC%B0%A8%EC%9D%B4-WAS-%EC%9A%B4%EC%98%81-%EA%B5%AC%EC%A1%B0-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Tomcat 방식과 Kubernetes Pod 방식의 차이를 WAS 운영 관점에서 쉽게 정리하고, 배포·확장·장애 대응·서버 확인 방법까지 실무 기준으로 설명합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;Tomcat 방식,Pod 방식,Kubernetes,WAS 운영,Tomcat 배포,Docker Image,Pod 확장,컨테이너 운영,kubectl,VM 서버&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;기존 Tomcat 운영 방식과 Kubernetes Pod 방식의 차이를 실행 위치, 배포, 확장, 장애 대응 기준으로 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/tomcat-pod-was-architecture&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Tomcat 방식과 Kubernetes Pod 방식의 WAS 운영 차이를 쉽게 비교합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
    }

    .post-content .article-wrap {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      font-size: 1.9rem;
      line-height: 1.35;
      margin: 0 0 1.4rem;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.4;
      margin: 2.4rem 0 0.8rem;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 0.7rem;
    }

    .post-content h3 {
      font-size: 1.15rem;
      margin: 1.6rem 0 0.6rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .summary-box,
    .post-content .note-box,
    .post-content .check-box {
      border: 1px solid #d9dee7;
      border-radius: 12px;
      padding: 1rem 1.1rem;
      margin: 1.2rem 0;
      background: rgba(245, 247, 250, 0.65);
    }

    .post-content .summary-box strong,
    .post-content .note-box strong,
    .post-content .check-box strong {
      display: block;
      margin-bottom: 0.4rem;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 1rem;
      border-radius: 10px;
      border: 1px solid #d9dee7;
      background: rgba(245, 247, 250, 0.8);
      line-height: 1.55;
    }

    .post-content code {
      font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
      font-size: 0.95em;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.3rem 0;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid #d9dee7;
      padding: 0.75rem;
      text-align: left;
      vertical-align: top;
    }

    .post-content th {
      background: rgba(245, 247, 250, 0.9);
      font-weight: 700;
    }

    .post-content ul {
      margin: 0.5rem 0 1.2rem 1.2rem;
      padding: 0;
    }

    .post-content li {
      margin: 0.35rem 0;
    }

    .post-content .tag-admin-list {
      margin-top: 2.4rem;
      padding: 1rem 1.1rem;
      border: 1px dashed #c8ced8;
      border-radius: 12px;
      background: rgba(245, 247, 250, 0.5);
    }

    .post-content .tag-admin-list p {
      margin: 0;
    }
  &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          Tomcat 방식은 서버나 VM 위에 Tomcat을 직접 설치해 WAR 파일을 배포하는 기존 WAS 운영 방식입니다.&lt;br&gt;
          Pod 방식은 Tomcat을 컨테이너 이미지로 만들고 Kubernetes에서 Pod 단위로 실행하는 방식입니다.&lt;br&gt;
          쉽게 말하면 차이는 “Tomcat을 서버에 직접 설치하느냐, 컨테이너로 만들어 Kubernetes에서 운영하느냐”입니다.
        &lt;/div&gt;

        &lt;p&gt;
          요즘 인프라에서는 WAS 운영 방식을 설명할 때 &lt;strong&gt;Tomcat 방식&lt;/strong&gt;과 &lt;strong&gt;Pod 방식&lt;/strong&gt;을 구분해서 말하는 경우가 많습니다.
          둘 다 애플리케이션을 실행한다는 목적은 같지만, 실제 운영 구조와 배포 방식, 장애 대응 방식은 꽤 다릅니다.
        &lt;/p&gt;

        &lt;p&gt;
          실무 기준으로 보면 이 차이를 이해하면 “서버에 접속해서 Tomcat을 확인해야 하는지”, 아니면 “Kubernetes에서 Pod와 Image를 확인해야 하는지”를 빠르게 판단할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Tomcat 방식은 서버에 WAS를 직접 설치하는 구조&lt;/h2&gt;

        &lt;p&gt;
          &lt;strong&gt;Tomcat 방식&lt;/strong&gt;은 서버 한 대 또는 VM 위에 Tomcat을 직접 설치하고, 그 안에 WAR 파일을 올려 서비스를 실행하는 방식입니다.
          기존 온프레미스 환경이나 VM 기반 운영 환경에서 흔히 볼 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;사용자
  │
  ▼
L4/LB
  │
  ▼
Tomcat
  │
  ▼
Database&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          서버가 여러 대라면 L4 또는 Load Balancer가 요청을 나누고, 각 서버마다 Tomcat이 설치되어 있는 형태가 됩니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;        L4
         │
 ┌───────┼────────┐
 │       │        │
 ▼       ▼        ▼
Tomcat1 Tomcat2 Tomcat3&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;Tomcat 방식의 주요 특징&lt;/h3&gt;

        &lt;ul&gt;
          &lt;li&gt;OS 위에 Tomcat을 직접 설치합니다.&lt;/li&gt;
          &lt;li&gt;서비스마다 Tomcat 디렉터리와 설정을 관리합니다.&lt;/li&gt;
          &lt;li&gt;배포는 주로 WAR 파일을 복사하는 방식으로 진행합니다.&lt;/li&gt;
          &lt;li&gt;서버 증설이 필요하면 VM이나 물리 서버를 추가합니다.&lt;/li&gt;
          &lt;li&gt;Tomcat 기동, 중지, 로그 확인, 설정 변경을 운영자가 직접 관리합니다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          예를 들어 다음과 같은 구조라면 전형적인 Tomcat 방식으로 볼 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;server01
 └─ apache-tomcat-9
      └─ webapps
           └─ cpms.war&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 구조에서는 애플리케이션이 서버의 파일 시스템에 직접 배포되어 있고, Tomcat 프로세스도 해당 서버에서 직접 실행됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Pod 방식은 Tomcat을 컨테이너로 실행하는 구조&lt;/h2&gt;

        &lt;p&gt;
          &lt;strong&gt;Pod 방식&lt;/strong&gt;은 서버에 Tomcat을 직접 설치하지 않습니다.
          대신 Tomcat과 애플리케이션을 하나의 컨테이너 이미지로 만들고, Kubernetes가 그 컨테이너를 Pod 형태로 실행합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;사용자
  │
  ▼
Ingress
  │
  ▼
Service
  │
  ▼
Pod
 └─ Container
     ├─ Tomcat
     └─ cpms.war&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          Pod가 여러 개로 늘어나면 Service가 요청을 여러 Pod로 분산합니다.
          이때 각각의 Pod 안에는 Tomcat이 포함된 컨테이너가 실행됩니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;          Service
             │
 ┌───────────┼───────────┐
 │           │           │
 ▼           ▼           ▼
Pod1        Pod2        Pod3
Tomcat      Tomcat      Tomcat&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;Pod 방식의 주요 특징&lt;/h3&gt;

        &lt;ul&gt;
          &lt;li&gt;Tomcat은 OS에 직접 설치되지 않고 컨테이너 안에서 실행됩니다.&lt;/li&gt;
          &lt;li&gt;배포 단위는 WAR 파일 자체보다 Docker Image 또는 Container Image입니다.&lt;/li&gt;
          &lt;li&gt;확장이 필요하면 VM을 추가하기보다 Pod 개수를 늘립니다.&lt;/li&gt;
          &lt;li&gt;Pod에 장애가 발생하면 Kubernetes가 자동으로 재생성할 수 있습니다.&lt;/li&gt;
          &lt;li&gt;운영자는 서버 프로세스보다 Deployment, Service, Pod, Image 상태를 중심으로 확인합니다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;note-box&quot;&gt;
          &lt;strong&gt;운영 관점의 핵심&lt;/strong&gt;
          Pod 방식에서도 내부적으로 Tomcat이 실행될 수 있습니다.&lt;br&gt;
          다만 운영자가 Tomcat을 서버에 직접 설치해서 관리하는 것이 아니라, Kubernetes가 컨테이너와 Pod 단위로 실행 상태를 관리한다는 점이 다릅니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Tomcat 방식과 Pod 방식 비교&lt;/h2&gt;

        &lt;p&gt;
          두 방식의 차이는 실행 위치, 배포 단위, 확장 방식, 장애 대응 방식에서 가장 뚜렷하게 나타납니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;Tomcat 방식&lt;/th&gt;
              &lt;th&gt;Pod 방식&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;실행 위치&lt;/td&gt;
              &lt;td&gt;OS 또는 VM 위에서 직접 실행&lt;/td&gt;
              &lt;td&gt;컨테이너 안에서 실행되고 Pod로 관리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;배포 단위&lt;/td&gt;
              &lt;td&gt;WAR 파일 복사 또는 교체&lt;/td&gt;
              &lt;td&gt;Docker Image 또는 Container Image 배포&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확장 방식&lt;/td&gt;
              &lt;td&gt;VM 또는 서버 추가&lt;/td&gt;
              &lt;td&gt;Pod 개수 증가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;장애 대응&lt;/td&gt;
              &lt;td&gt;Tomcat 재기동 또는 서버 조치&lt;/td&gt;
              &lt;td&gt;Pod 자동 재생성 또는 Replica 유지&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 방식&lt;/td&gt;
              &lt;td&gt;운영자가 직접 프로세스와 파일 관리&lt;/td&gt;
              &lt;td&gt;Kubernetes가 선언된 상태를 기준으로 자동 관리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확인 명령&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;ps -ef | grep tomcat&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;실무에서 말하는 “톰캣 방식”과 “Pod 방식”&lt;/h2&gt;

        &lt;p&gt;
          운영 환경에서는 “이 WAS는 톰캣 방식입니다” 또는 “이 WAS는 Pod 방식입니다”라는 표현을 자주 사용합니다.
          여기서 말하는 핵심은 WAS가 어떤 단위로 설치되고 운영되는지입니다.
        &lt;/p&gt;

        &lt;h3&gt;“이 WAS는 톰캣 방식입니다”의 의미&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;VM
 └─ Tomcat 설치
     └─ webapps
         └─ cpms.war&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 말은 보통 서버나 VM에 직접 접속해서 Tomcat 디렉터리, 설정 파일, 로그, WAR 파일을 확인해야 한다는 의미입니다.
          운영자는 서버 안에서 Tomcat 프로세스를 확인하고 필요한 경우 직접 재기동합니다.
        &lt;/p&gt;

        &lt;h3&gt;“이 WAS는 Pod 방식입니다”의 의미&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;Kubernetes
 └─ Pod
     └─ Tomcat Container
         └─ cpms.war&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 말은 WAS가 Kubernetes 환경에서 Pod로 실행된다는 의미입니다.
          이 경우 서버에 접속해서 Tomcat 설치 경로를 찾기보다, 먼저 Namespace, Deployment, Pod, Container Image를 확인해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;실제 서버에서 확인하는 방법&lt;/h2&gt;

        &lt;p&gt;
          운영 중인 WAS가 Tomcat 방식인지 Pod 방식인지 확인하려면 먼저 접속 대상이 일반 서버인지 Kubernetes 클러스터인지 확인해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;Tomcat 방식 확인&lt;/h3&gt;

        &lt;p&gt;
          서버에 접속한 뒤 Tomcat 또는 Java 프로세스를 확인합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ps -ef | grep tomcat&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          또는 다음처럼 Java 프로세스를 확인할 수도 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ps -ef | grep java&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          결과에 다음과 같은 값이 보이면 Tomcat이 서버에서 직접 실행 중일 가능성이 높습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;java -Dcatalina.home=/apache-tomcat-9&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          &lt;code&gt;catalina.home&lt;/code&gt;이나 &lt;code&gt;apache-tomcat&lt;/code&gt; 경로가 보인다면, 해당 서버에 Tomcat이 설치되어 있고 그 Tomcat이 애플리케이션을 실행하고 있다고 볼 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;Pod 방식 확인&lt;/h3&gt;

        &lt;p&gt;
          Kubernetes 환경에서는 Pod 목록을 먼저 확인합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          결과가 다음과 같이 나오면 애플리케이션이 Pod 단위로 실행 중인 것입니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;cpms-6d5b8b8c6c-2jklm&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          특정 Pod의 상세 정보를 확인하려면 다음 명령을 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl describe pod cpms-xxxx&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          상세 정보 안에서 Container와 Image 항목을 확인합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;Container
  Image : tomcat:9-jdk17&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          여기서 &lt;code&gt;tomcat:9-jdk17&lt;/code&gt;과 같은 이미지가 보이면 Tomcat이 컨테이너 이미지 안에 포함되어 실행되는 구조로 이해할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;어떤 방식이 더 좋다고 단정할 수 있을까&lt;/h2&gt;

        &lt;p&gt;
          Tomcat 방식과 Pod 방식은 어느 하나가 무조건 더 좋다고 단정하기보다 운영 환경에 따라 적합성이 다릅니다.
          단순한 내부 시스템이나 기존 VM 중심 환경에서는 Tomcat 방식이 익숙하고 관리하기 쉬울 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          반대로 서비스가 자주 배포되고, 자동 확장이나 장애 복구가 중요하며, 여러 애플리케이션을 표준화된 방식으로 운영해야 한다면 Pod 방식이 유리합니다.
          특히 Kubernetes 환경에서는 WAS를 개별 서버 단위가 아니라 선언된 리소스와 Replica 단위로 관리하기 때문에 운영 방식 자체가 달라집니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          &lt;strong&gt;정리하면&lt;/strong&gt;
          Tomcat 방식은 “서버에 설치된 Tomcat을 운영하는 방식”입니다.&lt;br&gt;
          Pod 방식은 “Tomcat이 포함된 컨테이너를 Kubernetes Pod로 운영하는 방식”입니다.&lt;br&gt;
          실제 사용 시 장애 확인, 배포 위치, 로그 확인 위치가 달라지므로 두 방식을 명확히 구분해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;마무리&lt;/h2&gt;

        &lt;p&gt;
          &lt;strong&gt;Tomcat 방식&lt;/strong&gt;은 서버 또는 VM에 Tomcat을 직접 설치하고 WAR 파일을 배포하는 전통적인 WAS 운영 방식입니다.
          반면 &lt;strong&gt;Pod 방식&lt;/strong&gt;은 Tomcat과 애플리케이션을 컨테이너 이미지로 만들고 Kubernetes에서 Pod로 실행하는 방식입니다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 장애가 발생했을 때 Tomcat 프로세스를 직접 확인해야 하는지, 아니면 Pod 상태와 Container Image를 확인해야 하는지는 운영 방식에 따라 달라집니다.
          관리자 입장에서 이 차이를 알고 있으면 배포, 장애 대응, 확장 작업을 훨씬 빠르게 판단할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section class=&quot;tag-admin-list&quot; aria-label=&quot;관리자 입력용 태그&quot;&gt;
        &lt;p&gt;&lt;strong&gt;관리자 입력용 태그 10개:&lt;/strong&gt; Tomcat 방식, Pod 방식, Kubernetes, WAS 운영, Tomcat 배포, Docker Image, 컨테이너 운영, kubectl, VM 서버, 인프라 운영&lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/tomcat-pod-was-architecture#blogposting&quot;,
        &quot;headline&quot;: &quot;Tomcat 방식과 Pod 방식 차이, WAS 운영 구조 쉽게 이해하기&quot;,
        &quot;description&quot;: &quot;Tomcat 방식과 Kubernetes Pod 방식의 차이를 WAS 운영 관점에서 쉽게 정리하고, 배포·확장·장애 대응·서버 확인 방법까지 설명한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/tomcat-pod-was-architecture&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-og-image.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;Tomcat 방식&quot;,
          &quot;Pod 방식&quot;,
          &quot;Kubernetes&quot;,
          &quot;WAS 운영&quot;,
          &quot;컨테이너 운영&quot;
        ],
        &quot;keywords&quot;: [
          &quot;Tomcat 방식&quot;,
          &quot;Pod 방식&quot;,
          &quot;Kubernetes&quot;,
          &quot;WAS 운영&quot;,
          &quot;Tomcat 배포&quot;,
          &quot;Docker Image&quot;,
          &quot;Pod 확장&quot;,
          &quot;컨테이너 운영&quot;,
          &quot;kubectl&quot;,
          &quot;VM 서버&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/tomcat-pod-was-architecture#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;인프라&quot;,
            &quot;item&quot;: &quot;https://example.com/category/infrastructure&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;Tomcat 방식과 Pod 방식 차이&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/ETC</category>
      <category>Docker Image</category>
      <category>kubectl</category>
      <category>kubernetes</category>
      <category>Pod 방식</category>
      <category>Pod 확장</category>
      <category>Tomcat 방식</category>
      <category>tomcat 배포</category>
      <category>VM 서버</category>
      <category>WAS 운영</category>
      <category>컨테이너 운영</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/580</guid>
      <comments>https://togethergrow.tistory.com/entry/Tomcat-%EB%B0%A9%EC%8B%9D%EA%B3%BC-Pod-%EB%B0%A9%EC%8B%9D-%EC%B0%A8%EC%9D%B4-WAS-%EC%9A%B4%EC%98%81-%EA%B5%AC%EC%A1%B0-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0#entry580comment</comments>
      <pubDate>Mon, 29 Jun 2026 16:35:47 +0900</pubDate>
    </item>
    <item>
      <title>oracle to postgresql ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법</title>
      <link>https://togethergrow.tistory.com/entry/oracle-to-postgresql-ORA-00943-%EC%98%A4%EB%A5%98-Oracle-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90%EC%99%80-%EC%8A%A4%ED%82%A4%EB%A7%88-%ED%99%95%EC%9D%B8-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;oracle_fdw ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Oracle에서 PostgreSQL로 마이그레이션할 때 oracle_fdw 외래 테이블 조회 중 ORA-00943 table or view does not exist 오류가 발생하는 원인과 해결 방법을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;oracle_fdw,ORA-00943,PostgreSQL,Oracle 마이그레이션,foreign table,Oracle schema,대소문자 구분,user mapping,외래 테이블,FDW 오류&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;oracle_fdw ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;PostgreSQL oracle_fdw에서 Oracle 테이블을 찾지 못할 때 schema와 table 옵션을 어떻게 지정해야 하는지 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/oracle-fdw-ora-00943-case-sensitive&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-oracle-fdw-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;oracle_fdw ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Oracle에서 PostgreSQL로 마이그레이션 중 oracle_fdw 외래 테이블 조회 오류를 해결하는 기준을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-oracle-fdw-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }

    .article-wrap pre {
      margin: 18px 0;
      padding: 16px;
      overflow-x: auto;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.12);
    }

    .article-wrap code {
      font-family: Consolas, Monaco, monospace;
      font-size: 0.95em;
    }

    .article-wrap p code,
    .article-wrap li code,
    .article-wrap td code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
    }
  &lt;/style&gt;

  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;Oracle to PostgreSQL Migration&lt;/span&gt;
        &lt;h1&gt;oracle_fdw ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          Oracle에서 PostgreSQL로 마이그레이션하는 과정에서 &lt;code&gt;oracle_fdw&lt;/code&gt; 외래 테이블은 생성되지만 조회 시 &lt;code&gt;ORA-00943: table or view does not exist&lt;/code&gt; 오류가 발생할 수 있다. 이 경우 대부분 Oracle 쪽 스키마명과 테이블명을 PostgreSQL 외래 테이블 옵션에 정확히 지정하지 않아 발생한다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;오류 상황 정리&lt;/h2&gt;

        &lt;p&gt;
          PostgreSQL 15 환경에서 &lt;code&gt;oracle_fdw&lt;/code&gt; 확장을 설치하고 Oracle 12c 데이터베이스에 연결한 뒤, 외래 서버와 사용자 매핑까지 정상 생성된 상태라면 연결 자체는 어느 정도 준비된 상태로 볼 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          문제는 외래 테이블 생성까지는 성공하지만 실제 조회 시점에 Oracle 테이블을 찾지 못한다는 점이다. 이때 다음과 같은 오류가 발생한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ERROR: Oracle table &quot;public&quot;.&quot;emp&quot; for foreign table &quot;test&quot; does not exist or does not allow read access
DETAIL: ORA-00943: table or view does not exist.
HINT: Oracle table names are case sensitive (normally all uppercase).&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 메시지에서 핵심은 &lt;code&gt;&quot;public&quot;.&quot;emp&quot;&lt;/code&gt;다. PostgreSQL의 &lt;code&gt;public&lt;/code&gt; 스키마를 Oracle 스키마처럼 지정했기 때문에, Oracle 입장에서는 &lt;code&gt;PUBLIC.EMP&lt;/code&gt; 또는 대소문자가 반영된 &lt;code&gt;public.emp&lt;/code&gt; 객체를 찾으려 한다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          외래 테이블 생성 성공은 Oracle 실제 테이블 존재 검증을 완료했다는 의미가 아니다.&lt;br&gt;
          조회 시점에 Oracle 테이블 접근이 발생하면서 오류가 드러날 수 있다.&lt;br&gt;
          &lt;code&gt;options(schema 'public', table 'emp')&lt;/code&gt;에서 schema는 PostgreSQL schema가 아니라 Oracle schema다.&lt;br&gt;
          Oracle에서 따옴표 없이 만든 객체명은 보통 대문자로 저장된다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;가장 흔한 원인: Oracle 스키마명을 public으로 잘못 지정&lt;/h2&gt;

        &lt;p&gt;
          PostgreSQL에서 기본 스키마가 &lt;code&gt;public&lt;/code&gt;이라서 외래 테이블 옵션에도 &lt;code&gt;schema 'public'&lt;/code&gt;을 넣는 경우가 많다. 하지만 &lt;code&gt;oracle_fdw&lt;/code&gt;의 &lt;code&gt;schema&lt;/code&gt; 옵션은 PostgreSQL의 스키마가 아니라 Oracle 쪽 owner 또는 schema를 의미한다.
        &lt;/p&gt;
        &lt;p&gt;
          예를 들어 Oracle 테이블이 &lt;code&gt;PROPONEST_SAAS.TEST1&lt;/code&gt;이라면 외래 테이블 옵션도 Oracle 기준으로 작성해야 한다. PostgreSQL 안에서 외래 테이블을 어느 스키마에 만들지는 &lt;code&gt;CREATE FOREIGN TABLE&lt;/code&gt;의 이름 앞에 붙이는 PostgreSQL 스키마로 결정한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;의미&lt;/th&gt;
              &lt;th&gt;예시&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL 외래 테이블 위치&lt;/td&gt;
              &lt;td&gt;PostgreSQL 안에서 외래 테이블이 생성될 스키마&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;public.test1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;options(schema ...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Oracle 쪽 테이블 owner 또는 schema&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;PROPONEST_SAAS&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;options(table ...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Oracle 쪽 실제 테이블명&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;TEST1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;user mapping&lt;/td&gt;
              &lt;td&gt;Oracle에 접속할 계정 정보&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;오라클유저아이디&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;해결 예시: Oracle 객체명을 대문자로 지정&lt;/h2&gt;

        &lt;p&gt;
          Oracle에서 다음처럼 큰따옴표 없이 테이블을 만들었다면 실제 객체명은 보통 대문자로 저장된다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE TABLE test1 (
    empno NUMBER
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 경우 Oracle 내부에서는 &lt;code&gt;TEST1&lt;/code&gt;로 저장된다. 따라서 PostgreSQL의 외래 테이블 옵션에도 대문자로 지정하는 것이 안전하다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE FOREIGN TABLE public.test1 (
    empno numeric
)
SERVER ora
OPTIONS (
    schema 'PROPONEST_SAAS',
    table 'TEST1'
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          만약 Oracle 테이블이 &lt;code&gt;EMP&lt;/code&gt;이고 owner가 &lt;code&gt;PROPONEST_SAAS&lt;/code&gt;라면 다음과 같이 작성한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE FOREIGN TABLE public.emp (
    empno numeric
)
SERVER ora
OPTIONS (
    schema 'PROPONEST_SAAS',
    table 'EMP'
);&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            운영 환경에서는 &lt;code&gt;schema 'public'&lt;/code&gt;, &lt;code&gt;table 'emp'&lt;/code&gt;처럼 PostgreSQL 기준으로 작성하지 말고, Oracle의 실제 owner와 object name을 기준으로 작성해야 한다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Oracle에서 실제 스키마와 테이블명 확인하기&lt;/h2&gt;

        &lt;p&gt;
          먼저 Oracle에 직접 접속해서 테이블 owner와 table name을 확인해야 한다. 같은 이름의 테이블이라도 어떤 owner에 있는지에 따라 접근 방식이 달라진다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT owner, table_name
FROM all_tables
WHERE table_name = 'TEST1';&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          특정 문자열이 포함된 테이블을 찾고 싶다면 다음처럼 조회할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT owner, table_name
FROM all_tables
WHERE table_name LIKE '%TEST%';&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          현재 Oracle 접속 계정이 해당 테이블을 직접 조회할 수 있는지도 확인해야 한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT *
FROM PROPONEST_SAAS.TEST1
WHERE ROWNUM &amp;lt;= 10;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          위 쿼리가 Oracle에서 실패한다면 PostgreSQL의 &lt;code&gt;oracle_fdw&lt;/code&gt;에서도 조회할 수 없다. 이 경우 PostgreSQL 설정 문제가 아니라 Oracle 권한 또는 객체명 문제를 먼저 해결해야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;권한 문제도 함께 확인해야 한다&lt;/h2&gt;

        &lt;p&gt;
          오류 메시지에는 “table does not exist or does not allow read access”라는 표현이 함께 나온다. 즉 실제로 테이블이 없을 수도 있고, 테이블은 있지만 Oracle 접속 계정에 SELECT 권한이 없을 수도 있다.
        &lt;/p&gt;
        &lt;p&gt;
          &lt;code&gt;create user mapping&lt;/code&gt;에 지정한 Oracle 계정이 테이블 owner가 아니라면, Oracle에서 해당 계정에 명시적으로 조회 권한을 부여해야 한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;GRANT SELECT ON PROPONEST_SAAS.TEST1 TO ORACLE_USER_ID;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          특히 role을 통해 부여된 권한은 외부 접속이나 특정 실행 환경에서 기대한 방식으로 동작하지 않을 수 있으므로, 마이그레이션 작업용 계정에는 필요한 테이블에 대해 직접 권한을 부여하는 방식이 명확하다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 항목&lt;/th&gt;
              &lt;th&gt;점검 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Oracle 테이블 존재 여부&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;all_tables&lt;/code&gt;에서 owner와 table_name을 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Oracle SELECT 가능 여부&lt;/td&gt;
              &lt;td&gt;user mapping에 사용한 Oracle 계정으로 직접 SELECT를 수행한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;대소문자&lt;/td&gt;
              &lt;td&gt;따옴표 없이 만든 Oracle 객체는 보통 대문자로 지정한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;schema 옵션&lt;/td&gt;
              &lt;td&gt;PostgreSQL 스키마가 아니라 Oracle owner를 입력한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;table 옵션&lt;/td&gt;
              &lt;td&gt;Oracle의 실제 table_name을 입력한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;user mapping은 어떻게 이해해야 하나&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;create user mapping&lt;/code&gt;은 PostgreSQL 사용자와 Oracle 접속 계정을 연결하는 설정이다. 여기서 &lt;code&gt;FOR&lt;/code&gt; 뒤에는 PostgreSQL에서 외래 테이블을 조회할 사용자명을 넣고, &lt;code&gt;OPTIONS(user ..., password ...)&lt;/code&gt;에는 Oracle 계정 정보를 넣는다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE USER MAPPING FOR pg_user
SERVER ora
OPTIONS (
    user 'ORACLE_USER_ID',
    password 'ORACLE_PASSWORD'
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          예를 들어 PostgreSQL에서 &lt;code&gt;postgres&lt;/code&gt; 사용자로 조회할 예정이라면 다음과 같은 구조가 된다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;GRANT USAGE ON FOREIGN SERVER ora TO postgres;

CREATE USER MAPPING FOR postgres
SERVER ora
OPTIONS (
    user 'PROPONEST_SAAS',
    password 'oracle_password'
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이때 Oracle 계정 &lt;code&gt;PROPONEST_SAAS&lt;/code&gt;가 자기 소유의 &lt;code&gt;TEST1&lt;/code&gt; 테이블을 조회한다면 별도 권한 부여가 필요 없을 수 있다. 반대로 다른 owner의 테이블을 조회한다면 Oracle 쪽에서 SELECT 권한이 필요하다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;올바른 생성 순서 예시&lt;/h2&gt;

        &lt;p&gt;
          아래는 Oracle owner가 &lt;code&gt;PROPONEST_SAAS&lt;/code&gt;, Oracle 테이블명이 &lt;code&gt;TEST1&lt;/code&gt;, PostgreSQL 사용자명이 &lt;code&gt;postgres&lt;/code&gt;인 경우의 기본 예시다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE EXTENSION oracle_fdw;

CREATE SERVER ora
FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (
    dbserver '//000.00.00.236:1521/orcl'
);

GRANT USAGE ON FOREIGN SERVER ora TO postgres;

CREATE USER MAPPING FOR postgres
SERVER ora
OPTIONS (
    user 'PROPONEST_SAAS',
    password 'oracle_password'
);

CREATE FOREIGN TABLE public.test1 (
    empno numeric
)
SERVER ora
OPTIONS (
    schema 'PROPONEST_SAAS',
    table 'TEST1'
);

SELECT *
FROM public.test1;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          PostgreSQL에서 외래 테이블 이름은 &lt;code&gt;public.test1&lt;/code&gt;처럼 소문자로 만들어도 된다. 중요한 것은 &lt;code&gt;OPTIONS&lt;/code&gt; 안의 &lt;code&gt;schema&lt;/code&gt;와 &lt;code&gt;table&lt;/code&gt; 값이 Oracle 기준이라는 점이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IMPORT FOREIGN SCHEMA를 사용하는 방법&lt;/h2&gt;

        &lt;p&gt;
          수동으로 &lt;code&gt;CREATE FOREIGN TABLE&lt;/code&gt;을 작성하다 보면 컬럼 타입, 테이블명, 대소문자, owner를 잘못 지정하기 쉽다. Oracle에 있는 테이블을 PostgreSQL 외래 테이블로 가져올 때는 &lt;code&gt;IMPORT FOREIGN SCHEMA&lt;/code&gt;를 쓰는 방법도 검토할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;IMPORT FOREIGN SCHEMA &quot;PROPONEST_SAAS&quot;
LIMIT TO (&quot;TEST1&quot;)
FROM SERVER ora
INTO public;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 방식은 Oracle 쪽 스키마에서 테이블 정의를 읽어 PostgreSQL 외래 테이블을 생성하므로, 수동 작성보다 실수를 줄일 수 있다. 다만 Oracle 객체명과 권한 문제는 여전히 동일하게 적용된다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;IMPORT FOREIGN SCHEMA를 쓰면 좋은 경우&lt;/strong&gt;
          테이블 수가 많다.&lt;br&gt;
          컬럼 타입을 일일이 맞추기 어렵다.&lt;br&gt;
          대소문자와 컬럼 정의 실수를 줄이고 싶다.&lt;br&gt;
          마이그레이션 전 Oracle 테이블 구조를 빠르게 확인하고 싶다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;대소문자 규칙을 정확히 이해하기&lt;/h2&gt;

        &lt;p&gt;
          Oracle과 PostgreSQL은 식별자 대소문자 처리 방식이 다르다. Oracle은 큰따옴표 없이 만든 객체명을 대문자로 저장하고, PostgreSQL은 큰따옴표 없이 만든 객체명을 소문자로 접는다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;DBMS&lt;/th&gt;
              &lt;th&gt;생성 SQL&lt;/th&gt;
              &lt;th&gt;실제 저장 이름&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Oracle&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;CREATE TABLE test1 (...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;TEST1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Oracle&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;CREATE TABLE &quot;test1&quot; (...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;test1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;CREATE TABLE test1 (...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;test1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;CREATE TABLE &quot;TEST1&quot; (...)&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;TEST1&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          따라서 Oracle에서 일반적으로 생성한 테이블이라면 &lt;code&gt;oracle_fdw&lt;/code&gt; 옵션에는 대문자 owner와 대문자 table명을 넣는 것이 기본이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;환경변수 설정에서 점검할 부분&lt;/h2&gt;

        &lt;p&gt;
          현재 오류는 Oracle 라이브러리 로딩 실패라기보다 Oracle 객체 조회 문제에 가깝다. 그래도 운영 환경에서는 환경변수 오타와 라이브러리 경로도 정리해두는 것이 좋다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;export PG_HOME=/usr/pgsql-15
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$PG_HOME/bin:$ORACLE_HOME/bin:$PATH&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          제시된 설정에는 &lt;code&gt;$LB_LIBRARY_PATH&lt;/code&gt;처럼 보이는 오타 가능성이 있다. 일반적으로는 &lt;code&gt;$LD_LIBRARY_PATH&lt;/code&gt;를 사용한다. 또한 &lt;code&gt;PATH&lt;/code&gt;에는 실행 파일 경로를 넣고, 라이브러리 경로는 &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;에 두는 식으로 분리하는 것이 명확하다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            라이브러리 경로 문제가 있으면 보통 extension 로딩이나 Oracle 접속 단계에서 다른 오류가 발생한다. 현재처럼 외래 테이블 조회 시 ORA-00943이 나온다면 우선 Oracle owner, table name, SELECT 권한을 확인하는 것이 맞다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;자주 하는 실수&lt;/h2&gt;

        &lt;p&gt;
          oracle_fdw를 처음 사용할 때 가장 많이 헷갈리는 부분은 PostgreSQL의 스키마와 Oracle의 스키마를 같은 의미로 생각하는 것이다. 외래 테이블은 PostgreSQL에 만들어지지만 실제 데이터는 Oracle에 있으므로, 원격 객체를 가리키는 옵션은 Oracle 기준으로 작성해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;실수&lt;/th&gt;
              &lt;th&gt;문제점&lt;/th&gt;
              &lt;th&gt;수정 방향&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;schema 'public'&lt;/code&gt; 사용&lt;/td&gt;
              &lt;td&gt;Oracle에 PUBLIC owner의 테이블이 있다고 가정하게 된다.&lt;/td&gt;
              &lt;td&gt;Oracle 실제 owner인 &lt;code&gt;PROPONEST_SAAS&lt;/code&gt; 등을 사용한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;table 'emp'&lt;/code&gt; 사용&lt;/td&gt;
              &lt;td&gt;Oracle의 일반 테이블명은 보통 &lt;code&gt;EMP&lt;/code&gt;로 저장된다.&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;table 'EMP'&lt;/code&gt;처럼 대문자로 지정한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Oracle 권한 미확인&lt;/td&gt;
              &lt;td&gt;테이블은 있어도 user mapping 계정이 읽지 못할 수 있다.&lt;/td&gt;
              &lt;td&gt;Oracle에서 직접 SELECT 테스트를 한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL 사용자와 Oracle 사용자를 혼동&lt;/td&gt;
              &lt;td&gt;user mapping의 FOR와 OPTIONS user 의미를 반대로 이해할 수 있다.&lt;/td&gt;
              &lt;td&gt;FOR는 PostgreSQL 사용자, OPTIONS user는 Oracle 사용자로 이해한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;점검 순서&lt;/h2&gt;

        &lt;p&gt;
          같은 오류가 반복된다면 다음 순서대로 확인하는 것이 가장 빠르다. 연결 자체가 되는지보다, Oracle에서 실제로 어떤 이름과 권한으로 테이블을 볼 수 있는지가 핵심이다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;Oracle에 user mapping에 입력한 계정으로 직접 접속한다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;SELECT owner, table_name FROM all_tables&lt;/code&gt;로 실제 owner와 table명을 확인한다.&lt;/li&gt;
          &lt;li&gt;Oracle에서 &lt;code&gt;SELECT * FROM OWNER.TABLE_NAME&lt;/code&gt;이 되는지 확인한다.&lt;/li&gt;
          &lt;li&gt;PostgreSQL 외래 테이블의 &lt;code&gt;options(schema ...)&lt;/code&gt;에 Oracle owner를 대문자로 입력한다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;options(table ...)&lt;/code&gt;에 Oracle table_name을 대문자로 입력한다.&lt;/li&gt;
          &lt;li&gt;필요하면 &lt;code&gt;IMPORT FOREIGN SCHEMA&lt;/code&gt;로 외래 테이블을 자동 생성한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          이 사례의 핵심 원인은 &lt;code&gt;oracle_fdw&lt;/code&gt;가 PostgreSQL의 &lt;code&gt;public.emp&lt;/code&gt;가 아니라 Oracle의 &lt;code&gt;public.emp&lt;/code&gt;를 찾으려고 했다는 점이다. Oracle 쪽에 실제로 &lt;code&gt;PUBLIC.EMP&lt;/code&gt;가 없거나 해당 계정이 읽을 수 없다면 ORA-00943 오류가 발생한다.
        &lt;/p&gt;
        &lt;p&gt;
          Oracle에서 큰따옴표 없이 만든 테이블은 보통 대문자로 저장되므로, &lt;code&gt;schema 'PROPONEST_SAAS'&lt;/code&gt;, &lt;code&gt;table 'TEST1'&lt;/code&gt;처럼 Oracle 실제 owner와 table명을 기준으로 지정해야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          관리자 입장에서 가장 안전한 대응은 Oracle에서 먼저 user mapping 계정으로 직접 SELECT를 확인한 뒤, PostgreSQL의 foreign table 옵션을 Oracle 기준으로 다시 만드는 것이다. 테이블 수가 많다면 &lt;code&gt;IMPORT FOREIGN SCHEMA&lt;/code&gt;를 활용하면 수동 지정 실수를 줄일 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/oracle-fdw-ora-00943-case-sensitive#article&quot;,
        &quot;headline&quot;: &quot;oracle_fdw ORA-00943 오류, Oracle 테이블 대소문자와 스키마 확인 방법&quot;,
        &quot;description&quot;: &quot;Oracle에서 PostgreSQL로 마이그레이션할 때 oracle_fdw 외래 테이블 조회 중 ORA-00943 table or view does not exist 오류가 발생하는 원인과 해결 방법을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/oracle-fdw-ora-00943-case-sensitive&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-oracle-fdw-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;oracle_fdw&quot;,
          &quot;ORA-00943&quot;,
          &quot;PostgreSQL&quot;,
          &quot;Oracle 마이그레이션&quot;,
          &quot;foreign table&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;Database&quot;,
          &quot;PostgreSQL&quot;,
          &quot;Oracle Migration&quot;
        ],
        &quot;proficiencyLevel&quot;: &quot;Intermediate&quot;
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/oracle-fdw-ora-00943-case-sensitive#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스&quot;,
            &quot;item&quot;: &quot;https://example.com/database&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;oracle_fdw ORA-00943 오류 해결&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: oracle_fdw, ORA00943, PostgreSQL, Oracle마이그레이션, foreigntable, OracleSchema, 대소문자구분, usermapping, 외래테이블, FDW오류 --&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>FDW 오류</category>
      <category>foreign table</category>
      <category>ORA-00943</category>
      <category>Oracle Schema</category>
      <category>Oracle 마이그레이션</category>
      <category>oracle_fdw</category>
      <category>PostgreSQL</category>
      <category>user mapping</category>
      <category>대소문자 구분</category>
      <category>외래 테이블</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/579</guid>
      <comments>https://togethergrow.tistory.com/entry/oracle-to-postgresql-ORA-00943-%EC%98%A4%EB%A5%98-Oracle-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90%EC%99%80-%EC%8A%A4%ED%82%A4%EB%A7%88-%ED%99%95%EC%9D%B8-%EB%B0%A9%EB%B2%95#entry579comment</comments>
      <pubDate>Sun, 28 Jun 2026 21:05:42 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL invalid page in block 오류 원인과 복구 대응 방법</title>
      <link>https://togethergrow.tistory.com/entry/PostgreSQL-invalid-page-in-block-%EC%98%A4%EB%A5%98-%EC%9B%90%EC%9D%B8%EA%B3%BC-%EB%B3%B5%EA%B5%AC-%EB%8C%80%EC%9D%91-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;PostgreSQL에서 invalid page in block 오류가 발생했을 때 원인, 인덱스와 테이블 손상 구분, 데이터 손실 없는 복구 가능성, pg_dump 이관 방법을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;PostgreSQL,invalid page in block,데이터 손상,zero_damaged_pages,pg_dump,REINDEX,VACUUM FULL,pg_amcheck,테이블 복구,인덱스 손상&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;PostgreSQL invalid page in block 오류 발생 시 인덱스 손상과 테이블 손상을 구분하고, 백업 복구와 덤프 이관 중심의 대응 절차를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/postgresql-invalid-page-in-block-recovery&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-postgresql-corruption-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;PostgreSQL 테이블 또는 인덱스에서 invalid page in block 오류가 발생했을 때의 복구 기준과 이관 절차를 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-postgresql-corruption-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }

    .article-wrap pre {
      margin: 18px 0;
      padding: 16px;
      overflow-x: auto;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.12);
    }

    .article-wrap code {
      font-family: Consolas, Monaco, monospace;
      font-size: 0.95em;
    }

    .article-wrap p code,
    .article-wrap li code,
    .article-wrap td code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
    }
  &lt;/style&gt;

  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;PostgreSQL Data Corruption&lt;/span&gt;
        &lt;h1&gt;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          PostgreSQL에서 &lt;code&gt;invalid page in block xxxx of relation base/...&lt;/code&gt; 오류가 발생했다면 단순 SQL 오류가 아니라 테이블 또는 인덱스 파일의 물리적 페이지 손상 가능성을 먼저 봐야 한다. 특히 테이블 데이터 페이지가 깨진 경우에는 REINDEX나 VACUUM FULL만으로 데이터 손실 없이 복구하기 어렵다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;오류의 의미&lt;/h2&gt;

        &lt;p&gt;
          PostgreSQL은 테이블과 인덱스를 여러 개의 8KB 페이지 단위로 저장한다. &lt;code&gt;invalid page in block&lt;/code&gt; 오류는 PostgreSQL이 특정 relation 파일의 특정 block을 읽었는데, 그 페이지 헤더나 내부 구조가 정상적인 PostgreSQL 페이지 형식이 아니라고 판단했다는 뜻이다.
        &lt;/p&gt;
        &lt;p&gt;
          오류 메시지의 &lt;code&gt;base/16395/361204&lt;/code&gt; 같은 경로는 데이터베이스 OID와 relation 파일 번호를 나타낸다. 여기서 마지막 숫자에 해당하는 relfilenode를 조회하면 어떤 테이블이나 인덱스 파일에서 문제가 발생했는지 추적할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT
    c.relfilenode,
    n.nspname AS schema_name,
    c.relname,
    c.relkind
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE c.relfilenode = 361204;&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;relkind 해석&lt;/strong&gt;
          &lt;code&gt;r&lt;/code&gt;: 일반 테이블&lt;br&gt;
          &lt;code&gt;i&lt;/code&gt;: 인덱스&lt;br&gt;
          &lt;code&gt;S&lt;/code&gt;: 시퀀스&lt;br&gt;
          &lt;code&gt;t&lt;/code&gt;: TOAST 테이블&lt;br&gt;
          &lt;code&gt;m&lt;/code&gt;: materialized view
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;질문1: invalid page in block 오류는 왜 발생하나&lt;/h2&gt;

        &lt;p&gt;
          가장 직접적인 원인은 PostgreSQL이 읽어야 할 데이터 파일의 일부 페이지가 손상된 것이다. 원인은 하나로 단정하기 어렵지만, 일반적으로 비정상 종료, 디스크 문제, 파일시스템 손상, 백신 또는 보안 프로그램의 데이터 디렉터리 간섭, 저장장치 캐시 문제, 메모리 오류, 강제 전원 종료 등이 원인이 될 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          PostgreSQL 자체가 정상적으로 WAL을 기록하고 종료되었다면 이런 형태의 페이지 손상은 흔하지 않다. 그래서 같은 데이터베이스 안에서 테이블과 인덱스 손상이 점차 늘어나는 것처럼 보인다면, 데이터베이스 내부 복구만 볼 것이 아니라 OS와 저장장치 상태를 반드시 함께 점검해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;가능 원인&lt;/th&gt;
              &lt;th&gt;확인할 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;비정상 종료&lt;/td&gt;
              &lt;td&gt;Windows 이벤트 로그, PostgreSQL 로그에서 강제 종료, 전원 차단, 프로세스 강제 종료 이력을 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;디스크 또는 SSD 문제&lt;/td&gt;
              &lt;td&gt;SMART 정보, 불량 섹터, 컨트롤러 오류, 파일시스템 오류를 점검한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;메모리 오류&lt;/td&gt;
              &lt;td&gt;메모리 진단 도구로 RAM 오류 여부를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;백신·보안 프로그램 간섭&lt;/td&gt;
              &lt;td&gt;PostgreSQL data directory를 실시간 검사 대상에서 제외했는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;스토리지 동기화 도구&lt;/td&gt;
              &lt;td&gt;OneDrive, 백업 동기화, 클라우드 동기화 폴더 안에 DB data directory가 있는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;강제 중지 습관&lt;/td&gt;
              &lt;td&gt;서비스 종료 대신 프로세스 강제 종료, PC 전원 강제 종료가 반복되는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            Windows 11 Home 환경에서 로컬 개발용으로 PostgreSQL을 운영한다면 절전, 강제 재부팅, 백신 실시간 검사, 클라우드 동기화 폴더 사용 여부를 우선 확인하는 것이 좋다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;인덱스 손상과 테이블 손상은 대응이 다르다&lt;/h2&gt;

        &lt;p&gt;
          같은 &lt;code&gt;invalid page in block&lt;/code&gt; 오류라도 손상된 relation이 인덱스인지 테이블인지에 따라 복구 가능성이 크게 달라진다. 인덱스가 깨진 경우에는 원본 테이블 데이터가 살아 있다면 인덱스를 버리고 다시 만들 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          반면 테이블 자체의 데이터 페이지가 깨진 경우에는 그 페이지 안에 있던 row가 손상된 것이다. 이 경우 &lt;code&gt;REINDEX&lt;/code&gt;는 해결책이 아니다. &lt;code&gt;VACUUM FULL&lt;/code&gt;도 테이블을 다시 쓰는 과정에서 손상 페이지를 읽어야 하므로 오류가 발생할 수 있다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;손상 대상&lt;/th&gt;
              &lt;th&gt;가능한 조치&lt;/th&gt;
              &lt;th&gt;데이터 손실 가능성&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;인덱스&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;REINDEX INDEX&lt;/code&gt;, &lt;code&gt;REINDEX TABLE&lt;/code&gt;, 인덱스 재생성&lt;/td&gt;
              &lt;td&gt;낮음. 테이블 데이터가 정상이라면 대부분 복구 가능하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;PK 인덱스&lt;/td&gt;
              &lt;td&gt;PK 인덱스 재생성 또는 제약조건 재생성&lt;/td&gt;
              &lt;td&gt;테이블 데이터가 정상이어야 한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;테이블 heap&lt;/td&gt;
              &lt;td&gt;백업 복구, 정상 row 덤프, 손상 페이지 제외 이관&lt;/td&gt;
              &lt;td&gt;높음. 손상 페이지의 row는 복구가 어려울 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;TOAST 테이블&lt;/td&gt;
              &lt;td&gt;대형 컬럼 데이터 복구 또는 해당 row 제외 이관&lt;/td&gt;
              &lt;td&gt;높음. text, bytea, jsonb 등 큰 컬럼이 영향을 받을 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;시퀀스&lt;/td&gt;
              &lt;td&gt;시퀀스 재생성 후 &lt;code&gt;setval&lt;/code&gt;로 보정&lt;/td&gt;
              &lt;td&gt;낮음. 값 재설정으로 대응 가능한 경우가 많다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;질문2: 테이블 손상도 데이터 손실 없이 복구할 수 있나&lt;/h2&gt;

        &lt;p&gt;
          결론부터 말하면, 백업이나 정상 복제본이 없다면 테이블 데이터 페이지 손상을 완전히 데이터 손실 없이 복구하는 방법은 거의 없다. PostgreSQL이 손상 페이지를 읽지 못한다는 것은 그 페이지 안의 row를 정상적인 tuple로 해석할 수 없다는 의미이기 때문이다.
        &lt;/p&gt;
        &lt;p&gt;
          데이터 손실 없이 복구할 수 있는 경우는 보통 세 가지다. 첫째, 손상 전 정상 백업이 있다. 둘째, WAL 아카이브가 있어 PITR로 손상 전 시점까지 복구할 수 있다. 셋째, 손상되지 않은 Standby 또는 파일시스템 스냅샷이 있다.
        &lt;/p&gt;
        &lt;p&gt;
          &lt;code&gt;SET zero_damaged_pages = on;&lt;/code&gt;은 복구 기능이라기보다 손상된 페이지를 0으로 처리하고 나머지 정상 페이지를 읽기 위한 응급 조치에 가깝다. 이 설정 후 &lt;code&gt;VACUUM FULL&lt;/code&gt;을 수행하면 손상 페이지에 있던 row는 사라질 수 있으므로, 원본을 보존하지 않고 바로 적용하면 되돌리기 어렵다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;데이터 손실 없는 복구 가능 조건&lt;/strong&gt;
          정상 백업본이 있다.&lt;br&gt;
          WAL 아카이브가 있어 PITR이 가능하다.&lt;br&gt;
          손상 전 파일시스템 스냅샷이 있다.&lt;br&gt;
          정상 Standby 서버가 있다.&lt;br&gt;
          손상된 페이지가 인덱스에만 있고 테이블 데이터는 정상이다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;zero_damaged_pages 사용 전 반드시 해야 할 일&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;zero_damaged_pages&lt;/code&gt;는 매우 위험한 응급 옵션이다. 손상 페이지를 건너뛰고 나머지 데이터를 읽게 해주지만, 손상 페이지의 row는 사실상 버려진다. 따라서 원본 데이터 디렉터리 복사본을 확보하기 전에 이 설정으로 VACUUM FULL이나 대량 작업을 수행하면 복구 가능성이 더 낮아질 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          실무 기준으로 보면 우선 PostgreSQL을 중지하고 data directory 전체를 별도 디스크에 파일 단위로 복사해 보존해야 한다. 그 다음 복사본 또는 별도 인스턴스에서 손상 범위 확인, 덤프, 부분 복구를 시도하는 것이 안전하다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;PostgreSQL 서비스를 중지한다.&lt;/li&gt;
          &lt;li&gt;data directory 전체를 별도 저장장치에 복사한다.&lt;/li&gt;
          &lt;li&gt;복사본을 기준으로 복구 테스트를 진행한다.&lt;/li&gt;
          &lt;li&gt;운영 원본에는 바로 &lt;code&gt;zero_damaged_pages&lt;/code&gt;와 &lt;code&gt;VACUUM FULL&lt;/code&gt;을 적용하지 않는다.&lt;/li&gt;
          &lt;li&gt;손상 페이지를 zero 처리한 뒤에는 해당 page의 row 손실을 전제로 검증한다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;pre&gt;&lt;code&gt;-- 응급 덤프나 정상 row 회수 목적일 때만 세션 단위로 사용
SET zero_damaged_pages = on;

-- 이후 가능한 데이터를 별도 테이블이나 파일로 회수
CREATE TABLE recovered_table AS
SELECT *
FROM damaged_table;&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;질문3: 손상이 퍼지는 것처럼 보일 때 PostgreSQL 대응 방향&lt;/h2&gt;

        &lt;p&gt;
          손상이 처음에는 한두 테이블에서만 보이다가 점차 다른 테이블이나 인덱스에서도 발견된다면, 실제로 손상이 계속 확산되고 있거나 원래 여러 곳이 손상되어 있었는데 조회하면서 뒤늦게 발견되는 상황일 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          이 경우 PostgreSQL 안에서 계속 REINDEX, VACUUM FULL을 반복하기보다 새 인스턴스로 이관하는 방식이 안전하다. 다만 &lt;code&gt;pg_dump&lt;/code&gt;가 손상 테이블을 읽다가 중단될 수 있으므로, 정상 객체와 문제 객체를 분리해 덤프해야 한다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            DBMS 내부 작업만 반복하기 전에 디스크, 메모리, OS 이벤트 로그, PostgreSQL 로그를 먼저 확인해야 한다. 원인이 저장장치나 시스템 불안정이라면 새로 덤프해도 같은 문제가 다시 발생할 수 있다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;문제 relation 확인 방법&lt;/h2&gt;

        &lt;p&gt;
          오류 메시지에 나온 relfilenode가 현재 catalog와 일치한다면 다음 쿼리로 손상 대상이 테이블인지 인덱스인지 확인할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT
    pg_relation_filepath(c.oid) AS file_path,
    c.relfilenode,
    n.nspname AS schema_name,
    c.relname,
    c.relkind,
    pg_size_pretty(pg_relation_size(c.oid)) AS relation_size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relfilenode = 361204;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          만약 relfilenode가 바뀌었거나 조회되지 않는다면 &lt;code&gt;pg_relation_filepath&lt;/code&gt;를 기준으로 전체 relation을 확인하거나, 오류가 발생하는 SQL과 실행 계획을 함께 봐야 한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT
    n.nspname AS schema_name,
    c.relname,
    c.relkind,
    pg_relation_filepath(c.oid) AS file_path,
    pg_size_pretty(pg_relation_size(c.oid)) AS size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(c.oid) DESC;&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;문제 테이블을 찾는 점검 쿼리&lt;/h2&gt;

        &lt;p&gt;
          어떤 테이블이 깨졌는지 모르는 상태라면 전체 사용자 테이블을 순차적으로 읽어보는 방식으로 1차 확인할 수 있다. 다만 손상 테이블을 읽는 순간 오류가 발생하므로, 아래와 같은 DO 블록으로 테이블별 성공·실패를 확인하는 방식이 현실적이다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;DO $$
DECLARE
    r record;
    v_count bigint;
BEGIN
    FOR r IN
        SELECT n.nspname, c.relname
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relkind = 'r'
          AND n.nspname NOT IN ('pg_catalog', 'information_schema')
        ORDER BY n.nspname, c.relname
    LOOP
        BEGIN
            EXECUTE format(
                'SELECT count(*) FROM %I.%I',
                r.nspname,
                r.relname
            )
            INTO v_count;

            RAISE NOTICE 'OK %.% rows=%', r.nspname, r.relname, v_count;

        EXCEPTION WHEN OTHERS THEN
            RAISE WARNING 'ERROR %.%: %', r.nspname, r.relname, SQLERRM;
        END;
    END LOOP;
END $$;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          단, &lt;code&gt;count(*)&lt;/code&gt;가 항상 모든 데이터 페이지를 원하는 방식으로 읽는다고 단정할 수는 없다. 더 확실히 확인하려면 인덱스 스캔을 꺼서 순차 스캔을 유도하거나, PostgreSQL 14 환경에서는 &lt;code&gt;pg_amcheck&lt;/code&gt; 같은 점검 도구도 함께 검토할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SET enable_indexscan = off;
SET enable_bitmapscan = off;
SET enable_indexonlyscan = off;

SELECT count(*) FROM schema_name.table_name;&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;pg_dump가 중단될 때 제외하고 이관하는 방법&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;pg_dump&lt;/code&gt;가 특정 테이블이나 시퀀스에서 &lt;code&gt;invalid page in block&lt;/code&gt; 오류로 중단된다면, 문제 객체를 drop할 필요는 없다. 우선 정상 객체를 살리는 것이 중요하므로 문제가 있는 테이블을 제외하고 덤프할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;pg_dump -U postgres -d mydb ^
  -F c ^
  -f mydb_without_bad_tables.dump ^
  -T bad_schema.bad_table&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          여러 테이블을 제외해야 한다면 &lt;code&gt;-T&lt;/code&gt; 옵션을 반복해서 사용할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;pg_dump -U postgres -d mydb ^
  -F c ^
  -f mydb_without_bad_tables.dump ^
  -T bad_schema.bad_table1 ^
  -T bad_schema.bad_table2 ^
  -T bad_schema.bad_table3&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          데이터만 문제가 있고 테이블 구조는 새 인스턴스에 유지하고 싶다면 스키마 덤프와 데이터 덤프를 분리하는 방식이 좋다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 전체 스키마만 덤프
pg_dump -U postgres -d mydb ^
  --schema-only ^
  -f schema_only.sql

-- 정상 데이터만 덤프
pg_dump -U postgres -d mydb ^
  --data-only ^
  -F c ^
  -f data_only_without_bad_tables.dump ^
  -T bad_schema.bad_table&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;권장 방향&lt;/strong&gt;
          문제 테이블을 바로 drop하지 않는다.&lt;br&gt;
          먼저 전체 파일 복사본을 만든다.&lt;br&gt;
          정상 객체를 새 PostgreSQL 인스턴스로 이관한다.&lt;br&gt;
          손상 테이블은 별도 복구 대상으로 분리한다.&lt;br&gt;
          필요한 경우 손상 페이지를 제외하고 회수 가능한 row만 추출한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;손상 테이블에서 일부 데이터라도 회수하는 방법&lt;/h2&gt;

        &lt;p&gt;
          백업이 없고 테이블 데이터 페이지가 손상된 경우에는 완전 복구보다 “읽을 수 있는 row를 최대한 회수”하는 방향으로 접근해야 한다. 이때 원본을 보존한 복사본에서 작업해야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          손상 block 번호를 알고 있다면 &lt;code&gt;ctid&lt;/code&gt;를 이용해 해당 block을 피해서 데이터를 복사하는 방법을 시도할 수 있다. 예를 들어 block 18이 손상되었다면 해당 block을 제외하고 나머지 row를 새 테이블에 담는 식이다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE TABLE recovered_bad_table AS
SELECT *
FROM bad_schema.bad_table
WHERE ctid &amp;lt; '(18,1)'::tid
   OR ctid &amp;gt;= '(19,1)'::tid;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          손상 block이 여러 개라면 조건을 추가해야 한다. 다만 이 방식은 테이블 전체를 안정적으로 읽을 수 있는 상황에서만 성공한다. TOAST 데이터나 다른 block도 손상되어 있다면 중간에 다시 오류가 발생할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;CREATE TABLE recovered_bad_table AS
SELECT *
FROM bad_schema.bad_table
WHERE NOT (
    ctid &amp;gt;= '(18,1)'::tid AND ctid &amp;lt; '(19,1)'::tid
)
AND NOT (
    ctid &amp;gt;= '(25,1)'::tid AND ctid &amp;lt; '(26,1)'::tid
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 방식으로 회수한 뒤에는 row 수, 주요 PK 범위, 업무적으로 중요한 금액·상태값·일자별 집계를 반드시 검증해야 한다. 손상 block에 있던 row는 빠질 수 있기 때문이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;시퀀스에서 오류가 발생할 때&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;pg_dump&lt;/code&gt; 중 시퀀스에서 &lt;code&gt;invalid page in block&lt;/code&gt; 오류가 발생한다면, 해당 시퀀스 파일이 손상되었을 가능성이 있다. 시퀀스는 일반 테이블 데이터와 달리 현재 번호를 관리하는 객체이므로, 연결된 테이블의 최대값을 기준으로 재생성하거나 값을 보정할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 예: id 컬럼 기준으로 시퀀스 값을 보정
SELECT setval(
    'public.my_table_id_seq',
    COALESCE((SELECT max(id) FROM public.my_table), 0) + 1,
    false
);&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          새 인스턴스로 이관할 때는 스키마를 복원한 뒤 시퀀스 값을 업무 테이블의 실제 최대값에 맞춰 다시 세팅하는 방식이 안전하다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;권장 복구 절차&lt;/h2&gt;

        &lt;p&gt;
          현재 환경이 Windows 11 Home, PostgreSQL 14, DB 크기 약 15GB라면 데이터 크기는 비교적 크지 않은 편이다. 따라서 손상 원인을 조사하면서 새 인스턴스로 이관하는 방식이 현실적이다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;단계&lt;/th&gt;
              &lt;th&gt;작업&lt;/th&gt;
              &lt;th&gt;목적&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;1&lt;/td&gt;
              &lt;td&gt;PostgreSQL 중지 후 data directory 전체 복사&lt;/td&gt;
              &lt;td&gt;복구 시도 전 원본 보존&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;2&lt;/td&gt;
              &lt;td&gt;디스크, 메모리, 이벤트 로그, PostgreSQL 로그 점검&lt;/td&gt;
              &lt;td&gt;손상 원인 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;3&lt;/td&gt;
              &lt;td&gt;relfilenode 조회와 테이블별 scan으로 문제 객체 식별&lt;/td&gt;
              &lt;td&gt;인덱스 손상인지 테이블 손상인지 구분&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;4&lt;/td&gt;
              &lt;td&gt;인덱스만 문제라면 REINDEX 수행&lt;/td&gt;
              &lt;td&gt;데이터 손실 없이 인덱스 재생성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;5&lt;/td&gt;
              &lt;td&gt;테이블 손상이면 정상 객체를 pg_dump로 우선 이관&lt;/td&gt;
              &lt;td&gt;살릴 수 있는 데이터 우선 확보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;6&lt;/td&gt;
              &lt;td&gt;문제 테이블은 백업 복구 또는 손상 block 제외 추출&lt;/td&gt;
              &lt;td&gt;부분 데이터 회수&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;7&lt;/td&gt;
              &lt;td&gt;새 PostgreSQL 최신 minor 버전 인스턴스로 복원&lt;/td&gt;
              &lt;td&gt;깨진 클러스터를 계속 사용하지 않기 위함&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;8&lt;/td&gt;
              &lt;td&gt;백업, WAL 아카이브, 정기 복구 테스트 구성&lt;/td&gt;
              &lt;td&gt;재발 시 복구 가능성 확보&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;새 인스턴스로 이관할 때 주의할 점&lt;/h2&gt;

        &lt;p&gt;
          손상된 PostgreSQL 클러스터에서 계속 운영을 이어가는 것은 권장하기 어렵다. 특히 여러 relation에서 오류가 발생한다면 새 data directory를 가진 새 PostgreSQL 인스턴스를 만들고, 정상 덤프본을 복원하는 방향이 안전하다.
        &lt;/p&gt;
        &lt;p&gt;
          이때 PostgreSQL 14의 최신 minor 버전을 사용하는 것이 좋다. 같은 14 버전이라도 minor update에는 데이터 손상과 직접 관련되지 않더라도 안정성, 보안, 복구 관련 수정이 포함될 수 있다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;기존 data directory를 재사용하지 않는다.&lt;/li&gt;
          &lt;li&gt;새 PostgreSQL 인스턴스를 새 경로에 초기화한다.&lt;/li&gt;
          &lt;li&gt;정상 덤프본을 먼저 복원한다.&lt;/li&gt;
          &lt;li&gt;문제 테이블은 별도 복구 결과를 검증 후 반영한다.&lt;/li&gt;
          &lt;li&gt;복원 후 전체 테이블 count, 주요 업무 집계, 제약조건, 시퀀스 값을 점검한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 재발 방지 체크리스트&lt;/h2&gt;

        &lt;p&gt;
          invalid page in block 오류는 한 번 복구했다고 끝나는 문제가 아니다. 원인을 제거하지 않으면 새 인스턴스에서도 다시 발생할 수 있다. 특히 개인 PC나 개발 장비에서는 DBMS를 일반 파일처럼 다루는 과정에서 문제가 생기기 쉽다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;권장 조치&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;백업&lt;/td&gt;
              &lt;td&gt;정기적으로 &lt;code&gt;pg_dump&lt;/code&gt; 또는 물리 백업을 수행하고 복구 테스트까지 진행한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;WAL 보관&lt;/td&gt;
              &lt;td&gt;중요 데이터라면 PITR을 위해 WAL 아카이브 구성을 검토한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;종료 방식&lt;/td&gt;
              &lt;td&gt;PostgreSQL 서비스를 정상 종료하고, PC 강제 종료를 피한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;백신 예외&lt;/td&gt;
              &lt;td&gt;PostgreSQL data directory를 실시간 검사 대상에서 제외한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;스토리지&lt;/td&gt;
              &lt;td&gt;SMART, chkdsk, 제조사 진단 도구로 저장장치 상태를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;동기화 폴더&lt;/td&gt;
              &lt;td&gt;DB data directory를 OneDrive, Dropbox 같은 동기화 폴더에 두지 않는다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;정기 점검&lt;/td&gt;
              &lt;td&gt;주기적으로 로그, 아카이브 실패, 디스크 오류, 테이블 접근 오류를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;질문별 결론&lt;/h2&gt;

        &lt;p&gt;
          첫째, &lt;code&gt;invalid page in block&lt;/code&gt; 오류는 PostgreSQL이 특정 테이블 또는 인덱스 파일의 페이지를 정상적인 데이터 페이지로 해석하지 못할 때 발생한다. 원인은 비정상 종료, 디스크·메모리 문제, 파일시스템 손상, 외부 프로그램 간섭 등 다양하다.
        &lt;/p&gt;
        &lt;p&gt;
          둘째, 테이블 데이터 페이지가 깨진 경우 백업, WAL, 정상 복제본, 스냅샷이 없다면 데이터 손실 없는 완전 복구는 어렵다. 인덱스 손상은 재생성으로 해결될 수 있지만, 테이블 heap 손상은 손상 페이지 안의 row를 복구하기 어렵다.
        &lt;/p&gt;
        &lt;p&gt;
          셋째, 손상이 여러 객체로 늘어나는 상황에서는 기존 클러스터를 계속 고쳐 쓰기보다 새 PostgreSQL 인스턴스로 정상 객체를 이관하고, 문제 테이블은 별도 복구 대상으로 분리하는 것이 좋다. &lt;code&gt;pg_dump -T&lt;/code&gt;로 문제 테이블을 제외할 수 있으며, drop은 최후의 선택으로 두는 편이 안전하다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-invalid-page-in-block-recovery#article&quot;,
        &quot;headline&quot;: &quot;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&quot;,
        &quot;description&quot;: &quot;PostgreSQL에서 invalid page in block 오류가 발생했을 때 원인, 인덱스와 테이블 손상 구분, 데이터 손실 없는 복구 가능성, pg_dump 이관 방법을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/postgresql-invalid-page-in-block-recovery&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-postgresql-corruption-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;PostgreSQL&quot;,
          &quot;invalid page in block&quot;,
          &quot;데이터 손상&quot;,
          &quot;zero_damaged_pages&quot;,
          &quot;pg_dump&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;Database&quot;,
          &quot;PostgreSQL&quot;,
          &quot;Recovery&quot;
        ],
        &quot;proficiencyLevel&quot;: &quot;Intermediate&quot;
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-invalid-page-in-block-recovery#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스&quot;,
            &quot;item&quot;: &quot;https://example.com/database&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;PostgreSQL invalid page in block 오류 원인과 복구 대응 방법&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: PostgreSQL, invalidpageinblock, 데이터손상, zero_damaged_pages, pg_dump, REINDEX, VACUUMFULL, pg_amcheck, 테이블복구, 인덱스손상 --&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>invalid page in block</category>
      <category>pg_amcheck</category>
      <category>pg_dump</category>
      <category>PostgreSQL</category>
      <category>reindex</category>
      <category>vacuum full</category>
      <category>zero_damaged_pages</category>
      <category>데이터 손상</category>
      <category>인덱스 손상</category>
      <category>테이블 복구</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/578</guid>
      <comments>https://togethergrow.tistory.com/entry/PostgreSQL-invalid-page-in-block-%EC%98%A4%EB%A5%98-%EC%9B%90%EC%9D%B8%EA%B3%BC-%EB%B3%B5%EA%B5%AC-%EB%8C%80%EC%9D%91-%EB%B0%A9%EB%B2%95#entry578comment</comments>
      <pubDate>Sun, 28 Jun 2026 21:01:58 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준</title>
      <link>https://togethergrow.tistory.com/entry/PostgreSQL-archivemode-on%EA%B3%BC-always-%EC%B0%A8%EC%9D%B4-%EC%9A%B4%EC%98%81-%ED%99%98%EA%B2%BD%EB%B3%84-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;PostgreSQL archive_mode 설정값 on과 always의 차이를 Primary, Standby, PITR, 복제 환경 기준으로 정리하고 운영 시 주의할 점을 설명합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;PostgreSQL,archive_mode,WAL 아카이빙,archive_command,archive_library,PITR,Standby 서버,Primary 서버,Streaming Replication,백업 복구&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;PostgreSQL에서 archive_mode = on과 always가 Primary와 Standby 환경에서 어떻게 다르게 동작하는지 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/postgresql-archive-mode-on-always&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-postgresql-archive-mode-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;PostgreSQL WAL 아카이빙 설정에서 on과 always의 차이, 사용 사례, 주의사항을 운영 관점에서 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-postgresql-archive-mode-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }

    .article-wrap pre {
      margin: 18px 0;
      padding: 16px;
      overflow-x: auto;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.12);
    }

    .article-wrap code {
      font-family: Consolas, Monaco, monospace;
      font-size: 0.95em;
    }

    .article-wrap p code,
    .article-wrap li code,
    .article-wrap td code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
    }
  &lt;/style&gt;

  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;PostgreSQL WAL Archiving&lt;/span&gt;
        &lt;h1&gt;PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          PostgreSQL의 &lt;code&gt;archive_mode&lt;/code&gt;는 WAL 파일을 아카이브할지 결정하는 핵심 설정이다. 특히 &lt;code&gt;on&lt;/code&gt;과 &lt;code&gt;always&lt;/code&gt;는 Primary 서버에서는 비슷해 보이지만, Standby 서버나 복구 상태에서는 동작 차이가 분명하다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;archive_mode가 하는 일&lt;/h2&gt;

        &lt;p&gt;
          PostgreSQL은 데이터 변경 내용을 WAL, 즉 Write-Ahead Logging 파일에 먼저 기록한다. 이 WAL 파일을 별도 저장소에 보관하면 장애 복구, 백업 복원, 특정 시점 복구인 PITR에 활용할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          &lt;code&gt;archive_mode&lt;/code&gt;는 완료된 WAL 세그먼트를 아카이브 대상으로 보낼지 결정하는 설정이다. 실제 파일 복사나 업로드는 &lt;code&gt;archive_command&lt;/code&gt; 또는 &lt;code&gt;archive_library&lt;/code&gt;가 담당한다.
        &lt;/p&gt;
        &lt;p&gt;
          따라서 &lt;code&gt;archive_mode&lt;/code&gt;만 켜는 것으로 충분하지 않다. 운영 환경에서는 아카이브 명령, 저장소 경로, 실패 재시도, 보관 기간, 복구 테스트까지 함께 설계해야 한다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          &lt;code&gt;archive_mode = on&lt;/code&gt;: 일반적인 Primary 서버 WAL 아카이빙에 사용&lt;br&gt;
          &lt;code&gt;archive_mode = always&lt;/code&gt;: Standby 또는 복구 상태에서도 WAL 아카이빙을 수행할 때 사용&lt;br&gt;
          공통 조건: &lt;code&gt;archive_command&lt;/code&gt; 또는 &lt;code&gt;archive_library&lt;/code&gt; 설정 필요&lt;br&gt;
          대표 목적: 백업, PITR, 재해복구, 복제 환경의 WAL 보관
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;archive_mode = on 동작 방식&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;archive_mode = on&lt;/code&gt;은 PostgreSQL에서 가장 일반적으로 사용하는 WAL 아카이빙 설정이다. Primary 서버가 정상 운영 중일 때 완료된 WAL 세그먼트를 아카이브 대상으로 전달한다.
        &lt;/p&gt;
        &lt;p&gt;
          이 설정은 보통 베이스 백업과 함께 PITR 구성을 만들 때 사용한다. 데이터베이스 전체 백업을 확보한 뒤, 이후 생성되는 WAL 파일을 계속 보관하면 장애 발생 시 원하는 시점까지 복구할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          다만 &lt;code&gt;on&lt;/code&gt;은 Standby 서버가 받은 WAL을 다시 아카이브하는 용도로는 충분하지 않다. Standby 자체에서 WAL 아카이빙을 보장해야 하는 구조라면 &lt;code&gt;always&lt;/code&gt;를 검토해야 한다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;archive_mode = on
archive_command = 'test ! -f /archive/%f &amp;amp;&amp;amp; cp %p /archive/%f'&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;archive_mode = always 동작 방식&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;archive_mode = always&lt;/code&gt;는 Primary 정상 운영 중에는 &lt;code&gt;on&lt;/code&gt;과 큰 차이가 없어 보인다. 차이는 서버가 Standby 모드이거나 archive recovery 상태일 때 나타난다.
        &lt;/p&gt;
        &lt;p&gt;
          &lt;code&gt;always&lt;/code&gt;로 설정하면 Standby 서버도 자신이 받은 WAL 세그먼트를 아카이브할 수 있다. 이 WAL은 Primary에서 스트리밍 복제로 받은 것일 수도 있고, 복구 과정에서 아카이브 저장소로부터 복원한 것일 수도 있다.
        &lt;/p&gt;
        &lt;p&gt;
          즉, &lt;code&gt;always&lt;/code&gt;는 “Standby에서도 WAL 아카이빙을 수행해야 하는가”라는 질문에 대한 설정이다. 단순 Primary 운영 환경에서는 보통 &lt;code&gt;on&lt;/code&gt;으로 충분하지만, Standby를 백업 또는 재해복구 체계의 일부로 활용한다면 &lt;code&gt;always&lt;/code&gt;가 필요할 수 있다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;archive_mode = always
archive_command = 'test ! -f /standby_archive/%f &amp;amp;&amp;amp; cp %p /standby_archive/%f'&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;on과 always 차이 정리&lt;/h2&gt;

        &lt;p&gt;
          두 설정값의 차이는 “아카이빙을 켜느냐 끄느냐”보다 “Standby 또는 복구 상태에서도 아카이빙을 수행하느냐”에 있다. 그래서 운영자는 서버 역할과 백업 구조를 기준으로 선택해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;archive_mode = on&lt;/th&gt;
              &lt;th&gt;archive_mode = always&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Primary 정상 운영&lt;/td&gt;
              &lt;td&gt;완료된 WAL 세그먼트를 아카이브한다.&lt;/td&gt;
              &lt;td&gt;완료된 WAL 세그먼트를 아카이브한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Standby 서버&lt;/td&gt;
              &lt;td&gt;일반적으로 Standby가 받은 WAL을 다시 아카이브하지 않는다.&lt;/td&gt;
              &lt;td&gt;Standby가 받은 WAL도 아카이브할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;복구 상태&lt;/td&gt;
              &lt;td&gt;복구 중인 WAL을 다시 아카이브하는 용도로 쓰지 않는다.&lt;/td&gt;
              &lt;td&gt;복구 또는 스트리밍으로 받은 WAL을 다시 아카이브할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 사용 목적&lt;/td&gt;
              &lt;td&gt;Primary 기준 PITR, 백업, 일반적인 WAL 보관&lt;/td&gt;
              &lt;td&gt;Standby 백업, cascading replication, 별도 Standby 아카이브 구성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 난이도&lt;/td&gt;
              &lt;td&gt;상대적으로 단순하다.&lt;/td&gt;
              &lt;td&gt;중복 아카이브와 저장소 충돌을 더 주의해야 한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;언제 on을 선택하면 되나&lt;/h2&gt;

        &lt;p&gt;
          단일 Primary 서버에서 WAL 아카이빙을 수행하고, 해당 WAL을 백업과 PITR에 활용하는 구조라면 &lt;code&gt;archive_mode = on&lt;/code&gt;이 일반적인 선택이다.
        &lt;/p&gt;
        &lt;p&gt;
          Primary에서 생성된 WAL을 안정적으로 별도 저장소에 보관하고, 장애 시 베이스 백업과 WAL을 조합해 복구할 수 있도록 구성하는 방식이다. 대부분의 기본적인 PostgreSQL 백업 설계는 이 구조에서 시작한다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;Primary 서버에서만 WAL 아카이빙을 수행한다.&lt;/li&gt;
          &lt;li&gt;PITR을 위해 WAL 파일을 별도 저장소에 보관한다.&lt;/li&gt;
          &lt;li&gt;Standby 서버가 별도의 WAL 아카이브 저장소를 운영하지 않는다.&lt;/li&gt;
          &lt;li&gt;복제 서버는 조회 분산 또는 장애조치 용도로만 사용한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;언제 always를 선택하면 되나&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;archive_mode = always&lt;/code&gt;는 Standby 서버에서도 WAL 아카이빙을 수행해야 하는 환경에서 선택한다. 대표적으로 Standby에서 백업을 수행하거나, cascading replication 구조에서 중간 Standby가 WAL 보관 책임을 일부 가져야 할 때 필요하다.
        &lt;/p&gt;
        &lt;p&gt;
          예를 들어 Primary와 Standby가 서로 다른 지역에 있고, Standby 쪽에서도 별도 아카이브 저장소를 유지해야 한다면 &lt;code&gt;always&lt;/code&gt;가 유용할 수 있다. 장애조치 이후에도 복구 체계를 유지하려면 Standby의 WAL 보관 전략이 중요해진다.
        &lt;/p&gt;
        &lt;p&gt;
          관리자 입장에서 &lt;code&gt;always&lt;/code&gt;는 “더 강한 설정”이라기보다 “Standby까지 아카이브 책임을 확장하는 설정”으로 이해하는 편이 정확하다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;Standby 서버에서 베이스 백업을 수행한다.&lt;/li&gt;
          &lt;li&gt;Standby가 자체 WAL 아카이브 저장소를 가진다.&lt;/li&gt;
          &lt;li&gt;cascading replication 환경에서 중간 노드의 WAL 보관이 필요하다.&lt;/li&gt;
          &lt;li&gt;Primary 장애 후 Standby 승격 상황까지 고려한 재해복구 체계를 만든다.&lt;/li&gt;
          &lt;li&gt;지역별 또는 데이터센터별로 WAL 아카이브를 분리해 보관한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;주의할 점: always가 무조건 좋은 것은 아니다&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;archive_mode = always&lt;/code&gt;는 Standby에서도 WAL을 아카이브할 수 있게 해주지만, 그만큼 운영상 주의할 점이 늘어난다. 특히 Primary와 Standby가 같은 아카이브 저장소를 바라보는 경우 중복 파일 처리 정책이 중요하다.
        &lt;/p&gt;
        &lt;p&gt;
          같은 WAL 파일명이 이미 저장소에 있을 때 무조건 덮어쓰도록 구성하면 위험하다. 반대로 동일한 파일을 다시 저장하려는 시도가 모두 실패하면 아카이브 프로세스가 계속 재시도하면서 지연이 발생할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          운영 환경에서는 아카이브 저장소를 서버별로 분리하거나, 동일 파일 여부를 안전하게 검증하는 방식으로 &lt;code&gt;archive_command&lt;/code&gt;를 작성해야 한다. 또한 아카이브 실패는 WAL 파일 증가로 이어질 수 있으므로 디스크 사용량 모니터링도 필요하다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            &lt;code&gt;always&lt;/code&gt;는 Standby 아카이빙이 필요한 경우에만 신중하게 적용하는 것이 좋다. 단순히 “더 안전해 보인다”는 이유로 모든 서버에 적용하면 중복 아카이브, 저장소 충돌, 운영 복잡도가 커질 수 있다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;설정 변경 시 확인할 항목&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;archive_mode&lt;/code&gt;는 서버 시작 시 적용되는 설정이다. 값을 바꾼 뒤 단순 reload만으로 적용되지 않을 수 있으므로, 계획된 재시작 절차를 포함해 변경해야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          또한 &lt;code&gt;wal_level&lt;/code&gt;이 너무 낮게 설정되어 있으면 아카이빙 요구사항과 맞지 않을 수 있다. 백업, 복제, PITR 구성을 함께 운영한다면 WAL 관련 설정 전체를 한 번에 검토하는 것이 좋다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;점검 항목&lt;/th&gt;
              &lt;th&gt;확인 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;archive_mode&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;on&lt;/code&gt; 또는 &lt;code&gt;always&lt;/code&gt; 중 서버 역할에 맞는 값을 선택한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;archive_command&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;파일 복사, 업로드, 중복 처리, 실패 시 반환값이 안전하게 구성되어 있는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;archive_library&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;라이브러리 기반 아카이빙을 사용할 경우 &lt;code&gt;archive_command&lt;/code&gt;와 충돌하지 않게 설정한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;아카이브 저장소&lt;/td&gt;
              &lt;td&gt;Primary와 Standby가 같은 저장소를 쓰는지, 서버별 분리 저장소를 쓰는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;복구 테스트&lt;/td&gt;
              &lt;td&gt;베이스 백업과 WAL 아카이브만으로 원하는 시점까지 복구되는지 실제로 검증한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;모니터링&lt;/td&gt;
              &lt;td&gt;아카이브 실패, WAL 적체, 디스크 사용량, 저장소 지연을 감시한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;추천 선택 기준&lt;/h2&gt;

        &lt;p&gt;
          일반적인 운영 기준에서는 먼저 &lt;code&gt;archive_mode = on&lt;/code&gt;으로 Primary WAL 아카이빙을 안정화하는 것이 좋다. 이후 Standby 백업, 원격 재해복구, cascading replication처럼 추가 요구사항이 있을 때 &lt;code&gt;always&lt;/code&gt;를 검토하는 흐름이 안전하다.
        &lt;/p&gt;
        &lt;p&gt;
          실제 사용 시 중요한 것은 설정값 이름보다 복구 시나리오다. 장애가 발생했을 때 어떤 서버의 백업을 사용할 것인지, 어떤 저장소의 WAL을 적용할 것인지, Standby 승격 후에도 아카이브가 이어져야 하는지를 기준으로 결정해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;운영 시나리오&lt;/th&gt;
              &lt;th&gt;권장 설정&lt;/th&gt;
              &lt;th&gt;이유&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;단일 Primary 백업과 PITR&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;archive_mode = on&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Primary에서 생성된 WAL만 안정적으로 보관하면 충분하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Primary + Standby 조회 분산&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;archive_mode = on&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Standby가 별도 아카이브 책임을 갖지 않는다면 일반적으로 충분하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Standby에서 백업 수행&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;archive_mode = always&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Standby 기준 백업 완료와 WAL 보관 흐름을 맞출 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;cascading replication&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;archive_mode = always&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;중간 Standby가 받은 WAL을 별도 아카이브해야 할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;지역별 재해복구 아카이브&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;archive_mode = always&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Standby 지역에서도 독립적인 WAL 보관 체계를 만들 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          PostgreSQL에서 &lt;code&gt;archive_mode = on&lt;/code&gt;은 Primary 서버의 일반적인 WAL 아카이빙 설정이고, &lt;code&gt;archive_mode = always&lt;/code&gt;는 Standby 또는 복구 상태에서도 WAL 아카이빙을 수행해야 할 때 사용하는 설정이다.
        &lt;/p&gt;
        &lt;p&gt;
          단순 PITR과 Primary 중심 백업 구조라면 &lt;code&gt;on&lt;/code&gt;으로 충분한 경우가 많다. 반면 Standby 백업, cascading replication, 원격 재해복구처럼 Standby가 자체적으로 WAL을 보관해야 하는 구조라면 &lt;code&gt;always&lt;/code&gt;가 필요할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          핵심은 “Primary에서만 아카이빙할 것인가, Standby에서도 아카이빙할 것인가”다. 이 기준으로 선택하면 &lt;code&gt;archive_mode&lt;/code&gt; 설정을 더 명확하게 결정할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-archive-mode-on-always#article&quot;,
        &quot;headline&quot;: &quot;PostgreSQL archive_mode on과 always 차이, 운영 환경별 선택 기준&quot;,
        &quot;description&quot;: &quot;PostgreSQL archive_mode 설정값 on과 always의 차이를 Primary, Standby, PITR, 복제 환경 기준으로 정리하고 운영 시 주의할 점을 설명합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/postgresql-archive-mode-on-always&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-postgresql-archive-mode-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;PostgreSQL&quot;,
          &quot;archive_mode&quot;,
          &quot;WAL 아카이빙&quot;,
          &quot;PITR&quot;,
          &quot;Streaming Replication&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;Database&quot;,
          &quot;PostgreSQL&quot;,
          &quot;Backup and Recovery&quot;
        ],
        &quot;proficiencyLevel&quot;: &quot;Intermediate&quot;
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/postgresql-archive-mode-on-always#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스&quot;,
            &quot;item&quot;: &quot;https://example.com/database&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;PostgreSQL archive_mode on과 always 차이&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: PostgreSQL, archive_mode, WAL아카이빙, archive_command, archive_library, PITR, Standby서버, Primary서버, StreamingReplication, 백업복구 --&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>archive_command</category>
      <category>archive_library</category>
      <category>archive_mode</category>
      <category>PITR</category>
      <category>PostgreSQL</category>
      <category>Primary 서버</category>
      <category>Standby 서버</category>
      <category>streaming replication</category>
      <category>WAL 아카이빙</category>
      <category>백업 복구</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/577</guid>
      <comments>https://togethergrow.tistory.com/entry/PostgreSQL-archivemode-on%EA%B3%BC-always-%EC%B0%A8%EC%9D%B4-%EC%9A%B4%EC%98%81-%ED%99%98%EA%B2%BD%EB%B3%84-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80#entry577comment</comments>
      <pubDate>Sun, 28 Jun 2026 20:56:50 +0900</pubDate>
    </item>
    <item>
      <title>[인천] 인천펜타포트 락 페스티벌 2026, 송도에서 열리는 글로벌 음악축제</title>
      <link>https://togethergrow.tistory.com/entry/%EC%9D%B8%EC%B2%9C-%EC%9D%B8%EC%B2%9C%ED%8E%9C%ED%83%80%ED%8F%AC%ED%8A%B8-%EB%9D%BD-%ED%8E%98%EC%8A%A4%ED%8B%B0%EB%B2%8C-2026-%EC%86%A1%EB%8F%84%EC%97%90%EC%84%9C-%EC%97%B4%EB%A6%AC%EB%8A%94-%EA%B8%80%EB%A1%9C%EB%B2%8C-%EC%9D%8C%EC%95%85%EC%B6%95%EC%A0%9C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8e43bab9-8e16-4925-94f9-c03eb7a8e72d_827.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIneuH/dJMcaiqiI75/ZdCyhbbWx6berUSk3kHKy0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIneuH/dJMcaiqiI75/ZdCyhbbWx6berUSk3kHKy0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIneuH/dJMcaiqiI75/ZdCyhbbWx6berUSk3kHKy0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIneuH%2FdJMcaiqiI75%2FZdCyhbbWx6berUSk3kHKy0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2026 인천펜타포트 락 페스티벌 일정과 장소, 티켓 요금, 주요 프로그램, 라인업, 방문 전 확인할 내용을 정리했습니다&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;627&quot; data-filename=&quot;8e43bab9-8e16-4925-94f9-c03eb7a8e72d_827.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;[인천] 인천펜타포트 락 페스티벌 2026, 송도에서 열리는 글로벌 음악축제&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;2026 인천펜타포트 락 페스티벌 일정과 장소, 티켓 요금, 주요 프로그램, 라인업, 방문 전 확인할 내용을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;인천펜타포트 락 페스티벌,2026 펜타포트,송도달빛축제공원,인천 음악축제,락 페스티벌,펜타포트 라인업,Pixies,Massive Attack,Suede,펜타 슈퍼루키&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;[인천] 인천펜타포트 락 페스티벌 2026, 송도에서 열리는 글로벌 음악축제&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;2026년 7월 31일부터 8월 2일까지 송도달빛축제공원에서 열리는 인천펜타포트 락 페스티벌 정보를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/incheon-pentaport-rock-festival-2026&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-incheon-pentaport-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;[인천] 인천펜타포트 락 페스티벌 2026, 송도에서 열리는 글로벌 음악축제&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;인천펜타포트 락 페스티벌 2026 일정, 티켓, 라인업, 사전행사와 관람 포인트를 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-incheon-pentaport-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .festival-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .festival-wrap .festival-header {
      margin-bottom: 28px;
    }

    .festival-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .festival-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .festival-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .festival-wrap section {
      margin: 34px 0;
    }

    .festival-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .festival-wrap p {
      margin: 0 0 16px;
    }

    .festival-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .festival-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .festival-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .festival-wrap .check-list li {
      margin-bottom: 8px;
    }

    .festival-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .festival-wrap th,
    .festival-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .festival-wrap th {
      font-weight: 700;
    }

    .festival-wrap a {
      color: inherit;
      text-decoration: underline;
      text-underline-offset: 3px;
    }

    .festival-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .festival-wrap .notice p {
      margin-bottom: 0;
    }

    .festival-wrap .cta-box {
      margin-top: 26px;
      padding: 20px;
      border: 1px solid rgba(120, 120, 120, 0.3);
      border-radius: 14px;
      background: rgba(120, 120, 120, 0.07);
    }

    .festival-wrap .cta-box strong {
      display: block;
      margin-bottom: 10px;
      font-size: 1.08em;
    }
  &lt;/style&gt;

  &lt;main class=&quot;festival-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;festival-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;REBOOT. THE PORT OPENS.&lt;/span&gt;
        &lt;h1&gt;[인천] 인천펜타포트 락 페스티벌 2026, 송도에서 열리는 글로벌 음악축제&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          2026 인천펜타포트 락 페스티벌은 7월 31일부터 8월 2일까지 인천 송도달빛축제공원에서 열리는 대한민국 대표 글로벌 음악축제다. 국내외 최정상급 아티스트의 공연과 F&amp;amp;B 존, 사전공연, 팝업스토어, 지역 연계 프로그램까지 함께 즐길 수 있다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;인천펜타포트 락 페스티벌 2026 기본 정보&lt;/h2&gt;

        &lt;p&gt;
          인천펜타포트 음악축제는 2006년 첫 개최 이후 국내 대표 락 페스티벌로 성장한 글로벌 음악축제다. 2026년에도 인천 송도달빛축제공원에서 개최되며, 음악과 도시 문화가 결합된 대형 페스티벌로 관람객을 맞이한다.
        &lt;/p&gt;
        &lt;p&gt;
          인천펜타포트 락 페스티벌은 단순한 공연 행사를 넘어 신진 아티스트 발굴, 지역 음악 생태계 확장, 글로벌 팬덤과의 접점 확대를 함께 추진하는 축제다. 메인 무대 공연과 함께 펜타 슈퍼루키, 라이브 클럽파티, 펜타포트 쇼케이스 등 지역 연계 프로그램도 운영된다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;축제 한눈에 보기&lt;/strong&gt;
          축제명: 인천펜타포트 락 페스티벌&lt;br&gt;
          기간: 2026년 7월 31일 ~ 2026년 8월 2일&lt;br&gt;
          장소: 인천광역시 연수구 센트럴로 350, 송도달빛축제공원&lt;br&gt;
          주최: 인천광역시&lt;br&gt;
          주관: 인천관광공사, ㈜경기일보&lt;br&gt;
          문의: 032-899-7423&lt;br&gt;
          공식 홈페이지: pentaport.co.kr
        &lt;/div&gt;
      &lt;/section&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;location&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://map.daum.net/?latlng=126.633763395929,37.405409134759026&amp;amp;q=%EC%9D%B8%EC%B2%9C%20%ED%8E%9C%ED%83%80%ED%8F%AC%ED%8A%B8%EB%9D%BD%ED%8E%98%EC%8A%A4%ED%8B%B0%EB%B2%8C&amp;amp;itemId=12119304&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;span class=&quot;location-info&quot;&gt; &lt;span class=&quot;location-name&quot;&gt;인천 펜타포트락페스티벌&lt;/span&gt; &lt;span class=&quot;location-address&quot;&gt;인천 연수구 센트럴로 350&lt;/span&gt; &lt;/span&gt; &lt;/a&gt;&lt;/figure&gt;
      &lt;section&gt;
        &lt;h2&gt;행사 일정과 장소&lt;/h2&gt;

        &lt;p&gt;
          2026 인천펜타포트 락 페스티벌은 여름 휴가철인 7월 말부터 8월 초까지 3일간 열린다. 송도달빛축제공원은 대형 야외 공연과 다양한 부대 프로그램을 함께 운영하기 좋은 공간으로, 페스티벌 특유의 개방감과 도시형 음악축제 분위기를 느끼기 좋다.
        &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mQaS1/dJMcacp8Ojr/IkGM1Hsq9NzEmZF2uhzj20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mQaS1/dJMcacp8Ojr/IkGM1Hsq9NzEmZF2uhzj20/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;8e43bab9-8e16-4925-94f9-c03eb7a8e72d_830.jpg&quot; style=&quot;width: 31.9337%; margin-right: 10px;&quot; data-widthpercent=&quot;32.69&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mQaS1/dJMcacp8Ojr/IkGM1Hsq9NzEmZF2uhzj20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmQaS1%2FdJMcacp8Ojr%2FIkGM1Hsq9NzEmZF2uhzj20%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csRAj6/dJMcahdTR6z/K0Zn5vEAG2PlF1ngLkKssk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csRAj6/dJMcahdTR6z/K0Zn5vEAG2PlF1ngLkKssk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;587&quot; data-filename=&quot;8e43bab9-8e16-4925-94f9-c03eb7a8e72d_831.jpg&quot; style=&quot;width: 34.1097%; margin-right: 10px;&quot; data-widthpercent=&quot;34.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csRAj6/dJMcahdTR6z/K0Zn5vEAG2PlF1ngLkKssk/img.jpg&quot; alt=&quot;2026 인천펜타포트 락 페스티벌 일정과 장소&amp;amp;amp;#44; 티켓 요금&amp;amp;amp;#44; 주요 프로그램&amp;amp;amp;#44; 라인업&amp;amp;amp;#44; 방문 전 확인할 내용을 정리했습니다&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsRAj6%2FdJMcahdTR6z%2FK0Zn5vEAG2PlF1ngLkKssk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSFXxj/dJMcahdTR6y/5uVX8vWhvvNQnnzWrOEc0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSFXxj/dJMcahdTR6y/5uVX8vWhvvNQnnzWrOEc0k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;633&quot; data-filename=&quot;8e43bab9-8e16-4925-94f9-c03eb7a8e72d_835.jpg&quot; style=&quot;width: 31.631%;&quot; data-widthpercent=&quot;32.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSFXxj/dJMcahdTR6y/5uVX8vWhvvNQnnzWrOEc0k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSFXxj%2FdJMcahdTR6y%2F5uVX8vWhvvNQnnzWrOEc0k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;출처 : 대한민국 구석구석&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;축제 기간&lt;/th&gt;
              &lt;td&gt;2026년 7월 31일 금요일 ~ 2026년 8월 2일 일요일&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;축제 장소&lt;/th&gt;
              &lt;td&gt;인천광역시 연수구 센트럴로 350, 송도달빛축제공원&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;이용요금&lt;/th&gt;
              &lt;td&gt;유료&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;문의 전화&lt;/th&gt;
              &lt;td&gt;032-899-7423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;인스타그램&lt;/th&gt;
              &lt;td&gt;pentaportrf&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;공식 홈페이지&lt;/th&gt;
              &lt;td&gt;
                &lt;a href=&quot;https://pentaport.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;pentaport.co.kr&lt;/a&gt;&lt;br&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;티켓 요금 안내&lt;/h2&gt;

        &lt;p&gt;
          2026 인천펜타포트 락 페스티벌은 1일권과 3일권을 중심으로 티켓이 운영된다. 레귤러 티켓 외에도 얼리버드, 블라인드, 인천할인 등 다양한 할인 방식이 제시되어 있어 관람 일정과 조건에 따라 선택할 수 있다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;권종&lt;/th&gt;
              &lt;th&gt;요금&lt;/th&gt;
              &lt;th&gt;비고&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;레귤러 티켓&lt;/td&gt;
              &lt;td&gt;1일권&lt;/td&gt;
              &lt;td&gt;120,000원&lt;/td&gt;
              &lt;td&gt;정가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;레귤러 티켓&lt;/td&gt;
              &lt;td&gt;3일권&lt;/td&gt;
              &lt;td&gt;240,000원&lt;/td&gt;
              &lt;td&gt;정가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;얼리버드 티켓&lt;/td&gt;
              &lt;td&gt;1일권&lt;/td&gt;
              &lt;td&gt;102,000원&lt;/td&gt;
              &lt;td&gt;15% 할인가, KB국민카드 결제 시 20% 할인 조건 확인 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;얼리버드 티켓&lt;/td&gt;
              &lt;td&gt;3일권&lt;/td&gt;
              &lt;td&gt;204,000원&lt;/td&gt;
              &lt;td&gt;15% 할인가, KB국민카드 결제 시 20% 할인 조건 확인 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;블라인드 티켓&lt;/td&gt;
              &lt;td&gt;3일권&lt;/td&gt;
              &lt;td&gt;168,000원&lt;/td&gt;
              &lt;td&gt;30% 할인가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;인천할인&lt;/td&gt;
              &lt;td&gt;1일권&lt;/td&gt;
              &lt;td&gt;84,000원&lt;/td&gt;
              &lt;td&gt;인천시민 또는 인천 소재 대학교 재학생 대상 30% 할인가&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            실제 사용 시 티켓 판매 일정, 할인 적용 조건, 결제 카드 혜택, 매진 여부는 달라질 수 있다. 예매 전 공식 홈페이지와 예매처 공지를 반드시 확인하는 것이 좋다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;주요 아티스트 라인업&lt;/h2&gt;

        &lt;p&gt;
          2026 인천펜타포트 락 페스티벌은 국내외 음악 팬들의 관심을 받을 만한 라인업을 예고하고 있다. 픽시스, 매시브 어택, 스웨이드 등 해외 아티스트와 혁오, 이승윤 등 국내 대표 뮤지션이 함께 언급되며 기대감을 높이고 있다.
        &lt;/p&gt;
        &lt;p&gt;
          픽시스는 결성 40주년 기념 투어 흐름 속에서 한국 팬들과 만나는 무대로 주목받고, 매시브 어택은 록과 일렉트로닉의 경계를 넘나드는 음악성으로 강한 존재감을 보여줄 것으로 기대된다. 스웨이드는 브릿팝을 대표하는 밴드로 페스티벌 분위기를 깊게 만들 라인업이다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;아티스트&lt;/th&gt;
              &lt;th&gt;관람 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Pixies&lt;/td&gt;
              &lt;td&gt;얼터너티브 록의 상징적인 밴드로, 강렬한 기타 사운드와 무대 에너지가 기대된다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Massive Attack&lt;/td&gt;
              &lt;td&gt;록, 일렉트로닉, 트립합의 경계를 허무는 사운드로 깊이 있는 공연 경험을 선사할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Suede&lt;/td&gt;
              &lt;td&gt;브릿팝의 전설로 불리는 밴드로, 세대와 취향을 아우르는 무대를 기대할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;HYUKOH&lt;/td&gt;
              &lt;td&gt;국내외 팬층이 두터운 밴드로, 감각적인 사운드와 라이브 무대가 강점이다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Two Door Cinema Club&lt;/td&gt;
              &lt;td&gt;경쾌한 인디 록 사운드로 야외 페스티벌과 잘 어울리는 무대를 기대할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이승윤&lt;/td&gt;
              &lt;td&gt;개성 있는 보컬과 밴드 사운드로 국내 관객에게 높은 몰입감을 줄 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          이 밖에도 노이지가든, 오리지널 러브, 런 리버 노스, 데이브레이크, 라이프 앤 타임, 매써드, 피터팬 컴플렉스, 술탄 오브 더 디스코 등 다양한 장르의 아티스트가 함께 언급되고 있어 3일간 폭넓은 음악 경험을 기대할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;메인 프로그램과 무대 구성&lt;/h2&gt;

        &lt;p&gt;
          인천펜타포트 락 페스티벌의 메인 프로그램은 국내외 아티스트가 참여하는 대규모 라이브 공연이다. 메인 스테이지를 중심으로 서브 스테이지와 서드 스테이지가 함께 운영되며, 관람객은 취향에 맞춰 다양한 공연을 선택해 즐길 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          무대가 여러 개로 구성되는 페스티벌에서는 공연 시간표 확인이 중요하다. 보고 싶은 아티스트가 겹칠 수 있으므로 방문 전 타임테이블을 기준으로 이동 동선을 미리 정하면 더 효율적으로 즐길 수 있다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;주요 행사 구성&lt;/strong&gt;
          메인프로그램: 펜타포트 락 페스티벌&lt;br&gt;
          부대프로그램: 메인·서브·서드스테이지, F&amp;amp;B 존, 개막 퍼포먼스, 스폰서 프로그램&lt;br&gt;
          지역연계프로그램: 펜타 슈퍼루키, 펜타포트 라이브 클럽파티, 펜타포트 쇼케이스&lt;br&gt;
          사전 행사: 홍대·도쿄 사전공연, 펜타포트 팝업스토어
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;지역 연계 프로그램과 사전 행사&lt;/h2&gt;

        &lt;p&gt;
          인천펜타포트 음악축제는 지역 음악 생태계와의 연결도 중요한 축제 요소다. 펜타 슈퍼루키는 신진 아티스트 발굴에 초점을 맞춘 프로그램이며, 라이브 클럽파티와 펜타포트 쇼케이스는 공연장 밖에서도 축제의 분위기를 이어간다.
        &lt;/p&gt;
        &lt;p&gt;
          2026년에는 인천펜타포트 락 페스티벌 개최 이전에 홍대와 일본 도쿄에서 사전 공연을 운영해 글로벌 팬덤과의 접점을 넓힐 예정이다. 팝업스토어에서는 공식 굿즈와 브랜드 콘텐츠를 선보이며, 공연 전후로 팬들의 축제 경험을 확장한다.
        &lt;/p&gt;
        &lt;p&gt;
          관리자 입장에서 보면 인천펜타포트 락 페스티벌은 단일 공연보다 넓은 브랜드 경험을 만드는 도시형 음악축제다. 본 행사, 사전공연, 팝업스토어, 지역 연계 프로그램이 함께 움직이며 축제의 지속성을 높인다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;F&amp;amp;B 존과 현장 편의시설&lt;/h2&gt;

        &lt;p&gt;
          페스티벌 현장에는 F&amp;amp;B 존과 스폰서 프로그램이 함께 운영된다. 장시간 야외 공연을 즐겨야 하는 축제 특성상 음식, 음료, 휴식 공간, 동선 확인은 관람 만족도에 큰 영향을 준다.
        &lt;/p&gt;
        &lt;p&gt;
          다만 축제 먹거리 세부 내용은 전년도 운영 내용과 달라질 수 있다. 2026년 F&amp;amp;B 존 구성, 반입 가능 물품, 결제 방식, 현장 편의시설은 공식 안내가 업데이트되는 시점에 다시 확인하는 것이 좋다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;공연 타임테이블과 스테이지 위치를 미리 확인한다.&lt;/li&gt;
          &lt;li&gt;F&amp;amp;B 존 운영 시간과 결제 방식을 확인한다.&lt;/li&gt;
          &lt;li&gt;돗자리, 우산, 의자 등 반입 가능 물품 기준을 확인한다.&lt;/li&gt;
          &lt;li&gt;야외 공연이므로 우천 및 폭염 대비 물품을 준비한다.&lt;/li&gt;
          &lt;li&gt;귀가 시간대 대중교통 혼잡을 고려해 이동 계획을 세운다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관람 전 준비하면 좋은 것&lt;/h2&gt;

        &lt;p&gt;
          인천펜타포트 락 페스티벌은 한여름 야외 음악축제다. 공연 몰입도만큼 체력 관리와 준비물도 중요하다. 낮 시간대에는 햇빛과 더위에 대비하고, 밤 공연까지 볼 계획이라면 체온 조절을 위한 가벼운 겉옷도 챙기는 것이 좋다.
        &lt;/p&gt;
        &lt;p&gt;
          실제 사용 시 가장 중요한 준비는 티켓, 신분 확인 자료, 모바일 예매 내역, 보조배터리, 개인 물병, 자외선 차단용품이다. 인천할인을 이용하는 관람객은 인천시민 또는 인천 소재 대학교 재학생임을 확인할 수 있는 증빙을 준비해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;준비 항목&lt;/th&gt;
              &lt;th&gt;추천 이유&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;모바일 티켓 또는 예매 내역&lt;/td&gt;
              &lt;td&gt;입장 확인과 현장 문의 시 필요하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;신분증·할인 증빙&lt;/td&gt;
              &lt;td&gt;인천할인 등 조건부 티켓 확인에 필요할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;보조배터리&lt;/td&gt;
              &lt;td&gt;공연 촬영, 지도 확인, 연락 등으로 배터리 소모가 크다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;자외선 차단용품&lt;/td&gt;
              &lt;td&gt;한여름 야외 공연장에서 장시간 머물 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;가벼운 우비&lt;/td&gt;
              &lt;td&gt;여름철 갑작스러운 비에 대비하기 좋다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;누구에게 추천할 만한 축제인가&lt;/h2&gt;

        &lt;p&gt;
          인천펜타포트 락 페스티벌은 락, 인디, 일렉트로닉, 힙합, 브릿팝 등 다양한 장르의 라이브 공연을 한자리에서 즐기고 싶은 사람에게 잘 맞는다. 해외 아티스트와 국내 뮤지션을 함께 볼 수 있다는 점도 큰 매력이다.
        &lt;/p&gt;
        &lt;p&gt;
          3일권을 이용하면 페스티벌의 흐름을 온전히 즐길 수 있고, 특정 아티스트 중심으로 방문한다면 1일권 선택도 가능하다. 송도 도심과 가까워 숙박, 식사, 이동 동선을 함께 계획하기에도 좋다.
        &lt;/p&gt;

        &lt;div class=&quot;cta-box&quot;&gt;
          &lt;strong&gt;방문 안내&lt;/strong&gt;
          2026 인천펜타포트 락 페스티벌은 7월 31일부터 8월 2일까지 송도달빛축제공원에서 열린다.&lt;br&gt;
          티켓 판매 일정, 최종 라인업, 타임테이블, 입장 규정은 변경될 수 있으므로 방문 전 공식 홈페이지를 확인하는 것이 좋다.&lt;br&gt;
          문의: 032-899-7423&lt;br&gt;
          공식 홈페이지: &lt;a href=&quot;https://pentaport.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;pentaport.co.kr&lt;/a&gt;&lt;br&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          2026 인천펜타포트 락 페스티벌은 송도달빛축제공원에서 3일간 열리는 국내 대표 글로벌 음악축제다. 대형 라이브 공연, 다채로운 스테이지, F&amp;amp;B 존, 지역 연계 프로그램, 사전공연과 팝업스토어까지 결합해 도시형 페스티벌의 매력을 보여준다.
        &lt;/p&gt;
        &lt;p&gt;
          Pixies, Massive Attack, Suede, HYUKOH, Two Door Cinema Club, 이승윤 등 다양한 아티스트가 언급되며 국내외 음악 팬들의 기대감을 높이고 있다. 락 페스티벌 특유의 에너지와 송도 야외공연장의 분위기를 함께 즐기고 싶다면 주목할 만한 여름 축제다.
        &lt;/p&gt;
        &lt;p&gt;
          티켓 종류와 할인 조건이 다양하므로 관람 일정, 예산, 원하는 라인업을 기준으로 미리 계획하면 인천펜타포트 락 페스티벌을 더 알차게 즐길 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;Event&quot;,
        &quot;@id&quot;: &quot;https://example.com/incheon-pentaport-rock-festival-2026#event&quot;,
        &quot;name&quot;: &quot;인천펜타포트 락 페스티벌&quot;,
        &quot;alternateName&quot;: &quot;2026 인천펜타포트 락 페스티벌&quot;,
        &quot;description&quot;: &quot;2026년 7월 31일부터 8월 2일까지 인천 송도달빛축제공원에서 열리는 글로벌 음악축제입니다. 국내외 아티스트 공연, 메인·서브·서드스테이지, F&amp;B 존, 펜타 슈퍼루키, 라이브 클럽파티, 쇼케이스, 사전공연과 팝업스토어 등이 운영됩니다.&quot;,
        &quot;startDate&quot;: &quot;2026-07-31&quot;,
        &quot;endDate&quot;: &quot;2026-08-02&quot;,
        &quot;eventAttendanceMode&quot;: &quot;https://schema.org/OfflineEventAttendanceMode&quot;,
        &quot;eventStatus&quot;: &quot;https://schema.org/EventScheduled&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;image&quot;: &quot;https://example.com/replace-incheon-pentaport-thumbnail.jpg&quot;,
        &quot;url&quot;: &quot;https://example.com/incheon-pentaport-rock-festival-2026&quot;,
        &quot;location&quot;: {
          &quot;@type&quot;: &quot;Place&quot;,
          &quot;name&quot;: &quot;송도달빛축제공원&quot;,
          &quot;address&quot;: {
            &quot;@type&quot;: &quot;PostalAddress&quot;,
            &quot;streetAddress&quot;: &quot;센트럴로 350&quot;,
            &quot;addressLocality&quot;: &quot;연수구&quot;,
            &quot;addressRegion&quot;: &quot;인천광역시&quot;,
            &quot;addressCountry&quot;: &quot;KR&quot;
          }
        },
        &quot;organizer&quot;: {
          &quot;@type&quot;: &quot;Organization&quot;,
          &quot;name&quot;: &quot;인천광역시 / 인천관광공사, ㈜경기일보&quot;,
          &quot;telephone&quot;: &quot;032-899-7423&quot;,
          &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
        },
        &quot;offers&quot;: [
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;레귤러 티켓 1일권&quot;,
            &quot;price&quot;: &quot;120000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;레귤러 티켓 3일권&quot;,
            &quot;price&quot;: &quot;240000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;얼리버드 티켓 1일권&quot;,
            &quot;price&quot;: &quot;102000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;얼리버드 티켓 3일권&quot;,
            &quot;price&quot;: &quot;204000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;블라인드 티켓 3일권&quot;,
            &quot;price&quot;: &quot;168000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;인천할인 1일권&quot;,
            &quot;price&quot;: &quot;84000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://pentaport.co.kr/&quot;
          }
        ],
        &quot;performer&quot;: [
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Pixies&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Massive Attack&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Suede&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;HYUKOH&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Two Door Cinema Club&quot;
          },
          {
            &quot;@type&quot;: &quot;Person&quot;,
            &quot;name&quot;: &quot;이승윤&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Noizegarden&quot;
          },
          {
            &quot;@type&quot;: &quot;MusicGroup&quot;,
            &quot;name&quot;: &quot;Daybreak&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/incheon-pentaport-rock-festival-2026#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;축제&quot;,
            &quot;item&quot;: &quot;https://example.com/festival&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;인천펜타포트 락 페스티벌 2026&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: 인천펜타포트락페스티벌, 2026펜타포트, 송도달빛축제공원, 인천음악축제, 락페스티벌, 펜타포트라인업, Pixies, MassiveAttack, Suede, 펜타슈퍼루키 --&gt;</description>
      <category>일상 정보/전국 소식</category>
      <category>2026 펜타포트</category>
      <category>Massive Attack</category>
      <category>Pixies</category>
      <category>Suede</category>
      <category>락 페스티벌</category>
      <category>송도달빛축제공원</category>
      <category>인천 음악축제</category>
      <category>인천펜타포트 락 페스티벌</category>
      <category>펜타 슈퍼루키</category>
      <category>펜타포트 라인업</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/576</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%9D%B8%EC%B2%9C-%EC%9D%B8%EC%B2%9C%ED%8E%9C%ED%83%80%ED%8F%AC%ED%8A%B8-%EB%9D%BD-%ED%8E%98%EC%8A%A4%ED%8B%B0%EB%B2%8C-2026-%EC%86%A1%EB%8F%84%EC%97%90%EC%84%9C-%EC%97%B4%EB%A6%AC%EB%8A%94-%EA%B8%80%EB%A1%9C%EB%B2%8C-%EC%9D%8C%EC%95%85%EC%B6%95%EC%A0%9C#entry576comment</comments>
      <pubDate>Sun, 28 Jun 2026 20:51:53 +0900</pubDate>
    </item>
    <item>
      <title>[보령] 보령머드축제 2026, 대천해수욕장에서 즐기는 여름 체험 축제</title>
      <link>https://togethergrow.tistory.com/entry/%EB%B3%B4%EB%A0%B9-%EB%B3%B4%EB%A0%B9%EB%A8%B8%EB%93%9C%EC%B6%95%EC%A0%9C-2026-%EB%8C%80%EC%B2%9C%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5%EC%97%90%EC%84%9C-%EC%A6%90%EA%B8%B0%EB%8A%94-%EC%97%AC%EB%A6%84-%EC%B2%B4%ED%97%98-%EC%B6%95%EC%A0%9C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;910bb144-bf74-4eee-9e91-8fbcbaf302ac_85.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2t42/dJMcacQ7JJW/r5LItOLJCJeZFYKsrynAdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2t42/dJMcacQ7JJW/r5LItOLJCJeZFYKsrynAdK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2t42/dJMcacQ7JJW/r5LItOLJCJeZFYKsrynAdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2t42%2FdJMcacQ7JJW%2Fr5LItOLJCJeZFYKsrynAdK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2026 보령머드축제 일정과 장소, 입장요금, 주요 체험 프로그램, 공연, 방문 전 확인할 내용을 한눈에 정리했습니다.&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;627&quot; data-filename=&quot;910bb144-bf74-4eee-9e91-8fbcbaf302ac_85.jpg&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;[보령] 보령머드축제 2026, 대천해수욕장에서 즐기는 여름 체험 축제&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;2026 보령머드축제 일정과 장소, 입장요금, 주요 체험 프로그램, 공연, 방문 전 확인할 내용을 한눈에 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;보령머드축제,2026 보령머드축제,대천해수욕장,보령 여름축제,머드체험존,머드몹신,드론 라이트쇼,K-POP 슈퍼라이브,충남 축제,가족 여행&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;[보령] 보령머드축제 2026, 대천해수욕장에서 즐기는 여름 체험 축제&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;2026년 7월 24일부터 8월 9일까지 열리는 보령머드축제의 체험존, 공연, 요금, 위치 정보를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/boryeong-mud-festival-2026&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-boryeong-mud-festival-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;[보령] 보령머드축제 2026, 대천해수욕장에서 즐기는 여름 체험 축제&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;대천해수욕장에서 열리는 2026 보령머드축제 일정, 체험, 공연, 이용요금을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-boryeong-mud-festival-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .festival-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .festival-wrap .festival-header {
      margin-bottom: 28px;
    }

    .festival-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .festival-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .festival-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .festival-wrap section {
      margin: 34px 0;
    }

    .festival-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .festival-wrap p {
      margin: 0 0 16px;
    }

    .festival-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .festival-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .festival-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .festival-wrap .check-list li {
      margin-bottom: 8px;
    }

    .festival-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .festival-wrap th,
    .festival-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .festival-wrap th {
      font-weight: 700;
    }

    .festival-wrap a {
      color: inherit;
      text-decoration: underline;
      text-underline-offset: 3px;
    }

    .festival-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .festival-wrap .notice p {
      margin-bottom: 0;
    }

    .festival-wrap .cta-box {
      margin-top: 26px;
      padding: 20px;
      border: 1px solid rgba(120, 120, 120, 0.3);
      border-radius: 14px;
      background: rgba(120, 120, 120, 0.07);
    }

    .festival-wrap .cta-box strong {
      display: block;
      margin-bottom: 10px;
      font-size: 1.08em;
    }
  &lt;/style&gt;

  &lt;main class=&quot;festival-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;festival-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;Boryeong Mud Festival&lt;/span&gt;
        &lt;h1&gt;[보령] 보령머드축제 2026, 대천해수욕장에서 즐기는 여름 체험 축제&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          2026 보령머드축제는 7월 24일부터 8월 9일까지 충청남도 보령시 대천해수욕장 일원에서 열리는 글로벌 체험형 여름 축제다. 머드체험존, 워터파크존, DJ·EDM 공연, 드론 라이트쇼까지 낮과 밤을 모두 채우는 프로그램이 준비된다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;보령머드축제 2026 기본 정보&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제는 대한민국을 대표하는 여름 체험 축제로, 대천해수욕장을 배경으로 온몸으로 머드를 즐길 수 있는 행사다. 2026년에는 “가자 보령으로, 놀자 머드로”라는 분위기에 맞춰 체험, 공연, 전시, 연계 프로그램이 함께 운영된다.
        &lt;/p&gt;
        &lt;p&gt;
          보령머드축제는 단순히 머드를 바르는 행사가 아니라 물놀이, 야간 공연, 지역 먹거리, 캐릭터 상품, 글로벌 푸드존까지 결합한 대형 여름 축제다. 가족 단위 방문객부터 친구, 연인, 외국인 관광객까지 폭넓게 즐길 수 있다.
        &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuPDSh/dJMcafAm6Br/MxjSTCwRqelYhdb2bGrzk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuPDSh/dJMcafAm6Br/MxjSTCwRqelYhdb2bGrzk1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;626&quot; data-filename=&quot;910bb144-bf74-4eee-9e91-8fbcbaf302ac_86.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuPDSh/dJMcafAm6Br/MxjSTCwRqelYhdb2bGrzk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuPDSh%2FdJMcafAm6Br%2FMxjSTCwRqelYhdb2bGrzk1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plBvZ/dJMcaasjEYI/YvmGFZKtOtAufuUdOGfAKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plBvZ/dJMcaasjEYI/YvmGFZKtOtAufuUdOGfAKK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;626&quot; data-filename=&quot;910bb144-bf74-4eee-9e91-8fbcbaf302ac_91.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plBvZ/dJMcaasjEYI/YvmGFZKtOtAufuUdOGfAKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplBvZ%2FdJMcaasjEYI%2FYvmGFZKtOtAufuUdOGfAKK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxWAy9/dJMcaasjEYH/buselDVV25M3UdNhaX015K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxWAy9/dJMcaasjEYH/buselDVV25M3UdNhaX015K/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;626&quot; data-filename=&quot;910bb144-bf74-4eee-9e91-8fbcbaf302ac_89.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxWAy9/dJMcaasjEYH/buselDVV25M3UdNhaX015K/img.jpg&quot; alt=&quot;2026 보령머드축제 일정과 장소&amp;amp;amp;#44; 입장요금&amp;amp;amp;#44; 주요 체험 프로그램&amp;amp;amp;#44; 공연&amp;amp;amp;#44; 방문 전 확인할 내용을 한눈에 정리했습니다.&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxWAy9%2FdJMcaasjEYH%2FbuselDVV25M3UdNhaX015K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;출처 : 대한민국 구석구석&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;축제 한눈에 보기&lt;/strong&gt;
          축제명: 보령머드축제&lt;br&gt;
          기간: 2026년 7월 24일 ~ 2026년 8월 9일&lt;br&gt;
          장소: 충청남도 보령시 신흑동 2282, 대천해수욕장 일원&lt;br&gt;
          주최·주관: 보령시 / 재단법인 보령축제관광재단&lt;br&gt;
          문의: 041-930-0891&lt;br&gt;
          공식 홈페이지: mudfestival.or.kr
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;행사 일정과 위치&lt;/h2&gt;

        &lt;p&gt;
          2026 보령머드축제는 여름 휴가철 한가운데 열리기 때문에 대천해수욕장 방문, 보령 여행, 가족 물놀이 일정을 함께 계획하기 좋다. 축제 기간이 17일간 이어져 주말 방문은 물론 평일 여행 일정으로도 선택지가 넓다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;축제 기간&lt;/th&gt;
              &lt;td&gt;2026년 7월 24일 금요일 ~ 2026년 8월 9일 일요일&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;축제 장소&lt;/th&gt;
              &lt;td&gt;충청남도 보령시 신흑동 2282, 대천해수욕장 일원&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;문의 전화&lt;/th&gt;
              &lt;td&gt;041-930-0891&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;인스타그램&lt;/th&gt;
              &lt;td&gt;boryeongfestival_official&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;공식 홈페이지&lt;/th&gt;
              &lt;td&gt;
                &lt;a href=&quot;https://mudfestival.or.kr/festival/view&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;mudfestival.or.kr&lt;/a&gt;&lt;br&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;location&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://map.daum.net/?latlng=126.51502870643837,36.31482230324576&amp;amp;q=%EB%B3%B4%EB%A0%B9%EB%A8%B8%EB%93%9C%EC%B6%95%EC%A0%9C&amp;amp;itemId=25042183&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;span class=&quot;location-info&quot;&gt; &lt;span class=&quot;location-name&quot;&gt;보령머드축제&lt;/span&gt; &lt;span class=&quot;location-address&quot;&gt;충남 보령시 신흑동 2282&lt;/span&gt; &lt;/span&gt; &lt;/a&gt;&lt;/figure&gt;
      &lt;section&gt;
        &lt;h2&gt;입장요금 안내&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제의 대표 유료 체험 구역은 일반존과 패밀리존으로 나뉜다. 방문 요일에 따라 이용요금이 달라지므로, 가족 여행이나 단체 방문을 계획한다면 평일과 주말 요금을 미리 비교하는 것이 좋다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;대상&lt;/th&gt;
              &lt;th&gt;월~목&lt;/th&gt;
              &lt;th&gt;금~일&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;일반존&lt;/td&gt;
              &lt;td&gt;성인&lt;/td&gt;
              &lt;td&gt;12,000원&lt;/td&gt;
              &lt;td&gt;16,000원&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;패밀리존&lt;/td&gt;
              &lt;td&gt;어린이&lt;/td&gt;
              &lt;td&gt;11,000원&lt;/td&gt;
              &lt;td&gt;13,000원&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            실제 사용 시 요금, 예매 방식, 현장 운영 시간은 변경될 수 있다. 방문 전 공식 홈페이지에서 체험존별 운영 시간과 예매 가능 여부를 확인하는 것이 안전하다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;머드체험존과 워터파크존&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제의 중심은 머드체험존이다. 일반존에서는 온몸으로 머드를 즐기는 짜릿한 체험을 할 수 있고, 머드런 프로그램을 통해 활동적인 축제 분위기를 느낄 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          가족 방문객을 위한 패밀리존과 워터파크존도 마련된다. 어린이와 보호자가 함께 안전하게 즐길 수 있는 공간이 구성되기 때문에 여름방학 가족 여행지로도 어울린다.
        &lt;/p&gt;
        &lt;p&gt;
          컬러머드페인팅, 머드뷰티케어, 머드포토존, 어린이 체험 프로그램 등은 머드축제만의 개성을 보여주는 요소다. 보령머드축제는 물놀이와 체험, 사진 촬영을 한 번에 즐길 수 있는 여름 콘텐츠가 강점이다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;머드체험존 일반존과 머드런&lt;/li&gt;
          &lt;li&gt;가족 단위 방문객을 위한 패밀리존&lt;/li&gt;
          &lt;li&gt;무더위를 식히는 워터파크존&lt;/li&gt;
          &lt;li&gt;컬러머드페인팅과 머드뷰티케어&lt;/li&gt;
          &lt;li&gt;기념사진을 남기기 좋은 머드포토존&lt;/li&gt;
          &lt;li&gt;어린이 체험 프로그램&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;낮에는 머드, 밤에는 공연과 드론쇼&lt;/h2&gt;

        &lt;p&gt;
          낮 시간대에는 머드 어트랙션과 물놀이 중심의 프로그램이 축제 분위기를 이끈다. 머드 물대포와 DJ·EDM 공연이 결합된 머드몹신은 보령머드축제의 대표적인 이색 체험 프로그램으로 꼽힌다.
        &lt;/p&gt;
        &lt;p&gt;
          밤에는 대천해수욕장의 분위기가 공연장으로 바뀐다. 개막공연 K-POP 슈퍼라이브, 폐막공연 K-트롯 슈퍼콘서트, 빅머드쇼, 머드락페스타, K-힙합페스티벌, 8090 나이트쇼 등 다양한 공연 프로그램이 예정되어 있다.
        &lt;/p&gt;
        &lt;p&gt;
          드론 라이트쇼와 머드나잇퍼레이드는 밤바다를 배경으로 축제의 분위기를 더한다. 낮과 밤의 즐길 거리가 뚜렷하기 때문에 보령머드축제는 당일치기보다 1박 2일 일정으로 방문해도 만족도가 높다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;공연·야간 프로그램&lt;/th&gt;
              &lt;th&gt;주요 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;K-POP 슈퍼라이브&lt;/td&gt;
              &lt;td&gt;축제 개막 분위기를 끌어올리는 대형 개막공연이다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;K-트롯 슈퍼콘서트&lt;/td&gt;
              &lt;td&gt;폐막공연으로 다양한 연령층이 함께 즐기기 좋다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;머드락페스타&lt;/td&gt;
              &lt;td&gt;강렬한 음악과 여름 축제의 열기를 함께 느낄 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;K-힙합페스티벌&lt;/td&gt;
              &lt;td&gt;젊은 방문객에게 어울리는 에너지 있는 공연 프로그램이다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;드론 라이트쇼&lt;/td&gt;
              &lt;td&gt;대천해수욕장 밤하늘을 배경으로 펼쳐지는 야간 볼거리다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;머드나잇퍼레이드&lt;/td&gt;
              &lt;td&gt;축제 현장의 흥겨운 분위기를 이어가는 야간 퍼레이드 프로그램이다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;전시·판매와 먹거리 프로그램&lt;/h2&gt;

        &lt;p&gt;
          축제장에서는 머드화장품과 캐릭터 상품 전시·판매, 보령 특산품 홍보부스, 글로벌 푸드존, 로컬 배달존, 협찬기업홍보관 등이 함께 운영된다.
        &lt;/p&gt;
        &lt;p&gt;
          머드 체험을 즐긴 뒤에는 지역 특산품과 먹거리 공간을 둘러보며 보령 여행의 재미를 더할 수 있다. 다만 축제장 먹거리 세부 내용은 연도별로 달라질 수 있으므로, 2026년 운영 내용은 방문 전 다시 확인하는 것이 좋다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;전시·판매 프로그램&lt;/strong&gt;
          머드화장품 및 캐릭터 전시 판매&lt;br&gt;
          보령 특산품, 홍보부스 전시·판매&lt;br&gt;
          글로벌 푸드존&lt;br&gt;
          로컬 배달존&lt;br&gt;
          글로벌축제박람회&lt;br&gt;
          협찬기업홍보관
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;연계 프로그램까지 즐기는 방법&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제는 축제장 안에서만 끝나지 않는다. 보령머드 월드투어, 시민문화한마당, 지역소비촉진할인쿠폰, 체험존 연계 지역화폐 증정 등 지역 관광과 소비를 연결하는 프로그램도 운영된다.
        &lt;/p&gt;
        &lt;p&gt;
          머드팩맨 퍼포먼스, 머드트레인, 공군 블랙이글스 에어쇼, 보령머드축제 위드 마이케이페스타 등은 축제의 볼거리를 넓혀주는 연계 프로그램이다. 관리자 입장에서 보면 보령머드축제는 체험형 콘텐츠와 지역 관광을 결합한 대표적인 여름 축제 사례다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;보령머드 월드투어&lt;/li&gt;
          &lt;li&gt;시민문화한마당&lt;/li&gt;
          &lt;li&gt;지역소비촉진할인쿠폰&lt;/li&gt;
          &lt;li&gt;체험존 연계 지역화폐 증정&lt;/li&gt;
          &lt;li&gt;머드팩맨 퍼포먼스&lt;/li&gt;
          &lt;li&gt;머드트레인&lt;/li&gt;
          &lt;li&gt;공군 블랙이글스 에어쇼&lt;/li&gt;
          &lt;li&gt;보령머드축제 위드 마이케이페스타&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;방문 전 준비하면 좋은 것&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제는 물과 머드를 활용하는 체험형 축제이기 때문에 복장과 준비물이 중요하다. 젖어도 되는 옷, 여벌 옷, 수건, 방수팩, 샌들 또는 아쿠아슈즈를 준비하면 더 편하게 즐길 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          한여름 야외 축제인 만큼 자외선 차단제, 모자, 개인 물병도 챙기는 것이 좋다. 공연과 드론쇼까지 즐길 계획이라면 낮 체험 후 휴식 시간을 두고 야간 일정으로 이동하는 방식이 효율적이다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;준비 항목&lt;/th&gt;
              &lt;th&gt;추천 이유&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;여벌 옷과 수건&lt;/td&gt;
              &lt;td&gt;머드체험 후 갈아입을 옷과 물기 제거용 수건이 필요하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;방수팩&lt;/td&gt;
              &lt;td&gt;휴대전화와 카드, 소지품을 물과 머드로부터 보호할 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;아쿠아슈즈&lt;/td&gt;
              &lt;td&gt;젖은 바닥과 해변 환경에서 이동하기 편하다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;자외선 차단용품&lt;/td&gt;
              &lt;td&gt;한여름 야외 체험 시간이 길어질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;사전 예매 확인&lt;/td&gt;
              &lt;td&gt;주말과 인기 공연일에는 현장 혼잡이 커질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;누구에게 추천할 만한 축제인가&lt;/h2&gt;

        &lt;p&gt;
          보령머드축제는 활동적인 여름 여행을 원하는 사람에게 잘 맞는다. 머드체험과 워터파크존을 함께 즐길 수 있어 친구 여행, 커플 여행, 가족 여행 모두에 어울린다.
        &lt;/p&gt;
        &lt;p&gt;
          특히 낮에는 체험형 프로그램으로 무더위를 날리고, 밤에는 공연과 드론 라이트쇼로 분위기를 이어갈 수 있다는 점이 매력이다. 대천해수욕장 여행을 계획하고 있다면 축제 기간에 맞춰 방문 일정을 잡는 것도 좋은 선택이다.
        &lt;/p&gt;

        &lt;div class=&quot;cta-box&quot;&gt;
          &lt;strong&gt;방문 안내&lt;/strong&gt;
          2026 보령머드축제는 7월 24일부터 8월 9일까지 열린다.&lt;br&gt;
          체험존 이용요금, 공연 일정, 교통 통제, 예매 방식은 변경될 수 있으므로 방문 전 공식 홈페이지와 문의처를 확인하는 것이 좋다.&lt;br&gt;
          문의: 041-930-0891&lt;br&gt;
          공식 홈페이지: &lt;a href=&quot;https://mudfestival.or.kr/festival/view&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;mudfestival.or.kr&lt;/a&gt;&lt;br&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          2026 보령머드축제는 대천해수욕장의 여름 분위기와 머드 체험, 공연, 드론쇼, 지역 먹거리를 한 번에 즐길 수 있는 대표적인 여름 축제다. 일반존, 패밀리존, 워터파크존이 함께 마련되어 방문객 유형에 따라 다양한 방식으로 축제를 즐길 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          낮에는 머드체험존과 워터파크존에서 시원하게 놀고, 밤에는 K-POP, 힙합, 트롯, 드론 라이트쇼 등 야간 프로그램을 즐기면 보령머드축제의 매력을 더 깊게 느낄 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          올여름 특별한 해변 축제를 찾는다면 2026년 7월 24일부터 8월 9일까지 열리는 보령머드축제를 여행 일정에 넣어볼 만하다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;Event&quot;,
        &quot;@id&quot;: &quot;https://example.com/boryeong-mud-festival-2026#event&quot;,
        &quot;name&quot;: &quot;보령머드축제&quot;,
        &quot;alternateName&quot;: &quot;2026 보령머드축제&quot;,
        &quot;description&quot;: &quot;2026년 7월 24일부터 8월 9일까지 충청남도 보령시 대천해수욕장 일원에서 열리는 글로벌 체험형 여름 축제입니다. 머드체험존, 패밀리존, 워터파크존, 머드몹신, 공연, 드론 라이트쇼 등 다양한 프로그램이 운영됩니다.&quot;,
        &quot;startDate&quot;: &quot;2026-07-24&quot;,
        &quot;endDate&quot;: &quot;2026-08-09&quot;,
        &quot;eventAttendanceMode&quot;: &quot;https://schema.org/OfflineEventAttendanceMode&quot;,
        &quot;eventStatus&quot;: &quot;https://schema.org/EventScheduled&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;image&quot;: &quot;https://example.com/replace-boryeong-mud-festival-thumbnail.jpg&quot;,
        &quot;url&quot;: &quot;https://example.com/boryeong-mud-festival-2026&quot;,
        &quot;location&quot;: {
          &quot;@type&quot;: &quot;Place&quot;,
          &quot;name&quot;: &quot;대천해수욕장 일원&quot;,
          &quot;address&quot;: {
            &quot;@type&quot;: &quot;PostalAddress&quot;,
            &quot;streetAddress&quot;: &quot;신흑동 2282&quot;,
            &quot;addressLocality&quot;: &quot;보령시&quot;,
            &quot;addressRegion&quot;: &quot;충청남도&quot;,
            &quot;addressCountry&quot;: &quot;KR&quot;
          }
        },
        &quot;organizer&quot;: {
          &quot;@type&quot;: &quot;Organization&quot;,
          &quot;name&quot;: &quot;보령시 / 재단법인 보령축제관광재단&quot;,
          &quot;telephone&quot;: &quot;041-930-0891&quot;,
          &quot;url&quot;: &quot;https://mudfestival.or.kr/festival/view&quot;
        },
        &quot;offers&quot;: [
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;일반존 성인 월~목&quot;,
            &quot;price&quot;: &quot;12000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://mudfestival.or.kr/festival/view&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;일반존 성인 금~일&quot;,
            &quot;price&quot;: &quot;16000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://mudfestival.or.kr/festival/view&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;패밀리존 어린이 월~목&quot;,
            &quot;price&quot;: &quot;11000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://mudfestival.or.kr/festival/view&quot;
          },
          {
            &quot;@type&quot;: &quot;Offer&quot;,
            &quot;name&quot;: &quot;패밀리존 어린이 금~일&quot;,
            &quot;price&quot;: &quot;13000&quot;,
            &quot;priceCurrency&quot;: &quot;KRW&quot;,
            &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
            &quot;url&quot;: &quot;https://mudfestival.or.kr/festival/view&quot;
          }
        ],
        &quot;performer&quot;: [
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;K-POP 슈퍼라이브&quot;
          },
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;K-트롯 슈퍼콘서트&quot;
          },
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;머드락페스타&quot;
          },
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;K-힙합페스티벌&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/boryeong-mud-festival-2026#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;축제&quot;,
            &quot;item&quot;: &quot;https://example.com/festival&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;보령머드축제 2026&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: 보령머드축제, 2026보령머드축제, 대천해수욕장, 보령여름축제, 머드체험존, 머드몹신, 드론라이트쇼, KPOP슈퍼라이브, 충남축제, 가족여행 --&gt;</description>
      <category>일상 정보/전국 소식</category>
      <category>2026 보령머드축제</category>
      <category>K-POP 슈퍼라이브</category>
      <category>가족 여행</category>
      <category>대천해수욕장</category>
      <category>드론 라이트쇼</category>
      <category>머드몹신</category>
      <category>머드체험존</category>
      <category>보령 여름축제</category>
      <category>보령머드축제</category>
      <category>충남 축제</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/575</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%B3%B4%EB%A0%B9-%EB%B3%B4%EB%A0%B9%EB%A8%B8%EB%93%9C%EC%B6%95%EC%A0%9C-2026-%EB%8C%80%EC%B2%9C%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5%EC%97%90%EC%84%9C-%EC%A6%90%EA%B8%B0%EB%8A%94-%EC%97%AC%EB%A6%84-%EC%B2%B4%ED%97%98-%EC%B6%95%EC%A0%9C#entry575comment</comments>
      <pubDate>Sun, 28 Jun 2026 20:05:14 +0900</pubDate>
    </item>
    <item>
      <title>AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응</title>
      <link>https://togethergrow.tistory.com/entry/AI-%EB%B2%94%EC%A3%84-%EB%8C%80%EC%9D%91-%EB%B2%94%EB%B6%80%EC%B2%98-%ED%98%91%EC%9D%98%EC%B2%B4-%EC%B6%9C%EB%B2%94-%EB%94%A5%ED%8E%98%EC%9D%B4%ED%81%AC%EC%99%80-%EA%B8%88%EC%9C%B5%EC%82%AC%EA%B8%B0-%EA%B3%B5%EB%8F%99-%EB%8C%80%EC%9D%91</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;정부가 AI 범죄 대응 범부처 협의체를 출범하고 딥페이크 성착취, AI 허위광고, 금융사기 등 AI 악용 범죄에 대한 통합 대응체계 마련에 나섰습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;AI 범죄,범부처 협의체,딥페이크 성착취,AI 금융사기,AI 허위광고,방송미디어통신위원회,통합 대응체계,피해회복,수사 단속,국가AI전략위원회&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;AI 범죄 대응 범부처 협의체 출범 배경과 종합 대응 계획, 통합 대응체계의 핵심을 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/ai-crime-government-response-taskforce&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-ai-crime-response-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;딥페이크 성착취, AI 금융사기, AI 허위광고 등 AI 악용 범죄에 대한 범정부 통합 대응 방향을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-ai-crime-response-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }
  &lt;/style&gt;

  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;AI Crime Response&lt;/span&gt;
        &lt;h1&gt;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          AI 기술을 악용한 범죄가 빠르게 늘어나면서 정부가 범부처 공동 대응체계를 본격 가동한다. 딥페이크 성착취, AI 허위·부당광고, AI 금융사기 등 복합 범죄에 대응하기 위한 협의체가 공식 출범했다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;AI 범죄 대응 범부처 협의체가 출범한 배경&lt;/h2&gt;

        &lt;p&gt;
          정부가 급증하는 AI 범죄에 체계적으로 대응하기 위해 ‘AI 범죄 대응 범부처 협의체’를 공식 출범했다. 방송미디어통신위원회는 6월 26일 킥오프 회의를 열고, 관계부처와 함께 AI 범죄 대응 방향을 논의했다.
        &lt;/p&gt;
        &lt;p&gt;
          이번 협의체는 AI 범죄가 특정 부처 한 곳의 업무 범위에 머물지 않는다는 문제의식에서 출발했다. 딥페이크 성착취물은 플랫폼과 수사 영역을 동시에 건드리고, AI 금융사기는 금융·통신·수사 대응이 함께 필요하다.
        &lt;/p&gt;
        &lt;p&gt;
          AI 허위·부당광고 역시 온라인 플랫폼, 소비자 보호, 개인정보, 공정거래 이슈와 연결된다. 따라서 AI 범죄 대응은 개별 사건 처리보다 범정부 차원의 정보 공유와 공동 대응체계가 중요해지고 있다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          명칭: AI 범죄 대응 범부처 협의체&lt;br&gt;
          주관 논의: 방송미디어통신위원회 킥오프 회의&lt;br&gt;
          주요 대상: 딥페이크 성착취, AI 허위·부당광고, AI 금융사기&lt;br&gt;
          대응 방향: 예방, 탐지·차단, 수사·단속, 피해회복, 재발방지&lt;br&gt;
          향후 계획: AI 범죄 근절 종합 대응 계획 발표 추진
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;어떤 부처가 참여하나&lt;/h2&gt;

        &lt;p&gt;
          AI 범죄 대응 범부처 협의체에는 방송미디어통신위원회, 과학기술정보통신부, 외교부, 법무부, 성평등가족부, 금융위원회, 공정거래위원회, 개인정보보호위원회, 식품의약품안전처, 경찰청 등이 참여한다.
        &lt;/p&gt;
        &lt;p&gt;
          참여 기관 구성을 보면 AI 범죄가 단순한 기술 문제가 아니라 사회 안전, 금융 질서, 개인정보 보호, 소비자 피해, 국제협력까지 포괄하는 복합 이슈임을 알 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          실무 기준으로 보면 AI 범죄 대응의 핵심은 사건 발생 이후 수사만 강화하는 것이 아니라, 탐지와 차단, 피해자 보호, 재발 방지까지 하나의 흐름으로 연결하는 데 있다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;분야&lt;/th&gt;
              &lt;th&gt;주요 역할&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;방송·미디어·통신&lt;/td&gt;
              &lt;td&gt;온라인 유통 차단, 플랫폼 협력, 디지털 유해정보 대응 체계를 담당한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;과학기술&lt;/td&gt;
              &lt;td&gt;AI 기술 동향, 탐지 기술, 대응 기술 개발과 정책 연계를 맡는다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;수사·법무&lt;/td&gt;
              &lt;td&gt;AI 악용 범죄 수사, 단속, 법적 대응 기준 마련에 관여한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;금융&lt;/td&gt;
              &lt;td&gt;AI 보이스피싱, 투자사기, 금융사기 징후 탐지와 피해 예방을 담당한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개인정보&lt;/td&gt;
              &lt;td&gt;AI 범죄 과정에서 발생하는 개인정보 침해와 오남용 문제를 점검한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;소비자·광고&lt;/td&gt;
              &lt;td&gt;AI 허위·부당광고, 기만적 표시, 소비자 피해 확산을 관리한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AI 범죄 근절 종합 대응 계획의 핵심&lt;/h2&gt;

        &lt;p&gt;
          이날 회의에서는 ‘AI 범죄 근절 종합 대응 계획’과 ‘AI 범죄 통합 대응체계 구축 방안’이 논의됐다. 종합 대응 계획은 AI 범죄의 예방부터 재발방지까지 전 과정을 아우르는 범정부 차원의 대처 방안으로 마련되고 있다.
        &lt;/p&gt;
        &lt;p&gt;
          AI 범죄는 생성형 AI, 음성 합성, 이미지 합성, 자동화 광고, 피싱 메시지 생성 등 다양한 기술과 결합한다. 같은 범죄라도 피해가 확산되는 속도가 빠르고, 해외 플랫폼이나 해외 서버를 활용하는 경우도 많아 기존 대응 방식만으로는 한계가 있다.
        &lt;/p&gt;
        &lt;p&gt;
          이에 따라 관계부처는 각자의 전문성과 정책 수단을 연결해 AI 범죄에 대응하는 방향을 논의했다. 단속 기관은 수사 정보를, 금융당국은 금융사기 징후를, 플랫폼·통신 분야는 유통 차단과 확산 방지 체계를 연계하는 방식이다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;대응 단계&lt;/th&gt;
              &lt;th&gt;핵심 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;예방&lt;/td&gt;
              &lt;td&gt;AI 범죄 유형을 사전에 알리고, 고위험 서비스와 취약 계층을 중심으로 피해 예방 체계를 강화한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;탐지·차단&lt;/td&gt;
              &lt;td&gt;딥페이크, 허위광고, 피싱성 콘텐츠 등 AI 악용 징후를 빠르게 확인하고 확산을 막는다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;수사·단속&lt;/td&gt;
              &lt;td&gt;AI 범죄 증거 확보, 가해자 추적, 관계기관 공조를 통해 실질적인 법 집행을 강화한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;피해회복&lt;/td&gt;
              &lt;td&gt;성착취물 삭제 지원, 금융피해 구제, 개인정보 피해 대응 등 피해자 중심의 회복 절차를 마련한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;재발방지&lt;/td&gt;
              &lt;td&gt;반복 범죄와 유사 수법 확산을 막기 위해 제도 개선과 기술적 대응을 병행한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;딥페이크 성착취와 AI 금융사기가 주요 대응 대상&lt;/h2&gt;

        &lt;p&gt;
          AI 범죄 대응 범부처 협의체가 특히 주목하는 영역은 딥페이크 성착취, AI 금융사기, AI 허위·부당광고다. 이들 범죄는 모두 AI 기술로 제작·확산 비용이 낮아지고, 피해가 짧은 시간 안에 커질 수 있다는 공통점이 있다.
        &lt;/p&gt;
        &lt;p&gt;
          딥페이크 성착취는 피해자의 동의 없이 얼굴이나 신체 이미지를 합성해 성적 콘텐츠를 만들고 유포하는 방식으로 나타난다. 피해자는 명예 훼손, 정신적 피해, 2차 유포 위험에 노출된다.
        &lt;/p&gt;
        &lt;p&gt;
          AI 금융사기는 음성 합성, 자동화 메시지, 정교한 사칭 문구 등을 활용해 기존 보이스피싱보다 더 자연스럽고 믿기 쉬운 방식으로 접근할 수 있다. AI 허위광고는 유명인 사칭, 가짜 후기, 과장된 투자·건강 정보와 결합될 가능성이 크다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            AI 범죄는 콘텐츠 생성 속도와 확산 속도가 빠르기 때문에 초기 탐지와 차단이 늦어지면 피해 규모가 급격히 커질 수 있다. 단일 신고 창구보다 관계기관 간 신속한 정보 공유 체계가 중요한 이유다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;통합 대응체계가 필요한 이유&lt;/h2&gt;

        &lt;p&gt;
          AI 범죄는 온라인 플랫폼, 금융, 통신, 개인정보, 수사, 국제협력 영역이 동시에 얽혀 있다. 예를 들어 AI 보이스피싱 사건은 통신망을 통한 접근, 금융계좌 이체, 개인정보 악용, 수사기관 추적이 모두 연결된다.
        &lt;/p&gt;
        &lt;p&gt;
          딥페이크 성착취물 사건도 마찬가지다. 콘텐츠가 생성된 경로, 유포된 플랫폼, 피해자 보호, 불법 촬영물 삭제, 가해자 수사, 해외 서비스 협조가 함께 진행돼야 실효성이 생긴다.
        &lt;/p&gt;
        &lt;p&gt;
          이 때문에 관계부처는 AI 범죄 정보를 더 빠르게 공유하고, 관련 징후를 공동으로 분석하는 상시적 통합 대응체계가 필요하다는 데 공감했다. AI 범죄 대응 범부처 협의체는 이러한 상시 협력 구조를 만들기 위한 출발점이다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;국민 피해 예방과 안전한 AI 활용이 목표&lt;/h2&gt;

        &lt;p&gt;
          협의체 논의의 최종 목표는 AI 기술 자체를 위축시키는 것이 아니라, AI를 악용한 범죄를 줄이고 국민이 안심하고 AI를 활용할 수 있는 환경을 만드는 데 있다.
        &lt;/p&gt;
        &lt;p&gt;
          AI 기술은 행정, 의료, 교육, 금융, 콘텐츠 산업 등 다양한 영역에서 생산성을 높일 수 있다. 그러나 범죄 도구로 악용될 경우 피해자는 기존 범죄보다 더 빠르고 광범위한 피해를 입을 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          따라서 정부 대응은 기술 발전과 안전장치 마련을 함께 추진해야 한다. 탐지 기술, 신고 체계, 플랫폼 책임, 수사 역량, 피해자 지원이 균형 있게 결합될 때 AI 범죄 대응의 실효성이 높아진다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;향후 발표될 종합 대응 계획에서 볼 부분&lt;/h2&gt;

        &lt;p&gt;
          방송미디어통신위원회는 관계부처 합동으로 마련한 ‘AI 범죄 근절 종합 대응 계획’을 향후 국가AI전략위원회 등과 협의를 거쳐 발표할 예정이다.
        &lt;/p&gt;
        &lt;p&gt;
          앞으로 공개될 계획에서는 AI 범죄 유형별 대응 절차, 기관별 역할 분담, 신고·차단 체계, 피해회복 지원, 플랫폼 협력 방식 등이 주요 확인 대상이 될 것으로 보인다.
        &lt;/p&gt;
        &lt;p&gt;
          특히 국민 입장에서는 AI 범죄 피해를 당했을 때 어디에 신고하고, 어떤 지원을 받을 수 있으며, 불법 콘텐츠 삭제나 금융피해 회복 절차가 어떻게 연결되는지 명확히 제시되는지가 중요하다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;AI 범죄 신고 창구가 통합되거나 연계되는지 확인해야 한다.&lt;/li&gt;
          &lt;li&gt;딥페이크 피해 콘텐츠 삭제 지원 절차가 구체화되는지 봐야 한다.&lt;/li&gt;
          &lt;li&gt;AI 금융사기 피해 예방과 지급정지 등 후속 절차가 연결되는지 확인해야 한다.&lt;/li&gt;
          &lt;li&gt;플랫폼 사업자의 탐지·차단 협력 기준이 마련되는지 주목할 필요가 있다.&lt;/li&gt;
          &lt;li&gt;해외 플랫폼과 국제공조가 실제 대응 체계에 포함되는지 확인해야 한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          AI 범죄 대응 범부처 협의체 출범은 AI 악용 범죄가 더 이상 개별 부처 단위로 대응하기 어려운 단계에 들어섰다는 신호다. 딥페이크 성착취, AI 금융사기, AI 허위·부당광고는 각각 다른 피해 양상을 보이지만, 모두 빠른 확산성과 높은 사회적 피해 가능성을 갖고 있다.
        &lt;/p&gt;
        &lt;p&gt;
          이번 협의체는 예방, 탐지·차단, 수사·단속, 피해회복, 재발방지를 하나의 흐름으로 묶는 통합 대응체계 구축에 초점을 맞추고 있다. 관계부처가 정보를 빠르게 공유하고 각자의 정책 수단을 연결할수록 대응 속도와 실효성은 높아질 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          향후 발표될 AI 범죄 근절 종합 대응 계획에서는 국민이 실제로 체감할 수 있는 신고, 차단, 수사, 피해 지원 절차가 얼마나 구체적으로 담기는지가 핵심 평가 기준이 될 전망이다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/ai-crime-government-response-taskforce#article&quot;,
        &quot;headline&quot;: &quot;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&quot;,
        &quot;description&quot;: &quot;정부가 AI 범죄 대응 범부처 협의체를 출범하고 딥페이크 성착취, AI 허위광고, 금융사기 등 AI 악용 범죄에 대한 통합 대응체계 마련에 나섰습니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/ai-crime-government-response-taskforce&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-ai-crime-response-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;AI 범죄&quot;,
          &quot;범부처 협의체&quot;,
          &quot;딥페이크 성착취&quot;,
          &quot;AI 금융사기&quot;,
          &quot;통합 대응체계&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;AI&quot;,
          &quot;디지털 범죄&quot;,
          &quot;정책&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/ai-crime-government-response-taskforce#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;AI 정책&quot;,
            &quot;item&quot;: &quot;https://example.com/ai-policy&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;AI 범죄 대응 범부처 협의체 출범, 딥페이크와 금융사기 공동 대응&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: AI범죄, 범부처협의체, 딥페이크성착취, AI금융사기, AI허위광고, 방송미디어통신위원회, 통합대응체계, 피해회복, 수사단속, 국가AI전략위원회 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI 금융사기</category>
      <category>ai 범죄</category>
      <category>AI 허위광고</category>
      <category>국가AI전략위원회</category>
      <category>딥페이크 성착취</category>
      <category>방송미디어통신위원회</category>
      <category>범부처 협의체</category>
      <category>수사 단속</category>
      <category>통합 대응체계</category>
      <category>피해회복</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/574</guid>
      <comments>https://togethergrow.tistory.com/entry/AI-%EB%B2%94%EC%A3%84-%EB%8C%80%EC%9D%91-%EB%B2%94%EB%B6%80%EC%B2%98-%ED%98%91%EC%9D%98%EC%B2%B4-%EC%B6%9C%EB%B2%94-%EB%94%A5%ED%8E%98%EC%9D%B4%ED%81%AC%EC%99%80-%EA%B8%88%EC%9C%B5%EC%82%AC%EA%B8%B0-%EA%B3%B5%EB%8F%99-%EB%8C%80%EC%9D%91#entry574comment</comments>
      <pubDate>Sun, 28 Jun 2026 15:16:34 +0900</pubDate>
    </item>
    <item>
      <title>빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점</title>
      <link>https://togethergrow.tistory.com/entry/%EB%B9%97%EC%8D%B8-%EA%B3%BC%EC%A7%95%EA%B8%88-2%EC%96%B51000%EB%A7%8C%EC%9B%90-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EA%B5%AD%EC%99%B8%EC%9D%B4%EC%A0%84-%EA%B7%9C%EC%A0%95-%EC%9C%84%EB%B0%98-%EC%9F%81%EC%A0%90</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;개인정보보호위원회가 빗썸에 과징금 2억1000만원을 부과한 배경과 오더북 공유, 가상자산 이전, 블록체인 개인정보 보호 가이드라인의 핵심을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;빗썸,개인정보보호위원회,개인정보 국외이전,과징금,오더북 공유,가상자산 이전,블록체인 가이드라인,개인정보 보호법,온체인 정보,트래블룰&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;빗썸의 개인정보 국외이전 규정 위반 사례와 블록체인 서비스 개인정보 보호 기준의 의미를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/bithumb-overseas-personal-data-transfer&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-bithumb-privacy-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;개인정보위의 빗썸 제재와 블록체인 개인정보 보호 가이드라인의 핵심을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-bithumb-privacy-thumbnail.jpg&quot;&gt;

  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }

    .article-wrap code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
      font-family: Consolas, Monaco, monospace;
      font-size: 0.95em;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;Privacy &amp; Blockchain&lt;/span&gt;
        &lt;h1&gt;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          개인정보보호위원회가 해외 가상자산거래소와의 오더북 공유 및 가상자산 이전 과정에서 개인정보 국외이전 요건을 일부 지키지 않은 빗썸에 과징금 2억1000만원과 시정명령을 의결했다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;개인정보위가 빗썸에 제재를 내린 이유&lt;/h2&gt;

        &lt;p&gt;
          개인정보보호위원회는 6월 24일 제12회 전체회의에서 개인정보 보호법상 개인정보 국외이전 규정을 위반한 빗썸에 과징금 2억1000만원을 부과하고 시정명령을 의결했다.
        &lt;/p&gt;
        &lt;p&gt;
          쟁점은 해외 가상자산거래소와 오더북을 공유하고, 이용자의 가상자산을 해외 거래소로 이전하는 과정에서 정보주체의 별도 동의 등 법에서 요구하는 국외이전 요건을 충분히 갖췄는지 여부였다.
        &lt;/p&gt;
        &lt;p&gt;
          개인정보 국외이전은 단순한 시스템 연동 문제가 아니라 이용자의 자기결정권과 직접 연결된다. 어떤 정보가, 어느 국가의 어떤 사업자에게, 어떤 목적으로 이전되는지 이용자가 명확히 알고 동의할 수 있어야 한다는 점이 핵심이다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          제재 대상: 빗썸&lt;br&gt;
          제재 기관: 개인정보보호위원회&lt;br&gt;
          제재 내용: 과징금 2억1000만원 및 시정명령&lt;br&gt;
          주요 쟁점: 개인정보 국외이전 요건 미준수&lt;br&gt;
          관련 분야: 오더북 공유, 가상자산 이전, 블록체인 개인정보 보호
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;동의받은 거래소와 실제 이전 대상이 달랐다는 점&lt;/h2&gt;

        &lt;p&gt;
          개인정보위는 2025년 국정감사에서 빗썸의 오더북 공유와 관련한 개인정보 국외이전 적법성 문제가 제기되자 조사를 진행했다. 오더북 공유는 거래소 간 매수·매도 주문정보를 공유해 서로의 주문을 교차 체결할 수 있도록 하는 제휴 방식이다.
        &lt;/p&gt;
        &lt;p&gt;
          조사 결과, 빗썸은 해외 거래소와 오더북을 공유하는 과정에서 이용자에게 안내하고 동의받은 내용과 실제 개인정보 이전 대상이 다른 사례가 확인됐다.
        &lt;/p&gt;
        &lt;p&gt;
          빗썸은 테더 마켓에서 해외 거래소와 오더북을 공유하면서 이용자에게는 스텔라 거래소로 개인정보를 국외이전한다는 취지로 동의를 받았지만, 실제 회원번호와 주문정보는 다른 거래소가 운영하는 시스템으로 이전된 것으로 판단됐다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            운영 환경에서는 “동의를 받았다”는 사실만으로 충분하지 않다. 실제 이전받는 사업자, 이전 항목, 이전 목적, 보유·이용 기간이 동의 내용과 일치해야 개인정보 국외이전 리스크를 줄일 수 있다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;가상자산 이전 과정에서 제공된 개인정보&lt;/h2&gt;

        &lt;p&gt;
          빗썸은 이용자의 가상자산을 13개 해외 거래소로 이전하는 과정에서 자금세탁방지 목적의 정보를 제공했다. 이때 송금인과 수취인의 이름, 지갑주소 등 개인정보가 해외 거래소에 전달됐다.
        &lt;/p&gt;
        &lt;p&gt;
          이 가운데 일부 거래소에는 송금인과 수취인이 동일인인지 확인하기 위해 생년월일도 제공된 것으로 확인됐다. 개인정보위는 자금세탁방지를 위해 일정한 개인정보 제공 필요성은 인정했다.
        &lt;/p&gt;
        &lt;p&gt;
          그러나 필요성이 인정된다고 해서 개인정보 국외이전 절차가 면제되는 것은 아니다. 개인정보 보호법에서 정한 요건과 절차를 충족해야 하며, 정보주체가 자신의 개인정보 이전 사실을 명확히 인식할 수 있어야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;주요 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;오더북 공유&lt;/td&gt;
              &lt;td&gt;해외 거래소와 주문정보를 공유해 교차 체결이 가능하도록 한 제휴 구조가 문제로 다뤄졌다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;가상자산 이전&lt;/td&gt;
              &lt;td&gt;해외 거래소로 자산을 이전하는 과정에서 송금인·수취인 정보가 제공됐다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제공 정보&lt;/td&gt;
              &lt;td&gt;이름, 지갑주소, 회원번호, 주문정보 등이 개인정보 국외이전 쟁점에 포함됐다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;추가 제공 정보&lt;/td&gt;
              &lt;td&gt;일부 거래소에는 동일인 확인을 위해 생년월일이 제공된 것으로 확인됐다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개인정보위 판단&lt;/td&gt;
              &lt;td&gt;자금세탁방지 목적의 필요성은 인정하되, 국외이전 요건 준수는 별도로 필요하다고 봤다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;개인정보 국외이전에서 중요한 기준&lt;/h2&gt;

        &lt;p&gt;
          개인정보 국외이전은 국내 이용자의 개인정보가 해외 사업자나 해외 시스템으로 넘어가는 행위다. 이 과정에서는 정보주체가 이전 사실을 충분히 알고 선택할 수 있어야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          특히 금융, 가상자산, 블록체인 서비스에서는 거래 정보와 식별 정보가 결합될 수 있다. 지갑주소처럼 겉으로는 익명처럼 보이는 정보도 다른 정보와 결합되면 특정 개인을 식별하거나 추적하는 단서가 될 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          실무 기준으로 보면 개인정보 국외이전 점검은 단순한 약관 문구 확인이 아니라 실제 데이터 흐름을 기준으로 해야 한다. 시스템 로그, API 연동 대상, 데이터 수신 사업자, 처리방침 공개 내용이 모두 일치해야 한다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;개인정보가 실제로 어느 해외 사업자에게 이전되는지 확인한다.&lt;/li&gt;
          &lt;li&gt;이전되는 개인정보 항목이 동의 또는 고지 내용과 일치하는지 점검한다.&lt;/li&gt;
          &lt;li&gt;이전 목적과 보유·이용 기간이 명확하게 안내됐는지 확인한다.&lt;/li&gt;
          &lt;li&gt;개인정보 처리방침에 국외이전 사실이 구체적으로 공개됐는지 확인한다.&lt;/li&gt;
          &lt;li&gt;제휴 구조가 변경될 때 동의 문구와 시스템 설정이 함께 갱신되는지 점검한다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;블록체인 서비스 개인정보 보호 가이드라인의 의미&lt;/h2&gt;

        &lt;p&gt;
          개인정보위는 이번 조사 과정에서 확인한 블록체인 기술의 특성을 반영해 블록체인 서비스 개인정보 보호 가이드라인도 발표했다. 블록체인은 투명성, 분산성, 불변성을 핵심 특성으로 한다.
        &lt;/p&gt;
        &lt;p&gt;
          투명성은 참여자가 거래내역을 확인할 수 있다는 의미이고, 분산성은 여러 참여자가 데이터를 공유하며 운영한다는 의미다. 불변성은 한 번 기록된 정보를 수정하거나 삭제하기 어렵다는 특성이다.
        &lt;/p&gt;
        &lt;p&gt;
          이러한 특성은 블록체인 서비스의 장점이 될 수 있지만, 개인정보 보호 관점에서는 위험 요인이 되기도 한다. 한 번 온체인에 기록된 정보가 다수 참여자에게 복제되면 사후 삭제나 정정이 매우 어렵기 때문이다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;가이드라인 항목&lt;/th&gt;
              &lt;th&gt;관리 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;온체인 정보 공개&lt;/td&gt;
              &lt;td&gt;블록체인에 직접 기록되는 정보가 개인정보에 해당하는지 사전에 검토해야 한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;추적 방지&lt;/td&gt;
              &lt;td&gt;지갑주소, 거래정보, 식별자가 결합돼 개인 활동이 추적되지 않도록 설계해야 한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;참여자 간 정보 공유&lt;/td&gt;
              &lt;td&gt;노드 운영자, 제휴사, 해외 사업자 간 개인정보 공유 범위와 책임을 명확히 해야 한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개인정보 파기&lt;/td&gt;
              &lt;td&gt;수정·삭제가 어려운 환경을 고려해 온체인 기록을 최소화하고 별도 파기 방안을 설계해야 한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;가상자산 사업자가 점검해야 할 부분&lt;/h2&gt;

        &lt;p&gt;
          이번 빗썸 제재는 가상자산 사업자에게 개인정보 국외이전 관리 체계를 다시 점검해야 한다는 신호로 볼 수 있다. 해외 거래소, 유동성 공급자, 지갑 서비스, 자금세탁방지 솔루션 등과 연동되는 구조에서는 개인정보 이동 경로가 복잡해지기 쉽다.
        &lt;/p&gt;
        &lt;p&gt;
          특히 오더북 공유처럼 거래 체결을 위해 외부 시스템과 주문정보를 주고받는 경우, 정보가 단순 거래 데이터인지 개인정보인지 명확히 판단해야 한다. 회원번호나 주문정보도 다른 정보와 결합되면 개인 식별 가능성이 생길 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          관리자 입장에서 중요한 것은 개인정보 처리방침, 이용자 동의 화면, 실제 API 전송 항목, 해외 수신자 목록을 한 번에 맞춰보는 것이다. 문서상 안내와 실제 시스템 동작이 다르면 제재 리스크가 커질 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;이용자에게 주는 시사점&lt;/h2&gt;

        &lt;p&gt;
          이용자 입장에서는 가상자산 거래소 이용 시 개인정보가 국내에만 머무르지 않을 수 있다는 점을 이해할 필요가 있다. 해외 거래소와의 제휴, 가상자산 이전, 자금세탁방지 절차에서 개인정보가 국외로 이전될 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          개인정보 국외이전 동의 화면에서는 이전받는 자, 이전 국가, 이전 항목, 이전 목적, 보유 기간을 확인하는 것이 중요하다. 특히 지갑주소나 거래정보는 블록체인 특성상 다른 공개 정보와 결합될 수 있어 주의가 필요하다.
        &lt;/p&gt;
        &lt;p&gt;
          개인정보 보호는 서비스 제공자의 의무이지만, 이용자도 동의 화면과 개인정보 처리방침을 확인해 자신의 정보가 어떻게 처리되는지 파악하는 것이 좋다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          빗썸에 대한 과징금 2억1000만원 부과는 가상자산 서비스에서 개인정보 국외이전 절차가 얼마나 중요한지를 보여준다. 자금세탁방지나 거래 연동 목적이 있더라도 정보주체의 권리를 보장하는 절차는 별도로 충족돼야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          이번 사안은 오더북 공유, 가상자산 이전, 블록체인 데이터 처리라는 세 가지 흐름이 동시에 맞물린 사례다. 특히 온체인 정보와 해외 사업자 연동이 많은 서비스일수록 개인정보 보호 설계를 초기 단계부터 반영해야 한다.
        &lt;/p&gt;
        &lt;p&gt;
          앞으로 가상자산·블록체인 서비스 사업자는 개인정보 국외이전 동의, 처리방침 공개, 온체인 기록 최소화, 참여자 간 책임 분담을 더 엄격하게 관리해야 할 것으로 보인다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/bithumb-overseas-personal-data-transfer#article&quot;,
        &quot;headline&quot;: &quot;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&quot;,
        &quot;description&quot;: &quot;개인정보보호위원회가 빗썸에 과징금 2억1000만원을 부과한 배경과 오더북 공유, 가상자산 이전, 블록체인 개인정보 보호 가이드라인의 핵심을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/bithumb-overseas-personal-data-transfer&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-bithumb-privacy-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;빗썸&quot;,
          &quot;개인정보 국외이전&quot;,
          &quot;개인정보보호위원회&quot;,
          &quot;오더북 공유&quot;,
          &quot;블록체인 개인정보 보호&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;개인정보&quot;,
          &quot;가상자산&quot;,
          &quot;블록체인&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/bithumb-overseas-personal-data-transfer#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;개인정보&quot;,
            &quot;item&quot;: &quot;https://example.com/privacy&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;빗썸 과징금 2억1000만원, 개인정보 국외이전 규정 위반 쟁점&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: 빗썸, 개인정보보호위원회, 개인정보국외이전, 과징금, 오더북공유, 가상자산이전, 블록체인가이드라인, 개인정보보호법, 온체인정보, 트래블룰 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>가상자산 이전</category>
      <category>개인정보 국외이전</category>
      <category>개인정보 보호법</category>
      <category>개인정보보호위원회</category>
      <category>과징금</category>
      <category>블록체인 가이드라인</category>
      <category>빗썸</category>
      <category>오더북 공유</category>
      <category>온체인 정보</category>
      <category>트래블룰</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/573</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%B9%97%EC%8D%B8-%EA%B3%BC%EC%A7%95%EA%B8%88-2%EC%96%B51000%EB%A7%8C%EC%9B%90-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4-%EA%B5%AD%EC%99%B8%EC%9D%B4%EC%A0%84-%EA%B7%9C%EC%A0%95-%EC%9C%84%EB%B0%98-%EC%9F%81%EC%A0%90#entry573comment</comments>
      <pubDate>Sun, 28 Jun 2026 15:15:01 +0900</pubDate>
    </item>
    <item>
      <title>DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험</title>
      <link>https://togethergrow.tistory.com/entry/DirtyClone-%EC%B7%A8%EC%95%BD%EC%A0%90-%EA%B3%B5%EA%B0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EB%A3%A8%ED%8A%B8-%EA%B6%8C%ED%95%9C-%ED%83%88%EC%B7%A8-%EC%9C%84%ED%97%98</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;리눅스 커널 권한 상승 취약점 DirtyClone의 핵심 원리와 영향 범위, 관리자 관점의 대응 방법을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;DirtyClone,CVE-2026-43503,리눅스 커널,권한 상승,루트 권한,JFrog,IPsec,커널 업데이트,사용자 네임스페이스,Kubernetes&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;리눅스 커널 DirtyClone 취약점의 공격 흐름과 위험 환경, 즉시 확인해야 할 보안 대응 방안을 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/linux-dirtyclone-cve-2026-43503&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-dirtyclone-thumbnail.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;리눅스 커널 권한 상승 취약점 DirtyClone의 핵심 원리와 관리자 대응 방안을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-dirtyclone-thumbnail.jpg&quot;&gt;

  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      color: inherit;
    }

    .article-wrap .article-header {
      margin-bottom: 28px;
    }

    .article-wrap .eyebrow {
      display: inline-block;
      margin-bottom: 10px;
      font-size: 0.92em;
      font-weight: 700;
      letter-spacing: -0.01em;
    }

    .article-wrap h1 {
      margin: 0 0 14px;
      font-size: 1.9em;
      line-height: 1.35;
      letter-spacing: -0.03em;
    }

    .article-wrap .summary {
      margin: 0;
      font-size: 1.05em;
      line-height: 1.75;
    }

    .article-wrap section {
      margin: 34px 0;
    }

    .article-wrap h2 {
      margin: 0 0 18px;
      font-size: 1.45em;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .info-box {
      margin: 22px 0;
      padding: 18px 20px;
      border: 1px solid rgba(120, 120, 120, 0.28);
      border-radius: 12px;
    }

    .article-wrap .info-box strong {
      display: block;
      margin-bottom: 8px;
    }

    .article-wrap .check-list {
      margin: 14px 0 0;
      padding-left: 20px;
    }

    .article-wrap .check-list li {
      margin-bottom: 8px;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
      font-size: 0.96em;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid rgba(120, 120, 120, 0.28);
      padding: 12px 14px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }

    .article-wrap .notice {
      margin-top: 24px;
      padding: 18px 20px;
      border-left: 4px solid currentColor;
      border-radius: 10px;
      background: rgba(120, 120, 120, 0.08);
    }

    .article-wrap .notice p {
      margin-bottom: 0;
    }

    .article-wrap code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
      font-family: Consolas, Monaco, monospace;
      font-size: 0.95em;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;article&gt;
      &lt;header class=&quot;article-header&quot;&gt;
        &lt;span class=&quot;eyebrow&quot;&gt;Linux Kernel Security&lt;/span&gt;
        &lt;h1&gt;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&lt;/h1&gt;
        &lt;p class=&quot;summary&quot;&gt;
          리눅스 커널에서 로컬 사용자가 최고 관리자 권한인 루트 권한을 획득할 수 있는 권한 상승 취약점이 공개됐다. 이번 취약점은 DirtyClone으로 불리며, CVE-2026-43503으로 추적된다.
        &lt;/p&gt;
      &lt;/header&gt;

      &lt;section&gt;
        &lt;h2&gt;DirtyClone은 어떤 취약점인가&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone은 리눅스 커널의 네트워크 패킷 처리 과정에서 발생하는 로컬 권한 상승 취약점이다. 보안기업 JFrog는 2026년 6월 25일 DirtyClone으로 불리는 CVE-2026-43503의 실제 익스플로잇 내용을 공개했다.
        &lt;/p&gt;
        &lt;p&gt;
          이 취약점은 최근 연이어 보고된 DirtyFrag 계열과 같은 취약점 흐름에 속한다. 핵심은 커널이 네트워크 패킷을 복사하거나 복제하는 과정에서 파일과 연결된 메모리 조각의 상태를 올바르게 유지하지 못한다는 점이다.
        &lt;/p&gt;
        &lt;p&gt;
          공격자는 이 허점을 이용해 디스크에 저장된 파일 자체를 바꾸지 않고도, 메모리에 올라간 실행 파일의 동작을 변조할 수 있다. 그 결과 일반 사용자 권한에서 루트 권한 획득으로 이어질 수 있다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;핵심 요약&lt;/strong&gt;
          취약점 이름: DirtyClone&lt;br&gt;
          식별 번호: CVE-2026-43503&lt;br&gt;
          유형: 리눅스 커널 로컬 권한 상승&lt;br&gt;
          영향: 루트 권한 탈취 가능&lt;br&gt;
          주요 조건: 로컬 코드 실행 및 특정 네트워크 관련 권한 조건&lt;br&gt;
          우선 대응: 커널 보안 업데이트 적용
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;메모리만 바꿔 탐지가 어려운 이유&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone 공격의 특징은 파일을 직접 수정하지 않는다는 점이다. 공격자는 &lt;code&gt;/usr/bin/su&lt;/code&gt;와 같은 시스템 실행 파일을 메모리에 올린 뒤, IPsec 패킷 복제 과정과 관련된 커널 동작을 악용해 로그인 검증 흐름을 메모리상에서 변조할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          디스크에 저장된 원본 파일은 그대로 유지된다. 따라서 단순 파일 무결성 검사나 일반적인 악성 파일 탐지만으로는 이상 여부를 놓칠 가능성이 있다. 시스템을 재부팅하면 메모리 상태는 원래대로 돌아갈 수 있지만, 공격자는 그 전에 이미 루트 권한을 얻었을 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          운영 환경에서는 이처럼 “파일은 정상인데 실행 중인 메모리 상태만 바뀌는” 유형의 취약점이 특히 까다롭다. 로그, 권한 변경 흔적, 비정상 프로세스 실행 여부까지 함께 봐야 실제 침해 여부를 판단할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;위험이 큰 환경&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone은 원격에서 아무 조건 없이 바로 실행되는 취약점이라기보다는, 공격자가 먼저 로컬에서 코드를 실행할 수 있는 조건이 있을 때 위험이 커지는 로컬 권한 상승 취약점이다.
        &lt;/p&gt;
        &lt;p&gt;
          문제는 여러 리눅스 운영 환경에서 일반 사용자나 컨테이너 내부 프로세스가 제한된 권한으로 코드를 실행할 수 있다는 점이다. 특히 사용자 네임스페이스가 기본적으로 허용되는 배포판에서는 공격 조건이 더 쉽게 충족될 수 있다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;위험 이유&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;CI/CD 서버&lt;/td&gt;
              &lt;td&gt;빌드 작업 중 외부 코드가 실행될 수 있어 로컬 권한 상승 위험이 커질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;컨테이너 호스트&lt;/td&gt;
              &lt;td&gt;컨테이너 격리 환경에서 커널 취약점이 호스트 권한 문제로 이어질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Kubernetes 클러스터&lt;/td&gt;
              &lt;td&gt;여러 워크로드가 같은 커널을 공유하므로 취약 노드의 영향 범위가 커질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;멀티테넌트 서버&lt;/td&gt;
              &lt;td&gt;여러 사용자가 함께 사용하는 환경에서는 일반 계정 침해가 루트 권한 탈취로 이어질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개발·테스트 서버&lt;/td&gt;
              &lt;td&gt;임시 계정, 자동화 스크립트, 권한 완화 설정이 많아 공격 표면이 넓어질 수 있다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;CAP_NET_ADMIN과 사용자 네임스페이스가 중요한 이유&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone 공격에는 네트워크 설정과 관련된 &lt;code&gt;CAP_NET_ADMIN&lt;/code&gt; 권한이 관여한다. 일반적으로 이 권한은 강한 권한으로 취급되지만, 사용자 네임스페이스가 허용된 환경에서는 일반 사용자도 제한된 범위 안에서 필요한 조건을 만들 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          Debian, Fedora 등 일부 배포판은 기본 설정에서 비권한 사용자 네임스페이스를 허용하는 경우가 있다. 이 경우 공격자는 별도의 관리자 권한 없이도 익스플로잇 실행 조건에 접근할 수 있다.
        &lt;/p&gt;
        &lt;p&gt;
          관리자 입장에서 중요한 지점은 단순히 “일반 사용자는 루트가 아니므로 안전하다”는 판단이 더 이상 충분하지 않다는 것이다. 커널 취약점은 사용자 공간의 제한을 우회해 시스템 전체 권한 문제로 확대될 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;패치 상태와 우선 대응&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone 관련 수정은 2026년 5월 리눅스 메인라인 커널에 반영됐으며, 이후 안정 버전과 장기지원 커널에도 적용되는 흐름이다. 주요 리눅스 배포판도 커널 보안 업데이트를 제공하고 있다.
        &lt;/p&gt;
        &lt;p&gt;
          가장 확실한 대응은 커널 업데이트다. 보안 패치가 적용된 커널로 재부팅해야 실제 보호 상태가 완성된다. 패키지만 업데이트하고 재부팅하지 않은 서버는 여전히 취약한 커널로 동작할 수 있다.
        &lt;/p&gt;

        &lt;div class=&quot;notice&quot;&gt;
          &lt;p&gt;
            커널 보안 업데이트 후에는 반드시 현재 실행 중인 커널 버전을 확인해야 한다. 패키지 목록상 최신 버전이 설치돼 있어도, 재부팅 전에는 이전 커널이 계속 실행될 수 있다.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;패치가 어려울 때의 임시 완화책&lt;/h2&gt;

        &lt;p&gt;
          즉시 커널 업데이트가 어려운 환경이라면 임시 완화책을 적용해 공격 가능성을 낮출 수 있다. 다만 이는 근본적인 해결책이 아니며, 서비스 영향도를 검토한 뒤 제한적으로 적용해야 한다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;비권한 사용자 네임스페이스 생성을 제한한다.&lt;/li&gt;
          &lt;li&gt;불필요한 IPsec 관련 커널 모듈 사용을 중지하거나 제한한다.&lt;/li&gt;
          &lt;li&gt;CI/CD 러너와 빌드 서버의 작업 계정 권한을 재점검한다.&lt;/li&gt;
          &lt;li&gt;컨테이너 호스트와 Kubernetes 노드의 커널 버전을 우선 확인한다.&lt;/li&gt;
          &lt;li&gt;최근 루트 권한 획득, su 실행, 비정상 계정 생성 흔적을 점검한다.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          실제 사용 시 임시 완화책은 서비스 호환성 문제를 만들 수 있다. 예를 들어 사용자 네임스페이스 제한은 일부 컨테이너 런타임, 샌드박스, 개발 도구 동작에 영향을 줄 수 있으므로 사전 테스트가 필요하다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자가 지금 확인해야 할 항목&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone 대응은 단순히 취약점 이름을 확인하는 것보다 운영 중인 커널, 배포판 보안 공지, 재부팅 여부, 컨테이너 호스트 상태를 함께 확인하는 방식으로 진행해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;점검 항목&lt;/th&gt;
              &lt;th&gt;확인 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;커널 버전&lt;/td&gt;
              &lt;td&gt;현재 실행 중인 커널이 보안 패치 적용 대상인지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;보안 업데이트&lt;/td&gt;
              &lt;td&gt;배포판에서 제공한 최신 커널 보안 업데이트가 설치됐는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;재부팅 여부&lt;/td&gt;
              &lt;td&gt;업데이트 후 실제로 새 커널로 부팅됐는지 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;사용자 네임스페이스&lt;/td&gt;
              &lt;td&gt;비권한 사용자의 네임스페이스 생성 허용 여부를 점검한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;공유 서버&lt;/td&gt;
              &lt;td&gt;여러 사용자가 접근하는 서버에서 로컬 코드 실행 가능성을 점검한다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;컨테이너 환경&lt;/td&gt;
              &lt;td&gt;호스트 커널을 공유하는 컨테이너 워크로드의 위험도를 확인한다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;

        &lt;p&gt;
          DirtyClone은 리눅스 커널의 네트워크 패킷 복제 과정에서 발생하는 권한 상승 취약점으로, 로컬 사용자가 루트 권한을 획득할 수 있다는 점에서 위험도가 높다.
        &lt;/p&gt;
        &lt;p&gt;
          특히 디스크 파일을 바꾸지 않고 메모리만 변조하는 방식은 일반적인 파일 무결성 검사만으로 탐지하기 어렵다. CI/CD 서버, 컨테이너 호스트, Kubernetes 클러스터, 멀티테넌트 서버처럼 여러 사용자가 코드를 실행할 수 있는 환경은 우선 점검 대상이다.
        &lt;/p&gt;
        &lt;p&gt;
          DirtyClone 대응의 핵심은 커널 업데이트와 재부팅이다. 임시 완화책은 공격 조건을 줄이는 데 도움이 될 수 있지만, 장기적으로는 보안 패치가 반영된 커널을 적용하는 것이 가장 안전하다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/linux-dirtyclone-cve-2026-43503#article&quot;,
        &quot;headline&quot;: &quot;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&quot;,
        &quot;description&quot;: &quot;리눅스 커널 권한 상승 취약점 DirtyClone의 핵심 원리와 영향 범위, 관리자 관점의 대응 방법을 정리합니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/linux-dirtyclone-cve-2026-43503&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-dirtyclone-thumbnail.jpg&quot;,
        &quot;about&quot;: [
          &quot;DirtyClone&quot;,
          &quot;CVE-2026-43503&quot;,
          &quot;리눅스 커널 권한 상승&quot;,
          &quot;루트 권한 탈취&quot;,
          &quot;IPsec 패킷 복제&quot;
        ],
        &quot;articleSection&quot;: [
          &quot;보안&quot;,
          &quot;리눅스&quot;,
          &quot;취약점 대응&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/linux-dirtyclone-cve-2026-43503#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;보안&quot;,
            &quot;item&quot;: &quot;https://example.com/security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;DirtyClone 취약점 공개, 리눅스 커널 루트 권한 탈취 위험&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;!-- 관리자 입력용 태그 10개: DirtyClone, CVE-2026-43503, 리눅스커널, 권한상승, 루트권한, JFrog, IPsec, 커널업데이트, 사용자네임스페이스, Kubernetes --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>CVE-2026-43503</category>
      <category>DirtyClone</category>
      <category>ipsec</category>
      <category>jfrog</category>
      <category>kubernetes</category>
      <category>권한 상승</category>
      <category>루트 권한</category>
      <category>리눅스 커널</category>
      <category>사용자 네임스페이스</category>
      <category>커널 업데이트</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/572</guid>
      <comments>https://togethergrow.tistory.com/entry/DirtyClone-%EC%B7%A8%EC%95%BD%EC%A0%90-%EA%B3%B5%EA%B0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EB%A3%A8%ED%8A%B8-%EA%B6%8C%ED%95%9C-%ED%83%88%EC%B7%A8-%EC%9C%84%ED%97%98#entry572comment</comments>
      <pubDate>Sun, 28 Jun 2026 15:13:20 +0900</pubDate>
    </item>
    <item>
      <title>Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크</title>
      <link>https://togethergrow.tistory.com/entry/Jakarta-EE-10%EC%97%90%EC%84%9C-11%EB%A1%9C-%EC%98%AC%EB%A6%B4-%EB%95%8C-Spring-%ED%99%98%EA%B2%BD%EC%9D%98-%EC%A3%BC%EC%9A%94-%EB%A6%AC%EC%8A%A4%ED%81%AC</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Jakarta EE 10과 11의 차이를 기준으로 기존 Spring 환경에서 실제로 발생할 수 있는 라이브러리, 런타임, 빌드, 소스코드 리스크를 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;Jakarta EE 11,Jakarta EE 10,Spring Boot 3,Spring Framework 6,Java 17,JPA,Validation,Tomcat,라이브러리 충돌,업그레이드 리스크&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;Jakarta EE 10과 11의 차이를 기준으로 기존 Spring 환경에서 실제로 발생할 수 있는 라이브러리, 런타임, 빌드, 소스코드 리스크를 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/jakarta-ee-10-11-spring-risk&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Jakarta EE 10과 11의 차이를 기준으로 기존 Spring 환경에서 실제로 발생할 수 있는 라이브러리, 런타임, 빌드, 소스코드 리스크를 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        word-break: keep-all;
        overflow-wrap: break-word;
      }

      .post-content .content-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        line-height: 1.35;
        margin: 0 0 24px;
        font-size: 1.9rem;
      }

      .post-content h2 {
        line-height: 1.45;
        margin: 42px 0 14px;
        font-size: 1.45rem;
      }

      .post-content h2 + .section-gap {
        height: 10px;
      }

      .post-content h3 {
        margin: 28px 0 10px;
        font-size: 1.15rem;
      }

      .post-content p {
        margin: 0 0 16px;
      }

      .post-content ul,
      .post-content ol {
        margin: 0 0 18px 22px;
        padding: 0;
      }

      .post-content li {
        margin: 6px 0;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 18px 0 24px;
        font-size: 0.95rem;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #d8dde6;
        padding: 12px;
        vertical-align: top;
      }

      .post-content th {
        font-weight: 700;
      }

      .post-content .note-box {
        border: 1px solid #d8dde6;
        border-radius: 12px;
        padding: 16px 18px;
        margin: 20px 0;
      }

      .post-content .risk-box {
        border: 1px solid #d8dde6;
        border-left: 5px solid #444;
        border-radius: 12px;
        padding: 16px 18px;
        margin: 20px 0;
      }

      .post-content .code-block {
        border: 1px solid #d8dde6;
        border-radius: 10px;
        padding: 14px;
        overflow-x: auto;
        margin: 14px 0 22px;
      }

      .post-content code {
        font-family: Consolas, Monaco, monospace;
        font-size: 0.94em;
      }

      .post-content pre {
        margin: 0;
        white-space: pre-wrap;
      }

      .post-content .summary-list {
        display: grid;
        gap: 12px;
        margin: 20px 0;
      }

      .post-content .summary-item {
        border: 1px solid #d8dde6;
        border-radius: 12px;
        padding: 14px 16px;
      }

      .post-content .summary-item strong {
        display: block;
        margin-bottom: 6px;
      }
    &lt;/style&gt;

    &lt;article class=&quot;content-wrap&quot;&gt;
      &lt;h1&gt;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&lt;/h1&gt;

      &lt;p&gt;
        Jakarta EE 10에서 Jakarta EE 11로 넘어가는 변화는 과거의 &lt;code&gt;javax.*&lt;/code&gt;에서 &lt;code&gt;jakarta.*&lt;/code&gt;로 바뀌던 수준의 대격변은 아닙니다. 하지만 기존 Spring 환경에서는 Java 버전, Spring Framework 세대, 내장 서버, JPA, Validation, XML/SOAP 연계 라이브러리에서 실제 장애가 발생할 수 있습니다.
      &lt;/p&gt;

      &lt;p&gt;
        핵심은 Jakarta EE 11 API만 올린다고 업그레이드가 끝나는 것이 아니라는 점입니다. 관리자 입장에서 보면 애플리케이션 코드보다 의존성 트리, 런타임 서버, 빌드 도구, 테스트 환경의 불일치가 먼저 문제를 일으키는 경우가 많습니다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;Jakarta EE 10과 11의 큰 차이&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;Jakarta EE 10&lt;/th&gt;
              &lt;th&gt;Jakarta EE 11&lt;/th&gt;
              &lt;th&gt;Spring 환경 영향&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Java 기준&lt;/td&gt;
              &lt;td&gt;Java 11 이상 흐름&lt;/td&gt;
              &lt;td&gt;Java 17 이상 기준&lt;/td&gt;
              &lt;td&gt;JDK, CI/CD, 컨테이너 이미지, 운영 서버 JVM 확인 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring 기준&lt;/td&gt;
              &lt;td&gt;Spring Boot 3.x, Spring Framework 6.x와 주로 연결&lt;/td&gt;
              &lt;td&gt;더 최신 Jakarta API 조합 확인 필요&lt;/td&gt;
              &lt;td&gt;Boot가 관리하는 의존성 버전을 우회하면 충돌 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Servlet&lt;/td&gt;
              &lt;td&gt;Servlet 6.0&lt;/td&gt;
              &lt;td&gt;Servlet 6.1&lt;/td&gt;
              &lt;td&gt;Tomcat, Jetty, Undertow 버전 확인 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Persistence&lt;/td&gt;
              &lt;td&gt;Jakarta Persistence 3.1&lt;/td&gt;
              &lt;td&gt;Jakarta Persistence 3.2&lt;/td&gt;
              &lt;td&gt;Hibernate, JPQL, 엔티티 매핑, 트랜잭션 테스트 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Validation&lt;/td&gt;
              &lt;td&gt;Jakarta Validation 3.0&lt;/td&gt;
              &lt;td&gt;Jakarta Validation 3.1&lt;/td&gt;
              &lt;td&gt;Hibernate Validator, EL 구현체, Bean Validation 초기화 확인 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제거·변경&lt;/td&gt;
              &lt;td&gt;EE 10 플랫폼 구성 유지&lt;/td&gt;
              &lt;td&gt;Managed Beans 제거, XML Binding·XML Web Services·SAAJ 플랫폼 제외&lt;/td&gt;
              &lt;td&gt;레거시 SOAP/XML 연계 시스템에서 영향 가능성 큼&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;note-box&quot;&gt;
          Jakarta EE 10에서 11로의 전환은 패키지명 변경보다 런타임 기준 상향과 스펙 구성 변경에 가깝습니다.&lt;br&gt;
          이미 &lt;code&gt;jakarta.*&lt;/code&gt; 패키지를 쓰고 있더라도 Java 17, 구현체 버전, 외부 WAS, SOAP/XML 의존성을 함께 봐야 합니다.&lt;br&gt;
          특히 Spring Boot의 BOM 관리 범위를 벗어나 Jakarta API를 개별 고정하면 컴파일 이후 실행 단계에서 문제가 드러날 수 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;1. 라이브러리 관점 리스크&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;h3&gt;Spring Boot가 관리하는 버전과 직접 선언한 Jakarta API가 충돌할 수 있음&lt;/h3&gt;
        &lt;p&gt;
          Spring Boot 프로젝트는 보통 &lt;code&gt;spring-boot-dependencies&lt;/code&gt;를 통해 Servlet, Validation, Persistence, Jackson, Hibernate, Tomcat 같은 주요 라이브러리 버전을 함께 관리합니다. 그런데 Jakarta EE 11로 올린다는 이유로 &lt;code&gt;jakarta.servlet-api&lt;/code&gt;, &lt;code&gt;jakarta.persistence-api&lt;/code&gt;, &lt;code&gt;jakarta.validation-api&lt;/code&gt; 등을 직접 최신 버전으로 고정하면 Boot가 검증한 조합에서 벗어날 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          이때 자주 발생하는 문제는 컴파일은 되지만 실행 시점에 &lt;code&gt;NoSuchMethodError&lt;/code&gt;, &lt;code&gt;ClassNotFoundException&lt;/code&gt;, &lt;code&gt;LinkageError&lt;/code&gt;가 터지는 형태입니다. API jar와 실제 구현체 jar의 세대가 다르면 이런 문제가 발생합니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;mvn dependency:tree | grep -E &quot;jakarta|javax|hibernate|tomcat|jetty|validator&quot;

./gradlew dependencies | grep -E &quot;jakarta|javax|hibernate|tomcat|jetty|validator&quot;&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;h3&gt;Hibernate 5.x 또는 오래된 Validator가 남아 있으면 위험함&lt;/h3&gt;
        &lt;p&gt;
          Jakarta EE 11에서는 Persistence와 Validation 영역도 업데이트됩니다. 기존 프로젝트가 Hibernate 5.x, 오래된 Hibernate Validator, 별도 EL 구현체를 직접 물고 있다면 JPA 엔티티 로딩, 검증기 초기화, Query 실행 단계에서 문제가 발생할 수 있습니다.
        &lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;&lt;code&gt;jakarta.persistence-api&lt;/code&gt;와 Hibernate 구현체 버전 불일치&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;jakarta.validation-api&lt;/code&gt;와 Hibernate Validator 버전 불일치&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;jakarta.el-api&lt;/code&gt;는 있으나 실제 EL 구현체가 없는 경우&lt;/li&gt;
          &lt;li&gt;Spring Boot starter가 제공하는 조합과 직접 선언 버전이 섞인 경우&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;SOAP, JAXB, SAAJ 계열은 별도 확인이 필요함&lt;/h3&gt;
        &lt;p&gt;
          일반적인 REST API 서버라면 영향이 작을 수 있지만, 공공기관 연계, 금융권 대외계, 레거시 ERP 연동처럼 SOAP/XML 기반 통신을 사용하는 시스템은 Jakarta EE 11 전환에서 별도 라이브러리 의존성을 반드시 확인해야 합니다.
        &lt;/p&gt;

        &lt;p&gt;
          JAXB, JAX-WS, SAAJ, &lt;code&gt;wsimport&lt;/code&gt; 기반 코드 생성, XML Binding을 사용하는 경우 플랫폼에 포함되어 있다고 가정하면 안 됩니다. 필요한 API와 구현체를 명시적으로 관리해야 하며, Spring Boot가 자동으로 해결해주는 영역이 아닌 경우도 많습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;2. 런타임 관점 리스크&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;h3&gt;Java 17 이상이 모든 실행 경로에 적용되어야 함&lt;/h3&gt;
        &lt;p&gt;
          Jakarta EE 11 전환에서 가장 먼저 확인할 지점은 Java 버전입니다. 개발 PC만 Java 17 이상이어도 충분하지 않습니다. 빌드 서버, Jenkins, GitHub Actions, Docker base image, 운영 서버의 systemd 스크립트, 외부 WAS의 JVM 설정까지 같은 기준으로 맞아야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;java -version
javac -version
mvn -version
gradle -version&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;p&gt;
          Java 버전이 맞지 않으면 다음과 같은 오류가 발생할 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;Unsupported class file major version
class file has wrong version
java.lang.UnsupportedClassVersionError&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;h3&gt;내장 Tomcat과 외부 WAS의 기준이 다를 수 있음&lt;/h3&gt;
        &lt;p&gt;
          Spring Boot 내장 Tomcat을 사용하는 경우에는 Boot 버전이 관리하는 Tomcat 버전을 확인해야 합니다. 반대로 외부 WAS에 war로 배포하는 구조라면 애플리케이션보다 WAS의 Jakarta EE 지원 수준이 더 중요합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;배포 방식&lt;/th&gt;
              &lt;th&gt;확인할 지점&lt;/th&gt;
              &lt;th&gt;예상 문제&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring Boot jar&lt;/td&gt;
              &lt;td&gt;Boot가 가져오는 Tomcat, Jetty, Undertow 버전&lt;/td&gt;
              &lt;td&gt;Servlet API 버전 불일치, 필터·인터셉터 초기화 실패&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;외부 WAS war&lt;/td&gt;
              &lt;td&gt;WAS가 Jakarta EE 11 또는 필요한 스펙을 지원하는지&lt;/td&gt;
              &lt;td&gt;배포 실패, 클래스 로딩 충돌, 서버 제공 API와 애플리케이션 API 중복&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;컨테이너 이미지&lt;/td&gt;
              &lt;td&gt;JDK 버전, base image, 실행 옵션&lt;/td&gt;
              &lt;td&gt;로컬은 성공하지만 운영 컨테이너에서 기동 실패&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;risk-box&quot;&gt;
          위험한 조합은 &lt;code&gt;Spring Boot 3.x + 구버전 Tomcat 9&lt;/code&gt;, &lt;code&gt;Spring Framework 6 + javax 기반 WAS&lt;/code&gt;, &lt;code&gt;Jakarta EE 11 API + Jakarta EE 10 구현체&lt;/code&gt;처럼 API와 런타임이 서로 다른 세대를 바라보는 경우입니다.&lt;br&gt;
          이런 조합은 컴파일 단계보다 애플리케이션 기동, 요청 처리, 배포 시점에 더 많이 드러납니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;3. 빌드 관점 리스크&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;h3&gt;Maven과 Gradle 설정이 Java 17 기준으로 정리되어야 함&lt;/h3&gt;
        &lt;p&gt;
          Jakarta EE 11로 넘어가려면 빌드 도구의 Java target도 함께 정리해야 합니다. 단순히 운영 서버 JDK만 올리고 &lt;code&gt;sourceCompatibility&lt;/code&gt;, &lt;code&gt;targetCompatibility&lt;/code&gt;, Maven compiler 설정이 예전 값으로 남아 있으면 빌드와 실행 환경이 어긋날 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;&amp;lt;properties&amp;gt;
  &amp;lt;java.version&amp;gt;17&amp;lt;/java.version&amp;gt;
&amp;lt;/properties&amp;gt;&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;h3&gt;javax와 jakarta가 의존성 트리에 같이 남을 수 있음&lt;/h3&gt;
        &lt;p&gt;
          기존 Spring 환경에서 가장 흔한 문제 중 하나는 애플리케이션 코드는 &lt;code&gt;jakarta.*&lt;/code&gt;로 바꿨지만, 하위 라이브러리 중 일부가 여전히 &lt;code&gt;javax.*&lt;/code&gt; 기반 API를 끌고 오는 경우입니다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 다음 영역은 의존성 전이를 통해 오래된 API가 섞이기 쉽습니다.
        &lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;구버전 Swagger 또는 OpenAPI 라이브러리&lt;/li&gt;
          &lt;li&gt;구버전 QueryDSL, MapStruct, annotation processor&lt;/li&gt;
          &lt;li&gt;JAXB, activation, mail 관련 라이브러리&lt;/li&gt;
          &lt;li&gt;구버전 security, OAuth, SAML 연계 모듈&lt;/li&gt;
          &lt;li&gt;외부 솔루션 SDK 또는 사내 공통 라이브러리&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;mvn dependency:tree | grep &quot;javax&quot;

./gradlew dependencies | grep &quot;javax&quot;&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;h3&gt;BOM을 섞어 쓰면 버전 정합성이 깨질 수 있음&lt;/h3&gt;
        &lt;p&gt;
          Spring Boot BOM, Jakarta EE BOM, Hibernate BOM을 동시에 가져오면서 우선순위가 꼬이면 의도하지 않은 버전이 선택될 수 있습니다. 이 경우 IDE에서는 정상으로 보이지만 CI 빌드나 운영 배포에서 다른 결과가 나올 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;note-box&quot;&gt;
          권장 방식은 Spring Boot를 사용하는 프로젝트라면 먼저 Boot가 관리하는 버전을 기준으로 정리하는 것입니다.&lt;br&gt;
          이후 꼭 필요한 Jakarta API만 명시하고, API와 구현체가 같은 세대인지 확인해야 합니다.&lt;br&gt;
          임의로 Jakarta API 버전만 올리는 방식은 테스트 범위가 넓지 않으면 위험합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;4. 소스코드 관점 리스크&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;h3&gt;javax.* import가 아직 남아 있을 수 있음&lt;/h3&gt;
        &lt;p&gt;
          Jakarta EE 10을 이미 사용 중이라면 대부분 &lt;code&gt;jakarta.*&lt;/code&gt;로 전환되어 있을 가능성이 큽니다. 하지만 오래된 모듈, 테스트 코드, XML 설정, generated source, 사내 공통 모듈에는 &lt;code&gt;javax.*&lt;/code&gt;가 남아 있을 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;grep -R &quot;javax\.&quot; src/main/java src/main/resources src/test/java&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;기존 패키지&lt;/th&gt;
              &lt;th&gt;전환 패키지&lt;/th&gt;
              &lt;th&gt;확인 영역&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;javax.servlet.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;jakarta.servlet.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Filter, Listener, Interceptor, Servlet API 직접 사용 코드&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;javax.persistence.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;jakarta.persistence.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Entity, Repository, Converter, Auditing&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;javax.validation.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;jakarta.validation.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;DTO, Request Body 검증, Custom Validator&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;javax.annotation.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;jakarta.annotation.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;@PostConstruct&lt;/code&gt;, &lt;code&gt;@PreDestroy&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;javax.ws.rs.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;jakarta.ws.rs.*&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;JAX-RS 기반 연계 코드&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;h3&gt;JPA 영역은 단순 컴파일보다 데이터 접근 테스트가 중요함&lt;/h3&gt;
        &lt;p&gt;
          Jakarta Persistence 버전이 올라가면 엔티티 어노테이션이 컴파일되는지만 보면 부족합니다. 실제로는 Hibernate 구현체, Dialect, Query, Lazy Loading, Converter, 날짜 타입, Native Query, Transaction 경계에서 문제가 드러날 수 있습니다.
        &lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;&lt;code&gt;@Entity&lt;/code&gt;, &lt;code&gt;@Embeddable&lt;/code&gt;, &lt;code&gt;@MappedSuperclass&lt;/code&gt; 스캔 여부&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;@Converter&lt;/code&gt; 자동 적용 여부&lt;/li&gt;
          &lt;li&gt;JPQL 함수, Native Query, Projection 동작 여부&lt;/li&gt;
          &lt;li&gt;Enum, 날짜/시간 타입, JSON 컬럼 매핑 여부&lt;/li&gt;
          &lt;li&gt;트랜잭션 테스트와 실제 DB 연결 테스트 결과&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;Validation은 기동 시점에 바로 터질 수 있음&lt;/h3&gt;
        &lt;p&gt;
          Validation은 API와 구현체 버전이 맞지 않으면 애플리케이션 기동 중 바로 실패하는 경우가 많습니다. DTO의 &lt;code&gt;@Valid&lt;/code&gt;, &lt;code&gt;@Validated&lt;/code&gt;, Custom Constraint, Method Validation을 쓰는 프로젝트라면 반드시 확인해야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;jakarta.validation.NoProviderFoundException
java.lang.ClassNotFoundException: jakarta.validation.Validation
java.lang.NoSuchMethodError&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;

        &lt;h3&gt;XML 설정과 generated source도 검색 대상에 포함해야 함&lt;/h3&gt;
        &lt;p&gt;
          Java 코드만 검색하면 놓치는 지점이 있습니다. 오래된 Spring XML 설정, JAXB generated source, WSDL 기반 생성 코드, 테스트 리소스, 사내 공통 jar 안에 &lt;code&gt;javax.*&lt;/code&gt; 의존성이 숨어 있을 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;code-block&quot;&gt;
          &lt;pre&gt;&lt;code&gt;grep -R &quot;javax\.&quot; src generated-sources build.gradle pom.xml&lt;/code&gt;&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;현재 Spring 환경별 판단 기준&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;현재 환경&lt;/th&gt;
              &lt;th&gt;판단&lt;/th&gt;
              &lt;th&gt;권장 접근&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring Boot 2.x&lt;/td&gt;
              &lt;td&gt;위험 높음&lt;/td&gt;
              &lt;td&gt;Jakarta EE 11 이전에 Spring Boot 3.x 전환부터 검토&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring Framework 5.x&lt;/td&gt;
              &lt;td&gt;위험 높음&lt;/td&gt;
              &lt;td&gt;Spring Framework 6.x 이상 전환과 Java 17 적용 필요&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring Boot 3.0~3.2&lt;/td&gt;
              &lt;td&gt;중간 위험&lt;/td&gt;
              &lt;td&gt;Boot 관리 버전과 Jakarta API 직접 선언 여부 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Spring Boot 3.3 이상&lt;/td&gt;
              &lt;td&gt;상대적으로 유리&lt;/td&gt;
              &lt;td&gt;외부 WAS, Hibernate, Validation, SOAP/XML 의존성 위주 점검&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Java 8 또는 Java 11 운영&lt;/td&gt;
              &lt;td&gt;위험 높음&lt;/td&gt;
              &lt;td&gt;JDK, 빌드, 운영 배포 환경의 Java 17 이상 전환 선행&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;외부 WAS 배포&lt;/td&gt;
              &lt;td&gt;주의 필요&lt;/td&gt;
              &lt;td&gt;WAS의 Jakarta EE 11 지원 수준과 서버 제공 API 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;SOAP/XML 연계 포함&lt;/td&gt;
              &lt;td&gt;주의 필요&lt;/td&gt;
              &lt;td&gt;JAXB, JAX-WS, SAAJ, activation, mail 계열 별도 검증&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;업그레이드 전 체크리스트&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;ol&gt;
          &lt;li&gt;운영 서버, 빌드 서버, 컨테이너 이미지가 Java 17 이상인지 확인합니다.&lt;/li&gt;
          &lt;li&gt;Spring Boot 3.x 이상 또는 Spring Framework 6.x 이상 기반인지 확인합니다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;javax.*&lt;/code&gt; import가 소스, 리소스, 테스트 코드, 생성 코드에 남아 있는지 검색합니다.&lt;/li&gt;
          &lt;li&gt;Spring Boot BOM이 관리하는 버전을 무시하고 Jakarta API를 직접 고정한 부분이 있는지 확인합니다.&lt;/li&gt;
          &lt;li&gt;Tomcat, Jetty, Undertow 또는 외부 WAS가 필요한 Jakarta 스펙을 지원하는지 확인합니다.&lt;/li&gt;
          &lt;li&gt;Hibernate 버전과 Jakarta Persistence API 버전이 맞는지 확인합니다.&lt;/li&gt;
          &lt;li&gt;Hibernate Validator, Jakarta Validation API, EL 구현체 조합을 확인합니다.&lt;/li&gt;
          &lt;li&gt;SOAP, JAXB, JAX-WS, SAAJ, XML Binding 사용 여부를 확인합니다.&lt;/li&gt;
          &lt;li&gt;사내 공통 라이브러리나 외부 솔루션 SDK가 &lt;code&gt;javax.*&lt;/code&gt; 기반인지 확인합니다.&lt;/li&gt;
          &lt;li&gt;단위 테스트뿐 아니라 애플리케이션 기동, DB 접근, 요청 처리, 배포 테스트를 함께 수행합니다.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;리스크를 줄이는 현실적인 전환 순서&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;div class=&quot;summary-list&quot;&gt;
          &lt;div class=&quot;summary-item&quot;&gt;
            &lt;strong&gt;1단계: Java 17 이상 전환&lt;/strong&gt;
            개발, 빌드, 테스트, 운영 환경의 Java 버전을 먼저 통일합니다. 이 단계에서 class version 오류와 빌드 도구 문제를 먼저 제거합니다.
          &lt;/div&gt;

          &lt;div class=&quot;summary-item&quot;&gt;
            &lt;strong&gt;2단계: Spring Boot 또는 Spring Framework 기준 정리&lt;/strong&gt;
            Spring Boot를 사용한다면 Boot BOM이 관리하는 버전을 우선 기준으로 삼습니다. 직접 선언한 Jakarta API와 구현체 버전을 최소화합니다.
          &lt;/div&gt;

          &lt;div class=&quot;summary-item&quot;&gt;
            &lt;strong&gt;3단계: javax 잔존 의존성 제거&lt;/strong&gt;
            소스코드뿐 아니라 테스트, XML, 생성 코드, 사내 공통 모듈까지 검색해 &lt;code&gt;javax.*&lt;/code&gt; 기반 의존성을 제거합니다.
          &lt;/div&gt;

          &lt;div class=&quot;summary-item&quot;&gt;
            &lt;strong&gt;4단계: JPA와 Validation 회귀 테스트&lt;/strong&gt;
            엔티티 매핑, Repository, JPQL, Native Query, DTO 검증, Custom Validator를 중심으로 실제 동작 테스트를 수행합니다.
          &lt;/div&gt;

          &lt;div class=&quot;summary-item&quot;&gt;
            &lt;strong&gt;5단계: SOAP/XML 연계 분리 검증&lt;/strong&gt;
            JAXB, JAX-WS, SAAJ, WSDL 생성 코드가 있다면 별도 모듈로 분리해 의존성과 런타임 충돌을 먼저 확인합니다.
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;결론&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          Jakarta EE 10에서 Jakarta EE 11로의 업그레이드는 패키지명 변경보다는 Java 17 기준 상향, 스펙 구성 변경, API와 구현체의 버전 정합성 문제가 핵심입니다. Spring 기존 환경에서는 Jakarta EE 11 자체보다 Spring Boot가 관리하는 의존성 조합과 운영 런타임이 맞는지가 더 중요합니다.
        &lt;/p&gt;

        &lt;p&gt;
          일반적인 Spring Boot 기반 REST API 서버라면 리스크는 중간 수준입니다. 그러나 Spring Boot 2.x, Spring Framework 5.x, Java 8·11 운영 환경, 외부 WAS 배포, SOAP/XML 연계, 오래된 Hibernate 또는 Validator를 사용하는 시스템이라면 리스크가 높습니다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 Jakarta EE 11 전환은 API 버전만 올리는 작업으로 접근하면 안 됩니다. Java, Spring, WAS, Hibernate, Validation, XML 연계 라이브러리를 하나의 런타임 조합으로 보고 검증해야 안정적으로 전환할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/jakarta-ee-10-11-spring-risk#article&quot;,
        &quot;headline&quot;: &quot;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&quot;,
        &quot;description&quot;: &quot;Jakarta EE 10과 11의 차이를 기준으로 기존 Spring 환경에서 실제로 발생할 수 있는 라이브러리, 런타임, 빌드, 소스코드 리스크를 정리합니다.&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/jakarta-ee-10-11-spring-risk&quot;
        },
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;keywords&quot;: [
          &quot;Jakarta EE 11&quot;,
          &quot;Jakarta EE 10&quot;,
          &quot;Spring Boot 3&quot;,
          &quot;Spring Framework 6&quot;,
          &quot;Java 17&quot;,
          &quot;JPA&quot;,
          &quot;Validation&quot;,
          &quot;Tomcat&quot;,
          &quot;라이브러리 충돌&quot;,
          &quot;업그레이드 리스크&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Jakarta EE 11&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Spring Boot&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Java 17&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/jakarta-ee-10-11-spring-risk#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;개발&quot;,
            &quot;item&quot;: &quot;https://example.com/category/development&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;Jakarta EE 10에서 11로 올릴 때 Spring 환경의 주요 리스크&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/ETC</category>
      <category>Jakarta EE 10</category>
      <category>Jakarta EE 11</category>
      <category>java 17</category>
      <category>jpa</category>
      <category>spring boot 3</category>
      <category>Spring Framework 6</category>
      <category>Tomcat</category>
      <category>validation</category>
      <category>라이브러리 충돌</category>
      <category>업그레이드 리스크</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/571</guid>
      <comments>https://togethergrow.tistory.com/entry/Jakarta-EE-10%EC%97%90%EC%84%9C-11%EB%A1%9C-%EC%98%AC%EB%A6%B4-%EB%95%8C-Spring-%ED%99%98%EA%B2%BD%EC%9D%98-%EC%A3%BC%EC%9A%94-%EB%A6%AC%EC%8A%A4%ED%81%AC#entry571comment</comments>
      <pubDate>Fri, 26 Jun 2026 11:27:27 +0900</pubDate>
    </item>
    <item>
      <title>보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다</title>
      <link>https://togethergrow.tistory.com/entry/%EB%B3%B4%EC%9D%B4%EC%8A%A4%ED%94%BC%EC%8B%B1-%ED%83%90%EC%A7%80-AI-%EA%B3%B5%EB%8F%99%EB%AA%A8%EB%8D%B8%EC%9D%B4-%EA%B8%88%EC%9C%B5%EA%B6%8C-%EB%B0%A9%EC%96%B4-%EC%B2%B4%EA%B3%84%EB%A5%BC-%EB%B0%94%EA%BE%BC%EB%8B%A4</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;금융보안원과 인터넷은행 3사가 개발한 보이스피싱 탐지 AI 공동모델의 핵심 구조, 연합학습 방식, 탐지 사례, 금융권 확산 의미를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;보이스피싱 탐지 AI, 금융보안원, 인터넷은행 3사, 카카오뱅크, 토스뱅크, 케이뱅크, 연합학습, Federated Learning, 대포통장 탐지, 금융사기 예방&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;금융보안원과 인터넷은행 3사가 개발한 보이스피싱 탐지 AI 공동모델의 핵심 구조, 연합학습 방식, 탐지 사례, 금융권 확산 의미를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/voice-phishing-ai-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;금융보안원과 인터넷은행 3사가 개발한 보이스피싱 탐지 AI 공동모델의 핵심 구조, 연합학습 방식, 탐지 사례, 금융권 확산 의미를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/voice-phishing-ai-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      word-break: keep-all;
    }

    .post-content main {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9em;
      line-height: 1.35;
    }

    .post-content h2 {
      margin: 38px 0 16px;
      font-size: 1.45em;
      line-height: 1.4;
    }

    .post-content h3 {
      margin: 28px 0 12px;
      font-size: 1.15em;
      line-height: 1.4;
    }

    .post-content p {
      margin: 0 0 16px;
    }

    .post-content .summary-box,
    .post-content .notice-box,
    .post-content .check-box {
      margin: 18px 0;
      padding: 16px 18px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }

    .post-content .notice-box {
      border-color: #d8c48f;
    }

    .post-content .check-box {
      border-color: #b8d8c2;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
    }

    .post-content th,
    .post-content td {
      border: 1px solid #ddd;
      padding: 10px 12px;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 14px 16px;
      border: 1px solid #ddd;
      border-radius: 8px;
      line-height: 1.6;
    }

    .post-content code {
      font-family: Consolas, Monaco, monospace;
    }
  &lt;/style&gt;

  &lt;div class=&quot;post-content&quot;&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h1&gt;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&lt;/h1&gt;

        &lt;section&gt;
          &lt;h2&gt;정리된 내용&lt;/h2&gt;

          &lt;p&gt;
            금융보안원과 카카오뱅크, 토스뱅크, 케이뱅크가 보이스피싱 범죄 대응을 위해 연합학습 기반의 보이스피싱 탐지 AI 공동모델을 개발했다.
            이 모델은 2026년 7월부터 인터넷은행 3사의 실제 업무에 적용되고, 4분기에는 금융 AI 플랫폼인 ASAP을 통해 중소형 금융사까지 활용 범위가 확대될 예정이다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            이번 보이스피싱 탐지 AI 공동모델의 핵심은 고객 원본 데이터를 외부로 공유하지 않으면서도 각 금융회사의 탐지 경험을 하나의 공동 방어 체계로 결합한다는 점이다.&lt;br&gt;
            각 은행은 자체 데이터를 기반으로 AI 모델을 학습하고, 원본 데이터가 아닌 모델 가중치와 학습 결과만 결합하는 방식으로 개인정보 보호와 탐지 성능을 동시에 확보한다.&lt;br&gt;
            운영 환경에서는 개별 금융회사 단위의 탐지 한계를 줄이고, 금융권 전체가 새로운 사기 패턴을 더 빠르게 공유·반영할 수 있는 구조로 평가할 수 있다.
          &lt;/div&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;내용&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;참여 기관&lt;/td&gt;
                &lt;td&gt;금융보안원, 카카오뱅크, 토스뱅크, 케이뱅크&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;기술 방식&lt;/td&gt;
                &lt;td&gt;연합학습 기반 AI 공동모델&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;적용 시점&lt;/td&gt;
                &lt;td&gt;2026년 7월부터 인터넷은행 3사 운영&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;확산 계획&lt;/td&gt;
                &lt;td&gt;2026년 4분기 중 ASAP 플랫폼 탑재 후 중소형 금융사 활용 확대&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;주요 목적&lt;/td&gt;
                &lt;td&gt;보이스피싱, 대포통장, 소액 피싱, 이상 거래 조기 탐지&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;공동모델이 필요한 이유&lt;/h2&gt;

          &lt;p&gt;
            보이스피싱 범죄는 특정 금융회사 안에서만 발생하지 않는다.
            피해자는 A은행에서 돈을 보낼 수 있고, 대포통장은 B은행에서 개설될 수 있으며, 범죄 조직은 여러 금융회사를 오가며 탐지를 피한다.
            이 때문에 한 금융회사가 보유한 데이터만으로는 전체 사기 흐름을 파악하기 어렵다.
          &lt;/p&gt;

          &lt;p&gt;
            기존 방식은 금융회사별로 자체 이상거래탐지시스템과 AI 모델을 운영하는 구조였다.
            이 방식은 각 회사의 데이터와 경험에는 강하지만, 다른 금융회사에서 먼저 발견된 신종 사기 패턴을 즉시 반영하기 어렵다는 한계가 있었다.
          &lt;/p&gt;

          &lt;div class=&quot;notice-box&quot;&gt;
            보이스피싱은 거래 금액, 계좌 개설 기간, 입금 빈도, 출금 속도, 상대 계좌와의 관계, 피해자 연령대 같은 여러 신호가 결합되어 나타난다.&lt;br&gt;
            한 은행에서는 정상처럼 보이는 거래도 다른 은행의 피해 사례와 함께 보면 위험 거래로 판단될 수 있다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;연합학습 방식의 핵심&lt;/h2&gt;

          &lt;p&gt;
            이번 보이스피싱 탐지 AI 공동모델에는 연합학습 기술이 적용됐다.
            연합학습은 각 기관이 보유한 원본 데이터를 중앙 서버로 모으지 않고, 각 기관 내부에서 모델을 학습한 뒤 학습된 모델의 일부 정보만 교환·통합하는 방식이다.
          &lt;/p&gt;

          &lt;p&gt;
            금융권에서는 개인정보와 금융거래 데이터를 외부로 이전하기 어렵다.
            따라서 데이터를 직접 공유하지 않으면서도 여러 금융기관의 탐지 노하우를 결합할 수 있는 연합학습 방식은 보이스피싱 대응에 적합한 구조다.
          &lt;/p&gt;

          &lt;h3&gt;연합학습 적용 흐름&lt;/h3&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;단계&lt;/th&gt;
                &lt;th&gt;설명&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;1단계&lt;/td&gt;
                &lt;td&gt;각 은행이 자체 보유 데이터를 외부로 내보내지 않고 내부에서 모델을 학습한다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;2단계&lt;/td&gt;
                &lt;td&gt;원본 거래 데이터가 아니라 모델 가중치와 학습 결과를 공유한다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;3단계&lt;/td&gt;
                &lt;td&gt;금융보안원의 연합학습 알고리즘이 각 모델의 특징을 분석해 결합한다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;4단계&lt;/td&gt;
                &lt;td&gt;결합된 공동모델을 각 은행의 FDS와 자체 AI 모델에 병행 적용한다.&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;5단계&lt;/td&gt;
                &lt;td&gt;새로운 사기 패턴이 탐지되면 공동모델 개선에 반영한다.&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;탐지 성능이 개선된 이유&lt;/h2&gt;

          &lt;p&gt;
            공동모델의 가장 큰 장점은 한 은행이 축적한 보이스피싱 탐지 경험이 다른 은행에도 반영될 수 있다는 점이다.
            예를 들어 A은행에서는 자주 관측된 사기 패턴이 B은행에서는 아직 충분히 축적되지 않았을 수 있다.
            이때 공동모델은 여러 은행의 패턴을 결합해 기존 개별 모델이 놓치던 위험 거래를 찾아낼 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            검증 결과 공동모델은 각 은행의 개별 모델 대비 탐지 정밀도가 최대 205% 향상된 것으로 알려졌다.
            여기서 탐지 정밀도는 AI가 사기라고 판단한 거래 가운데 실제 사기 거래가 차지하는 비율을 의미한다.
            즉, 단순히 많이 잡는 것이 아니라 잘못된 탐지를 줄이고 실제 사기 거래를 더 정확히 가려내는 능력이 개선됐다는 뜻이다.
          &lt;/p&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            탐지율이 높아도 정상 고객 거래를 과도하게 막으면 금융 서비스 품질이 떨어진다.&lt;br&gt;
            반대로 정밀도가 높아지면 사기 의심 거래 중 실제 위험 거래의 비중이 커져 금융회사가 더 효율적으로 대응할 수 있다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;수년간 사용된 대포통장 탐지 사례&lt;/h2&gt;

          &lt;p&gt;
            대표 사례는 정상 계좌처럼 위장된 자금세탁용 대포통장 탐지다.
            해당 계좌는 개설된 지 수년이 지났고, 과거 ATM 입출금 이력도 반복적으로 존재해 일반적인 정상 계좌처럼 보였다.
            거래 당일에는 처음 거래하는 상대방으로부터 1천만 원 이상의 자금이 입금됐다.
          &lt;/p&gt;

          &lt;p&gt;
            기존 개별 모델은 계좌 개설 후 경과 기간을 중요하게 평가해 해당 거래를 정상으로 판단할 수 있었다.
            오래된 계좌는 신규 대포통장보다 상대적으로 위험도가 낮다고 보는 경향이 있기 때문이다.
          &lt;/p&gt;

          &lt;p&gt;
            반면 공동모델은 다른 은행 모델이 활용하던 단기간 입금 금액 합계 같은 특성을 함께 반영했다.
            그 결과 계좌 개설 기간이 길더라도 짧은 시간 안에 고액 자금이 유입되는 이상 패턴을 식별해 사기 계좌로 탐지할 수 있었다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;판단 요소&lt;/th&gt;
                &lt;th&gt;기존 모델 관점&lt;/th&gt;
                &lt;th&gt;공동모델 관점&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;계좌 개설 기간&lt;/td&gt;
                &lt;td&gt;수년간 사용된 계좌이므로 정상 가능성 높음&lt;/td&gt;
                &lt;td&gt;오래된 계좌라도 자금 흐름 변화는 별도 판단&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;과거 거래 이력&lt;/td&gt;
                &lt;td&gt;ATM 입출금 이력이 있어 정상 계좌로 판단 가능&lt;/td&gt;
                &lt;td&gt;과거 이력보다 당일 거래 패턴 급변을 중점 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;입금 특성&lt;/td&gt;
                &lt;td&gt;단일 거래로 보면 정상 고액 입금일 수 있음&lt;/td&gt;
                &lt;td&gt;짧은 시간 내 고액 유입과 첫 거래 상대방 여부를 함께 분석&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;최종 판단&lt;/td&gt;
                &lt;td&gt;정상 거래로 분류될 가능성&lt;/td&gt;
                &lt;td&gt;자금세탁용 대포통장 위험 거래로 탐지&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;청소년·청년층 대상 소액 피싱 탐지&lt;/h2&gt;

          &lt;p&gt;
            또 다른 사례는 미성년자와 청년층을 대상으로 한 소액 보이스피싱 또는 피싱 피해 탐지다.
            범죄 조직은 모바일 소액결제, 문화상품권 PIN 구매, 소액 분할 이체 같은 방식을 활용해 정상 소비 활동처럼 보이게 만든다.
          &lt;/p&gt;

          &lt;p&gt;
            거래 금액이 수천 원에서 수십만 원 수준이면 기존 이상거래탐지시스템에서는 위험도가 낮게 평가될 수 있다.
            그러나 짧은 시간 동안 반복적으로 이체되거나, 특정 패턴의 수취 계좌로 자금이 이동한다면 보이스피싱 피해 신호일 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            공동모델은 다른 금융기관에서 학습된 실제 피해 사례를 반영해 소액 거래라도 반복성, 수취 계좌 특성, 이용자 연령대, 거래 시간대 등을 함께 분석할 수 있다.
            이 점은 청소년과 청년층을 노린 소액 피싱 피해를 조기에 탐지하는 데 의미가 있다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;금융권에 주는 의미&lt;/h2&gt;

          &lt;p&gt;
            이번 보이스피싱 탐지 AI 공동모델은 개별 금융회사 중심의 방어 체계에서 금융권 공동 방어 체계로 이동하는 사례다.
            보이스피싱 조직은 여러 금융회사를 동시에 악용하는데, 방어는 각 회사가 따로 수행하면 탐지 사각지대가 생긴다.
          &lt;/p&gt;

          &lt;p&gt;
            연합학습 기반 공동모델은 이런 사각지대를 줄이는 데 초점이 있다.
            한 금융회사에서 발견한 패턴이 다른 금융회사에도 반영되면, 새로운 사기 수법이 확산되기 전에 더 빠르게 차단할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;기대 효과&lt;/h3&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;기대 효과&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;금융소비자&lt;/td&gt;
                &lt;td&gt;보이스피싱 피해 거래를 더 빠르게 탐지하고 차단할 가능성 증가&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;인터넷은행&lt;/td&gt;
                &lt;td&gt;자체 AI 모델과 공동모델을 병행해 탐지 정확도 개선&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;중소 금융사&lt;/td&gt;
                &lt;td&gt;자체 AI 개발 역량이 부족해도 고도화된 탐지 모델 활용 가능&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;금융권 전체&lt;/td&gt;
                &lt;td&gt;개별 회사 단위 대응에서 공동학습·공동방어 체계로 전환&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;ASAP 플랫폼을 통한 확산&lt;/h2&gt;

          &lt;p&gt;
            금융보안원은 2026년 4분기 중 공동모델을 금융 AI 플랫폼인 ASAP에 탑재할 계획이다.
            이를 통해 인터넷은행 3사뿐 아니라 제2금융권과 중소형 금융회사도 보이스피싱 탐지 AI 공동모델을 활용할 수 있게 된다.
          &lt;/p&gt;

          &lt;p&gt;
            중소형 금융회사는 대형 금융회사에 비해 AI 인프라, 데이터 과학 인력, 대규모 사기 데이터 축적 측면에서 상대적으로 불리할 수 있다.
            ASAP 플랫폼을 통한 공동모델 제공은 이런 격차를 줄이고, 금융권 전체의 보이스피싱 대응 수준을 끌어올리는 방향으로 해석된다.
          &lt;/p&gt;

          &lt;div class=&quot;notice-box&quot;&gt;
            보이스피싱 대응은 한 금융회사가 잘 막는 것만으로 충분하지 않다.&lt;br&gt;
            범죄 자금은 여러 계좌와 금융기관을 거쳐 이동하기 때문에, 공동 탐지 체계가 넓어질수록 피해 확산을 줄일 가능성이 커진다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;기술적으로 주목할 부분&lt;/h2&gt;

          &lt;p&gt;
            이번 공동모델은 단순히 여러 모델을 평균 내는 방식이 아니라, 각 금융기관 모델의 구조와 특징을 분석해 유사한 특성을 선택적으로 결합하는 방식으로 개발된 것으로 알려졌다.
            이를 통해 모델 저장 공간을 줄이고 병합 속도를 개선하는 효과도 확보했다.
          &lt;/p&gt;

          &lt;p&gt;
            보이스피싱 탐지 AI는 높은 정확도만큼 설명 가능성과 운영 안정성도 중요하다.
            금융거래를 잘못 차단하면 고객 불편이 발생하고, 반대로 사기를 놓치면 피해가 직접 발생한다.
            따라서 실제 업무 적용에서는 AI 점수, FDS 룰, 상담·모니터링 조직의 판단이 함께 작동해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;운영 시 필요한 관리 요소&lt;/h3&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;관리 항목&lt;/th&gt;
                &lt;th&gt;확인 내용&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;오탐 관리&lt;/td&gt;
                &lt;td&gt;정상 거래가 사기로 잘못 분류되는 비율을 지속적으로 점검&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;미탐 관리&lt;/td&gt;
                &lt;td&gt;실제 보이스피싱 피해가 탐지되지 않은 사례를 재학습 데이터로 반영&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;모델 갱신&lt;/td&gt;
                &lt;td&gt;신종 사기 패턴을 반영하기 위한 주기적 학습 체계 운영&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;개인정보 보호&lt;/td&gt;
                &lt;td&gt;원본 데이터 미공유 원칙과 모델 가중치 교환 과정의 보안성 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;현업 연계&lt;/td&gt;
                &lt;td&gt;AI 탐지 결과를 상담, 지급정지, 사고 신고 절차와 연결&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;금융소비자가 함께 확인할 점&lt;/h2&gt;

          &lt;p&gt;
            AI 공동모델이 도입되더라도 보이스피싱을 완전히 없앨 수는 없다.
            금융소비자도 고액 이체, 상품권 구매, 원격제어 앱 설치 요구, 수사기관·금융기관 사칭 연락에 주의해야 한다.
          &lt;/p&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            낯선 사람이 계좌 이체나 현금 인출을 요구하면 즉시 중단한다.&lt;br&gt;
            수사기관이나 금융기관이라며 앱 설치를 요구하면 응하지 않는다.&lt;br&gt;
            문화상품권 PIN, 모바일 상품권, 소액결제 인증번호를 요구하는 연락은 의심한다.&lt;br&gt;
            가족이나 지인을 사칭해 급하게 돈을 요구하면 다른 연락 수단으로 확인한다.&lt;br&gt;
            이미 송금했다면 즉시 금융회사와 경찰에 신고하고 지급정지를 요청한다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;정리&lt;/h2&gt;

          &lt;p&gt;
            금융보안원과 인터넷은행 3사가 개발한 보이스피싱 탐지 AI 공동모델은 금융권의 사기 대응 방식을 개별 탐지에서 공동 방어로 확장하는 사례다.
            원본 고객 데이터를 공유하지 않으면서도 각 은행의 탐지 경험을 결합할 수 있다는 점에서 개인정보 보호와 탐지 성능을 함께 고려한 접근이다.
          &lt;/p&gt;

          &lt;p&gt;
            특히 수년간 정상 계좌처럼 사용된 대포통장, 청소년·청년층을 노린 소액 피싱처럼 기존 모델이 놓치기 쉬운 사례를 탐지했다는 점은 의미가 크다.
            앞으로 ASAP 플랫폼을 통해 중소형 금융사까지 활용 범위가 넓어지면, 금융권 전체의 보이스피싱 대응 수준이 더 균일하게 높아질 수 있다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            핵심은 연합학습 기반 공동모델을 통해 금융회사별 탐지 경험을 안전하게 결합한다는 점이다.&lt;br&gt;
            보이스피싱 범죄가 여러 금융회사를 넘나드는 만큼, 방어 체계도 공동학습과 공동대응 중심으로 발전해야 한다.
          &lt;/div&gt;
        &lt;/section&gt;
      &lt;/article&gt;
    &lt;/main&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;BlogPosting&quot;,
          &quot;@id&quot;: &quot;https://example.com/voice-phishing-ai-joint-model&quot;,
          &quot;headline&quot;: &quot;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&quot;,
          &quot;description&quot;: &quot;금융보안원과 인터넷은행 3사가 개발한 보이스피싱 탐지 AI 공동모델의 핵심 구조, 연합학습 방식, 탐지 사례, 금융권 확산 의미를 정리한 글입니다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/voice-phishing-ai-joint-model&quot;
          },
          &quot;about&quot;: [
            &quot;보이스피싱 탐지 AI&quot;,
            &quot;금융보안원&quot;,
            &quot;인터넷은행 3사&quot;,
            &quot;연합학습&quot;,
            &quot;대포통장 탐지&quot;,
            &quot;금융사기 예방&quot;
          ],
          &quot;articleSection&quot;: [
            &quot;정리된 내용&quot;,
            &quot;공동모델이 필요한 이유&quot;,
            &quot;연합학습 방식의 핵심&quot;,
            &quot;탐지 성능이 개선된 이유&quot;,
            &quot;수년간 사용된 대포통장 탐지 사례&quot;,
            &quot;청소년·청년층 대상 소액 피싱 탐지&quot;,
            &quot;금융권에 주는 의미&quot;,
            &quot;ASAP 플랫폼을 통한 확산&quot;,
            &quot;기술적으로 주목할 부분&quot;,
            &quot;금융소비자가 함께 확인할 점&quot;,
            &quot;정리&quot;
          ]
        },
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;@id&quot;: &quot;https://example.com/voice-phishing-ai-joint-model#breadcrumb&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;홈&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;Finance&quot;,
              &quot;item&quot;: &quot;https://example.com/finance&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 3,
              &quot;name&quot;: &quot;보이스피싱 탐지 AI 공동모델이 금융권 방어 체계를 바꾼다&quot;
            }
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>Federated Learning</category>
      <category>금융보안원</category>
      <category>금융사기 예방</category>
      <category>대포통장 탐지</category>
      <category>보이스피싱 탐지 ai</category>
      <category>연합학습</category>
      <category>인터넷은행 3사</category>
      <category>카카오뱅크</category>
      <category>케이뱅크</category>
      <category>토스뱅크</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/570</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%B3%B4%EC%9D%B4%EC%8A%A4%ED%94%BC%EC%8B%B1-%ED%83%90%EC%A7%80-AI-%EA%B3%B5%EB%8F%99%EB%AA%A8%EB%8D%B8%EC%9D%B4-%EA%B8%88%EC%9C%B5%EA%B6%8C-%EB%B0%A9%EC%96%B4-%EC%B2%B4%EA%B3%84%EB%A5%BC-%EB%B0%94%EA%BE%BC%EB%8B%A4#entry570comment</comments>
      <pubDate>Wed, 24 Jun 2026 21:28:46 +0900</pubDate>
    </item>
    <item>
      <title>포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험</title>
      <link>https://togethergrow.tistory.com/entry/%ED%8F%AC%ED%8B%B0%EB%B8%94%EB%A6%AC%EB%93%9C-%EA%B3%B5%EA%B2%A9%EC%9C%BC%EB%A1%9C-%EB%93%9C%EB%9F%AC%EB%82%9C-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%85%B8%EC%B6%9C-%EC%9E%A5%EB%B9%84-%EA%B3%84%EC%A0%95-%ED%83%88%EC%B7%A8-%EC%9C%84%ED%97%98</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;포티넷 포티게이트를 비롯해 시놀로지, 소포스, 시트릭스 등 인터넷 노출 장비를 겨냥한 포티블리드 공격의 흐름과 기업 보안 점검 포인트를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;포티블리드, FortiBleed, 포티게이트 해킹, Fortinet, 자격증명 탈취, 크리덴셜 스터핑, SSL-VPN 보안, AD 계정 탈취, 인터넷 노출 장비, 초기 침투 브로커&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;포티넷 포티게이트를 비롯해 시놀로지, 소포스, 시트릭스 등 인터넷 노출 장비를 겨냥한 포티블리드 공격의 흐름과 기업 보안 점검 포인트를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/fortibleed-security-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;포티넷 포티게이트를 비롯해 시놀로지, 소포스, 시트릭스 등 인터넷 노출 장비를 겨냥한 포티블리드 공격의 흐름과 기업 보안 점검 포인트를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/fortibleed-security-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      word-break: keep-all;
    }

    .post-content main {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9em;
      line-height: 1.35;
    }

    .post-content h2 {
      margin: 38px 0 16px;
      font-size: 1.45em;
      line-height: 1.4;
    }

    .post-content h3 {
      margin: 28px 0 12px;
      font-size: 1.15em;
      line-height: 1.4;
    }

    .post-content p {
      margin: 0 0 16px;
    }

    .post-content .summary-box,
    .post-content .notice-box,
    .post-content .warning-box,
    .post-content .check-box {
      margin: 18px 0;
      padding: 16px 18px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }

    .post-content .notice-box {
      border-color: #d8c48f;
    }

    .post-content .warning-box {
      border-color: #e0b4b4;
    }

    .post-content .check-box {
      border-color: #b8d8c2;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
    }

    .post-content th,
    .post-content td {
      border: 1px solid #ddd;
      padding: 10px 12px;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 14px 16px;
      border: 1px solid #ddd;
      border-radius: 8px;
      line-height: 1.6;
    }

    .post-content code {
      font-family: Consolas, Monaco, monospace;
    }
  &lt;/style&gt;

  &lt;div class=&quot;post-content&quot;&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h1&gt;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&lt;/h1&gt;

        &lt;section&gt;
          &lt;h2&gt;정리된 내용&lt;/h2&gt;

          &lt;p&gt;
            2026년 들어 포티넷 포티게이트 방화벽과 SSL-VPN 장비를 중심으로 대규모 자격증명 탈취 공격이 확인됐다.
            이 공격은 포티블리드(FortiBleed)로 불리며, 단순한 취약점 스캔이 아니라 인터넷에 노출된 보안 장비와 NAS, VPN, DB 서버를 동시에 겨냥한 계정 기반 침투 시도로 볼 수 있다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            공격자는 포티게이트 관리자 계정과 SSL-VPN 계정을 대상으로 크리덴셜 스터핑과 무차별 대입 공격을 수행했다.&lt;br&gt;
            장비 장악 이후에는 인증 트래픽을 수집하는 도구를 설치해 평문 비밀번호, NTLM 해시, 커버로스 해시 등 내부망 침투에 활용 가능한 정보를 확보한 정황이 제기됐다.&lt;br&gt;
            관리자 입장에서 이번 사건은 방화벽 장비 자체보다 계정 재사용, MFA 미적용, 인터넷 노출 관리 부실이 더 큰 위험으로 이어질 수 있다는 점을 보여준다.
          &lt;/div&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;내용&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;공격명&lt;/td&gt;
                &lt;td&gt;포티블리드(FortiBleed)&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;주요 대상&lt;/td&gt;
                &lt;td&gt;포티넷 포티게이트, 시놀로지 NAS, 소포스 방화벽, 시트릭스 SSL-VPN, MS-SQL 서버&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;공격 방식&lt;/td&gt;
                &lt;td&gt;크리덴셜 스터핑, 무차별 대입, 장비 장악 후 인증 트래픽 수집&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;수집 정보&lt;/td&gt;
                &lt;td&gt;평문 비밀번호, RADIUS 인증 정보, NTLM 해시, 커버로스 해시, DB 인증 토큰&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;위험성&lt;/td&gt;
                &lt;td&gt;VPN 침투, AD 정찰, 내부망 이동, 랜섬웨어 초기 침투로 이어질 수 있음&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;공격 흐름&lt;/h2&gt;

          &lt;p&gt;
            포티블리드 공격은 인터넷에 공개된 장비를 대량으로 찾는 단계에서 시작된다.
            공격자는 매스캔, 쇼단과 같은 스캔 도구를 활용해 외부에서 접근 가능한 포티게이트, NAS, 방화벽, SSL-VPN, DBMS 서버를 분류한 뒤 로그인 포털과 관리 인터페이스를 대상으로 계정 대입을 시도한 것으로 정리된다.
          &lt;/p&gt;

          &lt;h3&gt;1. 인터넷 노출 장비 탐색&lt;/h3&gt;

          &lt;p&gt;
            공격자는 먼저 외부에서 접속 가능한 장비를 찾는다.
            포티게이트 SSL-VPN, 관리자 패널, 시놀로지 NAS 로그인 페이지, 소포스 방화벽, 시트릭스 SSL-VPN, MS-SQL 포트처럼 인터넷에 직접 노출된 서비스가 주요 탐색 대상이 된다.
          &lt;/p&gt;

          &lt;div class=&quot;notice-box&quot;&gt;
            인터넷에 관리 포털이 노출되어 있다는 것만으로도 공격 표면이 크게 넓어진다.&lt;br&gt;
            특히 VPN 장비와 방화벽은 내부망 진입 지점이기 때문에 일반 웹서버보다 더 높은 우선순위로 보호해야 한다.
          &lt;/div&gt;

          &lt;h3&gt;2. 계정 대입과 크리덴셜 스터핑&lt;/h3&gt;

          &lt;p&gt;
            공격자는 기존에 유출된 계정과 비밀번호 조합을 장비 로그인 페이지에 반복 대입한다.
            같은 비밀번호를 여러 시스템에서 재사용하는 조직은 이 단계에서 쉽게 뚫릴 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            포티블리드 공격에서는 ‘forticheck’으로 알려진 전용 도구가 관리자 패널과 SSL-VPN 포털 인증 시도에 사용된 것으로 알려졌다.
            이 단계에서 성공한 계정은 단순한 로그인 성공에 그치지 않고 이후 장비 장악과 내부망 침투의 출발점이 된다.
          &lt;/p&gt;

          &lt;h3&gt;3. 장비 장악 후 인증 트래픽 수집&lt;/h3&gt;

          &lt;p&gt;
            공격자는 포티게이트 장비 접근에 성공하면 SSH 권한을 확보하고, 네트워크 진단 기능을 악용하는 스니퍼 도구를 설치한 것으로 분석된다.
            이 도구는 인증 과정에서 오가는 트래픽을 수집해 평문 비밀번호나 해시값을 확보하는 데 사용될 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            여기서 수집된 NTLM 해시와 커버로스 해시는 액티브 디렉터리 환경에서 특히 위험하다.
            공격자가 해시를 해독하거나 재사용할 수 있다면, VPN 장비 침투가 곧 내부 AD 계정 탈취와 권한 확대 단계로 이어질 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;4. 내부망 이동과 가치 높은 대상 선별&lt;/h3&gt;

          &lt;p&gt;
            공격자는 모든 피해 조직을 같은 방식으로 다루지 않는다.
            확보한 계정 권한, 조직 규모, 업종, 내부망 접근 가능성, AD 도메인 정보 등을 기준으로 경제적 가치가 높은 대상을 선별하고 추가 공격 자원을 투입한다.
          &lt;/p&gt;

          &lt;p&gt;
            실무 기준으로 보면 이 단계가 가장 위험하다.
            외부 장비 계정 하나가 탈취된 것처럼 보이더라도, 실제 피해는 내부 파일서버 접근, 도메인 계정 탈취, 백업 서버 장악, 랜섬웨어 배포로 확장될 수 있기 때문이다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;왜 포티게이트 장비가 집중 표적이 됐나&lt;/h2&gt;

          &lt;p&gt;
            포티게이트 같은 방화벽과 SSL-VPN 장비는 외부 사용자와 내부망을 연결하는 관문 역할을 한다.
            공격자 입장에서는 일반 서버 하나를 침해하는 것보다 VPN 계정을 확보하는 편이 훨씬 효율적이다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;위험 요소&lt;/th&gt;
                &lt;th&gt;설명&lt;/th&gt;
                &lt;th&gt;영향&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;인터넷 직접 노출&lt;/td&gt;
                &lt;td&gt;SSL-VPN 포털과 관리자 페이지가 외부에서 접근 가능&lt;/td&gt;
                &lt;td&gt;대량 스캔과 자동화 공격 대상이 됨&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;계정 재사용&lt;/td&gt;
                &lt;td&gt;유출된 비밀번호를 VPN 또는 관리자 계정에 재사용&lt;/td&gt;
                &lt;td&gt;크리덴셜 스터핑 성공 가능성 증가&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;MFA 미적용&lt;/td&gt;
                &lt;td&gt;비밀번호만 맞으면 로그인이 가능한 구조&lt;/td&gt;
                &lt;td&gt;탈취 계정만으로 원격 접속 가능&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;관리 계정 방치&lt;/td&gt;
                &lt;td&gt;퇴사자, 협력사, 임시 관리자 계정이 남아 있음&lt;/td&gt;
                &lt;td&gt;장기간 미탐지 침투 가능&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;내부 AD 연동&lt;/td&gt;
                &lt;td&gt;VPN 인증이 AD, RADIUS, LDAP와 연결됨&lt;/td&gt;
                &lt;td&gt;인증 정보 탈취 시 내부망 정찰로 확대&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;수집된 자격증명이 위험한 이유&lt;/h2&gt;

          &lt;p&gt;
            포티블리드에서 가장 중요한 부분은 공격자가 단순히 장비 목록만 확보한 것이 아니라, 실제 인증에 사용할 수 있는 자격증명과 해시값을 대량으로 수집했다는 점이다.
            이 정보는 다른 공격자에게 판매되거나 랜섬웨어 조직의 초기 침투 경로로 활용될 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;RADIUS 인증 정보&lt;/h3&gt;

          &lt;p&gt;
            RADIUS는 VPN, 무선 네트워크, 장비 인증 등에서 널리 사용된다.
            RADIUS 인증 정보가 노출되면 외부 접속 장비와 내부 계정 체계가 함께 위험해질 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;NTLM 해시&lt;/h3&gt;

          &lt;p&gt;
            NTLM 해시는 윈도우 인증 환경에서 중요하다.
            공격자는 해시를 해독하거나 패스더해시(Pass-the-Hash) 방식으로 내부 시스템 접근을 시도할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;커버로스 해시&lt;/h3&gt;

          &lt;p&gt;
            커버로스 해시는 액티브 디렉터리 환경의 티켓 기반 인증과 관련된다.
            공격자가 이를 분석하면 도메인 계정 정찰, 서비스 계정 공격, 권한 확대 시도로 이어질 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;DB 인증 토큰&lt;/h3&gt;

          &lt;p&gt;
            DB 인증 정보가 노출되면 단순 시스템 침투를 넘어 데이터 유출 위험으로 이어진다.
            특히 고객 정보, 결제 정보, 운영 데이터가 포함된 DB라면 사고 영향 범위가 크게 확대된다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;중소기업과 IT 서비스 기업이 더 위험한 이유&lt;/h2&gt;

          &lt;p&gt;
            이번 공격은 특정 산업 하나만을 겨냥한 것이 아니라 인터넷에 노출된 장비 전반을 대상으로 한 대규모 자동화 공격에 가깝다.
            다만 직원 수가 적은 중소기업이나 IT 서비스 기업은 상대적으로 계정 관리와 장비 패치가 늦어질 수 있어 피해 가능성이 높다.
          &lt;/p&gt;

          &lt;div class=&quot;warning-box&quot;&gt;
            IT 서비스 기업이 침해되면 해당 기업 하나의 문제가 아니라 고객사 네트워크로 이어질 수 있다.&lt;br&gt;
            원격 관리 계정, VPN 계정, 장비 관리자 계정이 탈취되면 공급망 공격 형태로 확대될 가능성도 있다.
          &lt;/div&gt;

          &lt;p&gt;
            특히 협력사 계정, 유지보수 계정, 공용 관리자 계정이 남아 있는 환경은 매우 위험하다.
            공격자가 이런 계정을 확보하면 정상 관리자의 접속처럼 보일 수 있어 탐지가 늦어진다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;기업이 바로 확인해야 할 점검 항목&lt;/h2&gt;

          &lt;p&gt;
            포티블리드 같은 공격은 장비 패치만으로 끝나지 않는다.
            이미 유출된 계정이 사용됐을 가능성을 전제로, 계정 변경과 로그 점검을 함께 진행해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;1. 인터넷 노출 상태 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;외부에서 SSL-VPN 포털 접근 가능 여부 확인
외부에서 관리자 페이지 접근 가능 여부 확인
불필요한 관리 포트 차단
관리자 접속 허용 IP 제한&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;2. 포티게이트 계정 점검&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;관리자 계정 목록 확인
사용하지 않는 계정 비활성화
공용 계정 제거
협력사·퇴사자 계정 삭제
모든 관리자 계정 비밀번호 변경&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;3. SSL-VPN 계정 점검&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;최근 로그인 이력 확인
실패 로그인 급증 여부 확인
해외 IP 접속 여부 확인
업무 시간 외 접속 여부 확인
동일 계정의 다중 국가 접속 여부 확인&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;4. MFA 적용&lt;/h3&gt;

          &lt;p&gt;
            VPN과 관리자 계정에는 MFA를 우선 적용해야 한다.
            비밀번호가 유출되더라도 추가 인증이 있으면 자동화 공격의 성공 가능성을 크게 줄일 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;5. AD와 RADIUS 계정 변경&lt;/h3&gt;

          &lt;p&gt;
            VPN 인증이 AD, LDAP, RADIUS와 연동되어 있다면 장비 계정만 바꿔서는 부족하다.
            VPN 사용자 계정, 관리자 계정, 서비스 계정, RADIUS 연동 계정까지 함께 점검해야 한다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;로그에서 확인할 수 있는 이상 징후&lt;/h2&gt;

          &lt;p&gt;
            포티블리드 대응에서 중요한 것은 이미 성공한 로그인을 찾는 것이다.
            실패 로그만 보면 공격 시도는 확인할 수 있지만, 실제 장비 장악 여부는 놓칠 수 있다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;로그 유형&lt;/th&gt;
                &lt;th&gt;의심 징후&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;관리자 로그인&lt;/td&gt;
                &lt;td&gt;평소 사용하지 않는 IP, 국가, 시간대에서 관리자 로그인 성공&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;SSL-VPN 로그인&lt;/td&gt;
                &lt;td&gt;짧은 시간 동안 반복 실패 후 특정 계정 로그인 성공&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;계정 변경&lt;/td&gt;
                &lt;td&gt;신규 관리자 생성, 권한 변경, 비밀번호 변경&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;설정 변경&lt;/td&gt;
                &lt;td&gt;SSH 활성화, 진단 기능 사용, 관리 접근 정책 변경&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;내부 접속&lt;/td&gt;
                &lt;td&gt;VPN 로그인 직후 AD, 파일서버, DB 서버 접근 시도&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            단순히 “로그인 실패가 많다”보다 “실패 후 성공한 계정이 있는지”를 우선 확인해야 한다.&lt;br&gt;
            로그인 성공 후 SSH, 관리자 설정 변경, 내부 서버 접근이 이어졌다면 침해 가능성을 높게 봐야 한다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;대응 방향&lt;/h2&gt;

          &lt;p&gt;
            포티블리드 대응은 장비 보안, 계정 보안, 내부망 보안을 동시에 진행해야 한다.
            외부 장비의 비밀번호만 바꾸고 끝내면 이미 수집된 AD 계정이나 해시를 통한 내부 이동 가능성을 놓칠 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;1. 즉시 조치&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;모든 FortiGate 관리자 계정 비밀번호 변경
SSL-VPN 사용자 비밀번호 변경
MFA 강제 적용
불필요한 관리자 계정 삭제
외부 관리자 페이지 차단
관리 접속 허용 IP 제한
최신 보안 패치 적용&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;2. 침해 여부 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;최근 90일 관리자 로그인 이력 검토
SSL-VPN 로그인 성공·실패 이력 분석
신규 관리자 계정 생성 여부 확인
설정 백업 파일 변경 여부 확인
SSH 접속 이력 확인
AD 계정 잠금·실패 로그인 이벤트 확인&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;3. 내부망 확산 점검&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;도메인 관리자 계정 로그인 이력 확인
RDP·SMB 접근 로그 확인
파일서버 대량 접근 여부 확인
DB 서버 로그인 실패·성공 로그 확인
백업 서버 접근 이력 확인
EDR 탐지 이벤트 확인&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;4. 장기 개선&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;VPN 계정과 관리자 계정 분리
장비 관리자 계정 개별화
공용 계정 제거
계정 주기 점검 자동화
외부 노출 자산 목록화
로그 중앙 수집과 장기 보관
관리망 분리&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;보안팀이 우선순위를 정하는 방법&lt;/h2&gt;

          &lt;p&gt;
            모든 장비를 한 번에 점검하기 어렵다면 위험도가 높은 대상부터 처리해야 한다.
            우선순위는 외부 노출 여부, 관리자 페이지 접근 가능 여부, MFA 적용 여부, AD 연동 여부, 최근 로그인 이상 징후를 기준으로 정할 수 있다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;우선순위&lt;/th&gt;
                &lt;th&gt;대상&lt;/th&gt;
                &lt;th&gt;조치&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;최상&lt;/td&gt;
                &lt;td&gt;외부에 관리자 페이지가 노출된 장비&lt;/td&gt;
                &lt;td&gt;즉시 차단, 접속 허용 IP 제한, 계정 변경&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;상&lt;/td&gt;
                &lt;td&gt;MFA 없는 SSL-VPN 장비&lt;/td&gt;
                &lt;td&gt;MFA 적용, 로그인 로그 분석, 비밀번호 변경&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;상&lt;/td&gt;
                &lt;td&gt;AD·RADIUS와 연동된 VPN&lt;/td&gt;
                &lt;td&gt;연동 계정 변경, AD 이벤트 분석&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;중&lt;/td&gt;
                &lt;td&gt;협력사 유지보수 계정 보유 장비&lt;/td&gt;
                &lt;td&gt;계정 비활성화, 필요 시 재승인 후 재발급&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;중&lt;/td&gt;
                &lt;td&gt;패치 수준이 낮은 장비&lt;/td&gt;
                &lt;td&gt;펌웨어 업데이트, 설정 백업, 재부팅 계획 수립&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;정리&lt;/h2&gt;

          &lt;p&gt;
            포티블리드는 포티게이트 장비만의 문제가 아니라 인터넷에 노출된 보안 장비와 인증 체계 전반의 문제로 봐야 한다.
            공격자는 방화벽, NAS, SSL-VPN, DB 서버를 자동으로 찾고, 이미 유출된 계정 정보를 대입해 접근 권한을 확보한 뒤, 내부망 침투에 쓸 수 있는 인증 정보를 다시 수집한다.
          &lt;/p&gt;

          &lt;p&gt;
            이번 공격에서 중요한 교훈은 비밀번호 하나가 장비 접속을 넘어 AD 계정 탈취, 내부망 이동, 랜섬웨어 초기 침투로 이어질 수 있다는 점이다.
            따라서 기업은 포티게이트와 SSL-VPN 장비의 계정 변경, MFA 적용, 외부 노출 차단, 로그 분석, AD 계정 점검을 한 번에 수행해야 한다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            핵심 대응은 관리자 페이지 외부 노출 차단, VPN MFA 적용, 모든 관련 계정 비밀번호 변경, 로그인 성공 이력 분석, 내부망 확산 여부 점검이다.&lt;br&gt;
            계정 탈취형 공격은 패치만으로 끝나지 않으므로, 이미 사용된 계정과 해시가 내부에서 재활용됐는지까지 확인해야 한다.
          &lt;/div&gt;
        &lt;/section&gt;
      &lt;/article&gt;
    &lt;/main&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;BlogPosting&quot;,
          &quot;@id&quot;: &quot;https://example.com/fortibleed-credential-harvesting-attack&quot;,
          &quot;headline&quot;: &quot;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&quot;,
          &quot;description&quot;: &quot;포티넷 포티게이트를 비롯해 시놀로지, 소포스, 시트릭스 등 인터넷 노출 장비를 겨냥한 포티블리드 공격의 흐름과 기업 보안 점검 포인트를 정리한 글입니다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/fortibleed-credential-harvesting-attack&quot;
          },
          &quot;about&quot;: [
            &quot;포티블리드&quot;,
            &quot;FortiBleed&quot;,
            &quot;포티게이트 해킹&quot;,
            &quot;자격증명 탈취&quot;,
            &quot;크리덴셜 스터핑&quot;,
            &quot;SSL-VPN 보안&quot;,
            &quot;초기 침투 브로커&quot;
          ],
          &quot;articleSection&quot;: [
            &quot;정리된 내용&quot;,
            &quot;공격 흐름&quot;,
            &quot;왜 포티게이트 장비가 집중 표적이 됐나&quot;,
            &quot;수집된 자격증명이 위험한 이유&quot;,
            &quot;중소기업과 IT 서비스 기업이 더 위험한 이유&quot;,
            &quot;기업이 바로 확인해야 할 점검 항목&quot;,
            &quot;로그에서 확인할 수 있는 이상 징후&quot;,
            &quot;대응 방향&quot;,
            &quot;보안팀이 우선순위를 정하는 방법&quot;,
            &quot;정리&quot;
          ]
        },
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;@id&quot;: &quot;https://example.com/fortibleed-credential-harvesting-attack#breadcrumb&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;홈&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;Security&quot;,
              &quot;item&quot;: &quot;https://example.com/security&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 3,
              &quot;name&quot;: &quot;포티블리드 공격으로 드러난 인터넷 노출 장비 계정 탈취 위험&quot;
            }
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AD 계정 탈취</category>
      <category>FortiBleed</category>
      <category>Fortinet</category>
      <category>SSL-VPN 보안</category>
      <category>인터넷 노출 장비</category>
      <category>자격증명 탈취</category>
      <category>초기 침투 브로커</category>
      <category>크리덴셜 스터핑</category>
      <category>포티게이트 해킹</category>
      <category>포티블리드</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/569</guid>
      <comments>https://togethergrow.tistory.com/entry/%ED%8F%AC%ED%8B%B0%EB%B8%94%EB%A6%AC%EB%93%9C-%EA%B3%B5%EA%B2%A9%EC%9C%BC%EB%A1%9C-%EB%93%9C%EB%9F%AC%EB%82%9C-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%85%B8%EC%B6%9C-%EC%9E%A5%EB%B9%84-%EA%B3%84%EC%A0%95-%ED%83%88%EC%B7%A8-%EC%9C%84%ED%97%98#entry569comment</comments>
      <pubDate>Wed, 24 Jun 2026 21:24:14 +0900</pubDate>
    </item>
    <item>
      <title>오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리</title>
      <link>https://togethergrow.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%85%8C%EC%9D%B4%EB%B8%94-Block-Corrupt%EB%A1%9C-%EC%9D%B8%ED%95%9C-%EB%B0%B1%EC%97%85-%EC%8B%A4%ED%8C%A8-%EC%A1%B0%EC%B9%98-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;오라클 데이터베이스에서 테이블 Block Corrupt로 인해 RMAN 백업이 실패하는 경우의 증상, 점검 명령어, 복구 절차, 재발 방지 방법을 운영 기준으로 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;오라클 Block Corrupt, Oracle 백업 실패, RMAN 백업 오류, DB_BLOCK_CHECKING, DBVERIFY, RMAN validate, corrupt block, Oracle 복구, 데이터파일 손상, 테이블 블록 손상&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;오라클 데이터베이스에서 테이블 Block Corrupt로 인해 RMAN 백업이 실패하는 경우의 증상, 점검 명령어, 복구 절차, 재발 방지 방법을 운영 기준으로 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/oracle-block-corrupt-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;오라클 데이터베이스에서 테이블 Block Corrupt로 인해 RMAN 백업이 실패하는 경우의 증상, 점검 명령어, 복구 절차, 재발 방지 방법을 운영 기준으로 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/oracle-block-corrupt-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      word-break: keep-all;
    }

    .article-wrap main {
      max-width: 860px;
      margin: 0 auto;
    }

    .article-wrap h1 {
      margin: 0 0 24px;
      font-size: 1.9em;
      line-height: 1.35;
    }

    .article-wrap h2 {
      margin: 38px 0 16px;
      font-size: 1.45em;
      line-height: 1.4;
    }

    .article-wrap h3 {
      margin: 28px 0 12px;
      font-size: 1.15em;
      line-height: 1.4;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .summary-box,
    .article-wrap .warning-box,
    .article-wrap .check-box {
      margin: 18px 0;
      padding: 16px 18px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }

    .article-wrap .warning-box {
      border-color: #e0b4b4;
    }

    .article-wrap .check-box {
      border-color: #b8d8c2;
    }

    .article-wrap pre {
      overflow-x: auto;
      padding: 14px 16px;
      border: 1px solid #ddd;
      border-radius: 8px;
      line-height: 1.6;
    }

    .article-wrap code {
      font-family: Consolas, Monaco, monospace;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid #ddd;
      padding: 10px 12px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }
  &lt;/style&gt;

  &lt;div class=&quot;article-wrap&quot;&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h1&gt;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&lt;/h1&gt;

        &lt;section&gt;
          &lt;h2&gt;개요&lt;/h2&gt;

          &lt;p&gt;
            오라클 데이터베이스에서 테이블 Block Corrupt가 발생하면 특정 테이블 조회 오류뿐 아니라 RMAN 백업 실패로 이어질 수 있다.
            Block Corrupt는 데이터파일 내부의 특정 블록이 논리적 또는 물리적으로 손상된 상태를 의미하며, 백업 과정에서 해당 블록을 읽는 순간 오류가 발생할 수 있다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            핵심은 손상된 블록의 위치를 먼저 확인한 뒤, 해당 블록이 어떤 객체에 속하는지 식별하고, 복구 가능 여부를 판단하는 것이다.&lt;br&gt;
            운영 환경에서는 백업 실패만 보고 RMAN 명령을 반복하기보다 데이터파일, 테이블스페이스, 객체, 스토리지 상태를 함께 점검해야 한다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;환경&lt;/h2&gt;

          &lt;p&gt;
            이 문서는 오라클 데이터베이스에서 RMAN 백업 중 Block Corrupt 관련 오류가 발생하거나, 특정 테이블 조회 시 블록 손상 오류가 발생하는 상황을 기준으로 정리했다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;항목&lt;/th&gt;
                &lt;th&gt;내용&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;DBMS&lt;/td&gt;
                &lt;td&gt;Oracle Database&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;백업 방식&lt;/td&gt;
                &lt;td&gt;RMAN 백업&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;주요 증상&lt;/td&gt;
                &lt;td&gt;백업 실패, 특정 테이블 조회 실패, 데이터파일 블록 손상 감지&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;주요 점검 대상&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;V$DATABASE_BLOCK_CORRUPTION&lt;/code&gt;, RMAN validate, alert log, 데이터파일, 스토리지&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;영향 범위&lt;/td&gt;
                &lt;td&gt;손상 블록이 포함된 테이블, 인덱스, LOB, 파티션, 데이터파일&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;증상&lt;/h2&gt;

          &lt;p&gt;
            Block Corrupt가 발생하면 백업 중 특정 데이터파일을 읽는 단계에서 실패하거나, 애플리케이션에서 특정 데이터 조회 시 오류가 발생할 수 있다.
            손상 범위가 작더라도 백업이 해당 블록을 읽는 순간 오류가 발생하므로 전체 백업 작업이 실패한 것처럼 보일 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;RMAN 백업 실패 예시&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;RMAN-03009: failure of backup command
ORA-19566: exceeded limit of 0 corrupt blocks for file
ORA-19870: error while restoring backup piece
ORA-19625: error identifying file&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;테이블 조회 중 오류 예시&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;ORA-01578: ORACLE data block corrupted
ORA-01110: data file 7: '/oradata/DB01/users01.dbf'&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;alert log 확인 시 예시&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;Corrupt block relative dba: 0x01c12345
Bad check value found during backing up datafile
Reread of blocknum=12345, file=/oradata/DB01/users01.dbf&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            오류 메시지에 데이터파일 번호와 블록 번호가 표시되는 경우가 많다.
            이 정보는 어떤 객체가 손상되었는지 찾는 데 사용된다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;1차 점검&lt;/h2&gt;

          &lt;p&gt;
            먼저 RMAN 또는 데이터베이스 뷰에서 손상 블록 목록을 확인한다.
            이미 감지된 손상 블록은 &lt;code&gt;V$DATABASE_BLOCK_CORRUPTION&lt;/code&gt;에서 확인할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;손상 블록 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT file#,
       block#,
       blocks,
       corruption_change#,
       corruption_type
FROM v$database_block_corruption
ORDER BY file#, block#;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;데이터파일 경로 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT file_id,
       file_name,
       tablespace_name
FROM dba_data_files
WHERE file_id = &amp;amp;file_number;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;해당 블록이 포함된 객체 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT owner,
       segment_name,
       segment_type,
       tablespace_name
FROM dba_extents
WHERE file_id = &amp;amp;file_number
  AND &amp;amp;block_number BETWEEN block_id AND block_id + blocks - 1;&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            여기서 객체가 TABLE인지, INDEX인지, LOB인지, PARTITION인지 확인해야 한다.&lt;br&gt;
            인덱스 블록 손상이라면 인덱스 재생성으로 해결될 수 있지만, 테이블 데이터 블록 손상이라면 백업 복구나 데이터 재적재가 필요할 수 있다.
          &lt;/div&gt;

          &lt;h3&gt;RMAN validate 실행&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; VALIDATE DATABASE;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            특정 데이터파일만 확인하려면 아래처럼 실행한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; VALIDATE DATAFILE 7;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            백업셋까지 검증하려면 아래 명령을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; VALIDATE BACKUPSET 123;&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;심화 분석&lt;/h2&gt;

          &lt;p&gt;
            Block Corrupt는 크게 물리적 손상과 논리적 손상으로 나눠 볼 수 있다.
            물리적 손상은 디스크, 스토리지, 파일 시스템, I/O 경로 문제와 관련될 수 있고, 논리적 손상은 블록 구조나 내부 데이터 정합성 문제로 나타날 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;1. 손상 유형 확인&lt;/h3&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;설명&lt;/th&gt;
                &lt;th&gt;주요 대응&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;물리적 손상&lt;/td&gt;
                &lt;td&gt;블록 헤더, 체크섬, 읽기 오류, 디스크 I/O 오류 등&lt;/td&gt;
                &lt;td&gt;RMAN blockrecover, 백업 복구, 스토리지 점검&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;논리적 손상&lt;/td&gt;
                &lt;td&gt;블록은 읽히지만 내부 데이터 구조가 비정상인 상태&lt;/td&gt;
                &lt;td&gt;DBVERIFY, RMAN validate check logical, 객체 재생성 검토&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;인덱스 손상&lt;/td&gt;
                &lt;td&gt;인덱스 세그먼트 블록 손상&lt;/td&gt;
                &lt;td&gt;인덱스 rebuild 또는 drop 후 recreate&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;LOB 손상&lt;/td&gt;
                &lt;td&gt;LOB 세그먼트 또는 LOB 인덱스 손상&lt;/td&gt;
                &lt;td&gt;영향 행 식별, 재적재, 백업 복구 검토&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;

          &lt;h3&gt;2. RMAN 논리 검사&lt;/h3&gt;

          &lt;p&gt;
            물리적 블록 손상뿐 아니라 논리적 손상까지 확인하려면 &lt;code&gt;CHECK LOGICAL&lt;/code&gt; 옵션을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; BACKUP VALIDATE CHECK LOGICAL DATABASE;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            특정 데이터파일만 검사할 경우에는 아래처럼 실행한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; BACKUP VALIDATE CHECK LOGICAL DATAFILE 7;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;3. DBVERIFY로 데이터파일 확인&lt;/h3&gt;

          &lt;p&gt;
            DB가 내려가 있거나 특정 데이터파일을 별도로 검사해야 하는 경우 &lt;code&gt;dbv&lt;/code&gt; 명령을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;dbv file=/oradata/DB01/users01.dbf blocksize=8192&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            DBVERIFY는 데이터파일 단위로 블록 이상 여부를 확인하는 데 유용하다.
            단, 운영 중인 DB 파일에 대해 실행할 때는 I/O 부하가 발생할 수 있으므로 작업 시간대를 고려해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;4. alert log와 OS 로그 확인&lt;/h3&gt;

          &lt;p&gt;
            Block Corrupt가 실제 디스크 문제에서 시작된 것인지 확인하려면 DB alert log와 OS 로그를 함께 봐야 한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;dmesg -T | egrep -i &quot;error|fail|scsi|disk|io|timeout&quot;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;journalctl -k | egrep -i &quot;error|fail|scsi|disk|io|timeout&quot;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            관리자 입장에서 Block Corrupt는 DB 내부 문제처럼 보이더라도 실제 원인은 스토리지, HBA, SAN 경로, 파일 시스템, 백업 솔루션 I/O 충돌에서 시작될 수 있다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;복구&lt;/h2&gt;

          &lt;p&gt;
            복구 방식은 손상된 블록이 어떤 객체에 속하는지에 따라 달라진다.
            인덱스 손상인지, 테이블 데이터 손상인지, LOB 손상인지에 따라 조치 방법이 다르므로 객체 식별이 먼저다.
          &lt;/p&gt;

          &lt;h3&gt;1. 인덱스 블록 손상인 경우&lt;/h3&gt;

          &lt;p&gt;
            손상 블록이 인덱스 세그먼트에 속한다면 인덱스 재생성으로 해결되는 경우가 많다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;ALTER INDEX 소유자.인덱스명 REBUILD ONLINE;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            온라인 재생성이 불가능한 환경이라면 업무 영향 시간을 잡고 재생성한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;DROP INDEX 소유자.인덱스명;

CREATE INDEX 소유자.인덱스명
ON 소유자.테이블명(컬럼명);&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;warning-box&quot;&gt;
            인덱스를 삭제 후 재생성할 경우 기존 인덱스 옵션, 유니크 여부, 파티션 여부, 병렬도, 테이블스페이스 설정을 반드시 확인해야 한다.&lt;br&gt;
            운영 환경에서는 기존 DDL을 먼저 추출한 뒤 작업하는 것이 안전하다.
          &lt;/div&gt;

          &lt;h3&gt;2. 테이블 데이터 블록 손상인 경우&lt;/h3&gt;

          &lt;p&gt;
            손상 블록이 테이블 데이터 세그먼트라면 단순 rebuild로 해결되지 않는다.
            사용 가능한 정상 백업이 있다면 RMAN 블록 복구를 우선 검토한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; BLOCKRECOVER DATAFILE 7 BLOCK 12345;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            여러 블록이 손상된 경우에는 &lt;code&gt;V$DATABASE_BLOCK_CORRUPTION&lt;/code&gt; 기준으로 복구할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; RECOVER CORRUPTION LIST;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            블록 복구를 위해서는 해당 블록의 정상 이미지가 포함된 백업과 필요한 아카이브 로그가 있어야 한다.
            백업이 없거나 아카이브 로그가 부족하면 테이블 단위 복구, export/import, 데이터 재적재를 검토해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;3. 백업은 실패하지만 업무 조회는 가능한 경우&lt;/h3&gt;

          &lt;p&gt;
            업무에서는 아직 해당 블록을 읽지 않아 정상처럼 보일 수 있다.
            그러나 백업은 전체 데이터파일을 순차적으로 읽기 때문에 손상 블록을 만나면 실패할 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            이 경우 임시로 RMAN의 허용 손상 블록 수를 설정해 백업을 진행할 수는 있지만, 이는 근본 해결이 아니다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; RUN {
  SET MAXCORRUPT FOR DATAFILE 7 TO 10;
  BACKUP DATAFILE 7;
}&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;warning-box&quot;&gt;
            &lt;code&gt;SET MAXCORRUPT&lt;/code&gt;는 백업을 통과시키기 위한 임시 조치일 뿐이다.&lt;br&gt;
            손상 블록이 포함된 상태로 백업을 계속 유지하면 복구 시점에 데이터 유실이나 복구 실패가 발생할 수 있다.&lt;br&gt;
            반드시 손상 객체 식별과 복구 계획을 함께 진행해야 한다.
          &lt;/div&gt;

          &lt;h3&gt;4. 백업본에서 테이블 단위 복구&lt;/h3&gt;

          &lt;p&gt;
            특정 테이블만 손상되었고 전체 DB 복구가 어려운 경우, 정상 백업에서 보조 인스턴스 또는 별도 서버로 복구한 뒤 해당 테이블 데이터를 추출하는 방식을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;expdp system/password schemas=소유자 tables=테이블명 directory=DATA_PUMP_DIR dumpfile=table_restore.dmp logfile=table_restore.log&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;impdp system/password schemas=소유자 tables=테이블명 directory=DATA_PUMP_DIR dumpfile=table_restore.dmp logfile=table_import.log&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            이 방식은 복구 대상 시점, 데이터 정합성, 업무 중단 가능성, 외래키 관계를 함께 검토해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;5. 손상 행 우회 후 정상 데이터 이관&lt;/h3&gt;

          &lt;p&gt;
            일부 블록만 손상되어 있고 백업 복구가 불가능한 경우, 정상적으로 읽히는 데이터를 새 테이블로 이관하는 방법을 검토할 수 있다.
            다만 손상 블록에 포함된 행은 읽을 수 없을 수 있으므로 데이터 유실 가능성을 명확히 판단해야 한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;CREATE TABLE 소유자.테이블명_NEW AS
SELECT *
FROM 소유자.테이블명
WHERE 조건;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            대용량 테이블에서는 범위 조건을 나눠 정상 구간을 분리 이관하는 방식이 필요할 수 있다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;재발 방지&lt;/h2&gt;

          &lt;p&gt;
            Block Corrupt가 한 번 발생했다면 DB 내부 복구만으로 끝내지 말고 스토리지와 OS 계층까지 점검해야 한다.
            실제 사용 시 블록 손상은 디스크 장애, 스토리지 컨트롤러 오류, SAN 경로 문제, 파일 시스템 이상, 비정상 종료와 함께 발생하는 경우가 있다.
          &lt;/p&gt;

          &lt;h3&gt;1. 정기적인 RMAN 검증&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; BACKUP VALIDATE DATABASE;&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;RMAN&amp;gt; BACKUP VALIDATE CHECK LOGICAL DATABASE;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            백업 성공 여부만 확인하지 말고 정기적으로 validate를 수행해 실제 복구 가능성과 블록 상태를 확인해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;2. 블록 체크 관련 파라미터 검토&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SHOW PARAMETER db_block_checking
SHOW PARAMETER db_block_checksum&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            블록 체크와 체크섬 설정은 손상 감지에 도움이 되지만, 환경에 따라 성능 영향이 있을 수 있다.
            운영 환경에서는 부하 특성과 장애 예방 수준을 함께 고려해 설정한다.
          &lt;/p&gt;

          &lt;h3&gt;3. 백업 정책 점검&lt;/h3&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            전체 백업과 아카이브 로그 백업이 정상 수행되는지 확인한다.&lt;br&gt;
            RMAN backup validate를 정기 작업에 포함한다.&lt;br&gt;
            백업 파일만 보관하지 말고 주기적으로 복구 테스트를 수행한다.&lt;br&gt;
            아카이브 로그 보관 기간이 복구 목표 시간과 맞는지 확인한다.&lt;br&gt;
            백업 실패 시 재시도보다 손상 블록 목록 확인을 우선한다.
          &lt;/div&gt;

          &lt;h3&gt;4. 스토리지와 OS 로그 점검&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;dmesg -T | egrep -i &quot;error|fail|scsi|disk|io|timeout&quot;
journalctl -k | egrep -i &quot;error|fail|scsi|disk|io|timeout&quot;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            같은 데이터파일에서 손상 블록이 반복되거나 특정 디스크 경로에서 I/O 오류가 보이면 스토리지 장애 가능성을 우선 점검해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;5. 장애 대응 절차 표준화&lt;/h3&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;단계&lt;/th&gt;
                &lt;th&gt;조치&lt;/th&gt;
                &lt;th&gt;목적&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;1단계&lt;/td&gt;
                &lt;td&gt;RMAN 오류와 alert log 수집&lt;/td&gt;
                &lt;td&gt;손상 데이터파일과 블록 번호 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;2단계&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;V$DATABASE_BLOCK_CORRUPTION&lt;/code&gt; 조회&lt;/td&gt;
                &lt;td&gt;현재 DB가 인지한 손상 블록 목록 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;3단계&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;DBA_EXTENTS&lt;/code&gt;로 객체 식별&lt;/td&gt;
                &lt;td&gt;테이블, 인덱스, LOB 등 영향 객체 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;4단계&lt;/td&gt;
                &lt;td&gt;RMAN blockrecover 또는 객체 재생성&lt;/td&gt;
                &lt;td&gt;손상 블록 복구 또는 우회&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;5단계&lt;/td&gt;
                &lt;td&gt;RMAN validate 재수행&lt;/td&gt;
                &lt;td&gt;복구 완료 여부 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;6단계&lt;/td&gt;
                &lt;td&gt;스토리지와 OS 로그 점검&lt;/td&gt;
                &lt;td&gt;재발 원인 제거&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;정리&lt;/h2&gt;

          &lt;p&gt;
            오라클 테이블 Block Corrupt로 인한 백업 실패는 단순 백업 오류가 아니라 데이터파일 내부의 특정 블록을 정상적으로 읽지 못하는 상태다.
            따라서 RMAN 백업 명령을 반복하기보다 손상 블록 번호, 데이터파일, 객체명을 먼저 확인해야 한다.
          &lt;/p&gt;

          &lt;p&gt;
            손상 대상이 인덱스라면 재생성으로 해결될 가능성이 높고, 테이블 데이터 블록이라면 RMAN 블록 복구, 정상 백업 기반 복구, 데이터 재이관을 검토해야 한다.
            복구 후에는 반드시 &lt;code&gt;RMAN VALIDATE&lt;/code&gt;를 다시 수행해 손상 블록이 제거되었는지 확인하는 것이 중요하다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            최종 판단 기준은 손상 블록이 어느 객체에 속하는지다.&lt;br&gt;
            인덱스 손상은 재생성, 테이블 데이터 손상은 RMAN 복구 또는 데이터 복구 절차, 반복 손상은 스토리지 점검으로 이어져야 한다.
          &lt;/div&gt;
        &lt;/section&gt;
      &lt;/article&gt;
    &lt;/main&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;TechArticle&quot;,
          &quot;@id&quot;: &quot;https://example.com/oracle-block-corrupt-backup-failure&quot;,
          &quot;headline&quot;: &quot;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&quot;,
          &quot;description&quot;: &quot;오라클 데이터베이스에서 테이블 Block Corrupt로 인해 RMAN 백업이 실패하는 경우의 증상, 점검 명령어, 복구 절차, 재발 방지 방법을 운영 기준으로 정리한 문서입니다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/oracle-block-corrupt-backup-failure&quot;
          },
          &quot;about&quot;: [
            &quot;오라클 Block Corrupt&quot;,
            &quot;Oracle 백업 실패&quot;,
            &quot;RMAN 백업 오류&quot;,
            &quot;데이터파일 손상&quot;,
            &quot;테이블 블록 손상&quot;,
            &quot;Oracle 복구&quot;
          ],
          &quot;articleSection&quot;: [
            &quot;개요&quot;,
            &quot;환경&quot;,
            &quot;증상&quot;,
            &quot;1차 점검&quot;,
            &quot;심화 분석&quot;,
            &quot;복구&quot;,
            &quot;재발 방지&quot;,
            &quot;정리&quot;
          ]
        },
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;@id&quot;: &quot;https://example.com/oracle-block-corrupt-backup-failure#breadcrumb&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;홈&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;Database&quot;,
              &quot;item&quot;: &quot;https://example.com/database&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 3,
              &quot;name&quot;: &quot;오라클 테이블 Block Corrupt로 인한 백업 실패 조치 정리&quot;
            }
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>corrupt block</category>
      <category>DBVERIFY</category>
      <category>DB_BLOCK_CHECKING</category>
      <category>Oracle 백업 실패</category>
      <category>Oracle 복구</category>
      <category>RMAN validate</category>
      <category>RMAN 백업 오류</category>
      <category>데이터파일 손상</category>
      <category>오라클 Block Corrupt</category>
      <category>테이블 블록 손상</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/568</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%85%8C%EC%9D%B4%EB%B8%94-Block-Corrupt%EB%A1%9C-%EC%9D%B8%ED%95%9C-%EB%B0%B1%EC%97%85-%EC%8B%A4%ED%8C%A8-%EC%A1%B0%EC%B9%98-%EC%A0%95%EB%A6%AC#entry568comment</comments>
      <pubDate>Wed, 24 Jun 2026 21:16:09 +0900</pubDate>
    </item>
    <item>
      <title>SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리</title>
      <link>https://togethergrow.tistory.com/entry/SUSE-OS%EC%97%90%EC%84%9C-PostgreSQL-%EA%B8%B0%EB%B0%98-DBMS-%EB%8C%80%EC%9A%A9%EB%9F%89-%EC%B2%98%EB%A6%AC-%EB%AC%B8%EC%A0%9C-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;SUSE OS 커널 7버전대 환경에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리할 때 발생할 수 있는 성능 저하, 메모리, I/O, 커넥션, 커널 파라미터 문제를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;SUSE OS, PostgreSQL, DBMS 대용량 처리, 커널 튜닝, Huge Pages, THP, I/O 성능, shared_buffers, work_mem, checkpoint 튜닝&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;SUSE OS 커널 7버전대 환경에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리할 때 발생할 수 있는 성능 저하, 메모리, I/O, 커넥션, 커널 파라미터 문제를 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/suse-postgresql-dbms-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;SUSE OS 커널 7버전대 환경에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리할 때 발생할 수 있는 성능 저하, 메모리, I/O, 커넥션, 커널 파라미터 문제를 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/suse-postgresql-dbms-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      word-break: keep-all;
    }

    .post-content main {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9em;
      line-height: 1.35;
    }

    .post-content h2 {
      margin: 38px 0 16px;
      font-size: 1.45em;
      line-height: 1.4;
    }

    .post-content h3 {
      margin: 28px 0 12px;
      font-size: 1.15em;
      line-height: 1.4;
    }

    .post-content p {
      margin: 0 0 16px;
    }

    .post-content .summary-box,
    .post-content .notice-box,
    .post-content .check-box {
      margin: 18px 0;
      padding: 16px 18px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }

    .post-content .notice-box {
      border-color: #d8c48f;
    }

    .post-content .check-box {
      border-color: #b8d8c2;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
    }

    .post-content th,
    .post-content td {
      border: 1px solid #ddd;
      padding: 10px 12px;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 14px 16px;
      border: 1px solid #ddd;
      border-radius: 8px;
      line-height: 1.6;
    }

    .post-content code {
      font-family: Consolas, Monaco, monospace;
    }
  &lt;/style&gt;

  &lt;div class=&quot;post-content&quot;&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h1&gt;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&lt;/h1&gt;

        &lt;section&gt;
          &lt;h2&gt;정리된 내용&lt;/h2&gt;

          &lt;p&gt;
            SUSE OS 커널 7버전대 환경에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리할 때 문제가 발생한다면, 단순히 DB 설정만 볼 것이 아니라 커널 메모리 정책, 디스크 I/O, 파일 시스템, 커넥션 수, 체크포인트, WAL 처리량을 함께 확인해야 한다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            핵심 원인은 대용량 쿼리 자체보다 메모리 사용량 증가, 임시 파일 생성, 디스크 쓰기 병목, 체크포인트 집중, 커넥션 과다, 커널 캐시 압박이 동시에 겹치는 경우가 많다.&lt;br&gt;
            운영 환경에서는 PostgreSQL 설정값과 OS 커널 파라미터를 분리해서 보지 말고 하나의 처리 흐름으로 점검해야 한다.
          &lt;/div&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;구분&lt;/th&gt;
                &lt;th&gt;주요 문제&lt;/th&gt;
                &lt;th&gt;확인 방향&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;메모리&lt;/td&gt;
                &lt;td&gt;대용량 정렬, 해시 조인, 캐시 부족, Swap 발생&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;shared_buffers&lt;/code&gt;, &lt;code&gt;work_mem&lt;/code&gt;, &lt;code&gt;maintenance_work_mem&lt;/code&gt;, Huge Pages 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;I/O&lt;/td&gt;
                &lt;td&gt;디스크 대기 증가, WAL 쓰기 지연, 임시 파일 폭증&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;iostat&lt;/code&gt;, &lt;code&gt;vmstat&lt;/code&gt;, 체크포인트 로그, WAL 디렉터리 사용량 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;커널&lt;/td&gt;
                &lt;td&gt;페이지 캐시 압박, THP 영향, 파일 디스크립터 부족&lt;/td&gt;
                &lt;td&gt;Transparent Huge Pages, vm 파라미터, ulimit, sysctl 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;DB 설정&lt;/td&gt;
                &lt;td&gt;체크포인트 과다, autovacuum 지연, 통계 불일치&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;checkpoint_timeout&lt;/code&gt;, &lt;code&gt;max_wal_size&lt;/code&gt;, &lt;code&gt;autovacuum&lt;/code&gt;, 통계 갱신 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;쿼리&lt;/td&gt;
                &lt;td&gt;Full Scan, 잘못된 실행계획, 인덱스 미사용&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt;, 인덱스, 파티셔닝, 통계 정보 확인&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;상세 내용&lt;/h2&gt;

          &lt;p&gt;
            PostgreSQL 기반 DBMS는 대용량 데이터를 처리할 때 메모리와 디스크를 함께 사용한다.
            작은 데이터에서는 문제가 없던 쿼리도 데이터가 수천만 건 이상으로 커지면 정렬, 조인, 집계, 인덱스 스캔 과정에서 임시 파일을 만들거나 디스크 I/O를 크게 증가시킬 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            PostgreSQL 공식 문서에서도 Linux 환경에서 Huge Pages를 사용하면 큰 &lt;code&gt;shared_buffers&lt;/code&gt;를 사용하는 경우 메모리 관리 오버헤드를 줄일 수 있다고 설명한다. 반면 Transparent Huge Pages는 일부 Linux 환경에서 PostgreSQL 성능 저하를 유발할 수 있어 주의가 필요하다고 안내한다. :contentReference[oaicite:0]{index=0}
          &lt;/p&gt;

          &lt;p&gt;
            SUSE 문서에서도 시스템은 기본적으로 THP를 사용할 수 있으며, 명시적인 Huge Pages는 부팅 시점에 설정할 수 있다고 설명한다. 따라서 SUSE OS에서 PostgreSQL 대용량 처리를 안정화하려면 DB 파라미터뿐 아니라 커널의 Huge Pages, THP, 메모리 회수 정책까지 함께 확인하는 것이 좋다. :contentReference[oaicite:1]{index=1}
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;주요 원인&lt;/h2&gt;

          &lt;h3&gt;1. 메모리 설정 부족 또는 과다&lt;/h3&gt;

          &lt;p&gt;
            PostgreSQL에서 &lt;code&gt;shared_buffers&lt;/code&gt;는 데이터 페이지 캐시에 사용되는 핵심 메모리 영역이다.
            값이 너무 작으면 디스크 접근이 늘고, 너무 크면 OS 페이지 캐시와 충돌하거나 메모리 압박이 커질 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            &lt;code&gt;work_mem&lt;/code&gt;은 정렬, 해시 조인, 집계 작업에 사용된다.
            주의할 점은 이 값이 전체 서버 기준이 아니라 작업 단위로 사용된다는 것이다.
            커넥션이 많고 복잡한 쿼리가 동시에 실행되면 &lt;code&gt;work_mem&lt;/code&gt;이 예상보다 훨씬 많이 사용될 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;SHOW shared_buffers;
SHOW work_mem;
SHOW maintenance_work_mem;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;2. Transparent Huge Pages 영향&lt;/h3&gt;

          &lt;p&gt;
            THP는 커널이 메모리 페이지를 자동으로 큰 페이지로 묶어 관리하는 기능이다.
            일반 애플리케이션에서는 도움이 될 수 있지만, PostgreSQL 같은 DBMS에서는 지연 시간 변동이나 성능 저하 원인이 될 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            PostgreSQL 전용 서버라면 THP를 끄고 명시적 Huge Pages를 사용하는 구성을 검토할 수 있다.
            다만 운영 중인 서버에서는 즉시 변경보다 테스트 서버에서 부하 패턴을 재현한 뒤 적용하는 것이 안전하다.
          &lt;/p&gt;

          &lt;h3&gt;3. 디스크 I/O 병목&lt;/h3&gt;

          &lt;p&gt;
            대용량 조회, 적재, 배치, 인덱스 생성 작업은 디스크 I/O를 크게 증가시킨다.
            특히 WAL 쓰기와 데이터 파일 쓰기가 같은 디스크에 집중되면 DB 전체 응답 시간이 늘어날 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;iostat -x 1
vmstat 1
pidstat -d 1&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            &lt;code&gt;await&lt;/code&gt;, &lt;code&gt;util&lt;/code&gt;, &lt;code&gt;r/s&lt;/code&gt;, &lt;code&gt;w/s&lt;/code&gt; 값이 높게 유지된다면 디스크 대기 병목을 의심할 수 있다.
            SSD, NVMe, SAN 환경에 따라 해석은 달라지지만, DBMS 대용량 처리에서는 I/O 대기 시간이 가장 직접적인 장애 원인이 되는 경우가 많다.
          &lt;/p&gt;

          &lt;h3&gt;4. 체크포인트와 WAL 쓰기 집중&lt;/h3&gt;

          &lt;p&gt;
            PostgreSQL은 변경 내용을 WAL에 기록하고, 일정 시점마다 체크포인트를 수행한다.
            대량 INSERT, UPDATE, DELETE, 배치 작업 중 체크포인트가 자주 발생하면 순간적으로 디스크 쓰기가 몰릴 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;SHOW checkpoint_timeout;
SHOW max_wal_size;
SHOW min_wal_size;
SHOW checkpoint_completion_target;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            체크포인트가 너무 자주 발생한다면 &lt;code&gt;max_wal_size&lt;/code&gt;를 늘리고 &lt;code&gt;checkpoint_completion_target&lt;/code&gt;을 조정해 쓰기 부하를 분산하는 방향을 검토한다.
          &lt;/p&gt;

          &lt;h3&gt;5. 커넥션 과다&lt;/h3&gt;

          &lt;p&gt;
            PostgreSQL은 커넥션마다 일정한 메모리와 프로세스 리소스를 사용한다.
            WAS나 배치 서버에서 커넥션 풀을 과도하게 열면, 실제 쿼리보다 커넥션 유지 비용과 메모리 사용량이 더 큰 문제가 될 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;SHOW max_connections;

SELECT state, count(*)
FROM pg_stat_activity
GROUP BY state
ORDER BY count(*) DESC;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            커넥션 수가 많다면 PostgreSQL 설정을 무작정 늘리기보다 애플리케이션 커넥션 풀 크기, idle 커넥션, long running transaction을 먼저 확인해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;6. 통계 정보 불일치와 실행계획 문제&lt;/h3&gt;

          &lt;p&gt;
            데이터가 급격히 증가했는데 통계 정보가 갱신되지 않으면 PostgreSQL 옵티마이저가 잘못된 실행계획을 선택할 수 있다.
            이 경우 인덱스가 있어도 Full Scan이 발생하거나, 조인 순서가 비효율적으로 잡힐 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;ANALYZE;

EXPLAIN (ANALYZE, BUFFERS)
SELECT ...
;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            대용량 테이블은 단순 인덱스 추가보다 파티셔닝, 복합 인덱스, 통계 타깃 조정, VACUUM 상태를 함께 봐야 한다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;점검 명령어&lt;/h2&gt;

          &lt;p&gt;
            SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제를 분석할 때는 DB 내부 상태와 OS 상태를 동시에 수집하는 것이 좋다.
          &lt;/p&gt;

          &lt;h3&gt;OS 메모리 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;free -h
vmstat 1
cat /proc/meminfo | egrep &quot;MemTotal|MemFree|MemAvailable|Huge|Swap&quot;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;Huge Pages와 THP 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;cat /proc/meminfo | grep -i huge
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;디스크 I/O 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;iostat -x 1
iotop
pidstat -d 1&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;PostgreSQL 세션 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT pid, usename, state, wait_event_type, wait_event, query_start, query
FROM pg_stat_activity
ORDER BY query_start;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;임시 파일 발생 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT datname, temp_files, pg_size_pretty(temp_bytes) AS temp_size
FROM pg_stat_database
ORDER BY temp_bytes DESC;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;테이블과 인덱스 크기 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;SELECT relname,
       pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;개선 방향&lt;/h2&gt;

          &lt;h3&gt;1. 메모리 파라미터 조정&lt;/h3&gt;

          &lt;p&gt;
            &lt;code&gt;shared_buffers&lt;/code&gt;는 서버 메모리와 OS 캐시 사용량을 함께 고려해 조정한다.
            &lt;code&gt;work_mem&lt;/code&gt;은 단일 쿼리만 보고 크게 잡으면 동시 실행 시 전체 메모리 사용량이 폭증할 수 있으므로, 커넥션 수와 쿼리 복잡도를 함께 계산해야 한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;shared_buffers = 8GB
work_mem = 64MB
maintenance_work_mem = 2GB&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            위 값은 예시일 뿐이며, 실제 서버 메모리, 동시 접속 수, 쿼리 유형에 따라 달라진다.
          &lt;/p&gt;

          &lt;h3&gt;2. 명시적 Huge Pages 검토&lt;/h3&gt;

          &lt;p&gt;
            대용량 메모리를 사용하는 PostgreSQL 서버에서는 명시적 Huge Pages 사용을 검토할 수 있다.
            PostgreSQL에서는 &lt;code&gt;shared_memory_size_in_huge_pages&lt;/code&gt; 값을 통해 필요한 Huge Pages 수를 확인할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;SHOW shared_memory_size_in_huge_pages;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            이후 OS에서 필요한 Huge Pages를 확보하고 PostgreSQL 설정에서 &lt;code&gt;huge_pages&lt;/code&gt;를 지정한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;huge_pages = on&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;notice-box&quot;&gt;
            &lt;code&gt;huge_pages = on&lt;/code&gt;은 Huge Pages가 부족하면 PostgreSQL이 시작되지 않을 수 있다.&lt;br&gt;
            운영 서버에 바로 적용하기보다 테스트 환경에서 필요한 페이지 수와 재기동 절차를 먼저 검증해야 한다.
          &lt;/div&gt;

          &lt;h3&gt;3. THP 비활성화 검토&lt;/h3&gt;

          &lt;p&gt;
            PostgreSQL 대용량 처리에서 지연 시간이 불규칙하게 튄다면 THP 상태를 확인한다.
            일시적으로 테스트할 때는 아래와 같이 확인 및 변경할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;cat /sys/kernel/mm/transparent_hugepage/enabled
echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/defrag&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            영구 적용 방식은 SUSE OS 버전, 부팅 방식, 운영 정책에 따라 달라질 수 있으므로 서버 표준 구성에 맞춰 반영해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;4. 체크포인트 부하 완화&lt;/h3&gt;

          &lt;p&gt;
            대량 적재나 배치 작업 중 디스크 쓰기가 순간적으로 몰린다면 체크포인트 설정을 점검한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;checkpoint_timeout = 15min
max_wal_size = 16GB
min_wal_size = 4GB
checkpoint_completion_target = 0.9&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            WAL 크기를 늘리면 체크포인트 빈도를 줄일 수 있지만, 장애 복구 시 필요한 시간이나 디스크 사용량도 함께 증가할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;5. 쿼리와 테이블 구조 개선&lt;/h3&gt;

          &lt;p&gt;
            DBMS 대용량 처리 문제는 커널 튜닝만으로 해결되지 않는 경우가 많다.
            Full Scan이 반복되는 테이블, 조건절과 맞지 않는 인덱스, 과도한 정렬, 불필요한 DISTINCT, 큰 OFFSET 페이지네이션은 먼저 개선해야 한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;EXPLAIN (ANALYZE, BUFFERS)
SELECT ...
;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            대용량 테이블에서는 기간 기준 파티셔닝, 보관 주기 분리, 이력 테이블 아카이빙, 배치 단위 축소가 효과적일 수 있다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;운영 기준 권장 절차&lt;/h2&gt;

          &lt;p&gt;
            실무 기준으로 보면 PostgreSQL 기반 DBMS의 대용량 처리 문제는 한 번에 설정값을 크게 바꾸는 방식보다, 병목 지점을 확인하고 변경 전후 수치를 비교하는 방식이 안전하다.
          &lt;/p&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            1단계: 장애 시간대의 CPU, 메모리, Swap, I/O, PostgreSQL 세션 상태를 수집한다.&lt;br&gt;
            2단계: 느린 쿼리와 임시 파일 발생량을 확인한다.&lt;br&gt;
            3단계: &lt;code&gt;shared_buffers&lt;/code&gt;, &lt;code&gt;work_mem&lt;/code&gt;, 체크포인트, WAL 설정을 점검한다.&lt;br&gt;
            4단계: THP, Huge Pages, 파일 디스크립터, 커널 vm 파라미터를 확인한다.&lt;br&gt;
            5단계: 테스트 환경에서 변경값을 검증한 뒤 운영에 순차 반영한다.
          &lt;/div&gt;

          &lt;p&gt;
            특히 커널 7버전대 환경이라고 표현되는 서버에서는 OS 기본 정책이 이전 버전과 다르게 적용되어 있을 수 있다.
            따라서 기존 PostgreSQL 튜닝 문서를 그대로 적용하기보다 현재 서버의 커널 설정, 메모리 정책, 파일 시스템, DB 버전을 함께 확인해야 한다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;결론&lt;/h2&gt;

          &lt;p&gt;
            SUSE OS에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리하다가 느려지는 문제는 대부분 DB 설정, 커널 메모리 정책, 디스크 I/O, 쿼리 실행계획이 복합적으로 얽혀 발생한다.
            따라서 &lt;code&gt;shared_buffers&lt;/code&gt;나 &lt;code&gt;work_mem&lt;/code&gt;만 조정하는 방식으로는 근본 원인을 놓칠 수 있다.
          &lt;/p&gt;

          &lt;p&gt;
            우선 OS 자원 사용량과 PostgreSQL 내부 지표를 함께 확인하고, THP와 Huge Pages, 체크포인트, WAL, 임시 파일, 커넥션 수, 실행계획을 순서대로 점검하는 것이 좋다.
            대용량 DBMS 운영에서는 성능 튜닝보다 먼저 재현 가능한 지표 수집과 변경 전후 비교 기준을 마련하는 것이 안정적인 해결 방법이다.
          &lt;/p&gt;
        &lt;/section&gt;
      &lt;/article&gt;
    &lt;/main&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;BlogPosting&quot;,
          &quot;@id&quot;: &quot;https://example.com/suse-postgresql-large-dbms-processing&quot;,
          &quot;headline&quot;: &quot;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&quot;,
          &quot;description&quot;: &quot;SUSE OS 커널 7버전대 환경에서 PostgreSQL 기반 DBMS가 대용량 데이터를 처리할 때 발생할 수 있는 성능 저하, 메모리, I/O, 커넥션, 커널 파라미터 문제를 정리한 글입니다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/suse-postgresql-large-dbms-processing&quot;
          },
          &quot;about&quot;: [
            &quot;SUSE OS&quot;,
            &quot;PostgreSQL&quot;,
            &quot;DBMS 대용량 처리&quot;,
            &quot;커널 튜닝&quot;,
            &quot;Huge Pages&quot;,
            &quot;Transparent Huge Pages&quot;,
            &quot;I/O 성능&quot;
          ],
          &quot;articleSection&quot;: [
            &quot;정리된 내용&quot;,
            &quot;상세 내용&quot;,
            &quot;주요 원인&quot;,
            &quot;점검 명령어&quot;,
            &quot;개선 방향&quot;,
            &quot;운영 기준 권장 절차&quot;,
            &quot;결론&quot;
          ]
        },
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;@id&quot;: &quot;https://example.com/suse-postgresql-large-dbms-processing#breadcrumb&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;홈&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;Linux&quot;,
              &quot;item&quot;: &quot;https://example.com/linux&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 3,
              &quot;name&quot;: &quot;SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리&quot;
            }
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/Server</category>
      <category>checkpoint 튜닝</category>
      <category>DBMS 대용량 처리</category>
      <category>Huge Pages</category>
      <category>I/O 성능</category>
      <category>PostgreSQL</category>
      <category>shared_buffers</category>
      <category>SUSE OS</category>
      <category>THP</category>
      <category>work_mem</category>
      <category>커널 튜닝</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/567</guid>
      <comments>https://togethergrow.tistory.com/entry/SUSE-OS%EC%97%90%EC%84%9C-PostgreSQL-%EA%B8%B0%EB%B0%98-DBMS-%EB%8C%80%EC%9A%A9%EB%9F%89-%EC%B2%98%EB%A6%AC-%EB%AC%B8%EC%A0%9C-%EC%A0%95%EB%A6%AC#entry567comment</comments>
      <pubDate>Wed, 24 Jun 2026 21:13:19 +0900</pubDate>
    </item>
    <item>
      <title>SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리</title>
      <link>https://togethergrow.tistory.com/entry/SUSE-Enterprise-16-SSH-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD%EA%B3%BC-PuTTY-%EC%9D%B8%EC%A6%9D-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%A0%95%EB%A6%AC</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;SUSE Enterprise 16에서 SSH 포트를 변경할 때 필요한 설정 파일, 방화벽, SELinux, PuTTY 인증 메시지 확인 방법을 운영 서버 기준으로 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;SUSE Enterprise 16, SSH 포트변경, sshd_config, firewalld, SELinux, semanage, PuTTY 인증, keyboard-interactive, PermitRootLogin, SLES 16&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;SUSE Enterprise 16에서 SSH 포트를 변경할 때 필요한 설정 파일, 방화벽, SELinux, PuTTY 인증 메시지 확인 방법을 운영 서버 기준으로 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/images/suse-ssh-port-placeholder.jpg&quot;&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;SUSE Enterprise 16에서 SSH 포트를 변경할 때 필요한 설정 파일, 방화벽, SELinux, PuTTY 인증 메시지 확인 방법을 운영 서버 기준으로 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/images/suse-ssh-port-placeholder.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .article-wrap {
      line-height: 1.7;
      word-break: keep-all;
    }

    .article-wrap main {
      max-width: 860px;
      margin: 0 auto;
    }

    .article-wrap h1 {
      margin: 0 0 24px;
      font-size: 1.9em;
      line-height: 1.35;
    }

    .article-wrap h2 {
      margin: 38px 0 16px;
      font-size: 1.45em;
      line-height: 1.4;
    }

    .article-wrap h3 {
      margin: 28px 0 12px;
      font-size: 1.15em;
      line-height: 1.4;
    }

    .article-wrap p {
      margin: 0 0 16px;
    }

    .article-wrap .summary-box,
    .article-wrap .warning-box,
    .article-wrap .check-box {
      margin: 18px 0;
      padding: 16px 18px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }

    .article-wrap .warning-box {
      border-color: #e0b4b4;
    }

    .article-wrap .check-box {
      border-color: #b8d8c2;
    }

    .article-wrap pre {
      overflow-x: auto;
      padding: 14px 16px;
      border: 1px solid #ddd;
      border-radius: 8px;
      line-height: 1.6;
    }

    .article-wrap code {
      font-family: Consolas, Monaco, monospace;
    }

    .article-wrap table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0;
    }

    .article-wrap th,
    .article-wrap td {
      border: 1px solid #ddd;
      padding: 10px 12px;
      vertical-align: top;
      text-align: left;
    }

    .article-wrap th {
      font-weight: 700;
    }
  &lt;/style&gt;

  &lt;div class=&quot;article-wrap&quot;&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h1&gt;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&lt;/h1&gt;

        &lt;section&gt;
          &lt;h2&gt;개요&lt;/h2&gt;

          &lt;p&gt;
            SUSE Enterprise 16에서 SSH 포트 변경은 OpenSSH 서버 설정, 방화벽, SELinux 정책을 함께 확인해야 한다.
            단순히 &lt;code&gt;Port 2222&lt;/code&gt;만 추가해도 되는 경우가 있지만, 운영 환경에서는 포트가 실제로 적용됐는지, 방화벽에서 허용됐는지, SELinux가 해당 포트를 허용하는지까지 함께 점검해야 안전하다.
          &lt;/p&gt;

          &lt;div class=&quot;summary-box&quot;&gt;
            핵심 흐름은 기존 SSH 세션 유지 → 새 포트 추가 → 설정 검사 → 방화벽 허용 → 서비스 재시작 → 새 창에서 접속 테스트 → 기존 22번 제거 순서다.&lt;br&gt;
            특히 원격 서버에서는 SSH가 끊기면 콘솔 접속이 필요할 수 있으므로, 22번 포트를 바로 제거하지 않는 것이 안전하다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;환경&lt;/h2&gt;

          &lt;p&gt;
            이 정리는 SUSE Enterprise 16 또는 SLES 16 계열에서 SSH 접속 포트를 22번에서 2222번 같은 다른 포트로 변경하는 상황을 기준으로 한다.
            SLES 16은 관리 도구와 기본 파일 배치 방식이 이전 버전과 다를 수 있지만, SSH 서버 동작 자체는 여전히 OpenSSH 설정을 통해 제어한다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;항목&lt;/th&gt;
                &lt;th&gt;확인 대상&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;운영체제&lt;/td&gt;
                &lt;td&gt;SUSE Enterprise 16 / SLES 16&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;SSH 서비스&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;sshd&lt;/code&gt;&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;주요 설정&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;, &lt;code&gt;/etc/ssh/sshd_config.d/*.conf&lt;/code&gt;&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;방화벽&lt;/td&gt;
                &lt;td&gt;&lt;code&gt;firewalld&lt;/code&gt; 사용 여부 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;보안 정책&lt;/td&gt;
                &lt;td&gt;SELinux 사용 시 SSH 포트 타입 등록 필요 가능&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;증상&lt;/h2&gt;

          &lt;p&gt;
            SSH 포트 변경 과정에서 가장 흔한 증상은 새 포트로 접속이 되지 않거나, PuTTY에서 &lt;code&gt;Using keyboard-interactive authentication&lt;/code&gt; 메시지가 나온 뒤 인증이 실패하는 경우다.
            다만 이 문구 자체는 에러가 아니라 서버가 키보드 대화형 인증 방식을 사용하고 있다는 안내 메시지다.
          &lt;/p&gt;

          &lt;h3&gt;PuTTY에서 보이는 일반적인 메시지&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;Using username &quot;root&quot;.
Using keyboard-interactive authentication.&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            이 다음에 비밀번호 입력창이 나오고 접속되면 정상이다.
            반대로 &lt;code&gt;Access denied&lt;/code&gt;, &lt;code&gt;Server refused our key&lt;/code&gt;, &lt;code&gt;Server unexpectedly closed network connection&lt;/code&gt; 같은 문구가 이어지면 인증 설정이나 계정, PAM, SSHD 설정을 확인해야 한다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;1차 점검&lt;/h2&gt;

          &lt;p&gt;
            먼저 현재 SSH가 어떤 포트로 동작 중인지 확인한다.
            &lt;code&gt;sshd -T&lt;/code&gt;는 SSHD가 최종적으로 읽은 설정값을 보여주므로, 실제 적용 상태를 확인할 때 유용하다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;ss -tlnp | grep sshd&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;sshd -T | grep -i port&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            결과가 &lt;code&gt;port 22&lt;/code&gt;로만 나온다면 현재 SSH는 22번 포트로 동작 중이다.
            그런데 설정 파일 어디에도 &lt;code&gt;Port&lt;/code&gt; 항목이 없다면, 이는 설정 파일에서 지정한 값이 아니라 OpenSSH 기본값인 22번을 사용하고 있는 상태로 보면 된다.
          &lt;/p&gt;

          &lt;h3&gt;Port 설정 위치 찾기&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;grep -Rin &quot;^Port&quot; /etc/ssh&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;grep -Rin &quot;Port&quot; /etc/ssh&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;find /etc/ssh -type f -exec grep -Hn &quot;^Port&quot; {} \;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            예를 들어 아래처럼 나오면 해당 파일에서 SSH 포트가 지정된 것이다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;/etc/ssh/sshd_config:17:Port 22&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;/etc/ssh/sshd_config.d/50-server.conf:3:Port 22&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            Include 설정도 함께 확인한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;grep -R &quot;Include&quot; /etc/ssh&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            SUSE 환경에서는 &lt;code&gt;Include /etc/ssh/sshd_config.d/*.conf&lt;/code&gt; 형태로 분리 설정을 읽는 경우가 있다.
            따라서 포트를 별도 파일로 관리하려면 &lt;code&gt;/etc/ssh/sshd_config.d/99-custom.conf&lt;/code&gt; 같은 파일에 운영자 설정을 넣는 방식이 관리하기 쉽다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;심화 분석&lt;/h2&gt;

          &lt;p&gt;
            SUSE Enterprise 16에서 SSH 포트 변경이 실패하는 원인은 보통 세 가지로 나뉜다.
            첫째는 SSHD 설정 오류, 둘째는 방화벽 미허용, 셋째는 SELinux 포트 정책 문제다.
            실제 사용 시 이 세 가지 중 하나만 빠져도 새 포트 접속이 실패할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;1. SSHD 설정 오류&lt;/h3&gt;

          &lt;p&gt;
            설정 파일 문법이 잘못되면 SSHD가 재시작되지 않거나 접속이 끊길 수 있다.
            적용 전에는 반드시 아래 명령으로 문법을 확인한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;sshd -t&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            아무 메시지가 없으면 문법상 정상이다.
            메시지가 나온다면 해당 라인을 수정한 뒤 다시 검사해야 한다.
          &lt;/p&gt;

          &lt;h3&gt;2. 방화벽 미허용&lt;/h3&gt;

          &lt;p&gt;
            SSHD가 2222번 포트로 정상 대기 중이어도 방화벽에서 막혀 있으면 외부 접속은 실패한다.
            firewalld를 사용 중이라면 포트를 명시적으로 열어야 한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;3. SELinux 포트 정책 문제&lt;/h3&gt;

          &lt;p&gt;
            SELinux가 활성화된 환경에서는 SSHD가 기본적으로 허용된 포트 외의 포트에 바인딩하지 못할 수 있다.
            이 경우 새 SSH 포트를 &lt;code&gt;ssh_port_t&lt;/code&gt; 타입으로 등록한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;semanage port -a -t ssh_port_t -p tcp 2222&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            이미 등록된 포트를 수정해야 하는 경우에는 아래처럼 변경 명령을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;semanage port -m -t ssh_port_t -p tcp 2222&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            &lt;code&gt;semanage&lt;/code&gt; 명령이 없다면 관련 패키지를 설치한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;zypper install policycoreutils-python-utils&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;복구&lt;/h2&gt;

          &lt;p&gt;
            운영 서버에서 가장 안전한 방식은 기존 22번을 유지한 상태로 2222번을 추가하고, 새 포트 접속이 확인된 뒤 22번을 제거하는 순서다.
            관리자 입장에서 SSH 포트 변경은 보안 설정이면서 동시에 원격 접속 생존성과 직결되므로, 한 번에 기존 포트를 닫지 않는 것이 좋다.
          &lt;/p&gt;

          &lt;h3&gt;1. 기존 설정 백업&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            만약 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; 파일을 직접 수정하지 않고 별도 파일로 관리한다면, 아래처럼 사용자 정의 설정 파일을 만든다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;vi /etc/ssh/sshd_config.d/99-custom.conf&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;2. 안전한 포트 추가 설정&lt;/h3&gt;

          &lt;p&gt;
            처음에는 22번과 2222번을 동시에 열어둔다.
            이렇게 하면 새 포트 접속 테스트에 실패해도 기존 SSH 세션이나 22번 포트로 복구할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;Port 22
Port 2222
PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes
PermitRootLogin yes&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;warning-box&quot;&gt;
            &lt;code&gt;PermitRootLogin yes&lt;/code&gt;는 root 비밀번호 로그인을 허용할 수 있으므로 보안 정책에 따라 신중히 사용해야 한다.&lt;br&gt;
            가능하면 일반 사용자로 로그인한 뒤 &lt;code&gt;sudo&lt;/code&gt;를 사용하는 방식이 더 안전하다.&lt;br&gt;
            root 로그인이 꼭 필요하다면 접속 허용 IP 제한, 키 인증, 방화벽 정책을 함께 적용하는 것이 좋다.
          &lt;/div&gt;

          &lt;h3&gt;3. 설정 검사&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;sshd -t&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            오류가 없다면 SSHD를 재시작하거나 reload한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;systemctl restart sshd&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;systemctl reload sshd&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;4. 방화벽 허용&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;5. 새 포트 접속 테스트&lt;/h3&gt;

          &lt;p&gt;
            현재 SSH 세션은 끊지 말고 새 터미널이나 PuTTY 새 창에서 접속을 테스트한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;ssh -p 2222 user@서버IP&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            PuTTY나 Xshell에서는 접속 대상 포트를 &lt;code&gt;2222&lt;/code&gt;로 지정한 뒤 접속한다.
            접속이 정상적으로 되면 새 포트 설정은 성공한 것이다.
          &lt;/p&gt;

          &lt;h3&gt;6. 최종 적용 상태 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;sshd -T | egrep 'port|passwordauthentication|kbdinteractiveauthentication|usepam|permitrootlogin'&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            여기에서 &lt;code&gt;port 22&lt;/code&gt;와 &lt;code&gt;port 2222&lt;/code&gt;가 함께 보이면 두 포트가 모두 적용된 상태다.
            새 포트 접속까지 확인한 뒤 기존 22번을 제거할 수 있다.
          &lt;/p&gt;

          &lt;h3&gt;7. 기존 22번 제거&lt;/h3&gt;

          &lt;p&gt;
            새 포트 접속이 확실히 되는 것을 확인한 후 설정 파일에서 &lt;code&gt;Port 22&lt;/code&gt;를 제거한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;Port 2222
PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes
PermitRootLogin yes&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            firewalld에서 기존 SSH 서비스를 제거하려면 아래 명령을 사용한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            22번 제거 후에는 반드시 새 창에서 다시 접속 테스트를 진행한다.&lt;br&gt;
            기존 세션을 먼저 끊으면 문제가 생겼을 때 원격 복구가 어려울 수 있다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;PuTTY keyboard-interactive 메시지 확인&lt;/h2&gt;

          &lt;p&gt;
            &lt;code&gt;Using keyboard-interactive authentication&lt;/code&gt; 자체는 에러가 아니다.
            문제는 그 다음에 어떤 메시지가 이어지는지에 따라 판단해야 한다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;메시지&lt;/th&gt;
                &lt;th&gt;의미&lt;/th&gt;
                &lt;th&gt;확인 항목&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;&lt;code&gt;Access granted&lt;/code&gt;&lt;/td&gt;
                &lt;td&gt;정상 로그인&lt;/td&gt;
                &lt;td&gt;추가 조치 불필요&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;&lt;code&gt;Access denied&lt;/code&gt;&lt;/td&gt;
                &lt;td&gt;비밀번호 또는 인증 정책 문제&lt;/td&gt;
                &lt;td&gt;비밀번호, 계정 잠김, PasswordAuthentication, PAM 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;&lt;code&gt;Server refused our key&lt;/code&gt;&lt;/td&gt;
                &lt;td&gt;키 인증 실패&lt;/td&gt;
                &lt;td&gt;authorized_keys, 권한, PubkeyAuthentication 확인&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;&lt;code&gt;Server unexpectedly closed network connection&lt;/code&gt;&lt;/td&gt;
                &lt;td&gt;서버 측에서 연결 종료&lt;/td&gt;
                &lt;td&gt;sshd 설정 오류, PAM 오류, Shell 문제, AllowUsers/DenyUsers 확인&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;

          &lt;h3&gt;인증 관련 설정 확인&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;grep -E &quot;PasswordAuthentication|KbdInteractiveAuthentication|UsePAM&quot; /etc/ssh/sshd_config*&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            비밀번호 기반 로그인을 허용하려면 일반적으로 아래 설정을 확인한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;root만 접속이 안 되는 경우&lt;/h3&gt;

          &lt;p&gt;
            root 계정만 접속되지 않는다면 &lt;code&gt;PermitRootLogin&lt;/code&gt; 설정을 확인한다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;grep PermitRootLogin /etc/ssh/sshd_config*&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            정책상 허용해야 한다면 아래처럼 설정할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;PermitRootLogin yes&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            또는 키 인증만 허용하려면 다음 값을 사용할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;PermitRootLogin prohibit-password&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;실시간 로그 확인&lt;/h3&gt;

          &lt;p&gt;
            접속 실패 원인은 서버 로그를 보면서 접속을 다시 시도하면 가장 빠르게 확인할 수 있다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;journalctl -u sshd -f&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;tail -f /var/log/messages&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;재발 방지&lt;/h2&gt;

          &lt;p&gt;
            SSH 포트 변경은 설정 파일 하나만 보는 작업이 아니다.
            재발을 막으려면 설정 파일, SSHD 최종 적용값, 방화벽, SELinux, 인증 정책을 한 번에 점검하는 절차를 정해두는 것이 좋다.
          &lt;/p&gt;

          &lt;div class=&quot;check-box&quot;&gt;
            변경 전에는 기존 SSH 세션을 유지한다.&lt;br&gt;
            새 포트를 먼저 추가하고 접속 확인 후 기존 포트를 제거한다.&lt;br&gt;
            &lt;code&gt;sshd -t&lt;/code&gt;로 문법 오류를 먼저 확인한다.&lt;br&gt;
            &lt;code&gt;sshd -T&lt;/code&gt;로 최종 적용값을 확인한다.&lt;br&gt;
            방화벽과 SELinux 정책을 함께 점검한다.
          &lt;/div&gt;

          &lt;h3&gt;최종 점검 명령어 모음&lt;/h3&gt;

          &lt;pre&gt;&lt;code&gt;sshd -t&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;sshd -T | grep -i port&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;ss -tlnp | grep sshd&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;firewall-cmd --list-all&lt;/code&gt;&lt;/pre&gt;

          &lt;pre&gt;&lt;code&gt;find /etc/ssh -type f -exec grep -Hn &quot;^Port&quot; {} \;&lt;/code&gt;&lt;/pre&gt;

          &lt;p&gt;
            만약 위 명령에서 &lt;code&gt;Port&lt;/code&gt; 설정 파일이 전혀 나오지 않는데 &lt;code&gt;sshd -T&lt;/code&gt; 결과가 &lt;code&gt;port 22&lt;/code&gt;라면, 이는 설정 파일에서 지정된 값이 아니라 OpenSSH의 기본 포트가 적용된 상태로 판단하면 된다.
          &lt;/p&gt;
        &lt;/section&gt;
      &lt;/article&gt;
    &lt;/main&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;TechArticle&quot;,
          &quot;@id&quot;: &quot;https://example.com/suse-enterprise-16-ssh-port-change&quot;,
          &quot;headline&quot;: &quot;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&quot;,
          &quot;description&quot;: &quot;SUSE Enterprise 16에서 SSH 포트를 변경할 때 필요한 설정 파일, 방화벽, SELinux, PuTTY 인증 메시지 확인 방법을 운영 서버 기준으로 정리한 문서입니다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/suse-enterprise-16-ssh-port-change&quot;
          },
          &quot;about&quot;: [
            &quot;SUSE Enterprise 16&quot;,
            &quot;SSH 포트 변경&quot;,
            &quot;sshd_config&quot;,
            &quot;firewalld&quot;,
            &quot;SELinux&quot;,
            &quot;PuTTY authentication&quot;
          ],
          &quot;articleSection&quot;: [
            &quot;개요&quot;,
            &quot;환경&quot;,
            &quot;증상&quot;,
            &quot;1차 점검&quot;,
            &quot;심화 분석&quot;,
            &quot;복구&quot;,
            &quot;재발 방지&quot;
          ]
        },
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;@id&quot;: &quot;https://example.com/suse-enterprise-16-ssh-port-change#breadcrumb&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;홈&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;Linux&quot;,
              &quot;item&quot;: &quot;https://example.com/linux&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 3,
              &quot;name&quot;: &quot;SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리&quot;
            }
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/Server</category>
      <category>firewalld</category>
      <category>keyboard-interactive</category>
      <category>PermitRootLogin</category>
      <category>PuTTY 인증</category>
      <category>SeLinux</category>
      <category>semanage</category>
      <category>SLES 16</category>
      <category>SSH 포트변경</category>
      <category>sshd_config</category>
      <category>SUSE Enterprise 16</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/566</guid>
      <comments>https://togethergrow.tistory.com/entry/SUSE-Enterprise-16-SSH-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD%EA%B3%BC-PuTTY-%EC%9D%B8%EC%A6%9D-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%A0%95%EB%A6%AC#entry566comment</comments>
      <pubDate>Wed, 24 Jun 2026 21:10:58 +0900</pubDate>
    </item>
    <item>
      <title>SQL과 NoSQL의 차이와 함께 사용하는 이유</title>
      <link>https://togethergrow.tistory.com/entry/SQL%EA%B3%BC-NoSQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%99%80-%ED%95%A8%EA%BB%98-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;SQL과 NoSQL의 차이와 함께 사용하는 이유&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;SQL과 NoSQL의 핵심 차이, 각각 적합한 사용 사례, 폴리글랏 퍼시스턴스 관점에서 함께 사용하는 이유를 실무 중심으로 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;SQL,NoSQL,관계형데이터베이스,비관계형데이터베이스,정형데이터,비정형데이터,ACID,스키마,수평확장,폴리글랏퍼시스턴스&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;SQL과 NoSQL의 차이와 함께 사용하는 이유&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;관계형 데이터베이스와 비관계형 데이터베이스의 차이, 장단점, 최신 아키텍처에서 함께 사용하는 방식을 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-sql-nosql-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/sql-nosql-polyglot-persistence&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;SQL과 NoSQL의 차이와 함께 사용하는 이유&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;SQL과 NoSQL을 언제 선택하고 어떻게 함께 사용하는지 실무 관점에서 설명합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-sql-nosql-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;SQL과 NoSQL의 차이와 함께 사용하는 이유&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          SQL은 정형 데이터와 데이터 무결성이 중요한 업무에 적합한 관계형 데이터베이스 방식입니다.&lt;br&gt;
          NoSQL은 유연한 데이터 구조와 빠른 확장성이 필요한 서비스에 적합한 비관계형 데이터베이스 방식입니다.&lt;br&gt;
          실무 기준으로 보면 최신 시스템은 SQL과 NoSQL 중 하나만 선택하기보다, 데이터 성격에 따라 함께 사용하는 폴리글랏 퍼시스턴스 구조로 발전하고 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL이란?&lt;/h2&gt;

        &lt;p&gt;
          SQL은 관계형 데이터베이스에서 데이터를 저장, 조회, 수정, 삭제하기 위해 사용하는 질의 언어입니다.
          일반적으로 SQL 데이터베이스라고 하면 MySQL, PostgreSQL, Oracle, SQL Server처럼 테이블 기반으로 데이터를 관리하는 관계형 데이터베이스를 의미합니다.
          SQL 방식은 데이터 구조가 명확하고, 데이터 간 관계를 안정적으로 관리해야 하는 업무에 적합합니다.
        &lt;/p&gt;

        &lt;p&gt;
          SQL 데이터베이스는 테이블, 컬럼, 행으로 데이터를 구성합니다.
          예를 들어 주문 시스템이라면 고객 테이블, 주문 테이블, 결제 테이블, 상품 테이블처럼 데이터를 나누고, 각 테이블을 키 값으로 연결합니다.
          이렇게 구조화된 방식은 데이터 중복을 줄이고, 데이터 무결성을 유지하는 데 강점이 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL의 핵심 특징&lt;/h2&gt;

        &lt;p&gt;
          SQL의 가장 큰 특징은 고정된 스키마와 강한 데이터 무결성입니다.
          데이터를 저장하기 전에 어떤 컬럼을 사용할지, 각 컬럼의 데이터 타입은 무엇인지, 어떤 제약 조건을 적용할지 먼저 정의합니다.
          이 구조 덕분에 잘못된 데이터가 들어가는 것을 줄이고, 업무 규칙을 데이터베이스 단계에서 통제할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;특징&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;실무 의미&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;고정된 스키마&lt;/td&gt;
              &lt;td&gt;테이블과 컬럼 구조를 미리 정의합니다.&lt;/td&gt;
              &lt;td&gt;데이터 형식과 업무 규칙을 일관되게 유지할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;복잡한 조인 지원&lt;/td&gt;
              &lt;td&gt;여러 테이블을 연결해 데이터를 조회할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;주문, 결제, 고객, 상품처럼 관계가 많은 데이터를 분석하기 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;ACID 보장&lt;/td&gt;
              &lt;td&gt;원자성, 일관성, 고립성, 지속성을 보장합니다.&lt;/td&gt;
              &lt;td&gt;금융 거래처럼 데이터 신뢰성이 중요한 업무에 적합합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;트랜잭션 처리&lt;/td&gt;
              &lt;td&gt;여러 작업을 하나의 작업 단위로 묶어 처리합니다.&lt;/td&gt;
              &lt;td&gt;중간에 오류가 발생하면 전체 작업을 되돌릴 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;정형 데이터 중심&lt;/td&gt;
              &lt;td&gt;구조가 명확한 데이터를 안정적으로 관리합니다.&lt;/td&gt;
              &lt;td&gt;ERP, 회계, 결제, 주문 관리에 적합합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL이 적합한 업무&lt;/h2&gt;

        &lt;p&gt;
          SQL은 데이터의 정확성과 일관성이 중요한 업무에 적합합니다.
          금융 거래, 결제, 주문, 재고, 회계, ERP처럼 데이터 하나의 오류가 큰 문제로 이어질 수 있는 영역에서는 관계형 데이터베이스가 여전히 강력한 선택지입니다.
          특히 여러 테이블 간의 관계가 복잡하고, 트랜잭션 처리가 중요한 경우 SQL의 장점이 분명합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;업무 영역&lt;/th&gt;
              &lt;th&gt;SQL이 적합한 이유&lt;/th&gt;
              &lt;th&gt;예시 데이터&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;금융&lt;/td&gt;
              &lt;td&gt;거래 정합성과 트랜잭션 보장이 중요합니다.&lt;/td&gt;
              &lt;td&gt;계좌, 거래 내역, 이체 기록&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;결제&lt;/td&gt;
              &lt;td&gt;결제 성공, 실패, 취소 상태가 정확해야 합니다.&lt;/td&gt;
              &lt;td&gt;결제 승인, 환불, 정산 정보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주문 관리&lt;/td&gt;
              &lt;td&gt;고객, 상품, 주문, 배송 정보의 관계가 중요합니다.&lt;/td&gt;
              &lt;td&gt;주문서, 주문 상세, 배송 상태&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;ERP&lt;/td&gt;
              &lt;td&gt;회계, 인사, 구매, 재고 데이터의 일관성이 필요합니다.&lt;/td&gt;
              &lt;td&gt;전표, 급여, 구매 요청, 재고 수량&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;관리 시스템&lt;/td&gt;
              &lt;td&gt;정확한 조회와 보고 기준이 필요합니다.&lt;/td&gt;
              &lt;td&gt;사용자, 권한, 승인 이력&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;NoSQL이란?&lt;/h2&gt;

        &lt;p&gt;
          NoSQL은 전통적인 관계형 데이터베이스 방식과 다른 구조로 데이터를 저장하고 처리하는 비관계형 데이터베이스를 의미합니다.
          NoSQL은 하나의 특정 제품이나 문법을 뜻하는 것이 아니라, 문서형, 키-값형, 컬럼형, 그래프형 등 다양한 데이터 저장 방식을 포함하는 개념입니다.
          대표적으로 MongoDB, Redis, Cassandra, DynamoDB, Elasticsearch 같은 제품군이 NoSQL 범주에 포함됩니다.
        &lt;/p&gt;

        &lt;p&gt;
          NoSQL은 고정된 테이블 구조보다 유연한 데이터 저장과 빠른 확장성을 중시합니다.
          예를 들어 사용자 프로필처럼 사용자마다 저장되는 속성이 다르거나, IoT 센서 데이터처럼 대량의 이벤트가 계속 들어오는 경우에는 NoSQL 방식이 더 적합할 수 있습니다.
          데이터 구조가 자주 바뀌거나 대량 트래픽을 수평 확장으로 처리해야 하는 서비스에서 많이 활용됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;NoSQL의 핵심 특징&lt;/h2&gt;

        &lt;p&gt;
          NoSQL의 핵심은 유연성과 확장성입니다.
          SQL처럼 테이블 구조를 엄격히 고정하기보다 JSON과 유사한 문서 구조, 키와 값 구조, 컬럼 패밀리 구조 등을 활용해 데이터를 저장합니다.
          덕분에 빠르게 변하는 서비스 요구사항에 대응하기 쉽고, 대규모 데이터 처리에 유리한 경우가 많습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;특징&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;실무 의미&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;스키마 프리&lt;/td&gt;
              &lt;td&gt;고정된 컬럼 구조 없이 유연하게 데이터를 저장할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;데이터 구조가 자주 바뀌는 서비스에 대응하기 쉽습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;수평 확장&lt;/td&gt;
              &lt;td&gt;서버를 추가해 처리량을 늘리는 구조에 적합합니다.&lt;/td&gt;
              &lt;td&gt;대규모 트래픽과 대량 데이터를 처리하기 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;비정형 데이터 처리&lt;/td&gt;
              &lt;td&gt;JSON, 로그, 이벤트, 문서형 데이터를 다루기 좋습니다.&lt;/td&gt;
              &lt;td&gt;사용자 행동 로그나 센서 데이터 저장에 적합합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;빠른 읽기와 쓰기&lt;/td&gt;
              &lt;td&gt;특정 패턴의 조회와 저장에 최적화할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;채팅, 세션, 캐시, 추천 데이터 처리에 유리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;다양한 모델&lt;/td&gt;
              &lt;td&gt;문서형, 키-값형, 컬럼형, 그래프형 등 여러 구조가 있습니다.&lt;/td&gt;
              &lt;td&gt;데이터 사용 목적에 맞는 저장 방식을 선택할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;NoSQL이 적합한 업무&lt;/h2&gt;

        &lt;p&gt;
          NoSQL은 데이터 구조가 유동적이고, 빠른 저장과 조회가 필요하며, 대규모 확장성이 중요한 서비스에 적합합니다.
          실시간 채팅, IoT 센서 데이터, 사용자 세션, 상품 카탈로그, 추천 시스템, 로그 분석처럼 데이터 형태가 다양하고 빠르게 증가하는 영역에서 많이 사용됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;업무 영역&lt;/th&gt;
              &lt;th&gt;NoSQL이 적합한 이유&lt;/th&gt;
              &lt;th&gt;예시 데이터&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;실시간 채팅&lt;/td&gt;
              &lt;td&gt;메시지가 빠르게 생성되고 대량 저장됩니다.&lt;/td&gt;
              &lt;td&gt;채팅 메시지, 읽음 상태, 대화방 정보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;IoT 센서&lt;/td&gt;
              &lt;td&gt;시간 단위로 대량 이벤트가 지속적으로 수집됩니다.&lt;/td&gt;
              &lt;td&gt;센서 값, 위치 정보, 장비 상태&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;사용자 프로필&lt;/td&gt;
              &lt;td&gt;사용자마다 속성이 다르고 변경이 잦습니다.&lt;/td&gt;
              &lt;td&gt;관심사, 설정값, 활동 정보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;상품 카탈로그&lt;/td&gt;
              &lt;td&gt;상품군마다 속성이 다를 수 있습니다.&lt;/td&gt;
              &lt;td&gt;상품 속성, 옵션, 리뷰 요약&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;추천 시스템&lt;/td&gt;
              &lt;td&gt;사용자 행동과 로그를 빠르게 저장하고 분석해야 합니다.&lt;/td&gt;
              &lt;td&gt;클릭 이력, 조회 이력, 추천 결과&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL과 NoSQL의 차이&lt;/h2&gt;

        &lt;p&gt;
          SQL과 NoSQL의 차이는 단순히 오래된 기술과 새로운 기술의 차이가 아닙니다.
          두 방식은 해결하려는 문제가 다릅니다.
          SQL은 데이터 정합성과 관계 처리에 강하고, NoSQL은 유연한 구조와 확장성에 강합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;SQL&lt;/th&gt;
              &lt;th&gt;NoSQL&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터 구조&lt;/td&gt;
              &lt;td&gt;테이블 기반의 정형 데이터&lt;/td&gt;
              &lt;td&gt;문서, 키-값, 컬럼, 그래프 등 다양한 구조&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;스키마&lt;/td&gt;
              &lt;td&gt;고정된 스키마 중심&lt;/td&gt;
              &lt;td&gt;유연한 스키마 또는 스키마 프리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;관계 처리&lt;/td&gt;
              &lt;td&gt;조인과 관계 모델에 강함&lt;/td&gt;
              &lt;td&gt;조인을 최소화하고 데이터 사용 패턴 중심으로 설계&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;트랜잭션&lt;/td&gt;
              &lt;td&gt;ACID 보장에 강점&lt;/td&gt;
              &lt;td&gt;제품과 설계에 따라 일관성 수준이 다를 수 있음&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확장 방식&lt;/td&gt;
              &lt;td&gt;수직 확장과 일부 수평 확장&lt;/td&gt;
              &lt;td&gt;수평 확장에 유리한 구조&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;적합한 업무&lt;/td&gt;
              &lt;td&gt;금융, 주문, 결제, ERP&lt;/td&gt;
              &lt;td&gt;로그, 세션, 채팅, IoT, 추천&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;ACID가 중요한 이유&lt;/h2&gt;

        &lt;p&gt;
          SQL 데이터베이스의 핵심 장점 중 하나는 ACID 트랜잭션입니다.
          ACID는 원자성, 일관성, 고립성, 지속성을 의미합니다.
          예를 들어 계좌 이체를 할 때 한 계좌에서는 돈이 빠져나갔는데 다른 계좌에는 입금되지 않는 상황이 발생하면 안 됩니다.
          이런 문제를 방지하기 위해 트랜잭션은 전체 작업이 모두 성공하거나 모두 실패하도록 관리됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;ACID 요소&lt;/th&gt;
              &lt;th&gt;의미&lt;/th&gt;
              &lt;th&gt;예시&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;원자성&lt;/td&gt;
              &lt;td&gt;작업은 모두 성공하거나 모두 실패해야 합니다.&lt;/td&gt;
              &lt;td&gt;이체 중 출금만 되고 입금이 안 되는 상황을 방지합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;일관성&lt;/td&gt;
              &lt;td&gt;트랜잭션 전후 데이터 규칙이 유지되어야 합니다.&lt;/td&gt;
              &lt;td&gt;재고 수량이 음수가 되지 않도록 관리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;고립성&lt;/td&gt;
              &lt;td&gt;동시에 실행되는 작업이 서로 잘못 영향을 주지 않아야 합니다.&lt;/td&gt;
              &lt;td&gt;동시 주문 시 같은 재고가 중복 판매되지 않도록 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;지속성&lt;/td&gt;
              &lt;td&gt;커밋된 데이터는 장애 후에도 유지되어야 합니다.&lt;/td&gt;
              &lt;td&gt;결제 완료 기록이 서버 재시작 후에도 남아 있어야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;NoSQL을 선택할 때 주의할 점&lt;/h2&gt;

        &lt;p&gt;
          NoSQL은 유연하고 확장성이 좋지만, 데이터 모델을 느슨하게 설계해도 된다는 뜻은 아닙니다.
          오히려 NoSQL은 조회 패턴과 저장 구조를 초기에 잘 설계해야 성능과 운영 안정성을 확보할 수 있습니다.
          관계형 데이터베이스처럼 조인으로 나중에 해결하는 방식이 어려운 경우도 있기 때문입니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          NoSQL을 선택할 때 가장 흔한 실수는 “스키마가 없으니 설계도 덜 해도 된다”고 생각하는 것입니다.&lt;br&gt;
          실제 사용 시 NoSQL은 어떤 키로 조회할지, 어떤 단위로 데이터를 묶을지, 중복 데이터를 어디까지 허용할지 먼저 결정해야 합니다.&lt;br&gt;
          특히 주문, 결제, 회계처럼 정합성이 중요한 데이터까지 무리하게 NoSQL에 넣으면 운영 리스크가 커질 수 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;최신 트렌드: 폴리글랏 퍼시스턴스&lt;/h2&gt;

        &lt;p&gt;
          최근 시스템에서는 NoSQL이 SQL을 완전히 대체하는 방식보다, SQL과 NoSQL을 함께 사용하는 방식이 일반적입니다.
          이를 폴리글랏 퍼시스턴스라고 부릅니다.
          하나의 시스템 안에서도 데이터 성격에 따라 가장 적합한 저장소를 선택하는 접근 방식입니다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 거래 내역, 결제 정보, 정산 데이터는 SQL 데이터베이스에 저장하고, 사용자 세션, 실시간 로그, 상품 리뷰, 추천 데이터는 NoSQL에 저장할 수 있습니다.
          이렇게 하면 중요한 정형 데이터는 SQL로 안정적으로 관리하고, 유연성과 확장성이 필요한 데이터는 NoSQL로 처리할 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          폴리글랏 퍼시스턴스의 핵심은 “하나의 DB로 모든 문제를 해결하지 않는다”는 점입니다.&lt;br&gt;
          데이터의 중요도, 구조, 조회 패턴, 확장 요구사항에 따라 SQL과 NoSQL을 나누어 사용합니다.&lt;br&gt;
          관리자 입장에서는 기술 유행보다 데이터 성격과 운영 책임을 기준으로 저장소를 선택해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL과 NoSQL을 함께 사용하는 예시&lt;/h2&gt;

        &lt;p&gt;
          전자상거래 서비스를 예로 들면 SQL과 NoSQL의 역할을 쉽게 이해할 수 있습니다.
          주문, 결제, 재고, 정산처럼 정합성이 중요한 데이터는 SQL에 저장하는 것이 적합합니다.
          반면 상품 조회 로그, 추천 데이터, 장바구니 임시 상태, 사용자 행동 이벤트는 NoSQL에 저장하는 것이 효율적일 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;데이터 종류&lt;/th&gt;
              &lt;th&gt;권장 저장소&lt;/th&gt;
              &lt;th&gt;이유&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;주문 정보&lt;/td&gt;
              &lt;td&gt;SQL&lt;/td&gt;
              &lt;td&gt;고객, 상품, 결제, 배송과의 관계와 정합성이 중요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;결제 정보&lt;/td&gt;
              &lt;td&gt;SQL&lt;/td&gt;
              &lt;td&gt;트랜잭션 보장과 감사 추적이 중요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;상품 카탈로그&lt;/td&gt;
              &lt;td&gt;SQL 또는 NoSQL&lt;/td&gt;
              &lt;td&gt;상품 속성이 고정적이면 SQL, 속성이 다양하면 NoSQL이 유리할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;사용자 세션&lt;/td&gt;
              &lt;td&gt;NoSQL&lt;/td&gt;
              &lt;td&gt;빠른 읽기와 쓰기, 만료 처리가 중요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;행동 로그&lt;/td&gt;
              &lt;td&gt;NoSQL&lt;/td&gt;
              &lt;td&gt;대량 이벤트를 빠르게 저장하고 분석해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;상품 리뷰&lt;/td&gt;
              &lt;td&gt;NoSQL 또는 SQL&lt;/td&gt;
              &lt;td&gt;조회 패턴과 검색 요구사항에 따라 선택할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL의 진화: JSON과 유연성 흡수&lt;/h2&gt;

        &lt;p&gt;
          최근에는 SQL 데이터베이스도 NoSQL의 장점을 일부 흡수하고 있습니다.
          PostgreSQL이나 MySQL 같은 관계형 데이터베이스는 JSON 타입을 지원하며, 정형 데이터와 반정형 데이터를 함께 다룰 수 있는 기능을 강화하고 있습니다.
          덕분에 모든 유연한 데이터를 반드시 NoSQL에 저장해야 하는 것은 아닙니다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 핵심 주문 데이터는 SQL 테이블 컬럼으로 엄격히 관리하고, 부가 옵션이나 확장 속성은 JSON 컬럼으로 저장하는 방식도 가능합니다.
          이렇게 하면 데이터 무결성을 유지하면서도 일부 유연성을 확보할 수 있습니다.
          다만 JSON 컬럼을 과도하게 사용하면 관계형 데이터베이스의 장점인 명확한 구조와 제약 조건 관리가 약해질 수 있으므로 주의가 필요합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- PostgreSQL JSONB 컬럼 활용 예시
CREATE TABLE product (
  product_id BIGINT PRIMARY KEY,
  product_name VARCHAR(200) NOT NULL,
  price NUMERIC(12, 2) NOT NULL,
  attributes JSONB
);

-- 상품별로 다른 속성을 JSON 형태로 저장
INSERT INTO product (
  product_id,
  product_name,
  price,
  attributes
) VALUES (
  1001,
  '무선 키보드',
  59000,
  '{&quot;color&quot;: &quot;black&quot;, &quot;connection&quot;: &quot;bluetooth&quot;, &quot;battery&quot;: &quot;AA&quot;}'
);&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;선택 기준: SQL을 쓸까, NoSQL을 쓸까?&lt;/h2&gt;

        &lt;p&gt;
          SQL과 NoSQL을 선택할 때는 기술 선호도보다 데이터 특성을 먼저 봐야 합니다.
          데이터 구조가 명확하고 관계와 정합성이 중요하면 SQL이 적합합니다.
          반대로 데이터 구조가 자주 바뀌고, 대량 이벤트를 빠르게 저장해야 하며, 수평 확장이 중요하면 NoSQL이 적합할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;질문&lt;/th&gt;
              &lt;th&gt;SQL이 유리한 경우&lt;/th&gt;
              &lt;th&gt;NoSQL이 유리한 경우&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터 구조가 고정적인가?&lt;/td&gt;
              &lt;td&gt;고객, 주문, 결제처럼 구조가 명확합니다.&lt;/td&gt;
              &lt;td&gt;사용자 속성, 이벤트처럼 구조가 자주 바뀝니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;트랜잭션이 중요한가?&lt;/td&gt;
              &lt;td&gt;정확한 커밋과 롤백이 필수입니다.&lt;/td&gt;
              &lt;td&gt;일부 지연 반영이나 최종 일관성이 허용됩니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;조인이 많이 필요한가?&lt;/td&gt;
              &lt;td&gt;여러 테이블을 연결해 분석해야 합니다.&lt;/td&gt;
              &lt;td&gt;조인을 줄이고 한 번에 조회할 구조로 저장합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터 증가 속도가 빠른가?&lt;/td&gt;
              &lt;td&gt;정형 거래 데이터 중심입니다.&lt;/td&gt;
              &lt;td&gt;로그, 센서, 이벤트가 대량으로 발생합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확장 방식은 무엇인가?&lt;/td&gt;
              &lt;td&gt;강한 정합성과 안정적인 구조가 우선입니다.&lt;/td&gt;
              &lt;td&gt;수평 확장과 처리량 확보가 우선입니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자 입장에서의 운영 포인트&lt;/h2&gt;

        &lt;p&gt;
          SQL과 NoSQL을 함께 사용하면 시스템 유연성은 높아지지만 운영 복잡도도 함께 증가합니다.
          데이터가 여러 저장소에 나뉘면 장애 대응, 백업, 복구, 모니터링, 보안 정책, 데이터 정합성 관리 기준을 별도로 수립해야 합니다.
          따라서 폴리글랏 퍼시스턴스는 기술적으로 좋아 보인다는 이유만으로 도입하기보다 운영 가능성을 함께 검토해야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          운영 환경에서 확인할 질문&lt;br&gt;
          어떤 데이터가 원본 데이터인지 명확한가?&lt;br&gt;
          SQL과 NoSQL 사이의 데이터 동기화 기준이 있는가?&lt;br&gt;
          장애 발생 시 어느 저장소를 먼저 복구해야 하는가?&lt;br&gt;
          개인정보와 민감정보가 여러 저장소에 중복 저장되지 않는가?&lt;br&gt;
          백업, 복구, 모니터링, 접근 통제 정책이 각각 준비되어 있는가?&lt;br&gt;
          개발팀과 운영팀이 각 DB의 특성을 이해하고 있는가?
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;SQL과 NoSQL 선택 시 자주 하는 실수&lt;/h2&gt;

        &lt;p&gt;
          데이터베이스 선택에서 가장 흔한 실수는 특정 기술을 모든 문제의 해답으로 보는 것입니다.
          NoSQL이 확장성이 좋다고 해서 모든 데이터를 NoSQL에 넣으면 정합성 관리가 어려워질 수 있습니다.
          반대로 SQL만 고집하면 대량 로그나 비정형 데이터를 처리할 때 비용과 성능 문제가 생길 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;실수&lt;/th&gt;
              &lt;th&gt;문제점&lt;/th&gt;
              &lt;th&gt;개선 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;NoSQL을 SQL 대체재로만 이해&lt;/td&gt;
              &lt;td&gt;정합성이 중요한 데이터까지 무리하게 이전할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;데이터 성격별로 저장소를 분리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;SQL에 모든 로그를 저장&lt;/td&gt;
              &lt;td&gt;대량 이벤트로 인해 성능과 저장 비용이 커질 수 있습니다.&lt;/td&gt;
              &lt;td&gt;로그와 이벤트는 별도 NoSQL 또는 분석 저장소를 검토합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;스키마 설계 없이 NoSQL 도입&lt;/td&gt;
              &lt;td&gt;조회 성능과 데이터 품질이 떨어질 수 있습니다.&lt;/td&gt;
              &lt;td&gt;조회 패턴과 키 설계를 먼저 정의합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터 동기화 기준 부재&lt;/td&gt;
              &lt;td&gt;SQL과 NoSQL 간 데이터 불일치가 발생할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;원본 저장소와 동기화 흐름을 명확히 정의합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 복잡도 과소평가&lt;/td&gt;
              &lt;td&gt;백업, 장애 대응, 보안 관리가 어려워질 수 있습니다.&lt;/td&gt;
              &lt;td&gt;도입 전 운영 표준과 담당 범위를 정합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          SQL은 정형 데이터, 복잡한 관계, 강한 트랜잭션, 데이터 무결성이 중요한 업무에 적합합니다.
          금융, 결제, 주문, ERP처럼 신뢰성이 핵심인 도메인에서는 SQL 데이터베이스가 여전히 중요한 역할을 합니다.
          반면 NoSQL은 유연한 스키마, 수평 확장, 비정형 데이터 처리에 강점이 있어 실시간 채팅, IoT, 로그, 사용자 프로필, 추천 시스템에 적합합니다.
        &lt;/p&gt;

        &lt;p&gt;
          최신 시스템에서는 SQL과 NoSQL 중 하나를 선택해 모든 데이터를 처리하기보다, 데이터 성격에 따라 함께 사용하는 폴리글랏 퍼시스턴스가 많이 활용됩니다.
          중요한 거래 데이터는 SQL에 저장하고, 빠르게 증가하는 로그나 세션, 리뷰, 추천 데이터는 NoSQL에 저장하는 방식입니다.
          결국 좋은 데이터베이스 선택은 유행을 따르는 것이 아니라, 데이터의 중요도와 구조, 조회 패턴, 운영 책임을 기준으로 판단하는 것입니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/sql-nosql-polyglot-persistence#blogposting&quot;,
        &quot;headline&quot;: &quot;SQL과 NoSQL의 차이와 함께 사용하는 이유&quot;,
        &quot;description&quot;: &quot;SQL과 NoSQL의 핵심 차이, 각각 적합한 사용 사례, 폴리글랏 퍼시스턴스 관점에서 함께 사용하는 이유를 실무 중심으로 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/sql-nosql-polyglot-persistence&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-sql-nosql-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;SQL&quot;,
          &quot;NoSQL&quot;,
          &quot;관계형 데이터베이스&quot;,
          &quot;비관계형 데이터베이스&quot;,
          &quot;폴리글랏 퍼시스턴스&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/sql-nosql-polyglot-persistence#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스&quot;,
            &quot;item&quot;: &quot;https://example.com/category/database&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;SQL과 NoSQL의 차이와 함께 사용하는 이유&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: SQL, NoSQL, 관계형데이터베이스, 비관계형데이터베이스, 정형데이터, 비정형데이터, ACID, 스키마, 수평확장, 폴리글랏퍼시스턴스 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>acid</category>
      <category>nosql</category>
      <category>SQL</category>
      <category>관계형데이터베이스</category>
      <category>비관계형데이터베이스</category>
      <category>비정형데이터</category>
      <category>수평확장</category>
      <category>스키마</category>
      <category>정형데이터</category>
      <category>폴리글랏퍼시스턴스</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/565</guid>
      <comments>https://togethergrow.tistory.com/entry/SQL%EA%B3%BC-NoSQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%99%80-%ED%95%A8%EA%BB%98-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0#entry565comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:52:03 +0900</pubDate>
    </item>
    <item>
      <title>AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점</title>
      <link>https://togethergrow.tistory.com/entry/AgensSQL%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EB%8F%84%EC%9E%85-%EC%8B%9C-%EA%B8%B0%EB%8C%80%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EC%A0%90</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;215283_219127_4210.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W8J80/dJMcahdPlun/71pUTXLiIKKJNiv0T7eg40/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W8J80/dJMcahdPlun/71pUTXLiIKKJNiv0T7eg40/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W8J80/dJMcahdPlun/71pUTXLiIKKJNiv0T7eg40/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW8J80%2FdJMcahdPlun%2F71pUTXLiIKKJNiv0T7eg40%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;AgensSQL의 개념과 주요 장점, 도입 전 고려해야 할 단점, 실제 사용 시 기대할 수 있는 효과를 관리자 관점에서 정리합니다&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;328&quot; data-filename=&quot;215283_219127_4210.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;AgensSQL의 개념과 주요 장점, 도입 전 고려해야 할 단점, 실제 사용 시 기대할 수 있는 효과를 관리자 관점에서 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;AgensSQL,에이젠SQL,PostgreSQL,오픈소스DB,관계형DBMS,Oracle호환,DB전환,데이터베이스,DB운영,상용DB대안&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;AgensSQL의 특징과 장점, 단점, 기대 효과를 PostgreSQL 기반 DBMS 관점에서 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-agenssql-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/agenssql-overview&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;AgensSQL을 도입할 때 확인해야 할 장점, 단점, 운영 기대 효과를 실무 중심으로 설명합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-agenssql-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          AgensSQL은 PostgreSQL을 기반으로 한 오픈소스 기반 관계형 DBMS입니다.&lt;br&gt;
          일반 PostgreSQL의 장점을 활용하면서 기업 환경에서 필요한 운영 편의성, 호환성, 관리 기능을 보완하는 방향의 데이터베이스로 이해할 수 있습니다.&lt;br&gt;
          실무 기준으로 보면 AgensSQL은 상용 DBMS 의존도를 낮추고 PostgreSQL 계열로 전환하려는 조직에서 검토할 수 있는 대안 중 하나입니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL이란?&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL은 PostgreSQL 기반의 관계형 데이터베이스 관리 시스템입니다.
          PostgreSQL은 표준 SQL 지원, 확장성, 안정성, 다양한 오픈소스 생태계를 장점으로 가진 DBMS이며, AgensSQL은 이러한 PostgreSQL 계열의 특성을 바탕으로 기업 환경에서 사용할 수 있도록 구성된 제품으로 볼 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          일반적으로 AgensSQL은 기존 상용 DBMS를 사용하는 조직이 오픈소스 DBMS로 전환하거나, 신규 시스템에서 PostgreSQL 기반의 데이터베이스를 검토할 때 후보군에 포함될 수 있습니다.
          특히 Oracle 계열 문법이나 운영 방식에 익숙한 조직이라면 PostgreSQL로 전환하는 과정에서 호환성, 마이그레이션, 운영 지원 여부를 함께 검토하게 됩니다.
        &lt;/p&gt;

        &lt;p&gt;
          AgensSQL을 이해할 때 중요한 점은 단순히 “무료 DB”로만 접근하면 안 된다는 것입니다.
          데이터베이스는 라이선스 비용뿐 아니라 성능, 장애 대응, 백업 복구, 고가용성, 기술 지원, 운영 인력 숙련도까지 함께 고려해야 합니다.
          관리자 입장에서 AgensSQL은 비용 절감 가능성과 운영 전환 리스크를 동시에 검토해야 하는 DBMS입니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL의 기본 성격&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL은 PostgreSQL 기반이라는 점에서 기존 PostgreSQL 생태계의 장점을 어느 정도 활용할 수 있습니다.
          SQL 문법, 트랜잭션 처리, 인덱스, 함수, 확장 기능, 개발 도구 연동 측면에서 PostgreSQL 계열의 장점을 기대할 수 있습니다.
          다만 실제 지원 범위와 기능은 사용하는 버전, 에디션, 구축 방식에 따라 달라질 수 있으므로 도입 전 확인이 필요합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
              &lt;th&gt;검토 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;기반 기술&lt;/td&gt;
              &lt;td&gt;PostgreSQL 기반 관계형 DBMS&lt;/td&gt;
              &lt;td&gt;현재 사용하는 PostgreSQL 버전과 호환 범위를 확인해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 용도&lt;/td&gt;
              &lt;td&gt;업무 시스템, 전환 프로젝트, 신규 서비스 DB&lt;/td&gt;
              &lt;td&gt;업무 중요도와 데이터 규모에 맞는지 검토해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;전환 관점&lt;/td&gt;
              &lt;td&gt;상용 DBMS에서 오픈소스 기반 DBMS로의 전환 후보&lt;/td&gt;
              &lt;td&gt;SQL, 프로시저, 함수, 배치, 리포트 호환성을 확인해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 관점&lt;/td&gt;
              &lt;td&gt;백업, 복구, 모니터링, 성능 관리 필요&lt;/td&gt;
              &lt;td&gt;기존 DBA 역량과 운영 도구 준비 상태를 점검해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL만의 장점&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL의 가장 큰 장점은 PostgreSQL 기반의 개방성과 기업용 DBMS로서의 운영 방향을 함께 기대할 수 있다는 점입니다.
          PostgreSQL 생태계를 활용하면서도 국내 업무 환경이나 상용 DBMS 전환 수요에 맞춘 기능과 지원을 검토할 수 있습니다.
          특히 기존 상용 DBMS 비용 부담이 큰 조직에서는 DB 전환 후보로서 의미가 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;1. PostgreSQL 기반의 안정성과 확장성&lt;/h3&gt;

        &lt;p&gt;
          PostgreSQL은 오랜 기간 사용되어 온 오픈소스 관계형 DBMS입니다.
          트랜잭션 처리, MVCC 구조, 다양한 인덱스, JSON 처리, 확장 기능 등 범용 업무 시스템에 필요한 기능을 폭넓게 제공합니다.
          AgensSQL은 이러한 PostgreSQL 기반을 활용하기 때문에 개발자와 DBA가 PostgreSQL 생태계의 지식과 도구를 함께 활용할 수 있다는 장점이 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;2. 상용 DBMS 전환 비용 절감 기대&lt;/h3&gt;

        &lt;p&gt;
          기존 Oracle, DB2, MS SQL Server 같은 상용 DBMS를 사용하는 조직은 라이선스와 유지보수 비용 부담이 클 수 있습니다.
          AgensSQL은 오픈소스 기반 DBMS 전환을 검토할 때 비용 구조를 재설계할 수 있는 선택지가 될 수 있습니다.
          물론 단순 라이선스 비용만 볼 것이 아니라 마이그레이션, 튜닝, 교육, 운영 지원 비용까지 포함해 전체 비용을 계산해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;3. Oracle 계열 시스템 전환 시 검토 가능&lt;/h3&gt;

        &lt;p&gt;
          많은 기업 시스템은 Oracle 문법, 프로시저, 패키지, 시퀀스, 함수 사용 방식에 익숙합니다.
          PostgreSQL로 바로 전환할 경우 SQL 문법과 PL/SQL 구조 차이 때문에 수정 범위가 커질 수 있습니다.
          AgensSQL은 이러한 전환 환경에서 Oracle 호환성 또는 전환 편의성을 검토할 수 있는 제품군으로 고려될 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;4. 국내 업무 환경에서의 지원 기대&lt;/h3&gt;

        &lt;p&gt;
          데이터베이스는 장애가 발생했을 때 빠른 기술 지원이 중요합니다.
          특히 공공, 금융, 제조, 유통처럼 운영 안정성이 중요한 환경에서는 제품 자체의 기능만큼 지원 체계도 중요합니다.
          AgensSQL은 국내 기업 환경에서 PostgreSQL 기반 DBMS를 도입하려는 경우, 기술 지원과 운영 컨설팅 가능성을 함께 검토할 수 있다는 점이 장점이 될 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;5. 오픈소스 생태계 활용 가능성&lt;/h3&gt;

        &lt;p&gt;
          PostgreSQL 기반 DBMS를 사용하면 DBeaver, pgAdmin, JDBC, ODBC, ORM, 모니터링 도구 등 다양한 생태계와 연동 가능성을 기대할 수 있습니다.
          이는 개발 생산성과 운영 편의성 측면에서 장점이 됩니다.
          다만 특정 확장 기능이나 제품 고유 기능을 사용할 경우, 표준 PostgreSQL과의 차이를 별도로 확인해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL의 장점 요약&lt;/h2&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;장점&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;기대 효과&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL 기반&lt;/td&gt;
              &lt;td&gt;검증된 오픈소스 DBMS 생태계를 활용할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;개발 도구와 운영 경험을 재활용하기 쉽습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;비용 구조 개선&lt;/td&gt;
              &lt;td&gt;상용 DBMS 의존도를 낮추는 방향으로 검토할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;라이선스와 유지보수 비용 절감 가능성이 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;전환 프로젝트 활용&lt;/td&gt;
              &lt;td&gt;기존 상용 DBMS에서 PostgreSQL 계열로 전환할 때 후보가 될 수 있습니다.&lt;/td&gt;
              &lt;td&gt;DB 전환 전략 수립에 선택지를 넓힐 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 지원 검토 가능&lt;/td&gt;
              &lt;td&gt;기업 환경에서 필요한 지원 체계를 함께 검토할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;운영 안정성과 장애 대응력을 높일 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확장성&lt;/td&gt;
              &lt;td&gt;PostgreSQL의 확장 기능과 생태계를 활용할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;업무 시스템, 분석, 연계 환경에 유연하게 적용할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL의 단점&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL은 장점이 있지만 모든 시스템에 무조건 적합한 DBMS는 아닙니다.
          PostgreSQL 기반 DBMS 도입은 기존 상용 DBMS와 운영 방식, SQL 문법, 튜닝 방식, 장애 대응 절차가 다를 수 있습니다.
          따라서 단점이라기보다 도입 전 반드시 검토해야 할 현실적인 제약 사항으로 보는 것이 좋습니다.
        &lt;/p&gt;

        &lt;h3&gt;1. 기존 상용 DBMS와 100% 동일하지 않음&lt;/h3&gt;

        &lt;p&gt;
          Oracle이나 다른 상용 DBMS에서 사용하던 SQL, 함수, 프로시저, 패키지, 힌트, 트리거, 스케줄러, 권한 체계가 그대로 동작한다고 가정하면 위험합니다.
          호환 기능이 있더라도 모든 문법과 동작 방식이 완전히 동일한 것은 아닐 수 있습니다.
          특히 대규모 전환 프로젝트에서는 SQL 변환, 프로시저 재작성, 성능 튜닝, 테스트 기간을 충분히 확보해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;2. 운영 인력의 PostgreSQL 이해가 필요&lt;/h3&gt;

        &lt;p&gt;
          PostgreSQL 계열 DBMS는 Oracle과 내부 구조, 백업 복구 방식, vacuum 관리, 통계 정보 관리, 파라미터 튜닝 방식이 다릅니다.
          기존 DBA가 상용 DBMS에 익숙하더라도 PostgreSQL 운영 경험이 부족하면 장애 대응과 성능 튜닝에서 시행착오가 발생할 수 있습니다.
          실제 사용 시 운영 인력 교육과 표준 운영 절차 수립이 필요합니다.
        &lt;/p&gt;

        &lt;h3&gt;3. 고가용성 구성은 별도 설계가 필요&lt;/h3&gt;

        &lt;p&gt;
          데이터베이스 운영에서 고가용성은 매우 중요한 요소입니다.
          AgensSQL을 사용할 때도 이중화, 장애 조치, 백업 복구, 재해 복구, 모니터링 구조를 별도로 설계해야 합니다.
          단순히 DBMS를 설치하는 것만으로 운영 안정성이 확보되는 것은 아니며, 업무 중요도에 맞는 HA 구성이 필요합니다.
        &lt;/p&gt;

        &lt;h3&gt;4. 일부 상용 DBMS 기능과 차이가 있을 수 있음&lt;/h3&gt;

        &lt;p&gt;
          기존 상용 DBMS에서 제공하던 특정 관리 도구, 진단 기능, 고급 튜닝 기능, 파티셔닝 방식, 복제 방식, 감사 기능을 그대로 기대하면 차이가 있을 수 있습니다.
          특히 금융, 공공, 대기업 환경에서는 보안 감사, 접근 통제, 암호화, 로그 보존, 백업 정책 등 내부 기준을 만족하는지 별도로 검토해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;5. 제품 고유 기능 사용 시 종속성 발생 가능&lt;/h3&gt;

        &lt;p&gt;
          PostgreSQL 기반이라는 장점이 있지만, AgensSQL 고유 기능을 많이 사용하면 향후 순정 PostgreSQL이나 다른 PostgreSQL 호환 DBMS로 이동할 때 추가 검토가 필요할 수 있습니다.
          따라서 표준 PostgreSQL 기능과 제품 고유 기능을 구분해 사용하는 전략이 필요합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          AgensSQL 도입에서 가장 위험한 접근은 “PostgreSQL 기반이므로 기존 시스템을 쉽게 옮길 수 있다”고 단정하는 것입니다.&lt;br&gt;
          SQL 호환성, 프로시저 변환, 성능 차이, 운영 방식, 백업 복구, 장애 대응 절차를 모두 검증해야 합니다.&lt;br&gt;
          특히 핵심 업무 시스템은 PoC와 성능 테스트 없이 바로 전환하면 운영 리스크가 커질 수 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL의 단점 요약&lt;/h2&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;단점 또는 제약&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;대응 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;상용 DBMS와 차이&lt;/td&gt;
              &lt;td&gt;기존 SQL과 프로시저가 그대로 동작하지 않을 수 있습니다.&lt;/td&gt;
              &lt;td&gt;전환 영향도 분석과 변환 테스트를 수행합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 역량 필요&lt;/td&gt;
              &lt;td&gt;PostgreSQL 계열 운영 지식이 필요합니다.&lt;/td&gt;
              &lt;td&gt;DBA 교육과 표준 운영 절차를 마련합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;HA 설계 필요&lt;/td&gt;
              &lt;td&gt;장애 조치와 복구 구조를 별도로 설계해야 합니다.&lt;/td&gt;
              &lt;td&gt;이중화, 백업, 모니터링, DR 구조를 사전에 정의합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기능 차이 가능성&lt;/td&gt;
              &lt;td&gt;기존 상용 DBMS의 고급 기능과 다를 수 있습니다.&lt;/td&gt;
              &lt;td&gt;필수 기능 목록을 만들고 사전 검증합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제품 종속성&lt;/td&gt;
              &lt;td&gt;고유 기능 사용 시 향후 이전성이 낮아질 수 있습니다.&lt;/td&gt;
              &lt;td&gt;표준 기능과 고유 기능 사용 범위를 구분합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL을 사용했을 때 기대되는 점&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL을 도입했을 때 가장 크게 기대할 수 있는 점은 DBMS 비용 구조 개선과 PostgreSQL 기반 생태계 활용입니다.
          기존 상용 DBMS 중심의 환경에서 오픈소스 기반 DBMS로 전환하면 라이선스 비용 부담을 줄이고, 개발과 운영 방식의 유연성을 높일 수 있습니다.
          다만 기대 효과는 시스템 특성, 전환 난이도, 운영 역량, 지원 체계에 따라 달라질 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;1. DBMS 비용 최적화&lt;/h3&gt;

        &lt;p&gt;
          상용 DBMS는 CPU 코어, 사용자 수, 옵션 기능, 유지보수 계약에 따라 비용 부담이 커질 수 있습니다.
          AgensSQL을 도입하면 기존 상용 DBMS 중심의 비용 구조를 재검토할 수 있습니다.
          특히 신규 업무 시스템이나 중간 규모 시스템부터 적용하면 전환 리스크를 낮추면서 비용 최적화 효과를 검증할 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;2. PostgreSQL 기반 개발 생산성 향상&lt;/h3&gt;

        &lt;p&gt;
          PostgreSQL 생태계는 개발자 친화적인 도구와 라이브러리가 많습니다.
          JDBC, ODBC, Python, Java, Node.js, ORM 도구와의 연동성이 좋고, 다양한 오픈소스 관리 도구도 사용할 수 있습니다.
          AgensSQL을 사용하면 이러한 생태계를 기반으로 개발과 테스트 환경을 구성하기 쉬워질 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;3. 상용 DBMS 전환 전략 수립&lt;/h3&gt;

        &lt;p&gt;
          모든 시스템을 한 번에 전환하기는 어렵습니다.
          AgensSQL은 상용 DBMS에서 PostgreSQL 계열로 이동하기 위한 단계적 전환 전략의 후보가 될 수 있습니다.
          중요도가 낮은 시스템, 신규 시스템, 내부 업무 시스템부터 적용해 운영 경험을 쌓고 이후 핵심 시스템으로 확대하는 방식이 현실적입니다.
        &lt;/p&gt;

        &lt;h3&gt;4. 운영 표준화와 기술 내재화&lt;/h3&gt;

        &lt;p&gt;
          오픈소스 기반 DBMS를 도입하면 내부 운영 표준을 직접 설계하고 기술을 내재화할 기회가 생깁니다.
          백업 정책, 모니터링 기준, 장애 대응 절차, 성능 점검 기준을 조직에 맞게 정리할 수 있습니다.
          운영 환경에서는 이러한 표준화가 장기적으로 장애 대응 속도와 운영 품질을 높이는 기반이 됩니다.
        &lt;/p&gt;

        &lt;h3&gt;5. 벤더 종속성 완화&lt;/h3&gt;

        &lt;p&gt;
          특정 상용 DBMS에 모든 시스템이 종속되어 있으면 비용 협상력과 기술 선택 폭이 제한될 수 있습니다.
          AgensSQL 같은 PostgreSQL 기반 DBMS를 함께 검토하면 데이터베이스 선택지를 넓힐 수 있습니다.
          이는 장기적으로 클라우드 전환, 시스템 재구축, 마이크로서비스 전환 같은 IT 전략에서도 유연성을 높일 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL 도입 전 확인해야 할 체크리스트&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL을 도입하기 전에는 기능 비교보다 실제 업무 시스템에 적용 가능한지를 먼저 확인해야 합니다.
          관리자 입장에서 중요한 것은 제품 소개 자료의 기능 목록이 아니라, 우리 시스템의 SQL, 데이터량, 트랜잭션, 장애 대응 기준을 만족하는지입니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          AgensSQL 도입 전 점검 항목&lt;br&gt;
          현재 DBMS에서 사용하는 SQL과 프로시저의 호환성을 확인했는가?&lt;br&gt;
          주요 업무 화면과 배치 프로그램의 성능 테스트를 수행했는가?&lt;br&gt;
          백업, 복구, 이중화, 모니터링 구조가 설계되어 있는가?&lt;br&gt;
          DBA와 개발자가 PostgreSQL 계열 운영 방식을 이해하고 있는가?&lt;br&gt;
          장애 발생 시 기술 지원 체계와 대응 절차가 명확한가?&lt;br&gt;
          보안, 감사, 접근 통제, 암호화 요건을 충족하는가?&lt;br&gt;
          제품 고유 기능 사용 범위와 향후 이전성을 검토했는가?
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL이 적합할 수 있는 경우&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL은 모든 상황에 무조건 적합한 DBMS는 아니지만, 몇 가지 환경에서는 충분히 검토할 만합니다.
          특히 PostgreSQL 기반으로 신규 시스템을 구축하려는 경우, 상용 DBMS 비용을 줄이고 싶은 경우, 기존 시스템을 단계적으로 전환하려는 경우에 후보가 될 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;적합한 경우&lt;/th&gt;
              &lt;th&gt;이유&lt;/th&gt;
              &lt;th&gt;주의할 점&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;신규 업무 시스템&lt;/td&gt;
              &lt;td&gt;처음부터 PostgreSQL 기반으로 설계할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;초기 아키텍처와 운영 표준을 명확히 잡아야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;상용 DBMS 비용 절감 프로젝트&lt;/td&gt;
              &lt;td&gt;라이선스 비용 구조를 재검토할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;전환 비용까지 포함한 총비용을 계산해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;내부 업무 시스템&lt;/td&gt;
              &lt;td&gt;핵심 거래 시스템보다 상대적으로 전환 리스크가 낮습니다.&lt;/td&gt;
              &lt;td&gt;운영 경험 축적용으로 단계적 적용이 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;PostgreSQL 기술 내재화 조직&lt;/td&gt;
              &lt;td&gt;기존 PostgreSQL 경험을 활용할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;제품 고유 기능과 표준 기능의 차이를 관리해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;클라우드 전환 검토 조직&lt;/td&gt;
              &lt;td&gt;오픈소스 기반 DBMS 운영 경험을 확보할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;클라우드 DB 서비스와의 역할 분담을 검토해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AgensSQL 도입이 신중해야 하는 경우&lt;/h2&gt;

        &lt;p&gt;
          반대로 매우 복잡한 상용 DBMS 기능에 의존하고 있거나, DB 전환 테스트를 수행할 시간이 부족하거나, PostgreSQL 운영 경험이 전혀 없는 조직은 신중해야 합니다.
          특히 미션 크리티컬 시스템을 짧은 기간 안에 전환해야 한다면 기술적 가능성보다 운영 안정성을 우선으로 판단해야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          핵심 금융 거래, 대규모 배치, 초고성능 OLTP, 복잡한 프로시저 중심 시스템은 전환 난이도가 높을 수 있습니다.&lt;br&gt;
          이 경우 AgensSQL 도입 여부를 바로 결정하기보다 PoC, SQL 변환율 분석, 성능 비교, 장애 복구 테스트를 먼저 수행해야 합니다.&lt;br&gt;
          실제 운영 시 가장 큰 리스크는 DBMS 자체보다 준비되지 않은 전환과 검증 부족에서 발생합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;PoC에서 반드시 확인할 항목&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL을 검토한다면 작은 테스트 설치만으로 판단하기보다 실제 업무와 유사한 데이터와 쿼리로 PoC를 수행하는 것이 좋습니다.
          PoC에서는 기능 동작 여부뿐 아니라 성능, 운영, 장애 대응, 마이그레이션 난이도를 함께 확인해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;AgensSQL PoC 점검 예시

1. 주요 테이블 DDL 변환 가능 여부 확인
2. 핵심 SQL과 배치 SQL 수행 결과 비교
3. 프로시저, 함수, 트리거 변환 난이도 확인
4. 대용량 조회와 입력 성능 테스트
5. 인덱스 전략과 실행 계획 비교
6. 백업 및 복구 절차 검증
7. 장애 조치와 재기동 시나리오 테스트
8. 모니터링과 알림 구성 확인
9. 개발 프레임워크와 JDBC 연동 확인
10. 운영자 교육과 지원 체계 확인&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          AgensSQL은 PostgreSQL 기반의 오픈소스 관계형 DBMS로, 상용 DBMS 의존도를 낮추고 PostgreSQL 생태계를 활용하려는 조직에서 검토할 수 있는 데이터베이스입니다.
          장점으로는 PostgreSQL 기반의 안정성과 확장성, 비용 구조 개선 가능성, 전환 프로젝트 활용성, 국내 업무 환경에서의 지원 기대, 오픈소스 생태계 활용 가능성이 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          반면 기존 상용 DBMS와의 완전한 동일성을 기대하기는 어렵고, PostgreSQL 운영 역량, 고가용성 설계, 성능 튜닝, 마이그레이션 검증이 반드시 필요합니다.
          AgensSQL을 사용했을 때 기대되는 효과는 비용 절감, 개발 생산성 향상, DB 전환 선택지 확대, 운영 표준화, 벤더 종속성 완화입니다.
          결국 AgensSQL 도입의 핵심은 제품 선택 자체보다 우리 조직의 업무, 데이터, 운영 역량에 맞는지 충분히 검증하는 것입니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/agenssql-overview#blogposting&quot;,
        &quot;headline&quot;: &quot;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&quot;,
        &quot;description&quot;: &quot;AgensSQL의 개념과 주요 장점, 도입 전 고려해야 할 단점, 실제 사용 시 기대할 수 있는 효과를 관리자 관점에서 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/agenssql-overview&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-agenssql-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;AgensSQL&quot;,
          &quot;PostgreSQL&quot;,
          &quot;오픈소스 DBMS&quot;,
          &quot;Oracle 호환&quot;,
          &quot;DB 전환&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/agenssql-overview#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스&quot;,
            &quot;item&quot;: &quot;https://example.com/category/database&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;AgensSQL이란 무엇이며 도입 시 기대할 수 있는 점&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: AgensSQL, 에이젠SQL, PostgreSQL, 오픈소스DB, 관계형DBMS, Oracle호환, DB전환, 데이터베이스, DB운영, 상용DB대안 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AgensSQL</category>
      <category>DB운영</category>
      <category>DB전환</category>
      <category>Oracle호환</category>
      <category>PostgreSQL</category>
      <category>관계형DBMS</category>
      <category>데이터베이스</category>
      <category>상용DB대안</category>
      <category>에이젠SQL</category>
      <category>오픈소스DB</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/564</guid>
      <comments>https://togethergrow.tistory.com/entry/AgensSQL%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EB%8F%84%EC%9E%85-%EC%8B%9C-%EA%B8%B0%EB%8C%80%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EC%A0%90#entry564comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:49:12 +0900</pubDate>
    </item>
    <item>
      <title>AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름</title>
      <link>https://togethergrow.tistory.com/entry/AWS-%EC%BB%A8%ED%8B%B0%EB%89%B4%EC%97%84%EC%9D%B4-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%B3%B4%EC%95%88-%EC%9E%90%EB%8F%99%ED%99%94%EC%9D%98-%ED%9D%90%EB%A6%84</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;AWS 컨티뉴엄의 개념과 코드 취약점 발견, 우선순위화, 검증, 완화까지 이어지는 보안 자동화 흐름을 관리자 관점에서 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;AWS 컨티뉴엄,AWS Continuum,보안자동화,코드취약점,취약점관리,보안운영,프런티어모델,위협모델링,코드스캐닝,클라우드보안&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;AWS 컨티뉴엄이 코드 취약점 발견부터 해결까지 어떤 방식으로 자동화하는지 실무 관점에서 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-aws-continuum-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/aws-continuum-security-automation&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;AWS 컨티뉴엄의 제한된 프리뷰 공개 의미와 보안 운영 방식의 변화를 쉽게 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-aws-continuum-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          AWS 컨티뉴엄은 코드 취약점의 발견부터 우선순위화, 검증, 완화와 해결까지 이어지는 보안 운영 과정을 자동화하기 위한 AWS의 신규 보안 서비스입니다.&lt;br&gt;
          제한된 프리뷰 형태로 공개되었으며, 초기에는 코드 취약점 관리를 중심으로 제공됩니다.&lt;br&gt;
          실무 기준으로 보면 AWS 컨티뉴엄의 핵심은 단순히 취약점을 많이 찾는 것이 아니라, 실제 위험을 판별하고 해결 가능한 조치까지 연결하는 데 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AWS 컨티뉴엄이란?&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 Amazon Web Services가 공개한 보안 자동화 솔루션으로, 코드 취약점의 전체 처리 과정을 빠르게 자동화하는 것을 목표로 합니다.
          기존 보안 도구가 취약점 목록을 수집하고 대시보드에 표시하는 방식에 가까웠다면, AWS 컨티뉴엄은 발견된 취약점이 실제로 위험한지 판단하고 해결 방안까지 제시하는 방향에 초점을 둡니다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 최근 보안 영역에서는 프런티어 모델과 자동화 도구가 취약점을 찾는 속도를 크게 높이고 있습니다.
          이로 인해 보안팀은 이전보다 훨씬 많은 취약점 백로그를 처리해야 하는 상황에 놓이고 있습니다.
          AWS 컨티뉴엄은 이런 변화에 대응하기 위해 보안 운영을 단순 관찰 중심에서 실제 해결 중심으로 전환하려는 시도로 볼 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;왜 AWS 컨티뉴엄이 필요한가?&lt;/h2&gt;

        &lt;p&gt;
          기업의 보안팀은 이미 다양한 취약점 스캐너, 코드 분석 도구, 클라우드 보안 도구, 로그 수집 시스템을 사용하고 있습니다.
          문제는 도구가 많아질수록 발견되는 항목도 늘어나지만, 실제로 무엇부터 해결해야 하는지 판단하기는 더 어려워진다는 점입니다.
          보안 경고가 많다고 해서 모두 같은 수준의 위험을 갖는 것은 아니기 때문입니다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 코드에서 취약한 라이브러리가 발견되었더라도 해당 코드가 실제 운영에 배포되지 않았거나 외부에서 접근할 수 없다면 우선순위는 낮아질 수 있습니다.
          반대로 낮은 등급으로 보이는 취약점이라도 외부 노출 서비스, 높은 권한, 중요한 데이터 접근 경로와 연결되어 있다면 즉시 조치해야 할 수 있습니다.
          AWS 컨티뉴엄은 이런 맥락을 함께 분석해 실제 위험 중심으로 취약점을 다루는 것을 목표로 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          보안 운영에서 가장 위험한 상태는 취약점이 없는 상태가 아니라, 중요한 취약점과 덜 중요한 취약점을 구분하지 못하는 상태입니다.&lt;br&gt;
          모든 항목을 동일한 우선순위로 처리하면 정작 실제 공격 가능성이 높은 취약점 대응이 늦어질 수 있습니다.&lt;br&gt;
          관리자 입장에서는 취약점 수보다 실제 비즈니스 영향도와 조치 가능성을 함께 봐야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AWS 컨티뉴엄의 핵심 작동 방식&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 코드, 인프라, 권한, 네트워크 토폴로지 같은 정형 데이터와 조직 운영 문서, 커뮤니케이션, 비즈니스 우선순위 같은 비정형 데이터를 함께 분석하도록 설계되었습니다.
          즉, 단순히 코드만 보는 것이 아니라 해당 코드가 어떤 환경에 배포되어 있고, 어떤 권한과 네트워크 경로를 가지며, 비즈니스적으로 얼마나 중요한지까지 함께 고려하는 구조입니다.
        &lt;/p&gt;

        &lt;p&gt;
          또한 특정 하나의 모델에만 종속되지 않고 여러 프런티어 모델을 상황에 맞게 활용하는 모델 독립적 접근 방식을 지향합니다.
          이는 취약점 발견, 공격 경로 분석, 코드 패치 생성, 문서 이해, 정책 검토처럼 서로 다른 작업에 더 적합한 모델을 조합하겠다는 의미로 이해할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;분석 대상&lt;/th&gt;
              &lt;th&gt;예시&lt;/th&gt;
              &lt;th&gt;활용 목적&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;코드&lt;/td&gt;
              &lt;td&gt;자체 개발 코드, 서드파티 코드, 라이브러리&lt;/td&gt;
              &lt;td&gt;취약점 발견과 패치 후보 생성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;인프라&lt;/td&gt;
              &lt;td&gt;서버, 컨테이너, 네트워크, 배포 환경&lt;/td&gt;
              &lt;td&gt;실제 배포 여부와 노출 범위 판단&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;권한&lt;/td&gt;
              &lt;td&gt;IAM, 서비스 권한, 접근 정책&lt;/td&gt;
              &lt;td&gt;취약점 악용 시 영향 범위 분석&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 정보&lt;/td&gt;
              &lt;td&gt;운영 문서, 업무 우선순위, 조직 정책&lt;/td&gt;
              &lt;td&gt;비즈니스 영향도와 조치 우선순위 판단&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;4단계로 보는 AWS 컨티뉴엄의 처리 흐름&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 코드 취약점을 단순히 탐지하는 데서 멈추지 않고, 발견, 우선순위화, 검증, 완화 및 해결의 네 단계로 이어지는 흐름을 제공합니다.
          이 구조는 보안팀이 취약점 목록을 수동으로 검토하는 부담을 줄이고, 실제 조치 가능한 상태로 업무를 넘겨주는 데 목적이 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;단계&lt;/th&gt;
              &lt;th&gt;주요 내용&lt;/th&gt;
              &lt;th&gt;관리자가 봐야 할 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;발견&lt;/td&gt;
              &lt;td&gt;기존 백로그와 자체 스캔을 통해 취약점과 공격 경로를 식별합니다.&lt;/td&gt;
              &lt;td&gt;기존 도구 결과와 신규 스캔 결과가 함께 반영되는지 확인해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;우선순위화&lt;/td&gt;
              &lt;td&gt;배포 여부, 외부 접근 가능성, 비즈니스 영향을 고려해 처리 순서를 정합니다.&lt;/td&gt;
              &lt;td&gt;단순 심각도 점수보다 실제 운영 영향도가 반영되는지 봐야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;검증&lt;/td&gt;
              &lt;td&gt;샌드박스 환경에서 익스플로잇 가능성을 검증하고 오탐 여부를 판별합니다.&lt;/td&gt;
              &lt;td&gt;재현 가능한 증거가 제시되는지 확인해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;완화 및 해결&lt;/td&gt;
              &lt;td&gt;네트워크, 정책, 코드 패치 등 조치 방안을 권고하고 검증합니다.&lt;/td&gt;
              &lt;td&gt;자동 조치 전 검토, 승인, 롤백 경로가 명확해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;발견 단계: 취약점과 공격 경로를 함께 보기&lt;/h2&gt;

        &lt;p&gt;
          발견 단계에서는 기존 보안 도구에 쌓인 취약점 백로그를 가져오고, AWS 컨티뉴엄 자체 스캔을 통해 추가 취약점을 식별합니다.
          중요한 점은 단순히 취약점 목록을 늘리는 것이 아니라, 취약점이 어떤 공격 경로와 연결되는지 함께 파악한다는 점입니다.
        &lt;/p&gt;

        &lt;p&gt;
          예를 들어 특정 라이브러리 취약점이 발견되었을 때, 해당 코드가 실제 운영 서비스에 배포되어 있는지, 외부에서 호출 가능한 경로에 있는지, 민감 데이터나 높은 권한과 연결되는지를 함께 확인해야 합니다.
          이런 맥락을 파악해야 보안팀이 단순 스캔 결과가 아니라 실제 공격 가능성을 기준으로 대응할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;우선순위화 단계: 실제 위험을 기준으로 정렬&lt;/h2&gt;

        &lt;p&gt;
          보안팀이 가장 어려워하는 부분 중 하나는 취약점 우선순위화입니다.
          기존에는 CVSS 같은 심각도 점수나 스캐너의 위험 등급을 기준으로 처리하는 경우가 많았습니다.
          하지만 같은 등급의 취약점이라도 실제 운영 환경에서의 위험은 크게 다를 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          우선순위화에서 중요한 기준&lt;br&gt;
          해당 코드가 실제 운영에 배포되어 있는가?&lt;br&gt;
          외부 인터넷 또는 주요 내부망에서 접근 가능한가?&lt;br&gt;
          취약점 악용 시 권한 상승이나 데이터 접근으로 이어지는가?&lt;br&gt;
          비즈니스 핵심 서비스와 연결되어 있는가?&lt;br&gt;
          패치 적용 시 서비스 영향도와 롤백 가능성이 검토되었는가?
        &lt;/div&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 이런 정보를 바탕으로 실제 비즈니스 영향도를 고려한 취약점 목록을 제공하는 방향을 지향합니다.
          운영 환경에서는 모든 취약점을 동시에 고칠 수 없기 때문에, 어떤 항목이 지금 가장 위험한지 판단하는 능력이 중요합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;검증 단계: 오탐을 줄이고 재현 가능한 증거 확보&lt;/h2&gt;

        &lt;p&gt;
          취약점 관리에서 오탐은 큰 부담입니다.
          보안 도구가 취약하다고 판단했지만 실제로는 악용이 어렵거나, 현재 배포 구조에서는 영향이 없는 경우도 많습니다.
          이런 항목까지 모두 수동으로 검토하면 보안팀과 개발팀 모두 피로도가 높아집니다.
        &lt;/p&gt;

        &lt;p&gt;
          AWS 컨티뉴엄의 검증 단계는 샌드박스 환경에서 익스플로잇 예시를 구성해 실제 악용 가능성을 확인하는 방식으로 설명됩니다.
          이 과정에서 재현 가능한 증거를 제시할 수 있다면 개발팀은 단순 경고가 아니라 실제 수정해야 하는 문제로 받아들이기 쉬워집니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          자동 검증 결과가 있더라도 운영 반영은 별도의 승인 절차를 거치는 것이 안전합니다.&lt;br&gt;
          샌드박스 검증은 위험 판단에 큰 도움이 되지만, 실제 운영 환경의 데이터, 트래픽, 권한, 의존성까지 완전히 대체할 수는 없습니다.&lt;br&gt;
          따라서 검증 결과와 운영 영향도 분석을 함께 확인해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;완화 및 해결 단계: 권고에서 조치까지 연결&lt;/h2&gt;

        &lt;p&gt;
          기존 보안 운영에서는 취약점을 발견한 뒤 개발팀이나 인프라팀에 티켓을 전달하는 방식이 일반적이었습니다.
          하지만 이 방식은 담당자 배정, 원인 분석, 수정 방안 검토, 테스트, 배포까지 여러 단계를 거치기 때문에 지연이 발생하기 쉽습니다.
          AWS 컨티뉴엄은 완화 및 해결 단계에서 네트워크 변경, 정책 변경, 코드 패치 같은 조치 방안을 제시하는 방향으로 설계되었습니다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 코드 패치 권고안은 자동 검증과 롤백 경로를 함께 제공하는 방식으로 설명됩니다.
          이는 보안 자동화가 단순히 “패치 코드를 만들어 주는 것”에서 끝나는 것이 아니라, 해당 패치가 정상 동작하는지와 문제가 생겼을 때 되돌릴 수 있는지까지 고려해야 한다는 의미입니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;학습 모드와 적용 모드의 차이&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 초기에는 사람이 개입해 권고 근거를 확인하는 학습 모드로 시작하고, 신뢰가 쌓이면 사용자가 정의한 리스크 프로필에 따라 자동으로 해결을 수행하는 적용 모드로 전환할 수 있는 구조로 소개되었습니다.
          이는 보안 자동화 도입에서 매우 중요한 접근입니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;학습 모드&lt;/th&gt;
              &lt;th&gt;적용 모드&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 방식&lt;/td&gt;
              &lt;td&gt;사람이 권고 근거를 검토하고 승인합니다.&lt;/td&gt;
              &lt;td&gt;정의된 조건에 따라 자동 조치가 수행될 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;장점&lt;/td&gt;
              &lt;td&gt;조직이 자동화 판단 기준을 이해하고 신뢰를 쌓을 수 있습니다.&lt;/td&gt;
              &lt;td&gt;반복적인 취약점 대응 속도를 크게 높일 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주의점&lt;/td&gt;
              &lt;td&gt;검토 절차가 길어지면 자동화 효과가 제한될 수 있습니다.&lt;/td&gt;
              &lt;td&gt;리스크 프로필, 승인 범위, 롤백 정책이 명확해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;권장 대상&lt;/td&gt;
              &lt;td&gt;초기 도입 조직, 규제가 강한 산업, 운영 영향이 큰 시스템&lt;/td&gt;
              &lt;td&gt;반복 패턴이 명확하고 자동 조치 기준이 검증된 영역&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기존 AWS 보안 기능과의 통합&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄 공개와 함께 기존 AWS 시큐리티 에이전트의 침투 테스트와 코드 스캐닝 기능은 각각 컨티뉴엄 펜 테스팅과 컨티뉴엄 코드 스캐닝으로 통합되는 흐름으로 소개되었습니다.
          또한 설계 문서나 소스 코드를 바탕으로 STRIDE 체계에 따라 위협 모델을 자동 생성하는 컨티뉴엄 위협 모델링 기능도 프리뷰로 공개되었습니다.
        &lt;/p&gt;

        &lt;p&gt;
          이 기능들은 AWS 컨티뉴엄의 전체 루프에서 탐지와 분석을 위한 입력 소스로 활용될 수 있습니다.
          즉, 코드 스캐닝은 취약점 후보를 찾고, 펜 테스팅은 실제 공격 가능성을 더 구체적으로 확인하며, 위협 모델링은 설계 단계의 위험을 조기에 식별하는 역할을 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;기능&lt;/th&gt;
              &lt;th&gt;역할&lt;/th&gt;
              &lt;th&gt;활용 시점&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;컨티뉴엄 코드 스캐닝&lt;/td&gt;
              &lt;td&gt;코드와 저장소에서 취약점 후보를 탐지합니다.&lt;/td&gt;
              &lt;td&gt;개발, 커밋, 배포 전 점검 단계&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;컨티뉴엄 펜 테스팅&lt;/td&gt;
              &lt;td&gt;공격 가능성과 악용 경로를 더 현실적으로 검증합니다.&lt;/td&gt;
              &lt;td&gt;주요 릴리스 전, 고위험 취약점 검증 단계&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;컨티뉴엄 위협 모델링&lt;/td&gt;
              &lt;td&gt;설계 문서와 소스 코드를 기반으로 위협 모델을 생성합니다.&lt;/td&gt;
              &lt;td&gt;기획, 설계, 아키텍처 리뷰 단계&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자 입장에서 봐야 할 변화&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄의 등장은 보안 운영 방식이 “탐지 후 수동 처리”에서 “탐지, 판단, 검증, 해결까지 이어지는 자동화 루프”로 이동하고 있음을 보여줍니다.
          관리자 입장에서는 도구 자체보다 운영 프로세스를 어떻게 바꿀 것인지가 더 중요합니다.
          자동화 솔루션이 도입되어도 승인 체계, 책임 범위, 변경 관리, 롤백 절차가 준비되어 있지 않으면 실제 효과는 제한될 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          관리자 점검 질문&lt;br&gt;
          자동 조치가 가능한 취약점과 사람이 승인해야 하는 취약점을 구분했는가?&lt;br&gt;
          코드 패치가 자동 생성될 경우 리뷰와 테스트 절차는 어떻게 운영할 것인가?&lt;br&gt;
          네트워크나 권한 정책 변경이 자동 권고될 때 승인자는 누구인가?&lt;br&gt;
          운영 장애 발생 시 롤백 경로가 명확한가?&lt;br&gt;
          보안팀, 개발팀, 인프라팀의 역할과 책임이 정리되어 있는가?
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기대 효과&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄이 목표로 하는 가장 큰 효과는 취약점 대응 속도 향상입니다.
          취약점이 빠르게 발견되는 시대에는 발견 속도만큼 해결 속도도 중요해집니다.
          단순히 취약점 목록을 늘리는 것이 아니라, 실제 위험을 줄이는 방향으로 자동화가 연결되어야 보안 운영의 병목을 줄일 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;기대 효과&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;취약점 백로그 감소&lt;/td&gt;
              &lt;td&gt;실제 위험 기준으로 우선순위를 정해 처리 효율을 높일 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;오탐 대응 부담 감소&lt;/td&gt;
              &lt;td&gt;샌드박스 검증을 통해 재현 가능한 증거를 확보할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개발팀 협업 개선&lt;/td&gt;
              &lt;td&gt;단순 경고가 아니라 수정 근거와 패치 방향을 함께 제공할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 리스크 통제&lt;/td&gt;
              &lt;td&gt;권고안 검증과 롤백 경로를 함께 고려해 자동화 위험을 낮출 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;보안 운영 전환&lt;/td&gt;
              &lt;td&gt;대시보드 관찰 중심에서 해결 중심의 보안 운영으로 전환할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;도입 시 주의할 점&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 제한된 프리뷰 단계이므로 모든 조직이 즉시 운영 환경에 적용할 수 있는 성숙한 정식 서비스로 판단하기는 이릅니다.
          또한 자동화 수준이 높아질수록 잘못된 판단이 운영 시스템에 영향을 줄 가능성도 함께 고려해야 합니다.
          따라서 초기에는 학습 모드로 결과를 검토하고, 낮은 위험 영역부터 자동화 범위를 확대하는 방식이 안전합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          보안 자동화는 속도를 높이는 도구이지만, 책임을 자동화하는 도구는 아닙니다.&lt;br&gt;
          자동 조치의 승인 기준, 변경 이력, 예외 처리, 롤백 절차는 조직 내부에서 명확히 정의해야 합니다.&lt;br&gt;
          특히 금융, 자동차, 기술 기업처럼 규제와 안정성이 중요한 환경에서는 자동화 범위를 단계적으로 확대하는 것이 좋습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;AWS 컨티뉴엄이 의미하는 보안 운영의 방향&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 보안 도구가 단순히 문제를 알려주는 단계에서 벗어나, 문제를 이해하고 검증하며 해결까지 이어지는 방향으로 진화하고 있음을 보여줍니다.
          이는 클라우드 보안, 애플리케이션 보안, 코드 보안, 위협 모델링이 점점 하나의 흐름으로 통합되고 있다는 의미이기도 합니다.
        &lt;/p&gt;

        &lt;p&gt;
          앞으로 보안팀은 취약점 목록을 수동으로 분류하는 역할보다, 자동화 시스템의 판단 기준을 설계하고 고위험 의사결정을 통제하는 역할에 더 집중하게 될 가능성이 큽니다.
          개발팀 역시 보안팀이 전달한 티켓을 단순 처리하는 방식에서 벗어나, 코드 작성과 배포 과정에서 자동 보안 검증을 자연스럽게 포함하는 방식으로 변화할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          AWS 컨티뉴엄은 코드 취약점의 발견부터 우선순위화, 검증, 완화와 해결까지 전 과정을 자동화하려는 AWS의 보안 서비스입니다.
          정형 데이터와 비정형 데이터를 함께 분석하고, 실제 배포 여부와 외부 노출 가능성, 비즈니스 영향도를 고려해 취약점 대응 우선순위를 정하는 것이 핵심입니다.
        &lt;/p&gt;

        &lt;p&gt;
          이 서비스는 제한된 프리뷰 단계에서 시작되며, 초기에는 사람이 권고 근거를 확인하는 학습 모드로 운영되고 이후 신뢰가 쌓이면 자동 적용 모드로 확장될 수 있습니다.
          중요한 것은 자동화 자체가 아니라, 자동화된 판단을 조직의 변경 관리와 보안 거버넌스 안에 어떻게 안전하게 넣을 것인가입니다.
          AWS 컨티뉴엄은 보안 운영이 앞으로 탐지 중심에서 해결 중심으로 이동할 가능성을 보여주는 사례라고 볼 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/aws-continuum-security-automation#blogposting&quot;,
        &quot;headline&quot;: &quot;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&quot;,
        &quot;description&quot;: &quot;AWS 컨티뉴엄의 개념과 코드 취약점 발견, 우선순위화, 검증, 완화까지 이어지는 보안 자동화 흐름을 관리자 관점에서 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/aws-continuum-security-automation&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-aws-continuum-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;AWS 컨티뉴엄&quot;,
          &quot;AWS Continuum&quot;,
          &quot;보안 자동화&quot;,
          &quot;코드 취약점&quot;,
          &quot;클라우드 보안&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/aws-continuum-security-automation#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;클라우드 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/category/cloud-security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;AWS 컨티뉴엄이 바꾸는 보안 자동화의 흐름&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: AWS 컨티뉴엄, AWS Continuum, 보안자동화, 코드취약점, 취약점관리, 보안운영, 프런티어모델, 위협모델링, 코드스캐닝, 클라우드보안 --&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AWS Continuum</category>
      <category>AWS 컨티뉴엄</category>
      <category>보안운영</category>
      <category>보안자동화</category>
      <category>위협모델링</category>
      <category>취약점관리</category>
      <category>코드스캐닝</category>
      <category>코드취약점</category>
      <category>클라우드보안</category>
      <category>프런티어모델</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/563</guid>
      <comments>https://togethergrow.tistory.com/entry/AWS-%EC%BB%A8%ED%8B%B0%EB%89%B4%EC%97%84%EC%9D%B4-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%B3%B4%EC%95%88-%EC%9E%90%EB%8F%99%ED%99%94%EC%9D%98-%ED%9D%90%EB%A6%84#entry563comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:47:19 +0900</pubDate>
    </item>
    <item>
      <title>ISP란 무엇이며 기업에서 필요한 이유</title>
      <link>https://togethergrow.tistory.com/entry/ISP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EA%B8%B0%EC%97%85%EC%97%90%EC%84%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;IT ISP란 무엇이며 기업에서 필요한 이유&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;IT ISP의 개념과 추진 목적, 주요 산출물, 수립 절차, 실무에서 주의해야 할 점을 관리자 관점에서 쉽게 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;IT ISP,ISP,정보화전략계획,IT전략,정보시스템,디지털전환,업무혁신,시스템구축,IT로드맵,정보화계획&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;IT ISP란 무엇이며 기업에서 필요한 이유&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;IT ISP의 정의, 추진 배경, 주요 산출물, 수립 절차와 실무 관리 포인트를 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-it-isp-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/it-isp-strategy-plan&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;IT ISP란 무엇이며 기업에서 필요한 이유&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;정보화전략계획인 IT ISP가 무엇인지, 왜 필요한지, 어떻게 수립하는지 실무 관점에서 설명합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-it-isp-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;IT ISP란 무엇이며 기업에서 필요한 이유&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          IT ISP는 Information Strategy Planning의 약자로, 조직의 업무 목표와 경영 전략에 맞춰 정보시스템의 미래 방향을 수립하는 정보화전략계획입니다.&lt;br&gt;
          단순히 시스템을 새로 만들기 위한 문서가 아니라, 현재 업무와 시스템의 문제를 진단하고 앞으로 어떤 IT 투자를 어떤 순서로 진행할지 정하는 전략 작업입니다.&lt;br&gt;
          실무 기준으로 보면 IT ISP는 “무엇을 개발할 것인가”보다 “왜 개발해야 하며, 어떤 우선순위로 추진할 것인가”를 결정하는 기준이 됩니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP란?&lt;/h2&gt;

        &lt;p&gt;
          IT ISP는 조직의 업무, 데이터, 시스템, 인프라, 보안, 운영 체계를 종합적으로 분석해 향후 정보화 방향과 실행 계획을 세우는 활동입니다.
          보통 한국어로는 정보화전략계획이라고 부르며, 기업이나 공공기관에서 대형 시스템 구축 전에 많이 수행합니다.
          기존 시스템이 오래되었거나, 업무 프로세스가 복잡해졌거나, 디지털 전환이 필요한 경우 IT ISP를 통해 전체 방향을 먼저 정리합니다.
        &lt;/p&gt;

        &lt;p&gt;
          IT ISP의 핵심은 현재 상태를 객관적으로 파악하고, 목표 상태를 정의한 뒤, 그 차이를 줄이기 위한 과제를 도출하는 것입니다.
          예를 들어 여러 부서가 각자 다른 시스템을 사용해 데이터가 중복되고 보고 기준이 다르다면, ISP에서는 업무 흐름과 데이터 구조를 분석해 통합 방향을 제시할 수 있습니다.
          이 과정에서 단기 개선 과제와 중장기 시스템 구축 과제가 함께 정리됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP가 필요한 이유&lt;/h2&gt;

        &lt;p&gt;
          시스템 구축을 바로 시작하면 빠르게 진행되는 것처럼 보일 수 있지만, 방향이 불명확하면 개발 과정에서 요구사항 변경과 재작업이 반복됩니다.
          IT ISP는 본격적인 구축 전에 업무 목표, 시스템 범위, 데이터 기준, 추진 우선순위를 정리해 불필요한 투자를 줄이는 역할을 합니다.
          특히 여러 시스템이 얽혀 있거나 조직 간 이해관계가 복잡한 경우에는 ISP 없이 프로젝트를 시작하면 범위 통제가 어려워질 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;필요 상황&lt;/th&gt;
              &lt;th&gt;ISP가 하는 역할&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;기존 시스템이 노후화된 경우&lt;/td&gt;
              &lt;td&gt;현 시스템의 한계와 개선 방향을 정리하고 재구축 범위를 판단합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;업무 프로세스가 복잡한 경우&lt;/td&gt;
              &lt;td&gt;업무 흐름을 분석해 표준화와 자동화 대상을 도출합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터가 부서별로 흩어진 경우&lt;/td&gt;
              &lt;td&gt;기준 데이터와 데이터 통합 방향을 수립합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;대규모 IT 투자가 필요한 경우&lt;/td&gt;
              &lt;td&gt;투자 우선순위, 예산, 단계별 추진 로드맵을 제시합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;디지털 전환을 추진하는 경우&lt;/td&gt;
              &lt;td&gt;업무 혁신과 IT 전환 과제를 연결해 실행 계획을 만듭니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP와 일반 시스템 구축의 차이&lt;/h2&gt;

        &lt;p&gt;
          IT ISP는 시스템을 직접 개발하는 프로젝트와 목적이 다릅니다.
          시스템 구축 프로젝트가 실제 화면, 기능, 데이터베이스, 인터페이스를 만드는 일이라면, ISP는 그 전에 어떤 시스템을 어떤 방향으로 구축해야 하는지 결정하는 일입니다.
          따라서 ISP 결과가 부실하면 이후 구축 프로젝트의 범위와 일정, 예산이 흔들릴 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;IT ISP&lt;/th&gt;
              &lt;th&gt;시스템 구축&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;목적&lt;/td&gt;
              &lt;td&gt;정보화 방향과 추진 과제 수립&lt;/td&gt;
              &lt;td&gt;실제 시스템 구현과 오픈&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;중심 질문&lt;/td&gt;
              &lt;td&gt;무엇을, 왜, 어떤 순서로 추진할 것인가&lt;/td&gt;
              &lt;td&gt;정의된 요구사항을 어떻게 구현할 것인가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 산출물&lt;/td&gt;
              &lt;td&gt;현황 분석서, 개선 과제, 목표 모델, 로드맵&lt;/td&gt;
              &lt;td&gt;설계서, 프로그램, DB, 테스트 결과, 운영 매뉴얼&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;참여자&lt;/td&gt;
              &lt;td&gt;현업, IT 기획, 경영진, 컨설턴트, 아키텍트&lt;/td&gt;
              &lt;td&gt;PM, 분석가, 설계자, 개발자, 테스터, 운영자&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;결과 성격&lt;/td&gt;
              &lt;td&gt;전략과 계획 중심&lt;/td&gt;
              &lt;td&gt;구현과 실행 중심&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP의 주요 수행 절차&lt;/h2&gt;

        &lt;p&gt;
          IT ISP는 보통 현황 분석, 개선 방향 수립, 목표 모델 정의, 실행 과제 도출, 로드맵 수립 순서로 진행됩니다.
          조직 규모와 프로젝트 성격에 따라 세부 단계는 달라질 수 있지만, 현재 상태와 목표 상태를 비교해 실행 가능한 계획으로 만드는 흐름은 비슷합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          IT ISP 일반 절차&lt;br&gt;
          1. 사업 목표와 추진 배경 확인&lt;br&gt;
          2. 현행 업무와 시스템 분석&lt;br&gt;
          3. 문제점과 개선 기회 도출&lt;br&gt;
          4. 목표 업무 모델과 목표 시스템 구조 정의&lt;br&gt;
          5. 정보화 과제와 우선순위 선정&lt;br&gt;
          6. 단계별 추진 로드맵 수립&lt;br&gt;
          7. 예산, 일정, 조직, 리스크 검토
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;현황 분석 단계에서 보는 것&lt;/h2&gt;

        &lt;p&gt;
          현황 분석은 IT ISP의 출발점입니다.
          현재 업무가 어떻게 흘러가는지, 어떤 시스템을 사용하고 있는지, 데이터가 어디서 생성되고 어디로 전달되는지, 사용자가 어떤 불편을 겪는지 확인합니다.
          관리자 입장에서 이 단계는 단순 인터뷰가 아니라 실제 문제의 원인을 찾는 과정으로 봐야 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;분석 영역&lt;/th&gt;
              &lt;th&gt;확인 내용&lt;/th&gt;
              &lt;th&gt;대표 질문&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;업무&lt;/td&gt;
              &lt;td&gt;업무 절차, 승인 흐름, 수작업, 중복 입력&lt;/td&gt;
              &lt;td&gt;어떤 업무가 가장 오래 걸리고 반복되는가?&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;시스템&lt;/td&gt;
              &lt;td&gt;사용 중인 시스템, 기능 중복, 노후도, 장애 이력&lt;/td&gt;
              &lt;td&gt;현재 시스템으로 처리하기 어려운 업무는 무엇인가?&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터&lt;/td&gt;
              &lt;td&gt;기준 데이터, 데이터 품질, 중복 관리, 보고 기준&lt;/td&gt;
              &lt;td&gt;부서마다 같은 지표를 다르게 보고 있지는 않은가?&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;인프라&lt;/td&gt;
              &lt;td&gt;서버, 네트워크, 클라우드, 보안, 운영 환경&lt;/td&gt;
              &lt;td&gt;확장성과 안정성에 문제가 없는가?&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;조직&lt;/td&gt;
              &lt;td&gt;IT 운영 인력, 의사결정 구조, 협업 방식&lt;/td&gt;
              &lt;td&gt;시스템 개선 요청과 승인 체계가 명확한가?&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;목표 모델과 정보화 과제&lt;/h2&gt;

        &lt;p&gt;
          현황 분석이 끝나면 목표 모델을 정의합니다.
          목표 모델은 앞으로 조직이 어떤 업무 방식과 시스템 구조를 가져야 하는지 설명하는 그림과 기준입니다.
          여기에는 목표 업무 프로세스, 목표 시스템 구성, 데이터 관리 방향, 연계 구조, 보안과 운영 체계가 포함될 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          목표 모델이 정리되면 이를 달성하기 위한 정보화 과제를 도출합니다.
          예를 들어 통합 포털 구축, 데이터 표준화, 업무 자동화, 모바일 서비스 도입, 노후 시스템 재구축, 클라우드 전환, 보안 체계 개선 등이 과제로 나올 수 있습니다.
          중요한 것은 과제를 많이 만드는 것이 아니라, 조직의 목표와 연결되는 과제를 우선순위 있게 선정하는 것입니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          정보화 과제 예시&lt;br&gt;
          고객 정보 통합 관리 체계 수립&lt;br&gt;
          노후 업무 시스템 재구축&lt;br&gt;
          데이터 표준화와 품질 관리 체계 도입&lt;br&gt;
          전자결재와 업무 시스템 연계 개선&lt;br&gt;
          대시보드 기반 경영 정보 제공&lt;br&gt;
          클라우드 기반 인프라 전환 검토&lt;br&gt;
          보안 접근 통제와 로그 관리 강화
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP의 주요 산출물&lt;/h2&gt;

        &lt;p&gt;
          IT ISP의 산출물은 이후 시스템 구축이나 예산 확보의 근거가 됩니다.
          따라서 문서가 보기 좋게 정리되어 있는 것보다, 실제 의사결정에 필요한 내용이 명확히 담겨 있는지가 중요합니다.
          운영 환경에서는 산출물이 추상적이면 후속 프로젝트에서 다시 분석을 반복하게 됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;산출물&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
              &lt;th&gt;활용 목적&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;현황 분석서&lt;/td&gt;
              &lt;td&gt;현재 업무, 시스템, 데이터, 인프라의 문제점 정리&lt;/td&gt;
              &lt;td&gt;개선 필요성 설명&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개선 과제 목록&lt;/td&gt;
              &lt;td&gt;업무 개선, 시스템 개선, 데이터 개선 과제 정리&lt;/td&gt;
              &lt;td&gt;추진 대상 선정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;목표 모델&lt;/td&gt;
              &lt;td&gt;목표 업무 구조와 목표 시스템 구조 정의&lt;/td&gt;
              &lt;td&gt;미래 방향 공유&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;시스템 구성 방향&lt;/td&gt;
              &lt;td&gt;신규 구축, 재구축, 통합, 연계, 클라우드 전환 방향&lt;/td&gt;
              &lt;td&gt;기술 전략 수립&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;추진 로드맵&lt;/td&gt;
              &lt;td&gt;단기, 중기, 장기 단계별 실행 계획&lt;/td&gt;
              &lt;td&gt;예산과 일정 계획&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;투자 계획&lt;/td&gt;
              &lt;td&gt;예상 비용, 우선순위, 기대 효과&lt;/td&gt;
              &lt;td&gt;경영진 보고와 예산 확보&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;ISP 로드맵을 수립하는 기준&lt;/h2&gt;

        &lt;p&gt;
          ISP에서 도출된 과제는 한 번에 모두 추진하기 어렵습니다.
          그래서 업무 중요도, 시급성, 기술 난이도, 예산, 조직 수용성, 선후행 관계를 기준으로 우선순위를 정합니다.
          예를 들어 데이터 표준화가 선행되지 않으면 통합 대시보드나 AI 분석 과제를 제대로 추진하기 어려울 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;우선순위 기준&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;검토 예시&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;업무 효과&lt;/td&gt;
              &lt;td&gt;조직의 핵심 업무 개선에 얼마나 기여하는지&lt;/td&gt;
              &lt;td&gt;처리 시간 단축, 오류 감소, 고객 만족도 개선&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;시급성&lt;/td&gt;
              &lt;td&gt;법, 제도, 장애, 노후화 등으로 빠르게 대응해야 하는지&lt;/td&gt;
              &lt;td&gt;지원 종료 시스템, 보안 취약점, 규제 대응&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;선후행 관계&lt;/td&gt;
              &lt;td&gt;다른 과제의 기반이 되는지&lt;/td&gt;
              &lt;td&gt;데이터 표준화 후 통합 분석 시스템 구축&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;실행 가능성&lt;/td&gt;
              &lt;td&gt;예산, 인력, 조직 협조가 가능한지&lt;/td&gt;
              &lt;td&gt;현업 참여 가능 여부, 운영 인력 확보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 리스크&lt;/td&gt;
              &lt;td&gt;기술 난이도와 전환 위험이 어느 정도인지&lt;/td&gt;
              &lt;td&gt;레거시 전환, 대용량 데이터 이전, 외부 연계 변경&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP를 할 때 자주 하는 실수&lt;/h2&gt;

        &lt;p&gt;
          IT ISP에서 가장 흔한 실수는 시스템 목록과 개선 요청을 모아놓고 전략이라고 부르는 것입니다.
          ISP는 단순한 요구사항 수집이 아니라 조직의 목표와 IT 투자 방향을 연결하는 작업입니다.
          요구사항을 많이 모았더라도 우선순위와 실행 구조가 없으면 후속 프로젝트에서 혼란이 발생할 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          ISP 결과가 “전체 시스템을 고도화한다”처럼 추상적인 표현으로만 끝나면 실행력이 떨어집니다.&lt;br&gt;
          어떤 업무를 먼저 바꾸고, 어떤 시스템을 어떤 단계에서 개선하며, 어떤 데이터 기준을 적용할지 구체화해야 합니다.&lt;br&gt;
          특히 예산과 일정, 조직 역할이 빠진 ISP는 실제 구축 프로젝트로 연결되기 어렵습니다.
        &lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;실수&lt;/th&gt;
              &lt;th&gt;문제점&lt;/th&gt;
              &lt;th&gt;개선 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;현업 인터뷰에만 의존&lt;/td&gt;
              &lt;td&gt;개인 의견 중심으로 과제가 왜곡될 수 있습니다.&lt;/td&gt;
              &lt;td&gt;업무 데이터, 시스템 로그, 장애 이력, 운영 지표를 함께 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 검토 부족&lt;/td&gt;
              &lt;td&gt;후속 구축 단계에서 아키텍처 변경이 발생할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;TA, 보안, 인프라, 데이터 담당자를 ISP 단계부터 참여시킵니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;우선순위 부재&lt;/td&gt;
              &lt;td&gt;모든 과제가 중요해 보여 실행 순서를 정하기 어렵습니다.&lt;/td&gt;
              &lt;td&gt;효과, 시급성, 선후행 관계, 실행 가능성 기준으로 평가합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;예산 현실성 부족&lt;/td&gt;
              &lt;td&gt;계획은 크지만 실제 추진이 지연될 수 있습니다.&lt;/td&gt;
              &lt;td&gt;단계별 예산과 최소 실행 단위를 함께 제시합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 전환 고려 부족&lt;/td&gt;
              &lt;td&gt;새 시스템 구축 후 운영 조직이 감당하기 어렵습니다.&lt;/td&gt;
              &lt;td&gt;운영 인력, 교육, 유지보수, 장애 대응 체계를 포함합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자 입장에서 확인해야 할 질문&lt;/h2&gt;

        &lt;p&gt;
          관리자 입장에서 IT ISP를 검토할 때는 문서의 분량보다 의사결정에 필요한 답을 주는지 확인해야 합니다.
          특히 현황 분석, 목표 모델, 과제 우선순위, 예산, 일정, 리스크가 서로 연결되어 있어야 합니다.
          보고서가 화려해도 실행 계획이 불명확하면 실제 프로젝트로 이어지기 어렵습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          ISP 검토 질문&lt;br&gt;
          현재 문제의 원인이 업무, 시스템, 데이터 중 어디에 있는가?&lt;br&gt;
          목표 모델이 조직의 사업 방향과 연결되어 있는가?&lt;br&gt;
          과제별 우선순위 산정 기준이 명확한가?&lt;br&gt;
          단기 과제와 중장기 과제가 구분되어 있는가?&lt;br&gt;
          예산과 일정이 현실적인가?&lt;br&gt;
          후속 구축 프로젝트의 범위가 명확한가?&lt;br&gt;
          보안, 인프라, 운영 전환 리스크가 반영되어 있는가?
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP 이후에는 무엇을 하나?&lt;/h2&gt;

        &lt;p&gt;
          IT ISP가 끝나면 보통 후속으로 예산 확보, 제안요청서 작성, 시스템 구축 사업 발주, 상세 분석과 설계가 이어집니다.
          ISP 결과는 RFP의 기반 자료가 되기도 하고, 내부 투자 심의나 경영진 의사결정 자료로 활용되기도 합니다.
          따라서 ISP 산출물은 후속 사업자가 바로 이해할 수 있을 정도로 범위와 우선순위가 명확해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;IT ISP 이후 일반 흐름

1. ISP 결과 보고 및 의사결정
2. 추진 과제 확정
3. 예산 확보
4. RFP 또는 과업지시서 작성
5. 시스템 구축 사업 착수
6. 상세 분석 및 설계
7. 개발, 테스트, 이행
8. 운영 안정화&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          ISP와 구축 프로젝트 사이의 연결이 약하면, 구축 단계에서 다시 범위 논의가 반복됩니다.
          따라서 ISP 종료 시점에는 “무엇을 구축할 것인지”, “어디까지가 범위인지”, “무엇을 먼저 할 것인지”가 명확해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;IT ISP와 EA, BPR의 관계&lt;/h2&gt;

        &lt;p&gt;
          IT ISP를 이야기할 때 EA와 BPR도 함께 언급되는 경우가 많습니다.
          EA는 Enterprise Architecture로 조직의 업무, 데이터, 애플리케이션, 기술 구조를 체계적으로 정의하는 아키텍처 관점입니다.
          BPR은 Business Process Reengineering으로 업무 프로세스를 근본적으로 재설계하는 활동입니다.
        &lt;/p&gt;

        &lt;p&gt;
          ISP는 이들과 완전히 분리된 개념이라기보다, 업무 혁신과 IT 구조 개선을 하나의 실행 계획으로 연결하는 역할을 합니다.
          BPR이 업무 프로세스 개선에 더 초점을 둔다면, EA는 구조와 표준에 초점을 두고, ISP는 정보화 전략과 추진 로드맵에 초점을 둔다고 볼 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;핵심 관점&lt;/th&gt;
              &lt;th&gt;ISP와의 관계&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;ISP&lt;/td&gt;
              &lt;td&gt;정보화 전략과 실행 로드맵&lt;/td&gt;
              &lt;td&gt;IT 투자 방향과 추진 과제를 정리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;EA&lt;/td&gt;
              &lt;td&gt;업무, 데이터, 애플리케이션, 기술 구조&lt;/td&gt;
              &lt;td&gt;목표 아키텍처와 표준 구조 수립에 활용됩니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;BPR&lt;/td&gt;
              &lt;td&gt;업무 프로세스 혁신&lt;/td&gt;
              &lt;td&gt;업무 개선 과제와 목표 프로세스 정의에 활용됩니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          IT ISP는 조직의 사업 목표와 업무 방향에 맞춰 정보시스템의 미래 모습을 설계하고, 이를 실행하기 위한 단계별 계획을 수립하는 정보화전략계획입니다.
          단순히 시스템 구축을 위한 사전 문서가 아니라, 현재 문제를 분석하고 목표 모델과 정보화 과제, 추진 로드맵을 정하는 전략 활동입니다.
        &lt;/p&gt;

        &lt;p&gt;
          좋은 IT ISP는 현황 분석, 목표 모델, 개선 과제, 우선순위, 예산, 일정, 리스크가 서로 연결되어 있습니다.
          또한 후속 시스템 구축 프로젝트가 바로 이어질 수 있도록 범위와 실행 순서를 명확히 제시합니다.
          IT 투자가 커질수록 ISP는 선택 사항이 아니라 실패 비용을 줄이기 위한 중요한 출발점이 됩니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/it-isp-strategy-plan#blogposting&quot;,
        &quot;headline&quot;: &quot;IT ISP란 무엇이며 기업에서 필요한 이유&quot;,
        &quot;description&quot;: &quot;IT ISP의 개념과 추진 목적, 주요 산출물, 수립 절차, 실무에서 주의해야 할 점을 관리자 관점에서 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/it-isp-strategy-plan&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-it-isp-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;IT ISP&quot;,
          &quot;정보화전략계획&quot;,
          &quot;IT 전략&quot;,
          &quot;정보시스템&quot;,
          &quot;디지털 전환&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/it-isp-strategy-plan#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;IT 기획&quot;,
            &quot;item&quot;: &quot;https://example.com/category/it-planning&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;IT ISP란 무엇이며 기업에서 필요한 이유&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: IT ISP, ISP, 정보화전략계획, IT전략, 정보시스템, 디지털전환, 업무혁신, 시스템구축, IT로드맵, 정보화계획 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>ISP</category>
      <category>IT ISP</category>
      <category>IT로드맵</category>
      <category>it전략</category>
      <category>디지털전환</category>
      <category>시스템구축</category>
      <category>업무혁신</category>
      <category>정보시스템</category>
      <category>정보화계획</category>
      <category>정보화전략계획</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/562</guid>
      <comments>https://togethergrow.tistory.com/entry/ISP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EA%B8%B0%EC%97%85%EC%97%90%EC%84%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0#entry562comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:43:58 +0900</pubDate>
    </item>
    <item>
      <title>서버 포트 오픈 시 단방향과 양방향을 이해하는 방법</title>
      <link>https://togethergrow.tistory.com/entry/%EC%84%9C%EB%B2%84-%ED%8F%AC%ED%8A%B8-%EC%98%A4%ED%94%88-%EC%8B%9C-%EB%8B%A8%EB%B0%A9%ED%96%A5%EA%B3%BC-%EC%96%91%EB%B0%A9%ED%96%A5%EC%9D%84-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;관리자 입장에서 네트워크 또는 보안 담당자에게 서버 포트 오픈을 요청할 때 단방향과 양방향의 차이, 확인 방법, 요청 기준을 실무 중심으로 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;포트오픈,단방향,양방향,네트워크보안,방화벽정책,서버포트,서비스포트,연결테스트,인바운드,아웃바운드&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;서버 포트 오픈 요청에서 단방향과 양방향이 무엇인지, 실제 오픈 상태를 어떻게 확인하는지 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-network-port-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/network-port-one-way-two-way-open&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;방화벽 정책 요청 시 단방향과 양방향의 차이를 이해하고 포트 오픈 상태를 점검하는 방법을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-network-port-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          서버 포트 오픈을 요청할 때 단방향과 양방향을 정확히 구분하지 못하면 방화벽 정책이 과하게 열리거나, 반대로 서비스가 정상 연결되지 않을 수 있습니다.&lt;br&gt;
          단방향은 한쪽에서 다른 한쪽으로 접속을 시작하는 방향만 허용하는 방식이고, 양방향은 양쪽 모두가 서로 접속을 시작할 수 있도록 허용하는 방식입니다.&lt;br&gt;
          관리자 입장에서 중요한 것은 “통신이 된다”가 아니라 “누가 먼저 접속을 시작하는가”와 “어느 서버의 어느 포트를 열어야 하는가”를 명확히 설명하는 것입니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;포트 오픈에서 방향성이 중요한 이유&lt;/h2&gt;

        &lt;p&gt;
          서버 간 통신을 위해 네트워크 또는 보안 담당자에게 포트 오픈을 요청할 때 자주 나오는 표현이 단방향과 양방향입니다.
          단순히 “A 서버와 B 서버 통신이 필요합니다”라고 요청하면 보안 담당자는 출발지, 목적지, 목적지 포트, 프로토콜, 접속 방향을 다시 확인해야 합니다.
          방화벽 정책은 대부분 출발지에서 목적지로 가는 흐름을 기준으로 관리되기 때문입니다.
        &lt;/p&gt;

        &lt;p&gt;
          포트 오픈에서 방향성을 잘못 이해하면 불필요하게 양방향 정책을 요청하거나, 실제 필요한 반대 방향 정책을 누락할 수 있습니다.
          운영 환경에서는 포트 오픈 하나가 보안 범위와 장애 원인 모두에 영향을 주기 때문에, 단방향과 양방향의 차이를 정확히 알고 요청하는 것이 중요합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;단방향 포트 오픈이란?&lt;/h2&gt;

        &lt;p&gt;
          단방향 포트 오픈은 한쪽 서버가 다른 서버의 특정 포트로 접속을 시작할 수 있도록 허용하는 정책입니다.
          예를 들어 애플리케이션 서버가 DB 서버의 1521 포트로 접속해야 한다면 일반적으로 필요한 정책은 애플리케이션 서버에서 DB 서버 방향의 단방향 오픈입니다.
          이때 DB 서버가 애플리케이션 서버로 별도 접속을 시작하지 않는다면 반대 방향 포트 오픈은 필요하지 않습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;예시&lt;/th&gt;
              &lt;th&gt;의미&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;출발지&lt;/td&gt;
              &lt;td&gt;WEB 서버&lt;/td&gt;
              &lt;td&gt;접속을 시작하는 서버입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;목적지&lt;/td&gt;
              &lt;td&gt;DB 서버&lt;/td&gt;
              &lt;td&gt;접속을 받는 서버입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;목적지 포트&lt;/td&gt;
              &lt;td&gt;1521&lt;/td&gt;
              &lt;td&gt;DB 서버에서 열려 있어야 하는 서비스 포트입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;방향&lt;/td&gt;
              &lt;td&gt;WEB → DB&lt;/td&gt;
              &lt;td&gt;WEB 서버에서 DB 서버로 접속을 시작하는 단방향 통신입니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          단방향 포트 오픈은 응답 패킷이 아예 돌아오지 않는다는 뜻이 아닙니다.&lt;br&gt;
          TCP 연결에서는 접속 요청에 대한 응답 트래픽이 돌아와야 통신이 성립합니다.&lt;br&gt;
          여기서 단방향이라는 말은 “신규 접속을 시작할 수 있는 정책 방향이 한쪽”이라는 의미로 이해하는 것이 정확합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;양방향 포트 오픈이란?&lt;/h2&gt;

        &lt;p&gt;
          양방향 포트 오픈은 A 서버가 B 서버로 접속을 시작할 수 있고, B 서버도 A 서버로 접속을 시작할 수 있도록 양쪽 방향의 방화벽 정책을 허용하는 방식입니다.
          단순히 한 번 연결된 TCP 세션의 응답 트래픽이 오가는 것과는 다릅니다.
          양방향은 양쪽 서버가 각각 클라이언트 역할을 하며 상대방의 특정 포트로 신규 접속을 시작해야 할 때 필요합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;방향&lt;/th&gt;
              &lt;th&gt;예시 정책&lt;/th&gt;
              &lt;th&gt;필요한 경우&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;A → B&lt;/td&gt;
              &lt;td&gt;A 서버에서 B 서버의 443 포트 접속 허용&lt;/td&gt;
              &lt;td&gt;A가 B의 API를 호출합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;B → A&lt;/td&gt;
              &lt;td&gt;B 서버에서 A 서버의 8443 포트 접속 허용&lt;/td&gt;
              &lt;td&gt;B가 A의 콜백 API를 호출합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          예를 들어 A 시스템이 B 시스템의 API를 호출하고, B 시스템도 처리 결과를 A 시스템의 콜백 URL로 호출해야 한다면 양방향 정책이 필요할 수 있습니다.
          다만 양방향이라고 해서 모든 포트를 서로 열어야 한다는 뜻은 아닙니다.
          각 방향마다 목적지 포트와 프로토콜을 명확히 제한해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;단방향과 양방향의 핵심 차이&lt;/h2&gt;

        &lt;p&gt;
          단방향과 양방향을 구분할 때 가장 중요한 기준은 “누가 먼저 연결을 시작하는가”입니다.
          서버 간 데이터가 오간다는 사실만으로 양방향이라고 판단하면 안 됩니다.
          대부분의 TCP 통신은 요청과 응답이 함께 오가지만, 방화벽 정책상 신규 접속 방향은 한쪽일 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;단방향&lt;/th&gt;
              &lt;th&gt;양방향&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;정의&lt;/td&gt;
              &lt;td&gt;한쪽에서만 상대 서버로 신규 접속을 시작합니다.&lt;/td&gt;
              &lt;td&gt;양쪽 모두 상대 서버로 신규 접속을 시작합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;정책 수&lt;/td&gt;
              &lt;td&gt;일반적으로 1개 방향 정책이 필요합니다.&lt;/td&gt;
              &lt;td&gt;일반적으로 2개 방향 정책이 필요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;예시&lt;/td&gt;
              &lt;td&gt;WAS → DB 1521&lt;/td&gt;
              &lt;td&gt;A → B 443, B → A 8443&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;보안 범위&lt;/td&gt;
              &lt;td&gt;상대적으로 제한적입니다.&lt;/td&gt;
              &lt;td&gt;불필요하게 열면 보안 노출 범위가 커질 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;확인 기준&lt;/td&gt;
              &lt;td&gt;출발지에서 목적지 포트 접속 테스트를 수행합니다.&lt;/td&gt;
              &lt;td&gt;양쪽 서버에서 각각 상대 목적지 포트 접속 테스트를 수행합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;포트 오픈 요청 시 반드시 정리할 정보&lt;/h2&gt;

        &lt;p&gt;
          네트워크 또는 보안 담당자에게 포트 오픈을 요청할 때는 “서버끼리 통신하게 해주세요”가 아니라 정책으로 등록 가능한 형태로 정보를 전달해야 합니다.
          최소한 출발지 IP, 목적지 IP, 목적지 포트, 프로토콜, 방향, 사용 목적, 적용 기간이 필요합니다.
          이렇게 정리해야 담당자가 정책을 정확히 등록하고, 추후 감사나 장애 분석 시에도 기준을 확인할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;작성 예시&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;출발지&lt;/td&gt;
              &lt;td&gt;10.10.10.21&lt;/td&gt;
              &lt;td&gt;접속을 시작하는 서버 IP입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;목적지&lt;/td&gt;
              &lt;td&gt;10.20.20.15&lt;/td&gt;
              &lt;td&gt;서비스 포트를 열고 접속을 받는 서버 IP입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;목적지 포트&lt;/td&gt;
              &lt;td&gt;443&lt;/td&gt;
              &lt;td&gt;목적지 서버에서 서비스가 대기하는 포트입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;프로토콜&lt;/td&gt;
              &lt;td&gt;TCP&lt;/td&gt;
              &lt;td&gt;대부분의 웹, DB, API 통신은 TCP를 사용합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;방향&lt;/td&gt;
              &lt;td&gt;WEB → API&lt;/td&gt;
              &lt;td&gt;신규 접속을 시작하는 방향입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;사용 목적&lt;/td&gt;
              &lt;td&gt;주문 API 호출&lt;/td&gt;
              &lt;td&gt;정책 필요성을 설명하는 업무 목적입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;적용 기간&lt;/td&gt;
              &lt;td&gt;상시 또는 2026-07-01까지&lt;/td&gt;
              &lt;td&gt;임시 오픈이면 종료일을 명확히 작성합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          요청 예시&lt;br&gt;
          출발지: 10.10.10.21 WEB 서버&lt;br&gt;
          목적지: 10.20.20.15 API 서버&lt;br&gt;
          프로토콜/포트: TCP 443&lt;br&gt;
          방향: WEB → API 단방향&lt;br&gt;
          목적: 주문 API 호출&lt;br&gt;
          적용 기간: 운영 서비스 상시
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;단방향 오픈 상태 확인 방법&lt;/h2&gt;

        &lt;p&gt;
          단방향 오픈 상태는 출발지 서버에서 목적지 서버의 포트로 접속 테스트를 수행해 확인합니다.
          예를 들어 WEB 서버에서 DB 서버의 1521 포트가 열렸는지 확인하려면 WEB 서버에 접속한 뒤 DB 서버 IP와 1521 포트를 대상으로 테스트해야 합니다.
          목적지 서버에서 테스트하면 방향이 달라질 수 있으므로 반드시 출발지 기준으로 확인해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;Linux에서 nc로 확인&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;# 출발지 서버에서 실행
nc -vz 10.20.20.15 1521

# 성공 예시
Connection to 10.20.20.15 1521 port [tcp/*] succeeded!

# 실패 예시
nc: connect to 10.20.20.15 port 1521 (tcp) failed: Connection timed out&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;Linux에서 telnet으로 확인&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;# 출발지 서버에서 실행
telnet 10.20.20.15 1521

# 연결 성공 시 화면이 전환되거나 Connected 메시지가 표시됩니다.
# 연결 실패 시 timeout, refused 등의 메시지가 표시됩니다.&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;Windows PowerShell에서 확인&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;# 출발지 서버에서 실행
Test-NetConnection 10.20.20.15 -Port 1521

# TcpTestSucceeded 값이 True이면 포트 접속이 가능한 상태입니다.&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          테스트 성공은 네트워크 구간에서 목적지 포트까지 접근이 가능하다는 의미입니다.
          하지만 애플리케이션 로그인, DB 인증, API 응답 정상 여부까지 보장하는 것은 아닙니다.
          포트 오픈 확인과 서비스 정상 확인은 구분해서 봐야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;양방향 오픈 상태 확인 방법&lt;/h2&gt;

        &lt;p&gt;
          양방향 오픈 상태는 양쪽 서버에서 각각 상대방의 목적지 포트로 테스트해야 합니다.
          A 서버에서 B 서버로 접속이 된다고 해서 B 서버에서 A 서버로도 접속이 되는 것은 아닙니다.
          방화벽 정책은 방향별로 관리되므로 양방향 요청을 했다면 두 방향을 따로 검증해야 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 방향&lt;/th&gt;
              &lt;th&gt;테스트 위치&lt;/th&gt;
              &lt;th&gt;테스트 명령 예시&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;A → B&lt;/td&gt;
              &lt;td&gt;A 서버&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;nc -vz 10.20.20.15 443&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;B → A&lt;/td&gt;
              &lt;td&gt;B 서버&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;nc -vz 10.10.10.21 8443&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;pre&gt;&lt;code&gt;# A 서버에서 B 서버 443 포트 확인
nc -vz 10.20.20.15 443

# B 서버에서 A 서버 8443 포트 확인
nc -vz 10.10.10.21 8443&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          양방향 확인 시 같은 포트를 양쪽에서 열어야 한다고 오해하는 경우가 많습니다.&lt;br&gt;
          실제로는 A가 B의 443 포트를 호출하고, B가 A의 8443 포트를 호출하는 것처럼 방향별 목적지 포트가 다를 수 있습니다.&lt;br&gt;
          따라서 “양방향”이라는 말만 쓰지 말고 각 방향의 출발지, 목적지, 포트를 따로 적어야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;포트가 막힌 것인지 서비스가 안 뜬 것인지 구분하기&lt;/h2&gt;

        &lt;p&gt;
          포트 테스트가 실패했다고 해서 항상 방화벽 문제라고 단정할 수는 없습니다.
          목적지 서버에서 해당 서비스가 실제로 포트를 열고 대기 중인지, 서버 자체 방화벽이 막고 있는지, 라우팅이 가능한지, 중간 보안 장비에서 차단되는지 구분해야 합니다.
          실제 사용 시에는 네트워크 담당자와 서버 담당자가 함께 확인해야 빠르게 원인을 좁힐 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;증상&lt;/th&gt;
              &lt;th&gt;가능한 원인&lt;/th&gt;
              &lt;th&gt;확인 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Connection timed out&lt;/td&gt;
              &lt;td&gt;방화벽 차단, 라우팅 문제, 중간 구간 차단&lt;/td&gt;
              &lt;td&gt;출발지 기준 정책 등록 여부와 네트워크 경로를 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Connection refused&lt;/td&gt;
              &lt;td&gt;목적지 서버는 도달했지만 해당 포트에서 서비스가 대기하지 않음&lt;/td&gt;
              &lt;td&gt;목적지 서버에서 서비스 리스닝 상태를 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;No route to host&lt;/td&gt;
              &lt;td&gt;라우팅 또는 네트워크 경로 문제&lt;/td&gt;
              &lt;td&gt;게이트웨이, 라우팅 테이블, 네트워크 대역 접근성을 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;접속은 되지만 로그인 실패&lt;/td&gt;
              &lt;td&gt;계정, 인증, 애플리케이션 설정 문제&lt;/td&gt;
              &lt;td&gt;포트 오픈이 아니라 서비스 인증 설정을 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;h3&gt;목적지 서버에서 포트 리스닝 확인&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;# Linux
ss -lntp | grep ':1521'
netstat -lntp | grep ':1521'

# Windows
netstat -ano | findstr :1521&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          목적지 서버에서 포트가 리스닝 중이지 않으면 방화벽을 열어도 접속은 성공하지 않습니다.
          반대로 목적지 서버에서 정상 리스닝 중인데 출발지에서 timeout이 발생한다면 네트워크 방화벽, 서버 방화벽, 라우팅 정책을 우선 확인해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자가 헷갈리기 쉬운 표현&lt;/h2&gt;

        &lt;p&gt;
          포트 오픈 요청에서 가장 많이 헷갈리는 표현은 “양방향 통신”입니다.
          애플리케이션에서 요청과 응답 데이터가 오간다는 의미로 양방향이라고 말하는 경우가 있지만, 방화벽 정책에서는 신규 접속을 시작하는 방향을 기준으로 판단합니다.
          따라서 요청서에는 기술적인 방향성을 기준으로 작성해야 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;표현&lt;/th&gt;
              &lt;th&gt;오해&lt;/th&gt;
              &lt;th&gt;정확한 해석&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;데이터가 서로 오간다&lt;/td&gt;
              &lt;td&gt;무조건 양방향 포트 오픈이 필요하다고 생각함&lt;/td&gt;
              &lt;td&gt;요청과 응답은 단방향 정책에서도 정상적으로 오갈 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;서버끼리 통신한다&lt;/td&gt;
              &lt;td&gt;출발지와 목적지를 구분하지 않음&lt;/td&gt;
              &lt;td&gt;접속을 먼저 시작하는 서버가 출발지입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;양방향으로 열어달라&lt;/td&gt;
              &lt;td&gt;모든 포트를 서로 허용하는 것으로 이해될 수 있음&lt;/td&gt;
              &lt;td&gt;각 방향별 목적지 포트를 따로 명시해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;포트가 열렸다&lt;/td&gt;
              &lt;td&gt;서비스도 정상이라고 판단함&lt;/td&gt;
              &lt;td&gt;포트 접근 가능과 서비스 정상 동작은 별도 검증이 필요합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;서비스별 포트 오픈 예시&lt;/h2&gt;

        &lt;p&gt;
          일반적인 서버 통신에서는 대부분 단방향 포트 오픈으로 충분한 경우가 많습니다.
          다만 콜백, 에이전트 수집, 파일 전송, 복제, 모니터링 방식에 따라 반대 방향 접속이 필요할 수 있습니다.
          아래 예시는 개념 이해를 위한 일반적인 형태이며, 실제 정책은 시스템 구조에 따라 달라질 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;서비스&lt;/th&gt;
              &lt;th&gt;일반적인 방향&lt;/th&gt;
              &lt;th&gt;포트 예시&lt;/th&gt;
              &lt;th&gt;비고&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;웹 서버 접속&lt;/td&gt;
              &lt;td&gt;사용자 또는 L4 → WEB&lt;/td&gt;
              &lt;td&gt;80, 443&lt;/td&gt;
              &lt;td&gt;클라이언트가 웹 서버로 접속을 시작합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;WAS에서 DB 접속&lt;/td&gt;
              &lt;td&gt;WAS → DB&lt;/td&gt;
              &lt;td&gt;1521, 3306, 5432&lt;/td&gt;
              &lt;td&gt;대부분 단방향 정책으로 관리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;API 호출&lt;/td&gt;
              &lt;td&gt;호출 서버 → API 서버&lt;/td&gt;
              &lt;td&gt;443, 8080, 8443&lt;/td&gt;
              &lt;td&gt;콜백이 있으면 반대 방향 정책도 필요할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;모니터링 수집&lt;/td&gt;
              &lt;td&gt;모니터링 서버 → 대상 서버&lt;/td&gt;
              &lt;td&gt;9100, 161, 443&lt;/td&gt;
              &lt;td&gt;수집 방식에 따라 대상 서버 → 모니터링 서버 방향이 필요할 수도 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;파일 전송&lt;/td&gt;
              &lt;td&gt;전송 방식에 따라 다름&lt;/td&gt;
              &lt;td&gt;22, 21, 990&lt;/td&gt;
              &lt;td&gt;SFTP, FTP 모드, 중계 서버 구조에 따라 정책이 달라집니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;방화벽 요청서 작성 예시&lt;/h2&gt;

        &lt;p&gt;
          방화벽 요청서는 담당자가 바로 정책으로 옮길 수 있을 정도로 구체적이어야 합니다.
          특히 양방향 요청은 한 줄로 작성하지 말고 두 개의 단방향 정책으로 나누어 작성하는 것이 안전합니다.
          이렇게 작성하면 누락이나 과도한 오픈을 줄일 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;단방향 요청 예시&lt;/h3&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;출발지&lt;/th&gt;
              &lt;th&gt;목적지&lt;/th&gt;
              &lt;th&gt;프로토콜&lt;/th&gt;
              &lt;th&gt;포트&lt;/th&gt;
              &lt;th&gt;방향&lt;/th&gt;
              &lt;th&gt;목적&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;10.10.10.21&lt;/td&gt;
              &lt;td&gt;10.20.20.15&lt;/td&gt;
              &lt;td&gt;TCP&lt;/td&gt;
              &lt;td&gt;443&lt;/td&gt;
              &lt;td&gt;WEB → API&lt;/td&gt;
              &lt;td&gt;주문 API 호출&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;h3&gt;양방향 요청 예시&lt;/h3&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;출발지&lt;/th&gt;
              &lt;th&gt;목적지&lt;/th&gt;
              &lt;th&gt;프로토콜&lt;/th&gt;
              &lt;th&gt;포트&lt;/th&gt;
              &lt;th&gt;방향&lt;/th&gt;
              &lt;th&gt;목적&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;10.10.10.21&lt;/td&gt;
              &lt;td&gt;10.20.20.15&lt;/td&gt;
              &lt;td&gt;TCP&lt;/td&gt;
              &lt;td&gt;443&lt;/td&gt;
              &lt;td&gt;A → B&lt;/td&gt;
              &lt;td&gt;A 서버에서 B API 호출&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;10.20.20.15&lt;/td&gt;
              &lt;td&gt;10.10.10.21&lt;/td&gt;
              &lt;td&gt;TCP&lt;/td&gt;
              &lt;td&gt;8443&lt;/td&gt;
              &lt;td&gt;B → A&lt;/td&gt;
              &lt;td&gt;B 서버에서 A 콜백 API 호출&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 환경에서의 확인 순서&lt;/h2&gt;

        &lt;p&gt;
          포트 오픈 후에는 요청한 정책이 실제 서비스 흐름과 맞는지 단계적으로 확인해야 합니다.
          단순히 보안 담당자에게 “정책 반영 완료” 답변을 받는 것만으로는 충분하지 않습니다.
          출발지 서버에서 목적지 포트로 접속 테스트를 수행하고, 목적지 서버에서 서비스 리스닝 상태와 애플리케이션 로그를 함께 확인해야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          포트 오픈 확인 순서&lt;br&gt;
          1. 요청서의 출발지, 목적지, 포트, 프로토콜 재확인&lt;br&gt;
          2. 목적지 서버에서 서비스 포트 리스닝 상태 확인&lt;br&gt;
          3. 출발지 서버에서 목적지 포트로 nc, telnet, Test-NetConnection 수행&lt;br&gt;
          4. timeout, refused, 인증 실패 등 오류 유형 구분&lt;br&gt;
          5. 애플리케이션 실제 호출 테스트 수행&lt;br&gt;
          6. 목적지 서버 로그 또는 방화벽 로그에서 접근 기록 확인&lt;br&gt;
          7. 양방향이면 반대 방향도 동일 절차로 검증
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;보안 관점에서의 권장 원칙&lt;/h2&gt;

        &lt;p&gt;
          포트 오픈은 서비스 운영에 필요하지만, 보안 관점에서는 최소 권한 원칙을 지켜야 합니다.
          출발지와 목적지를 대역 전체로 넓게 열거나, 포트를 범위로 크게 허용하거나, 사용 목적이 불명확한 양방향 정책을 만드는 것은 위험합니다.
          실제 사용 시 필요한 서버와 포트만 제한적으로 허용하고, 임시 정책은 종료일을 명확히 두는 것이 좋습니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          방화벽 정책은 “우선 열고 나중에 정리” 방식으로 운영하면 누적 위험이 커집니다.&lt;br&gt;
          임시 테스트용 포트는 종료일을 정하고, 운영 전환 후 불필요한 정책은 정리해야 합니다.&lt;br&gt;
          양방향 정책은 반드시 필요한 경우에만 요청하고, 각 방향별 목적지 포트를 구체적으로 제한해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          서버 포트 오픈에서 단방향은 한쪽 서버가 상대 서버의 특정 포트로 신규 접속을 시작하는 정책입니다.
          양방향은 양쪽 서버가 각각 상대방의 포트로 신규 접속을 시작해야 할 때 두 개 방향의 정책을 허용하는 방식입니다.
          요청과 응답 데이터가 오간다는 이유만으로 양방향 포트 오픈이 필요한 것은 아닙니다.
        &lt;/p&gt;

        &lt;p&gt;
          관리자 입장에서 가장 중요한 것은 출발지, 목적지, 목적지 포트, 프로토콜, 접속 방향, 사용 목적을 명확히 정리하는 것입니다.
          단방향 확인은 출발지 서버에서 목적지 포트로 테스트하고, 양방향 확인은 양쪽 서버에서 각각 상대방 포트로 테스트해야 합니다.
          이렇게 관리하면 불필요한 포트 오픈을 줄이고, 네트워크 장애와 보안 리스크를 함께 낮출 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/network-port-one-way-two-way-open#blogposting&quot;,
        &quot;headline&quot;: &quot;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&quot;,
        &quot;description&quot;: &quot;관리자 입장에서 네트워크 또는 보안 담당자에게 서버 포트 오픈을 요청할 때 단방향과 양방향의 차이, 확인 방법, 요청 기준을 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/network-port-one-way-two-way-open&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-network-port-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;포트 오픈&quot;,
          &quot;단방향 통신&quot;,
          &quot;양방향 통신&quot;,
          &quot;방화벽 정책&quot;,
          &quot;네트워크 보안&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/network-port-one-way-two-way-open#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;인프라&quot;,
            &quot;item&quot;: &quot;https://example.com/category/infra&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;서버 포트 오픈 시 단방향과 양방향을 이해하는 방법&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: 포트오픈, 단방향, 양방향, 네트워크보안, 방화벽정책, 서버포트, 서비스포트, 연결테스트, 인바운드, 아웃바운드 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>네트워크보안</category>
      <category>단방향</category>
      <category>방화벽정책</category>
      <category>서버포트</category>
      <category>서비스포트</category>
      <category>아웃바운드</category>
      <category>양방향</category>
      <category>연결테스트</category>
      <category>인바운드</category>
      <category>포트오픈</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/561</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%84%9C%EB%B2%84-%ED%8F%AC%ED%8A%B8-%EC%98%A4%ED%94%88-%EC%8B%9C-%EB%8B%A8%EB%B0%A9%ED%96%A5%EA%B3%BC-%EC%96%91%EB%B0%A9%ED%96%A5%EC%9D%84-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#entry561comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:40:43 +0900</pubDate>
    </item>
    <item>
      <title>프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유</title>
      <link>https://togethergrow.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-WBS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-TA-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C-%EC%A4%91%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;프로젝트 WBS의 개념과 TA 관점에서 WBS가 중요한 이유, 일정 기간을 유연하게 관리하는 실무 팁을 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;프로젝트 WBS,WBS,TA,기술아키텍트,프로젝트관리,일정관리,업무분해구조,IT프로젝트,리스크관리,산출물관리&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;WBS의 기본 개념부터 TA 관점의 중요성, 일정 기간을 유연하게 관리하는 방법까지 실무 중심으로 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-wbs-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/project-wbs-ta-schedule-management&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;프로젝트 WBS를 TA 관점에서 어떻게 바라보고 일정 리스크를 관리해야 하는지 정리합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-wbs-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .check-box,
      .post-content .warning-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          WBS는 프로젝트의 전체 업무를 단계별, 산출물별, 담당자별로 쪼개어 일정과 범위를 관리하는 구조입니다.&lt;br&gt;
          단순한 일정표가 아니라 프로젝트 범위, 책임, 선후행 관계, 리스크를 한눈에 관리하기 위한 기준표입니다.&lt;br&gt;
          특히 TA 관점에서는 기술 검토, 인프라 준비, 아키텍처 설계, 연계 검증, 성능 점검 같은 보이지 않는 기술 업무를 일정 안에 드러내는 역할을 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;프로젝트 WBS란?&lt;/h2&gt;

        &lt;p&gt;
          WBS는 Work Breakdown Structure의 약자로, 프로젝트에서 수행해야 할 일을 작은 단위로 분해한 업무 구조입니다.
          프로젝트 전체를 하나의 큰 작업으로만 보면 일정 지연이나 누락 업무를 파악하기 어렵습니다.
          그래서 분석, 설계, 개발, 테스트, 이행처럼 큰 단계를 나누고, 다시 그 안의 세부 작업과 산출물, 담당자, 시작일, 종료일을 정의합니다.
        &lt;/p&gt;

        &lt;p&gt;
          프로젝트 WBS는 단순히 “언제까지 무엇을 한다”를 적는 일정표가 아닙니다.
          어떤 작업이 먼저 끝나야 다음 작업을 시작할 수 있는지, 특정 업무가 지연되면 어느 영역에 영향을 주는지, 산출물이 실제로 검토 가능한 상태인지 확인하는 관리 기준입니다.
          실무 기준으로 보면 WBS는 프로젝트 진행률 보고서보다 더 중요한 실무 통제 도구로 사용됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WBS에 포함되는 기본 항목&lt;/h2&gt;

        &lt;p&gt;
          WBS는 프로젝트 성격에 따라 형식이 달라질 수 있지만, 최소한 업무명, 담당자, 시작일, 종료일, 진행률, 산출물, 선후행 관계는 포함하는 것이 좋습니다.
          특히 IT 프로젝트에서는 단순 개발 일정뿐 아니라 환경 준비, 계정 발급, 보안 검토, 인터페이스 협의, 성능 테스트 같은 업무도 반드시 WBS에 들어가야 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
              &lt;th&gt;관리 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;업무명&lt;/td&gt;
              &lt;td&gt;수행해야 할 작업의 이름&lt;/td&gt;
              &lt;td&gt;너무 크거나 모호하지 않게 작성합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;담당자&lt;/td&gt;
              &lt;td&gt;실제 업무를 책임지는 사람 또는 조직&lt;/td&gt;
              &lt;td&gt;공동 담당보다 주 담당자를 명확히 두는 것이 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;시작일과 종료일&lt;/td&gt;
              &lt;td&gt;작업 수행 기간&lt;/td&gt;
              &lt;td&gt;검토, 승인, 대기 시간을 포함해 산정합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;선후행 관계&lt;/td&gt;
              &lt;td&gt;작업 간 의존성&lt;/td&gt;
              &lt;td&gt;앞 작업 지연 시 뒤 작업 영향도를 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;산출물&lt;/td&gt;
              &lt;td&gt;작업 완료를 증명하는 결과물&lt;/td&gt;
              &lt;td&gt;문서, 설정값, 테스트 결과, 배포 결과처럼 검증 가능한 형태가 필요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;진행 상태&lt;/td&gt;
              &lt;td&gt;미착수, 진행 중, 완료, 지연 등의 상태&lt;/td&gt;
              &lt;td&gt;진행률 숫자보다 실제 완료 기준을 함께 봐야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;TA 관점에서 WBS가 중요한 이유&lt;/h2&gt;

        &lt;p&gt;
          TA는 Technical Architect 또는 Technical Architecture 역할로, 프로젝트의 기술 구조와 시스템 품질을 책임지는 역할에 가깝습니다.
          개발자가 기능 구현을 중심으로 움직인다면, TA는 전체 시스템 구조, 인프라, 연계, 보안, 성능, 운영 전환 가능성을 함께 봐야 합니다.
          이때 WBS가 부실하면 기술 업무가 일정 안에 제대로 반영되지 않아 프로젝트 후반에 문제가 몰릴 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          프로젝트에서 기술 리스크는 초반에는 잘 보이지 않다가 통합 테스트, 성능 테스트, 운영 이행 시점에 크게 드러나는 경우가 많습니다.
          예를 들어 서버 구성, 방화벽 오픈, 배치 스케줄, 외부 연계 인증서, DB 권한, 로그 정책, 모니터링 설정은 개발 화면처럼 눈에 바로 보이지 않습니다.
          하지만 이 항목들이 늦어지면 기능 개발이 끝나도 테스트나 오픈을 진행할 수 없습니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          TA 관점의 WBS에서 가장 위험한 상태는 “개발 일정은 있는데 기술 검증 일정이 없는 상태”입니다.&lt;br&gt;
          기능 개발은 완료되었지만 서버 환경이 준비되지 않았거나, 연계 테스트가 밀려 있거나, 성능 검증이 빠져 있으면 실제 오픈 일정은 지켜지기 어렵습니다.&lt;br&gt;
          따라서 TA 업무는 별도 라인으로 분리해 WBS에 명확히 표시해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;TA가 WBS에서 반드시 봐야 할 항목&lt;/h2&gt;

        &lt;p&gt;
          TA는 WBS를 볼 때 단순히 개발 일정이 맞는지만 확인해서는 안 됩니다.
          기술적으로 프로젝트가 실제 운영 가능한 상태로 갈 수 있는지를 기준으로 봐야 합니다.
          관리자 입장에서 WBS를 검토한다면 아래 항목들이 일정 안에 포함되어 있는지 먼저 확인하는 것이 좋습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;검토 영역&lt;/th&gt;
              &lt;th&gt;WBS에 포함할 작업&lt;/th&gt;
              &lt;th&gt;누락 시 발생할 수 있는 문제&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;아키텍처 설계&lt;/td&gt;
              &lt;td&gt;시스템 구성도, 배포 구조, 연계 구조, 데이터 흐름 설계&lt;/td&gt;
              &lt;td&gt;개발 후반에 구조 변경이 발생해 재작업이 늘어납니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;인프라 준비&lt;/td&gt;
              &lt;td&gt;서버, DB, 스토리지, 네트워크, 계정, 권한 준비&lt;/td&gt;
              &lt;td&gt;개발 완료 후에도 테스트 환경을 사용할 수 없습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;보안 검토&lt;/td&gt;
              &lt;td&gt;방화벽, 접근 권한, 인증서, 암호화, 로그 정책 검토&lt;/td&gt;
              &lt;td&gt;오픈 직전 보안 승인 지연이 발생할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;연계 검증&lt;/td&gt;
              &lt;td&gt;내부 시스템, 외부 기관, API, 배치 연계 테스트&lt;/td&gt;
              &lt;td&gt;통합 테스트 단계에서 장애 원인 파악이 어려워집니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;성능 검증&lt;/td&gt;
              &lt;td&gt;부하 테스트, SQL 튜닝, 캐시 전략, 병목 분석&lt;/td&gt;
              &lt;td&gt;운영 오픈 후 응답 지연이나 장애가 발생할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 전환&lt;/td&gt;
              &lt;td&gt;배포 절차, 롤백 계획, 모니터링, 장애 대응 매뉴얼&lt;/td&gt;
              &lt;td&gt;오픈 당일 문제 발생 시 복구 절차가 불명확해집니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;좋은 WBS와 나쁜 WBS의 차이&lt;/h2&gt;

        &lt;p&gt;
          좋은 WBS는 업무를 많이 적은 문서가 아니라, 실제 관리 가능한 단위로 정리된 문서입니다.
          반대로 나쁜 WBS는 큰 업무만 나열되어 있고 완료 기준이 모호하며, 담당자와 선후행 관계가 불분명합니다.
          이런 WBS는 보고용으로는 그럴듯해 보여도 프로젝트 리스크를 조기에 발견하기 어렵습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;좋은 WBS&lt;/th&gt;
              &lt;th&gt;나쁜 WBS&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;업무 단위&lt;/td&gt;
              &lt;td&gt;수행과 검증이 가능한 크기로 분리되어 있습니다.&lt;/td&gt;
              &lt;td&gt;“개발”, “테스트”처럼 너무 큰 단위로만 작성되어 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;완료 기준&lt;/td&gt;
              &lt;td&gt;산출물이나 검토 결과로 완료 여부를 판단할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;담당자가 완료라고 말해야만 상태를 알 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;의존 관계&lt;/td&gt;
              &lt;td&gt;선행 작업 지연 시 후속 작업 영향이 보입니다.&lt;/td&gt;
              &lt;td&gt;작업 간 연결이 없어 지연 원인을 파악하기 어렵습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 업무&lt;/td&gt;
              &lt;td&gt;인프라, 보안, 연계, 성능, 이행 작업이 별도로 관리됩니다.&lt;/td&gt;
              &lt;td&gt;기술 업무가 개발 일정 안에 묻혀 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;일정 관리&lt;/td&gt;
              &lt;td&gt;버퍼와 조정 가능한 구간이 보입니다.&lt;/td&gt;
              &lt;td&gt;모든 일정이 딱 맞물려 있어 하나만 밀려도 전체가 흔들립니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WBS 기간을 유도리 있게 관리해야 하는 이유&lt;/h2&gt;

        &lt;p&gt;
          프로젝트 일정은 처음 계획대로만 흘러가지 않습니다.
          요구사항 변경, 승인 지연, 외부 연계 지연, 환경 이슈, 담당자 부재, 예상보다 긴 테스트 기간 등 여러 변수가 발생합니다.
          그래서 WBS 기간은 무조건 촘촘하게 잡기보다 조정 가능한 구간과 반드시 지켜야 할 구간을 나누어 관리해야 합니다.
        &lt;/p&gt;

        &lt;p&gt;
          여기서 유도리 있게 관리한다는 것은 일정을 느슨하게 운영한다는 뜻이 아닙니다.
          핵심 마일스톤은 지키되, 세부 작업 간의 순서와 병행 가능 여부를 조정해 전체 일정 충격을 줄이는 방식입니다.
          운영 환경에서는 일정표 자체보다 일정 변경을 통제하는 기준이 더 중요합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          WBS 기간 관리의 핵심은 모든 작업에 동일한 중요도를 부여하지 않는 것입니다.&lt;br&gt;
          오픈일, 통합 테스트 시작일, 보안 승인일, 운영 이행일처럼 움직이면 안 되는 기준점은 고정합니다.&lt;br&gt;
          반면 문서 보완, 내부 리뷰, 일부 단위 테스트, 세부 개발 보완 작업은 병행하거나 순서를 조정할 수 있는 후보로 관리합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WBS 기간을 유연하게 관리하는 팁&lt;/h2&gt;

        &lt;h3&gt;1. 작업을 고정 일정과 조정 가능 일정으로 나누기&lt;/h3&gt;

        &lt;p&gt;
          모든 작업을 같은 수준으로 관리하면 일정 조정이 필요할 때 무엇을 움직여야 할지 판단하기 어렵습니다.
          먼저 고정해야 하는 마일스톤과 조정 가능한 세부 작업을 구분해야 합니다.
          예를 들어 고객 보고일, 운영 오픈일, 통합 테스트 시작일은 고정 일정에 가깝고, 내부 리뷰나 보완 개발은 조정 가능한 일정으로 볼 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;2. TA 업무는 개발 일정 뒤가 아니라 앞에 배치하기&lt;/h3&gt;

        &lt;p&gt;
          TA 업무는 프로젝트 후반에 몰리면 일정 리스크가 커집니다.
          서버 구성, 네트워크 오픈, 인증서 준비, 연계 방식 확정, 로그 정책, 배포 구조는 개발 초기에 정리되어야 합니다.
          개발이 끝난 뒤 TA 검토를 시작하면 구조 변경이나 보안 이슈로 인해 재작업이 발생할 가능성이 높습니다.
        &lt;/p&gt;

        &lt;h3&gt;3. 검토와 승인 기간을 별도 작업으로 잡기&lt;/h3&gt;

        &lt;p&gt;
          WBS에서 자주 빠지는 항목이 검토와 승인 기간입니다.
          문서를 작성하는 시간과 문서를 검토받는 시간은 다릅니다.
          특히 보안 승인, 아키텍처 리뷰, 운영 배포 승인, 외부 기관 연계 승인처럼 다른 조직의 확인이 필요한 업무는 별도 일정으로 잡아야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;4. 병행 가능한 작업을 미리 표시하기&lt;/h3&gt;

        &lt;p&gt;
          일정이 밀렸을 때 가장 먼저 봐야 할 것은 병행 가능한 작업입니다.
          예를 들어 화면 개발과 일부 API 개발은 병행할 수 있지만, DB 모델 확정 전 상세 개발은 제한될 수 있습니다.
          WBS에 선후행 관계가 표시되어 있으면 병행 가능한 작업과 기다려야 하는 작업을 빠르게 구분할 수 있습니다.
        &lt;/p&gt;

        &lt;h3&gt;5. 버퍼는 숨기지 말고 관리 항목으로 두기&lt;/h3&gt;

        &lt;p&gt;
          일정 버퍼를 담당자 개인 판단에 맡기면 프로젝트 전체 일정이 왜곡될 수 있습니다.
          버퍼는 숨겨진 여유 시간이 아니라 리스크 대응을 위한 공식 관리 항목으로 두는 것이 좋습니다.
          특히 통합 테스트 전, 성능 테스트 전, 운영 이행 전에는 최소한의 점검 기간을 별도로 확보해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;TA 관점의 WBS 예시&lt;/h2&gt;

        &lt;p&gt;
          아래는 IT 프로젝트에서 TA 관점으로 WBS를 구성할 때 참고할 수 있는 예시입니다.
          실제 프로젝트에서는 조직 구조, 개발 방법론, 시스템 규모에 따라 항목을 조정해야 합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;단계&lt;/th&gt;
              &lt;th&gt;TA 주요 작업&lt;/th&gt;
              &lt;th&gt;완료 기준&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;착수&lt;/td&gt;
              &lt;td&gt;현행 시스템 구조 파악, 기술 제약사항 확인, 주요 리스크 식별&lt;/td&gt;
              &lt;td&gt;기술 검토 목록과 리스크 목록 정리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분석&lt;/td&gt;
              &lt;td&gt;연계 대상, 데이터 흐름, 보안 요구사항, 인프라 요구사항 확인&lt;/td&gt;
              &lt;td&gt;기술 요구사항과 연계 목록 확정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;설계&lt;/td&gt;
              &lt;td&gt;아키텍처 설계, 배포 구조, 네트워크 구성, DB 구조 검토&lt;/td&gt;
              &lt;td&gt;구성도와 설계 산출물 리뷰 완료&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;구축&lt;/td&gt;
              &lt;td&gt;서버 구성, 미들웨어 설정, DB 계정 및 권한 준비, 로그 정책 적용&lt;/td&gt;
              &lt;td&gt;개발 및 테스트 환경 사용 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;개발 지원&lt;/td&gt;
              &lt;td&gt;공통 모듈, API 규칙, 예외 처리, 트랜잭션 정책 검토&lt;/td&gt;
              &lt;td&gt;개발 표준과 공통 가이드 반영&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;테스트&lt;/td&gt;
              &lt;td&gt;통합 테스트 지원, 성능 점검, 장애 로그 분석, 병목 구간 확인&lt;/td&gt;
              &lt;td&gt;주요 결함 조치 및 성능 기준 충족&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이행&lt;/td&gt;
              &lt;td&gt;배포 절차, 롤백 계획, 모니터링, 오픈 점검표 작성&lt;/td&gt;
              &lt;td&gt;운영 전환 승인 및 오픈 준비 완료&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WBS 작성 시 자주 하는 실수&lt;/h2&gt;

        &lt;p&gt;
          WBS를 작성할 때 가장 흔한 실수는 개발 업무만 상세하게 적고, 기술 검토와 운영 전환 업무는 크게 묶어버리는 것입니다.
          이 경우 프로젝트 중반까지는 문제가 없어 보이다가 통합 테스트 이후에 일정이 급격히 흔들릴 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          “환경 준비”라는 한 줄 안에 서버 생성, 계정 발급, 방화벽 오픈, 인증서 적용, DB 권한, 배포 경로, 모니터링 설정이 모두 들어가면 관리가 어렵습니다.&lt;br&gt;
          WBS는 보고용 문서가 아니라 실제 작업을 추적하는 문서이므로, 지연 가능성이 높은 업무는 별도 항목으로 분리해야 합니다.&lt;br&gt;
          특히 다른 조직의 협조가 필요한 업무는 담당자와 요청일, 완료 예정일을 명확히 관리해야 합니다.
        &lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;실수&lt;/th&gt;
              &lt;th&gt;문제점&lt;/th&gt;
              &lt;th&gt;개선 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;업무를 너무 크게 작성&lt;/td&gt;
              &lt;td&gt;진행률은 높아 보이지만 실제 완료 여부를 알기 어렵습니다.&lt;/td&gt;
              &lt;td&gt;검토 가능한 산출물 단위로 분리합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;승인 일정을 누락&lt;/td&gt;
              &lt;td&gt;작업은 끝났지만 다음 단계로 넘어가지 못합니다.&lt;/td&gt;
              &lt;td&gt;검토와 승인 기간을 별도 작업으로 등록합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 리스크를 후반에 배치&lt;/td&gt;
              &lt;td&gt;오픈 직전에 구조 변경이 발생할 수 있습니다.&lt;/td&gt;
              &lt;td&gt;TA 검토를 분석·설계 단계부터 배치합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;선후행 관계 미정의&lt;/td&gt;
              &lt;td&gt;어떤 작업 때문에 지연되는지 파악하기 어렵습니다.&lt;/td&gt;
              &lt;td&gt;의존성이 큰 작업은 연결 관계를 표시합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;버퍼 없는 일정&lt;/td&gt;
              &lt;td&gt;작은 지연이 전체 일정 지연으로 이어집니다.&lt;/td&gt;
              &lt;td&gt;핵심 단계 전 점검 기간을 확보합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WBS 진행률을 볼 때 주의할 점&lt;/h2&gt;

        &lt;p&gt;
          WBS에서 진행률 숫자만 보고 프로젝트 상태를 판단하면 위험합니다.
          어떤 작업은 90%라고 표시되어 있어도 마지막 검토나 승인에서 오래 걸릴 수 있습니다.
          반대로 50%로 표시되어 있어도 핵심 리스크가 이미 해결된 상태라면 실제 위험도는 낮을 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 진행률은 숫자보다 완료 기준과 잔여 리스크를 함께 확인해야 합니다.
          TA 관점에서는 “작업이 진행 중인가”보다 “이 작업이 끝나면 다음 단계가 막힘없이 진행되는가”를 확인하는 것이 중요합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          진행률 점검 질문&lt;br&gt;
          산출물이 실제로 제출되었는가?&lt;br&gt;
          리뷰 또는 승인이 완료되었는가?&lt;br&gt;
          후속 작업이 바로 시작 가능한 상태인가?&lt;br&gt;
          외부 조직의 대기 업무가 남아 있지 않은가?&lt;br&gt;
          기술 리스크가 해결되었는가, 아니면 단순히 일정상 완료 처리되었는가?
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;프로젝트 WBS 운영 팁&lt;/h2&gt;

        &lt;p&gt;
          WBS는 한 번 작성하고 끝나는 문서가 아닙니다.
          프로젝트가 진행되면서 일정, 담당자, 범위, 리스크는 계속 바뀝니다.
          따라서 WBS는 주기적으로 업데이트하고, 변경된 일정이 전체 마일스톤에 어떤 영향을 주는지 함께 관리해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;WBS 운영 기준 예시

1. 주 1회 전체 일정 업데이트
2. 지연 작업은 사유와 조치 계획을 함께 기록
3. TA 관련 기술 리스크는 별도 색상 또는 상태값으로 관리
4. 외부 조직 의존 작업은 요청일과 회신 예정일을 함께 기록
5. 완료 처리 전 산출물 또는 검증 결과 확인
6. 통합 테스트 전 환경, 연계, 권한, 데이터 준비 상태 점검
7. 오픈 전 배포, 롤백, 모니터링, 장애 대응 절차 확인&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          WBS를 잘 운영하면 프로젝트 일정이 밀리는 것을 완전히 막을 수는 없지만, 어디서 왜 밀리는지 빠르게 확인할 수 있습니다.
          특히 TA가 WBS를 적극적으로 관리하면 기술 이슈가 프로젝트 후반에 한꺼번에 터지는 상황을 줄일 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          프로젝트 WBS는 업무를 세부 단위로 나누어 일정, 담당자, 산출물, 의존 관계를 관리하는 핵심 도구입니다.
          단순한 일정표가 아니라 프로젝트 범위와 리스크를 통제하는 기준이며, IT 프로젝트에서는 기술 업무를 보이게 만드는 역할이 중요합니다.
        &lt;/p&gt;

        &lt;p&gt;
          TA 관점에서 WBS는 아키텍처 설계, 인프라 준비, 보안 검토, 연계 검증, 성능 점검, 운영 이행을 일정 안에 명확히 반영하는 도구입니다.
          WBS 기간을 유도리 있게 관리하려면 고정 일정과 조정 가능 일정을 나누고, 검토·승인·버퍼·선후행 관계를 명확히 관리해야 합니다.
          결국 좋은 WBS는 프로젝트를 예쁘게 보여주는 문서가 아니라, 문제를 빨리 발견하고 일정 충격을 줄이는 실무 관리 도구입니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/project-wbs-ta-schedule-management#blogposting&quot;,
        &quot;headline&quot;: &quot;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&quot;,
        &quot;description&quot;: &quot;프로젝트 WBS의 개념과 TA 관점에서 WBS가 중요한 이유, 일정 기간을 유연하게 관리하는 실무 팁을 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/project-wbs-ta-schedule-management&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-wbs-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;프로젝트 WBS&quot;,
          &quot;TA&quot;,
          &quot;기술 아키텍트&quot;,
          &quot;프로젝트 일정관리&quot;,
          &quot;IT 프로젝트 관리&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/project-wbs-ta-schedule-management#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;프로젝트 관리&quot;,
            &quot;item&quot;: &quot;https://example.com/category/project-management&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;프로젝트 WBS란 무엇이며 TA 관점에서 중요한 이유&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: 프로젝트 WBS, WBS, TA, 기술아키텍트, 프로젝트관리, 일정관리, 업무분해구조, IT프로젝트, 리스크관리, 산출물관리 --&gt;</description>
      <category>지식 공유/ETC</category>
      <category>IT프로젝트</category>
      <category>Ta</category>
      <category>WBS</category>
      <category>기술아키텍트</category>
      <category>리스크관리</category>
      <category>산출물관리</category>
      <category>업무분해구조</category>
      <category>일정관리</category>
      <category>프로젝트 WBS</category>
      <category>프로젝트관리</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/560</guid>
      <comments>https://togethergrow.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-WBS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-TA-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C-%EC%A4%91%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0#entry560comment</comments>
      <pubDate>Tue, 23 Jun 2026 00:38:21 +0900</pubDate>
    </item>
    <item>
      <title>로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법</title>
      <link>https://togethergrow.tistory.com/entry/%EB%A1%9C%EA%B7%B8%EB%A7%88%EC%9D%B4%EB%84%88%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-DELETE-%EC%98%A4%EC%8B%A4%ED%96%89-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B3%B5%EA%B5%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Oracle LogMiner의 개념과 동작 원리, DELETE 오실행으로 삭제된 데이터를 SQL_UNDO를 통해 복구하는 절차를 실무 관점에서 정리합니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;로그마이너,LogMiner,Oracle,데이터복구,DELETE복구,SQL_UNDO,Redo Log,아카이브로그,DBA,오라클복구&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;Oracle LogMiner의 개념과 DELETE 오실행 복구 절차를 SQL 예제 중심으로 정리합니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-logminer-thumbnail.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/oracle-logminer-delete-recovery&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Oracle LogMiner로 Redo Log를 분석하고 삭제된 데이터를 복구하는 기본 절차를 확인합니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-logminer-thumbnail.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;style&gt;
      .post-content {
        line-height: 1.7;
        color: #222;
      }

      .post-content .article-wrap {
        max-width: 860px;
        margin: 0 auto;
      }

      .post-content h1 {
        font-size: 1.9rem;
        line-height: 1.35;
        margin: 0 0 1.2rem;
      }

      .post-content h2 {
        font-size: 1.45rem;
        line-height: 1.4;
        margin: 2.4rem 0 0.8rem;
      }

      .post-content h2::after {
        content: &quot;&quot;;
        display: block;
        height: 1rem;
      }

      .post-content h3 {
        font-size: 1.15rem;
        margin: 1.6rem 0 0.6rem;
      }

      .post-content p {
        margin: 0 0 1rem;
      }

      .post-content .summary-box,
      .post-content .warning-box,
      .post-content .check-box {
        border: 1px solid #ddd;
        border-radius: 12px;
        padding: 1rem 1.1rem;
        margin: 1.2rem 0;
        background: #fafafa;
      }

      .post-content .warning-box {
        border-color: #e0b4b4;
        background: #fff7f7;
      }

      .post-content .check-box {
        border-color: #b7d7c2;
        background: #f6fff8;
      }

      .post-content pre {
        overflow-x: auto;
        padding: 1rem;
        border-radius: 10px;
        background: #1f2933;
        color: #f5f7fa;
        line-height: 1.55;
        margin: 1rem 0 1.4rem;
      }

      .post-content code {
        font-family: Consolas, Monaco, &quot;Courier New&quot;, monospace;
        font-size: 0.95em;
      }

      .post-content table {
        width: 100%;
        border-collapse: collapse;
        margin: 1.2rem 0;
      }

      .post-content th,
      .post-content td {
        border: 1px solid #ddd;
        padding: 0.8rem;
        vertical-align: top;
      }

      .post-content th {
        background: #f5f5f5;
        font-weight: 700;
      }

      .post-content .small-note {
        font-size: 0.95rem;
        color: #555;
      }
    &lt;/style&gt;

    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&lt;/h1&gt;

      &lt;section&gt;
        &lt;div class=&quot;summary-box&quot;&gt;
          로그마이너는 Oracle Database의 Redo Log와 Archive Log를 SQL 형태로 분석하는 기능입니다.&lt;br&gt;
          실무 기준으로 보면 단순 조회 도구가 아니라, 누가 언제 어떤 DML을 수행했는지 추적하고 잘못 실행된 DELETE, UPDATE, INSERT를 되돌릴 근거를 찾는 복구 보조 도구에 가깝습니다.&lt;br&gt;
          특히 DELETE 오실행처럼 데이터는 사라졌지만 Redo Log가 남아 있는 상황에서는 SQL_UNDO를 활용해 복구 SQL을 만들 수 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;로그마이너란?&lt;/h2&gt;

        &lt;p&gt;
          로그마이너(LogMiner)는 Oracle Database에서 발생한 변경 이력을 Redo Log 또는 Archive Log에서 읽어 사람이 이해할 수 있는 SQL 형태로 보여주는 기능입니다.
          일반적으로 데이터베이스는 INSERT, UPDATE, DELETE 같은 변경 작업을 수행할 때 장애 복구를 위해 Redo Log에 변경 내용을 기록합니다.
          로그마이너는 이 기록을 분석해 어떤 SQL이 실행되었는지, 어떤 트랜잭션이 커밋되었는지, 해당 변경을 되돌리려면 어떤 SQL을 실행해야 하는지 확인할 수 있게 해줍니다.
        &lt;/p&gt;

        &lt;p&gt;
          로그마이너를 사용하면 &lt;code&gt;V$LOGMNR_CONTENTS&lt;/code&gt; 뷰를 통해 &lt;code&gt;SQL_REDO&lt;/code&gt;와 &lt;code&gt;SQL_UNDO&lt;/code&gt;를 확인할 수 있습니다.
          &lt;code&gt;SQL_REDO&lt;/code&gt;는 실제 수행된 변경 SQL에 가깝고, &lt;code&gt;SQL_UNDO&lt;/code&gt;는 해당 변경을 되돌리기 위한 SQL입니다.
          DELETE 오실행 복구에서는 보통 삭제된 행을 다시 INSERT하는 형태의 &lt;code&gt;SQL_UNDO&lt;/code&gt;가 핵심이 됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;로그마이너가 필요한 상황&lt;/h2&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;상황&lt;/th&gt;
              &lt;th&gt;로그마이너 활용 방식&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;DELETE 조건을 잘못 입력한 경우&lt;/td&gt;
              &lt;td&gt;삭제 시점의 트랜잭션을 찾고 SQL_UNDO로 INSERT 복구 SQL을 생성합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;UPDATE로 값을 잘못 변경한 경우&lt;/td&gt;
              &lt;td&gt;변경 전 값을 기준으로 되돌리는 UPDATE SQL을 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;누가 데이터를 변경했는지 확인해야 하는 경우&lt;/td&gt;
              &lt;td&gt;사용자명, 세션 정보, SCN, 시간대를 기준으로 변경 이력을 추적합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;장애 원인 분석이 필요한 경우&lt;/td&gt;
              &lt;td&gt;특정 시간대의 DML 흐름을 확인해 문제 발생 지점을 좁힙니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;DELETE 오실행 복구 전 확인할 조건&lt;/h2&gt;

        &lt;p&gt;
          로그마이너를 이용한 데이터 복구는 Redo Log 또는 Archive Log가 남아 있어야 가능합니다.
          삭제가 발생한 시점의 로그가 이미 삭제되었거나, 필요한 보조 로깅 정보가 부족하면 SQL_UNDO가 완전하지 않을 수 있습니다.
          따라서 운영 환경에서는 복구 가능성을 높이기 위해 Archive Log Mode와 Supplemental Logging 설정을 미리 점검하는 것이 중요합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          로그마이너는 백업을 대체하는 기능이 아닙니다.&lt;br&gt;
          대량 DELETE, 테이블 구조 변경, LOB 컬럼, 파티션 작업, DDL 혼재 상황에서는 SQL_UNDO만으로 완벽한 복구가 어려울 수 있습니다.&lt;br&gt;
          실제 운영 복구 전에는 반드시 테스트 DB 또는 별도 세션에서 복구 SQL을 검증해야 합니다.
        &lt;/div&gt;

        &lt;h3&gt;기본 점검 SQL&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;-- Archive Log Mode 확인
ARCHIVE LOG LIST;

-- Supplemental Logging 확인
SELECT supplemental_log_data_min
     , supplemental_log_data_pk
     , supplemental_log_data_ui
FROM v$database;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          최소 보조 로깅이 꺼져 있다면 일부 복구 SQL에서 식별 컬럼 정보가 부족할 수 있습니다.
          운영 DB에서는 설정 변경 전 영향도를 검토해야 하며, 이미 발생한 과거 로그에는 설정 변경 효과가 소급 적용되지 않습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;로그마이너를 이용한 DELETE 복구 흐름&lt;/h2&gt;

        &lt;p&gt;
          DELETE 오실행이 발생했을 때는 먼저 삭제가 발생한 시간대 또는 SCN 범위를 좁히는 것이 중요합니다.
          범위를 넓게 잡으면 분석 대상 로그가 많아져 조회 시간이 길어지고, 동일 테이블의 정상 DELETE까지 함께 조회될 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          1. 삭제 발생 시간 확인&lt;br&gt;
          2. 해당 시간대의 Archive Log 또는 Redo Log 확인&lt;br&gt;
          3. LogMiner 세션 시작&lt;br&gt;
          4. V$LOGMNR_CONTENTS에서 DELETE 이력 조회&lt;br&gt;
          5. SQL_UNDO 추출&lt;br&gt;
          6. 복구 SQL 검증 후 실행&lt;br&gt;
          7. 복구 결과 확인 및 재발 방지 조치
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;1단계: 분석할 로그 파일 추가&lt;/h2&gt;

        &lt;p&gt;
          삭제가 발생한 시간대의 Archive Log 파일을 확인한 뒤 로그마이너 분석 대상에 추가합니다.
          파일 경로는 환경마다 다르므로 실제 DB의 Archive Log 경로를 기준으로 입력해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;BEGIN
  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME =&amp;gt; '/u01/app/oracle/arch/1_12345_987654321.dbf',
    OPTIONS     =&amp;gt; DBMS_LOGMNR.NEW
  );

  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME =&amp;gt; '/u01/app/oracle/arch/1_12346_987654321.dbf',
    OPTIONS     =&amp;gt; DBMS_LOGMNR.ADDFILE
  );
END;
/&lt;/code&gt;&lt;/pre&gt;

        &lt;p class=&quot;small-note&quot;&gt;
          RAC 환경에서는 인스턴스별 Thread 로그를 함께 고려해야 합니다.
          특정 Thread의 로그만 분석하면 일부 트랜잭션이 누락될 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;2단계: 로그마이너 세션 시작&lt;/h2&gt;

        &lt;p&gt;
          일반적으로 현재 데이터 딕셔너리를 기준으로 분석하려면 &lt;code&gt;DICT_FROM_ONLINE_CATALOG&lt;/code&gt; 옵션을 사용합니다.
          커밋된 트랜잭션만 보고 싶다면 &lt;code&gt;COMMITTED_DATA_ONLY&lt;/code&gt; 옵션을 함께 사용할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;BEGIN
  DBMS_LOGMNR.START_LOGMNR(
    OPTIONS =&amp;gt; DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
            + DBMS_LOGMNR.COMMITTED_DATA_ONLY
  );
END;
/&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          데이터 삭제 시점과 현재 테이블 구조가 크게 다르다면 온라인 카탈로그 기준 분석이 부정확할 수 있습니다.
          이 경우 별도의 딕셔너리 파일 방식이나 백업 DB를 활용한 분석이 필요할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;3단계: DELETE 이력 조회&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;V$LOGMNR_CONTENTS&lt;/code&gt;에서 대상 스키마, 테이블명, 작업 유형, 시간대를 기준으로 DELETE 이력을 조회합니다.
          아래 예시는 &lt;code&gt;APPUSER.CUSTOMER&lt;/code&gt; 테이블에서 발생한 DELETE를 찾는 형태입니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SELECT scn
     , timestamp
     , username
     , operation
     , seg_owner
     , table_name
     , sql_redo
     , sql_undo
FROM v$logmnr_contents
WHERE seg_owner = 'APPUSER'
  AND table_name = 'CUSTOMER'
  AND operation = 'DELETE'
ORDER BY timestamp, scn;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          조회 결과에서 &lt;code&gt;SQL_UNDO&lt;/code&gt; 컬럼을 보면 DELETE를 되돌리는 INSERT 문을 확인할 수 있습니다.
          다만 동일 테이블에서 정상 DELETE와 오실행 DELETE가 섞여 있을 수 있으므로 시간, 사용자, 조건, 삭제 건수 등을 함께 확인해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;4단계: SQL_UNDO 추출&lt;/h2&gt;

        &lt;p&gt;
          DELETE 오실행으로 삭제된 데이터를 복구하려면 &lt;code&gt;SQL_UNDO&lt;/code&gt;를 별도로 추출해 검증합니다.
          SQL_UNDO가 많을 경우 파일로 스풀링한 뒤 테스트 DB에서 먼저 실행하는 방식이 안전합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;SET LONG 100000
SET PAGESIZE 0
SET LINESIZE 300
SET TRIMSPOOL ON
SET FEEDBACK OFF

SPOOL delete_recovery.sql

SELECT sql_undo || ';'
FROM v$logmnr_contents
WHERE seg_owner = 'APPUSER'
  AND table_name = 'CUSTOMER'
  AND operation = 'DELETE'
  AND timestamp BETWEEN TO_DATE('2026-06-22 10:00:00', 'YYYY-MM-DD HH24:MI:SS')
                    AND TO_DATE('2026-06-22 10:10:00', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY scn;

SPOOL OFF&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          추출된 SQL은 바로 운영 DB에 실행하지 않는 것이 좋습니다.
          관리자 입장에서 가장 중요한 것은 복구 자체보다 잘못된 복구로 2차 장애를 만들지 않는 것입니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;5단계: 복구 SQL 검증 후 실행&lt;/h2&gt;

        &lt;p&gt;
          복구 SQL을 실행하기 전에는 중복 키, 제약 조건, 트리거, 외래 키 영향도를 확인해야 합니다.
          DELETE 이후 동일한 PK 값으로 데이터가 다시 생성되었다면 SQL_UNDO 실행 시 무결성 오류가 발생할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- 예시: SQL_UNDO 형태
INSERT INTO &quot;APPUSER&quot;.&quot;CUSTOMER&quot;
  (&quot;CUSTOMER_ID&quot;, &quot;CUSTOMER_NAME&quot;, &quot;PHONE_NO&quot;, &quot;CREATED_AT&quot;)
VALUES
  ('1001', '홍길동', '010-0000-0000', TO_DATE('2026-06-01 09:00:00', 'YYYY-MM-DD HH24:MI:SS'));

-- 검증 후 실행
COMMIT;&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          복구 SQL 실행 전에는 반드시 현재 테이블 데이터를 백업해 두는 것이 안전합니다.&lt;br&gt;
          예를 들어 CTAS 백업, Data Pump Export, Flashback Query 가능 여부 확인 등을 먼저 수행합니다.&lt;br&gt;
          대량 복구라면 트랜잭션 단위를 나누고 실행 로그를 남겨야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;로그마이너 사용 후 세션 종료&lt;/h2&gt;

        &lt;p&gt;
          분석이 끝나면 로그마이너 세션을 종료합니다.
          세션을 종료하지 않으면 불필요한 리소스가 유지될 수 있으므로 작업 후 정리하는 습관이 필요합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;BEGIN
  DBMS_LOGMNR.END_LOGMNR;
END;
/&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;복구 시 자주 발생하는 문제&lt;/h2&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;문제&lt;/th&gt;
              &lt;th&gt;원인&lt;/th&gt;
              &lt;th&gt;대응&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;SQL_UNDO가 NULL로 보임&lt;/td&gt;
              &lt;td&gt;딕셔너리 정보 부족, 보조 로깅 부족, 지원되지 않는 작업 유형&lt;/td&gt;
              &lt;td&gt;로그 범위와 딕셔너리 옵션을 재검토하고 백업 DB 분석을 고려합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;테이블명이 UNKNOWN으로 표시됨&lt;/td&gt;
              &lt;td&gt;데이터 딕셔너리 매핑 실패&lt;/td&gt;
              &lt;td&gt;DICT_FROM_ONLINE_CATALOG 옵션 또는 딕셔너리 파일 방식을 확인합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;복구 SQL 실행 시 PK 오류 발생&lt;/td&gt;
              &lt;td&gt;삭제 후 동일 키 데이터가 재생성됨&lt;/td&gt;
              &lt;td&gt;현재 데이터와 SQL_UNDO 대상을 비교한 뒤 필요한 행만 선별합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;조회 결과가 너무 많음&lt;/td&gt;
              &lt;td&gt;시간 또는 SCN 범위가 넓음&lt;/td&gt;
              &lt;td&gt;사용자, 테이블, 트랜잭션 ID, 시간 범위를 좁혀 조회합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Flashback과 로그마이너의 차이&lt;/h2&gt;

        &lt;p&gt;
          Oracle에서 실수로 삭제된 데이터를 복구할 때는 Flashback 기능도 자주 검토됩니다.
          Flashback Query는 특정 시점의 데이터를 조회해 복구할 수 있어 비교적 간단하지만, Undo Retention 범위 안에 있어야 합니다.
          반면 로그마이너는 Redo Log와 Archive Log를 분석하므로 삭제 시점의 로그가 남아 있다면 더 넓은 범위의 변경 추적이 가능합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;Flashback Query&lt;/th&gt;
              &lt;th&gt;LogMiner&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 목적&lt;/td&gt;
              &lt;td&gt;과거 시점 데이터 조회&lt;/td&gt;
              &lt;td&gt;Redo Log 기반 변경 이력 분석&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;복구 방식&lt;/td&gt;
              &lt;td&gt;과거 데이터를 INSERT SELECT로 복구&lt;/td&gt;
              &lt;td&gt;SQL_UNDO를 추출해 복구&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제약&lt;/td&gt;
              &lt;td&gt;Undo 보존 기간 영향&lt;/td&gt;
              &lt;td&gt;Redo/Archive Log 보존 여부 영향&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분석 정보&lt;/td&gt;
              &lt;td&gt;데이터 상태 중심&lt;/td&gt;
              &lt;td&gt;사용자, 작업, SQL, SCN 중심&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 환경에서의 권장 절차&lt;/h2&gt;

        &lt;p&gt;
          실제 사용 시 DELETE 오실행이 발생하면 우선 애플리케이션 또는 배치 작업을 멈추고 추가 변경을 최소화해야 합니다.
          이후 삭제 시간, 실행 계정, 대상 테이블, 예상 삭제 건수를 확인한 뒤 로그마이너 분석 범위를 정합니다.
          복구 SQL은 테스트 환경에서 검증하고, 운영 반영 전 현재 데이터를 백업한 뒤 실행하는 순서가 안전합니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          운영 복구 권장 순서&lt;br&gt;
          장애 접수 및 변경 중지&lt;br&gt;
          삭제 시점과 대상 테이블 확인&lt;br&gt;
          Archive Log 보존 여부 확인&lt;br&gt;
          LogMiner로 SQL_UNDO 추출&lt;br&gt;
          테스트 DB에서 복구 SQL 검증&lt;br&gt;
          운영 DB 현재 상태 백업&lt;br&gt;
          복구 SQL 실행 및 결과 검증&lt;br&gt;
          재발 방지 대책 적용
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;재발 방지를 위한 관리 포인트&lt;/h2&gt;

        &lt;p&gt;
          로그마이너는 사고 이후 분석과 복구에 유용하지만, 가장 좋은 대응은 오실행을 사전에 줄이는 것입니다.
          운영 DB에서는 DELETE나 UPDATE 실행 전 조건절 검증, 영향 건수 확인, 트랜잭션 수동 커밋, 배포 승인 절차를 함께 운영하는 것이 좋습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;-- DELETE 전 영향 건수 확인 예시
SELECT COUNT(*)
FROM appuser.customer
WHERE created_at &amp;lt; TO_DATE('2026-01-01', 'YYYY-MM-DD');

-- 실제 DELETE는 조건 재확인 후 수행
DELETE FROM appuser.customer
WHERE created_at &amp;lt; TO_DATE('2026-01-01', 'YYYY-MM-DD');

-- 영향 건수 확인 후 명시적으로 COMMIT 또는 ROLLBACK
ROLLBACK;&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          또한 핵심 테이블은 정기 백업, Flashback 활용 가능성, Archive Log 보존 기간, Supplemental Logging 정책을 함께 점검해야 합니다.
          로그마이너는 사고 대응 시간을 줄이는 도구이지만, 백업·권한·변경 통제와 함께 운영될 때 복구 성공률이 높아집니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;

        &lt;p&gt;
          로그마이너는 Oracle Redo Log와 Archive Log를 분석해 데이터 변경 이력을 SQL 형태로 확인하는 기능입니다.
          DELETE 오실행이 발생했을 때는 &lt;code&gt;V$LOGMNR_CONTENTS&lt;/code&gt;에서 삭제 이력을 찾고 &lt;code&gt;SQL_UNDO&lt;/code&gt;를 추출해 복구 SQL로 활용할 수 있습니다.
          다만 로그 보존 여부, 보조 로깅 설정, 테이블 구조 변경, 제약 조건에 따라 복구 가능 범위가 달라질 수 있으므로 운영 반영 전 검증이 필수입니다.
        &lt;/p&gt;

        &lt;p&gt;
          결론적으로 로그마이너는 단순한 로그 조회 기능이 아니라, Oracle 데이터 복구와 변경 이력 추적을 위한 핵심 분석 도구입니다.
          DELETE 복구를 안정적으로 수행하려면 로그마이너 사용법뿐 아니라 백업 정책, Archive Log 관리, 변경 통제 절차까지 함께 관리해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/oracle-logminer-delete-recovery#blogposting&quot;,
        &quot;headline&quot;: &quot;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&quot;,
        &quot;description&quot;: &quot;Oracle LogMiner의 개념과 동작 원리, DELETE 오실행으로 삭제된 데이터를 SQL_UNDO를 통해 복구하는 절차를 정리한 글입니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/oracle-logminer-delete-recovery&quot;
        },
        &quot;image&quot;: {
          &quot;@type&quot;: &quot;ImageObject&quot;,
          &quot;url&quot;: &quot;https://example.com/replace-logminer-thumbnail.jpg&quot;
        },
        &quot;about&quot;: [
          &quot;Oracle LogMiner&quot;,
          &quot;DELETE 복구&quot;,
          &quot;SQL_UNDO&quot;,
          &quot;Redo Log 분석&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/oracle-logminer-delete-recovery#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;Oracle&quot;,
            &quot;item&quot;: &quot;https://example.com/category/oracle&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;로그마이너란 무엇이며 DELETE 오실행 데이터를 복구하는 방법&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;!-- 관리자 입력용 태그 10개: 로그마이너, LogMiner, Oracle, 데이터복구, DELETE복구, SQL_UNDO, Redo Log, 아카이브로그, DBA, 오라클복구 --&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>DBA</category>
      <category>DELETE복구</category>
      <category>logminer</category>
      <category>oracle</category>
      <category>redo log</category>
      <category>SQL_UNDO</category>
      <category>데이터복구</category>
      <category>로그마이너</category>
      <category>아카이브로그</category>
      <category>오라클복구</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/559</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%A1%9C%EA%B7%B8%EB%A7%88%EC%9D%B4%EB%84%88%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-DELETE-%EC%98%A4%EC%8B%A4%ED%96%89-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B3%B5%EA%B5%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#entry559comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:29:16 +0900</pubDate>
    </item>
    <item>
      <title>[금산] 금산 삼계탕축제, 인삼과 약초로 즐기는 여름 보양 축제</title>
      <link>https://togethergrow.tistory.com/entry/%EA%B8%88%EC%82%B0-%EA%B8%88%EC%82%B0-%EC%82%BC%EA%B3%84%ED%83%95%EC%B6%95%EC%A0%9C-%EC%9D%B8%EC%82%BC%EA%B3%BC-%EC%95%BD%EC%B4%88%EB%A1%9C-%EC%A6%90%EA%B8%B0%EB%8A%94-%EC%97%AC%EB%A6%84-%EB%B3%B4%EC%96%91-%EC%B6%95%EC%A0%9C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;964e8232-3729-4053-bd48-bd8a77e1916b_35.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oT2tI/dJMcabEDeji/ArDk8gmHjz0NT80ouMvbk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oT2tI/dJMcabEDeji/ArDk8gmHjz0NT80ouMvbk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oT2tI/dJMcabEDeji/ArDk8gmHjz0NT80ouMvbk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoT2tI%2FdJMcabEDeji%2FArDk8gmHjz0NT80ouMvbk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2026년 7월 10일부터 12일까지 금산세계인삼엑스포 광장에서 금산 삼계탕축제가 열린다. 삼계탕, 인삼&amp;middot;약초 체험, 물놀이, 야간 공연까지 함께 즐길 수 있다&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;627&quot; data-filename=&quot;964e8232-3729-4053-bd48-bd8a77e1916b_35.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;[금산] 금산 삼계탕축제, 인삼과 약초로 즐기는 여름 보양 축제&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;2026년 7월 10일부터 12일까지 금산세계인삼엑스포 광장에서 금산 삼계탕축제가 열린다. 삼계탕, 인삼·약초 체험, 물놀이, 야간 공연까지 함께 즐길 수 있다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;금산 삼계탕축제, 금산 축제, 삼계탕 축제, 금산 인삼, 여름 축제, 충남 축제, 금산세계인삼엑스포 광장, 보양식 축제, 가족 체험, 야간 공연&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;[금산] 금산 삼계탕축제, 인삼과 약초로 즐기는 여름 보양 축제&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;금산 정통 삼계탕부터 물놀이, 약초 체험, 야간 공연까지 온 가족이 즐기는 대표 여름 축제다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/geumsan-samgyetang-festival-2026&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;[금산] 금산 삼계탕축제, 인삼과 약초로 즐기는 여름 보양 축제&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;2026년 7월 10일부터 12일까지 금산세계인삼엑스포 광장에서 열리는 여름 보양식 축제다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;style&gt;
    .post-content {
      max-width: 860px;
      margin: 0 auto;
      line-height: 1.7;
      color: inherit;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.4;
      margin: 2.4rem 0 0.6rem;
      letter-spacing: -0.02em;
    }

    .post-content h3 {
      font-size: 1.15rem;
      line-height: 1.45;
      margin: 1.5rem 0 0.5rem;
    }

    .post-content .section-gap {
      height: 0.7rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .info-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1.1rem 1.2rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .info-box strong {
      display: inline-block;
      margin-bottom: 0.35rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0;
      font-size: 0.96rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.85rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      width: 28%;
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content ul {
      margin: 0 0 1rem;
      padding-left: 1.2rem;
    }

    .post-content li {
      margin-bottom: 0.45rem;
    }

    .post-content .program-box {
      border-radius: 16px;
      padding: 1.2rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.08);
      border: 1px solid rgba(120, 120, 120, 0.25);
    }

    .post-content .cta-box {
      border-radius: 16px;
      padding: 1.2rem;
      margin: 2rem 0 0;
      background: rgba(120, 120, 120, 0.08);
      border: 1px solid rgba(120, 120, 120, 0.25);
    }

    .post-content .cta-box a {
      font-weight: 700;
      text-decoration: underline;
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;[금산] 금산 삼계탕축제, 인삼과 약초로 즐기는 여름 보양 축제&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        대한민국 대표 보양식 삼계탕이 인삼의 고장 금산에서 특별한 여름 축제로 펼쳐진다.
        금산 삼계탕축제는 2026년 7월 10일부터 7월 12일까지 금산세계인삼엑스포 광장에서 열리며,
        금산 인삼이 들어간 정통 삼계탕부터 물놀이, 약초 체험, 야간 공연까지 함께 즐길 수 있는 가족형 축제다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;금산 삼계탕축제 기본 정보&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제는 여름철 대표 보양식인 삼계탕을 주제로 열리는 금산의 대표 여름 행사다.
          인삼과 약초의 지역 이미지를 살려 먹거리, 체험, 공연, 경연 프로그램을 한자리에서 즐길 수 있도록 구성됐다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;축제명&lt;/th&gt;
              &lt;td&gt;금산 삼계탕축제&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;기간&lt;/th&gt;
              &lt;td&gt;2026년 7월 10일 ~ 2026년 7월 12일&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;장소&lt;/th&gt;
              &lt;td&gt;충청남도 금산군 금산읍 인삼광장로 30 금산세계인삼엑스포 광장&lt;/td&gt;
              &lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;location&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://map.daum.net/?latlng=127.501219839446,36.100146319645&amp;amp;q=%EA%B8%88%EC%82%B0%EC%9D%B8%EC%82%BC%EA%B4%80&amp;amp;itemId=8699234&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;span class=&quot;location-info&quot;&gt; &lt;span class=&quot;location-name&quot;&gt;금산인삼관&lt;/span&gt; &lt;span class=&quot;location-address&quot;&gt;충남 금산군 금산읍 인삼광장로 30&lt;/span&gt; &lt;/span&gt; &lt;/a&gt;&lt;/figure&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;입장료&lt;/th&gt;
              &lt;td&gt;무료, 일부 체험 및 판매 프로그램 유료&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;주관&lt;/th&gt;
              &lt;td&gt;(재)금산문화관광축제재단&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;문의&lt;/th&gt;
              &lt;td&gt;041-750-2319&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;공식 홈페이지&lt;/th&gt;
              &lt;td&gt;
                &lt;a href=&quot;https://www.insamfestival.co.kr/html/kr/sub4/sub4_0401.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;insamfestival.co.kr&lt;/a&gt;&lt;br&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh5vxP/dJMcahkDbNl/knCYshjgho6qHkhdCn9qK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh5vxP/dJMcahkDbNl/knCYshjgho6qHkhdCn9qK1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;964e8232-3729-4053-bd48-bd8a77e1916b_40.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh5vxP/dJMcahkDbNl/knCYshjgho6qHkhdCn9qK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh5vxP%2FdJMcahkDbNl%2FknCYshjgho6qHkhdCn9qK1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncVvM/dJMcagF1hVQ/RWSKQvWyl497dQIk2sCii1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncVvM/dJMcagF1hVQ/RWSKQvWyl497dQIk2sCii1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;964e8232-3729-4053-bd48-bd8a77e1916b_37.jpg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncVvM/dJMcagF1hVQ/RWSKQvWyl497dQIk2sCii1/img.jpg&quot; alt=&quot;2026년 7월 10일부터 12일까지 금산세계인삼엑스포 광장에서 금산 삼계탕축제가 열린다. 삼계탕&amp;amp;amp;#44; 인삼&amp;amp;middot;약초 체험&amp;amp;amp;#44; 물놀이&amp;amp;amp;#44; 야간 공연까지 함께 즐길 수 있다&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FncVvM%2FdJMcagF1hVQ%2FRWSKQvWyl497dQIk2sCii1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YFrjQ/dJMcaiRi1FM/kH5gINeb7MPAzN5doCVaG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YFrjQ/dJMcaiRi1FM/kH5gINeb7MPAzN5doCVaG0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;627&quot; data-filename=&quot;964e8232-3729-4053-bd48-bd8a77e1916b_38.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YFrjQ/dJMcaiRi1FM/kH5gINeb7MPAzN5doCVaG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYFrjQ%2FdJMcaiRi1FM%2FkH5gINeb7MPAzN5doCVaG0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;출처 : 대한민국 구석구석&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
      &lt;section&gt;
        &lt;h2&gt;인삼의 고장에서 만나는 특별한 삼계탕&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제의 가장 큰 매력은 금산 인삼을 활용한 정통 삼계탕이다.
          큼직한 인삼이 들어간 보양식 삼계탕을 현장에서 맛볼 수 있으며,
          다양한 식재료가 더해진 개성 있는 삼계탕 메뉴도 함께 만나볼 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          삼계탕은 여름철 기력 회복을 떠올리게 하는 대표 음식이다.
          여기에 금산 인삼과 약초가 더해지면서 축제장은 단순한 먹거리 공간을 넘어
          건강과 지역 특산물을 함께 경험하는 장소가 된다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;실제 방문 시 금산 삼계탕축제는 가족 단위 관람객에게 잘 맞는 여름 행사다.&lt;/strong&gt;&lt;br&gt;
          어른들은 금산 인삼이 들어간 보양식을 즐길 수 있고, 아이들은 물놀이와 체험 프로그램을 함께 즐길 수 있다.&lt;br&gt;
          운영 환경에서는 먹거리, 체험, 공연 동선이 한곳에 모이는 축제인 만큼 방문 전 프로그램 시간을 확인하는 것이 좋다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;먹거리 프로그램&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제에서는 전통 삼계탕뿐 아니라 젊은 세대의 입맛을 고려한 이색 음식도 준비된다.
          인삼과 닭을 활용한 간편 음식, 여름 건강 푸드, 수제 디저트, 푸드트럭까지 다양한 먹거리 코너가 운영된다.
        &lt;/p&gt;

        &lt;div class=&quot;program-box&quot;&gt;
          &lt;strong&gt;주요 판매 코너&lt;/strong&gt;&lt;br&gt;
          금산 삼계탕 판매코너&lt;br&gt;
          삼삼한 치킨푸드 코너&lt;br&gt;
          금산 여름 건강 푸드 코너&lt;br&gt;
          금산 수제 디저트 코너&lt;br&gt;
          여름 푸드트럭 코너&lt;br&gt;
          야간 별빛 플리마켓
        &lt;/div&gt;

        &lt;p&gt;
          낮에는 삼계탕과 건강식을 중심으로 여름 보양식을 즐기고,
          저녁에는 야간 별빛 플리마켓과 푸드 코너를 둘러보며 여유로운 축제 분위기를 느낄 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;가족이 함께 즐기는 체험 행사&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제는 먹거리 중심 행사에 그치지 않고,
          무더위를 시원하게 날려줄 물 콘텐츠와 금산 약초를 활용한 건강 체험을 함께 운영한다.
          여름철 아이들과 함께 방문하기 좋은 이유도 이 체험 프로그램에 있다.
        &lt;/p&gt;

        &lt;div class=&quot;program-box&quot;&gt;
          &lt;strong&gt;주요 체험 행사&lt;/strong&gt;&lt;br&gt;
          여름 물놀이 금산 여름 삼캉스&lt;br&gt;
          금산 약초 체험관&lt;br&gt;
          가족여름문화체험&lt;br&gt;
          영양 가득 건강 쿠킹 클래스
        &lt;/div&gt;

        &lt;p&gt;
          물놀이 프로그램은 여름 축제의 시원한 분위기를 더하고,
          약초 체험관과 쿠킹 클래스는 금산의 지역 특색을 직접 경험할 수 있게 해준다.
          관리자 입장에서 보면 금산 삼계탕축제는 지역 특산물 홍보와 가족형 체험 콘텐츠가 자연스럽게 결합된 행사다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;공연과 경연으로 이어지는 여름밤&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          축제 기간에는 삼계탕과 간편음식을 주제로 한 경연대회,
          스타 셰프 디너 쿠킹쇼, 버스킹, 음악회, 열대야 삼맥파티 등
          낮부터 밤까지 이어지는 공연·경연 프로그램이 마련된다.
        &lt;/p&gt;

        &lt;div class=&quot;program-box&quot;&gt;
          &lt;strong&gt;공연 및 경연 프로그램&lt;/strong&gt;&lt;br&gt;
          K-삼계탕 &amp;amp; 간편음식 경연대회&lt;br&gt;
          스타 셰프 디너 쿠킹쇼&lt;br&gt;
          여름밤 낭만 버스킹&lt;br&gt;
          여름 쿨 음악회&lt;br&gt;
          열대야 삼맥파티&lt;br&gt;
          문화예술 열린 마당
        &lt;/div&gt;

        &lt;p&gt;
          특히 야간 무대 공연은 한여름 열대야를 축제 분위기로 바꿔주는 프로그램이다.
          낮에는 가족 체험과 먹거리를 즐기고,
          저녁에는 음악과 공연을 중심으로 여름밤의 낭만을 즐기는 일정으로 방문 계획을 세우기 좋다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;함께 열리는 부대행사&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제에서는 먹거리와 체험 외에도 삼계탕을 K-푸드 콘텐츠로 조명하는 학술 세미나,
          배달 이벤트, 금산 인삼 구매와 축제 참여를 연결한 프로그램이 함께 운영된다.
        &lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;K-푸드 삼계탕학술 세미나&lt;/li&gt;
          &lt;li&gt;금산 삼계탕 배달 이벤트&lt;/li&gt;
          &lt;li&gt;인삼 사GO 축제 즐기GO&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          이러한 부대행사는 금산 삼계탕축제를 단순한 음식 행사에서 지역 산업과 관광,
          건강 문화를 함께 알리는 여름 대표 축제로 확장하는 역할을 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;방문 전 확인하면 좋은 점&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제는 무료로 입장할 수 있지만 일부 체험, 판매, 음식 구매는 유료로 운영될 수 있다.
          또한 현장 운영 상황, 날씨, 프로그램 일정에 따라 세부 내용이 달라질 수 있으므로
          방문 전 공식 홈페이지 또는 문의처를 통해 최신 안내를 확인하는 것이 좋다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;확인 항목&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;프로그램 시간&lt;/td&gt;
              &lt;td&gt;개막식, 쿠킹쇼, 공연, 경연대회 시간 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;체험 참여&lt;/td&gt;
              &lt;td&gt;물놀이, 약초 체험, 쿠킹 클래스 운영 방식 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;비용&lt;/td&gt;
              &lt;td&gt;입장은 무료이나 일부 먹거리와 체험은 유료 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;방문 준비&lt;/td&gt;
              &lt;td&gt;여름철 야외 행사이므로 모자, 물, 편한 신발 준비 권장&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;문의&lt;/td&gt;
              &lt;td&gt;금산 삼계탕축제 문의처 041-750-2319&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;금산 여름 여행과 함께 즐기기 좋은 축제&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          금산 삼계탕축제는 보양식, 인삼, 약초, 물놀이, 공연을 한 번에 즐길 수 있는 여름 축제다.
          삼계탕을 좋아하는 방문객은 물론,
          아이들과 함께 시원한 체험을 찾는 가족 여행객에게도 잘 어울린다.
        &lt;/p&gt;

        &lt;p&gt;
          금산 인삼의 지역성과 여름 보양식이라는 계절성이 뚜렷하게 결합된 만큼,
          2026년 7월 금산을 찾는다면 금산세계인삼엑스포 광장에서 열리는
          금산 삼계탕축제를 여행 일정에 넣어볼 만하다.
        &lt;/p&gt;

        &lt;div class=&quot;cta-box&quot;&gt;
          &lt;strong&gt;금산 삼계탕축제 안내&lt;/strong&gt;&lt;br&gt;
          기간: 2026년 7월 10일 ~ 2026년 7월 12일&lt;br&gt;
          장소: 충청남도 금산군 금산읍 인삼광장로 30 금산세계인삼엑스포 광장&lt;br&gt;
          문의: 041-750-2319&lt;br&gt;
          공식 홈페이지:
          &lt;a href=&quot;https://www.insamfestival.co.kr/html/kr/sub4/sub4_0401.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;insamfestival.co.kr&lt;/a&gt;&lt;br&gt;
        &lt;/div&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;Event&quot;,
        &quot;@id&quot;: &quot;https://example.com/geumsan-samgyetang-festival-2026#event&quot;,
        &quot;name&quot;: &quot;금산 삼계탕축제&quot;,
        &quot;description&quot;: &quot;2026년 7월 10일부터 12일까지 금산세계인삼엑스포 광장에서 열리는 금산 삼계탕축제는 금산 인삼을 활용한 삼계탕, 건강 먹거리, 물놀이, 약초 체험, 공연과 경연 프로그램을 즐길 수 있는 여름 축제다.&quot;,
        &quot;startDate&quot;: &quot;2026-07-10&quot;,
        &quot;endDate&quot;: &quot;2026-07-12&quot;,
        &quot;eventStatus&quot;: &quot;https://schema.org/EventScheduled&quot;,
        &quot;eventAttendanceMode&quot;: &quot;https://schema.org/OfflineEventAttendanceMode&quot;,
        &quot;location&quot;: {
          &quot;@type&quot;: &quot;Place&quot;,
          &quot;name&quot;: &quot;금산세계인삼엑스포 광장&quot;,
          &quot;address&quot;: {
            &quot;@type&quot;: &quot;PostalAddress&quot;,
            &quot;streetAddress&quot;: &quot;인삼광장로 30&quot;,
            &quot;addressLocality&quot;: &quot;금산읍&quot;,
            &quot;addressRegion&quot;: &quot;충청남도 금산군&quot;,
            &quot;addressCountry&quot;: &quot;KR&quot;
          }
        },
        &quot;image&quot;: &quot;https://example.com/replace-og-image.jpg&quot;,
        &quot;organizer&quot;: {
          &quot;@type&quot;: &quot;Organization&quot;,
          &quot;name&quot;: &quot;(재)금산문화관광축제재단&quot;,
          &quot;telephone&quot;: &quot;041-750-2319&quot;,
          &quot;url&quot;: &quot;https://www.insamfestival.co.kr/html/kr/sub4/sub4_0401.html&quot;
        },
        &quot;offers&quot;: {
          &quot;@type&quot;: &quot;Offer&quot;,
          &quot;price&quot;: &quot;0&quot;,
          &quot;priceCurrency&quot;: &quot;KRW&quot;,
          &quot;availability&quot;: &quot;https://schema.org/InStock&quot;,
          &quot;url&quot;: &quot;https://www.insamfestival.co.kr/html/kr/sub4/sub4_0401.html&quot;,
          &quot;description&quot;: &quot;입장 무료, 일부 체험 및 판매 프로그램 유료&quot;
        },
        &quot;performer&quot;: [
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;여름밤 낭만 버스킹&quot;
          },
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;여름 쿨 음악회&quot;
          },
          {
            &quot;@type&quot;: &quot;PerformingGroup&quot;,
            &quot;name&quot;: &quot;문화예술 열린 마당&quot;
          }
        ],
        &quot;keywords&quot;: [
          &quot;금산 삼계탕축제&quot;,
          &quot;금산 축제&quot;,
          &quot;삼계탕 축제&quot;,
          &quot;금산 인삼&quot;,
          &quot;여름 축제&quot;,
          &quot;충남 축제&quot;,
          &quot;금산세계인삼엑스포 광장&quot;,
          &quot;보양식 축제&quot;,
          &quot;가족 체험&quot;,
          &quot;야간 공연&quot;
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/geumsan-samgyetang-festival-2026#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;축제&quot;,
            &quot;item&quot;: &quot;https://example.com/festival&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;금산 삼계탕축제&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>일상 정보/전국 소식</category>
      <category>가족 체험</category>
      <category>금산 삼계탕축제</category>
      <category>금산 인삼</category>
      <category>금산 축제</category>
      <category>금산세계인삼엑스포 광장</category>
      <category>보양식 축제</category>
      <category>삼계탕 축제</category>
      <category>야간 공연</category>
      <category>여름 축제</category>
      <category>충남 축제</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/558</guid>
      <comments>https://togethergrow.tistory.com/entry/%EA%B8%88%EC%82%B0-%EA%B8%88%EC%82%B0-%EC%82%BC%EA%B3%84%ED%83%95%EC%B6%95%EC%A0%9C-%EC%9D%B8%EC%82%BC%EA%B3%BC-%EC%95%BD%EC%B4%88%EB%A1%9C-%EC%A6%90%EA%B8%B0%EB%8A%94-%EC%97%AC%EB%A6%84-%EB%B3%B4%EC%96%91-%EC%B6%95%EC%A0%9C#entry558comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:12:57 +0900</pubDate>
    </item>
    <item>
      <title>신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안</title>
      <link>https://togethergrow.tistory.com/entry/%EC%8B%A0%EA%B7%9C-%EA%B0%9C%EB%B0%9C-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B3%BC-%EA%B8%B0%EC%A1%B4-%EA%B0%9C%EB%B0%9C-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%97%B0%EB%8F%99-%EB%B0%A9%EC%95%88</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;기존 개발 쿠버네티스 환경과 신규 New Vector 개발 서버를 연결해 이미지 업로드와 내부 통신을 안정적으로 구성하는 구축 방향을 정리했다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;쿠버네티스, 개발서버, 신규 클러스터, 기존 클러스터 연동, New Vector, Docker Repository, 이미지 업로드, 클러스터 통신, k8s, 네트워크 구성&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;worker, master, session 구성을 포함한 기존 개발 쿠버네티스와 신규 New Vector 쿠버네티스 서버의 통신 구조를 정리했다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/newvector-kubernetes-dev-cluster&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;신규 개발 쿠버네티스 서버가 기존 개발 클러스터 이미지 업로드 환경과 통신할 수 있도록 구성하는 핵심 내용을 정리했다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;style&gt;
    .post-content {
      max-width: 860px;
      margin: 0 auto;
      line-height: 1.7;
      color: inherit;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.4;
      margin: 2.4rem 0 0.6rem;
      letter-spacing: -0.02em;
    }

    .post-content h3 {
      font-size: 1.15rem;
      line-height: 1.45;
      margin: 1.6rem 0 0.5rem;
    }

    .post-content .section-gap {
      height: 0.7rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .info-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1.1rem 1.2rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .info-box strong {
      display: inline-block;
      margin-bottom: 0.35rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0;
      font-size: 0.96rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.85rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content ul {
      margin: 0 0 1rem;
      padding-left: 1.2rem;
    }

    .post-content li {
      margin-bottom: 0.45rem;
    }

    .post-content .check-box {
      border-radius: 16px;
      padding: 1.2rem;
      margin: 1.6rem 0;
      background: rgba(120, 120, 120, 0.08);
      border: 1px solid rgba(120, 120, 120, 0.25);
    }

    .post-content code {
      padding: 0.1rem 0.35rem;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        신규 개발용 New Vector 쿠버네티스 서버를 구축하고,
        기존 개발 쿠버네티스 환경과 통신할 수 있도록 연결하는 작업은 단순한 서버 추가가 아니라
        이미지 업로드 경로, 클러스터 간 네트워크, 접근 권한, 운영 검증까지 함께 설계해야 하는 작업이다.
        이번 구성의 핵심 목적은 신규 쿠버네티스 환경에서 기존 개발 쿠버네티스 이미지 업로드 흐름을 사용할 수 있도록
        안정적인 통신 구조를 만드는 데 있다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;구축 목적&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          기존 개발 환경에는 이미 쿠버네티스 클러스터가 구성되어 있으며,
          해당 환경은 &lt;code&gt;worker&lt;/code&gt;, &lt;code&gt;master&lt;/code&gt;, &lt;code&gt;session&lt;/code&gt; 영역으로 운영되고 있다.
          여기에 신규 개발용 New Vector 쿠버네티스 서버를 추가로 구성하고,
          기존 개발 쿠버네티스와 상호 통신이 가능하도록 연결하는 것이 이번 작업의 주요 목표다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 신규 개발 쿠버네티스 서버는 별도의 Docker Repository 환경을 보유하고 있으며,
          기존 개발 쿠버네티스에서 사용하는 이미지 업로드 흐름과 연결되어야 한다.
          따라서 단순히 신규 서버를 생성하는 수준을 넘어,
          기존 클러스터의 각 구성 요소와 신규 클러스터가 필요한 포트와 경로로 통신할 수 있는지 확인해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기존 환경&lt;/td&gt;
              &lt;td&gt;개발 쿠버네티스 클러스터, worker·master·session 구성 포함&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;신규 환경&lt;/td&gt;
              &lt;td&gt;New Vector 개발 쿠버네티스 서버 신규 생성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;저장소&lt;/td&gt;
              &lt;td&gt;신규 개발 서버에서 사용할 Docker Repository 구성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;연동 범위&lt;/td&gt;
              &lt;td&gt;기존 worker, master, session 전체와 통신 연결&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;주요 목적&lt;/td&gt;
              &lt;td&gt;신규 쿠버네티스에서 기존 개발 쿠버네티스 이미지 업로드 경로 사용&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;전체 구성 방향&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 쿠버네티스 서버는 기존 개발 쿠버네티스와 분리된 환경으로 생성하되,
          이미지 업로드와 배포 흐름에 필요한 통신만 명확하게 허용하는 방식으로 구성하는 것이 적절하다.
          모든 포트를 무조건 개방하기보다는 Docker Repository, 쿠버네티스 API, 내부 서비스 호출,
          세션 관련 통신에 필요한 경로를 기준으로 접근 범위를 정리해야 한다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;실무 기준으로 보면 신규 클러스터 구축에서 가장 중요한 부분은 통신 범위 정의다.&lt;/strong&gt;&lt;br&gt;
          기존 개발 쿠버네티스의 worker, master, session 전체와 연결해야 하더라도 모든 접근을 열어두면 관리 위험이 커진다.&lt;br&gt;
          신규 New Vector 쿠버네티스 서버가 이미지 업로드에 필요한 대상만 접근하도록 방화벽, 라우팅, 인증정보를 함께 정리하는 것이 좋다.&lt;br&gt;
          관리자 입장에서는 통신 허용 목록과 실제 배포 흐름이 일치하는지 검증하는 과정이 필수다.
        &lt;/div&gt;

        &lt;p&gt;
          구성은 크게 네 단계로 나눌 수 있다.
          첫째, 신규 개발 쿠버네티스 서버와 Docker Repository를 준비한다.
          둘째, 기존 개발 쿠버네티스의 worker, master, session 구간과 네트워크 통신을 연결한다.
          셋째, 이미지 업로드와 Pull 흐름을 검증한다.
          넷째, 로그와 접근 권한을 기준으로 운영 안정성을 확인한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;신규 New Vector 쿠버네티스 서버 생성&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 서버는 New Vector 전용 개발 환경으로 사용될 예정이므로,
          기존 개발 쿠버네티스와 동일한 기준의 기본 운영 구성을 맞추는 것이 좋다.
          쿠버네티스 버전, 컨테이너 런타임, 네트워크 플러그인, DNS 설정, 인증서 관리 방식이
          기존 개발 환경과 크게 다르면 통신 검증 과정에서 예외가 늘어날 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          Docker Repository가 이미 준비되어 있다면,
          신규 쿠버네티스에서 해당 저장소로 이미지 Push와 Pull이 가능한지 먼저 확인해야 한다.
          이후 기존 개발 쿠버네티스에서 사용하던 이미지 업로드 경로와 신규 저장소 경로를 연결해
          이미지가 어느 위치에서 생성되고, 어느 저장소에 올라가며, 어떤 클러스터에서 가져가는지 흐름을 명확히 해야 한다.
        &lt;/p&gt;

        &lt;h3&gt;신규 서버 준비 시 확인 항목&lt;/h3&gt;

        &lt;ul&gt;
          &lt;li&gt;신규 New Vector 개발 서버의 IP, 호스트명, 도메인 설정&lt;/li&gt;
          &lt;li&gt;쿠버네티스 master 또는 control plane 구성 방식&lt;/li&gt;
          &lt;li&gt;worker node 등록 여부와 리소스 할당 기준&lt;/li&gt;
          &lt;li&gt;Docker Repository 접근 주소와 인증 방식&lt;/li&gt;
          &lt;li&gt;이미지 Push, Pull에 필요한 계정과 Secret 구성&lt;/li&gt;
          &lt;li&gt;기존 개발 쿠버네티스와 통신할 네트워크 대역 확인&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기존 개발 쿠버네티스와 통신 연결&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 New Vector 쿠버네티스는 기존 개발 쿠버네티스의
          &lt;code&gt;worker&lt;/code&gt;, &lt;code&gt;master&lt;/code&gt;, &lt;code&gt;session&lt;/code&gt; 전체와 통신할 수 있어야 한다.
          이때 통신 목적이 이미지 업로드와 배포 연동에 있으므로,
          각 구간에서 필요한 접근 방향을 먼저 정리하는 것이 중요하다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;연동 대상&lt;/th&gt;
              &lt;th&gt;통신 목적&lt;/th&gt;
              &lt;th&gt;확인 사항&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기존 master&lt;/td&gt;
              &lt;td&gt;클러스터 제어, API 접근, 배포 상태 확인&lt;/td&gt;
              &lt;td&gt;API 서버 접근 가능 여부, 인증서 또는 토큰 권한 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기존 worker&lt;/td&gt;
              &lt;td&gt;이미지 Pull, 컨테이너 실행, 내부 서비스 연결&lt;/td&gt;
              &lt;td&gt;Repository 접근 가능 여부, 노드 방화벽 정책 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기존 session&lt;/td&gt;
              &lt;td&gt;세션 기반 서비스 호출 또는 개발 환경 연동&lt;/td&gt;
              &lt;td&gt;세션 서비스 포트, 내부 DNS, 라우팅 정책 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;신규 Docker Repository&lt;/td&gt;
              &lt;td&gt;이미지 업로드 및 배포 이미지 제공&lt;/td&gt;
              &lt;td&gt;Push 권한, Pull 권한, TLS 인증서, 저장소 주소 확인&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          네트워크 연결은 양방향 통신이 필요한 구간과 단방향 통신만 필요한 구간을 분리해 설계해야 한다.
          예를 들어 신규 쿠버네티스에서 기존 Repository로 이미지를 업로드해야 한다면
          신규 서버에서 저장소로 나가는 통신이 필요하다.
          반대로 기존 개발 쿠버네티스가 신규 Repository에서 이미지를 가져가야 한다면
          기존 worker node에서 신규 Repository로 접근하는 경로가 열려 있어야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;이미지 업로드 흐름 설계&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 연동의 핵심은 신규 쿠버네티스 환경이 기존 개발 쿠버네티스의 이미지 업로드 흐름과 연결되는 것이다.
          따라서 이미지를 빌드하는 위치, 저장하는 위치, 배포 시 가져가는 위치를 명확히 구분해야 한다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;단계&lt;/th&gt;
              &lt;th&gt;처리 내용&lt;/th&gt;
              &lt;th&gt;점검 포인트&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;1단계&lt;/td&gt;
              &lt;td&gt;신규 개발 서버에서 이미지 빌드&lt;/td&gt;
              &lt;td&gt;Dockerfile, 태그 규칙, 빌드 권한 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;2단계&lt;/td&gt;
              &lt;td&gt;Docker Repository로 이미지 업로드&lt;/td&gt;
              &lt;td&gt;Push 인증정보, 저장소 주소, 네트워크 접근 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;3단계&lt;/td&gt;
              &lt;td&gt;기존 개발 쿠버네티스에서 이미지 Pull&lt;/td&gt;
              &lt;td&gt;worker node의 Repository 접근 가능 여부 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;4단계&lt;/td&gt;
              &lt;td&gt;기존 또는 신규 클러스터에 배포 반영&lt;/td&gt;
              &lt;td&gt;Deployment, Pod 상태, 이미지 태그 일치 여부 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;5단계&lt;/td&gt;
              &lt;td&gt;서비스 동작 검증&lt;/td&gt;
              &lt;td&gt;session 연동, 내부 호출, 로그 이상 여부 확인&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          &lt;strong&gt;이미지 업로드 흐름에서 반드시 정리해야 할 기준&lt;/strong&gt;&lt;br&gt;
          이미지 태그는 개발 환경에서 추적 가능하도록 날짜, 브랜치, 빌드 번호 중 하나를 포함하는 것이 좋다.&lt;br&gt;
          동일한 latest 태그만 반복 사용하면 장애 발생 시 어떤 이미지가 배포됐는지 확인하기 어렵다.&lt;br&gt;
          Repository 인증정보는 클러스터 Secret으로 관리하고, 계정 권한은 Push 전용과 Pull 전용으로 분리하는 것이 안전하다.&lt;br&gt;
          실제 사용 시에는 신규 쿠버네티스와 기존 쿠버네티스 모두 동일한 저장소 주소를 바라보는지 확인해야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;방화벽과 권한 설정 기준&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 쿠버네티스와 기존 개발 쿠버네티스가 연결되면 편의성은 높아지지만,
          동시에 공격 표면도 넓어질 수 있다.
          따라서 이미지 업로드와 배포에 필요한 최소 범위만 허용하는 방식으로 방화벽과 권한을 설정해야 한다.
        &lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;신규 쿠버네티스에서 Docker Repository로 Push 가능한지 확인&lt;/li&gt;
          &lt;li&gt;기존 worker node에서 Docker Repository로 Pull 가능한지 확인&lt;/li&gt;
          &lt;li&gt;기존 master API 접근은 필요한 계정과 대역에서만 허용&lt;/li&gt;
          &lt;li&gt;session 구간은 필요한 서비스 포트만 제한적으로 허용&lt;/li&gt;
          &lt;li&gt;Repository 계정은 관리자 권한 대신 Push, Pull 목적별 권한으로 분리&lt;/li&gt;
          &lt;li&gt;외부에서 Repository 관리 화면에 직접 접근하지 못하도록 제한&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          특히 master 영역은 클러스터 제어 권한과 연결되므로 접근 대상을 명확하게 제한해야 한다.
          worker 영역은 이미지 Pull과 서비스 통신이 정상적으로 되는지 확인하되,
          불필요한 포트를 열어두지 않는 것이 좋다.
          session 영역은 개발 서비스 특성에 따라 내부 호출이 많을 수 있으므로
          어떤 서비스가 어떤 방향으로 호출되는지 사전에 목록화해야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;구축 후 검증 절차&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          서버 생성과 네트워크 연결이 완료되면 실제 이미지 업로드부터 배포까지 전체 흐름을 한 번에 검증해야 한다.
          단순히 ping이나 포트 연결만 확인하는 것보다,
          실제 개발 이미지가 빌드되고 Repository에 업로드된 뒤 기존 개발 쿠버네티스에서 정상적으로 가져가는지 확인하는 것이 중요하다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;검증 항목&lt;/th&gt;
              &lt;th&gt;정상 기준&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;네트워크 연결&lt;/td&gt;
              &lt;td&gt;신규 쿠버네티스에서 기존 master, worker, session 대상 통신 가능&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Repository 접근&lt;/td&gt;
              &lt;td&gt;이미지 Push와 Pull이 인증 오류 없이 처리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이미지 배포&lt;/td&gt;
              &lt;td&gt;Deployment 반영 후 Pod가 정상 Running 상태로 전환&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;서비스 호출&lt;/td&gt;
              &lt;td&gt;session 관련 서비스와 내부 API 호출이 정상 처리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;로그 확인&lt;/td&gt;
              &lt;td&gt;인증 실패, 이미지 Pull 실패, DNS 실패 로그가 반복되지 않음&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          검증 과정에서 이미지 Pull 오류가 발생한다면 Repository 주소, Secret 설정,
          인증 계정 권한, worker node의 네트워크 경로를 순서대로 확인해야 한다.
          API 접근 오류가 발생한다면 master 접근 제어, kubeconfig 권한,
          인증서 만료 여부를 함께 점검하는 것이 좋다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 안정성을 위한 관리 포인트&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 New Vector 쿠버네티스 서버가 기존 개발 쿠버네티스와 연결되면
          이후에는 변경 관리가 중요해진다.
          이미지 태그 규칙, Repository 계정 관리, 네트워크 허용 정책, 클러스터 접근 권한이 문서화되어 있어야
          담당자가 바뀌거나 장애가 발생해도 빠르게 원인을 추적할 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          또한 기존 개발 쿠버네티스의 worker, master, session 중 어느 구간에서 장애가 발생했는지
          구분할 수 있도록 로그 확인 기준을 마련해야 한다.
          이미지 업로드 실패인지, 이미지 Pull 실패인지, 배포 실패인지, 서비스 통신 실패인지에 따라
          점검 위치가 달라지기 때문이다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;최종적으로 이번 구성은 신규 개발 환경과 기존 개발 환경의 연결 지점을 명확히 만드는 작업이다.&lt;/strong&gt;&lt;br&gt;
          New Vector 쿠버네티스 서버는 독립적으로 생성하되, 이미지 업로드와 배포에 필요한 경로는 기존 쿠버네티스와 연결한다.&lt;br&gt;
          worker, master, session 전체 통신은 허용하되 목적별로 접근 권한을 제한한다.&lt;br&gt;
          Docker Repository는 이미지 흐름의 중심이므로 인증정보, 태그 규칙, 접근 로그를 함께 관리해야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;정리&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          신규 개발 쿠버네티스 서버 구축은 단순히 클러스터를 하나 더 만드는 작업이 아니다.
          기존 개발 쿠버네티스의 worker, master, session 구성과 통신해야 하고,
          신규 Docker Repository를 통해 이미지 업로드와 배포 흐름까지 연결되어야 한다.
        &lt;/p&gt;

        &lt;p&gt;
          따라서 구축 단계에서는 서버 생성, 네트워크 연결, Repository 인증,
          이미지 업로드, 기존 클러스터 Pull, 서비스 검증을 하나의 흐름으로 설계해야 한다.
          이 기준을 갖추면 신규 New Vector 개발 환경에서도 기존 개발 쿠버네티스와 안정적으로 연동하며
          이미지 배포와 테스트를 진행할 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;TechArticle&quot;,
        &quot;@id&quot;: &quot;https://example.com/newvector-kubernetes-dev-cluster#techarticle&quot;,
        &quot;headline&quot;: &quot;신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안&quot;,
        &quot;description&quot;: &quot;기존 개발 쿠버네티스 환경과 신규 New Vector 개발 서버를 연결해 이미지 업로드와 내부 통신을 안정적으로 구성하는 구축 방향을 정리했다.&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/newvector-kubernetes-dev-cluster&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-og-image.jpg&quot;,
        &quot;articleSection&quot;: &quot;쿠버네티스 개발 환경&quot;,
        &quot;keywords&quot;: [
          &quot;쿠버네티스&quot;,
          &quot;개발서버&quot;,
          &quot;신규 클러스터&quot;,
          &quot;기존 클러스터 연동&quot;,
          &quot;New Vector&quot;,
          &quot;Docker Repository&quot;,
          &quot;이미지 업로드&quot;,
          &quot;클러스터 통신&quot;,
          &quot;k8s&quot;,
          &quot;네트워크 구성&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;쿠버네티스&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Docker Repository&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;클러스터 통신&quot;
          }
        ],
        &quot;mentions&quot;: [
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;Kubernetes&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;Docker Repository&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;New Vector 개발 서버&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/newvector-kubernetes-dev-cluster#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;인프라&quot;,
            &quot;item&quot;: &quot;https://example.com/infra&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;신규 개발 쿠버네티스 서버 구축&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/Server</category>
      <category>docker repository</category>
      <category>k8s</category>
      <category>New Vector</category>
      <category>개발서버</category>
      <category>기존 클러스터 연동</category>
      <category>네트워크 구성</category>
      <category>신규 클러스터</category>
      <category>이미지 업로드</category>
      <category>쿠버네티스</category>
      <category>클러스터 통신</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/557</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%8B%A0%EA%B7%9C-%EA%B0%9C%EB%B0%9C-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B3%BC-%EA%B8%B0%EC%A1%B4-%EA%B0%9C%EB%B0%9C-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%97%B0%EB%8F%99-%EB%B0%A9%EC%95%88#entry557comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:08:19 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려</title>
      <link>https://togethergrow.tistory.com/entry/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%B7%A8%EC%95%BD%EC%A0%90-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%9D%B8%EC%A6%9D%EC%A0%95%EB%B3%B4-%EB%85%B8%EC%B6%9C%EA%B3%BC-%EC%84%9C%EB%B2%84-%EC%9E%A5%EC%95%85-%EC%9A%B0%EB%A0%A4</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;Gravity SMTP와 Avada Builder 취약점이 잇따라 공개되면서 워드프레스 관리자에게 플러그인 업데이트와 로그 점검, 접근 통제 강화가 요구되고 있다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;워드프레스, 워드프레스 취약점, Gravity SMTP, Avada Builder, CVE-2026-4020, CVE-2026-8713, 이메일 인증정보, 다크웹 위협, 웹사이트 보안, 플러그인 업데이트&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;이메일 전송 플러그인과 웹사이트 제작 플러그인에서 심각한 취약점이 확인되며 워드프레스 운영자의 신속한 대응이 필요해졌다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/wordpress-plugin-security-alert&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;Gravity SMTP와 Avada Builder 취약점을 악용한 공격 가능성이 커지면서 업데이트, 로그 점검, 방화벽 적용이 중요해지고 있다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;style&gt;
    .post-content {
      max-width: 860px;
      margin: 0 auto;
      line-height: 1.7;
      color: inherit;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.4;
      margin: 2.4rem 0 0.6rem;
      letter-spacing: -0.02em;
    }

    .post-content .section-gap {
      height: 0.7rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .info-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1.1rem 1.2rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .info-box strong {
      display: inline-block;
      margin-bottom: 0.35rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0;
      font-size: 0.96rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.85rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content .check-list {
      margin: 0;
      padding-left: 1.2rem;
    }

    .post-content .check-list li {
      margin-bottom: 0.45rem;
    }

    .post-content .warning-box {
      border-radius: 16px;
      padding: 1.2rem;
      margin: 1.6rem 0;
      background: rgba(120, 120, 120, 0.08);
      border: 1px solid rgba(120, 120, 120, 0.25);
    }

    .post-content code {
      padding: 0.1rem 0.35rem;
      border-radius: 5px;
      background: rgba(120, 120, 120, 0.12);
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        워드프레스 생태계를 겨냥한 대규모 공격 시도가 이어지고 있다.
        10만 개 이상 웹사이트에서 사용 중인 이메일 전송 플러그인과 약 100만 개 사이트에 설치된
        인기 웹사이트 제작 플러그인에서 보안 취약점이 잇따라 확인되면서
        관리자들의 신속한 점검과 업데이트가 요구되고 있다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;워드프레스 플러그인 취약점 확산&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          최근 보안업계에서는 Gravity SMTP 플러그인의 정보 노출 취약점과
          Avada Builder 플러그인의 파일 삭제 취약점이 주요 위험으로 지목되고 있다.
          두 취약점은 성격은 다르지만, 모두 워드프레스 운영 환경에서 추가 침해로 이어질 수 있다는 점에서
          주의가 필요하다.
        &lt;/p&gt;

        &lt;p&gt;
          Gravity SMTP 취약점은 &lt;code&gt;CVE-2026-4020&lt;/code&gt;으로 추적되고 있으며,
          인증되지 않은 사용자가 민감한 시스템 정보를 확인할 수 있는 문제가 핵심이다.
          Avada Builder 취약점은 &lt;code&gt;CVE-2026-8713&lt;/code&gt;으로 분류되며,
          서버 내 임의 파일 삭제로 이어질 수 있는 경로 조작 문제가 포함된다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;영향을 받는 플러그인&lt;/th&gt;
              &lt;th&gt;주요 위험&lt;/th&gt;
              &lt;th&gt;조치 버전&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;정보 노출&lt;/td&gt;
              &lt;td&gt;Gravity SMTP&lt;/td&gt;
              &lt;td&gt;이메일 서비스 API 키, 인증 토큰, 시스템 정보 노출 가능성&lt;/td&gt;
              &lt;td&gt;2.1.5 이상&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;파일 삭제&lt;/td&gt;
              &lt;td&gt;Avada Builder&lt;/td&gt;
              &lt;td&gt;서버 내 주요 파일 삭제 및 사이트 장악 가능성&lt;/td&gt;
              &lt;td&gt;3.15.4 이상&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;이메일 인증정보까지 노출될 수 있는 Gravity SMTP 취약점&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          Gravity SMTP 취약점의 원인은 REST API 설정 오류다.
          플러그인은 시스템 진단 보고서를 제공하는 기능을 갖고 있는데,
          이 과정에서 접근 권한 검증이 충분히 적용되지 않아 외부 사용자가 관련 정보를 조회할 수 있는 상태가 됐다.
        &lt;/p&gt;

        &lt;p&gt;
          공격자가 확보할 수 있는 정보는 단순한 서버 상태에 그치지 않는다.
          아마존 SES, 구글, 메일젯, 리센드, 조호 등 외부 이메일 서비스와 연동된
          API 키, 인증 토큰, 비밀키가 포함될 수 있다.
          워드프레스 버전, 설치된 플러그인 목록, 사용 중인 테마, PHP 환경 정보,
          데이터베이스 구성 정보도 함께 노출될 가능성이 있다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          &lt;strong&gt;운영 환경에서는 이메일 인증정보 노출이 단순 정보 유출로 끝나지 않을 수 있다.&lt;/strong&gt;&lt;br&gt;
          공격자는 탈취한 이메일 인증정보를 이용해 정상 기업이나 기관으로 위장한 메일을 보낼 수 있다.&lt;br&gt;
          또한 사이트 구성 정보를 바탕으로 취약한 플러그인, 오래된 테마, 서버 환경을 파악해 후속 공격을 설계할 수 있다.&lt;br&gt;
          관리자 입장에서 보면 이번 취약점은 사전 정찰 단계의 공격 성공률을 높이는 위험 요소다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;대규모 자동화 스캔과 공격 지표&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          Gravity SMTP 취약점을 노린 공격은 6월 초부터 급격히 증가한 것으로 알려졌다.
          공격자들은 인터넷 전역을 대상으로 취약한 워드프레스 사이트를 찾기 위한 자동화 스캔을 진행하고 있으며,
          웹방화벽에서 차단된 시도도 대규모로 관측되고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          침해 여부를 확인하려는 관리자는 웹 서버 접근 로그에서
          &lt;code&gt;/wp-json/gravitysmtp/v1/tests/mock-data&lt;/code&gt; 요청 흔적을 확인해야 한다.
          특히 &lt;code&gt;?page=gravitysmtp-settings&lt;/code&gt; 매개변수가 포함된 요청은
          취약점 탐색과 관련된 대표적인 지표로 볼 수 있다.
        &lt;/p&gt;

        &lt;ul class=&quot;check-list&quot;&gt;
          &lt;li&gt;Gravity SMTP 버전이 2.1.5 이상인지 확인&lt;/li&gt;
          &lt;li&gt;웹 서버 로그에서 의심스러운 REST API 호출 기록 확인&lt;/li&gt;
          &lt;li&gt;노출 가능성이 있는 이메일 서비스 API 키와 토큰 교체&lt;/li&gt;
          &lt;li&gt;외부 이메일 발송 이력과 비정상 대량 발송 여부 점검&lt;/li&gt;
          &lt;li&gt;워드프레스 관리자 계정과 플러그인 권한 설정 재검토&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Avada Builder 파일 삭제 취약점도 주의&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          같은 시기 Avada Builder 플러그인에서도 치명적인 취약점이 확인됐다.
          &lt;code&gt;CVE-2026-8713&lt;/code&gt;은 경로 조작 문제를 악용해
          서버 내 임의 파일을 삭제할 수 있는 취약점이다.
          인증 없이 악용될 수 있다는 점에서 파급력이 크다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 워드프레스 핵심 설정 파일인 &lt;code&gt;wp-config.php&lt;/code&gt;가 삭제될 경우
          사이트가 초기 설치 상태처럼 전환될 수 있다.
          이 상태를 공격자가 악용하면 관리자 권한 획득이나 악성코드 설치 등
          추가 공격으로 이어질 가능성이 있다.
        &lt;/p&gt;

        &lt;p&gt;
          현재까지 모든 환경에서 동일한 방식의 피해가 발생한다고 단정할 수는 없지만,
          공격 난이도가 낮고 결과가 치명적일 수 있다는 점에서 즉시 업데이트가 필요하다.
          Avada Builder를 사용하는 사이트는 3.15.4 이상 버전 적용 여부를 먼저 확인해야 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자가 우선 확인해야 할 보안 조치&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 사례는 워드프레스 플러그인 취약점이 이메일 계정 악용, 내부 정보 노출,
          서버 파일 훼손, 사이트 장악 가능성으로 확대될 수 있음을 보여준다.
          플러그인은 기능 확장에 필수적이지만, 사용 범위가 넓을수록 취약점 공개 이후 공격 표면도 빠르게 커진다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;점검 항목&lt;/th&gt;
              &lt;th&gt;관리자 조치&lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;플러그인 버전&lt;/td&gt;
              &lt;td&gt;Gravity SMTP 2.1.5 이상, Avada Builder 3.15.4 이상 적용 여부 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;불필요한 플러그인&lt;/td&gt;
              &lt;td&gt;사용하지 않는 플러그인은 비활성화가 아니라 삭제까지 진행&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;접근 로그&lt;/td&gt;
              &lt;td&gt;취약 REST API 요청, 비정상 관리자 접근, 반복 스캔 흔적 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;인증정보&lt;/td&gt;
              &lt;td&gt;이메일 서비스 API 키, SMTP 인증정보, 관리자 비밀번호 교체&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;방어 체계&lt;/td&gt;
              &lt;td&gt;웹 애플리케이션 방화벽 적용, 관리자 페이지 접근 제한, 백업 상태 확인&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;실무 기준으로 보면 업데이트만으로 점검을 끝내서는 안 된다.&lt;/strong&gt;&lt;br&gt;
          취약 버전을 사용한 기간 동안 외부 요청이 있었는지 확인해야 한다.&lt;br&gt;
          이메일 인증정보가 노출됐을 가능성이 있다면 키 교체와 발송 이력 점검을 함께 진행해야 한다.&lt;br&gt;
          파일 삭제 취약점이 의심되는 경우에는 백업 파일과 핵심 설정 파일의 무결성도 확인해야 한다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;신속한 업데이트가 핵심 보안 수칙&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          워드프레스는 전 세계 웹사이트에서 널리 사용되는 만큼,
          인기 플러그인 취약점이 공개되면 공격자는 자동화 도구를 이용해 취약한 사이트를 빠르게 찾아낸다.
          특히 이메일 전송 플러그인과 페이지 제작 플러그인은 운영 사이트의 핵심 기능과 직접 연결되는 경우가 많아
          침해 시 피해 범위가 커질 수 있다.
        &lt;/p&gt;

        &lt;p&gt;
          관리자는 플러그인 최신 버전 적용 여부를 정기적으로 확인하고,
          업데이트가 지연되는 플러그인은 대체 가능성을 검토해야 한다.
          또한 관리자 페이지 접근 통제, 웹방화벽 적용, 로그 모니터링, 정기 백업을 함께 운영해야
          취약점 공개 이후의 공격 확산을 줄일 수 있다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/wordpress-plugin-security-alert#blogposting&quot;,
        &quot;headline&quot;: &quot;워드프레스 플러그인 취약점, 이메일 인증정보 노출과 서버 장악 우려&quot;,
        &quot;description&quot;: &quot;Gravity SMTP와 Avada Builder 취약점이 잇따라 공개되면서 워드프레스 관리자에게 플러그인 업데이트와 로그 점검, 접근 통제 강화가 요구되고 있다.&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/wordpress-plugin-security-alert&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-og-image.jpg&quot;,
        &quot;articleSection&quot;: &quot;사이버 보안&quot;,
        &quot;keywords&quot;: [
          &quot;워드프레스&quot;,
          &quot;워드프레스 취약점&quot;,
          &quot;Gravity SMTP&quot;,
          &quot;Avada Builder&quot;,
          &quot;CVE-2026-4020&quot;,
          &quot;CVE-2026-8713&quot;,
          &quot;이메일 인증정보&quot;,
          &quot;다크웹 위협&quot;,
          &quot;웹사이트 보안&quot;,
          &quot;플러그인 업데이트&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;워드프레스 취약점&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Gravity SMTP&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Avada Builder&quot;
          }
        ],
        &quot;mentions&quot;: [
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;WordPress&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;Gravity SMTP&quot;
          },
          {
            &quot;@type&quot;: &quot;SoftwareApplication&quot;,
            &quot;name&quot;: &quot;Avada Builder&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/wordpress-plugin-security-alert#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;사이버 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;워드프레스 플러그인 취약점&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>Avada Builder</category>
      <category>CVE-2026-4020</category>
      <category>CVE-2026-8713</category>
      <category>Gravity SMTP</category>
      <category>다크웹 위협</category>
      <category>워드프레스</category>
      <category>워드프레스 취약점</category>
      <category>웹사이트 보안</category>
      <category>이메일 인증정보</category>
      <category>플러그인 업데이트</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/556</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%B7%A8%EC%95%BD%EC%A0%90-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%9D%B8%EC%A6%9D%EC%A0%95%EB%B3%B4-%EB%85%B8%EC%B6%9C%EA%B3%BC-%EC%84%9C%EB%B2%84-%EC%9E%A5%EC%95%85-%EC%9A%B0%EB%A0%A4#entry556comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:05:13 +0900</pubDate>
    </item>
    <item>
      <title>스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최</title>
      <link>https://togethergrow.tistory.com/entry/%EC%8A%A4%ED%85%94%EC%8A%A4%EB%AA%A8%EC%96%B4-%EC%A0%9C21%ED%9A%8C-OSINT-%EC%A0%84%EB%AC%B8%EA%B0%80-%EA%B5%90%EC%9C%A1-6%EC%9B%94-30%EC%9D%BC-%EA%B0%9C%EC%B5%9C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXAElt/dJMcahSlYyG/Di8rRV1LW9witm5SyKwAf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXAElt/dJMcahSlYyG/Di8rRV1LW9witm5SyKwAf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXAElt/dJMcahSlYyG/Di8rRV1LW9witm5SyKwAf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXAElt%2FdJMcahSlYyG%2FDi8rRV1LW9witm5SyKwAf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;스텔스모어가 6월 30일부터 7월 2일까지 정부기관, 보안 담당자, 사이버 범죄 수사기관 관계자를 대상으로 OSINT 전문가 교육을 진행한다.&quot; loading=&quot;lazy&quot; width=&quot;556&quot; height=&quot;680&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

  &lt;title&gt;스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;스텔스모어가 6월 30일부터 7월 2일까지 정부기관, 보안 담당자, 사이버 범죄 수사기관 관계자를 대상으로 OSINT 전문가 교육을 진행한다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;스텔스모어, OSINT, 공개 위협정보, 사이버 위협 인텔리전스, 다크웹 분석, 보안 교육, 사이버 범죄 수사, 위협정보 보고서, AI 보안, GMD SOFT Academy&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;다크웹 분석, AI 기반 OSINT 시나리오 구성, 위협 인텔리전스 보고서 작성까지 다루는 3일 실무 교육 과정이다.&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/stealthmole-osint-training&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;정부기관, 민간 보안 담당자, 사이버 범죄 수사기관 관계자를 대상으로 OSINT 실무 교육이 열린다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-og-image.jpg&quot;&gt;

  &lt;style&gt;
    .post-content {
      max-width: 860px;
      margin: 0 auto;
      line-height: 1.7;
      color: inherit;
    }

    .post-content h1 {
      font-size: 2rem;
      line-height: 1.35;
      margin: 0 0 1.2rem;
      letter-spacing: -0.03em;
    }

    .post-content h2 {
      font-size: 1.45rem;
      line-height: 1.4;
      margin: 2.4rem 0 0.6rem;
      letter-spacing: -0.02em;
    }

    .post-content .section-gap {
      height: 0.7rem;
    }

    .post-content p {
      margin: 0 0 1rem;
    }

    .post-content .lead {
      font-size: 1.08rem;
      margin-bottom: 1.4rem;
    }

    .post-content .info-box {
      border: 1px solid rgba(120, 120, 120, 0.35);
      border-radius: 14px;
      padding: 1.1rem 1.2rem;
      margin: 1.4rem 0;
      background: rgba(120, 120, 120, 0.06);
    }

    .post-content .info-box strong {
      display: inline-block;
      margin-bottom: 0.35rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 1.2rem 0;
      font-size: 0.96rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(120, 120, 120, 0.35);
      padding: 0.85rem;
      vertical-align: top;
      text-align: left;
    }

    .post-content th {
      background: rgba(120, 120, 120, 0.08);
      font-weight: 700;
    }

    .post-content .cta-box {
      border-radius: 16px;
      padding: 1.2rem;
      margin: 2rem 0 0;
      background: rgba(120, 120, 120, 0.08);
      border: 1px solid rgba(120, 120, 120, 0.25);
    }

    .post-content .cta-box a {
      font-weight: 700;
      text-decoration: underline;
    }

    .post-content .summary-list {
      margin: 0;
      padding-left: 1.2rem;
    }

    .post-content .summary-list li {
      margin-bottom: 0.45rem;
    }
  &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article&gt;
      &lt;h1&gt;스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        사이버 위협 인텔리전스 기업 스텔스모어가 오는 6월 30일부터 7월 2일까지
        ‘제21회 공개 위협정보(OSINT) 전문가 교육 과정’을 개최한다.
        이번 교육은 정부기관, 민간기업 보안 담당자, 사이버 범죄 수사기관 관계자를 대상으로
        3일간 진행된다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;교육 개요&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          스텔스모어가 마련한 이번 OSINT 전문가 교육은 GMD SOFT Academy 벤티룸에서 열린다.
          교육 대상은 국내 정부기관 관계자와 민간기업 보안 담당자, 사이버 범죄 수사기관 관계자다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;th&gt;교육명&lt;/th&gt;
              &lt;td&gt;제21회 공개 위협정보(OSINT) 전문가 교육 과정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;일정&lt;/th&gt;
              &lt;td&gt;6월 30일 ~ 7월 2일, 총 3일&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;장소&lt;/th&gt;
              &lt;td&gt;GMD SOFT Academy 벤티룸&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;주요 대상&lt;/th&gt;
              &lt;td&gt;정부기관, 민간기업 보안 담당자, 사이버 범죄 수사기관 관계자&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;th&gt;교육 문의&lt;/th&gt;
              &lt;td&gt;
                &lt;a href=&quot;https://stealthmole.com/training/osint-training&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;stealthmole.com&lt;/a&gt;&lt;br&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;OSINT 역량이 중요해진 배경&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          공개 위협정보(OSINT)는 인터넷, 소셜미디어, 공개 데이터베이스, 다크웹 등
          외부에서 접근할 수 있는 정보를 수집하고 분석해 위협 징후와 공격 주체를 파악하는 활동이다.
        &lt;/p&gt;

        &lt;p&gt;
          최근 랜섬웨어 조직의 활동과 유출 정보 거래가 다크웹을 중심으로 확산하면서
          보안 조직과 수사기관에는 정보 수집·분석 역량이 더욱 중요해지고 있다.
          단순히 침해사고가 발생한 뒤 대응하는 수준을 넘어,
          사전에 이상 징후를 확인하고 위험 요소를 선별하는 능력이 필요해진 것이다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;운영 환경에서는 OSINT 분석 역량이 사고 대응 속도를 좌우할 수 있다.&lt;/strong&gt;&lt;br&gt;
          외부에 노출된 계정정보, 불법 거래 게시물, 랜섬웨어 조직의 활동 정황을 조기에 파악하면
          침해사고 전후의 대응 범위를 더 구체적으로 설정할 수 있다.&lt;br&gt;
          관리자 입장에서 보면 OSINT는 보안 관제, 사고 분석, 수사 협업을 연결하는 실무 도구에 가깝다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;교육 과정 주요 내용&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 과정은 OSINT 기초 지식부터 핵심 분석 기법, 고급 데이터 수집,
          스텔스모어 플랫폼을 활용한 다크웹 분석, 인공지능(AI) 기반 OSINT 시나리오 구성,
          위협 인텔리전스 보고서 작성까지 폭넓게 구성됐다.
        &lt;/p&gt;

        &lt;ul class=&quot;summary-list&quot;&gt;
          &lt;li&gt;OSINT 개념과 공개 위협정보 수집 기초&lt;/li&gt;
          &lt;li&gt;다크웹과 딥웹 기반 위협정보 분석&lt;/li&gt;
          &lt;li&gt;고급 데이터 수집 및 연계 분석 방법&lt;/li&gt;
          &lt;li&gt;AI 기반 OSINT 시나리오 구성&lt;/li&gt;
          &lt;li&gt;위협 인텔리전스 보고서 작성 실습&lt;/li&gt;
          &lt;li&gt;수사 및 보안 현장 적용 사례 분석&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;
          교육은 이론 중심 설명에 그치지 않고 실제 정보 수집과 분석 과정을 중심으로 진행된다.
          싱가포르와 일본 등에서 수행된 수사 사례와 분석 결과를 활용해
          참가자들이 현장에서 적용할 수 있는 위협 분석 방법을 익히도록 설계됐다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;다크웹 분석과 사고 대응 활용&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          참가자들은 다크웹과 딥웹에서 확인되는 위협 정보를 분석하고,
          기업이나 기관에 영향을 줄 수 있는 위험 요소를 식별하는 방법을 학습한다.
          유출된 계정정보, 불법 거래 게시물, 랜섬웨어 조직의 활동 등
          여러 데이터를 연결해 위협을 추적하는 방식도 다룬다.
        &lt;/p&gt;

        &lt;p&gt;
          특히 침해사고 발생 전 이상 징후를 파악하는 방법과
          사고 발생 이후 피해 범위, 공격 경로를 분석하는 데 필요한 정보 활용법이 교육에 포함된다.
          실제 사용 시 OSINT는 보안 담당자가 내부 로그만으로 확인하기 어려운 외부 위협 정황을 보완하는 역할을 한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;스텔스모어의 사이버 인텔리전스 경험&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          스텔스모어는 싱가포르에 본사를 둔 사이버 인텔리전스 기업이다.
          세계 35개국 수사기관과 협력해 사이버 범죄 대응 프로젝트를 수행하고 있으며,
          인터폴과도 위협정보 분석 및 범죄 대응 분야에서 협력하고 있다.
        &lt;/p&gt;

        &lt;p&gt;
          회사는 다크웹과 딥웹에서 수집한 데이터를 AI 기술로 분석해
          수사기관과 기업에 제공하고 있다.
          이번 OSINT 전문가 교육 역시 이러한 분석 경험을 기반으로
          현장 중심의 위협정보 활용 능력을 강화하는 데 초점을 맞췄다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;참가자 제공 혜택&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          교육 참가자 전원에게는 스텔스모어 플랫폼 1개월 무료 이용권과
          1년간 온라인 교육 구독권이 제공된다.
          또한 보안·수사 분야 관계자들이 교류할 수 있는 네트워킹 프로그램도 마련된다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          &lt;strong&gt;스텔스모어 교육 담당자 설명&lt;/strong&gt;&lt;br&gt;
          사이버 위협이 빠르게 변화하면서 공개 정보를 수집하고 분석하는 전문 역량이 중요해지고 있다.&lt;br&gt;
          참가자들이 최신 OSINT 분석 기술을 익혀 실제 보안 업무와 수사 현장에 활용할 수 있도록 교육을 구성했다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;교육 신청 및 문의&lt;/h2&gt;
        &lt;div class=&quot;section-gap&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          제21회 OSINT 전문가 교육 과정 신청과 문의는 스텔스모어 교육 페이지에서 확인할 수 있다.
          다크웹 분석, 위협 인텔리전스 보고서 작성, AI 기반 OSINT 활용을 실무 중심으로 익히려는
          보안·수사 분야 관계자에게 적합한 과정이다.
        &lt;/p&gt;

        &lt;div class=&quot;cta-box&quot;&gt;
          &lt;strong&gt;교육 신청 및 문의&lt;/strong&gt;&lt;br&gt;
          &lt;a href=&quot;https://stealthmole.com/training/osint-training&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;stealthmole.com&lt;/a&gt;&lt;br&gt;
        &lt;/div&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/stealthmole-osint-training#blogposting&quot;,
        &quot;headline&quot;: &quot;스텔스모어, 제21회 OSINT 전문가 교육 6월 30일 개최&quot;,
        &quot;description&quot;: &quot;스텔스모어가 6월 30일부터 7월 2일까지 정부기관, 민간 보안 담당자, 사이버 범죄 수사기관 관계자를 대상으로 OSINT 전문가 교육을 진행한다.&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/stealthmole-osint-training&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-og-image.jpg&quot;,
        &quot;articleSection&quot;: &quot;사이버 보안 교육&quot;,
        &quot;keywords&quot;: [
          &quot;스텔스모어&quot;,
          &quot;OSINT&quot;,
          &quot;공개 위협정보&quot;,
          &quot;사이버 위협 인텔리전스&quot;,
          &quot;다크웹 분석&quot;,
          &quot;보안 교육&quot;,
          &quot;사이버 범죄 수사&quot;,
          &quot;위협정보 보고서&quot;,
          &quot;AI 보안&quot;,
          &quot;GMD SOFT Academy&quot;
        ],
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;OSINT&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;사이버 위협 인텔리전스&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;다크웹 분석&quot;
          }
        ],
        &quot;mentions&quot;: [
          {
            &quot;@type&quot;: &quot;Organization&quot;,
            &quot;name&quot;: &quot;스텔스모어&quot;
          },
          {
            &quot;@type&quot;: &quot;Place&quot;,
            &quot;name&quot;: &quot;GMD SOFT Academy 벤티룸&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/stealthmole-osint-training#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;사이버 보안&quot;,
            &quot;item&quot;: &quot;https://example.com/security&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;스텔스모어 OSINT 전문가 교육&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>AI 보안</category>
      <category>GMD SOFT Academy</category>
      <category>OSINT</category>
      <category>공개 위협정보</category>
      <category>다크웹 분석</category>
      <category>보안 교육</category>
      <category>사이버 범죄 수사</category>
      <category>사이버 위협 인텔리전스</category>
      <category>스텔스모어</category>
      <category>위협정보 보고서</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/555</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%8A%A4%ED%85%94%EC%8A%A4%EB%AA%A8%EC%96%B4-%EC%A0%9C21%ED%9A%8C-OSINT-%EC%A0%84%EB%AC%B8%EA%B0%80-%EA%B5%90%EC%9C%A1-6%EC%9B%94-30%EC%9D%BC-%EA%B0%9C%EC%B5%9C#entry555comment</comments>
      <pubDate>Mon, 22 Jun 2026 21:03:04 +0900</pubDate>
    </item>
    <item>
      <title>WAS WildFly 설치 방법과 기본 설정 순서</title>
      <link>https://togethergrow.tistory.com/entry/WAS-WildFly-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95%EA%B3%BC-%EA%B8%B0%EB%B3%B8-%EC%84%A4%EC%A0%95-%EC%88%9C%EC%84%9C</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;WAS WildFly 설치 방법과 기본 설정 순서&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;WAS WildFly를 Linux와 Windows 환경에서 설치하고 실행하는 방법, 관리자 계정 생성, 포트 확인, 배포 디렉터리 구성과 운영 시 주의사항을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;WildFly, WAS, WildFly 설치, 와일드플라이, Java WAS, JBoss, standalone, 관리자 계정, 애플리케이션 배포, 운영 설정&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;WAS WildFly 설치 방법과 기본 설정 순서&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;WAS WildFly를 Linux와 Windows 환경에서 설치하고 실행하는 방법, 관리자 계정 생성, 포트 확인, 배포 디렉터리 구성과 운영 시 주의사항을 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-wildfly-install-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/wildfly-install-guide&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;WAS WildFly 설치 방법과 기본 설정 순서&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;WAS WildFly를 Linux와 Windows 환경에서 설치하고 실행하는 방법, 관리자 계정 생성, 포트 확인, 배포 디렉터리 구성과 운영 시 주의사항을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-wildfly-install-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
    }

    .post-content .article-wrap {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9rem;
      line-height: 1.35;
      letter-spacing: -0.02em;
    }

    .post-content h2 {
      margin: 42px 0 12px;
      font-size: 1.45rem;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 12px;
    }

    .post-content h3 {
      margin: 28px 0 10px;
      font-size: 1.15rem;
      line-height: 1.45;
    }

    .post-content p {
      margin: 0 0 18px;
    }

    .post-content .lead,
    .post-content .info-box,
    .post-content .warning-box,
    .post-content .check-box {
      padding: 18px 20px;
      border: 1px solid rgba(127, 127, 127, 0.25);
      border-radius: 12px;
      margin: 0 0 28px;
    }

    .post-content .info-box {
      border-left: 5px solid #2563eb;
    }

    .post-content .warning-box {
      border-left: 5px solid #d97706;
    }

    .post-content .check-box {
      border-left: 5px solid #16a34a;
    }

    .post-content code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(127, 127, 127, 0.12);
      font-size: 0.95em;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 16px;
      border-radius: 12px;
      background: rgba(127, 127, 127, 0.12);
      margin: 14px 0 22px;
    }

    .post-content pre code {
      padding: 0;
      background: transparent;
      border-radius: 0;
      font-size: 0.95rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0 26px;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(127, 127, 127, 0.25);
      padding: 12px;
      vertical-align: top;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content ul,
    .post-content ol {
      margin: 0 0 20px 22px;
      padding: 0;
    }

    .post-content li {
      margin: 7px 0;
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;WAS WildFly 설치 방법과 기본 설정 순서&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        WildFly는 Java 기반 애플리케이션을 실행하기 위한 오픈소스 WAS입니다.
        설치 자체는 압축 파일을 내려받아 해제한 뒤 실행 스크립트를 실행하는 방식으로 단순하지만, 운영 환경에서는 Java 버전, 실행 계정, 포트, 관리자 계정, 배포 디렉터리, 서비스 등록까지 함께 확인해야 합니다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;설치 전 확인할 사항&lt;/h2&gt;

        &lt;p&gt;
          WildFly 설치 전에는 서버 운영체제, Java 버전, 설치 경로, 사용할 포트, 배포 방식부터 정리하는 것이 좋습니다.
          개발 테스트 환경에서는 압축 해제 후 바로 실행해도 되지만, 운영 환경에서는 전용 계정과 고정 설치 경로를 사용하는 것이 안전합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;확인 내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Java&lt;/td&gt;
              &lt;td&gt;WildFly 실행에 필요한 JDK가 설치되어 있어야 합니다. 운영 기준에서는 LTS 버전 JDK 사용을 권장합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;설치 경로&lt;/td&gt;
              &lt;td&gt;Linux는 &lt;code&gt;/opt/wildfly&lt;/code&gt;, Windows는 &lt;code&gt;C:\wildfly&lt;/code&gt;처럼 관리하기 쉬운 경로를 사용하는 것이 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;실행 계정&lt;/td&gt;
              &lt;td&gt;root 또는 Administrator 직접 실행보다 WildFly 전용 계정 사용이 안전합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기본 포트&lt;/td&gt;
              &lt;td&gt;애플리케이션 접속은 &lt;code&gt;8080&lt;/code&gt;, 관리 콘솔은 &lt;code&gt;9990&lt;/code&gt; 포트를 기본으로 사용합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 방식&lt;/td&gt;
              &lt;td&gt;단일 서버 운영은 &lt;code&gt;standalone&lt;/code&gt;, 여러 서버 중앙 관리는 &lt;code&gt;domain&lt;/code&gt; 모드를 검토합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          실무 기준으로 보면 WildFly 설치는 “압축 해제”보다 “운영 기준에 맞는 실행 구조를 만드는 작업”에 가깝습니다.&lt;br&gt;
          Java 경로, 실행 계정, 포트 정책, 로그 경로, 재시작 방식까지 함께 정리해야 장애 대응이 쉬워집니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Java 설치 확인&lt;/h2&gt;

        &lt;p&gt;
          WildFly는 Java 기반 WAS이므로 먼저 JDK 설치 상태를 확인해야 합니다.
          서버에 Java가 설치되어 있는지 다음 명령어로 확인합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          Linux 환경에서 OpenJDK가 없는 경우 패키지 관리자를 통해 설치할 수 있습니다.
          배포판에 따라 패키지명은 다를 수 있으므로 실제 운영 서버 기준에 맞게 확인해야 합니다.
        &lt;/p&gt;

        &lt;h3&gt;Rocky Linux, AlmaLinux, RHEL 계열 예시&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;sudo dnf install -y java-21-openjdk java-21-openjdk-devel&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;Ubuntu, Debian 계열 예시&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install -y openjdk-21-jdk&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          설치 후 다시 Java 버전을 확인합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;java -version
javac -version&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          WildFly 버전에 따라 권장 Java 버전이 달라질 수 있습니다.&lt;br&gt;
          운영 환경에서는 WildFly 버전과 JDK 버전을 함께 고정하고, 패치 전에는 반드시 테스트 서버에서 기동 여부를 확인하는 것이 좋습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Linux에서 WildFly 설치하기&lt;/h2&gt;

        &lt;p&gt;
          Linux 서버에서는 WildFly 압축 파일을 내려받아 원하는 경로에 해제한 뒤 실행합니다.
          예시는 &lt;code&gt;/opt&lt;/code&gt; 하위에 설치하는 방식입니다.
        &lt;/p&gt;

        &lt;h3&gt;설치 디렉터리 이동&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;cd /opt&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;WildFly 압축 파일 다운로드&lt;/h3&gt;

        &lt;p&gt;
          실제 파일명과 버전은 다운로드 시점의 안정 버전에 맞게 변경해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;sudo wget https://github.com/wildfly/wildfly/releases/download/40.0.0.Final/wildfly-40.0.0.Final.tar.gz&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;압축 해제&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;sudo tar -xvzf wildfly-40.0.0.Final.tar.gz&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;설치 경로를 고정 이름으로 변경&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;sudo mv wildfly-40.0.0.Final wildfly&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이후 관리 편의를 위해 &lt;code&gt;/opt/wildfly&lt;/code&gt; 경로를 WildFly 홈 디렉터리로 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;cd /opt/wildfly
ls -al&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WildFly 디렉터리 구조 이해&lt;/h2&gt;

        &lt;p&gt;
          WildFly를 설치한 뒤에는 주요 디렉터리의 역할을 알아두는 것이 좋습니다.
          장애 분석이나 배포 작업 시 자주 확인하는 경로가 정해져 있기 때문입니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;경로&lt;/th&gt;
              &lt;th&gt;역할&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;bin&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;WildFly 실행 스크립트와 관리자 계정 생성 스크립트가 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;standalone&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;standalone 모드 설정, 로그, 배포 파일이 위치합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;standalone/configuration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;standalone.xml&lt;/code&gt; 등 주요 설정 파일이 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;standalone/deployments&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;WAR, EAR, JAR 파일을 배포하는 디렉터리입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;standalone/log&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;서버 로그가 저장되는 디렉터리입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;modules&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;JDBC 드라이버 등 모듈 기반 라이브러리 구성이 들어갑니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WildFly 실행하기&lt;/h2&gt;

        &lt;p&gt;
          WildFly를 기본 standalone 모드로 실행하려면 &lt;code&gt;bin&lt;/code&gt; 디렉터리의 &lt;code&gt;standalone.sh&lt;/code&gt;를 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;cd /opt/wildfly/bin
./standalone.sh&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          정상 실행되면 기본 애플리케이션 포트인 &lt;code&gt;8080&lt;/code&gt;으로 접속할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;http://서버IP:8080&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          서버 내부에서 포트가 열렸는지 확인하려면 다음 명령어를 사용할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ss -lntp | grep 8080&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          기본 실행은 로컬 또는 테스트 목적에 적합합니다.&lt;br&gt;
          외부에서 접속해야 하는 운영 서버라면 바인딩 주소를 명시해야 합니다.&lt;br&gt;
          방화벽, 보안그룹, 서버 접근 정책도 함께 확인해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;외부 접속 가능하도록 실행하기&lt;/h2&gt;

        &lt;p&gt;
          기본 실행 상태에서는 환경에 따라 로컬 바인딩만 되어 외부 접속이 제한될 수 있습니다.
          외부에서 애플리케이션에 접속해야 한다면 &lt;code&gt;-b&lt;/code&gt; 옵션을 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;./standalone.sh -b 0.0.0.0&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          관리 콘솔까지 외부 접속이 필요하다면 관리 바인딩 주소도 별도로 지정해야 합니다.
          다만 관리 콘솔 외부 개방은 보안 위험이 있으므로 운영 환경에서는 접근 대역을 제한하는 것이 좋습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;./standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          관리 콘솔 포트 &lt;code&gt;9990&lt;/code&gt;을 전체 대역에 개방하는 것은 위험할 수 있습니다.&lt;br&gt;
          운영 환경에서는 VPN, 방화벽, 보안그룹, 접근 제어 정책을 적용해야 합니다.&lt;br&gt;
          관리자 계정 비밀번호도 단순 문자열을 사용하지 않는 것이 좋습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;관리자 계정 생성&lt;/h2&gt;

        &lt;p&gt;
          WildFly 관리 콘솔에 접속하려면 관리자 계정을 생성해야 합니다.
          Linux에서는 &lt;code&gt;add-user.sh&lt;/code&gt;, Windows에서는 &lt;code&gt;add-user.bat&lt;/code&gt;를 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;cd /opt/wildfly/bin
./add-user.sh&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          실행 후 계정 유형을 선택하는 화면이 나오면 일반적으로 Management User를 선택합니다.
          이후 사용자명과 비밀번호를 입력하면 관리 콘솔 접속 계정이 생성됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;입력 항목&lt;/th&gt;
              &lt;th&gt;설명&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;Management User&lt;/td&gt;
              &lt;td&gt;관리 콘솔과 CLI 접속용 계정입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Application User&lt;/td&gt;
              &lt;td&gt;애플리케이션 인증에 사용할 수 있는 계정입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Username&lt;/td&gt;
              &lt;td&gt;관리자 로그인에 사용할 계정명입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Password&lt;/td&gt;
              &lt;td&gt;보안 정책에 맞는 복잡한 비밀번호를 사용해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          관리자 콘솔은 다음 주소로 접근합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;http://서버IP:9990&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;WAR 파일 배포 방법&lt;/h2&gt;

        &lt;p&gt;
          가장 단순한 배포 방식은 &lt;code&gt;standalone/deployments&lt;/code&gt; 디렉터리에 WAR 파일을 복사하는 것입니다.
          WildFly의 deployment scanner가 파일을 감지해 자동 배포합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;cp sample.war /opt/wildfly/standalone/deployments/&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          배포가 완료되면 같은 디렉터리에 &lt;code&gt;.deployed&lt;/code&gt; 파일이 생성됩니다.
          배포 실패 시에는 &lt;code&gt;.failed&lt;/code&gt; 파일이 생성될 수 있으므로 로그와 함께 확인해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ls -al /opt/wildfly/standalone/deployments/&lt;/code&gt;&lt;/pre&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;상태 파일&lt;/th&gt;
              &lt;th&gt;의미&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sample.war.deployed&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;배포가 정상 완료된 상태입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sample.war.failed&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;배포 실패 상태입니다. 서버 로그 확인이 필요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sample.war.isdeploying&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;배포가 진행 중인 상태입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;sample.war.undeployed&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;배포가 해제된 상태입니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;로그 확인 방법&lt;/h2&gt;

        &lt;p&gt;
          WildFly 실행 중 오류가 발생하면 가장 먼저 &lt;code&gt;server.log&lt;/code&gt;를 확인합니다.
          애플리케이션 배포 실패, 포트 충돌, JDBC 연결 실패, 메모리 문제 등이 이 로그에 기록됩니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;tail -f /opt/wildfly/standalone/log/server.log&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          최근 오류만 빠르게 확인하려면 다음처럼 검색할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;grep -i &quot;error\|exception\|failed&quot; /opt/wildfly/standalone/log/server.log&lt;/code&gt;&lt;/pre&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          운영 환경에서는 로그 확인 기준을 미리 정해두는 것이 좋습니다.&lt;br&gt;
          서버 기동 로그, 배포 로그, 애플리케이션 예외, 데이터소스 연결 오류를 구분해서 보면 장애 원인 파악이 빨라집니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Windows에서 WildFly 설치하기&lt;/h2&gt;

        &lt;p&gt;
          Windows 환경에서도 설치 방식은 비슷합니다.
          ZIP 파일을 내려받아 원하는 경로에 압축을 해제한 뒤 &lt;code&gt;standalone.bat&lt;/code&gt;를 실행합니다.
        &lt;/p&gt;

        &lt;h3&gt;설치 경로 예시&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;C:\wildfly&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;명령 프롬프트에서 실행&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;cd C:\wildfly\bin
standalone.bat&lt;/code&gt;&lt;/pre&gt;

        &lt;h3&gt;관리자 계정 생성&lt;/h3&gt;

        &lt;pre&gt;&lt;code&gt;cd C:\wildfly\bin
add-user.bat&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          Windows 서버에서 운영할 경우에는 수동 실행보다 서비스 등록 방식을 검토하는 것이 좋습니다.
          서버 재부팅 후 자동 기동, 표준 로그 관리, 계정 권한 분리를 위해 서비스화가 필요할 수 있습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Linux 서비스 등록 기본 예시&lt;/h2&gt;

        &lt;p&gt;
          운영 서버에서는 터미널에서 직접 실행하기보다 systemd 서비스로 등록해 관리하는 방식이 일반적입니다.
          먼저 WildFly 전용 계정을 생성합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;sudo useradd -r -s /sbin/nologin wildfly
sudo chown -R wildfly:wildfly /opt/wildfly&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          systemd 서비스 파일을 생성합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;sudo vi /etc/systemd/system/wildfly.service&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          기본 예시는 다음과 같습니다.
          실제 운영 환경에서는 Java 옵션, 바인딩 주소, 로그 정책을 서버 기준에 맞게 조정해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;[Unit]
Description=WildFly Application Server
After=network.target

[Service]
Type=simple
User=wildfly
Group=wildfly
Environment=&quot;JAVA_HOME=/usr/lib/jvm/java-21-openjdk&quot;
Environment=&quot;JBOSS_HOME=/opt/wildfly&quot;
ExecStart=/opt/wildfly/bin/standalone.sh -b 0.0.0.0
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          서비스 파일을 적용하고 WildFly를 시작합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable wildfly
sudo systemctl start wildfly
sudo systemctl status wildfly&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;포트와 방화벽 확인&lt;/h2&gt;

        &lt;p&gt;
          WildFly가 정상 실행되어도 방화벽이나 보안그룹에서 포트가 차단되어 있으면 외부 접속이 되지 않습니다.
          기본 포트는 다음과 같습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;포트&lt;/th&gt;
              &lt;th&gt;용도&lt;/th&gt;
              &lt;th&gt;운영 시 주의사항&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTP 애플리케이션 접속&lt;/td&gt;
              &lt;td&gt;리버스 프록시나 L4/L7 로드밸런서 뒤에 둘 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;8443&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;HTTPS 접속&lt;/td&gt;
              &lt;td&gt;인증서 적용 방식과 프록시 구성을 함께 검토해야 합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;9990&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;관리 콘솔&lt;/td&gt;
              &lt;td&gt;전체 공개를 피하고 관리자 대역만 허용하는 것이 좋습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;p&gt;
          Linux에서 포트 리스닝 상태는 다음 명령어로 확인할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;ss -lntp | grep java&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;설치 후 기본 점검 순서&lt;/h2&gt;

        &lt;p&gt;
          설치가 끝났다면 단순히 화면 접속만 확인하지 말고 실행 계정, 포트, 로그, 배포 상태까지 함께 확인해야 합니다.
        &lt;/p&gt;

        &lt;ol&gt;
          &lt;li&gt;&lt;code&gt;java -version&lt;/code&gt;으로 Java 버전을 확인합니다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;systemctl status wildfly&lt;/code&gt; 또는 실행 터미널에서 기동 상태를 확인합니다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;8080&lt;/code&gt; 포트 접속으로 기본 화면을 확인합니다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;9990&lt;/code&gt; 관리 콘솔 접속과 관리자 로그인을 확인합니다.&lt;/li&gt;
          &lt;li&gt;&lt;code&gt;server.log&lt;/code&gt;에 오류가 없는지 확인합니다.&lt;/li&gt;
          &lt;li&gt;테스트 WAR 파일을 배포해 실제 애플리케이션 실행 여부를 확인합니다.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 시 주의사항&lt;/h2&gt;

        &lt;p&gt;
          WildFly 설치 후 운영 단계에서는 보안, 메모리, 로그, 배포 절차를 반드시 관리해야 합니다.
          특히 개발 환경에서 사용하던 기본 설정을 그대로 운영에 적용하면 장애나 보안 문제가 발생할 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          관리 콘솔 포트는 반드시 접근 제한을 적용해야 합니다.&lt;br&gt;
          운영 서버에서는 root 계정으로 WildFly를 실행하지 않는 것이 좋습니다.&lt;br&gt;
          배포 파일을 직접 덮어쓰기 전에 기존 파일 백업과 롤백 절차를 준비해야 합니다.&lt;br&gt;
          JVM 메모리 옵션은 서버 사양과 애플리케이션 특성에 맞게 조정해야 합니다.
        &lt;/div&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;점검 항목&lt;/th&gt;
              &lt;th&gt;권장 기준&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;실행 계정&lt;/td&gt;
              &lt;td&gt;WildFly 전용 계정 사용&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;관리 포트&lt;/td&gt;
              &lt;td&gt;관리자 IP 또는 내부망만 허용&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;JVM 옵션&lt;/td&gt;
              &lt;td&gt;메모리, GC, 인코딩 옵션을 운영 기준에 맞게 설정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;로그 관리&lt;/td&gt;
              &lt;td&gt;로그 회전, 보관 기간, 디스크 사용량 모니터링 적용&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;배포 관리&lt;/td&gt;
              &lt;td&gt;수동 복사보다 표준 배포 절차와 롤백 기준 수립&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;자주 발생하는 문제&lt;/h2&gt;

        &lt;p&gt;
          WildFly 설치 후 자주 발생하는 문제는 대부분 Java 경로, 포트 충돌, 권한 문제, 방화벽 설정에서 발생합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;증상&lt;/th&gt;
              &lt;th&gt;가능한 원인&lt;/th&gt;
              &lt;th&gt;확인 방법&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;WildFly가 실행되지 않음&lt;/td&gt;
              &lt;td&gt;Java 미설치, JAVA_HOME 오류, 실행 권한 부족&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;java -version&lt;/code&gt;, &lt;code&gt;echo $JAVA_HOME&lt;/code&gt;, 로그 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;8080 접속 불가&lt;/td&gt;
              &lt;td&gt;바인딩 주소 문제, 방화벽 차단, 서비스 미기동&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;ss -lntp&lt;/code&gt;, 방화벽 정책 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;9990 관리 콘솔 접속 불가&lt;/td&gt;
              &lt;td&gt;관리 바인딩 미설정, 방화벽 차단, 계정 미생성&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;-bmanagement&lt;/code&gt; 옵션과 관리자 계정 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;WAR 배포 실패&lt;/td&gt;
              &lt;td&gt;애플리케이션 오류, 라이브러리 충돌, 설정 누락&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;server.log&lt;/code&gt;, &lt;code&gt;.failed&lt;/code&gt; 파일 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기동 후 바로 종료&lt;/td&gt;
              &lt;td&gt;포트 충돌, 메모리 부족, 설정 파일 오류&lt;/td&gt;
              &lt;td&gt;포트 사용 현황과 기동 로그 확인&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;마무리&lt;/h2&gt;

        &lt;p&gt;
          WAS WildFly 설치는 압축 파일을 내려받아 해제하고 &lt;code&gt;standalone.sh&lt;/code&gt; 또는 &lt;code&gt;standalone.bat&lt;/code&gt;를 실행하는 방식으로 시작할 수 있습니다.
          하지만 운영 환경에서는 Java 버전, 실행 계정, 포트 개방, 관리자 계정, 서비스 등록, 로그 관리까지 함께 구성해야 안정적으로 사용할 수 있습니다.
        &lt;/p&gt;

        &lt;p&gt;
          처음 설치할 때는 기본 standalone 모드로 기동 여부를 확인하고, 이후 애플리케이션 배포, 관리자 콘솔 접근 제한, systemd 서비스 등록, JVM 옵션 조정 순서로 진행하는 것이 좋습니다.
          운영자 입장에서는 설치 성공 여부보다 “재기동 가능성, 로그 추적 가능성, 보안 통제 가능성”을 기준으로 WildFly 구성을 점검해야 합니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/wildfly-install-guide#blogposting&quot;,
        &quot;headline&quot;: &quot;WAS WildFly 설치 방법과 기본 설정 순서&quot;,
        &quot;description&quot;: &quot;WAS WildFly를 Linux와 Windows 환경에서 설치하고 실행하는 방법, 관리자 계정 생성, 포트 확인, 배포 디렉터리 구성과 운영 시 주의사항을 정리했습니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/wildfly-install-guide&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-wildfly-install-image.jpg&quot;,
        &quot;keywords&quot;: [
          &quot;WildFly&quot;,
          &quot;WAS&quot;,
          &quot;WildFly 설치&quot;,
          &quot;와일드플라이&quot;,
          &quot;Java WAS&quot;,
          &quot;JBoss&quot;,
          &quot;standalone&quot;,
          &quot;관리자 계정&quot;,
          &quot;애플리케이션 배포&quot;,
          &quot;운영 설정&quot;
        ],
        &quot;articleSection&quot;: &quot;WAS 운영&quot;,
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;WildFly 설치&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;Java WAS&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;애플리케이션 서버 운영&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/wildfly-install-guide#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;WAS 운영&quot;,
            &quot;item&quot;: &quot;https://example.com/category/was&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;WAS WildFly 설치 방법과 기본 설정 순서&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/Server</category>
      <category>Java WAS</category>
      <category>JBoss</category>
      <category>StandAlone</category>
      <category>WAS</category>
      <category>wildfly</category>
      <category>WildFly 설치</category>
      <category>관리자 계정</category>
      <category>애플리케이션 배포</category>
      <category>와일드플라이</category>
      <category>운영 설정</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/554</guid>
      <comments>https://togethergrow.tistory.com/entry/WAS-WildFly-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95%EA%B3%BC-%EA%B8%B0%EB%B3%B8-%EC%84%A4%EC%A0%95-%EC%88%9C%EC%84%9C#entry554comment</comments>
      <pubDate>Sat, 20 Jun 2026 13:22:45 +0900</pubDate>
    </item>
    <item>
      <title>디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까</title>
      <link>https://togethergrow.tistory.com/entry/%EB%94%94%EC%8A%A4%ED%81%AC-IO-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1%EA%B3%BC-DBMS-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1%EC%9D%80-%EA%B0%99%EC%9D%80-%EC%9D%98%EB%AF%B8%EC%9D%BC%EA%B9%8C</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;운영자 관점에서 디스크 I/O 레벨 로드밸런싱과 DBMS 로드밸런싱의 차이를 설명하고, AgensSQL HA 설명 문구가 요구사항을 충족하는지 판단 기준을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;디스크 I/O, DBMS 로드밸런싱, AgensSQL HA, 이중화, Fail-over, Primary Standby, Read Only, 데이터베이스 운영, HA 구성, 운영자 관점&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;운영자 관점에서 디스크 I/O 레벨 로드밸런싱과 DBMS 로드밸런싱의 차이를 설명하고, AgensSQL HA 설명 문구가 요구사항을 충족하는지 판단 기준을 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-dbms-load-balancing-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/dbms-disk-io-load-balancing&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;운영자 관점에서 디스크 I/O 레벨 로드밸런싱과 DBMS 로드밸런싱의 차이를 설명하고, AgensSQL HA 설명 문구가 요구사항을 충족하는지 판단 기준을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-dbms-load-balancing-image.jpg&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
    }

    .post-content .article-wrap {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9rem;
      line-height: 1.35;
      letter-spacing: -0.02em;
    }

    .post-content h2 {
      margin: 42px 0 12px;
      font-size: 1.45rem;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 12px;
    }

    .post-content h3 {
      margin: 28px 0 10px;
      font-size: 1.15rem;
      line-height: 1.45;
    }

    .post-content p {
      margin: 0 0 18px;
    }

    .post-content .lead,
    .post-content .answer-box,
    .post-content .warning-box,
    .post-content .check-box {
      padding: 18px 20px;
      border: 1px solid rgba(127, 127, 127, 0.25);
      border-radius: 12px;
      margin: 0 0 28px;
    }

    .post-content .answer-box {
      border-left: 5px solid #2563eb;
    }

    .post-content .warning-box {
      border-left: 5px solid #d97706;
    }

    .post-content .check-box {
      border-left: 5px solid #16a34a;
    }

    .post-content code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(127, 127, 127, 0.12);
      font-size: 0.95em;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0 26px;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(127, 127, 127, 0.25);
      padding: 12px;
      vertical-align: top;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content ul,
    .post-content ol {
      margin: 0 0 20px 22px;
      padding: 0;
    }

    .post-content li {
      margin: 7px 0;
    }
  &lt;/style&gt;

  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        운영자 입장에서 보면 “디스크 드라이브에 대해 병렬 방식으로 로드밸런싱을 자동 수행하는 기능”과 “DBMS 이중화 구성에서 Primary-Standby로 로드밸런싱을 지원하는 기능”은 같은 의미가 아닙니다.
        두 표현은 모두 부하 분산이라는 말을 쓰지만, 부하를 나누는 계층과 대상이 다릅니다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;결론부터 정리&lt;/h2&gt;

        &lt;div class=&quot;answer-box&quot;&gt;
          결론적으로 두 문장은 똑같은 의미가 아닙니다.&lt;br&gt;
          “디스크 I/O 레벨 로드밸런싱”은 저장장치나 스토리지 계층에서 읽기·쓰기 I/O를 여러 디스크에 분산하는 기능을 의미합니다.&lt;br&gt;
          반면 “AgensSQL HA 이중화 구성의 Primary(Read/Write)-Standby(Read Only) 로드밸런싱”은 DBMS 접속 또는 SQL 요청을 Primary와 Standby로 분산하는 기능에 가깝습니다.&lt;br&gt;
          따라서 디스크 드라이브 병렬 I/O 로드밸런싱 요구사항에 대한 답변으로는 부족하거나 관점이 맞지 않을 수 있습니다.
        &lt;/div&gt;

        &lt;p&gt;
          즉, 제시된 문구는 &lt;strong&gt;DBMS 고가용성 및 읽기 부하 분산&lt;/strong&gt;에 대한 설명입니다.
          그러나 원래 요구사항인 “디스크 드라이브에 대해 병렬 방식으로 로드밸런싱을 자동 수행하는 기능 지원 여부”는 &lt;strong&gt;스토리지 또는 디스크 I/O 계층&lt;/strong&gt;의 기능을 묻는 것으로 해석됩니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;첫 번째 관점: 디스크 I/O 레벨 로드밸런싱&lt;/h2&gt;

        &lt;p&gt;
          디스크 I/O 레벨 로드밸런싱은 데이터베이스가 실행되는 서버나 스토리지 장비에서 여러 디스크로 읽기·쓰기 요청을 분산하는 기능을 말합니다.
          대표적으로 RAID, LVM striping, SAN 스토리지의 I/O 분산, 멀티패스 I/O, 스토리지 컨트롤러 기반 분산 등이 여기에 가까운 개념입니다.
        &lt;/p&gt;

        &lt;p&gt;
          이 관점에서 핵심 질문은 “DBMS가 Primary인지 Standby인지”가 아닙니다.
          운영자 입장에서는 실제 데이터 파일, WAL 또는 로그 파일, 인덱스 파일, 임시 파일에 대한 디스크 접근이 여러 디스크에 병렬로 분산되는지가 중요합니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;대상 계층&lt;/td&gt;
              &lt;td&gt;디스크, 볼륨, 파일시스템, 스토리지, I/O 경로&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분산 대상&lt;/td&gt;
              &lt;td&gt;읽기 I/O, 쓰기 I/O, 블록 접근, 스토리지 경로&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;대표 기능&lt;/td&gt;
              &lt;td&gt;RAID striping, LVM striping, SAN I/O 분산, multipath, 스토리지 컨트롤러 분산&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 점검 포인트&lt;/td&gt;
              &lt;td&gt;디스크별 IOPS, latency, queue depth, throughput, path 상태&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          이 요구사항에 답하려면 “AgensSQL HA가 지원한다”가 아니라 스토리지 구성에서 디스크 I/O가 어떻게 분산되는지를 설명해야 합니다.&lt;br&gt;
          예를 들어 RAID 10, LVM striping, SAN volume 구성, multipath 정책, 파일시스템 배치 방식 등을 근거로 제시하는 것이 더 적절합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;두 번째 관점: DBMS 로드밸런싱&lt;/h2&gt;

        &lt;p&gt;
          DBMS 로드밸런싱은 애플리케이션 또는 DB 접속 계층에서 SQL 요청을 여러 DB 서버로 나누는 기능을 말합니다.
          Primary 서버는 일반적으로 읽기와 쓰기를 처리하고, Standby 서버는 읽기 전용 쿼리를 처리하는 방식이 대표적입니다.
        &lt;/p&gt;

        &lt;p&gt;
          사용자가 제시한 “AgensSQL HA 이중화 구성으로 자동 Fail-over를 지원하고, Primary(Read/Write)-Standby(Read Only) 구성으로 로드밸런싱을 지원합니다”라는 문장은 이 관점에 해당합니다.
          즉, DBMS 서버 단위의 고가용성과 읽기 부하 분산을 설명하는 문장입니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;구분&lt;/th&gt;
              &lt;th&gt;내용&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;대상 계층&lt;/td&gt;
              &lt;td&gt;DBMS, DB 접속 계층, SQL 라우팅, HA 구성&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분산 대상&lt;/td&gt;
              &lt;td&gt;읽기 쿼리, 접속 세션, 일부 SELECT 요청&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;대표 구성&lt;/td&gt;
              &lt;td&gt;Primary-Standby, Read/Write 분리, Read Only replica 활용&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;운영 점검 포인트&lt;/td&gt;
              &lt;td&gt;Primary 상태, Standby 지연, replication lag, failover 동작, read-only 라우팅&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;두 관점의 핵심 차이&lt;/h2&gt;

        &lt;p&gt;
          두 기능은 모두 성능과 안정성에 관련되지만, 운영자가 확인해야 하는 기준이 완전히 다릅니다.
          디스크 I/O 레벨 로드밸런싱은 물리 또는 논리 스토리지 계층의 분산이고, DBMS 로드밸런싱은 DB 서버 또는 SQL 요청 계층의 분산입니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;비교 항목&lt;/th&gt;
              &lt;th&gt;디스크 I/O 레벨 로드밸런싱&lt;/th&gt;
              &lt;th&gt;DBMS 로드밸런싱&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;질문 의도&lt;/td&gt;
              &lt;td&gt;디스크 드라이브 간 I/O가 병렬 분산되는가&lt;/td&gt;
              &lt;td&gt;DB 요청이 Primary와 Standby로 분산되는가&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;기술 계층&lt;/td&gt;
              &lt;td&gt;스토리지, OS, 볼륨, 파일시스템&lt;/td&gt;
              &lt;td&gt;DBMS, HA 솔루션, 커넥션 라우팅&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;분산되는 부하&lt;/td&gt;
              &lt;td&gt;블록 I/O, 디스크 읽기·쓰기&lt;/td&gt;
              &lt;td&gt;SQL 요청, 주로 읽기 쿼리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;쓰기 분산 여부&lt;/td&gt;
              &lt;td&gt;스토리지 구성에 따라 가능&lt;/td&gt;
              &lt;td&gt;대부분 Primary에서 쓰기 처리&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;장애 대응 성격&lt;/td&gt;
              &lt;td&gt;디스크 장애, 경로 장애, 스토리지 성능 저하 대응&lt;/td&gt;
              &lt;td&gt;DB 서버 장애 시 Fail-over 및 서비스 연속성 확보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;제시 문구와의 적합성&lt;/td&gt;
              &lt;td&gt;직접 답변으로 보기 어려움&lt;/td&gt;
              &lt;td&gt;해당 설명과 직접 관련 있음&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;제시 문구의 의미를 정확히 해석하면&lt;/h2&gt;

        &lt;p&gt;
          제시된 문구는 다음처럼 해석하는 것이 적절합니다.
        &lt;/p&gt;

        &lt;div class=&quot;answer-box&quot;&gt;
          AgensSQL HA 구성은 DBMS 이중화를 통해 Primary 장애 시 Standby로 자동 Fail-over를 지원한다.&lt;br&gt;
          또한 Primary는 Read/Write를 처리하고 Standby는 Read Only 처리를 담당할 수 있어 읽기 부하 분산 구성이 가능하다.&lt;br&gt;
          다만 이 설명은 디스크 드라이브 단위의 병렬 I/O 로드밸런싱을 의미하지는 않는다.
        &lt;/div&gt;

        &lt;p&gt;
          따라서 “디스크 드라이브에 대해 병렬 방식으로 로드밸런싱을 자동 수행하는 기능 지원 여부”라는 항목에 그대로 답변하면, 요구사항 검토자가 보기에는 질문과 답변이 어긋나 보일 수 있습니다.
          실무 기준으로 보면 이 항목은 DBMS HA 기능이 아니라 스토리지 아키텍처 또는 서버 디스크 구성 자료로 답변하는 것이 안전합니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;요구사항 답변으로 쓸 때의 주의사항&lt;/h2&gt;

        &lt;p&gt;
          만약 제안서나 기술검토서에서 이 항목을 작성해야 한다면, 두 기능을 분리해서 표현하는 것이 좋습니다.
          특히 “지원”이라고 단정하기 전에 어떤 계층에서 지원하는지 명확히 적어야 합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          “로드밸런싱 지원”이라는 표현만 쓰면 오해가 생길 수 있습니다.&lt;br&gt;
          디스크 I/O 로드밸런싱인지, DBMS 읽기 쿼리 로드밸런싱인지, 접속 세션 로드밸런싱인지 반드시 구분해야 합니다.&lt;br&gt;
          운영 환경에서는 계층을 구분하지 않은 답변이 장애 대응 책임 범위와 성능 보장 범위를 불명확하게 만들 수 있습니다.
        &lt;/div&gt;

        &lt;h3&gt;부적절할 수 있는 답변&lt;/h3&gt;

        &lt;p&gt;
          다음 문장은 DBMS 로드밸런싱 설명이므로 디스크 I/O 로드밸런싱 요구사항에 대한 직접 답변으로는 부족합니다.
        &lt;/p&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          AgensSQL HA 이중화 구성으로 자동 Fail-over를 지원하고, Primary(Read/Write)-Standby(Read Only) 구성으로 로드밸런싱을 지원합니다.
        &lt;/div&gt;

        &lt;h3&gt;더 명확한 답변 예시&lt;/h3&gt;

        &lt;p&gt;
          디스크 I/O와 DBMS 로드밸런싱을 함께 설명해야 한다면 다음처럼 분리하는 방식이 좋습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          디스크 드라이브 단위의 병렬 I/O 로드밸런싱은 DBMS HA 기능이 아니라 서버 또는 스토리지 계층의 RAID, 볼륨 스트라이핑, SAN 구성, multipath 정책 등에 의해 결정됩니다.&lt;br&gt;
          AgensSQL HA는 DBMS 계층에서 Primary(Read/Write)-Standby(Read Only) 기반의 고가용성 및 읽기 부하 분산 구성을 지원합니다.&lt;br&gt;
          따라서 디스크 I/O 레벨 로드밸런싱과 DBMS 로드밸런싱은 별도 항목으로 구분해 검토해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영자 관점의 판단 기준&lt;/h2&gt;

        &lt;p&gt;
          운영자 입장에서 이 요구사항을 검토할 때는 “어디에서 부하가 분산되는가”를 먼저 확인해야 합니다.
          같은 로드밸런싱이라는 용어를 쓰더라도, 디스크 계층과 DBMS 계층은 점검 도구와 장애 대응 방식이 다릅니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;운영 질문&lt;/th&gt;
              &lt;th&gt;확인해야 할 대상&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;여러 디스크에 I/O가 분산되는가&lt;/td&gt;
              &lt;td&gt;RAID 구성, LVM 구성, 스토리지 볼륨 구성, multipath 상태&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;쓰기 I/O도 분산되는가&lt;/td&gt;
              &lt;td&gt;디스크 스트라이핑, RAID 레벨, 스토리지 컨트롤러 정책&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;읽기 쿼리를 Standby로 보낼 수 있는가&lt;/td&gt;
              &lt;td&gt;DBMS HA 구성, Read/Write split, 커넥션 라우팅&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Primary 장애 시 자동 전환되는가&lt;/td&gt;
              &lt;td&gt;Fail-over 정책, VIP 또는 접속 엔드포인트, 재접속 방식&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;Standby가 최신 데이터를 읽는가&lt;/td&gt;
              &lt;td&gt;Replication lag, 동기·비동기 복제 방식, 읽기 일관성 요구사항&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;마무리&lt;/h2&gt;

        &lt;p&gt;
          질문의 핵심은 “디스크 I/O 레벨 로드밸런싱 가능 여부”와 “DBMS 로드밸런싱 가능 여부”를 같은 의미로 볼 수 있느냐입니다.
          답은 같지 않다는 쪽에 가깝습니다.
        &lt;/p&gt;

        &lt;p&gt;
          AgensSQL HA의 Primary-Standby 구성은 DBMS 계층에서 고가용성과 읽기 부하 분산을 제공하는 설명입니다.
          하지만 디스크 드라이브에 대한 병렬 I/O 로드밸런싱은 스토리지나 OS 계층의 구성으로 판단해야 합니다.
          따라서 해당 요구사항에는 “DBMS HA 로드밸런싱은 지원하지만, 디스크 I/O 로드밸런싱은 별도 스토리지 구성 기준으로 확인 필요”라고 구분해 답변하는 것이 가장 명확합니다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/dbms-disk-io-load-balancing#blogposting&quot;,
        &quot;headline&quot;: &quot;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&quot;,
        &quot;description&quot;: &quot;운영자 관점에서 디스크 I/O 레벨 로드밸런싱과 DBMS 로드밸런싱의 차이를 설명하고, AgensSQL HA 설명 문구가 요구사항을 충족하는지 판단 기준을 정리했습니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/dbms-disk-io-load-balancing&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-dbms-load-balancing-image.jpg&quot;,
        &quot;keywords&quot;: [
          &quot;디스크 I/O&quot;,
          &quot;DBMS 로드밸런싱&quot;,
          &quot;AgensSQL HA&quot;,
          &quot;이중화&quot;,
          &quot;Fail-over&quot;,
          &quot;Primary Standby&quot;,
          &quot;Read Only&quot;,
          &quot;데이터베이스 운영&quot;,
          &quot;HA 구성&quot;,
          &quot;운영자 관점&quot;
        ],
        &quot;articleSection&quot;: &quot;데이터베이스 운영&quot;,
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;디스크 I/O 로드밸런싱&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;DBMS 로드밸런싱&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;AgensSQL HA&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/dbms-disk-io-load-balancing#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;데이터베이스 운영&quot;,
            &quot;item&quot;: &quot;https://example.com/category/database-operation&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;디스크 I/O 로드밸런싱과 DBMS 로드밸런싱은 같은 의미일까&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/ETC</category>
      <category>AgensSQL HA</category>
      <category>DBMS 로드밸런싱</category>
      <category>Fail-Over</category>
      <category>HA 구성</category>
      <category>Primary Standby</category>
      <category>read only</category>
      <category>데이터베이스 운영</category>
      <category>디스크 I/O</category>
      <category>운영자 관점</category>
      <category>이중화</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/553</guid>
      <comments>https://togethergrow.tistory.com/entry/%EB%94%94%EC%8A%A4%ED%81%AC-IO-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1%EA%B3%BC-DBMS-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1%EC%9D%80-%EA%B0%99%EC%9D%80-%EC%9D%98%EB%AF%B8%EC%9D%BC%EA%B9%8C#entry553comment</comments>
      <pubDate>Sat, 20 Jun 2026 13:20:00 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항</title>
      <link>https://togethergrow.tistory.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-K8s-%ED%8C%8C%EB%93%9C-%ED%99%95%EC%9D%B8-%EB%B0%A9%EB%B2%95%EA%B3%BC-%EC%9A%B4%EC%98%81-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
  &lt;title&gt;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;쿠버네티스 K8s에서 파드 상태를 확인하는 기본 명령어부터 로그, 이벤트, 상세 정보 점검 방법과 운영 환경에서 주의해야 할 사항을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;쿠버네티스, K8s, 파드 확인, kubectl, Pod 상태, 파드 로그, 파드 이벤트, 컨테이너 상태, Kubernetes, 운영 점검&quot;&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index, follow, max-image-preview:large&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;쿠버네티스 K8s에서 파드 상태를 확인하는 기본 명령어부터 로그, 이벤트, 상세 정보 점검 방법과 운영 환경에서 주의해야 할 사항을 정리했습니다.&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/replace-kubernetes-pod-check-image.jpg&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/kubernetes-pod-check&quot;&gt;
  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&quot;&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;쿠버네티스 K8s에서 파드 상태를 확인하는 기본 명령어부터 로그, 이벤트, 상세 정보 점검 방법과 운영 환경에서 주의해야 할 사항을 정리했습니다.&quot;&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/replace-kubernetes-pod-check-image.jpg&quot;&gt;
  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      color: inherit;
    }

    .post-content .article-wrap {
      max-width: 860px;
      margin: 0 auto;
    }

    .post-content h1 {
      margin: 0 0 24px;
      font-size: 1.9rem;
      line-height: 1.35;
      letter-spacing: -0.02em;
    }

    .post-content h2 {
      margin: 42px 0 12px;
      font-size: 1.45rem;
      line-height: 1.4;
      letter-spacing: -0.02em;
    }

    .post-content h2::after {
      content: &quot;&quot;;
      display: block;
      height: 12px;
    }

    .post-content h3 {
      margin: 28px 0 10px;
      font-size: 1.15rem;
      line-height: 1.45;
    }

    .post-content p {
      margin: 0 0 18px;
    }

    .post-content .lead {
      padding: 18px 20px;
      border: 1px solid rgba(127, 127, 127, 0.25);
      border-radius: 12px;
      margin: 0 0 28px;
    }

    .post-content .info-box,
    .post-content .warning-box,
    .post-content .check-box {
      padding: 18px 20px;
      border-radius: 12px;
      margin: 22px 0;
      border: 1px solid rgba(127, 127, 127, 0.25);
    }

    .post-content .warning-box {
      border-left: 5px solid #d97706;
    }

    .post-content .check-box {
      border-left: 5px solid #2563eb;
    }

    .post-content code {
      padding: 2px 5px;
      border-radius: 5px;
      background: rgba(127, 127, 127, 0.12);
      font-size: 0.95em;
    }

    .post-content pre {
      overflow-x: auto;
      padding: 16px;
      border-radius: 12px;
      background: rgba(127, 127, 127, 0.12);
      margin: 14px 0 22px;
    }

    .post-content pre code {
      padding: 0;
      background: transparent;
      border-radius: 0;
      font-size: 0.95rem;
    }

    .post-content table {
      width: 100%;
      border-collapse: collapse;
      margin: 18px 0 26px;
      font-size: 0.95rem;
    }

    .post-content th,
    .post-content td {
      border: 1px solid rgba(127, 127, 127, 0.25);
      padding: 12px;
      vertical-align: top;
    }

    .post-content th {
      font-weight: 700;
    }

    .post-content ul,
    .post-content ol {
      margin: 0 0 20px 22px;
      padding: 0;
    }

    .post-content li {
      margin: 7px 0;
    }

    .post-content .summary-list {
      margin-top: 10px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;main class=&quot;post-content&quot;&gt;
    &lt;article class=&quot;article-wrap&quot;&gt;
      &lt;h1&gt;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&lt;/h1&gt;

      &lt;p class=&quot;lead&quot;&gt;
        쿠버네티스 K8s에서 장애를 확인할 때 가장 먼저 보는 대상은 파드입니다.
        파드는 애플리케이션 컨테이너가 실제로 실행되는 최소 단위이기 때문에 상태, 로그, 이벤트, 재시작 횟수만 확인해도 문제의 방향을 빠르게 좁힐 수 있습니다.
      &lt;/p&gt;

      &lt;section&gt;
        &lt;h2&gt;파드 확인이 중요한 이유&lt;/h2&gt;

        &lt;p&gt;
          쿠버네티스 K8s 환경에서는 서비스가 정상처럼 보여도 내부 파드가 재시작 중이거나, 일부 컨테이너만 비정상 상태일 수 있습니다.
          특히 운영 환경에서는 단순히 &lt;code&gt;Running&lt;/code&gt; 상태인지 보는 것만으로는 충분하지 않습니다.
          실제 사용 시에는 준비 상태, 재시작 횟수, 이벤트, 로그를 함께 확인해야 장애 원인을 정확히 파악할 수 있습니다.
        &lt;/p&gt;

        &lt;div class=&quot;check-box&quot;&gt;
          파드 상태 확인의 핵심은 단순 상태값이 아니라 전체 흐름을 보는 것입니다.&lt;br&gt;
          현재 상태, 준비 여부, 재시작 횟수, 최근 이벤트, 로그를 함께 확인해야 합니다.&lt;br&gt;
          관리자 입장에서 보면 특정 파드 하나의 문제가 서비스 전체 장애로 이어질 수 있으므로 반복 점검 기준을 갖추는 것이 중요합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;전체 파드 목록 확인&lt;/h2&gt;

        &lt;p&gt;
          가장 기본적인 쿠버네티스 파드 확인 명령어는 &lt;code&gt;kubectl get pods&lt;/code&gt;입니다.
          현재 네임스페이스에 있는 파드 목록과 상태를 간단히 확인할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          다른 네임스페이스의 파드를 확인하려면 &lt;code&gt;-n&lt;/code&gt; 옵션을 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -n 네임스페이스명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          클러스터 전체 네임스페이스의 파드를 한 번에 보려면 다음 명령어를 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -A&lt;/code&gt;&lt;/pre&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;명령어&lt;/th&gt;
              &lt;th&gt;용도&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;현재 네임스페이스의 파드 목록 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -n default&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;특정 네임스페이스의 파드 목록 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -A&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;전체 네임스페이스의 파드 목록 확인&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -o wide&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;노드, 파드 IP 등 추가 정보 확인&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;파드 상태값 읽는 방법&lt;/h2&gt;

        &lt;p&gt;
          &lt;code&gt;kubectl get pods&lt;/code&gt; 결과에서 가장 먼저 볼 항목은 &lt;code&gt;READY&lt;/code&gt;, &lt;code&gt;STATUS&lt;/code&gt;, &lt;code&gt;RESTARTS&lt;/code&gt;, &lt;code&gt;AGE&lt;/code&gt;입니다.
          이 네 가지 항목은 쿠버네티스 파드 확인 과정에서 기본 점검 지표로 사용됩니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;항목&lt;/th&gt;
              &lt;th&gt;확인 포인트&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;READY&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;컨테이너가 준비 상태인지 확인합니다. 예를 들어 &lt;code&gt;1/1&lt;/code&gt;은 정상, &lt;code&gt;0/1&lt;/code&gt;은 준비되지 않은 상태입니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;STATUS&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;Running&lt;/code&gt;, &lt;code&gt;Pending&lt;/code&gt;, &lt;code&gt;CrashLoopBackOff&lt;/code&gt;, &lt;code&gt;Error&lt;/code&gt; 등 현재 상태를 보여줍니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;RESTARTS&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;컨테이너가 재시작된 횟수입니다. 값이 계속 증가하면 로그와 이벤트 확인이 필요합니다.&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;AGE&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;파드가 생성된 후 경과한 시간입니다. 최근 생성된 파드인지 장시간 운영 중인지 판단할 수 있습니다.&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          &lt;code&gt;STATUS&lt;/code&gt;가 &lt;code&gt;Running&lt;/code&gt;이어도 서비스가 정상이라는 뜻은 아닙니다.&lt;br&gt;
          &lt;code&gt;READY&lt;/code&gt;가 부족하거나 &lt;code&gt;RESTARTS&lt;/code&gt;가 증가 중이면 내부 컨테이너 문제가 남아 있을 수 있습니다.&lt;br&gt;
          운영 환경에서는 상태값 하나만 보지 말고 반드시 상세 정보와 로그를 함께 확인해야 합니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;파드 상세 정보 확인&lt;/h2&gt;

        &lt;p&gt;
          특정 파드의 상세 정보를 확인하려면 &lt;code&gt;kubectl describe pod&lt;/code&gt; 명령어를 사용합니다.
          이 명령어는 파드의 스케줄링 정보, 컨테이너 상태, 볼륨, 이벤트 등을 한 번에 보여줍니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl describe pod 파드명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          네임스페이스를 지정해야 하는 경우에는 다음처럼 입력합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl describe pod 파드명 -n 네임스페이스명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          상세 정보에서 특히 중요한 부분은 &lt;code&gt;Events&lt;/code&gt; 영역입니다.
          이미지 Pull 실패, 리소스 부족, 볼륨 마운트 실패, 헬스 체크 실패 같은 원인이 이벤트에 남는 경우가 많습니다.
        &lt;/p&gt;

        &lt;div class=&quot;info-box&quot;&gt;
          상세 정보에서 우선 확인할 부분은 &lt;code&gt;State&lt;/code&gt;, &lt;code&gt;Last State&lt;/code&gt;, &lt;code&gt;Ready&lt;/code&gt;, &lt;code&gt;Restart Count&lt;/code&gt;, &lt;code&gt;Events&lt;/code&gt;입니다.&lt;br&gt;
          장애 분석 시에는 마지막 상태와 최근 이벤트를 함께 보면 원인 추적이 훨씬 쉬워집니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;파드 로그 확인&lt;/h2&gt;

        &lt;p&gt;
          애플리케이션 내부 오류를 확인하려면 파드 로그를 확인해야 합니다.
          단일 컨테이너 파드라면 다음 명령어로 로그를 볼 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl logs 파드명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          실시간으로 로그를 추적하려면 &lt;code&gt;-f&lt;/code&gt; 옵션을 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl logs -f 파드명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          여러 컨테이너가 들어 있는 파드라면 컨테이너 이름을 지정해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl logs 파드명 -c 컨테이너명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이전에 종료된 컨테이너의 로그를 확인하려면 &lt;code&gt;--previous&lt;/code&gt; 옵션을 사용합니다.
          &lt;code&gt;CrashLoopBackOff&lt;/code&gt; 상태를 분석할 때 특히 유용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl logs 파드명 --previous&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;자주 보는 파드 이상 상태&lt;/h2&gt;

        &lt;p&gt;
          쿠버네티스 파드 확인 중 자주 만나는 상태값은 다음과 같습니다.
          상태값의 의미를 알고 있으면 문제 원인을 빠르게 분류할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;상태&lt;/th&gt;
              &lt;th&gt;의미&lt;/th&gt;
              &lt;th&gt;우선 확인할 항목&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;Pending&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;파드가 아직 노드에 배치되지 않았거나 실행 준비가 끝나지 않은 상태입니다.&lt;/td&gt;
              &lt;td&gt;노드 리소스, 스케줄링 조건, PVC 바인딩 여부&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;CrashLoopBackOff&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;컨테이너가 실행 후 반복적으로 종료되는 상태입니다.&lt;/td&gt;
              &lt;td&gt;애플리케이션 로그, 환경 변수, 실행 명령, 이전 로그&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;ImagePullBackOff&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;컨테이너 이미지를 가져오지 못하는 상태입니다.&lt;/td&gt;
              &lt;td&gt;이미지 경로, 태그, 레지스트리 인증 정보&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;ErrImagePull&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;이미지 Pull 과정에서 오류가 발생한 상태입니다.&lt;/td&gt;
              &lt;td&gt;이미지 이름, 네트워크, 권한, Secret 설정&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;Completed&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Job 성격의 파드가 정상 종료된 상태입니다.&lt;/td&gt;
              &lt;td&gt;Job 실행 결과, 재실행 필요 여부&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;노드와 파드 위치 확인&lt;/h2&gt;

        &lt;p&gt;
          파드가 어느 노드에서 실행 중인지 확인하려면 &lt;code&gt;-o wide&lt;/code&gt; 옵션을 사용합니다.
          특정 노드에서만 문제가 반복될 때 유용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -o wide&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          전체 네임스페이스 기준으로 노드 배치를 확인하려면 다음 명령어를 사용할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -A -o wide&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          특정 노드에 장애가 있거나 리소스가 부족하면 해당 노드에 배치된 파드에서만 문제가 반복될 수 있습니다.
          이때는 파드 상태뿐 아니라 노드 상태도 함께 확인해야 합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get nodes
kubectl describe node 노드명&lt;/code&gt;&lt;/pre&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;라벨로 파드 필터링하기&lt;/h2&gt;

        &lt;p&gt;
          운영 중인 클러스터에서는 파드 수가 많기 때문에 라벨 필터를 사용하는 것이 좋습니다.
          특정 애플리케이션의 파드만 확인하려면 &lt;code&gt;-l&lt;/code&gt; 옵션을 사용합니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -l app=애플리케이션명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          네임스페이스와 라벨을 함께 지정하면 더 정확하게 조회할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pods -n 네임스페이스명 -l app=애플리케이션명&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          배포 리소스와 연결된 파드를 확인할 때도 라벨 기준 조회가 유용합니다.
          실무 기준으로 보면 파드 이름은 재생성될 때 바뀔 수 있으므로, 운영 점검 자동화에서는 파드 이름보다 라벨을 기준으로 조회하는 방식이 더 안정적입니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;YAML 또는 JSON 형식으로 확인하기&lt;/h2&gt;

        &lt;p&gt;
          파드의 전체 설정과 상태를 자세히 보려면 YAML 또는 JSON 출력 형식을 사용할 수 있습니다.
        &lt;/p&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pod 파드명 -o yaml&lt;/code&gt;&lt;/pre&gt;

        &lt;pre&gt;&lt;code&gt;kubectl get pod 파드명 -o json&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;
          이 방식은 환경 변수, 볼륨, 이미지, 어노테이션, 컨테이너 상태, 조건 정보를 세밀하게 확인할 때 유용합니다.
          다만 출력량이 많기 때문에 필요한 항목을 찾을 때는 &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt;, &lt;code&gt;yq&lt;/code&gt; 같은 도구와 함께 사용하는 경우가 많습니다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;파드 확인 시 주의사항&lt;/h2&gt;

        &lt;p&gt;
          쿠버네티스 K8s 파드 확인은 단순 조회 작업처럼 보이지만, 운영 환경에서는 몇 가지 주의할 점이 있습니다.
          잘못된 판단으로 파드를 삭제하거나 재시작하면 장애 범위가 커질 수 있습니다.
        &lt;/p&gt;

        &lt;ol&gt;
          &lt;li&gt;&lt;strong&gt;네임스페이스를 먼저 확인합니다.&lt;/strong&gt; 같은 이름의 애플리케이션이 여러 네임스페이스에 있을 수 있습니다.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Running 상태만 믿지 않습니다.&lt;/strong&gt; Ready 상태와 재시작 횟수를 함께 봐야 합니다.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;이벤트와 로그를 함께 확인합니다.&lt;/strong&gt; 이벤트는 인프라 원인, 로그는 애플리케이션 원인을 찾는 데 도움이 됩니다.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;파드 이름 직접 의존을 피합니다.&lt;/strong&gt; 파드는 재생성될 수 있으므로 라벨 기준 조회가 더 안전합니다.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;삭제 전 소유 리소스를 확인합니다.&lt;/strong&gt; Deployment, ReplicaSet, Job 등 상위 리소스에 의해 다시 생성될 수 있습니다.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;div class=&quot;warning-box&quot;&gt;
          장애 상황에서 &lt;code&gt;kubectl delete pod&lt;/code&gt;를 먼저 실행하는 것은 위험할 수 있습니다.&lt;br&gt;
          삭제 전에 로그, 이벤트, 재시작 횟수, 상위 리소스, 노드 상태를 먼저 확인해야 합니다.&lt;br&gt;
          특히 원인 분석 전에 파드를 삭제하면 장애 당시의 단서가 사라질 수 있습니다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;운영 점검에 자주 쓰는 명령어 정리&lt;/h2&gt;

        &lt;p&gt;
          아래 명령어는 쿠버네티스 파드 확인 과정에서 자주 사용됩니다.
          장애 대응이나 배포 후 점검 시 기본 점검 세트로 활용할 수 있습니다.
        &lt;/p&gt;

        &lt;table&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;th&gt;목적&lt;/th&gt;
              &lt;th&gt;명령어&lt;/th&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;전체 파드 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -A&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;상세 정보 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl describe pod 파드명 -n 네임스페이스명&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;로그 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl logs 파드명 -n 네임스페이스명&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;이전 로그 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl logs 파드명 --previous -n 네임스페이스명&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;실시간 로그 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl logs -f 파드명 -n 네임스페이스명&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;노드 포함 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -A -o wide&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
              &lt;td&gt;라벨 기준 확인&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;kubectl get pods -l app=애플리케이션명 -n 네임스페이스명&lt;/code&gt;&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;마무리&lt;/h2&gt;

        &lt;p&gt;
          쿠버네티스 K8s 파드 확인은 &lt;code&gt;kubectl get pods&lt;/code&gt;에서 시작하지만, 실제 점검은 상세 정보, 로그, 이벤트, 노드 상태까지 함께 봐야 정확합니다.
          특히 &lt;code&gt;CrashLoopBackOff&lt;/code&gt;, &lt;code&gt;ImagePullBackOff&lt;/code&gt;, &lt;code&gt;Pending&lt;/code&gt; 같은 상태는 각각 원인이 다르므로 상태값에 맞는 순서로 확인하는 것이 중요합니다.
        &lt;/p&gt;

        &lt;p&gt;
          운영 환경에서는 파드가 일시적으로 재생성될 수 있고, 이름도 바뀔 수 있습니다.
          따라서 파드 이름만 기준으로 판단하기보다 네임스페이스, 라벨, 상위 리소스, 노드 상태를 함께 확인하는 습관이 필요합니다.
        &lt;/p&gt;

        &lt;ul class=&quot;summary-list&quot;&gt;
          &lt;li&gt;기본 조회는 &lt;code&gt;kubectl get pods&lt;/code&gt;로 시작합니다.&lt;/li&gt;
          &lt;li&gt;원인 분석은 &lt;code&gt;describe&lt;/code&gt;, &lt;code&gt;logs&lt;/code&gt;, &lt;code&gt;events&lt;/code&gt;를 함께 확인합니다.&lt;/li&gt;
          &lt;li&gt;운영 점검에서는 &lt;code&gt;READY&lt;/code&gt;와 &lt;code&gt;RESTARTS&lt;/code&gt;를 반드시 확인합니다.&lt;/li&gt;
          &lt;li&gt;파드 삭제 전에는 로그와 이벤트를 먼저 확보합니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/section&gt;
    &lt;/article&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;@id&quot;: &quot;https://example.com/kubernetes-pod-check#blogposting&quot;,
        &quot;headline&quot;: &quot;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&quot;,
        &quot;description&quot;: &quot;쿠버네티스 K8s에서 파드 상태를 확인하는 기본 명령어부터 로그, 이벤트, 상세 정보 점검 방법과 운영 환경에서 주의해야 할 사항을 정리했습니다.&quot;,
        &quot;inLanguage&quot;: &quot;ko&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/kubernetes-pod-check&quot;
        },
        &quot;image&quot;: &quot;https://example.com/replace-kubernetes-pod-check-image.jpg&quot;,
        &quot;keywords&quot;: [
          &quot;쿠버네티스&quot;,
          &quot;K8s&quot;,
          &quot;파드 확인&quot;,
          &quot;kubectl&quot;,
          &quot;Pod 상태&quot;,
          &quot;파드 로그&quot;,
          &quot;파드 이벤트&quot;,
          &quot;컨테이너 상태&quot;,
          &quot;Kubernetes&quot;,
          &quot;운영 점검&quot;
        ],
        &quot;articleSection&quot;: &quot;쿠버네티스 운영&quot;,
        &quot;about&quot;: [
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;쿠버네티스 파드 확인&quot;
          },
          {
            &quot;@type&quot;: &quot;Thing&quot;,
            &quot;name&quot;: &quot;kubectl 명령어&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;@id&quot;: &quot;https://example.com/kubernetes-pod-check#breadcrumb&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;쿠버네티스 운영&quot;,
            &quot;item&quot;: &quot;https://example.com/category/kubernetes&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 3,
            &quot;name&quot;: &quot;쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항&quot;
          }
        ]
      }
    ]
  }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/Server</category>
      <category>k8s</category>
      <category>kubectl</category>
      <category>kubernetes</category>
      <category>Pod 상태</category>
      <category>운영 점검</category>
      <category>컨테이너 상태</category>
      <category>쿠버네티스</category>
      <category>파드 로그</category>
      <category>파드 이벤트</category>
      <category>파드 확인</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/552</guid>
      <comments>https://togethergrow.tistory.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-K8s-%ED%8C%8C%EB%93%9C-%ED%99%95%EC%9D%B8-%EB%B0%A9%EB%B2%95%EA%B3%BC-%EC%9A%B4%EC%98%81-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD#entry552comment</comments>
      <pubDate>Sat, 20 Jun 2026 13:16:10 +0900</pubDate>
    </item>
    <item>
      <title>파고네트웍스, 스텔라사이버 공식 MDR 인증 획득&amp;hellip;아시아 보안 운영 협력 확대</title>
      <link>https://togethergrow.tistory.com/entry/%ED%8C%8C%EA%B3%A0%EB%84%A4%ED%8A%B8%EC%9B%8D%EC%8A%A4-%EC%8A%A4%ED%85%94%EB%9D%BC%EC%82%AC%EC%9D%B4%EB%B2%84-%EA%B3%B5%EC%8B%9D-MDR-%EC%9D%B8%EC%A6%9D-%ED%9A%8D%EB%93%9D%E2%80%A6%EC%95%84%EC%8B%9C%EC%95%84-%EB%B3%B4%EC%95%88-%EC%9A%B4%EC%98%81-%ED%98%91%EB%A0%A5-%ED%99%95%EB%8C%80</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot; /&gt;
  &lt;meta http-equiv=&quot;x-ua-compatible&quot; content=&quot;ie=edge&quot; /&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;

  &lt;title&gt;파고네트웍스, 스텔라사이버 공식 MDR 인증 획득…아시아 보안 운영 협력 확대&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;스텔라사이버가 파고네트웍스를 공식 MDR 인증 파트너로 선정했다. Open XDR 기반 통합 탐지·대응과 AI 기반 자율형 SOC 협력 강화 의미를 운영 관점에서 정리한다.&quot; /&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;파고네트웍스,스텔라사이버,MDR,관리형 탐지 대응,Open XDR,보안운영,SOC,자율형 SOC,에이전틱 AI,MSSP,APAC,위협탐지&quot; /&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot; /&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot; /&gt;
  &lt;meta property=&quot;og:locale&quot; content=&quot;ko_KR&quot; /&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;파고네트웍스, 스텔라사이버 공식 MDR 인증 획득…아시아 보안 운영 협력 확대&quot; /&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;스텔라사이버가 파고네트웍스를 공식 MDR 인증 파트너로 선정했다. Open XDR 기반 협력 강화의 의미를 운영 관점에서 정리한다.&quot; /&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/og-placeholder.jpg&quot; /&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot; /&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;파고네트웍스, 스텔라사이버 공식 MDR 인증 획득…아시아 보안 운영 협력 확대&quot; /&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;공식 MDR 인증 파트너 선정으로 Open XDR 기반 아시아 MDR 협력 확대. 자율형 SOC 협력 포인트를 정리한다.&quot; /&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/og-placeholder.jpg&quot; /&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;main&gt;
    &lt;article class=&quot;post-content&quot; aria-label=&quot;본문&quot;&gt;
      &lt;header class=&quot;post-header&quot;&gt;
        &lt;p class=&quot;kicker&quot;&gt;보안 운영 · MDR · Open XDR&lt;/p&gt;
        &lt;h1&gt;파고네트웍스, 스텔라사이버 공식 MDR 인증 획득…아시아 보안 운영 협력 확대&lt;/h1&gt;
        &lt;p class=&quot;subhead&quot;&gt;스텔라사이버·파고네트웍스, AI 기반 자율형 SOC 협력 강화&lt;/p&gt;
      &lt;/header&gt;

      &lt;section class=&quot;lead&quot;&gt;
        &lt;p&gt;
          글로벌 오픈 확장 탐지·대응(Open XDR) 플랫폼 기업 &lt;strong&gt;스텔라사이버(Stellar Cyber)&lt;/strong&gt;가
          &lt;strong&gt;파고네트웍스(PAGO Networks)&lt;/strong&gt;를 공식 &lt;strong&gt;MDR 인증 파트너(Certified MDR Partner)&lt;/strong&gt;로 선정했다.
          이번 인증을 계기로 양사는 스텔라사이버의 Open XDR 플랫폼을 기반으로 &lt;strong&gt;아시아 시장에서 관리형 탐지·대응(MDR) 사업 협력&lt;/strong&gt;을 강화한다.
        &lt;/p&gt;
        &lt;p&gt;
          핵심은 “연동”이 아니라 “운영”이다.&lt;br&gt;
          스텔라사이버는 파고네트웍스가 기존 마스터 MSSP 파트너 역할을 넘어,
          실제 고객 환경에서 &lt;strong&gt;위협 탐지·분석·대응&lt;/strong&gt;까지 수행할 수 있는 운영 중심 역량을 공식 인정받았다고 밝혔다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;이번 MDR 인증이 의미하는 것&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;div class=&quot;callout&quot;&gt;
          &lt;strong&gt;요약 포인트&lt;/strong&gt;&lt;br&gt;
          1) 스텔라사이버가 “실제 운영 수행 능력”을 검증하는 MDR 인증 프로그램을 운영&lt;br&gt;
          2) 파고네트웍스는 아시아 시장 운영 경험과 고객 대응 역량을 바탕으로 인증 요건 충족&lt;br&gt;
          3) Open XDR 기반 통합 가시성과 자동화로 탐지 정확도·대응 속도·운영 효율을 강화
        &lt;/div&gt;

        &lt;p&gt;
          스텔라사이버는 글로벌 파트너 생태계 확대 전략에 따라, 실제 보안 운영을 수행할 수 있는 MDR 파트너를 선별하는 인증 프로그램을 운영하고 있다.
          파고네트웍스는 아시아 시장에서 축적한 보안 운영 경험과 고객 대응 역량을 바탕으로 인증 요건을 충족한 것으로 평가됐다.
        &lt;/p&gt;
        &lt;p&gt;
          운영 환경에서는 “누가 플랫폼을 잘 쓰느냐”가 아니라 “누가 운영 결과를 책임지고 낼 수 있느냐”가 중요하다.&lt;br&gt;
          이번 인증은 그 실행력 자체를 공식적으로 확인받았다는 점에서 의미가 크다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;Open XDR이 보안 운영을 바꾸는 방식&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          스텔라사이버가 강조하는 &lt;strong&gt;Open XDR&lt;/strong&gt;은 여러 보안 제품에서 발생하는 데이터를 하나의 플랫폼으로 모아 분석하고,
          위협 탐지와 대응을 자동화하는 접근 방식이다.
          기업 보안 환경에서는 엔드포인트 탐지·대응(EDR), 네트워크 보안, 클라우드 보안, 계정/아이덴티티 보안 등
          다양한 솔루션이 따로 운영되는 경우가 많다.
        &lt;/p&gt;

        &lt;div class=&quot;grid&quot;&gt;
          &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;분산 운영의 흔한 문제&lt;/h3&gt;
            &lt;ul&gt;
              &lt;li&gt;콘솔이 많아질수록 경보(알림)는 늘고, 맥락은 부족해짐&lt;/li&gt;
              &lt;li&gt;로그 상관관계 분석이 늦어져 공격 흐름 파악이 지연&lt;/li&gt;
              &lt;li&gt;현장 대응(차단/격리/권한 조치)이 워크플로우로 연결되지 않음&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
          &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;Open XDR이 제공하는 개선점&lt;/h3&gt;
            &lt;ul&gt;
              &lt;li&gt;다영역 데이터 통합으로 “한 화면에서” 사건 맥락 확인&lt;/li&gt;
              &lt;li&gt;상관관계 기반 탐지로 정확도 향상&lt;/li&gt;
              &lt;li&gt;자동화된 대응 시나리오로 대응 속도·운영 효율 개선&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;p&gt;
          Open XDR은 분산된 데이터를 통합해 공격 징후를 연결하고,
          보안 운영팀이 더 빠르게 판단할 수 있도록 지원하는 데 초점을 맞춘다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;파고네트웍스의 운영형 MDR 포인트&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          파고네트웍스는 그동안 스텔라사이버의 Open XDR 플랫폼을 활용해
          엔드포인트, 네트워크, 클라우드, 아이덴티티 등 여러 보안 영역에서 발생하는 데이터를 통합 분석해왔다.
          이를 통해 위협 간 상관관계를 기반으로 탐지 정확도를 높이고,
          고객 환경에서 대응 속도와 운영 효율성을 개선하는 데 집중해왔다.
        &lt;/p&gt;

        &lt;div class=&quot;table-wrap&quot; role=&quot;region&quot; aria-label=&quot;운영 관점 체크리스트&quot;&gt;
          &lt;table class=&quot;table&quot;&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th scope=&quot;col&quot;&gt;운영 항목&lt;/th&gt;
                &lt;th scope=&quot;col&quot;&gt;핵심 내용&lt;/th&gt;
                &lt;th scope=&quot;col&quot;&gt;기대 효과&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;통합 분석&lt;/td&gt;
                &lt;td&gt;다영역 보안 데이터 상관관계 분석&lt;/td&gt;
                &lt;td&gt;오탐 감소, 탐지 정밀도 개선&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;대응 워크플로우&lt;/td&gt;
                &lt;td&gt;탐지→분석→대응을 실행 중심으로 연결&lt;/td&gt;
                &lt;td&gt;MTTR 단축, 운영 부담 완화&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;운영 모델&lt;/td&gt;
                &lt;td&gt;AI 자동화 + 보안 전문가 판단 결합&lt;/td&gt;
                &lt;td&gt;확장 가능한 보안 운영 체계&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;
        &lt;/div&gt;

        &lt;p&gt;
          특히 파고네트웍스는 클라우드 기반 MDR 전문 기업으로,
          &lt;strong&gt;‘PAGO DeepACT MDR-as-a-Service Framework’&lt;/strong&gt;를 중심으로 보안 운영 서비스를 제공하고 있다.
          위협 탐지·분석뿐 아니라 선제적 대응, 능동적 운영, 신속한 차단을 포함한 실행 중심 MDR 서비스를 지향하며,
          고객의 보안 의사결정과 대응 과정까지 지원하는 운영 모델을 강화하고 있다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;자율형 SOC 협력 강화, 어떤 그림인가&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          스텔라사이버 공동창업자 겸 최고기술책임자인 &lt;strong&gt;에이미 웨이(Aimei Wei)&lt;/strong&gt;는
          “보안 운영의 복잡성이 빠르게 증가하는 환경에서 조직은 단일 플랫폼을 넘어 다양한 보안 데이터를 통합적으로 활용할 수 있는 운영 모델을 갖추는 것이 중요하다”며,
          “파고네트웍스와 같은 검증된 MDR 파트너와의 협력은 고객이 보다 효율적이고 확장 가능한 보안 운영 체계를 구축하는 데 핵심적인 역할을 할 것”이라고 말했다.
        &lt;/p&gt;

        &lt;p&gt;
          &lt;strong&gt;얼빈 탄(Alvin Tan)&lt;/strong&gt; 스텔라사이버 APAC 부사장은
          파고네트웍스가 아시아 시장에서 빠르게 성장하며 실제 운영 환경에서 검증된 실행 역량을 보여준 파트너라고 평가했고,
          “에이전틱 AI와 사람의 협업으로 구현하는 자율형 SOC 비전”을 고객 환경에 현실적으로 적용할 수 있는 역량을 갖추고 있다는 점을 강조했다.
        &lt;/p&gt;

        &lt;p&gt;
          파고네트웍스 &lt;strong&gt;권영목 대표&lt;/strong&gt;는
          이번 MDR 공식 인증이 보안 운영 역량이 글로벌 기준에서도 인정받았다는 의미가 있다며,
          스텔라사이버와의 협력을 기반으로 AI 기반 자동화와 보안 전문가의 판단을 결합한 MDR 서비스를 지속적으로 고도화하겠다고 밝혔다.
        &lt;/p&gt;

        &lt;div class=&quot;callout&quot;&gt;
          &lt;strong&gt;실무 기준으로 보면&lt;/strong&gt;&lt;br&gt;
          자율형 SOC는 “완전 자동”이 아니라, 자동화가 반복 업무를 줄이고 사람이 결정 품질을 높이는 방향이 현실적이다.&lt;br&gt;
          이번 협력은 Open XDR 기반 통합 데이터 + 에이전틱 AI + 운영 조직의 실행력을 한 묶음으로 강화하는 흐름에 가깝다.
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;아시아 시장 협력 확대가 가져올 변화&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          이번 인증을 계기로 양사는 협력 범위를 넓히고,
          에이전틱 AI와 보안 전문가가 함께 운영하는 자율형 SOC 모델을 중심으로 공동 대응 전략을 확대할 계획이다.
          파고네트웍스가 과거 스텔라사이버로부터 &lt;strong&gt;‘MSSP Partner of the Year’&lt;/strong&gt; 상을 두 차례 수상한 이력도
          협력의 연속성을 보여주는 포인트다.
        &lt;/p&gt;

        &lt;div class=&quot;grid&quot;&gt;
          &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;고객사 관점&lt;/h3&gt;
            &lt;ul&gt;
              &lt;li&gt;보안 이벤트의 “원인-경로-영향”을 더 빠르게 파악&lt;/li&gt;
              &lt;li&gt;대응 의사결정과 실행(차단/격리/계정조치)까지 연결&lt;/li&gt;
              &lt;li&gt;운영 효율 개선으로 야간/주말 대응 품질 유지에 도움&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
          &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;운영 조직 관점&lt;/h3&gt;
            &lt;ul&gt;
              &lt;li&gt;반복 분석 업무를 자동화로 흡수&lt;/li&gt;
              &lt;li&gt;고난도 사건에 인력을 집중할 수 있는 구조&lt;/li&gt;
              &lt;li&gt;표준화된 운영 모델로 확장(지역/고객) 용이&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/section&gt;

      &lt;section&gt;
        &lt;h2&gt;기업 소개&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          &lt;strong&gt;스텔라사이버(Stellar Cyber)&lt;/strong&gt;는 Open XDR 기반 단일 플랫폼을 통해 보안 데이터의 통합 가시성과
          자동화된 위협 탐지·대응 기능을 제공하는 글로벌 보안 기업이다.
          여러 보안 솔루션을 하나의 플랫폼으로 통합해 보안 운영의 복잡성과 비용을 줄이고,
          조직이 위협에 더 빠르게 대응할 수 있도록 지원한다.
        &lt;/p&gt;

        &lt;p&gt;
          &lt;strong&gt;파고네트웍스(PAGO Networks)&lt;/strong&gt;는 클라우드 기반 MDR 전문 기업으로,
          ‘PAGO DeepACT MDR-as-a-Service Framework’를 중심으로 보안 운영 서비스를 제공한다.
          위협 탐지·분석뿐 아니라 선제적 대응, 능동적 운영, 신속한 차단을 포함한 실행 중심 MDR 서비스를 지향한다.
        &lt;/p&gt;
      &lt;/section&gt;

      &lt;section class=&quot;closing&quot;&gt;
        &lt;h2&gt;정리&lt;/h2&gt;
        &lt;div class=&quot;spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/div&gt;

        &lt;p&gt;
          스텔라사이버의 공식 MDR 인증 파트너 선정은 파고네트웍스의 “운영형 MDR” 역량이 공식적으로 검증됐다는 신호다.
          Open XDR 기반 통합 가시성과 자동화, 그리고 에이전틱 AI·전문가 협업 모델이 결합되면
          아시아 시장에서 보다 확장 가능한 보안 운영 체계를 빠르게 구축하는 데 유리해진다.
        &lt;/p&gt;
      &lt;/section&gt;
    &lt;/article&gt;

    &lt;!-- 관리자 입력용 태그(정확히 10개) --&gt;
    &lt;!-- TAGS: 파고네트웍스, 스텔라사이버, MDR, Open XDR, 보안운영, SOC, 자율형 SOC, 에이전틱 AI, MSSP, 위협탐지 --&gt;
  &lt;/main&gt;

  &lt;script type=&quot;application/ld+json&quot;&gt;
  {
    &quot;@context&quot;: &quot;https://schema.org&quot;,
    &quot;@graph&quot;: [
      {
        &quot;@type&quot;: &quot;BreadcrumbList&quot;,
        &quot;itemListElement&quot;: [
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 1,
            &quot;name&quot;: &quot;홈&quot;,
            &quot;item&quot;: &quot;https://example.com/&quot;
          },
          {
            &quot;@type&quot;: &quot;ListItem&quot;,
            &quot;position&quot;: 2,
            &quot;name&quot;: &quot;보안 운영&quot;
          }
        ]
      },
      {
        &quot;@type&quot;: &quot;BlogPosting&quot;,
        &quot;headline&quot;: &quot;파고네트웍스, 스텔라사이버 공식 MDR 인증 획득…아시아 보안 운영 협력 확대&quot;,
        &quot;description&quot;: &quot;스텔라사이버가 파고네트웍스를 공식 MDR 인증 파트너로 선정했다. Open XDR 기반 통합 탐지·대응과 AI 기반 자율형 SOC 협력 강화 의미를 운영 관점에서 정리한다.&quot;,
        &quot;inLanguage&quot;: &quot;ko-KR&quot;,
        &quot;mainEntityOfPage&quot;: {
          &quot;@type&quot;: &quot;WebPage&quot;,
          &quot;@id&quot;: &quot;https://example.com/&quot;
        },
        &quot;articleSection&quot;: &quot;보안 운영&quot;,
        &quot;keywords&quot;: [
          &quot;파고네트웍스&quot;,
          &quot;스텔라사이버&quot;,
          &quot;MDR&quot;,
          &quot;관리형 탐지 대응&quot;,
          &quot;Open XDR&quot;,
          &quot;보안운영&quot;,
          &quot;SOC&quot;,
          &quot;자율형 SOC&quot;,
          &quot;에이전틱 AI&quot;,
          &quot;MSSP&quot;,
          &quot;APAC&quot;,
          &quot;위협탐지&quot;
        ]
      }
    ]
  }
  &lt;/script&gt;

  &lt;style&gt;
    .post-content {
      line-height: 1.7;
      word-break: keep-all;
    }
    .post-header .kicker {
      margin: 0 0 6px 0;
      font-size: 14px;
      opacity: 0.85;
    }
    .post-header h1 {
      margin: 0 0 10px 0;
      font-size: 30px;
      line-height: 1.25;
      letter-spacing: -0.2px;
    }
    .post-header .subhead {
      margin: 0 0 18px 0;
      font-size: 16px;
      opacity: 0.9;
    }
    .lead p {
      margin: 0 0 12px 0;
    }
    .spacer {
      height: 10px;
    }
    .post-content h2 {
      margin: 26px 0 0 0;
      font-size: 22px;
      line-height: 1.35;
      letter-spacing: -0.2px;
    }
    .post-content h3 {
      margin: 0 0 10px 0;
      font-size: 16px;
      line-height: 1.35;
    }
    .post-content p {
      margin: 0 0 12px 0;
      font-size: 16px;
    }
    .post-content ul {
      margin: 0;
      padding: 0 0 0 18px;
    }
    .post-content li {
      margin: 0 0 6px 0;
    }
    .callout {
      margin: 14px 0;
      padding: 14px 14px;
      border: 1px solid rgba(0,0,0,0.12);
      border-radius: 14px;
    }
    .grid {
      display: grid;
      grid-template-columns: 1fr;
      gap: 12px;
      margin: 12px 0 14px 0;
    }
    .card {
      padding: 14px 14px;
      border: 1px solid rgba(0,0,0,0.12);
      border-radius: 14px;
    }
    .table-wrap {
      margin: 12px 0 14px 0;
      overflow-x: auto;
      border-radius: 14px;
      border: 1px solid rgba(0,0,0,0.12);
    }
    .table {
      width: 100%;
      border-collapse: collapse;
      min-width: 720px;
    }
    .table th,
    .table td {
      padding: 12px 12px;
      border-bottom: 1px solid rgba(0,0,0,0.10);
      vertical-align: top;
      text-align: left;
      font-size: 15px;
    }
    .table thead th {
      border-bottom: 1px solid rgba(0,0,0,0.16);
      font-weight: 700;
    }
    .closing p {
      margin-bottom: 0;
    }

    @media (min-width: 860px) {
      .post-header h1 {
        font-size: 34px;
      }
      .grid {
        grid-template-columns: 1fr 1fr;
      }
    }
  &lt;/style&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT 소식 뉴스/IT 소식</category>
      <category>mdr</category>
      <category>MSSP</category>
      <category>Open XDR</category>
      <category>soc</category>
      <category>관리형 탐지 대응</category>
      <category>보안운영</category>
      <category>스텔라사이버</category>
      <category>에이전틱 ai</category>
      <category>자율형 SOC</category>
      <category>파고네트웍스</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/551</guid>
      <comments>https://togethergrow.tistory.com/entry/%ED%8C%8C%EA%B3%A0%EB%84%A4%ED%8A%B8%EC%9B%8D%EC%8A%A4-%EC%8A%A4%ED%85%94%EB%9D%BC%EC%82%AC%EC%9D%B4%EB%B2%84-%EA%B3%B5%EC%8B%9D-MDR-%EC%9D%B8%EC%A6%9D-%ED%9A%8D%EB%93%9D%E2%80%A6%EC%95%84%EC%8B%9C%EC%95%84-%EB%B3%B4%EC%95%88-%EC%9A%B4%EC%98%81-%ED%98%91%EB%A0%A5-%ED%99%95%EB%8C%80#entry551comment</comments>
      <pubDate>Wed, 10 Jun 2026 21:39:53 +0900</pubDate>
    </item>
    <item>
      <title>ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구</title>
      <link>https://togethergrow.tistory.com/entry/ORA-01031-%ED%95%B4%EA%B2%B0-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%A1%B1-%EC%9B%90%EC%9D%B8%EB%B3%84-%EC%A0%90%EA%B2%80%EA%B3%BC-%EC%B5%9C%EC%86%8C-%EA%B6%8C%ED%95%9C-%EB%B3%B5%EA%B5%AC</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot; /&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;

  &lt;title&gt;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&lt;/title&gt;
  &lt;meta name=&quot;description&quot; content=&quot;ORA-01031(권한이 불충분합니다) 오류는 시스템 권한, 객체 권한, 롤 적용, definer/invoker 권한, PDB/컨테이너 권한 범위 등에서 발생한다. 증상 재현부터 권한 확인, 복구, 재발 방지까지 운영 환경 기준으로 정리한다.&quot; /&gt;
  &lt;meta name=&quot;keywords&quot; content=&quot;ORA-01031,insufficient privileges,Oracle 권한,GRANT,시스템 권한,객체 권한,ROLE 적용,AUTHID CURRENT_USER,Definer rights,PDB 권한&quot; /&gt;
  &lt;meta name=&quot;robots&quot; content=&quot;index,follow,max-image-preview:large&quot; /&gt;

  &lt;meta property=&quot;og:type&quot; content=&quot;article&quot; /&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&quot; /&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;GRANT 했는데도 실패하는 ORA-01031? 객체 권한/시스템 권한/롤/프로시저 권한/컨테이너 범위를 한 번에 점검하는 실무 절차.&quot; /&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;https://example.com/og-placeholder.jpg&quot; /&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://example.com/post/ora-01031-privileges&quot; /&gt;

  &lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot; /&gt;
  &lt;meta name=&quot;twitter:title&quot; content=&quot;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&quot; /&gt;
  &lt;meta name=&quot;twitter:description&quot; content=&quot;권한 부여했는데도 안 된다면? ROLE/definer rights/PDB 권한 범위까지 포함해 ORA-01031을 단계별로 해결.&quot; /&gt;
  &lt;meta name=&quot;twitter:image&quot; content=&quot;https://example.com/og-placeholder.jpg&quot; /&gt;

  &lt;style&gt;
    .article-wrap{line-height:1.7; word-break:keep-all;}
    .article-wrap .content-inner{max-width:980px; margin:0 auto; padding:0 10px;}
    .article-wrap h1{font-size:1.9rem; margin:0 0 14px;}
    .article-wrap h2{font-size:1.35rem; margin:26px 0 10px;}
    .article-wrap h3{font-size:1.1rem; margin:18px 0 10px;}
    .article-wrap p{margin:10px 0;}
    .article-wrap ul{margin:10px 0 10px 18px;}
    .article-wrap li{margin:6px 0;}
    .article-wrap .note{
      border:1px solid rgba(0,0,0,0.12);
      border-radius:14px;
      padding:12px 14px;
      margin:12px 0;
    }
    .article-wrap .note strong{display:inline-block; margin-bottom:6px;}
    .article-wrap pre{
      overflow:auto;
      border:1px solid rgba(0,0,0,0.12);
      border-radius:14px;
      padding:12px 14px;
      margin:12px 0;
    }
    .article-wrap code{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace;}
    .article-wrap table{width:100%; border-collapse:collapse; margin:12px 0; overflow:hidden; border-radius:14px; border:1px solid rgba(0,0,0,0.12);}
    .article-wrap th,.article-wrap td{border-top:1px solid rgba(0,0,0,0.12); padding:10px; vertical-align:top; text-align:left;}
    .article-wrap th{font-weight:700; background:rgba(0,0,0,0.03);}
    .article-wrap .divider{height:1px; background:rgba(0,0,0,0.08); margin:18px 0;}
  &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;main class=&quot;article-wrap&quot;&gt;
    &lt;div class=&quot;content-inner&quot;&gt;
      &lt;article&gt;
        &lt;header&gt;
          &lt;h1&gt;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&lt;/h1&gt;
          &lt;p&gt;
            &lt;strong&gt;ORA-01031: insufficient privileges&lt;/strong&gt;(권한이 불충분합니다) 오류는
            “권한이 없다”라는 한 문장으로 끝나지 않는 경우가 많습니다.
            같은 메시지지만 원인은 &lt;strong&gt;시스템 권한&lt;/strong&gt;, &lt;strong&gt;객체 권한&lt;/strong&gt;, &lt;strong&gt;롤(ROLE) 적용 방식&lt;/strong&gt;,
            &lt;strong&gt;프로시저 권한 모델(definer/invoker)&lt;/strong&gt;, &lt;strong&gt;PDB/컨테이너 권한 범위&lt;/strong&gt;까지 다양하게 갈립니다.
          &lt;/p&gt;

          &lt;div class=&quot;note&quot;&gt;
            &lt;strong&gt;실무 기준으로 보면&lt;/strong&gt;&lt;br&gt;
            ORA-01031은 “GRANT 한 번 더 주면 된다”로 끝내면 재발합니다.&lt;br&gt;
            어떤 작업(DDL/DML/패키지 호출)을 누가(스키마/프로시저/잡)가 실행했는지부터 확정하고,&lt;br&gt;
            그 경로에 맞는 최소 권한을 정확히 주는 게 운영 안전성과 감사 대응에 유리합니다.
          &lt;/div&gt;
        &lt;/header&gt;

        &lt;section&gt;
          &lt;h2&gt;개요&lt;/h2&gt;

          &lt;p&gt;
            Oracle 권한은 크게 &lt;strong&gt;시스템 권한&lt;/strong&gt;(예: &lt;code&gt;CREATE TABLE&lt;/code&gt;, &lt;code&gt;ALTER SYSTEM&lt;/code&gt;)
            과 &lt;strong&gt;객체 권한&lt;/strong&gt;(예: 특정 테이블에 대한 &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;EXECUTE&lt;/code&gt;)으로 나뉩니다.
            여기에 &lt;strong&gt;ROLE&lt;/strong&gt;은 세션에서는 적용되지만, 일반적으로
            &lt;strong&gt;Definer Rights(기본 AUTHID DEFINER)로 실행되는 PL/SQL&lt;/strong&gt; 내부에서는 자동 적용되지 않는 등
            “실행 컨텍스트”에 따라 체감 동작이 달라집니다.
          &lt;/p&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;환경&lt;/h2&gt;

          &lt;ul&gt;
            &lt;li&gt;DB: Oracle Database (11g~19c/21c, CDB/PDB 포함)&lt;/li&gt;
            &lt;li&gt;발생 지점: DDL 수행, 타 스키마 객체 접근, 패키지/프로시저 실행, DB 링크 사용, 잡(SCHEDULER) 실행&lt;/li&gt;
            &lt;li&gt;점검 뷰: &lt;code&gt;DBA_SYS_PRIVS&lt;/code&gt;, &lt;code&gt;DBA_TAB_PRIVS&lt;/code&gt;, &lt;code&gt;DBA_ROLE_PRIVS&lt;/code&gt;, &lt;code&gt;ROLE_SYS_PRIVS&lt;/code&gt;, &lt;code&gt;SESSION_ROLES&lt;/code&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;증상&lt;/h2&gt;

          &lt;p&gt;ORA-01031은 아래 패턴에서 자주 보입니다.&lt;/p&gt;

          &lt;ul&gt;
            &lt;li&gt;DDL 실행: &lt;code&gt;CREATE&lt;/code&gt;, &lt;code&gt;ALTER&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt;, &lt;code&gt;GRANT&lt;/code&gt; 등&lt;/li&gt;
            &lt;li&gt;타 스키마 객체 접근: &lt;code&gt;SELECT other_schema.table&lt;/code&gt;, &lt;code&gt;EXEC other_schema.pkg&lt;/code&gt;&lt;/li&gt;
            &lt;li&gt;프로시저 내부에서 외부 객체 호출 시 실패(직접 실행은 되는데 프로시저에서만 실패)&lt;/li&gt;
            &lt;li&gt;PDB에서 권한을 줬는데 CDB/다른 PDB에서는 적용이 안 됨&lt;/li&gt;
            &lt;li&gt;DBMS_* 패키지 호출이 특정 계정에서만 막힘&lt;/li&gt;
          &lt;/ul&gt;

          &lt;pre&gt;&lt;code&gt;ORA-01031: insufficient privileges&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;1차 점검&lt;/h2&gt;

          &lt;p&gt;
            가장 먼저 아래 4가지를 확정해야 합니다. 이 단계가 애매하면 권한을 “과다 부여”하게 됩니다.
          &lt;/p&gt;

          &lt;table&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th&gt;점검 항목&lt;/th&gt;
                &lt;th&gt;확인 포인트&lt;/th&gt;
              &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
              &lt;tr&gt;
                &lt;td&gt;실행 주체&lt;/td&gt;
                &lt;td&gt;실패한 계정(스키마), 프록시/앱 계정 여부, 잡(Job) 실행 계정&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;실패 작업&lt;/td&gt;
                &lt;td&gt;정확한 SQL/패키지 호출, DDL인지 DML인지, 대상 객체(스키마.객체명)&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;실행 컨텍스트&lt;/td&gt;
                &lt;td&gt;직접 실행인지, 프로시저/트리거 내부 실행인지(Definer/Invoker)&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;
                &lt;td&gt;컨테이너&lt;/td&gt;
                &lt;td&gt;CDB/PDB 중 어디에서 실행했는지(권한은 컨테이너 범위를 타는 경우가 많음)&lt;/td&gt;
              &lt;/tr&gt;
            &lt;/tbody&gt;
          &lt;/table&gt;

          &lt;h3&gt;현재 세션 권한/롤 확인&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- 세션에 활성화된 롤
SELECT * FROM session_roles;

-- (권한 점검용) 내가 가진 시스템 권한
SELECT * FROM user_sys_privs;

-- (권한 점검용) 내가 가진 객체 권한
SELECT owner, table_name, privilege
FROM   user_tab_privs;&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;note&quot;&gt;
            &lt;strong&gt;실무 팁&lt;/strong&gt;&lt;br&gt;
            “직접 실행은 되는데 프로시저에서만 ORA-01031”이면 10번 중 7~8번은 ROLE 문제입니다.&lt;br&gt;
            PL/SQL(Definer Rights)은 ROLE을 기본적으로 사용하지 않으니, 필요한 권한은 롤이 아니라 &lt;strong&gt;직접 GRANT&lt;/strong&gt;로 줘야 합니다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;심화 분석&lt;/h2&gt;

          &lt;h3&gt;원인 1) 객체 권한이 없음(타 스키마 테이블/뷰/시퀀스/프로시저)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- 대상 객체에 대한 권한이 있는지(관리자 관점)
SELECT grantee, owner, table_name, privilege
FROM   dba_tab_privs
WHERE  grantee = 'APPUSER'
AND    owner   = 'OTHER_SCHEMA'
AND    table_name IN ('T1','V1','SEQ1','PKG1')
ORDER  BY owner, table_name, privilege;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;원인 2) 시스템 권한이 없음(DDL/관리 기능)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;SELECT grantee, privilege
FROM   dba_sys_privs
WHERE  grantee = 'APPUSER'
ORDER  BY privilege;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;원인 3) ROLE로만 권한이 부여되어 PL/SQL에서 실패&lt;/h3&gt;
          &lt;p&gt;
            예: &lt;code&gt;ROLE_A&lt;/code&gt;에 &lt;code&gt;SELECT&lt;/code&gt; 권한이 있고 APPUSER가 ROLE_A를 받았지만,
            APPUSER 소유 프로시저가 &lt;code&gt;OTHER_SCHEMA.T1&lt;/code&gt;을 조회하면 ORA-01031이 날 수 있습니다.
          &lt;/p&gt;
          &lt;pre&gt;&lt;code&gt;-- APPUSER가 받은 롤 확인
SELECT granted_role
FROM   dba_role_privs
WHERE  grantee = 'APPUSER';

-- 롤이 가진 권한 확인(객체 권한은 DBA_TAB_PRIVS에서 GRANTEE=롤명으로 조회)
SELECT grantee, owner, table_name, privilege
FROM   dba_tab_privs
WHERE  grantee = 'ROLE_A'
ORDER  BY owner, table_name, privilege;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;원인 4) Definer/Invoker 권한 모델 불일치&lt;/h3&gt;
          &lt;p&gt;
            패키지/프로시저가 &lt;code&gt;AUTHID CURRENT_USER&lt;/code&gt;(Invoker Rights)인지,
            기본값(Definer Rights)인지에 따라 필요한 권한이 달라집니다.
          &lt;/p&gt;

          &lt;pre&gt;&lt;code&gt;-- 객체 소유자/상태 확인
SELECT owner, object_name, object_type, status
FROM   dba_objects
WHERE  owner = 'APPUSER'
AND    object_name = 'P_TEST';

-- 소스에서 AUTHID 확인(프로시저/패키지)
SELECT text
FROM   dba_source
WHERE  owner = 'APPUSER'
AND    name  = 'P_TEST'
AND    type  IN ('PROCEDURE','PACKAGE','PACKAGE BODY')
ORDER  BY line;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;원인 5) CDB/PDB 권한 범위 문제&lt;/h3&gt;
          &lt;p&gt;
            CDB 환경에서는 같은 사용자/롤이라도 컨테이너마다 권한 부여 상태가 달라질 수 있습니다.
            “PDB에서만 발생”하거나 “특정 PDB에서만 해결됐다”면 컨테이너를 확정하고 권한을 다시 점검해야 합니다.
          &lt;/p&gt;

          &lt;div class=&quot;note&quot;&gt;
            &lt;strong&gt;관리자 입장에서&lt;/strong&gt;&lt;br&gt;
            ORA-01031은 “권한이 없다”라기보다 “권한이 그 컨텍스트에서 유효하지 않다”인 경우가 많습니다.&lt;br&gt;
            특히 ROLE과 PL/SQL 실행 모델, 그리고 CDB/PDB 범위가 같이 얽히면 원인 파악이 늦어집니다.
          &lt;/div&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;복구&lt;/h2&gt;

          &lt;p&gt;
            복구 원칙은 간단합니다. &lt;strong&gt;필요한 권한을 직접(Direct Grant)로 최소 범위로 부여&lt;/strong&gt;하고,
            “전체 권한” 역할(&lt;code&gt;DBA&lt;/code&gt; 등) 부여는 가능한 피합니다.
          &lt;/p&gt;

          &lt;h3&gt;1) 타 스키마 테이블 조회 권한 부여(객체 권한)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- OTHER_SCHEMA 소유 테이블 T1을 APPUSER가 조회해야 하는 경우
GRANT SELECT ON OTHER_SCHEMA.T1 TO APPUSER;

-- DML이 필요하면 필요한 것만 추가
GRANT INSERT, UPDATE, DELETE ON OTHER_SCHEMA.T1 TO APPUSER;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;2) 타 스키마 패키지 실행 권한 부여(객체 권한)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;GRANT EXECUTE ON OTHER_SCHEMA.PKG_API TO APPUSER;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;3) 프로시저에서만 실패한다면(ROLE 의존 제거)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- 롤에만 있던 권한을 APPUSER에 직접 부여(Definer Rights 대응)
GRANT SELECT ON OTHER_SCHEMA.T1 TO APPUSER;&lt;/code&gt;&lt;/pre&gt;

          &lt;h3&gt;4) DDL이 필요하다면(시스템 권한)&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- 예: APPUSER가 테이블을 생성해야 하는 경우
GRANT CREATE TABLE TO APPUSER;

-- 시퀀스/뷰 등도 필요한 것만
GRANT CREATE SEQUENCE TO APPUSER;
GRANT CREATE VIEW TO APPUSER;&lt;/code&gt;&lt;/pre&gt;

          &lt;div class=&quot;note&quot;&gt;
            &lt;strong&gt;주의&lt;/strong&gt;&lt;br&gt;
            &lt;code&gt;GRANT ANY PRIVILEGE&lt;/code&gt;, &lt;code&gt;SELECT ANY TABLE&lt;/code&gt;, &lt;code&gt;EXECUTE ANY PROCEDURE&lt;/code&gt; 같은 ANY 권한은 영향 범위가 매우 큽니다.&lt;br&gt;
            급한 장애 조치로 남발하면, 나중에 회수하기도 어렵고 감사 이슈로 이어질 수 있습니다.
          &lt;/div&gt;

          &lt;h3&gt;5) 적용 확인&lt;/h3&gt;
          &lt;pre&gt;&lt;code&gt;-- 권한 부여 후 즉시 재현 SQL로 확인
SELECT COUNT(*) FROM OTHER_SCHEMA.T1;

BEGIN
  OTHER_SCHEMA.PKG_API.PING;
END;
/
&lt;/code&gt;&lt;/pre&gt;
        &lt;/section&gt;

        &lt;section&gt;
          &lt;h2&gt;재발 방지&lt;/h2&gt;

          &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;최소 권한 설계&lt;/strong&gt;: 업무별로 필요한 객체/권한 목록을 정의하고 직접 GRANT로 관리&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;ROLE 사용 원칙&lt;/strong&gt;: 세션 편의용(개발자 도구 등)과 애플리케이션 실행 권한을 분리&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;PL/SQL 권한 모델 표준화&lt;/strong&gt;: Definer/Invoker 사용 기준을 문서화하고 코드 리뷰에 포함&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;컨테이너 범위 점검&lt;/strong&gt;: CDB/PDB 환경에서 권한 부여 위치(어느 컨테이너에서 GRANT했는지) 기록&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;권한 변경 이력&lt;/strong&gt;: GRANT/REVOKE 변경은 티켓/승인 기반으로 남기고 주기적으로 회수 점검&lt;/li&gt;
          &lt;/ul&gt;

          &lt;div class=&quot;note&quot;&gt;
            &lt;strong&gt;실제 사용 시&lt;/strong&gt;&lt;br&gt;
            ORA-01031은 한번 해결해도, 배포/계정 변경/권한 회수 작업에서 쉽게 재발합니다.&lt;br&gt;
            “누가 무엇을 실행할 수 있어야 하는지”를 표준 권한 정책으로 고정해두면 장애가 급격히 줄어듭니다.
          &lt;/div&gt;
        &lt;/section&gt;

      &lt;/article&gt;
    &lt;/div&gt;

    &lt;script type=&quot;application/ld+json&quot;&gt;
    {
      &quot;@context&quot;: &quot;https://schema.org&quot;,
      &quot;@graph&quot;: [
        {
          &quot;@type&quot;: &quot;BreadcrumbList&quot;,
          &quot;itemListElement&quot;: [
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 1,
              &quot;name&quot;: &quot;Home&quot;,
              &quot;item&quot;: &quot;https://example.com/&quot;
            },
            {
              &quot;@type&quot;: &quot;ListItem&quot;,
              &quot;position&quot;: 2,
              &quot;name&quot;: &quot;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&quot;,
              &quot;item&quot;: &quot;https://example.com/post/ora-01031-privileges&quot;
            }
          ]
        },
        {
          &quot;@type&quot;: &quot;TechArticle&quot;,
          &quot;headline&quot;: &quot;ORA-01031 해결: 권한 부족 원인별 점검과 최소 권한 복구&quot;,
          &quot;description&quot;: &quot;ORA-01031(권한이 불충분합니다) 오류는 시스템 권한, 객체 권한, 롤 적용, definer/invoker 권한, PDB/컨테이너 권한 범위 등에서 발생한다. 증상 재현부터 권한 확인, 복구, 재발 방지까지 운영 환경 기준으로 정리한다.&quot;,
          &quot;inLanguage&quot;: &quot;ko-KR&quot;,
          &quot;mainEntityOfPage&quot;: {
            &quot;@type&quot;: &quot;WebPage&quot;,
            &quot;@id&quot;: &quot;https://example.com/post/ora-01031-privileges&quot;
          },
          &quot;keywords&quot;: [
            &quot;ORA-01031&quot;,
            &quot;insufficient privileges&quot;,
            &quot;Oracle 권한&quot;,
            &quot;GRANT&quot;,
            &quot;시스템 권한&quot;,
            &quot;객체 권한&quot;,
            &quot;ROLE 적용&quot;,
            &quot;AUTHID CURRENT_USER&quot;,
            &quot;Definer rights&quot;,
            &quot;PDB 권한&quot;
          ]
        }
      ]
    }
    &lt;/script&gt;
  &lt;/main&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>지식 공유/DBMS</category>
      <category>AUTHID CURRENT_USER</category>
      <category>Definer rights</category>
      <category>grant</category>
      <category>insufficient privileges</category>
      <category>ORA-01031</category>
      <category>Oracle 권한</category>
      <category>PDB 권한</category>
      <category>ROLE 적용</category>
      <category>객체 권한</category>
      <category>시스템 권한</category>
      <author>하루하루 IT 나누기</author>
      <guid isPermaLink="true">https://togethergrow.tistory.com/550</guid>
      <comments>https://togethergrow.tistory.com/entry/ORA-01031-%ED%95%B4%EA%B2%B0-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%A1%B1-%EC%9B%90%EC%9D%B8%EB%B3%84-%EC%A0%90%EA%B2%80%EA%B3%BC-%EC%B5%9C%EC%86%8C-%EA%B6%8C%ED%95%9C-%EB%B3%B5%EA%B5%AC#entry550comment</comments>
      <pubDate>Thu, 4 Jun 2026 16:43:17 +0900</pubDate>
    </item>
  </channel>
</rss>