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 명령어를 사용한 예시와

서버 전송 이벤트(Server-Sent Events, SSE) 및 웹소켓

서버 전송 이벤트(Server-Sent Events, SSE) 및 웹소켓



1. 서버 전송 이벤트(SSE)란?

  • 정의: SSE는 클라이언트와 서버 간에 한 방향 통신을 제공하는 웹 표준입니다.
  • 기능: 서버가 클라이언트에게 새로운 데이터가 있을 때마다 푸시할 수 있습니다.

2. 웹소켓이란?

  • 정의: 웹소켓은 클라이언트와 서버 간의 양방향 통신을 제공합니다.
  • 적용: 실시간 상호작용이 필요한 애플리케이션에 적합합니다.

3. Spring Boot에서 SSE 구현

  • Spring WebFlux 사용: 비동기 처리와 백프레셔 관리에 유용합니다.
  • Spring MVC 사용: SseEmitter를 사용하여 SSE 구현 가능합니다.

4. WebFlux 구현 예시

  • Notification.java:
public class Notification {
    private final int id;
    private final String content;

    public Notification(int id, String content) {
        this.id = id;
        this.content = content;
    }
    // getters ...
}
  • SseController.java:
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.time.Duration;
import java.util.stream.Stream;

@RestController
public class SseController {

    private List<Notification> notificationList = new ArrayList<>();

    @GetMapping("/sse/notifications")
    public Flux<ServerSentEvent<Notification>> getNotificationStream() {
        return Flux.fromStream(Stream.generate(() -> {
            Notification notification = getLatestNotification(); // 구현 필요
            return ServerSentEvent.<Notification>builder()
                .id(String.valueOf(notification.getId()))
                .event("notification-event")
                .data(notification)
                .build();
        })).delayElements(Duration.ofSeconds(1));
    }
}

5. WebMVC 구현 예시

  • SseController.java:
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@RestController
public class SseController {
    private final ExecutorService nonBlockingService = Executors.newCachedThreadPool();

    @GetMapping(path = "/sse/notifications", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public SseEmitter pushSseNotifications() {
        SseEmitter emitter = new SseEmitter();

        nonBlockingService.execute(() -> {
            try {
                for (int i = 0; i < 500; i++) {
                    Notification notification = getLatestNotification(); // 구현 필요
                    emitter.send(notification);

                    Thread.sleep(1000);
                }

                emitter.complete();
            } catch (Exception ex) {
                emitter.completeWithError(ex);
            }
        });

        return emitter;
    }
}

6. 자원 사용량에 관한 고려 사항

  • 웹소켓: 양방향 연결, 상태 유지 필요로 인해 더 많은 메모리와 CPU 사용.
  • SSE: 단방향 연결로 인해 상대적으로 적은 메모리와 CPU 사용.
  • 성능 테스트: 성능 테스트와 벤치마킹을 통해 선택해야 합니다.

중요: SSE와 웹소켓은 각각 다른 목적과 사용 사례에 적합하게 설계되었습니다. 실제 시나리오에 따라 적절한 기술을 선택해야 합니다.

댓글

이 블로그의 인기 게시물

이클립스 오류 - 프로젝트 폴더가 열리지 않는 경우

Subversion (SVN) 설치 및 다중 저장소 설정 가이드

MySQL Root 비밀번호 재설정하기: 완벽한 가이드