사진: Unsplash의 Mārtiņš Zemlickis

1. 🎬 클로저의 개념 이해하기

클로저를 설명하기 전에, 먼저 '함수'와 '스코프'에 대한 기본 개념을 살펴보는 것이 좋겠습니다.

함수란 무엇인가?

함수는 특정 작업을 수행하기 위해 설계된 코드 블록입니다. 쉽게 말해, 함수는 입력을 받아 처리한 후 결과를 반환하는 기계와 같습니다.

function add(a, b) {
  return a + b;
}

console.log(add(5, 3)); // 출력: 8

스코프란 무엇인가?

스코프(Scope)는 변수의 유효 범위를 말합니다. 자바스크립트에서는 크게 전역 스코프와 함수 스코프로 나뉩니다.

let globalVar = "전역 변수"; // 전역 스코프

function exampleFunction() {
  let localVar = "지역 변수"; // 함수 스코프
  console.log(globalVar);    // 전역 변수 접근 가능
  console.log(localVar);     // 지역 변수 접근 가능
}

exampleFunction();
console.log(globalVar);     // 전역 변수 접근 가능
// console.log(localVar);   // 오류! 함수 외부에서 지역 변수 접근 불가

클로저의 정의

이제 클로저에 대해 알아볼까요? 클로저는 함수와 그 함수가 선언된 렉시컬 환경의 조합입니다. 쉽게 말해, 클로저는 함수가 자신이 생성된 환경(스코프)를 기억하고 접근할 수 있는 메커니즘입니다.

간단한 예를 살펴봅시다:

function makeCounter() {
  let count = 0; // 외부 함수의 지역 변수
  
  return function() {
    return count++; // 내부 함수가 외부 함수의 변수에 접근
  };
}

const counter = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2

여기서 makeCounter 함수는 내부 함수를 반환합니다. 이 내부 함수는 makeCounter 함수의 지역 변수 count에 접근하고 있습니다. 일반적으로 함수가 종료되면 그 함수의 지역 변수는 사라지지만, 클로저 덕분에 내부 함수는 count 변수를 계속 기억하고 접근할 수 있습니다.

 

2. 💻 클로저와 콜 스택의 관계

자바스크립트 엔진은 코드를 실행할 때 '콜 스택'이라는 자료구조를 사용합니다. 콜 스택은 함수 호출을 추적하는데, 함수가 호출되면 스택에 추가(push)되고, 함수 실행이 완료되면 스택에서 제거(pop)됩니다.

그렇다면 클로저는 이 콜 스택과 어떤 관계가 있을까요?

function outer() {
  let outerVar = "나는 외부 변수";
  
  function inner() {
    console.log(outerVar); // 외부 함수의 변수를 참조
  }
  
  return inner;
}

const myInner = outer();
// outer 함수는 실행을 마치고 콜 스택에서 제거됨

myInner(); // "나는 외부 변수" 출력
// 그런데 어떻게 외부 함수의 변수에 여전히 접근할 수 있을까?

외부 함수 outer가 실행을 마치고 콜 스택에서 제거된 후에도, 반환된 내부 함수 inner는 여전히 outerVar에 접근할 수 있습니다. 이것이 바로 클로저의 마법입니다!

자바스크립트 엔진은 함수가 다른 함수 내에서 정의되고, 외부 함수의 변수를 참조하는 것을 감지하면, 해당 변수를 특별한 메모리 공간(클로저)에 저장합니다. 그래서 외부 함수가 이미 실행을 마쳤더라도, 내부 함수는 이 클로저를 통해 외부 함수의 변수에 계속 접근할 수 있습니다.

 

3. 🧠 클로저의 개념 이해하기

클로저는 추상적인 개념이라 이해하기 어려울 수 있습니다. 그래서 실생활의 비유를 통해 설명해 보겠습니다.

클로저는 마치 가방 같은 것입니다

함수가 생성될 때, 그 함수는 자신만의 '가방'을 받습니다. 이 가방 안에는 함수가 접근할 수 있는 모든 변수가 들어 있습니다. 함수가 다른 곳으로 이동하더라도(예: 반환되거나 변수에 할당됨), 이 가방을 계속 가지고 다닙니다.

function createPet(name) {
  // 'name'은 createPet 함수의 지역 변수입니다.
  
  return {
    getName: function() {
      return name; // 내부 함수가 'name' 변수에 접근
    },
    setName: function(newName) {
      name = newName; // 내부 함수가 'name' 변수를 수정
    }
  };
}

