Java/일반

NDC와 MDC

창욱씨 2020. 4. 11. 22:54

1. NDC란

 요즘 사용되는 웹 어플리케이션은 멀티 스레드로 동작합니다. 서블릿은 어떤 클라이언트에 호출되더라도 같은 로그 기록을 남기는데, 이렇게 할 경우에 오류가 발생했을 때 어떤 클라이언트를 담당하는 스레드에서 오류가 발생했는지 알기 힘듭니다. 이를 해결하기 위해 로깅 출력에 클라이언트에 대한 특징적인 정보를 같이 출력하는 방법을 사용합니다. NDC는 각 클라이언트에 대한 특징 정보를 지정하기 위한 클래스입니다.

NDC 클래스의 메소드

// diagnostic을 출력할 때 사용
public static String get();

// NDC에 있는 최상위에 있는 콘텍스트를 제거
public static String pop();

// 현재 쓰레드를 위한 diagnostic 콘텍스트 추가
public static void push(String message);

// 현재 쓰레드에 해당하는 diagnostic 콘텍스트 제거
public static void remove();

 NDC는 모든 메소드들이 static 메소드입니다. NDC는 메소드를 호출한 각각의 스레드마다 별도의 스택을 사용하기 때문에 각각의 스레드는 서로 상대방의 컨텍스트 정보에 영향을 끼치지 않습니다.

2. MDC란

 MDC는 NDC와 같은 이유로 만들어진 클래스입니다. 다만, NDC와 다르게 Map 형식을 이용하여 클라이언트의 특징적인 데이터를 저장하기 위한 메커니즘입니다.

MDC 클래스의 메소드

// key 와 연관된 Object 를 얻음
public static Object get(String key); 

// key 와 연관된 Object 를 저장
public static void put(String key, Object value); 

// key 와 연관된 Object 매핑을 제거
public static void remove(String key);
728x90