라벨이 Java인 게시물 표시

EIGRP에 대한 이해: 초보 개발자를 위한 가이드

이미지
EIGRP에 대한 이해: 초보 개발자를 위한 가이드 개요 EIGRP(Enhanced Interior Gateway Routing Protocol)는 시스코에서 개발한 고급 거리 벡터 라우팅 프로토콜입니다. 이 프로토콜은 기존의 거리 벡터 라우팅 프로토콜과 링크 상태 라우팅 프로토콜의 장점을 결합한 하이브리드 형태를 띠고 있습니다. 그렇기 때문에 EIGRP는 다음과 같은 기능적 특징을 가지고 있습니다: 장점 Advanced Distance Vector : 거리 벡터 라우팅의 고급 버전 Fast Convergence : 빠른 수렴 VLSM & CIDR 지원 : 가변 길이 서브넷 마스킹과 클래스 없는 도메인 간 라우팅 지원 다중 네트워크 계층 프로토콜 지원 : IP, IPX, AppleTalk 등 멀티캐스트 및 유니캐스트를 이용한 업데이트 100% 루프 프리 클래스리스 라우팅 동등 및 불균등 부하 분산 지원 단점 시스코 라우터에서만 사용 가능 대규모 네트워크 관리 어려움 네트워크 장애 시 문제 해결 어려움 관련 용어 Neighbor Table : 이웃 테이블, 인접 라우터 목록 관리 Topology Table : 토폴로지 테이블, 다른 EIGRP 이웃 라우터로부터 학습한 모든 경로 관리 Routing Table : 라우팅 테이블, 최상의 경로를 선택하여 저장 Successor & Feasible Successor : 최적 경로상의 이웃과 백업 경로상의 이웃 네트워크 정보 수집 및 경로 생성 과정 EIGRP에서 네트워크 정보를 수집하고 최적의 목적지 경로를 만드는 과정은 다음과 같습니다: EIGRP 이웃 테이블 생성 및 IP 라우팅 테이블 교환 라우팅 테이블 정보 EIGRP 토폴로지 테이블에 저장 최상의 경로 및 다른 적합한 경로 파악 토폴로지 테이블에서 최상의 경로를 라우팅 테이블에 저장 EIGRP 컴포지트 벡터 메트릭 EIGRP는 여러 벡터 메트릭을 결합하여 경로를 계산합니다. 아래는 show ip eigrp topology 명령어를 사용한 예시와

G1(Garbage-First) 가비지 컬렉터에 대해 알아보자

이미지
G1(Garbage-First) 가비지 컬렉터에 대해 알아보자 G1 GC의 설계 목적과 배경 G1 GC는 Java 7에서 처음 소개되었으며, Java 9 이후 기본 GC로 설정되었습니다. 이 가비지 컬렉터는 서버 애플리케이션의 가비지 컬렉션에 의한 중단 시간을 최소화하는 것을 목표로 합니다. CMS(Concurrent Mark Sweep) GC를 대체하기 위해 개발되었습니다. G1 GC의 주요 특징 분할된 힙 구조 : G1 GC는 힙을 동일한 크기의 여러 영역으로 분할합니다. 이는 기존 GC 방식에서 발생했던 외부 단편화 문제를 해결하는 데 도움이 됩니다. 객체 이동 메커니즘 : 가비지 수집 과정에서 사용되지 않는 객체를 제거하고, 사용 중인 객체를 새로운 영역으로 이동시킵니다. 이는 힙의 지속적인 단편화를 방지합니다. 예측적 GC 접근 : G1 GC는 사용자가 정의한 일정한 가비지 수집 시간을 유지하기 위해 수집 작업을 계획합니다. 이를 통해 애플리케이션의 성능을 개선할 수 있습니다. 병렬 및 동시 GC 지원 : 병렬 및 동시 마킹을 지원함으로써, 가비지 수집을 최적화하고, GC 중지 시간을 줄이는 데 기여합니다. G1 GC 사용 시 고려 사항 G1 GC는 특히 대규모 데이터를 다루는 애플리케이션에 적합합니다. 그러나 작은 데이터 집합을 다루는 애플리케이션에서는 복잡한 알고리즘으로 인해 오버헤드가 발생할 수 있습니다. 일반적으로 힙 메모리가 6GB 이상인 경우에 G1 GC 사용이 권장됩니다. 그러나 애플리케이션의 요구 사항에 따라 적절한 GC 알고리즘을 선택하는 것이 중요합니다. 추가 정보: G1 GC에 관한 이해를 돕는 설명 1. 힙 메모리 사용이 많은 애플리케이션의 예 힙 메모리 사용이 많은 애플리케이션은 주로 대규모 웹 서비스, 복잡한 데이터베이스 시스템, 클라우드 기반의 서비스 등을 포함합니다. 이러한 애플리케이션들은 일반적으로 많은 양의 데이터를 처리하고, 고성능 멀티스레딩 환경을 필요로 합니다. 2. 힙 분할의 이점 G