const myPet = createPet("멍멍이");
console.log(myPet.getName()); // "멍멍이"
myPet.setName("야옹이");
console.log(myPet.getName()); // "야옹이"

여기서 getName과 setName 함수는 둘 다 createPet 함수의 name 변수에 접근할 수 있습니다. 이 두 함수는 같은 '가방'(클로저)을 공유하기 때문에, 한 함수에서 변수를 수정하면 다른 함수에서도 그 변화를 볼 수 있습니다.

 

4. ✨ 클로저의 작용 원리

클로저가 어떻게 작동하는지 더 깊이 이해하기 위해, 자바스크립트 엔진의 내부 동작을 살펴보겠습니다.

렉시컬 환경(Lexical Environment)

자바스크립트 엔진은 코드를 실행할 때 '렉시컬 환경'이라는 것을 생성합니다. 이 환경은 두 부분으로 구성됩니다:

  1. 환경 레코드(Environment Record): 현재 환경의 변수와 함수를 저장
  2. 외부 환경 참조(Outer Environment Reference): 외부 렉시컬 환경에 대한 참조
function makeAdder(x) {
  // makeAdder의 렉시컬 환경: { x: 5 }
  
  return function(y) {
    // 내부 함수의 렉시컬 환경: { y: 3 }
    // 외부 환경 참조 -> makeAdder의 렉시컬 환경
    return x + y;
  };
}

const add5 = makeAdder(5);
console.log(add5(3)); // 8

여기서 add5는 내부 함수를 참조하고, 이 내부 함수는 makeAdder의 렉시컬 환경에 대한 참조를 유지합니다. 그래서 add5(3)을 호출할 때, 내부 함수는 자신의 렉시컬 환경에서 y의 값(3)을 찾고, 외부 환경(makeAdder의 렉시컬 환경)에서 x의 값(5)을 찾아 이들을 더합니다.

클로저와 가비지 컬렉션

일반적으로 함수 실행이 끝나면, 그 함수의 렉시컬 환경은 가비지 컬렉터에 의해 메모리에서 제거됩니다. 하지만 클로저가 있는 경우, 내부 함수가 외부 함수의 환경을 참조하고 있기 때문에, 외부 함수의 환경은 계속 메모리에 남아 있게 됩니다.

function heavyComputation() {
  const bigData = new Array(1000000).fill('데이터');
  
  return function() {
    console.log("데이터 크기:", bigData.length);
  };
}

const showDataSize = heavyComputation();
// heavyComputation은 실행을 마쳤지만, bigData는 메모리에 남아 있음

showDataSize(); // "데이터 크기: 1000000" 출력

이 예제에서 bigData 변수는 큰 메모리를 차지합니다. heavyComputation 함수가 실행을 마쳐도, 반환된 내부 함수가 bigData를 참조하고 있기 때문에, bigData는 가비지 컬렉션되지 않습니다. 이것은 메모리 누수의 원인이 될 수 있으므로, 클로저를 사용할 때는 주의가 필요합니다.

 

5. 🏷️ 렉시컬 스코핑과 클로저의 개념

렉시컬 스코핑(Lexical Scoping)은 함수를 어디서 선언했는지에 따라 상위 스코프가 결정되는 것을 말합니다. 이는 클로저의 핵심 개념입니다.

동적 스코핑 vs 렉시컬 스코핑

  • 동적 스코핑: 함수를 어디서 호출했는지에 따라 상위 스코프가 결정
  • 렉시컬 스코핑: 함수를 어디서 선언했는지에 따라 상위 스코프가 결정

자바스크립트는 렉시컬 스코핑을 사용합니다. 다음 예제를 살펴봅시다:

let name = "전역";

function printName() {
  console.log(name);
}

function outerFunction() {
  let name = "외부";
  printName();
}

outerFunction(); // "전역" 출력 (렉시컬 스코핑)
// 동적 스코핑이었다면 "외부"가 출력됐을 것입니다.

여기서 printName 함수는 전역 스코프에서 선언되었기 때문에, 전역 변수 name을 참조합니다. outerFunction 내부에서 호출되었더라도, printName의 상위 스코프는 전역 스코프입니다.

클로저와 렉시컬 스코핑의 관계

