1. 배열(Array) 메소드
  2. 문자열(String) 메소드
  3. 숫자/수학(Number/Math) 메소드
  4. 객체(Object) 메소드
  5. Set과 Map

1. 배열(Array) 메서드

배열 추가/삭제

push() - 배열 끝에 요소 추가

let arr = [1, 2, 3];
arr.push(4);
console.log(arr);  // [1, 2, 3, 4]

pop() - 배열 끝 요소 제거 및 반환

let arr = [1, 2, 3];
let last = arr.pop();
console.log(last);  // 3
console.log(arr);   // [1, 2]

unshift() - 배열 앞에 요소 추가

let arr = [2, 3];
arr.unshift(1);
console.log(arr);  // [1, 2, 3]

shift() - 배열 앞 요소 제거 및 반환

let arr = [1, 2, 3];
let first = arr.shift();
console.log(first);  // 1
console.log(arr);    // [2, 3]


배열 변환/가공

map() - 배열 각 요소를 변환

let arr = [1, 2, 3];
let doubled = arr.map(x => x * 2);
console.log(doubled);  // [2, 4, 6]

// 객체 배열에서 특정 속성만 추출
let users = [{name: "Alice", age: 20}, {name: "Bob", age: 25}];
let names = users.map(user => user.name);
console.log(names);  // ["Alice", "Bob"]

filter() - 조건에 맞는 요소만 필터링

let arr = [1, 2, 3, 4, 5];
let even = arr.filter(x => x % 2 === 0);
console.log(even);  // [2, 4]

// 특정 조건 만족하는 객체만 추출
let users = [{name: "Alice", age: 20}, {name: "Bob", age: 17}];
let adults = users.filter(user => user.age >= 18);
console.log(adults);  // [{name: "Alice", age: 20}]

reduce() - 배열을 하나의 값으로 누적

let arr = [1, 2, 3, 4];
let sum = arr.reduce((acc, cur) => acc + cur, 0);
console.log(sum);  // 10
// 최댓값 구하기
let arr = [3, 1, 4, 1, 5];
let max = arr.reduce((acc, cur) => Math.max(acc, cur), -Infinity);
console.log(max);  // 5

// 객체로 그룹화
let fruits = ["apple", "banana", "apple", "orange", "banana"];
let count = fruits.reduce((acc, fruit) => {
  acc[fruit] = (acc[fruit] || 0) + 1;
  return acc;
}, {});
console.log(count);  // {apple: 2, banana: 2, orange: 1}

forEach() - 각 요소에 함수 실행 (반환값 없음)

let arr = [1, 2, 3];
arr.forEach(x => console.log(x * 2));
// 출력: 2, 4, 6


배열 검색

find() - 조건에 맞는 첫 번째 요소 반환

let arr = [1, 2, 3, 4];
let found = arr.find(x => x > 2);
console.log(found);  // 3

findIndex() - 조건에 맞는 첫 번째 요소의 인덱스 반환

let arr = [1, 2, 3, 4];
let idx = arr.findIndex(x => x > 2);
console.log(idx);  // 2

indexOf() - 특정 요소의 첫 인덱스 반환

let arr = [1, 2, 3, 2];
console.log(arr.indexOf(2));      // 1
console.log(arr.indexOf(5));      // -1 (없으면 -1)

includes() - 특정 요소 포함 여부 확인

let arr = [1, 2, 3];
console.log(arr.includes(2));  // true
console.log(arr.includes(5));  // false

some() - 조건에 맞는 요소가 하나라도 있으면 true

let arr = [1, 2, 3];
console.log(arr.some(x => x > 2));  // true

every() - 모든 요소가 조건에 맞아야 true

let arr = [1, 2, 3];
console.log(arr.every(x => x > 0));   // true
console.log(arr.every(x => x > 2));   // false


배열 정렬/순서

sort() - 배열 정렬 (원본 변경)

// 숫자 오름차순
let arr = [3, 1, 4, 2];
arr.sort((a, b) => a - b);
console.log(arr);  // [1, 2, 3, 4]

// 숫자 내림차순
arr.sort((a, b) => b - a);
console.log(arr);  // [4, 3, 2, 1]