Java Stream subscribeOn 과 publishOn 함수

subscribeOn() 함수 구독(subscription)이 시작되는 스레드를 변경한다. 데이터 소스를 구독하는 스레드를 변경하는 것 publishOn() 함수 다운스트림(downstream) 연산자가 실행되는 스레드를 변경한다. 데이터 소스에서 발행되는 데이터를 처리하는 스레드를 변경 예시 코드 import reactor.core.publisher.Flux; import reactor.core.scheduler.Schedulers; public class Example { public static void main(String[] args) { Flux.just(1, 2, 3) .subscribeOn(Schedulers.elastic()) .map(i -> { // I/O 작업을 수행하는 스레드 변경 return performIOOperation(i); }) .publishOn(Schedulers.parallel()) .map(result -> { // 결과를 처리하는 스레드 변경 return processResult(result); }) .subscribe(); } private static String performIOOperation(int i) { // I/O 작업을 수행 return "result " + i; } private static Stri

Java-Inner Class

종류 특징 instance class 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 인스턴스멤버처럼 다루어짐 3. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언 static class 1. 외부 클래스의 멤버변수 선언위치에 선언 2. 외부 클래스의 static멤버처럼 사용됨 3. 주로 외부 클래스의 static멤버, static 메서드에서 사용될 목적으로 선언 local class 1. 외부 클래스의 메서드나 초기화블럭 안에 선언 2. 선언된 영역 내부에서만 사용 anonymous class 1. 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 // 외부 클래스 class Outer { // 내부 클래스 class Inner { int iv = 100; } // 스태틱 내부 클래스 static class StaticInner { int iv = 200; } // 외부 클래스의 멤버변수 int value = 10; // 내부 클래스2 class Inner2 { // 내부 클래스2 멤버변수 int value = 20; // 내부 클래스2 함수 void method1() { // 함수의 지역변수 int value = 30; System.out.println(value); System.out.println(this.value); System.out.println(Outer.this.value); } } } public class ExampleInnerClass {

Java 컬렉션 프레임워크: Set, Map, List

Java 컬렉션 프레임워크: Set, Map, List Java에서는 데이터를 관리하고 조작하기 위해 다양한 컬렉션 프레임워크를 제공합니다. 이 포스트에서는 Set, Map,List 인터페이스에 대해 알아보겠습니다. 1. Set Set 인터페이스는 중복된 요소를 허용하지 않으며, 순서를 보장하지 않습니다. 이는 집합 연산에 최적화된 구조를 제공합니다. HashSet과 TreeSet은 Set 인터페이스의 대표적인 구현체입니다. import java.util.*; public class SetExample { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("Apple"); set.add("Banana"); set.add("Cherry"); set.add("Apple"); // 중복된 요소는 추가되지 않습니다. System.out.println(set); // 출력: [Apple, Banana, Cherry] } } 2. Map Map 인터페이스는 키와 값의 쌍을 저장합니다. 키는 중복될 수 없으며, 각 키는 하나의 값을 가집니다. HashMap과 TreeMap은 Map 인터페이스의 일반적인 구현체입니다. import java.util.*; public class MapExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("One", 1); map.put("Two", 2); ma