클로저는 렉시컬 스코핑을 기반으로 합니다. 내부 함수는 자신이 선언된 환경(외부 함수의 렉시컬 환경)을 기억합니다.

function outerFunction() {
  let outerVar = "외부 변수";
  
  function innerFunction() {
    let innerVar = "내부 변수";
    console.log(outerVar); // 외부 함수의 변수에 접근
  }
  
  return innerFunction;
}

const inner = outerFunction();
inner(); // "외부 변수" 출력

이 예제에서 innerFunction은 자신이 선언된 렉시컬 환경(outerFunction 내부)을 기억하고, 그 환경에 있는 outerVar 변수에 접근할 수 있습니다.

 

6. 📚 클로저의 활용과 장점

클로저는 다양한 프로그래밍 패턴에서 활용될 수 있으며, 몇 가지 중요한 장점을 제공합니다.

1. 데이터 은닉과 캡슐화

클로저를 사용하면 변수를 함수 외부에서 직접 접근할 수 없게 만들 수 있습니다. 이를 통해 정보 은닉과 캡슐화를 구현할 수 있습니다.

function createBankAccount(initialBalance) {
  let balance = initialBalance; // 외부에서 직접 접근 불가능한 변수
  
  return {
    deposit: function(amount) {
      balance += amount;
      return balance;
    },
    withdraw: function(amount) {
      if (amount > balance) {
        console.log("잔액 부족!");
        return balance;
      }
      balance -= amount;
      return balance;
    },
    getBalance: function() {
      return balance;
    }
  };
}

const myAccount = createBankAccount(1000);
console.log(myAccount.getBalance()); // 1000
myAccount.deposit(500);
console.log(myAccount.getBalance()); // 1500
myAccount.withdraw(2000); // "잔액 부족!"
console.log(myAccount.getBalance()); // 1500
// console.log(myAccount.balance); // undefined - balance 변수는 직접 접근 불가능

이 예제에서 balance 변수는 외부에서 직접 접근할 수 없고, 오직 제공된 메서드(deposit, withdraw, getBalance)를 통해서만 접근할 수 있습니다. 이렇게 하면 데이터의 무결성을 유지하고, 잘못된 조작을 방지할 수 있습니다.

2. 함수 팩토리 생성

클로저를 활용하면 특정 기능을 가진 함수를 생성하는 팩토리 함수를 만들 수 있습니다.

function multiplyFactory(factor) {
  return function(number) {
    return number * factor;
  };
}

const double = multiplyFactory(2);
const triple = multiplyFactory(3);

console.log(double(5)); // 10
console.log(triple(5)); // 15

이 예제에서 multiplyFactory는 인자로 받은 factor를 기억하는 새로운 함수를 반환합니다. 이렇게 생성된 함수(double, triple)는 각각 다른 factor 값을 기억하고 있습니다.

3. 모듈 패턴 구현

클로저를 사용하면 자바스크립트에서 모듈 패턴을 구현할 수 있습니다. 모듈 패턴은 관련된 기능을 하나의 단위로 묶고, 필요한 부분만 외부에 노출시키는 패턴입니다.

const calculator = (function() {
  let result = 0;
  
  // 비공개 함수
  function validate(n) {
    return typeof n === 'number';
  }
  
  return {
    add: function(n) {
      if (validate(n)) {
        result += n;
      }
      return this;
    },
    subtract: function(n) {
      if (validate(n)) {
        result -= n;
      }
      return this;
    },
    getResult: function() {
      return result;
    }
  };
})();

calculator.add(5).subtract(2);
console.log(calculator.getResult()); // 3
// console.log(calculator.result); // undefined - 직접 접근 불가
// calculator.validate(5); // 오류 - 비공개 함수는 외부에서 호출 불가

이 예제에서는 즉시 실행 함수(IIFE)를 사용하여 모듈을 생성했습니다. 모듈 내부의 result 변수와 validate 함수는 외부에서 접근할 수 없고, 오직 반환된 객체의 메서드(add, subtract, getResult)를 통해서만 상호작용할 수 있습니다.

4. 비동기 프로그래밍

클로저는 비동기 프로그래밍에서도 유용하게 사용됩니다. 콜백 함수가 이전 상태의 값을 기억해야 할 때 클로저가 활용됩니다.