// 문자열 정렬
let fruits = ["banana", "apple", "cherry"];
fruits.sort();
console.log(fruits);  // ["apple", "banana", "cherry"]

// 객체 정렬
let users = [{name: "Bob", age: 25}, {name: "Alice", age: 20}];
users.sort((a, b) => a.age - b.age);
console.log(users);  // [{name: "Alice", age: 20}, {name: "Bob", age: 25}]

reverse() - 배열 순서 뒤집기 (원본 변경)

let arr = [1, 2, 3];
arr.reverse();
console.log(arr);  // [3, 2, 1]


배열 분할/결합

slice(start, end) - 배열 일부 추출 (원본 유지)

let arr = [1, 2, 3, 4, 5];
console.log(arr.slice(1, 3));   // [2, 3]
console.log(arr.slice(2));      // [3, 4, 5]
console.log(arr.slice(-2));     // [4, 5]

splice(start, deleteCount, ...items) - 요소 삭제/추가 (원본 변경)

let arr = [1, 2, 3, 4];
arr.splice(1, 2);           // [1, 4] - 인덱스 1부터 2개 제거
arr.splice(1, 0, 'a', 'b'); // [1, 'a', 'b', 4] - 인덱스 1에 추가
arr.splice(1, 2, 'x');      // [1, 'x', 4] - 인덱스 1부터 2개 제거하고 'x' 추가

concat() - 배열 합치기

let arr1 = [1, 2];
let arr2 = [3, 4];
let result = arr1.concat(arr2);
console.log(result);  // [1, 2, 3, 4]

// 스프레드 연산자로도 가능
let result2 = [...arr1, ...arr2];
console.log(result2);  // [1, 2, 3, 4]

join(separator) - 배열을 문자열로 합침

let arr = ['Hello', 'World'];
console.log(arr.join(' '));   // "Hello World"
console.log(arr.join(''));    // "HelloWorld"
console.log(arr.join('-'));   // "Hello-World"


기타 유용한 배열 메서드

fill(value, start, end) - 배열을 특정 값으로 채움

let arr = new Array(5).fill(0);
console.log(arr);  // [0, 0, 0, 0, 0]

let arr2 = [1, 2, 3, 4, 5];
arr2.fill(0, 1, 3);
console.log(arr2);  // [1, 0, 0, 4, 5]

 

flat(depth) - 중첩 배열 평탄화

let arr = [1, [2, [3, 4]]];
console.log(arr.flat());     // [1, 2, [3, 4]]
console.log(arr.flat(2));    // [1, 2, 3, 4]
console.log(arr.flat(Infinity));  // [1, 2, 3, 4]

from() - 유사 배열/반복 가능 객체를 배열로 변환

// 문자열을 배열로
let str = "hello";
let arr = Array.from(str);
console.log(arr);  // ["h", "e", "l", "l", "o"]

// 길이가 n인 배열 생성 + 초기화
let arr2 = Array.from({length: 5}, (_, i) => i);
console.log(arr2);  // [0, 1, 2, 3, 4]


2. 문자열(String) 메서드

문자열 검색/확인

indexOf(searchValue) - 문자열에서 특정 문자열의 첫 위치 반환

let str = "Hello World";
console.log(str.indexOf("World"));  // 6
console.log(str.indexOf("x"));      // -1 (없으면 -1)

includes(searchString) - 문자열 포함 여부 확인

let str = "Hello World";
console.log(str.includes("World"));  // true
console.log(str.includes("x"));      // false

startsWith(searchString) - 특정 문자열로 시작하는지 확인

console.log("Hello".startsWith("He"));   // true
console.log("Hello".startsWith("lo"));   // false

endsWith(searchString) - 특정 문자열로 끝나는지 확인

console.log("Hello".endsWith("lo"));   // true
console.log("Hello".endsWith("He"));   // false


문자열 추출

charAt(index) - 특정 인덱스의 문자 반환

console.log("Hello".charAt(1));  // "e"
console.log("Hello"[1]);         // "e" (동일)

slice(start, end) - 문자열 일부 추출

let str = "Hello World";
console.log(str.slice(0, 5));   // "Hello"
console.log(str.slice(6));      // "World"
console.log(str.slice(-5));     // "World"

substring(start, end) - 문자열 일부 추출 (음수 불가)

