{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/Music_Pipeline_01/",
    "result": {"data":{"cur":{"id":"cb71b72b-21f2-5639-868c-b331fd519ed5","html":"<h2 id=\"왜-이-프로젝트인가\" style=\"position:relative;\"><a href=\"#%EC%99%9C-%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%B8%EA%B0%80\" aria-label=\"왜 이 프로젝트인가 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>왜 이 프로젝트인가</h2>\n<p>MyBatis/MariaDB 중심으로 4~5년을 일했고, JPA·Kafka·Redis 는 “써봤다”와 “설계할 수 있다” 사이 어딘가에 있었다.\n그 간극을 메우려고 음악 스트리밍 서비스의 백엔드 데이터 파이프라인을 축소 구현했다.</p>\n<p>두 개의 큰 흐름으로 구성된다.</p>\n<ol>\n<li><strong>음원 메타데이터 입수</strong> — 유통사가 보내는 DDEX 스타일 XML 을 스트리밍 파싱·검증해 배치 적재</li>\n<li><strong>재생 이벤트 처리</strong> — Kafka 로 초당 수백 건의 재생 이벤트를 수집, 멱등하게 집계해 실시간 차트 제공</li>\n</ol>\n<p>이 도메인을 고른 이유는 두 흐름의 <strong>실패 모델이 정반대</strong>라서다.\n입수는 “파일 하나가 크고 실패가 부분적” — 트랜잭션 경계 문제.\n이벤트는 “건수가 많고 중복이 정상” — 멱등성 문제.\n한 프로젝트 안에서 서로 다른 정합성 전략을 비교할 수 있다.</p>\n<ul>\n<li>저장소: <a href=\"https://github.com/Shim8934/media-project\">github.com/Shim8934/media-project</a></li>\n<li>스택: Java 21, Spring Boot 3.4, JPA + JdbcTemplate, MariaDB, Kafka, Redis, Testcontainers, k6, ffmpeg</li>\n</ul>\n<h2 id=\"마일스톤-지도\" style=\"position:relative;\"><a href=\"#%EB%A7%88%EC%9D%BC%EC%8A%A4%ED%86%A4-%EC%A7%80%EB%8F%84\" aria-label=\"마일스톤 지도 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>마일스톤 지도</h2>\n<table>\n<thead>\n<tr>\n<th>마일스톤</th>\n<th>내용</th>\n<th>시리즈 글</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>M1</td>\n<td>도메인 모델링, 배치 insert 최적화, 실패 기록·재처리</td>\n<td>02, 03</td>\n</tr>\n<tr>\n<td>M2</td>\n<td>Kafka 파이프라인 — 멱등 집계, DLQ, poison pill</td>\n<td>04, 05</td>\n</tr>\n<tr>\n<td>M3</td>\n<td>실시간 TOP 100 차트 + Redis 캐싱</td>\n<td>06</td>\n</tr>\n<tr>\n<td>M4</td>\n<td>성능 검증 — N+1 수치 비교, 트랜잭션 반증, k6 부하</td>\n<td>07</td>\n</tr>\n<tr>\n<td>M5</td>\n<td>HLS 오디오 스트리밍 (선택 모듈)</td>\n<td>08</td>\n</tr>\n<tr>\n<td>번외</td>\n<td>로컬 Docker DB 가 랜섬 공격당한 이야기</td>\n<td>09</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"프로젝트를-관통한-세-가지-원칙\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-%EA%B4%80%ED%86%B5%ED%95%9C-%EC%84%B8-%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99\" aria-label=\"프로젝트를 관통한 세 가지 원칙 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>프로젝트를 관통한 세 가지 원칙</h2>\n<h3 id=\"1-결정은-adr-로-남긴다\" style=\"position:relative;\"><a href=\"#1-%EA%B2%B0%EC%A0%95%EC%9D%80-adr-%EB%A1%9C-%EB%82%A8%EA%B8%B4%EB%8B%A4\" aria-label=\"1 결정은 adr 로 남긴다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 결정은 ADR 로 남긴다</h3>\n<p>ADR(Architecture Decision Record, 아키텍처 의사결정 기록)은 Michael Nygard 가 제안한\n문서 형식이다. 아키텍처에 영향을 주는 결정 하나마다 “상황(Context) → 결정(Decision) →\n결과(Consequences)” 구조의 짧은 문서를 번호 붙여 남기고, 결정이 바뀌면 문서를 고치는 게\n아니라 새 ADR 이 이전 것을 대체(supersede)한다고 기록한다 — 코드에 깃 히스토리가 있듯\n결정에도 이력을 남기는 것이다.</p>\n<p>이 프로젝트는 여기에 “검토한 대안들”과 “재검토 트리거”를 더해 6편을 썼다.\n코드가 보여주지 못하는 것은 “왜 그렇게 했나”보다 <strong>“무엇을 하지 않기로 했나”</strong> 다.\n기각안의 기각 사유가 없으면 6개월 뒤에 같은 논의를 반복한다.</p>\n<h3 id=\"2-측정-없이-믿지-않는다--기각된-가설도-기록한다\" style=\"position:relative;\"><a href=\"#2-%EC%B8%A1%EC%A0%95-%EC%97%86%EC%9D%B4-%EB%AF%BF%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4--%EA%B8%B0%EA%B0%81%EB%90%9C-%EA%B0%80%EC%84%A4%EB%8F%84-%EA%B8%B0%EB%A1%9D%ED%95%9C%EB%8B%A4\" aria-label=\"2 측정 없이 믿지 않는다  기각된 가설도 기록한다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 측정 없이 믿지 않는다 — 기각된 가설도 기록한다</h3>\n<p>이 프로젝트에서 사전 예측이 측정으로 뒤집힌 것이 네 번이다.</p>\n<ol>\n<li>“JDBC batch 가 제일 빠를 것” → 아니었다 (수행하는 작업이 다르다)</li>\n<li>“fetch join 이 N+1 의 정답” → 쿼리는 줄지만 메모리 페이징이라는 숨은 비용</li>\n<li>“DB 가 느려서 캐시가 필요” → 저부하에선 캐시 없이도 p95 5ms</li>\n<li>“온디맨드 패키징도 1초쯤” → 실측 5.4초</li>\n</ol>\n<p>틀린 예측이 왜 틀렸는지가 맞은 결정보다 배운 게 많았다. 각 글에서 자세히 다룬다.</p>\n<h3 id=\"3-깨뜨려서-증명한다\" style=\"position:relative;\"><a href=\"#3-%EA%B9%A8%EB%9C%A8%EB%A0%A4%EC%84%9C-%EC%A6%9D%EB%AA%85%ED%95%9C%EB%8B%A4\" aria-label=\"3 깨뜨려서 증명한다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 깨뜨려서 증명한다</h3>\n<p>“두 번 호출해도 결과가 같더라”는 함수의 성질 확인일 뿐이다. 실제로 문제 상황을 만들어야 증명이 된다.</p>\n<ul>\n<li>멱등성 → Kafka 오프셋을 0으로 되감아 전량 재소비시킨다</li>\n<li>트랜잭션 경계 → 기각한 설계(REQUIRED)를 일부러 재현해서 실패 기록이 사라지는 걸 보여준다</li>\n<li>캐시 stale → 30초를 기다리는 대신 생성 시각을 과거로 조작한 캐시를 주입한다</li>\n<li>Redis 장애 → 컨테이너를 멈추는 게 아니라 “아무도 안 듣는 포트”를 바라보는 클라이언트를 조립한다</li>\n</ul>\n<p>다음 글부터 마일스톤 순서로 간다. 첫 주제는 JPA 로 넘어온 MyBatis 개발자가\n가장 먼저 부딪히는 벽 — <strong>배치 insert 가 41배 느려지는 이유</strong>다.</p>\n<hr>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#%EC%99%9C-%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%B8%EA%B0%80\">왜 이 프로젝트인가</a></p>\n</li>\n<li>\n<p><a href=\"#%EB%A7%88%EC%9D%BC%EC%8A%A4%ED%86%A4-%EC%A7%80%EB%8F%84\">마일스톤 지도</a></p>\n</li>\n<li>\n<p><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-%EA%B4%80%ED%86%B5%ED%95%9C-%EC%84%B8-%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99\">프로젝트를 관통한 세 가지 원칙</a></p>\n<ul>\n<li><a href=\"#1-%EA%B2%B0%EC%A0%95%EC%9D%80-adr-%EB%A1%9C-%EB%82%A8%EA%B8%B4%EB%8B%A4\">1. 결정은 ADR 로 남긴다</a></li>\n<li><a href=\"#2-%EC%B8%A1%EC%A0%95-%EC%97%86%EC%9D%B4-%EB%AF%BF%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4--%EA%B8%B0%EA%B0%81%EB%90%9C-%EA%B0%80%EC%84%A4%EB%8F%84-%EA%B8%B0%EB%A1%9D%ED%95%9C%EB%8B%A4\">2. 측정 없이 믿지 않는다 — 기각된 가설도 기록한다</a></li>\n<li><a href=\"#3-%EA%B9%A8%EB%9C%A8%EB%A0%A4%EC%84%9C-%EC%A6%9D%EB%AA%85%ED%95%9C%EB%8B%A4\">3. 깨뜨려서 증명한다</a></li>\n</ul>\n</li>\n</ul>\n</div>","excerpt":"왜 이 프로젝트인가 MyBatis/MariaDB 중심으로 4~5년을 일했고, JPA·Kafka·Redis 는 “써봤다”와 “설계할 수 있다” 사이 어딘가에 있었다.\n그 간극을 메우려고 음악 스트리밍 서비스의 백엔드 데이터 파이프라인을 축소 구현했다. 두 개의 큰 흐름으로 구성된다. 음원 메타데이터 입수 — 유통사가 보내는 DDEX 스타일 XML 을 스트리밍 파싱·검증해 배치 적재 재생 이벤트 처리 — Kafka 로 초당 수백 건의 재생 이벤트를 수집, 멱등하게 집계해 실시간 차트 제공 이 도메인을 고른 이유는 두 흐름의 실패 모델이 정반대라서다.\n입수는 “파일 하나가 크고 실패가 부분적” — 트랜잭션 경계 문제.\n이벤트는 “건수가 많고 중복이 정상” — 멱등성 문제.\n한 프로젝트 안에서 서로 다른 정합성 전략을 비교할 수 있다. 저장소: github.com/Shim8934/media-project 스택: Java 21, Spring Boot 3.4, JPA + JdbcTemplat…","frontmatter":{"date":"July 24, 2026","title":"음악 스트리밍 파이프라인 만들기 - 01. 프로젝트 소개와 세 가지 원칙","categories":"Music_Pipeline","author":"shim8934","emoji":"🎵"},"fields":{"slug":"/Music_Pipeline_01/"}},"next":{"id":"75c81465-2e74-5a62-8afe-eeaed6f49935","html":"<h2 id=\"til-08-서버-네트워크-기본\" style=\"position:relative;\"><a href=\"#til-08-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8\" aria-label=\"til 08 서버 네트워크 기본 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TIL 08. 서버 네트워크 기본</h2>\n<blockquote>\n<p>이번 장에서는 서버 내부의 설정 중 윈도와 리눅스 서버에서 네트워크를 각각 어떻게 설정하고 현재 네트워크 상태를 어떻게 확인할 수 있는지가 주관점이다.</p>\n</blockquote>\n<br/>\n<hr>\n<h3 id=\"1-서버의-네트워크-설정-및-확인-os-별로-정리\" style=\"position:relative;\"><a href=\"#1-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-%ED%99%95%EC%9D%B8-os-%EB%B3%84%EB%A1%9C-%EC%A0%95%EB%A6%AC\" aria-label=\"1 서버의 네트워크 설정 및 확인 os 별로 정리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 서버의 네트워크 설정 및 확인 (OS 별로 정리)</h3>\n<h4 id=\"1-리눅스-서버-네트워크\" style=\"position:relative;\"><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\" aria-label=\"1 리눅스 서버 네트워크 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1) 리눅스 서버 네트워크</h4>\n<h5 id=\"1-centos의-네트워크-설정\" style=\"position:relative;\"><a href=\"#1-centos%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95\" aria-label=\"1 centos의 네트워크 설정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(1) CentOS의 네트워크 설정</h5>\n<ul>\n<li>\n<p>CentOS의 네트워크 설정 파일은 다음 경로에 존재한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">/etc/sysconfig/network-scripts</code></pre></div>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 95.55555555555554%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAIAAAAf7rriAAAACXBIWXMAAAsTAAALEwEAmpwYAAACbklEQVQ4y22U23KjQAxE/TMJjg3YGIbLMBfNRdIAyf//ztZgx+tkt0oPvLTU032KQ1iWuK4S3KDM7LwE1yvTTnJ2fjQwGZgsXMRwEUPd9b/mMDs/aFN1vQRnEScLvdIWKa/TRvkAAWnd4rplfdt/z1C3w8EiApGQSvkQllWHOGrrKNmY9Y65+/ocFr5NYyVENXSlbMu5PetbOXUHxxyWtVdGh4jrZiJJ6xwlE+JkwRK9rdc3vhRUn2Vbi77qRZ5B1H1/ACLHScxa+RCX1UTUIVokxzyDB6KCy3euTrZ5PLXtnx8HR+zTD/HsvY3oKM3OW6T31BTcnFxbd/tZkecRmOclrtueTYzLZiONxpqIObPddvFl3r/UCdV1HM7qdlZtKbv7/Xtg3L0EpkNwnBzzHlgquCy4+nDXWrx47h5icsRi1rPznpMKQYIzMW+crLNIRWo/QnOCphp2z0MOLC/qcmDs03InxHPSIfTKAJHyYTJgEI+LKZ0oVVv1opz2ntStHLPzw/15nVTf4jj7YJFMxNGAJTzGqsCqoMvDdvvXfBbDU5zS/uZoIjpOEjwwFXg5xms+9S+ee6VJSL0HtgCR52RCFj96xssxXKpR/EprryolXD8HbXPPO2GDNhbJIt0JK1ZdbKqyshq6O5V/befAOPXqG5IQtQ9ADMTSOiA60rXg5qy6ywOSl8uA/IqnRbQ7oY5yz8B8xPpI1ROMH7ZfxPGOp4mUyeH9MnNBdRHrk2n+IzYx/qrKhAhEwElaD8yn2JxC80HXEtqqFVUrfvwMJLhrPyofHLNFDPt9izQacMRx24DZL8lvSfnQSfXU/wH/7gme43h9BAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"CentOS_network-scripts\" title=\"CentOS_network-scripts\" src=\"/static/697d3155421b476fca96275d4bbba9f0/37523/CentOS_network-scripts.png\" srcset=\"/static/697d3155421b476fca96275d4bbba9f0/e9ff0/CentOS_network-scripts.png 180w,\n/static/697d3155421b476fca96275d4bbba9f0/f21e7/CentOS_network-scripts.png 360w,\n/static/697d3155421b476fca96275d4bbba9f0/37523/CentOS_network-scripts.png 720w,\n/static/697d3155421b476fca96275d4bbba9f0/5a190/CentOS_network-scripts.png 800w\" sizes=\"(max-width: 720px) 100vw, 720px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\" decoding=\"async\">\n    </span>\n</li>\n</ul>\n<br/>\n<ul>\n<li>네트워크 인터페이스 별로 설정 가능한 사항이 파일에 기록되어 있으며, 주요 항목은 다음과 같다. 주요 항목 이외에도 설정할 수 있는 다양한 항목들이 존재한다.</li>\n</ul>\n<table style=\"width:80%;\">\r\n    <tr style=\"text-align:center;\">\r\n        <td colspan=\"2\">CentOS의 인터페이스 설정 시 주요 항목</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>ONBOOT</td>\r\n        <td>부팅 시 인터페이스를 활성화시킬 것인지 결정(yes / no)</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>BOOTPROTO</td>\r\n        <td>부팅 시 사용할 프로토콜 (none, dhcp, static)</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>IPADDR</td>\r\n        <td>IP 주소</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>NETMASK</td>\r\n        <td>서브넷 마스크 <br/> 예) 255.255.255.0</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>PREFIX</td>\r\n        <td>서브넷 마스크(비트 값으로 표기) <br/> 예) 24</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>GATEWAY</td>\r\n        <td>게이트웨이 주소</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>DNS1</td>\r\n        <td>주 DNS 정보 입력</td>        \r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>DNS2</td>\r\n        <td>보조 DNS</td>\r\n    </tr>\r\n</table>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 428px; \">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 92.77777777777777%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAIAAAAf7rriAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB50lEQVQ4y42T246bMBCGeZ5N0g1nsB0CBozPR7wJe9O+/1NUm6h71ZZII99Yn377m5lEWEukVD5QpYR17bU/V825qn8U1W4lYdtmIYVzJkb7EUfGqTYlvByzch/2t9u63bmxKgQiJdOmvlyPefle7ocnOgR/u+l1nYUgQiI8vp2zY1Yc0vyU74QnKgSqtQqBWyu9b7rrxDkcMBxw1oD/84lwjlur15VqzY2tUQf6AfQDegWWzi1SSe+lc+u2ITyCHqd1e0iz/WdzYzFlNkYbo4mRKmU+YoW6Q1rsCxPODQvVISjvVQgj4/5+m4UYFlpC9Az/l/kvYZiy+Pk5Cym9J1LqdZXOj4wtUuGFIjxeZzIsdCDLe1Gd8vJZjz7f77MQ3FqqDRzwuWryFmYNyBpQoa4A8OtsUQlRAdD31XMEH8KUYkaPjE1cwB4PZGm7/oKnRSmER2ZMN5FHOJuFHBnvCWmv/SkvExujcI4IKazFCy1aeEjzP7/6q+3yuwvJ56+f/n4fGZ+4yBqQ1m0JL69sxRe8bpuNcWQM4bFClwKg9tq/MtgP2z7YGIlU3TQXAFWoyxrwajLVhmrdk6Wb5p4seQvPVfMqLKwbKNXr+tTWE1KhyzErXoLzBmQ1yFtYAPi0ldbt7lQ/4d8p7gmb7WBxBwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"CentOS_NIC\" title=\"CentOS_NIC\" src=\"/static/286a57cca61207697b0219b024a00a1e/47730/CentOS_NIC.png\" srcset=\"/static/286a57cca61207697b0219b024a00a1e/e9ff0/CentOS_NIC.png 180w,\n/static/286a57cca61207697b0219b024a00a1e/f21e7/CentOS_NIC.png 360w,\n/static/286a57cca61207697b0219b024a00a1e/47730/CentOS_NIC.png 428w\" sizes=\"(max-width: 428px) 100vw, 428px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\" decoding=\"async\">\n    </span>\n<br/>\n<ul>\n<li>\n<p>CentOS뿐만이 아닌 대부분의 Linux 계열 OS에서는 인터페이스 설정 파일을 수정하더라도 변경한 값이 즉시 적용되지 않는다. 변경된 설정값을 적용하려면 다음 두 가지 방법 중 하나를 수행해야 한다.</p>\n<ol>\n<li>\n<p>네트워크 서비스 재시작</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">systemctl restart network.service</code></pre></div>\n<br/>\n</li>\n<li>\n<p>특정 인터페이스 재시작(ifup)과 다운(ifdown)</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token function\">ifup</span> ifcfg-eht0\r\n<span class=\"token function\">ifdown</span> ifcfg-eth0</code></pre></div>\n</li>\n</ol>\n</li>\n</ul>\n<br/>\n<h6 id=\"-ifconfig-linux--ipconfig-window\" style=\"position:relative;\"><a href=\"#-ifconfig-linux--ipconfig-window\" aria-label=\" ifconfig linux  ipconfig window permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>* ifconfig (Linux) &#x26; ipconfig (Window)</h6>\n<ul>\n<li>Linux에선 ifconfig, Window에서는 <code class=\"language-text\">ipconfig</code>로 각각 네트워크 인터페이스의 설정값과 상태를 확인할 수 있다. 다만 차이점은 Linux의 ifconfig에선 활성화된 인터페이스 정보만 확인할 수 있다는 점이다. Linux에선 위 1-1)에서 다룬 인터페이스 다운으로 비활성화 시켜둔 인터페이스는 <code class=\"language-text\">ifconfig</code>를 통해 드러나지 않는다. Window에선 비활성화된 인터페이스까지 포함해 모든 인터페이스 정보가 보여지게 된다.\t<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABUUlEQVQoz01QWW6EMAzlQjPAQPbVzuIEmPtfp83QVpX8Ycl+64St5+Og603vd+qHT9mlLH1YuDSQ6Hpja+W86nmV8wJq3LiXVDMTz51PsVKs5HO5l1hIWL8KPTOxMKEjlPMEarkf+RgLVNIRmLYLF5MBdJiACCqFXCwmHVH6sEq1cimcD6W6lH0uY1IWLmzKzDt/bGwCaql3qAOc++FzMYDC+V3bTWkDgG2o3W+xkgrArXvufNi2mFzKsZDDrEPctVmFfEn12NgylIMv9Q6l4yBdhXpJvfBP5tsPtnZn5tbPjN/EC5c6QigV6OdqAFch7+unsFJjpdR7KDWUOtIOZf3Y+MKE9OEP6UcjuEn9Er/KdxmDvpJL2QDqAJsyq1SbMirEYa3U+KE2gAYSN26YF2rC1v+VEaULzLhd25mJeRfSx9wPoIa9WxxVc+vZB/yt/AXcrYNnldncuQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"ifdown후의 ifconfig 차이점\"\n        title=\"ifdown후의 ifconfig 차이점\"\n        src=\"/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/37523/CentOS_ifconfig.png\"\n        srcset=\"/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/e9ff0/CentOS_ifconfig.png 180w,\n/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/f21e7/CentOS_ifconfig.png 360w,\n/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/37523/CentOS_ifconfig.png 720w,\n/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/302a4/CentOS_ifconfig.png 1080w,\n/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/07a9c/CentOS_ifconfig.png 1440w,\n/static/3da1c9399eb432fa8c28d6eaf6b3ce4e/cd7c1/CentOS_ifconfig.png 1547w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></li>\n</ul>\n<p>​\t위의 예시는 ifcfg-enp0s8 인터페이스를 다운시킨 후, <code class=\"language-text\">ifconfig</code>를 통한 정보 확인 과정이다. 기존에 출력하던 <code class=\"language-text\">ip 주소</code>, <code class=\"language-text\">netmask</code> 등의 정보가 표기되지 않는 것을 확인할 수 있다.</p>\n<br/>\n<h5 id=\"2-우분투-서버-네트워크\" style=\"position:relative;\"><a href=\"#2-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\" aria-label=\"2 우분투 서버 네트워크 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(2) 우분투 서버 네트워크</h5>\n<ul>\n<li>\n<p>우분투 네트워크 설정 파일은 다음 경로에 존재한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">/etc/network/interfaces</code></pre></div>\n</li>\n<li>\n<p>CentOS와의 차이점은 CentOS에서는 네트워크 인터페이스 별로 관련 파일과 디렉터리가 존재하지만, 우분투는 interfaces 설정 파일에 네트워크의 모든 인터페이스 설정이 들어간다는 점이다.</p>\n</li>\n<li>\n<p>각 설정에 필요한 속성 값은 거의 CentOS와 비슷하고 이름만 조금 다르다는 특징이 있다. 네트워크 시작 / 정지 / 재시작을 위한 명령어의 차이가 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">/etc/init.d/networking start\r\n/etc/init.d/networking stop\r\n/etc/init.d/networking reload\r\n/etc/init.d/networking restart\r\n/etc/init.d/networking force-reload</code></pre></div>\n</li>\n</ul>\n<br/>\n<h4 id=\"2-윈도우-서버-네트워크\" style=\"position:relative;\"><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\" aria-label=\"2 윈도우 서버 네트워크 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2) 윈도우 서버 네트워크</h4>\n<ul>\n<li>\n<p>윈도우에서의 네트워크 설정은 여러 가지 방법으로 할 수 있다.</p>\n<p>1-1) 네트워크 연결 메뉴 사용</p>\n<ol>\n<li><code class=\"language-text\">제어판</code> → <code class=\"language-text\">네트워크 및 인터넷</code> → <code class=\"language-text\">네트워크 연결</code> 또는 아래 이미지와 같이 <code class=\"language-text\">ncpa.cpl</code>을 실행해 바로 <strong>네트워크 연결</strong>로 이동하는 방법도 있다.</li>\n</ol>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 399px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 51.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABf0lEQVQoz5WRy27UMABF/aF8Er/BAv4A0U1FRel0wSCqZqaT8Thx4sbOw574lXH8QElBVEgsODq6OrJ3Nijbc47p4Wnn5vlycZcV9zfLxa9awxjTdR1Q2qQUZ+fSfxJjAFLpE5/1nGhD9vmxxBieToyxZ0oJIW3b1XXVNE1RFGWJEUKEkArjsqrsNIFWqE8H2ZnQlMf9w3eMjrtdtt9lNSGTtUYrrZS1xmglx1ErOVmrlZJy9N4DJWXwLqWIhbvHNu+dC3Gagwtpjn/0afH1yRwiaBk7QsQ7+u7b+c178va6F1PgNgzmn3IbiZh67YDWOqXkvQ8xLq+Qog/Rh7BunP2i82HdF8NL+BABpfT8ip4L1nPWDW3P254LzjkfOB8E/93DskJwIQRgjEkpx3EU59EouYXt9UP54eOXq/vs6kcNyzo/PN1+vT3keU3Idrv9fHOzudts7jaMMYAQopQ+r1DaQEweYZXBMoP4EVa4Wv5lAeNqaVwUBSoKCGFd1z8BUEUvkq/3jkcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"ncpacpl\"\n        title=\"ncpacpl\"\n        src=\"/static/083758ee7a62f80780de2366edb381f9/a307d/Window_ncpacpl.png\"\n        srcset=\"/static/083758ee7a62f80780de2366edb381f9/e9ff0/Window_ncpacpl.png 180w,\n/static/083758ee7a62f80780de2366edb381f9/f21e7/Window_ncpacpl.png 360w,\n/static/083758ee7a62f80780de2366edb381f9/a307d/Window_ncpacpl.png 399w\"\n        sizes=\"(max-width: 399px) 100vw, 399px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<ol start=\"2\">\n<li>\n<p><strong>네트워크 연결</strong> 메뉴에서 특정 네트워크 어댑터를 설정하려면 우클릭해 <strong>속성</strong>에 들어간다.\r\n그리고 여러 가지 서비스 중 Internet Protocol Version 4(TCP/IPv4) 속성을 선택하면 해당 어댑터에서 사용할 <code class=\"language-text\">IP 주소</code>, <code class=\"language-text\">서브넷</code>, <code class=\"language-text\">게이트웨이</code>, <code class=\"language-text\">DNS 정보</code>를 설정할 수 있다.\r\n보통의 가정집에서는 자동으로 설정해 사용하는 경우가 대부분이다.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABMElEQVQoz22RjY6DIBCEff8XvLNJE1sUVBBElD9N57LkbHrtkawskJ39Zq3WzUNNuoSZF2hjYBeHzXt4H+BDRAgRMSaklJHzjpQzUkqIMSKmDB9CyemuurYWwyjhnINQDh3vcWcMQvQYR4lp0pi0hlQKou8xWwvvfWmYU8KdS3zVV9xuDYZhQIW3ta4OXddBaw1rLZZlKTuFsbY0PmkoDyGUusfjQR9UlJxBa9s2zPNcCo7jKOd937GuK/gwFnJjDGJKMGYu709B4FOQ7FAxCVJOxURBd1fW4ruu0TRNIT8bnYIUT8uvhGT3tEaiJylrGS6XC+pfUc7FJ+G7INGcdomABImGxsA5L/Ol4Qshyv5nhv8JUkeySQLWLmCDxo216IV4/iCiV0pBSgn3YpkEfwDWO2jtD4k5UQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"속성창\"\n        title=\"속성창\"\n        src=\"/static/0ec4bd41e8dbc7fac356ef70cca6a34f/37523/Window_NetworkSetting.png\"\n        srcset=\"/static/0ec4bd41e8dbc7fac356ef70cca6a34f/e9ff0/Window_NetworkSetting.png 180w,\n/static/0ec4bd41e8dbc7fac356ef70cca6a34f/f21e7/Window_NetworkSetting.png 360w,\n/static/0ec4bd41e8dbc7fac356ef70cca6a34f/37523/Window_NetworkSetting.png 720w,\n/static/0ec4bd41e8dbc7fac356ef70cca6a34f/302a4/Window_NetworkSetting.png 1080w,\n/static/0ec4bd41e8dbc7fac356ef70cca6a34f/07a9c/Window_NetworkSetting.png 1440w,\n/static/0ec4bd41e8dbc7fac356ef70cca6a34f/c88ae/Window_NetworkSetting.png 1541w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n</li>\n</ol>\n<br/>\n<p>1-2) netsh 명령어 사용</p>\n<ol>\n<li>\n<p>Linux에서의 명령어를 사용한 네트워크 설정과 유사하게 <code class=\"language-text\">netsh</code>라는 명령어를 사용할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\">netsh interface ipv4 <span class=\"token function\">set</span> address name=<span class=\"token string\">\"인터페이스명\"</span> static IP 주소 서브넷 게이트웨이</code></pre></div>\n</li>\n</ol>\n<br/>\n<p>리눅스와 달리 윈도우는 설정 완료 후 ‘확인’ 버튼만 클릭하면 변경한 설정이 적용된다. Linux 계열의 OS처럼 별도로 네트워크 서비스나 인터페이스를 재시작하지 않아도 되지만, 간혹 정상적으로 동작하지 않아 재시작해야하는 경우에는 재시작할 어댑터를 <code class=\"language-text\">사용 안 함</code> → <code class=\"language-text\">사용</code> 을 통해 재시작하면 된다.</p>\n<p>​\t<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 411px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 61.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAABb0lEQVQoz4XQbU+rMBTAcb6938EPYHx335rcxESvxC3ZgPEwCisP7UZLhZ3SuWTiYL2RqfGN45e+/eecHqPrur7vu64/fdJaay7fr+/VfN3O6e6vlUwTQFKHcEKgw+Eh0BFoQzVqp5Qoy8PhTWt97Dp96gvZXt0Et/+yh1T9meA7lz9khyf6/kRakx7N9fExf5tsOmO+cKPIX60wQsi2bSHE9gM0smKcB8lmuqoWm1eLNDbd2UQ5dOdsXmcpBOXBIDTDSTJ5fnZdl1Ja1zV8UU0jOG/bVv/CaJqGc26aZhzH+/1eSvkdb0Eyxi7FZL0mJEcIEUKKomCMvXypqmoknjmWs7B83w8GaZoCQDWo63okhu1WCOF5XpZlQRA4joMxPo8dj30UYhzleV4UhRCCMVaW5ce5AaQc+/PUmrmeE4YIIZTnOaVUKSUH51tenLwMUBQul0uMcTY473w2Mtn2XM9feK4Xx7FSCgDqHy7H/wEd/JokdEvl6gAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"윈도우 네트워크 재시작\"\n        title=\"윈도우 네트워크 재시작\"\n        src=\"/static/7397dbb32243806587c0d2966a783da0/2a432/Window_networkrestart.png\"\n        srcset=\"/static/7397dbb32243806587c0d2966a783da0/e9ff0/Window_networkrestart.png 180w,\n/static/7397dbb32243806587c0d2966a783da0/f21e7/Window_networkrestart.png 360w,\n/static/7397dbb32243806587c0d2966a783da0/2a432/Window_networkrestart.png 411w\"\n        sizes=\"(max-width: 411px) 100vw, 411px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<p>아니면 netst 명령으로도 어댑터를 리셋 가능하다.</p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\">netsh interface <span class=\"token function\">set</span> interface name=<span class=\"token string\">\"인터페이스명\"</span> admin=disabled   <span class=\"token comment\">#(비활성화)</span>\r\nnetsh interface <span class=\"token function\">set</span> interface name=<span class=\"token string\">\"인터페이스명\"</span> admin=enabled    <span class=\"token comment\">#(활성화)</span></code></pre></div>\n</li>\n</ul>\n<br/>\n<hr>\n<h3 id=\"2-서버의-라우팅-테이블\" style=\"position:relative;\"><a href=\"#2-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94\" aria-label=\"2 서버의 라우팅 테이블 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 서버의 라우팅 테이블</h3>\n<blockquote>\n<p>이번 단원에서는 서버의 라우팅 동작을 이해하기 위한 라우팅 테이블 확인 방법에 초점을 둔다.</p>\n<p>이번에 살펴볼 항목들은 아래와 같다.</p>\n<ol>\n<li>목적지 (Destination)</li>\n<li>서브넷 (Genmask)</li>\n<li>게이트웨이 (Gateway)</li>\n<li>인터페이스 (face)</li>\n<li>우선순위 (Metric)</li>\n</ol>\n</blockquote>\n<h4 id=\"1-라우팅-테이블-출력-시-출력-항목\" style=\"position:relative;\"><a href=\"#1-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B6%9C%EB%A0%A5-%EC%8B%9C-%EC%B6%9C%EB%A0%A5-%ED%95%AD%EB%AA%A9\" aria-label=\"1 라우팅 테이블 출력 시 출력 항목 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 라우팅 테이블 출력 시 출력 항목</h4>\n<table>\r\n    <tr style=\"text-align:center;\">\r\n        <td colspan=\"5\">서버 라우팅 테이블 항목</td>\r\n    </tr>\r\n    <tr style=\"text-align:center;\">\r\n        <td>10.10.20.0</td>\r\n        <td>24</td>\r\n        <td>10.10.10.1</td>\r\n        <td>eth1</td>\r\n        <td>10</td>\r\n    </tr>\r\n    <tr style=\"text-align:center;\">\r\n        <td>목적지</td>\r\n        <td>서브넷</td>\r\n        <td>게이트웨이</td>\r\n        <td>인터페이스</td>\r\n        <td>우선순위</td>\r\n    </tr>\r\n</table>\n<ul>\n<li>어떤 OS에서 출력을 하든 차이점은 순서만 차이날 뿐, 위의 항목들이 대부분 출력된다.</li>\n</ul>\n<table>\r\n    <tr style=\"text-align:center;\">\r\n        <td colspan=\"2\">라우팅 테이블 항목 부가 설명</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>1. 목적지와 서브넷</td>\r\n        <td>서버가 통신하려는 목적지 IP 주소에 맞는 라우팅을 선택하는 기준점.<br/> 라우팅할 때 목적지 네트워크 주소와 서브넷으로 표현되는 목적지 네트워크 범위 내에 서버가 통신하려는 IP 주소가 속한 라우팅 테이블을 선택하게 된다.</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>2. 게이트웨이</td>\r\n        <td>선택된 목적지로 가기 위해 서버에서 선택하는 넥스트 홉.<br/> 만약 서버에 두 개 이상의 네트워크 카드(NIC)가 존재한다면 원하는 네트워크 카드의 게이트웨이로 지정해 주어야 한다.</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>3. 인터페이스</td>\r\n        <td>서버의 네트워크 카드를 의미하며, 라우팅에서 어떤 물리적인 경로로 패킷을 내보낼지 설정한다.</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>4. 우선순위</td>\r\n        <td>동일한 라우팅 테이블이 두 개 이상 존재할 때 어떤 라우팅 테이블을 선택할지 정하는 값이다. 이 값이 낮을 수록 우선순위가 높아진다.</td>\r\n    </tr>\r\n</table>\n<br/>\n<h4 id=\"2-리눅스-서버의-라우팅-확인-및-관리\" style=\"position:relative;\"><a href=\"#2-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EA%B4%80%EB%A6%AC\" aria-label=\"2 리눅스 서버의 라우팅 확인 및 관리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 리눅스 서버의 라우팅 확인 및 관리</h4>\n<h5 id=\"1-라우팅-테이블-확인\" style=\"position:relative;\"><a href=\"#1-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%ED%99%95%EC%9D%B8\" aria-label=\"1 라우팅 테이블 확인 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 라우팅 테이블 확인</h5>\n<ol>\n<li>\n<p>ip route</p>\n<ul>\n<li>ip route 명령어를 사용한 결괏값은 다음과 같다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 15%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVQI1xXNWQ6DIBQAQA/UxVi1uIFsjWB94AOk3v8ijcn8T4E5Q4zWOb2uywbWe2XtyMUo5CTUJOXIRcc4oexRt2X7fjaXW1XfX02x7t442BA3RJ9SyD9/pP04XEouRczZxbgALABfxC2gAaeMJZTV/VBACPE8rfcGHNOfK5RqFJIqPXBx5UL2M+/YTKWmSveMV6SrSF+25A/HPjD8CtVtmwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image-20220804094620919\"\n        title=\"image-20220804094620919\"\n        src=\"/static/1206834b46ca2e044e3022701df096a9/37523/CentOS_iproute.png\"\n        srcset=\"/static/1206834b46ca2e044e3022701df096a9/e9ff0/CentOS_iproute.png 180w,\n/static/1206834b46ca2e044e3022701df096a9/f21e7/CentOS_iproute.png 360w,\n/static/1206834b46ca2e044e3022701df096a9/37523/CentOS_iproute.png 720w,\n/static/1206834b46ca2e044e3022701df096a9/63ec5/CentOS_iproute.png 812w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n</li>\n</ol>\n<p>​\t<br/></p>\n<ol start=\"2\">\n<li>\n<p>netstat -r</p>\n<ul>\n<li>netstat을 사용해 확인할 땐 r 옵션을 추가하면 라우팅 테이블을 편하게 확인할 수 있다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 20.555555555555554%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAyklEQVQI1yXOSbKCMBQAQK5j/RI+hMwDQyIiYiKBFM9S7n8NF6570xkcR3q/l32/hWcEiACi7RGXWOpaqJLyigmiNJYKS02VwVL/qGIig+NzC4HqBjGxAkwh/JUor8m0LMN9zmtSUnadHxXj/XUc7jOWWvV2jtFNU/ZMafRBWVdgOno/ep/X5J8wv60hpccatXW8aU9FqToru/5UlFSZ9QVx37OwbStA2JJxrrkM3LR5TQpMtXXGXYxzWCrExRnh3/yMMOJCdVb39gv+Zj3JWHZFLwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"netstat -r\"\n        title=\"netstat -r\"\n        src=\"/static/bba4bc6fd88682d0e7c7a69543aa6f8c/37523/CentOS_netstat_r.png\"\n        srcset=\"/static/bba4bc6fd88682d0e7c7a69543aa6f8c/e9ff0/CentOS_netstat_r.png 180w,\n/static/bba4bc6fd88682d0e7c7a69543aa6f8c/f21e7/CentOS_netstat_r.png 360w,\n/static/bba4bc6fd88682d0e7c7a69543aa6f8c/37523/CentOS_netstat_r.png 720w,\n/static/bba4bc6fd88682d0e7c7a69543aa6f8c/5a6dd/CentOS_netstat_r.png 802w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<ul>\n<li>n 옵션을 추가로 사용하면 화면에 표기될 때, 실제 IP 정보가 표기되어 좀 더 직관적인 라우팅 테이블을 확인할 수 있다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 20%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAz0lEQVQI1yXIW46DIBQAULfTTIxDGQrIywtYbRAfQalmatJ0/4uYjzmfpzg/n9/3O79e07rt57mfJ9w7aR03wA3cpL5JXTeWG6gbEGD/n+mGKlMsOXcxMm0Q5TGlNoQvhEtMHtPchlBigii/h+HKOHR9G8JPLSW4YVls/yjGtPZx1M5XhLYhdEP8JhRRNq7rvG0xJeU80+ZSIWW9aOBSIaZMOo4lP4tp3dKxz3mTYJdnNr4tMakIVc5r75XzREjM6xITIhQRssQEs1qAldb9AcfmPsxXKHeQAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"netstat -rn\"\n        title=\"netstat -rn\"\n        src=\"/static/0dbf06ff0b04c4465951040d88c8f1d4/37523/CentOS_netstat_rn.png\"\n        srcset=\"/static/0dbf06ff0b04c4465951040d88c8f1d4/e9ff0/CentOS_netstat_rn.png 180w,\n/static/0dbf06ff0b04c4465951040d88c8f1d4/f21e7/CentOS_netstat_rn.png 360w,\n/static/0dbf06ff0b04c4465951040d88c8f1d4/37523/CentOS_netstat_rn.png 720w,\n/static/0dbf06ff0b04c4465951040d88c8f1d4/27b7a/CentOS_netstat_rn.png 804w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n</li>\n</ol>\n<br/>\n<h5 id=\"2-라우팅-테이블-추가하는-설정\" style=\"position:relative;\"><a href=\"#2-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EC%84%A4%EC%A0%95\" aria-label=\"2 라우팅 테이블 추가하는 설정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 라우팅 테이블 추가하는 설정</h5>\n<ol>\n<li>\n<p>임시적 라우팅 테이블 추가</p>\n<ol>\n<li>\n<p>route add / del (추가 / 삭제)</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">route <span class=\"token function\">add</span> <span class=\"token punctuation\">{</span> -host <span class=\"token operator\">|</span> -net <span class=\"token punctuation\">}</span> Target<span class=\"token punctuation\">[</span>/prefix<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span>gw GW<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span>metric M<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>dev<span class=\"token punctuation\">]</span> If<span class=\"token punctuation\">]</span>   <span class=\"token comment\"># 추가</span>\r\nroute del <span class=\"token punctuation\">{</span> -host <span class=\"token operator\">|</span> -net <span class=\"token punctuation\">}</span> Target<span class=\"token punctuation\">[</span>/prefix<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span>gw GW<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span>metric M<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>dev<span class=\"token punctuation\">]</span> If<span class=\"token punctuation\">]</span>   <span class=\"token comment\"># 삭제</span></code></pre></div>\n</li>\n<li>\n<p>이 명령어 뿐만 아니라 <code class=\"language-text\">ip route</code> 옵션 뒤에 <code class=\"language-text\">add</code> 옵션을 사용하는 것도 동일하게 추가할 수 있다.</p>\n</li>\n<li>\n<p>디폴트 라우팅 설정 - 일반 라우팅 설정과 동일하지만 목적지 네트워크를 <code class=\"language-text\">default</code>로 표기해 설정할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">route <span class=\"token function\">add</span> default gw <span class=\"token number\">10.1</span>.1.1 dev eth0   <span class=\"token comment\"># 추가</span>\r\nroute del default gw <span class=\"token number\">10.1</span>.1.1 dev eth0   <span class=\"token comment\"># 추가</span></code></pre></div>\n</li>\n</ol>\n<ul>\n<li>위의 명령어로 추가한 라우팅 설정은 서버가 재부팅될 시 사라진다. 즉, 재부팅 시 초기 라우팅 설정만 남아있게 되는 특징이 있다.</li>\n</ul>\n</li>\n</ol>\n<br/>\n<ol start=\"2\">\n<li>영구적 라우팅 설정</li>\n</ol>\n<h6 id=\"1-cent-os의-영구적-라우팅-설정\" style=\"position:relative;\"><a href=\"#1-cent-os%EC%9D%98-%EC%98%81%EA%B5%AC%EC%A0%81-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\" aria-label=\"1 cent os의 영구적 라우팅 설정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1) Cent OS의 영구적 라우팅 설정</h6>\n<ul>\n<li>\n<p>CentOS에선 다음과 같이 별도 파일을 만들어 라우팅을 설정한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">/etc/sysconfig/network-scripts/route-장치명</code></pre></div>\n</li>\n<li>\n<p>예를 들어 <code class=\"language-text\">et0</code> 인터페이스에 대한 영구적인 라우팅 설정 파일명은 <code class=\"language-text\">route-eht0</code>이다.</p>\n</li>\n<li>\n<p>라우팅 설정 파일에는 <code class=\"language-text\">ADDRESS</code>, <code class=\"language-text\">NETMASK</code>, <code class=\"language-text\">GATEWAY</code> 항목을 사용한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token assign-left variable\">ADDRESS0</span><span class=\"token operator\">=</span><span class=\"token number\">10.10</span>.10.0\r\n<span class=\"token assign-left variable\">NETMASK0</span><span class=\"token operator\">=</span><span class=\"token number\">255.255</span>.255.0\r\n<span class=\"token assign-left variable\">GATEWAY0</span><span class=\"token operator\">=</span><span class=\"token number\">10.1</span>.1.1\r\n<span class=\"token assign-left variable\">ADDRESS1</span><span class=\"token operator\">=</span><span class=\"token number\">10.10</span>.20.0\r\n<span class=\"token assign-left variable\">NETMASK1</span><span class=\"token operator\">=</span><span class=\"token number\">255.255</span>.255.128\r\n<span class=\"token assign-left variable\">GATEWAY1</span><span class=\"token operator\">=</span><span class=\"token number\">10.1</span>.1.1\r\n\r\n<span class=\"token comment\"># 또는 아래와 같이 설정</span>\r\n<span class=\"token number\">10.10</span>.10.0/24 via <span class=\"token number\">192.168</span>.0.1 dev eth1</code></pre></div>\n</li>\n</ul>\n<br/>\n<h6 id=\"2--우분투의-영구적-라우팅-설정\" style=\"position:relative;\"><a href=\"#2--%EC%9A%B0%EB%B6%84%ED%88%AC%EC%9D%98-%EC%98%81%EA%B5%AC%EC%A0%81-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\" aria-label=\"2  우분투의 영구적 라우팅 설정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2)  우분투의 영구적 라우팅 설정</h6>\n<ul>\n<li>\n<p>우분투에서는 네트워크 설정에서 사용했던 <code class=\"language-text\">interfaces</code> 파일에 라우팅 설정을 한다. 일반 라우팅 테이블 설정과 동일한 양식으로 한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">up route <span class=\"token function\">add</span> <span class=\"token punctuation\">[</span>-net<span class=\"token operator\">|</span>-host<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span>host/net<span class=\"token operator\">></span>/<span class=\"token operator\">&lt;</span>mask<span class=\"token operator\">></span> gw <span class=\"token operator\">&lt;</span>host/IP<span class=\"token operator\">></span> dev <span class=\"token operator\">&lt;</span>Interface<span class=\"token operator\">></span></code></pre></div>\n<ul>\n<li>위 명령어 맨 앞의 <code class=\"language-text\">up</code>은 인터페이스가 시작될 때 실행하라는 명령어로, CentOS와 마찬가지로 네트워크를 다시 시작하거나 서버를 재부팅하는 경우, 신규 라우팅 정보가 라우팅 테이블에 등록된다.</li>\n</ul>\n</li>\n</ul>\n<br/>\n<h6 id=\"3-윈도우-서버의-라우팅-설정\" style=\"position:relative;\"><a href=\"#3-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\" aria-label=\"3 윈도우 서버의 라우팅 설정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3) 윈도우 서버의 라우팅 설정</h6>\n<ul>\n<li>윈도우에서는 라우팅 테이블을 확인하고 관리하기 위해 <code class=\"language-text\">route</code>명령어를 사용한다. 4가지 옵션이 존재한다.\n<ol>\n<li>PRINT</li>\n<li>ADD</li>\n<li>DELETE</li>\n<li>CHANGE</li>\n</ol>\n</li>\n</ul>\n<br/>\n<ol>\n<li>\n<p>PRINT</p>\n<ul>\n<li>옵션 없이 <code class=\"language-text\">route print</code>를 입력할 경우, 모든 인터페이스 목록을 확인할 수 있다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7CAAAOwgEVKEqAAAACGUlEQVQoz42Qa0/TYBiG367t2q3tDmwgDMZkJzZWYMpIUMBDMoEoGBSmHBznSMTww/zuTxA/CZJ4IAYFv/gnEHOZtotAjIYmV54nffNeud9bxHsfEbcfEipMohdqGNkJgukxgpkxjOw42tUq/vwsnUNLxEpThLofoHWNo3RWMYuPUQvzyPmnKPk5dwohKQghPBK3z/ZzKMk7hBL232dmCpGbR2RmEZmah8/swKdHka0ESmoM2WjBF4ghB5vxBePumT99n1B7X0MkNRAIqwspt4CUqSFln7iIjtFtmoe2sK5tYJXXMfpWsPqXCdh1dxq9dcz+NULtva5Ekv0In9/bIzmk/AJS9pzQSt1AS1RQ2obQEwNuSidRuDiNmqoSTN8jUq7TfP0ZUXuGcGkGkZwgkJuidbCOSNfOnuvwpw9Z92akiFJconNkE8NepGVwjaaBVdJ3t2mqbBAqr6KV6ph9K8Qq62jFBfSeRRdnF5KsISQfQrU8YZON2rNMx83nRAc2SAy/JFxe4dXrHb4c/WD34zf2D47Z/3zM3qcj9g++X0AIpxOnZNX0hNGSmzA5vOk+N9w1gmXP8e7DEZf5hHASiosJHWFqdAsp2Or+M/KTvNk9dC+cnPzk9PTXPxFCkhsdBhod9njCW1tIRltDOMXb919doXPpvwkVI46sR5DNNmRVx3elglZaJjnyAjXWjeQ3MQrT7OwdXkr4G3+7pLL9tHROAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"route print\"\n        title=\"route print\"\n        src=\"/static/89469c3a93ee2496b1ebecc4e7af0c00/37523/Window_routeprint.png\"\n        srcset=\"/static/89469c3a93ee2496b1ebecc4e7af0c00/e9ff0/Window_routeprint.png 180w,\n/static/89469c3a93ee2496b1ebecc4e7af0c00/f21e7/Window_routeprint.png 360w,\n/static/89469c3a93ee2496b1ebecc4e7af0c00/37523/Window_routeprint.png 720w,\n/static/89469c3a93ee2496b1ebecc4e7af0c00/302a4/Window_routeprint.png 1080w,\n/static/89469c3a93ee2496b1ebecc4e7af0c00/07a9c/Window_routeprint.png 1440w,\n/static/89469c3a93ee2496b1ebecc4e7af0c00/fa601/Window_routeprint.png 1569w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<br/>\n<ul>\n<li>\n<p>필요한 라우팅 정보만 확인하기 위해 특정 목적지 네트워크를 인자값으로 직접 지정하거나 <code class=\"language-text\">*</code>와 <code class=\"language-text\">?</code>를 이용해 특정 패턴에 맞는 네트워크 대역을 확인할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\">route print 10<span class=\"token punctuation\">.</span>10<span class=\"token punctuation\">.</span><span class=\"token operator\">*</span>\t\t<span class=\"token comment\"># 10.10.0.0/16 에 대한 전체 라우팅 테이블 확인</span>\r\nroute print 10<span class=\"token punctuation\">.</span>10<span class=\"token punctuation\">.</span>1?<span class=\"token punctuation\">.</span>0\t<span class=\"token comment\"># 10.10.10.0/24 ~ 10.10.19.0/24 에 대한 라우팅 테이블 확인</span></code></pre></div>\n</li>\n</ul>\n<br/>\n</li>\n<li>\n<p>ADD</p>\n<ul>\n<li>\n<p>라우팅 테이블을 추가하는 명령어다. 다만, 리눅스처럼 <strong>명령으로 입력해 생성한 라우팅 테이블</strong>은 <strong>서버가 재부팅된 이후에는 라우팅 테이블에서 사라진다는 특징</strong>이 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\">ROUTE <span class=\"token punctuation\">[</span> <span class=\"token operator\">-</span>p <span class=\"token punctuation\">]</span> ADD <span class=\"token punctuation\">[</span> dest <span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span> MASK netmask <span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span> gateway <span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span> METRIC metric <span class=\"token punctuation\">]</span> <span class=\"token punctuation\">[</span> <span class=\"token keyword\">IF</span> interface <span class=\"token punctuation\">]</span></code></pre></div>\n</li>\n<li>\n<p>생성 시, <code class=\"language-text\">-p</code> 옵션을 추가해 생성하면 영구 경로로 등록할 수 있다. 즉, 리눅스처럼 설정 파일을 별도로 만들거나 입력하지 않고도 영구 경로 생성이 가능하다는 것이다.</p>\n</li>\n</ul>\n<br/>\n</li>\n<li>\n<p>DELETE</p>\n<ul>\n<li>라우팅 테이블을 삭제하는 명령어다. 추가와 달리 <code class=\"language-text\">MASK</code> 나 <code class=\"language-text\">gateway</code> 정보를 입력하지 않아도 된다.</li>\n<li>단, 세부 정보를 입력하지 않고 삭제할 경우 유의할 점이 존재한다. 입력한 정보만으로 해당하는 정보가 2가지 이상 존재한다면 해당된 라우팅 테이블이 모두 삭제된다.</li>\n</ul>\n<br/>\n</li>\n<li>\n<p>CHANGE</p>\n<ul>\n<li>라우팅 테이블을 변경하는 명령어다.</li>\n<li>삭제와 마찬가지로 세부 정보를 입력하지 않고 변경할 때 유의할 점이 존재한다. 입력한 정보 값에 해당되는 라우팅 테이블 정보가 모두 변경된다는 점이다.</li>\n</ul>\n</li>\n</ol>\n<br/>\n<hr>\n<h3 id=\"3-네트워크-확인을-위한-명령어\" style=\"position:relative;\"><a href=\"#3-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%99%95%EC%9D%B8%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%AA%85%EB%A0%B9%EC%96%B4\" aria-label=\"3 네트워크 확인을 위한 명령어 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 네트워크 확인을 위한 명령어</h3>\n<h4 id=\"1-ping-packet-internet-groper\" style=\"position:relative;\"><a href=\"#1-ping-packet-internet-groper\" aria-label=\"1 ping packet internet groper permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1) ping (Packet InterNet Groper)</h4>\n<ul>\n<li>네트워크 상태를 확인할 때 사용하는 명령어다.</li>\n<li><code class=\"language-text\">ICMP (Internet Control Message Protocol)</code> 프로토콜을 사용하고 ICMP의 제어 메시지를 통해 여러 가지 네트워크 상태를 파악할 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token function\">ping</span> <span class=\"token punctuation\">[</span>옵션<span class=\"token punctuation\">]</span> 목적지_IP 주소</code></pre></div>\n<ul>\n<li>별도 옵션 없이 <code class=\"language-text\">ping</code>을 체크하는 방법을 통상적인 <code class=\"language-text\">기본 ping</code>이라 하며, 옵션을 사용해 <code class=\"language-text\">ping</code>을 체크하는 방법을 <code class=\"language-text\">확장 ping</code>이라 한다.</li>\n</ul>\n<br/>\n<h5 id=\"1-리눅스-ping-옵션\" style=\"position:relative;\"><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-ping-%EC%98%B5%EC%85%98\" aria-label=\"1 리눅스 ping 옵션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(1) 리눅스 ping 옵션</h5>\n<table>\r\n    <tr>\r\n        <td style=\"text-align:center;\" colspan=\"2\">리눅스 ping 명령어 옵션</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-c<br/>count</td>\r\n        <td>ping을 보내는 패킷(ECHO_REQUEST)을 몇 번 보내고 종료할 것인지를 지정</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-i<br/>interval</td>\r\n        <td>패킷을 보내는 시간 간격. 기본 설정값은 1초. 슈퍼 유저의 경우, 0.2 이하로 설정 가능</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-I<br/>interface</td>\r\n        <td>패킷을 보낼 때, 출발지 주소를 지정. 실제 IP 값을 지정하거나 인터페이스 이름을 지정하면 출발지 주소가 변경됨. 이 옵션을 사용하지 않는 경우, 라우팅 테이블에 의해 나가는 인터페이스(Outgoint-Interface)의 IP 주소가 출발지 주소가 됨.</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-s<br/>packetsize</td>\r\n        <td>패킷 크기를 지정. 기본 설정값은 56바이트(8바이트의 ICMP 헤더가 추가로 붙어 64바이트를 송신)</td>\r\n    </tr>\r\n</table>\n<br/>\n<h5 id=\"2-윈도우-ping-옵션\" style=\"position:relative;\"><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-ping-%EC%98%B5%EC%85%98\" aria-label=\"2 윈도우 ping 옵션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(2) 윈도우 ping 옵션</h5>\n<table>\r\n    <tr>\r\n        <td style=\"text-align:center;\" colspan=\"2\">윈도우 ping 명령어 옵션</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-n<br/>count</td>\r\n        <td>ping을 보내는 패킷(ECHO_REQUEST)을 몇 번 보내고 종료할 것인지를 지정<br/>기본 설정은 4회 전송</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-t</td>\r\n        <td>중지할 때까지 지정한 호스트로 ping을 지속적으로 전송</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-S<br/>srcaddr</td>\r\n        <td>사용할 원본 IP 주소로, 리눅스의 -I 옵션과 동일</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-l<br/>size</td>\r\n        <td>패킷 크기를 지정. 기본 설정값은 32바이트</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-r<br/>count</td>\r\n        <td>count 홉의 경로 기록(최대 9홉까지 설정 가능)</td>\r\n    </tr>\r\n</table>\n<br/>\n<h4 id=\"2-netstat-network-statistics\" style=\"position:relative;\"><a href=\"#2-netstat-network-statistics\" aria-label=\"2 netstat network statistics permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2) netstat (network statistics)</h4>\n<ul>\n<li>서버의 다양한 네트워크 상태를 확인할 때 사용하는 명령어다. 주로, 현재 서버의 서비스 포트 상태를 확인하는 용도로 사용한다. 윈도우 계열과 리눅스 계열에서의 기본적인 사용법은 동일하며, 일부 옵션만 차이가 있다.</li>\n<li>개인적으로 <code class=\"language-text\">netstat -antp | grep LISTENING</code> 을 통해 상태를 확인하고자 많이 사용했다.</li>\n</ul>\n<h5 id=\"1-리눅스-netstat-옵션\" style=\"position:relative;\"><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-netstat-%EC%98%B5%EC%85%98\" aria-label=\"1 리눅스 netstat 옵션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(1) 리눅스 netstat 옵션</h5>\n<table>\r\n    <tr>\r\n        <td style=\"text-align:center;\" colspan=\"2\">리눅스 netstat 명령어 옵션</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-a<br/>--all</td>\r\n        <td>모든 연결과 수신 대기 포트 표시</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-n<br/>--numeric</td>\r\n        <td>주소와 포트 번호를 숫자 형식으로 표시 (예: http → 80 )</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-r<br/>--route</td>\r\n        <td>라우팅 테이블 표시</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-i<br/>--interfaces</td>\r\n        <td>인터페이스별 입출력 패킷 통계</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-s<br/>--statistics</td>\r\n        <td>네트워크에 통계 데이터 출력</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-p<br/>--programs</td>\r\n        <td>PID와 프로그램 이름 출력</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-t<br/>--tcp</td>\r\n        <td>TCP만 출력 (TCP, TCPv6)</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-4 / -6</td>\r\n        <td>IPv4나 IPv6에 대해 출력</td>\r\n    </tr>\r\n</table>\n<br/>\n<h5 id=\"2-윈도우-netstat-옵션\" style=\"position:relative;\"><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-netstat-%EC%98%B5%EC%85%98\" aria-label=\"2 윈도우 netstat 옵션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>(2) 윈도우 netstat 옵션</h5>\n<table>\r\n    <tr>\r\n        <td style=\"text-align:center;\" colspan=\"2\">윈도우 netstat 명령어 옵션</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-a</td>\r\n        <td>모든 연결과 수신 대기 포트 표시</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-n</td>\r\n        <td>주소와 포트 번호를 숫자 형식으로 표시 (예: http → 80 )</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-r</td>\r\n        <td>라우팅 테이블 표시</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-e</td>\r\n        <td>이더넷 통계를 표시. 이 옵션은 -s 옵션과 함께 사용 가능</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-s</td>\r\n        <td>프로토콜별 통계를 표시. 기본적으로 IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP 및 UDPv6에 대한 통계를 표시한다.<br/>-p 옵션을 사용해 기본값의 일부 집합에 대한 통계만 표시</td>\r\n    </tr>\r\n    <tr style=\"text-align:left;\">\r\n        <td>-p<br/>--proto</td>\r\n        <td>proto로 지정한 프로토콜의 연결을 표시.<br/>proto는 TCP, UDP, TCPv6, UDPv6 중 하나로, -s 옵션과 함께 사용해 프로토콜별 통계를 표시할 경우, proto는 IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP 및 UDPv6 중 하나를 사용</td>\r\n    </tr>\r\n</table>\n<br/>\n<hr>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#til-08-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8\">TIL 08. 서버 네트워크 기본</a></p>\n<ul>\n<li>\n<p><a href=\"#1-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%8F-%ED%99%95%EC%9D%B8-os-%EB%B3%84%EB%A1%9C-%EC%A0%95%EB%A6%AC\">1. 서버의 네트워크 설정 및 확인 (OS 별로 정리)</a></p>\n<ul>\n<li>\n<p><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\">1) 리눅스 서버 네트워크</a></p>\n<ul>\n<li>\n<p><a href=\"#1-centos%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95\">(1) CentOS의 네트워크 설정</a></p>\n<ul>\n<li><a href=\"#-ifconfig-linux--ipconfig-window\">* ifconfig (Linux) &#x26; ipconfig (Window)</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#2-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\">(2) 우분투 서버 네트워크</a></p>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC\">2) 윈도우 서버 네트워크</a></p>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"#2-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94\">2. 서버의 라우팅 테이블</a></p>\n<ul>\n<li>\n<p><a href=\"#1-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B6%9C%EB%A0%A5-%EC%8B%9C-%EC%B6%9C%EB%A0%A5-%ED%95%AD%EB%AA%A9\">1. 라우팅 테이블 출력 시 출력 항목</a></p>\n</li>\n<li>\n<p><a href=\"#2-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EA%B4%80%EB%A6%AC\">2. 리눅스 서버의 라우팅 확인 및 관리</a></p>\n<ul>\n<li>\n<p><a href=\"#1-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%ED%99%95%EC%9D%B8\">1. 라우팅 테이블 확인</a></p>\n</li>\n<li>\n<p><a href=\"#2-%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EC%84%A4%EC%A0%95\">2. 라우팅 테이블 추가하는 설정</a></p>\n<ul>\n<li><a href=\"#1-cent-os%EC%9D%98-%EC%98%81%EA%B5%AC%EC%A0%81-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\">1) Cent OS의 영구적 라우팅 설정</a></li>\n<li><a href=\"#2--%EC%9A%B0%EB%B6%84%ED%88%AC%EC%9D%98-%EC%98%81%EA%B5%AC%EC%A0%81-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\">2)  우분투의 영구적 라우팅 설정</a></li>\n<li><a href=\"#3-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EB%B2%84%EC%9D%98-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EC%84%A4%EC%A0%95\">3) 윈도우 서버의 라우팅 설정</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"#3-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%99%95%EC%9D%B8%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%AA%85%EB%A0%B9%EC%96%B4\">3. 네트워크 확인을 위한 명령어</a></p>\n<ul>\n<li>\n<p><a href=\"#1-ping-packet-internet-groper\">1) ping (Packet InterNet Groper)</a></p>\n<ul>\n<li><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-ping-%EC%98%B5%EC%85%98\">(1) 리눅스 ping 옵션</a></li>\n<li><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-ping-%EC%98%B5%EC%85%98\">(2) 윈도우 ping 옵션</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#2-netstat-network-statistics\">2) netstat (network statistics)</a></p>\n<ul>\n<li><a href=\"#1-%EB%A6%AC%EB%88%85%EC%8A%A4-netstat-%EC%98%B5%EC%85%98\">(1) 리눅스 netstat 옵션</a></li>\n<li><a href=\"#2-%EC%9C%88%EB%8F%84%EC%9A%B0-netstat-%EC%98%B5%EC%85%98\">(2) 윈도우 netstat 옵션</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>","frontmatter":{"date":"August 01, 2022","title":"TIL 08. 서버 네트워크 기본","categories":"IT_엔지니어를_위한_네트워크_입문","author":"shim8934","emoji":"😄"},"fields":{"slug":"/IT엔지니어를_위한_네트워크_입문_08/"}},"prev":{"id":"c5d7d09a-9e82-5065-a87f-08c6c0216000","html":"<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p>음원 메타데이터 파일 하나에 Release 5,000건, Track 50,000건이 들어온다.\nMyBatis 시절엔 <code class=\"language-text\">&lt;foreach></code> 로 multi-value insert 를 쓰면 끝이었는데,\nJPA 로 오니 <code class=\"language-text\">saveAll()</code> 이 건별 INSERT 를 날리고 있었다.</p>\n<p><code class=\"language-text\">hibernate.jdbc.batch_size: 1000</code> 을 넣어도 달라지지 않았다. <strong>경고도 로그도 없이.</strong></p>\n<h2 id=\"원인--identity-는-batch-를-조용히-끈다\" style=\"position:relative;\"><a href=\"#%EC%9B%90%EC%9D%B8--identity-%EB%8A%94-batch-%EB%A5%BC-%EC%A1%B0%EC%9A%A9%ED%9E%88-%EB%81%88%EB%8B%A4\" aria-label=\"원인  identity 는 batch 를 조용히 끈다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>원인 — IDENTITY 는 batch 를 조용히 끈다</h2>\n<p>영속성 컨텍스트는 엔티티를 <strong>ID 를 키로</strong> 관리한다. 그런데 <code class=\"language-text\">GenerationType.IDENTITY</code> 는\nAUTO_INCREMENT 라서 <strong>INSERT 를 실제로 실행해야</strong> ID 를 알 수 있다.</p>\n<ul>\n<li>Hibernate 의 batch 는 write-behind(쓰기 지연) 위에서 동작한다 — INSERT 를 모았다가 flush 에서 묶어 보낸다</li>\n<li>IDENTITY 는 <code class=\"language-text\">persist()</code> 시점에 ID 가 필요하므로 즉시 INSERT 할 수밖에 없다</li>\n<li>그래서 Hibernate 는 IDENTITY 엔티티의 batch 를 <strong>예외 없이 포기한다</strong></li>\n</ul>\n<p>코드 차이는 애노테이션 한 줄인데, 이 동작 차이는 어디에도 표시되지 않는다.\nMyBatis 는 SQL 이 XML 에 그대로 보이니 이런 종류의 “조용한 비활성화”가 없다 —\nJPA 로 넘어올 때 가장 조심해야 할 지점이 바로 이 <strong>암묵성</strong>이라고 느꼈다.</p>\n<h2 id=\"5가지-전략을-같은-조건에서-측정\" style=\"position:relative;\"><a href=\"#5%EA%B0%80%EC%A7%80-%EC%A0%84%EB%9E%B5%EC%9D%84-%EA%B0%99%EC%9D%80-%EC%A1%B0%EA%B1%B4%EC%97%90%EC%84%9C-%EC%B8%A1%EC%A0%95\" aria-label=\"5가지 전략을 같은 조건에서 측정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5가지 전략을 같은 조건에서 측정</h2>\n<p>같은 데이터(Release 1,000 / Track 10,000), 같은 트랜잭션 경계에서 쓰기 방식만 갈아끼웠다.\nTestcontainers MariaDB, 3회 반복 중앙값.</p>\n<table>\n<thead>\n<tr>\n<th>전략</th>\n<th align=\"right\">중앙값(ms)</th>\n<th align=\"right\">처리량(건/초)</th>\n<th>수행 작업</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>JPA <code class=\"language-text\">IDENTITY</code></td>\n<td align=\"right\">17,225</td>\n<td align=\"right\">581</td>\n<td>순수 INSERT</td>\n</tr>\n<tr>\n<td>JPA <code class=\"language-text\">SEQUENCE</code> (increment 1000)</td>\n<td align=\"right\"><strong>418</strong></td>\n<td align=\"right\"><strong>23,923</strong></td>\n<td>순수 INSERT</td>\n</tr>\n<tr>\n<td>JPA 앱할당 TSID</td>\n<td align=\"right\">490</td>\n<td align=\"right\">20,408</td>\n<td>순수 INSERT</td>\n</tr>\n<tr>\n<td><strong>JDBC batchUpdate + UPSERT</strong></td>\n<td align=\"right\">1,205</td>\n<td align=\"right\">8,299</td>\n<td>UPSERT + 사후 SELECT</td>\n</tr>\n<tr>\n<td>TSID + 사전 SELECT + UPSERT</td>\n<td align=\"right\">1,254</td>\n<td align=\"right\">7,974</td>\n<td>사전 SELECT + UPSERT</td>\n</tr>\n</tbody>\n</table>\n<p>IDENTITY 와 SEQUENCE 의 차이가 <strong>41배</strong>다. 애노테이션 한 줄의 값이다.</p>\n<h2 id=\"기각된-가설--이-표에서-제일-배운-것\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EA%B0%81%EB%90%9C-%EA%B0%80%EC%84%A4--%EC%9D%B4-%ED%91%9C%EC%97%90%EC%84%9C-%EC%A0%9C%EC%9D%BC-%EB%B0%B0%EC%9A%B4-%EA%B2%83\" aria-label=\"기각된 가설  이 표에서 제일 배운 것 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>기각된 가설 — 이 표에서 제일 배운 것</h2>\n<p>측정 전 예측은 “JDBC 직접 제어가 제일 빠를 것”이었다. 결과는 SEQUENCE 의 1/3.</p>\n<p>이유를 파 보니 표의 함정이 보였다. <strong>전략마다 수행하는 작업이 다르다.</strong>\nJDBC 행은 “재전송 시 UPSERT” 라는 요구사항을 만족하는 비용까지 포함한 수치고,\nSEQUENCE 행은 순수 INSERT 만 한 수치다. 이 표는 “같은 SQL 의 속도 비교”가 아니라\n<strong>“각 전략이 만족하는 요구사항의 비용 비교”</strong> 였던 것이다.</p>\n<p>후속 가설 “사후 SELECT 를 사전 SELECT 로 바꾸면 싸질 것”도 측정으로 기각됐다 —\n이런 조회는 결과셋 크기가 아니라 <strong>인덱스 탐색 횟수</strong>가 비용을 지배한다.</p>\n<h2 id=\"최종-선택\" style=\"position:relative;\"><a href=\"#%EC%B5%9C%EC%A2%85-%EC%84%A0%ED%83%9D\" aria-label=\"최종 선택 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>최종 선택</h2>\n<p>유통사가 같은 앨범을 정정 재전송하는 요구사항(UPSERT 멱등성)이 있어서\n<strong>JDBC batchUpdate + <code class=\"language-text\">ON DUPLICATE KEY UPDATE</code></strong> 를 선택했다. 최고 속도 전략이 아니라\n<strong>요구사항을 가장 싸게 만족하는</strong> 전략이다. 순수 신규 적재만 있는 시스템이라면 SEQUENCE 가 맞다.</p>\n<p>부수 팁: MariaDB JDBC 는 <code class=\"language-text\">rewriteBatchedStatements=true</code> 로 multi-value 재작성이 가능한데,\n이때 affected rows 가 <code class=\"language-text\">SUCCESS_NO_INFO(-2)</code> 로 뭉개질 수 있다.\n반환값에 로직을 걸면 안 되는 이유이며, 이 성질은 뒤의 Kafka 멱등성 글에서 다시 등장한다.</p>\n<p>상세: <a href=\"https://github.com/Shim8934/media-project/blob/main/docs/adr/0001-batch-insert-strategy.md\">ADR-0001</a></p>\n<hr>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%9B%90%EC%9D%B8--identity-%EB%8A%94-batch-%EB%A5%BC-%EC%A1%B0%EC%9A%A9%ED%9E%88-%EB%81%88%EB%8B%A4\">원인 — IDENTITY 는 batch 를 조용히 끈다</a></li>\n<li><a href=\"#5%EA%B0%80%EC%A7%80-%EC%A0%84%EB%9E%B5%EC%9D%84-%EA%B0%99%EC%9D%80-%EC%A1%B0%EA%B1%B4%EC%97%90%EC%84%9C-%EC%B8%A1%EC%A0%95\">5가지 전략을 같은 조건에서 측정</a></li>\n<li><a href=\"#%EA%B8%B0%EA%B0%81%EB%90%9C-%EA%B0%80%EC%84%A4--%EC%9D%B4-%ED%91%9C%EC%97%90%EC%84%9C-%EC%A0%9C%EC%9D%BC-%EB%B0%B0%EC%9A%B4-%EA%B2%83\">기각된 가설 — 이 표에서 제일 배운 것</a></li>\n<li><a href=\"#%EC%B5%9C%EC%A2%85-%EC%84%A0%ED%83%9D\">최종 선택</a></li>\n</ul>\n</div>","frontmatter":{"date":"July 24, 2026","title":"음악 스트리밍 파이프라인 만들기 - 02. JPA 배치 insert, IDENTITY가 41배 느린 이유","categories":"Music_Pipeline","author":"shim8934","emoji":"🚀"},"fields":{"slug":"/Music_Pipeline_02/"}},"site":{"siteMetadata":{"siteUrl":"https://shim8934.github.io","comments":{"utterances":{"repo":"Shim8934/shim8934.github.io"}}}}},"pageContext":{"slug":"/Music_Pipeline_01/","nextSlug":"/IT엔지니어를_위한_네트워크_입문_08/","prevSlug":"/Music_Pipeline_02/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}