function fetchData(url) {
  // 시작 시간을 기록
  const startTime = new Date().getTime();
  
  // 비동기 요청
  fetch(url)
    .then(response => response.json())
    .then(data => {
      // 완료 시간을 계산
      const endTime = new Date().getTime();
      const duration = endTime - startTime;
      
      // 클로저를 통해 startTime 변수에 접근
      console.log(`데이터를 가져오는 데 ${duration}ms가 소요되었습니다.`);
      console.log(data);
    });
}

fetchData("https://api.example.com/data");

이 예제에서 .then에 전달된 콜백 함수는 startTime 변수를 클로저를 통해 기억합니다. 비동기 요청이 완료되어 콜백이 실행될 때, 이전에 기록한 시작 시간에 접근할 수 있습니다.

 

정리

클로저는 자바스크립트의 강력한 기능 중 하나로, 함수가 자신이 생성된 환경을 기억하고 접근할 수 있게 해줍니다. 클로저를 이해하고 활용하면 다음과 같은 이점을 얻을 수 있습니다:

  1. 데이터 은닉과 캡슐화: 변수를 외부에서 직접 접근할 수 없게 보호
  2. 상태 유지: 함수가 이전 상태 값을 기억하고 접근
  3. 모듈화: 관련된 기능을 하나의 단위로 묶고, 필요한 부분만 노출
  4. 함수 팩토리: 특정 동작을 수행하는 함수를 생성
  5. 비동기 프로그래밍: 콜백 함수에서 이전 상태 값 접근

클로저는 처음에는 이해하기 어려울 수 있지만, 일단 익숙해지면 자바스크립트에서 가장 유용하고 강력한 도구 중 하나가 됩니다. 꾸준한 연습과 실험을 통해 클로저의 개념을 완전히 자신의 것으로 만들어 보세요!

728x90

01-1 컴퓨터 네트워크를 알아야 하는 이유

  • 네트워크의 네트워크, 인터넷
    • 전 세계의 컴퓨터들이 서로 연결되어 통신할 수 있는 거대한 네트워크
    • TCP/IP 프로토콜을 기반으로 한 통신망
    • 정보 공유와 통신을 가능하게 하는 핵심 인프라
  • 개발자가 컴퓨터 네트워크를 알아야 하는 이유
    • 프로그램을 만드는 업무에서 네트워크 지식을 활용하는 경우
      • 웹 애플리케이션 개발
      • API 통신 구현
      • 데이터베이스 연동
      • 분산 시스템 구축
    • 프로그램을 유지 보수하는 업무에서 네트워크 지식을 활용하는 경우
      • 성능 최적화
      • 네트워크 오류 디버깅
      • 보안 취약점 분석
      • 트래픽 모니터링