let str = "Hello World";
console.log(str.substring(0, 5));  // "Hello"
console.log(str.substring(6));     // "World"

slice와 substring 차이

  • slice(): 음수 인덱스 지원 (뒤에서부터 계산)
  • substring(): 음수를 0으로 처리, 시작 부분이 끝 부분보다 크면(start > end이면) 자동으로 바꿈

문자열 변환

split(separator) - 문자열을 배열로 분할

console.log("Hello World".split(" "));    // ["Hello", "World"]
console.log("a,b,c".split(","));          // ["a", "b", "c"]
console.log("Hello".split(""));           // ["H", "e", "l", "l", "o"]

replace(searchValue, newValue) - 문자열 치환 (첫 번째만 적용)

let str = "Hello World World";
console.log(str.replace("World", "JS"));  // "Hello JS World"

replaceAll(searchValue, newValue) -일치하는 모든 문자열 치환

let str = "Hello World World";
console.log(str.replaceAll("World", "JS"));  // "Hello JS JS"

toUpperCase() - 대문자로 변환

console.log("hello".toUpperCase());  // "HELLO"

toLowerCase() - 소문자로 변환

console.log("HELLO".toLowerCase());  // "hello"

trim() - 앞뒤 공백 제거

console.log("  hello  ".trim());      // "hello"
console.log("  hello  ".trimStart()); // "hello  "
console.log("  hello  ".trimEnd());   // "  hello"

padStart(targetLength, padString) - 문자열 앞을 채움

console.log("5".padStart(3, "0"));   // "005"
console.log("day".padStart(6, "to")); // "tododay"

padEnd(targetLength, padString) - 문자열 뒤를 채움

console.log("5".padEnd(3, "0"));   // "500"


문자열 반복

repeat(count) - 문자열 반복

console.log("Ha".repeat(3));  // "HaHaHa"
console.log("*".repeat(5));   // "*****"


기타

length - 문자열 길이

console.log("Hello".length);  // 5


3. 숫자/수학(Number/Math) 메서드

숫자 변환

parseInt(string, radix) - 문자열을 정수로 변환

console.log(parseInt("123"));       // 123
console.log(parseInt("3.14"));      // 3
console.log(parseInt("1010", 2));   // 10 (2진수)
console.log(parseInt("FF", 16));    // 255 (16진수)

parseFloat(string) - 문자열을 실수로 변환

console.log(parseFloat("3.14"));    // 3.14
console.log(parseFloat("3.14abc")); // 3.14

Number(value) - 값을 숫자로 변환

console.log(Number("123"));   // 123
console.log(Number("3.14"));  // 3.14
console.log(Number("abc"));   // NaN

toString(radix) - 숫자를 문자열로 변환

console.log((10).toString());    // "10"
console.log((10).toString(2));   // "1010" (2진수)
console.log((255).toString(16)); // "ff" (16진수)

toFixed(digits) - 소수점 자릿수 고정

console.log((3.14159).toFixed(2));  // "3.14"
console.log((3).toFixed(2));        // "3.00"


Math 객체

Math.max(...values) - 최댓값 반환

console.log(Math.max(1, 2, 3));       // 3
console.log(Math.max(...[1, 2, 3]));  // 3

Math.min(...values) - 최솟값 반환

console.log(Math.min(1, 2, 3));       // 1
console.log(Math.min(...[1, 2, 3]));  // 1

Math.abs(x) - 절댓값

console.log(Math.abs(-5));   // 5
console.log(Math.abs(5));    // 5

Math.floor(x) - 내림

console.log(Math.floor(3.7));   // 3
console.log(Math.floor(-3.7));  // -4

Math.ceil(x) - 올림

console.log(Math.ceil(3.2));   // 4
console.log(Math.ceil(-3.2));  // -3

Math.round(x) - 반올림

console.log(Math.round(3.5));   // 4
console.log(Math.round(3.4));   // 3

Math.pow(base, exponent) - 거듭제곱

console.log(Math.pow(2, 3));  // 8
console.log(2 ** 3);          // 8 (동일)

Math.sqrt(x) - 제곱근

console.log(Math.sqrt(16));  // 4
console.log(Math.sqrt(2));   // 1.414...