01-2 네트워크 거시적으로 살펴보기

  • 네트워크의 기본 구조
    1. 호스트 (Host):
      • 설명: 네트워크에 연결된 모든 컴퓨터 장치를 의미합니다. 주로 서버와 클라이언트
      • 서버: 데이터를 저장하고 네트워크를 통해 다른 컴퓨터에 서비스나 자원을 제공하는 컴퓨터. 예를 들어, 웹 서버는 웹 페이지를 호스팅하고, 파일 서버는 파일을 저장합니다.
      • 클라이언트: 서버의 자원을 사용하거나 서비스를 요청하는 컴퓨터. 일반 사용자들이 사용하는 PC, 스마트폰 등이 여기에 해당됩니다.
    2. 네트워크 장비 (Network Devices):
      • 라우터 (Router): 서로 다른 네트워크 간의 데이터 패킷을 전달하고, 최적의 경로를 찾아주는 장치. 인터넷 연결을 가능하게 합니다.
      • 스위치 (Switch): 네트워크 내의 여러 장치를 연결하고, 데이터 패킷을 올바른 목적지로 전송합니다. LAN(Local Area Network)에서 주로 사용됩니다.
      • 허브 (Hub): 네트워크 장치들을 연결하는 기본 장치로, 데이터를 모든 포트로 전송하여 네트워크 트래픽이 많아질 수 있습니다. 스위치보다 비효율적입니다.
    3. 통신 매체 (Transmission Medium):
      • 유선 (Wired):
        • 이더넷 케이블 (Ethernet Cable): 가장 일반적인 유선 네트워크 매체로, 데이터를 전기 신호를 통해 전송합니다. 안정적이고 빠른 속도를 제공합니다.
        • 광섬유 케이블 (Fiber Optic Cable): 빛을 통해 데이터를 전송하며, 매우 빠른 속도와 긴 전송 거리를 제공합니다.
      • 무선 (Wireless):
        • Wi-Fi: 무선 네트워크 기술로, 라우터를 통해 무선 신호를 전송하여 장치들이 네트워크에 연결됩니다. 케이블 없이도 편리하게 사용 가능합니다.
        • Bluetooth: 단거리 무선 통신 기술로, 주로 주변기기 연결에 사용됩니다.
    4. 메시지 (Message):
      • 설명: 네트워크에서 전송되는 데이터 단위입니다. 패킷이라는 작은 단위로 쪼개져 전송되며, 최종적으로 재조합되어 사용자에게 전달됩니다.
      • 패킷 (Packet): 데이터가 전송되는 기본 단위로, 헤더와 페이로드로 구성됩니다. 헤더는 목적지와 출발지 주소를 포함하고, 페이로드는 실제 전송 데이터입니다.
      • 프레임 (Frame): 패킷을 포함한 데이터 링크 계층에서의 데이터 단위로, 물리적 네트워크에서 전송됩니다.
  • 범위에 따른 네트워크 분류
    • 설명: LAN은 물리적으로 가까운 위치에 있는 컴퓨터와 장치들이 연결된 네트워크입니다. 보통 한 건물 내 혹은 근처 여러 건물로 이루어진 작은 지역을 커버합니다.
    • 특징:
      • 한정된 공간: 학교, 사무실, 공장, 또는 캠퍼스와 같은 작은 지리적 범위에서 사용됩니다.
      • 높은 속도: 네트워크 속도가 매우 빠르며, 일반적으로 1Gbps 또는 그 이상의 속도를 지원합니다.
      • 낮은 오류율: 신호의 전송 거리가 짧고, 데이터 손실이 적습니다.
    • 예시: 학교 네트워크, 회사 내부 네트워크, 집안의 Wi-Fi 네트워크.
    WAN (Wide Area Network: 광역 통신망)
    • 설명: WAN은 넓은 지리적 범위에 걸쳐 있는 네트워크로, 서로 떨어진 위치에 있는 여러 LAN을 연결합니다. 이 네트워크는 전 세계에 걸쳐 있을 수 있습니다.
    • 특징:
      • 넓은 지역: 국가나 대륙을 포함하는 넓은 범위에서 사용됩니다.
      • 인터넷 연결: 인터넷 서비스 제공업체(ISP)를 통해 네트워크를 연결합니다. WAN은 다양한 통신 기술을 사용하여 데이터를 전송합니다.
      • 속도와 신뢰성: WAN의 속도는 ISP와 사용 기술에 따라 다르며, 신뢰성을 보장하기 위해 다양한 프로토콜을 사용합니다.
    • 예시: 인터넷, 기업의 국제 네트워크, 대규모 통신망.
  • LAN (Local Area Network: 근거리 통신망)
  • 메시지 교환 방식에 따른 네트워크 분류
    1. 회선 교환 방식 (Circuit Switching):
      • 설명: 통신을 시작하기 전에 두 지점 사이에 전용 통신 경로를 설정합니다. 이 경로는 통신이 끝날 때까지 유지되며, 다른 통신이 동일한 경로를 사용할 수 없습니다.
      • 특징: 고정 대역폭을 보장하고, 실시간 통신에 적합합니다. 예를 들어, 전화망이 대표적입니다.
      • 장점: 전용 경로로 인해 안정적인 연결과 낮은 지연 시간.
      • 단점: 비효율적 자원 사용, 사용되지 않는 동안에도 경로가 점유됨.
    2. 패킷 교환 방식 (Packet Switching):
      • 설명: 데이터를 작은 단위인 패킷으로 나누어 전송합니다. 각 패킷은 독립적으로 목적지로 전송되며, 최종 목적지에서 다시 조립됩니다.
      • 특징: 네트워크 자원을 효율적으로 사용하며, 각 패킷이 독립적인 경로로 전송될 수 있습니다. 인터넷이 대표적인 예입니다.
      • 장점: 효율적인 대역폭 사용, 동적 라우팅으로 안정성 증가.
      • 단점: 지연이 발생할 수 있으며, 실시간 통신에는 덜 적합할 수 있음.
  • 주소와 송수신지 유형에 따른 전송 방식
    1. 유니캐스트 (Unicast):
      • 설명: 1대1 통신 방식으로, 하나의 송신자가 하나의 수신자에게 데이터를 전송합니다.
      • 특징: 대부분의 일반적인 인터넷 통신 (예: 웹 브라우징, 이메일 등)이 유니캐스트 방식입니다.
      • 장점: 정확하고 개인화된 데이터 전송.
      • 단점: 많은 수신자에게 데이터를 전송할 때 비효율적.
    2. 브로드캐스트 (Broadcast):
      • 설명: 1대 다수 통신 방식으로, 하나의 송신자가 네트워크에 연결된 모든 장치에 데이터를 전송합니다.
      • 특징: 주로 로컬 네트워크(LAN)에서 사용됩니다. 모든 장치가 데이터를 수신합니다.
      • 장점: 네트워크의 모든 장치에게 동시에 정보를 전달.
      • 단점: 네트워크 트래픽 증가 및 효율성 저하.
    3. 멀티캐스트 (Multicast):
      • 설명: 1대 그룹 통신 방식으로, 하나의 송신자가 특정 그룹의 장치에만 데이터를 전송합니다.
      • 특징: 실시간 스트리밍, 온라인 회의 등에서 자주 사용됩니다.
      • 장점: 특정 그룹의 수신자들에게만 데이터를 전송하여 대역폭을 절약.
      • 단점: 네트워크와 장치의 멀티캐스트 지원 필요.