Math.random() - 0~1 사이 난수

console.log(Math.random());  // 0.xxxxx

// 1~10 사이 랜덤 정수
let random = Math.floor(Math.random() * 10) + 1;


4. 객체(Object) 메서드

Object.keys(obj) - 객체의 키를 배열로 반환

let obj = {a: 1, b: 2, c: 3};
console.log(Object.keys(obj));  // ["a", "b", "c"]

Object.values(obj) - 객체의 값을 배열로 반환

let obj = {a: 1, b: 2, c: 3};
console.log(Object.values(obj));  // [1, 2, 3]

Object.entries(obj) - [키, 값]으로 배열 반환

let obj = {a: 1, b: 2};
console.log(Object.entries(obj));  // [["a", 1], ["b", 2]]

// 활용: 객체를 Map으로 변환
let map = new Map(Object.entries(obj));


5. Set과 Map

📍 Set (중복 제거)

// 배열 중복 제거
let arr = [1, 2, 2, 3, 3, 3];
let unique = [...new Set(arr)];
console.log(unique);  // [1, 2, 3]

// Set 메서드
let set = new Set([1, 2, 3]);
set.add(4);           // Set {1, 2, 3, 4}
set.delete(2);        // Set {1, 3, 4}
set.has(3);           // true
set.size;             // 3
set.clear();          // Set {}


📍 Map (키-값 쌍 저장)

let map = new Map();
map.set('name', 'Alice');
map.set('age', 20);

console.log(map.get('name'));  // "Alice"
console.log(map.has('age'));   // true
console.log(map.size);         // 2

map.delete('age');
console.log(map.size);         // 1

// 순회
for (let [key, value] of map) {
  console.log(`${key}: ${value}`);
}


6. 팁

배열 초기화

// 길이 n인 배열, 모두 0으로 초기화
let arr = new Array(5).fill(0);  // [0, 0, 0, 0, 0]

// 0부터 n-1까지 배열
let arr2 = Array.from({length: 5}, (_, i) => i);  // [0, 1, 2, 3, 4]

// 1부터 n까지 배열
let arr3 = Array.from({length: 5}, (_, i) => i + 1);  // [1, 2, 3, 4, 5]


2차원 배열 초기화

// n x m 배열 생성
let n = 3, m = 4;
let arr = Array.from({length: n}, () => Array(m).fill(0));
console.log(arr);
// [[0,0,0,0], [0,0,0,0], [0,0,0,0]]


배열 복사

// 얕은 복사
let arr = [1, 2, 3];
let copy1 = [...arr];
let copy2 = arr.slice();
let copy3 = Array.from(arr);

// 깊은 복사 (중첩 배열/객체)
let deepCopy = JSON.parse(JSON.stringify(arr));


최댓값/최솟값 구하기

let arr = [3, 1, 4, 1, 5];

// Math 사용
let max = Math.max(...arr);  // 5
let min = Math.min(...arr);  // 1

// reduce 사용
let max2 = arr.reduce((a, b) => Math.max(a, b));
let min2 = arr.reduce((a, b) => Math.min(a, b));


배열 합계

let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce((acc, cur) => acc + cur, 0);  // 15


배열 평탄화

let arr = [[1, 2], [3, 4], [5]];
let flattened = arr.flat();  // [1, 2, 3, 4, 5]

// 또는
let flattened2 = [].concat(...arr);  // [1, 2, 3, 4, 5]


문자열, 배열 변환

// 문자열 → 배열
let str = "hello";
let arr = str.split('');     // ["h", "e", "l", "l", "o"]
let arr2 = [...str];         // ["h", "e", "l", "l", "o"]
let arr3 = Array.from(str);  // ["h", "e", "l", "l", "o"]

// 배열 → 문자열
let arr = ["h", "e", "l", "l", "o"];
let str = arr.join('');  // "hello"


숫자, 문자열 변환

// 숫자 → 문자열
let num = 123;
let str1 = String(num);      // "123"
let str2 = num.toString();   // "123"
let str3 = num + '';         // "123"

// 문자열 → 숫자
let str = "123";
let num1 = Number(str);      // 123
let num2 = parseInt(str);    // 123
let num3 = +str;             // 123