01-3 네트워크 미시적으로 살펴보기

  • 프로토콜: 네트워크 통신 규칙
  • 네트워크 참조 모델
    • OSI 모델
      • 7계층 구조
        • 물리 계층: 실제 물리적 연결을 담당.
        • 데이터 링크 계층: 데이터 프레임 전송 및 오류 검사.
        • 네트워크 계층: 패킷 전달 및 라우팅.
        • 전송 계층: 데이터 전송 신뢰성 보장.
        • 세션 계층: 통신 세션 관리.
        • 표현 계층: 데이터 변환 및 암호화.
        • 응용 계층: 사용자 애플리케이션과의 인터페이스.
    • TCP/IP 모델
      • 네트워크 인터페이스 계층: 데이터 링크 및 물리 계층 기능.
      • 인터넷 계층: 패킷 전달 및 라우팅.
      • 전송 계층: 데이터 전송 신뢰성 보장.
      • 응용 계층: 사용자 애플리케이션과의 인터페이스.
      • 실제 인터넷에서 사용되는 표준 모델로, 네트워크 통신을 효율적으로 수행
      • 참고링크: https://pyoja.tistory.com/261
  • 캡슐화와 역캡슐화
    1. 캡슐화: 데이터가 상위 계층에서 하위 계층으로 전달될 때, 각 계층은 데이터에 특정 헤더를 추가해요. 예를 들어, 응용 계층에서 생성된 데이터는 전송 계층으로 전달되며, 전송 계층은 데이터에 세그먼트 헤더를 추가합니다.
    2. 역캡슐화: 데이터가 하위 계층에서 상위 계층으로 전달될 때, 각 계층은 헤더를 제거해요. 예를 들어, 데이터 링크 계층에서 받은 프레임은 네트워크 계층으로 전달되며, 네트워크 계층은 프레임 헤더를 제거하고 패킷을 처리합니다.
  • PDU: 각 계층별 데이터 단위를 의미
    • 응용 계층: 메시지
    • 전송 계층: 세그먼트
    • 네트워크 계층: 패킷
    • 데이터 링크 계층: 프레임
  • 트래픽과 네트워크 성능 지표
    1. 처리율 (Throughput):
      • 설명: 단위 시간당 실제로 전송되는 데이터양.
      • 측정 단위: bps (bits per second).
      • 의미: 네트워크의 실질적인 성능 지표.
    2. 대역폭 (Bandwidth):
      • 설명: 네트워크에서 최대로 전송할 수 있는 데이터의 양.
      • 의미: 네트워크의 이론적인 최대 전송 용량.
      • 특징: 실제 처리율은 대역폭보다 작음.
    3. 패킷 손실 (Packet Loss):
      • 설명: 네트워크에서 전송 중 손실되는 패킷의 비율.
      • 원인: 네트워크 혼잡, 하드웨어 문제 등.
      • 영향: QoS(서비스 품질)에 영향을 미치는 중요 요소.

 

 

 

 

728x90

+ Recent posts