조건부 카운팅

let arr = [1, 2, 3, 4, 5];
let count = arr.filter(x => x > 2).length;  // 3


빈도수 세기

let arr = ["apple", "banana", "apple", "orange", "banana"];
let freq = arr.reduce((acc, cur) => {
  acc[cur] = (acc[cur] || 0) + 1;
  return acc;
}, {});
console.log(freq);  // {apple: 2, banana: 2, orange: 1}


정리

이 글에서 정리한 메소드들은 자바스크립트에서 자주 사용되는 핵심 메서드들입니다.
각 메서드의 시간 복잡도와 특징을 이해하는 것이 중요합니다.

특히 map, filter, reduce 같은 고차 함수와 slice, splice, sort 같은 배열 조작 메소드는 중요합니다.

 

  • 원본을 변경하는 메서드: push, pop, shift, unshift, splice, sort, reverse, fill
  • 새 배열/문자열을 반환하는 메서드: map, filter, slice, concat, split, join
728x90

'Javascript' 카테고리의 다른 글

Map Method(맵 메소드)  (1) 2025.02.05
호출 스케줄링(scheduling a call)  (0) 2025.02.04
연산자, 약식연산자와 값 유형  (2) 2024.12.26
함수(Function)  (0) 2024.12.25
객체 레터럴  (0) 2024.12.24

라우팅은 패킷을 출발지에서 목적지까지 전달하는 과정이며, 이 역할을 수행하는 장비가 라우터입니다. 라우터는 목적지로 가는 최적의 경로를 결정하고 해당 경로로 패킷을 전달하는 기능을 담당합니다.

  • 라우팅 테이블(Routing Table)
    라우터가 경로를 결정할 때 참조하는 지도와 같은 역할을 합니다. 라우팅 테이블에는 목적지 네트워크, 해당 목적지로 가기 위한 다음 홉(Next-hop) 라우터의 주소, 사용할 출력 인터페이스, 경로의 우선순위 등의 정보가 기록됩니다.
  • 경로 결정 방법
    1. 정적 라우팅(Static Routing) : 네트워크 관리자가 모든 경로 정보를 라우터에 수동으로 직접 입력하는 방식입니다. 설정이 단순하고 예측 가능하지만, 네트워크 구조가 변경될 때마다 관리자가 직접 수정해야 하는 단점이 있습니다.
    2. 동적 라우팅(Dynamic Routing) : 라우터들이 라우팅 프로토콜을 이용하여 서로 경로 정보를 교환하고, 이를 바탕으로 라우팅 테이블을 자동으로 생성하고 갱신하는 방식입니다. 네트워크 변화에 능동적으로 대처할 수 있어 대규모 네트워크에 적합합니다.
  • 라우팅 메트릭(Routing Metric)
    동적 라우팅에서 최적의 경로를 선택하는 기준이 되는 값입니다. 라우팅 프로토콜마다 사용하는 메트릭이 다르며, 값이 작을수록 더 좋은 경로로 판단합니다.
    • 주요 메트릭: 홉 카운트(거쳐가는 라우터 수), 대역폭(Bandwidth), 지연(Delay), 신뢰성(Reliability) 등
  • 관리 거리(Administrative Distance, AD)
    하나의 목적지에 대해 여러 다른 라우팅 프로토콜로부터 경로 정보를 학습했을 때, 어떤 프로토콜의 정보를 더 신뢰할지 결정하는 기준값입니다. 값이 낮을수록 신뢰도가 높습니다. (예: 직접 연결된 경로 AD=0, 정적 경로 AD=1, RIP AD=120)

2. 라우팅 알고리즘의 종류

동적 라우팅 프로토콜은 크게 두 가지 알고리즘으로 분류됩니다.

  1. 거리 벡터 알고리즘 (Distance Vector)
    • 거리(얼마나 먼가)와 방향(어느 쪽으로 가야 하는가) 정보만을 기반으로 경로를 결정합니다.
    • 자신의 전체 라우팅 테이블을 주기적으로 이웃 라우터와 교환하는 방식으로 동작합니다.
    • 대표적인 프로토콜 : RIP (Routing Information Protocol)
  2. 링크 상태 알고리즘 (Link State)
    • 네트워크의 전체 토폴로지(지도) 정보를 수집한 후, SPF(Shortest Path First) 알고리즘을 사용하여 출발지부터 모든 목적지까지의 최단 경로 트리를 계산합니다.
    • 네트워크 변화가 있을 때만 해당 링크의 상태 정보만을 모든 라우터에 전파합니다.
    • 대표적인 프로토콜: OSPF (Open Shortest Path First)

정적 경로(Static Route) 설정

정적 경로는 소규모 네트워크나 보안이 중요한 특정 경로, 그리고 외부로 나가는 경로가 하나뿐인 **스텁 네트워크(Stub Network)**에서 유용하게 사용됩니다.

  • 설정 명령어 : 전역 설정 모드에서 다음 명령어를 사용합니다.
        ip route [목적지 네트워크 주소] [서브넷 마스크] [다음 홉 주소 또는 출력 인터페이스]
  • 기본 경로(Default Route)  : 라우팅 테이블에 없는 모든 목적지로 가는 패킷을 처리하기 위한 경로입니다. 주로 인터넷으로 나가는 관문에 설정합니다.
        ip route 0.0.0.0 0.0.0.0 [다음 홉 주소 또는 출력 인터페이스]
  • 검증 : show ip route static 명령어로 설정된 정적 경로를 확인할 수 있습니다.

RIP(Routing Information Protocol) 설정

RIP는 가장 오래되고 단순한 동적 라우팅 프로토콜 중 하나로, 거리 벡터 알고리즘을 사용합니다.

  • RIP의 특징
    • 메트릭 : 홉 카운트(Hop Count)를 사용하며, 최대 15홉까지만 인식합니다.
    • 업데이트 : 30초마다 자신의 라우팅 테이블 전체를 브로드캐스트합니다.
    • 버전 : RIPv1(클래스풀)과 RIPv2(클래스리스)가 있으며, 서브넷 마스크 정보를 함께 전송하는 RIPv2 사용이 권장됩니다.
  • 설정 과정 (2단계)
    1. 라우팅 프로세스 활성화 : 전역 설정 모드에서 라우팅 프로토콜로 RIP를 선택합니다.
          router rip
      version 2  // RIPv2 사용 설정
    2. 참여할 네트워크 선언: RIP 프로세스가 동작할, 즉 라우팅 정보를 교환할 자신의 인터페이스가 속한 네트워크를 선언합니다. 클래스풀 주소(A, B, C 클래스) 기준으로 입력합니다.
    3. Code
          network [네트워크 주소]
  • 검증 및 장애 처리
    • 검증 : show ip protocols로 RIP 설정 상태를, show ip route로 학습된 경로(R로 표시됨)를 확인합니다.
    • 장애 처리 : debug ip rip 명령어를 사용하면 라우팅 업데이트 메시지가 송수신되는 과정을 실시간으로 볼 수 있어 문제 해결에 도움이 됩니다. (CPU 부하가 높으므로 주의해서 사용해야 합니다.)
728x90

네트워크 장비에서 발생하는 중요한 이벤트(인터페이스 UP/DOWN, 설정 변경 등)를 기록하고 관리하기 위해 Syslog를 이용합니다. Syslog는 로그 메시지를 생성, 수집하여 중앙 서버에 저장하는 표준 프로토콜입니다.

  • 로그 메시지 전달 방법
    1. 콘솔 : 기본적으로 활성화되어 있습니다. 콘솔에 직접 연결된 사용자에게 실시간 로그를 보여줍니다.
    2. RAM 버퍼 : 라우터 내부 메모리에 로그를 임시 저장합니다. show logging 명령어로 확인할 수 있습니다.
    3. 원격 Syslog 서버 : 별도의 서버에 로그를 UDP를 통해 전송하여 영구적으로 보관합니다. 안정적인 로그 관리를 위해 권장되는 방식입니다.
    4. 터미널 라인 : Telnet이나 SSH로 원격 접속한 사용자에게 로그를 보여줍니다. (terminal monitor 명령어 필요)
  • 로그 메시지 형식과 중요도
    • 로그 메시지는 시간 정보(Timestamp), 발생 장치, 중요도 등급(Severity Level), 설명 등으로 구성됩니다.
    • 중요도 등급은 0(Emergency)부터 7(Debug)까지 8단계로 나뉘며, 숫자가 낮을수록 심각한 이벤트를 의미합니다. 관리자는 특정 등급 이상의 로그만 수신하도록 설정할 수 있습니다.

시간 동기화 (NTP)

여러 장비에서 발생한 로그의 시간 순서를 정확히 파악해야 원인 규명이 가능하므로, 정확한 시간 정보는 네트워크 장애 분석에 중요합니다.  NTP(Network Time Protocol)는 네트워크에 연결된 모든 장비의 시계를 기준 시계(Time Server)와 정확하게 동기화하는 프로토콜입니다.

  • NTP 설정
    • 장비는 NTP 서버(시간을 제공), NTP 클라이언트(시간을 수신), 또는 두 역할을 모두 수행하는 클라이언트/서버 모드로 동작할 수 있습니다.
    • 클라이언트는 ntp server [서버 IP 주소] 명령어를 사용하여 지정된 서버로부터 시간 정보를 받아옵니다.
    • 신뢰할 수 있는 시간 소스를 가진 라우터는 ntp master [계층 순위] 명령어로 NTP 서버 역할을 수행할 수 있습니다.

이웃 장비 탐색 (CDP와 LLDP)

네트워크 관리자는 물리적으로 직접 연결된 이웃 장비의 정보를 파악해야 할 때가 많으며, 이때 장비 탐색 프로토콜을 사용합니다.입니다.

  • CDP (Cisco Discovery Protocol)
    • 시스코 전용 프로토콜로, 데이터링크 계층(2계층)에서 동작합니다.
    • 부팅 시 자동으로 실행되며, 직접 연결된 다른 시스코 장비의 호스트 이름, IP 주소, 장비 모델, 연결된 포트 정보 등을 주기적으로 교환합니다.
    • show cdp neighbors 명령어로 이웃 장비의 요약 정보를, show cdp neighbors detail로 상세 정보를 확인할 수 있습니다.
  • LLDP (Link Layer Discovery Protocol)
    • CDP와 유사한 기능을 수행하는 국제 표준(IEEE 802.1AB) 프로토콜입니다.
    • 시스코 장비뿐만 아니라 다양한 제조사의 장비와 정보를 교환할 수 있다는 장점이 있습니다.
    • 명령어는 CDP와 거의 동일하며, show lldp neighbors 등으로 정보를 확인할 수 있습니다.

원격 장비 접속 및 관리

관리자는 물리적으로 멀리 떨어진 장비에 원격으로 접속하여 설정하고 관리할 수 있습니다.

  • Telnet : 가장 기본적인 원격 접속 방법이지만, 모든 통신 내용이 암호화되지 않은 평문(Plaintext)으로 전송되어 보안에 매우 취약합니다.
  • SSH (Secure Shell) : Telnet과 동일한 기능을 제공하지만, 모든 통신 내용을 암호화(Ciphertext)하여 보안이 뛰어납니다. 외부 네트워크에서의 원격 접속 시 SSH 사용이 권장됩니다.
  • Telnet 세션 관리 : 하나의 장비에서 여러 원격 장비로 동시에 Telnet 세션을 열고 관리할 수 있습니다. Ctrl+Shift+6 -> X 키를 눌러 현재 세션을 대기 상태로 전환하고 다른 작업을 할 수 있으며, resume 명령어로 대기 중인 세션에 다시 연결할 수 있습니다.
  • 연결 상태 확인
    • ping : 특정 IP 주소를 가진 목적지 장비와의 네트워크 연결이 정상적인지 확인하는 가장 기본적인 도구입니다. ICMP Echo 메시지를 사용합니다.
    • traceroute : 목적지까지 도달하는 동안 거쳐가는 모든 라우터의 경로와 각 구간의 응답 시간을 보여줍니다. 네트워크 경로상의 문제점을 파악하는 데 유용합니다.
728x90

'네트워크' 카테고리의 다른 글

시스코 라우터의 설정과 관리  (0) 2025.10.27
시스코 라우터와 IOS  (0) 2025.10.24
이더넷 LAN이란?  (0) 2025.09.29
컴퓨터 네트워크  (0) 2025.09.28