반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
EMS Solution
Features
클라우드 관리
서버관리
데이터베이스 관리
네트워크 관리
트래픽 관리
설비 IoT 관리
무선 AP 관리
교환기 관리
운영자동화
실시간 관리
백업 관리
스토리지 관리
예방 점검
APM Solution
애플리케이션 관리
URL 관리
브라우저 관리
ITSM Solution
서비스데스크
IT 서비스 관리
Big Data Solution
SIEM
AI 인공지능
Dashboard
대시보드
Consulting Service
컨설팅 서비스
고객
레퍼런스
고객FAQ
문의하기
가격
자료실
카탈로그
회사소개
비전·미션
연혁
2016~현재
2000~2015
인증서·수상
투자정보
재무정보
전자공고
IR자료
새소식
공고
보도자료
오시는 길
채용
피플
컬처
공고
FAQ
블로그
열기
메인 페이지로 이동
블로그
최신이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
최신이야기
검색
기술이야기
Spring Security로 로그인부터 사용자 전환까지 구현하기
기술이야기
Spring Security로 로그인부터 사용자 전환까지 구현하기
ID/PW 로그인으로 시작한 인증 기능도 제품의 접점이 늘어나면 다양한 요구사항을 만나게 됩니다. 외부 시스템에는 API Key를 이용한 호출이 필요하고, 개발 과정에서는 사용자 ID만으로 권한별 화면을 확인해야 할 때가 있습니다. 운영 지원을 위해 관리자가 하위 사용자의 실행 환경으로 전환하는 기능도 필요합니다. 이러한 요구사항을 구현하려면 인증 정보를 검증하는 방식뿐 아니라 요청을 구분하고 인증 상태를 유지하는 구조도 함께 이해해야 합니다. 이 글에서는 먼저 Spring Security의 공식 구조를 바탕으로 로그인 처리 흐름을 살펴보겠습니다. 이어서 프로젝트에서 세 가지 인증 방식을 분리한 방법을 자세히 알아보고, 마지막으로 원래 로그인한 사용자를 보존하면서 실행 사용자를 전환하는 구현을 살펴보겠습니다. 1장: Servlet 필터 체인부터 인증 관리자·제공자·토큰·세션까지 2장: ID/PW, API Key, 개발용 ID 인증의 커스텀 구현 3장: 상위 사용자의 하위 사용자 전환과 원래 계정 복귀 ※ 프로젝트 코드는 설명에 필요한 부분만 발췌했으며, 암호화·복호화·비밀번호 검증의 세부 구현과 실제 인증값은 주석으로 생략했습니다. 1. 공식 문서로 이해하는 로그인 처리 구조 로그인을 구현할 때는 요청을 받는 코드와 사용자를 검증하는 코드의 역할을 먼저 구분해야 합니다. Spring Security는 이를 필터, 인증 관리자, 인증 제공자, 인증 결과 객체로 나누어 처리합니다. 요청이 이 구성 요소들을 거쳐 인증되고 저장되는 흐름을 이해하면, 이후에 살펴볼 여러 로그인 방식과 사용자 전환도 같은 구조 안에서 파악할 수 있습니다. ※설명 기준: 프로젝트는 Spring Boot 3.0.4를 사용하며, Spring Security 버전은 6.0.2입니다. 이 장은 Spring Security 6.x의 Servlet 구조를 설명하며, 그림과 설명은 공식 6.5 레퍼런스를 사용했습니다. 아래 설정은 학습용 예시로, 다음 장의 프로젝트 설정과는 구분됩니다. 1.1. Servlet 컨테이너의 FilterChain에 들어가는 보안 필터 먼저 요청이 들어오는 지점부터 살펴보겠습니다. Spring Security의 보안 필터가 연결되는 대상은 Apache Tomcat 같은 Servlet 컨테이너가 실행하는 Servlet Filter 체계입니다. 간혹 이를 “Apache 필터”라고 표현하기도 하지만, Apache HTTP Server의 모듈이나 필터 체계와는 구분해야 합니다. 그림 1. 컨테이너의 필터들과 Servlet. 요청은 여러 필터를 거쳐 Spring MVC의 DispatcherServlet에 도착합니다. 각 필터는 요청을 다음 단계로 넘기거나 직접 응답하고 처리를 종료할 수 있습니다. Spring Security도 이 구조를 이용해 인증이 필요한 요청을 컨트롤러에 도착하기 전에 차단할 수 있습니다. 이 과정에서 컨테이너의 필터와 Spring Bean을 연결하는 클래스가 DelegatingFilterProxy입니다. 이 프록시는 Spring에서 관리하는 보안 필터 Bean으로 처리를 위임합니다. 일반적으로 위임 대상인 springSecurityFilterChain Bean의 실제 구현은 FilterChainProxy이며, 이름에 Chain이 포함되어 있지만 Servlet 관점에서는 하나의 Filter로 동작합니다. 그림 2. Servlet 컨테이너와 Spring ApplicationContext를 연결하는 프록시. 이 구조를 요청의 이동 순서에 따라 살펴보겠습니다. 컨테이너의 필터 체인에서 보안 처리 지점에 도착한 요청은 DelegatingFilterProxy를 통해 FilterChainProxy로 전달됩니다. FilterChainProxy는 요청에 맞는 SecurityFilterChain을 선택하고, 그 안의 보안 필터들을 순서대로 실행합니다. 보안 처리를 통과한 요청은 컨테이너의 필터 체인으로 돌아가 Servlet까지 진행합니다. 공식 문서의 Architecture에서도 이러한 계층을 각각의 그림으로 설명합니다. 1.2. 필터 매니저와 패턴 매처: 어떤 보안 체인을 적용할까 그렇다면 여러 보안 체인이 등록되어 있을 때는 어떤 체인을 선택할까요? 앞서 살펴본 FilterChainProxy가 이 선택을 담당하며, 이 글에서 말하는 “필터 매니저” 역할에 해당합니다. 우선순위가 높은 체인부터 RequestMatcher로 요청을 검사하고, 처음 일치한 체인 하나만 실행합니다. 일치하는 체인을 모두 이어서 실행하는 방식은 아닙니다. 그림 3. 요청에 처음 일치한 SecurityFilterChain 선택. 이 선택 구조를 설정하려면 요청 매처의 역할을 구분해야 합니다. 먼저 securityMatcher와 requestMatchers가 어떤 단계에서 사용되는지 알아보겠습니다. 두 설정 모두 요청을 비교하지만, 체인을 선택하는 단계와 선택된 체인 안에서 접근 권한을 확인하는 단계로 역할이 나뉩니다. 로그인 필터에도 별도의 요청 매처가 있으며, 각 역할은 다음과 같습니다. 예를 들어 /api/** 전용 체인이 먼저 선택되면 뒤쪽 웹 체인의 formLogin 설정은 해당 요청에 적용되지 않습니다. 같은 이유로 /secured/**만 담당하는 체인에 기본 /login 처리를 설정하면 로그인 요청이 그 체인에 도달하지 못합니다. 또한 어느 체인에도 일치하지 않는 요청은 Spring Security의 보호를 받지 않습니다. 마지막에 전체 요청을 담당하는 체인을 두는 이유도 이러한 선택 구조 때문입니다. 1.3. 인증 관리자, 인증 제공자, 토큰의 역할 요청에 적용할 체인이 정해지면 그 안에서 실제 인증이 진행됩니다. 이때 흔히 “authenticator”라고 부르는 역할은 하나의 클래스에 모여 있지 않습니다. 인증 필터가 입력을 해석하고, AuthenticationManager가 인증 요청을 받으며, AuthenticationProvider가 해당 인증 방식을 검증합니다. AuthenticationManager의 대표 구현인 ProviderManager는 등록된 인증 제공자에게 검증을 위임합니다. 각 제공자는 supports를 통해 자신이 처리할 수 있는 Authentication 타입을 알립니다. 이는 해당 토큰의 처리 가능 여부를 나타내며, 로그인 성공을 의미하지는 않습니다. 이처럼 역할을 분리하면 요청에서 자격 증명을 추출하는 방식과 사용자 검증 정책을 각각 확장할 수 있습니다. 필터와 인증 제공자 사이에서 전달되는 입력과 결과는 Authentication 객체로 표현합니다. ID/PW 인증에서는 UsernamePasswordAuthenticationToken을 사용할 수 있습니다. 검증 전에는 ID와 비밀번호를 담고, 검증 후에는 사용자 객체와 부여된 권한을 가진 인증 결과를 받습니다. 여기서 Token은 Spring Security 내부의 인증 객체를 뜻하며, 이 객체를 사용한다고 해서 JWT가 발급되거나 브라우저에 문자열 토큰이 반환되는 것은 아닙니다. 이제 인증 요청과 결과가 코드에서 어떻게 연결되는지 살펴보겠습니다. 공식 인증 아키텍처 예제에서 인증 요청과 결과를 받는 부분만 축약했으며, HTTP 응답과 세션 저장 처리는 생략했습니다. 위 코드의 request는 아직 검증되지 않은 인증 요청입니다. authenticate 호출을 통해 제공자의 검증을 마친 뒤에야 인증에 성공한 결과를 사용할 수 있습니다. 저장된 사용자 정보로 인증하는 기본 구현인 DaoAuthenticationProvider도 이 흐름을 따릅니다. UserDetailsService로 사용자를 조회하고, PasswordEncoder로 입력한 비밀번호와 저장된 값을 검증합니다. 사용자 조회와 비밀번호 검증은 별개의 책임이므로, 사용자 정보를 조회했다는 사실만으로 로그인이 성공하지는 않습니다. 검증을 마치면 사용자와 권한이 담긴 Authentication을 반환합니다. 비밀번호 보관·검증에 사용하는 구체적인 알고리즘은 이 글의 범위에서 생략합니다. 1.4. 표준 ID/PW 로그인 한 번 따라가기 이제 앞에서 살펴본 구성 요소들이 표준 로그인에서 어떻게 연결되는지 예제를 통해 알아보겠습니다. 공식 Form Login 예제의 핵심 설정은 formLogin입니다. 아래 코드는 해당 예제에 접근 규칙과 반환문을 추가한 학습용 예시이며, 사용자 저장소와 인증 제공자는 별도로 준비되어 있다고 가정합니다. 이 설정의 기본 폼은 POST /login으로 username, password 파라미터를 보냅니다. CSRF 보호가 켜져 있다면 폼에 CSRF 토큰도 포함해야 합니다. JSON 요청 본문으로 로그인 정보를 전달하는 API는 기본 폼 파라미터 처리와 별도로 입력 처리를 구성해야 합니다. 로그인 요청이 들어온 이후에는 앞서 설명한 인증 구성 요소들이 다음 순서로 동작합니다. 1. UsernamePasswordAuthenticationFilter가 로그인 요청에서 ID/PW를 추출합니다. 2. 미인증 UsernamePasswordAuthenticationToken을 만들어 AuthenticationManager에 전달합니다. 3. 인증 제공자가 사용자와 자격 증명을 검증하고 인증 결과를 반환합니다. 4. 인증에 성공하면 세션 인증 전략을 실행하고 인증 결과를 SecurityContext에 설정합니다. 5. 성공 핸들러가 후속 응답을 생성합니다. 인증에 실패하면 실패 핸들러가 응답합니다. 이처럼 표준 로그인에서는 자격 증명 검증을 마친 뒤에도 세션 처리와 응답 생성이 이어집니다. 프로젝트의 커스텀 로그인 역시 이 후속 흐름까지 연결해야 합니다. 특히 로그인 상태를 다음 요청에서도 사용하려면 인증 결과를 어디에 저장하는지 확인해야 합니다. 1.5. 이번 요청의 인증을 다음 요청까지 유지하기 현재 사용자 정보는 SecurityContextHolder가 보관하는 SecurityContext의 Authentication으로 표현됩니다. 기본적인 Servlet 환경에서는 이 Holder가 요청 처리 스레드와 연결됩니다. 따라서 현재 요청에서 사용할 인증 정보를 설정하는 작업과, 다음 요청에서 다시 읽을 수 있도록 저장하는 작업은 구분해야 합니다. 요청 간 인증 상태를 연결하는 역할은 SecurityContextRepository가 담당합니다. 세션 기반 로그인에서는 브라우저가 다음 요청에 세션 쿠키를 보내면 서버가 저장된 컨텍스트를 복원합니다. Spring Security 6의 기본 SecurityContextHolderFilter는 컨텍스트를 읽는 역할을 담당하므로, 커스텀 인증 코드에서는 저장소에 명시적으로 저장해야 합니다. 기본 폼 로그인 필터가 처리하던 인증 흐름을 직접 구현한다면 이 저장 과정도 함께 연결해야 합니다. 인증 정보를 저장하는 것과 별개로, 새 인증에 어떤 세션 정책을 적용할지도 결정해야 합니다. 이를 담당하는 구성 요소가 SessionAuthenticationStrategy입니다. 동시 로그인 제한을 예로 들어 세션 정책을 어떻게 설정하는지 살펴보겠습니다. 아래는 공식 예제의 핵심 부분이며, 프로젝트가 같은 정책을 적용했다는 의미는 아닙니다. 이 설정은 기존 로그인을 유지하면서 두 번째 로그인을 거절합니다. maxSessionsPreventsLogin(true)를 생략하면 기본적으로 기존 세션을 만료시키는 방향으로 동작합니다. 세션 종료 이벤트를 추적하려면 HttpSessionEventPublisher도 연결해야 합니다. 또한 직접 만든 인증 필터에는 동시 세션 제어를 명시적으로 구성해야 합니다. 여기까지의 흐름은 요청에 맞는 체인 선택, 인증 객체 생성, 제공자의 검증, 인증 결과 저장으로 정리할 수 있습니다. 이 순서에 맞춰 코드를 읽으면 여러 인증 방식이 공통으로 사용하는 부분과 서로 다르게 구현한 부분을 구분하기 쉽습니다. 다음 장에서는 이 구조를 ID/PW, API Key, 개발용 ID 인증에 각각 적용한 방식을 살펴보겠습니다. 2. 세 가지 인증 요구사항을 Spring Security 확장 지점에 연결하기 프로젝트에는 인증이 필요한 세 가지 접점이 있습니다. 사용자는 화면에서 ID와 비밀번호로 로그인하고, 외부 연동 프로그램은 API Key로 API를 호출합니다. 개발자는 화면을 구현하면서 사용자 ID만으로 특정 사용자의 권한을 확인해야 합니다. 이러한 요구사항을 처리하기 위해 요청을 선택하는 SecurityFilterChain, 자격 증명을 해석하는 필터, 실제 검증을 수행하는 AuthenticationProvider의 역할을 나누었습니다. 여기서 ID는 DB의 숫자형 사용자 식별자가 아니라 사용자가 입력하는 loginName을 뜻합니다. ID/PW 인증과 개발용 인증에는 UsernamePasswordAuthenticationToken을 사용하고, API Key 인증에는 별도의 ZngApiKeyAuthenticationToken을 사용합니다. 인증 요청에 사용하는 Token은 다르지만, 인증 결과의 principal은 MyUserDetails로 통일했습니다. 따라서 이후 서비스는 동일한 사용자 모델과 메서드 권한 검사 체계를 사용할 수 있습니다. MyUserDetails는 Spring Security의 UserDetails 인터페이스를 구현한 프로젝트의 사용자 클래스입니다. Kotlin에서는 클래스 선언에 : UserDetails를 붙여 구현합니다. UserDetails는 사용자명, 권한 목록, 계정 잠금·활성 상태 등 인증에 필요한 정보를 제공하는 인터페이스입니다. 프로젝트에서는 여기에 사용자 ID와 계층, 소속 관리자, 접근 가능한 대상 그룹, 원래 로그인한 사용자 정보 등의 업무 속성을 추가했습니다. 인증 성공 후 MyUserDetails를 Authentication.principal에 넣으면 Spring Security의 권한 검사와 업무 코드의 현재 사용자 조회가 같은 객체를 기준으로 동작합니다. 다만 사용자 객체를 제공하는 것과 자격 증명을 검증하는 것은 별개의 역할입니다. UserDetails 구현만으로 비밀번호나 계정 상태가 자동 검증되지는 않으며, 이 프로젝트에서는 커스텀 Provider가 필요한 검사를 직접 호출합니다. getPassword()도 일반적인 저장 비밀번호 제공 경로로 사용하지 않습니다. 뒤에서 살펴볼 ID/PW Provider와 개발용 Provider 역시 목적에 따라 검증 범위가 다릅니다. 이러한 공통 사용자 모델을 바탕으로 각 인증 방식의 요청 구분과 결과 저장 범위를 다음과 같이 구성했습니다. 이제 요청 분류부터 시작해 각 인증 방식의 구현을 차례로 살펴보겠습니다. 이 장의 코드는 현재 저장소 구현에서 발췌했으며, 패키지와 import는 생략했습니다. 자격 증명 처리 부분은 주석으로 대체했고, 암호화·복호화·해시 알고리즘과 파라미터, 실제 인증값은 포함하지 않았습니다. 2.1 먼저 인증 방식이 충돌하지 않도록 요청을 분류합니다 세 가지 인증 방식을 함께 사용하려면 먼저 각 요청이 어느 체인으로 들어갈지 정해야 합니다. 앞 장에서 설명한 것처럼 여러 체인이 선언되어 있어도 처음 일치한 체인 하나만 요청을 처리합니다. 따라서 @Order와 securityMatcher의 조합은 단순한 실행 순서 설정을 넘어 인증 정책의 일부가 됩니다. 프로젝트에서는 세 가지 인증 진입점보다 앞에 인증 방식의 개수를 검사하는 체인을 두었습니다. 여기서 확인하는 항목은 로그인 요청 여부, 세션에 저장된 SecurityContext, Authorization 헤더입니다. 세션 쿠키의 존재만으로 판단하지 않고, HttpSessionSecurityContextRepository.containsContext(request)로 실제 저장된 컨텍스트를 확인합니다. 위 함수의 결과는 Order 40 체인의 matcher에서 사용합니다. 값이 1이 아닌 요청은 이 체인에서 선택해 401로 응답합니다. 예를 들어 세션으로 로그인한 요청에 API Key 헤더를 추가하거나, POST /api/login에 Authorization 헤더를 함께 보내면 두 방식이 겹칩니다. 이 경우 뒤쪽의 API Key 체인이나 세션 인증 체인으로 넘어가지 않습니다. 다만 이 단계에서는 Authorization 헤더의 형식이 아니라 존재 여부만 확인합니다. 이 검사의 적용 범위는 앞서 선택되는 체인까지 함께 보아야 이해할 수 있습니다. OPTIONS(Order 10), 정적 리소스(Order 20), 공개키 조회 GET /api/user/pk(Order 30), 비정상 로그아웃 처리(Order 35), 특정 보고서 생성 요청(Order 37)은 Order 40보다 먼저 선택될 수 있습니다. 이후에는 별도의 보고서용 인증(Order 50), 개발용 Basic(Order 60), API Key(Order 70), 세션 인증(Order 80)이 이어집니다. 따라서 모든 URL이 동일한 검사를 거치는 것은 아니며, @Order와 matcher를 기준으로 흐름을 확인해야 합니다. 각 인증 체인으로 분기할 때 사용하는 헤더 matcher는 대소문자를 무시하는 startsWith(authScheme, true)로 구현되어 있습니다. 이는 scheme에 따라 요청을 구분하는 역할이며, 엄격한 헤더 문법 검증까지 수행하는 구현은 아닙니다. 이렇게 요청 경로를 나눈 뒤, 각 필터와 Provider에서 인증 방식에 맞는 처리를 진행합니다. 2.2 ID/PW 로그인: 입력 형식과 사용자 정책을 분리합니다 먼저 일반 로그인은 POST /api/login 요청의 JSON body를 읽습니다. 이를 담당하는 ZngUsernamePasswordAuthenticationFilter는 AbstractAuthenticationProcessingFilter를 상속하며, 생성자에서 ProviderManager(ZngUsernamePasswordAuthenticationProvider(userService))를 전달합니다. 필터는 입력과 HTTP 요청을 처리하고 Provider는 사용자를 검증하므로, 역할 분담은 표준 로그인과 같습니다. 표준 폼 로그인과 달라지는 부분은 입력 형식입니다. 폼 파라미터 대신 JSON 본문을 읽어야 하므로 커스텀 필터를 사용했습니다. 필터는 입력을 준비한 뒤 다음과 같이 미인증 Token을 생성합니다. 이 Token은 검증할 요청을 전달하는 객체이며, 아직 인증 성공 상태는 아닙니다. 이때 details에 추가한 HTTP 요청 정보는 이후 IP 정책 검사에 사용합니다. Token을 전달받은 Provider는 서비스에 ID/PW 검증을 위임하고, 필요한 비밀번호 저장 형식 이전 처리를 수행한 뒤 사용자 상태를 추가로 확인합니다. 서비스에서는 ID 오류와 비밀번호 오류를 구별해 알리지 않고 동일한 인증 예외로 처리합니다. 자격 증명 검증 이후에는 어떤 항목을 추가로 확인하는지 코드로 살펴보겠습니다. 검증에 성공하면 principal은 문자열 ID에서 MyUserDetails로 바뀌고, authorities에는 사용자 권한이 포함되며, credentials는 null로 반환됩니다. 이 Provider의 supports는 전달된 Token이 UsernamePasswordAuthenticationToken 계열인지 확인합니다. ProviderManager는 이 지원 여부를 기준으로 검증을 담당할 Provider를 선택합니다. 인증 결과를 받은 다음에는 세션 정책을 적용하고 로그인 상태를 저장해야 합니다. 이를 위해 로그인 필터에 다음과 같은 세션 전략과 성공 핸들러를 지정했습니다. 먼저 세션 전략의 첫 번째 구성 요소는 설정값으로 최대 동시 세션 수를 확인합니다. 한도를 넘으면 신규 로그인을 예외로 거절하거나 기존 세션을 expireNow()로 만료 표시합니다. 두 번째 전략은 새 세션을 SessionRegistry에 등록합니다. 만료 표시된 세션으로 후속 요청이 들어오면 세션 체인에 배치한 ConcurrentSessionFilter가 처리합니다. 즉, 세션에 만료 여부를 기록하는 시점과 해당 세션의 다음 요청을 차단하는 시점은 구분됩니다. 다만 현재 동시 세션 전략에는 sortedBy의 반환값을 사용하지 않는 코드가 있어, 주석의 의도만으로 가장 오래 사용하지 않은 세션이 반드시 선택된다고 설명하기는 어렵습니다. 또한 위 Composite에 직접 포함된 전략은 동시 세션 검사와 등록 두 가지이므로, 이 설정만으로 세션 ID 변경 전략까지 적용된다고 단정할 수는 없습니다. 세션 전략을 통과하면 성공 핸들러가 SecurityContext를 생성하고 HttpSessionSecurityContextRepository.saveContext로 명시적으로 저장합니다. 다음 요청에서 세션에 저장된 인증 정보를 사용할 수 있는 이유입니다. 성공 응답은 리다이렉트 대신 MyResult JSON으로 반환하며, 로그인 실패 핸들러는 401을 반환합니다. 로그아웃 요청인 POST /api/logout에는 Spring Security의 로그아웃 처리와 감사 기록을 연결하고, 성공 JSON을 응답하도록 구성했습니다. 인증 결과를 통계와 감사 처리에 반영하는 흐름은 이벤트로 연결했습니다. ProviderManager에 AuthenticationEventPublisher를 설정하고, SecurityConfig의 이벤트 리스너에서 인증 성공 시 사용자 로그인 시도 횟수와 마지막 로그인 시각을 갱신합니다. 사용자 관련 실패와 API Key 자체의 실패는 서로 다른 이벤트로 매핑해 실패 횟수를 갱신할 대상도 구분합니다. 다만 이 이벤트는 Provider의 인증 결과를 알리는 것이므로, 이후 동시 세션 전략까지 성공했다는 의미는 아닙니다. 2.3 API key 인증: 사용자 인증에 호출 범위를 더합니다 ID/PW 로그인이 브라우저의 세션을 유지하기 위한 흐름이라면, 외부 연동에서는 Authorization: ZNG <API_KEY> 형식의 헤더로 인증 정보를 전달합니다. 실제 키는 예시에 포함하지 않았습니다. Order 70 체인이 이 헤더를 가진 요청을 선택하면, BasicAuthenticationFilter 위치에 배치한 ZngApiKeyAuthenticationFilter가 처리를 담당합니다. 이 필터는 OncePerRequestFilter를 상속합니다. 헤더에서 키를 읽고 형식을 확인한 뒤, 식별자와 검증용 비밀값을 미인증 ZngApiKeyAuthenticationToken에 담습니다. 여기에 요청 details를 추가해 API Key 전용 ProviderManager로 전달합니다. 인증 결과를 받은 뒤에는 컨텍스트를 설정하고 저장합니다. 이 과정이 ID/PW 로그인과 어떻게 다른지 다음 코드와 함께 살펴보겠습니다. 앞서 본 로그인 처리와 코드 형태는 비슷하지만, 여기서 사용하는 저장소는 RequestAttributeSecurityContextRepository입니다. API Key 필터는 HttpSession에 인증 결과를 직접 저장하지 않고 요청 속성 저장소를 사용하므로, 의도한 인증 유지 범위는 현재 요청입니다. 다만 설정에 SessionCreationPolicy.STATELESS가 명시된 것은 아니어서, 이 코드만으로 애플리케이션 전체에서 어떤 이유로도 세션이 생성되지 않는다고 볼 수는 없습니다. 이 인증 결과를 만드는 ZngApiKeyAuthenticationProvider는 먼저 식별자로 키를 조회하고, 비밀값 일치 여부와 활성·만료·잠금 상태를 확인합니다. 이어서 키에 연결된 사용자도 조회합니다. 키가 유효하더라도 사용자가 휴면·잠금·자격 증명 만료·비활성 상태이거나 IP 조건을 만족하지 못하면 인증하지 않습니다. 검증에 성공하면 ZngApiKeyAuthenticationToken.authenticated(user, null, user.authorities, apiKey)를 반환합니다. 전용 Token에 apiKey를 남기는 이유는 인증 이후에도 키별 호출 범위를 확인해야 하기 때문입니다. 다음 인가 코드에서 이 정보를 사용합니다. 위 코드는 인증과 인가의 역할을 구분해 보여줍니다. Provider가 “어떤 사용자와 키인가”를 검증했다면, ZngApiKeyAuthorizationManager는 “이 키로 이 요청을 호출해도 되는가”를 판단합니다. 요청은 키에 허용된 API 경로와 HTTP 메서드 matcher에 일치해야 하며, 사용자 전환·사용자 관리·API Key 관리 등 별도로 선언한 금지 matcher에도 해당하지 않아야 합니다. 이 제한은 선언된 matcher 범위에 적용되며, 모든 관리 기능을 자동으로 차단한다는 의미는 아닙니다. 컨트롤러와 서비스의 메서드 권한 검사도 별도로 작동합니다. 실패 처리도 API Key 인증 흐름에 맞추어 구성했습니다. 필터에서 AuthenticationException이 발생하면 감사 기록을 남기고 컨텍스트를 비운 뒤 403 진입점으로 응답합니다. 키 형식이 맞지 않으면 필터 자체에서 예외를 던지는 대신 다음 필터로 넘기지만, 인증된 API Key Token이 없으면 이후 인가를 통과할 수 없습니다. API Key로 들어오는 로그아웃 요청은 세션 로그아웃과 구분되므로, 앞쪽의 비정상 로그아웃 처리 체인에서 별도로 처리합니다. 2.4 개발용 ID 인증: 기본 HTTP Basic 필터에 Provider만 교체합니다 마지막으로 개발 중 사용자별 권한과 화면 동작을 확인하기 위한 인증 방식을 살펴보겠습니다. 이때는 지정한 사용자의 컨텍스트로 API를 호출할 수 있도록, 기본 HTTP Basic 처리에 ID만 조회하는 Provider를 연결했습니다. 요청을 해석하는 기본 필터는 사용하면서 사용자 검증 부분을 별도로 구성한 것입니다. 여기서 “ID만으로 로그인”한다는 것은 HTTP body에 숫자 ID 하나를 보내는 별도 로그인 API를 뜻하지 않습니다. 요청은 Basic 헤더 형식을 따르며, 기본 필터가 이를 UsernamePasswordAuthenticationToken으로 변환합니다. 이후 커스텀 Provider가 authentication.name, 즉 loginName으로 사용자를 조회합니다. 프런트엔드의 개발 로그인 설정도 입력받은 사용자명을 Basic 형식으로 준비해 후속 요청의 Authorization 헤더에 넣습니다. 실제 인증값을 만드는 표현식은 본문에서 생략했습니다. 위 Provider는 비밀번호를 비교하지 않으며, 일반 로그인 Provider에서 수행하는 사용자 상태·IP 검사도 호출하지 않습니다. 검증을 단순화한 개발 편의 기능이므로 활성화 범위를 함께 확인해야 합니다. 현재 조건은 **`prod` 프로필이 활성화되지 않은 환경(@Profile("!prod"))**입니다. 반면 API Key 체인에는 이 프로필 조건이 없습니다. 개발용 Basic 체인이 활성화된 환경에서도 ZNG 헤더 요청은 API Key 체인으로 들어가며, 두 인증 방식은 헤더에 따라 구분됩니다. 앞서 설명한 Order 40의 인증 방식 개수 검사도 개발용 요청에 적용됩니다. 따라서 세션 컨텍스트를 유지한 채 Basic 헤더를 추가하면 인증 방식이 충돌한 요청으로 처리됩니다. 지금까지 세 가지 인증 요구사항을 필터·Provider·Token·Context·세션 전략의 역할에 맞추어 연결한 방식을 살펴봤습니다. 다음 장의 사용자 전환은 이렇게 인증된 사용자가 다른 사용자의 컨텍스트로 이동하는 기능입니다. 다음 장에서는 새 자격 증명을 검증하는 로그인과 비교하면서, 전환 권한을 판단하고 세션 상태를 유지하는 방법을 알아보겠습니다. 3. 상위 사용자에서 하위 사용자로: 로그인 상태를 유지하며 실행 주체 바꾸기 운영 지원 과정에서는 관리자가 하위 사용자의 화면과 데이터 접근 범위를 확인해야 할 때가 있습니다. 매번 상대 사용자의 비밀번호를 받아 다시 로그인하는 방식으로는 이러한 요구를 처리하기 어렵습니다. 프로젝트에서는 이미 인증된 상위 사용자의 권한으로 전환 가능 여부를 판단하고, 이후 요청에서 사용할 Authentication을 대상 사용자의 것으로 교체했습니다. 이때는 두 사용자를 구분해야 합니다. 하나는 현재 기능을 실행하는 사용자이고, 다른 하나는 처음 로그인하여 전환 권한의 근거가 된 사용자입니다. 현재 사용자는 화면과 업무 권한의 기준이며, 최초 사용자는 다른 사용자로 이동하거나 원래 계정으로 돌아갈 수 있는 권한의 근거입니다. 이 구분을 유지하기 위해 먼저 원래 로그인한 사용자 정보를 보관합니다. 3.1. 원래 로그인한 사용자는 한 번만 보관합니다 MyUserDetails에는 원래 로그인한 사용자를 보관하는 orgLoginUser 필드가 있습니다. 값이 null이면 현재 객체가 원래 로그인한 사용자를 나타냅니다. 필드 주석은 ID/PW 로그인을 기준으로 작성되어 있습니다. API Key 인증으로 들어오는 전환 요청은 별도의 인가 매니저에서 차단하므로, 여기서는 일반적인 세션 로그인 이후의 전환 흐름을 중심으로 설명하겠습니다. 예를 들어 관리자 A가 사용자 B로 전환하면 B의 orgLoginUser가 A를 가리킵니다. B 상태에서 사용자 C로 다시 이동하더라도 최초 사용자는 A로 유지됩니다. 전환할 때마다 이전 사용자를 연결하는 이력 구조를 만드는 대신, 언제나 하나의 원본 계정을 기준으로 전환 권한을 판단합니다. Spring Security에도 사용자 전환용 SwitchUserFilter가 있으며, 공식 구현은 SwitchUserGrantedAuthority에 원래 Authentication을 보관해 복귀에 활용합니다. 프로젝트에서는 이 필터를 등록하지 않고, 컨트롤러에서 업무 계층을 검증한 뒤 MyUserDetails.orgLoginUser로 원본 사용자를 보관했습니다. 따라서 다음 코드는 SwitchUserFilter를 확장한 구현이 아니라, 프로젝트의 사용자 모델을 이용한 별도 구현입니다. 3.2. 전환 권한은 현재 사용자보다 최초 사용자를 기준으로 판단합니다 원본 사용자를 보관했다면 전환 요청에서 이 정보를 권한 판단에 사용합니다. 실제 진입점은 POST /api/user/change/{userId}입니다. 컨트롤러는 현재 사용자와 원본 사용자를 구분한 뒤, 원본 사용자의 계층을 기준으로 대상에게 전환할 수 있는지 확인합니다. 코드의 계층 검사는 MyUserDetails의 level을 기준으로 합니다. 1은 SUPER, 2는 ADMIN, 3은 일반 사용자이며, isAdmin()과 isSuper()도 이 값을 검사합니다. ADMIN은 대상의 adminId가 자신의 ID와 같은 경우에만 전환할 수 있습니다. adminId는 일반 사용자에게는 소속 관리자의 ID이고, ADMIN과 SUPER에게는 본인의 ID입니다. 따라서 관리자 A는 자신의 하위 사용자로 이동할 수 있으며, 본인으로 복귀할 때도 같은 조건을 통과합니다. 이 값은 조회 SQL의 case when u.z_mylevel = 3 then u.z_parid else u.z_myid end에서 생성됩니다. SUPER의 전환 요청에는 ADMIN과 같은 대상별 소속 검사 분기가 없습니다. 사용자 계층에 맞는 선택 목록은 제공하지만, 실제 전환 API가 SUPER의 대상을 반드시 그 목록 안으로 제한한다고 설명할 수는 없습니다. 이후에 살펴볼 화면의 전환 후보 목록과 서버의 전환 허용 조건은 구분해야 합니다. 최초 사용자를 기준으로 검사하기 때문에, 이미 일반 사용자로 전환한 상태에서도 org가 관리자를 가리키면 다른 하위 사용자로 이동하거나 관리자 본인으로 돌아갈 수 있습니다. 반면 처음부터 일반 사용자로 로그인했다면 org도 일반 사용자이므로 요청이 거절됩니다. 이 권한 검사는 메서드의 @PreAuthorize가 아니라 메서드 본문에서 수행합니다. 3.3. 인증된 토큰을 새로 만들고 세션에 저장합니다 전환 권한 검사를 통과하고 대상이 확정되면, 해당 사용자를 principal로 가진 새 토큰을 만듭니다. 비밀번호를 다시 검증하는 요청이 아니므로 AuthenticationManager나 ID/PW용 AuthenticationProvider는 호출하지 않습니다. 앞에서 수행한 전환 권한 검사가 이 토큰 생성의 근거가 됩니다. 이 코드에서 권한 적용의 기준은 toBe.authorities입니다. 원래 관리자의 권한을 합치지 않고 대상 사용자의 권한으로 새 Authentication을 구성하므로, 일반 업무 API는 전환된 사용자의 권한을 기준으로 동작합니다. 원래 관리자 정보는 전환과 추적을 위한 참조로 보관되며, 새 토큰에 관리자 권한이 자동으로 승계되는 것은 아닙니다. 권한을 구성한 다음에는 바뀐 인증 상태를 현재 요청과 후속 요청에 반영합니다. 새 SecurityContext를 만들어 SecurityContextHolder에 설정하는 작업은 현재 요청의 실행 주체를 바꿉니다. 이어지는 saveContext는 다음 요청에서도 전환 결과를 사용할 수 있도록 HTTP 세션에 저장합니다. 1장에서 설명한 컨텍스트 설정과 저장의 구분이 여기에도 적용됩니다. 공식 문서에서도 SecurityContextRepository를 후속 요청까지 인증 상태를 연결하는 지점으로 설명하며, HttpSessionSecurityContextRepository는 이를 HTTP 세션에 연결합니다. 이렇게 인증 객체를 교체하면 업무 코드에서도 같은 사용자 조회 방식을 유지할 수 있습니다. 현재 사용자를 가져오는 공통 함수를 통해 이 동작을 확인해 보겠습니다. 전환 후 getCurrent()는 새 principal을 반환합니다. 따라서 이 공통 조회 방식을 사용하는 개별 업무 서비스에 전환 대상의 ID를 별도로 전달할 필요가 없습니다. 현재 사용자로부터 그룹이나 권한을 조회하는 기존 코드도 전환된 사용자 정보를 기준으로 동작합니다. 3.4. 후보 목록과 복귀도 같은 원본 계정을 활용합니다 사용자 전환을 화면에서 제공하려면 이동할 수 있는 후보를 조회하고 원래 계정으로 돌아가는 흐름도 필요합니다. 후보 목록은 GET /api/user/change-list로 조회합니다. 여기에서도 원본 계정을 먼저 구한 다음, 현재 실행 중인 사용자만 목록에서 제외합니다. ADMIN에게는 본인과 직접 하위 사용자를, SUPER에게는 본인과 하위 관리자 및 그 사용자들을 제공합니다. getChildren의 SQL은 z_parid로 직접 하위를 조회하므로, SUPER의 목록은 하위 관리자와 그 사용자에 대한 두 번의 계층 조회로 구성됩니다. 임의 깊이의 트리를 재귀적으로 조회하는 구현은 아닙니다. 목록에 포함된 원본 계정으로 복귀할 때도 같은 전환 API를 사용하며, 별도의 복귀 전용 API는 두지 않았습니다. 원본 사용자 ID를 전달하면 getUserById가 DB에서 새 MyUserDetails를 조회합니다. 대상이 원본과 같을 때는 orgLoginUser를 별도로 설정하지 않으며, 이때 equals는 사용자 ID를 기준으로 비교합니다. 따라서 원본 계정으로 돌아오면 다시 orgLoginUser == null인 상태가 됩니다. 3.5. 실행 사용자와 실제 행위자를 함께 남길 수 있게 합니다 전환과 복귀가 가능해지면, 이후 작업을 누가 수행했는지도 구분할 필요가 있습니다. 사용자 B의 권한으로 실행했다는 사실만 남기면 B가 직접 수행했는지, 관리자 A가 B로 전환해 수행했는지 파악하기 어렵습니다. 이를 위해 감사 로그 모델은 현재 사용자와 원본 사용자를 함께 저장할 수 있도록 구성했습니다. 다음은 감사 로그 생성자 인자 중 관련 부분을 발췌한 코드입니다. 감사 로그 대상 메서드의 AOP는 UserService.getCurrent()로 기록할 사용자를 설정합니다. 따라서 전환 상태에서 기록되는 작업에는 현재 사용자와 원본 사용자를 구분해 담을 수 있습니다. 감사 기록과 함께 확인할 부분은 전환 시 다시 수행하는 인증·세션 처리의 범위입니다. 현재 구현은 컨트롤러에서 인증 객체를 직접 만들기 때문에, 최초 로그인에서 수행하는 계정 상태·허용 IP 검증이나 세션 인증 전략을 다시 호출하지 않습니다. SessionRegistry 재등록, 세션 ID 변경, 로그인 성공 이벤트 발행도 전환 메서드에는 없습니다. 따라서 기존 세션의 인증 주체를 교체하는 처리와 새로운 로그인에 적용하는 동시 세션 관리 정책을 같은 동작으로 보아서는 안 됩니다. 마지막으로 어떤 인증 경로에서 사용자 전환 기능에 접근할 수 있는지 확인해 보겠습니다. ZngApiKeyAuthorizationManager는 "/api/user/change/*" to POST를 금지 목록에 넣고, API Key 자체의 접근 범위와 이 목록을 함께 검사합니다. 따라서 API Key로는 사용자 전환을 할 수 없으며, 컨트롤러뿐 아니라 앞단의 필터 체인에서 수행하는 인가까지 확인해야 전체 제한을 파악할 수 있습니다. 이 글의 사례는 기존 세션 로그인 상태에서 제공하는 사용자 전환 흐름을 중심으로 설명했습니다. 이 구현을 통해서는 원본 계정으로 전환 권한을 판단하고, 대상 계정으로 업무 권한을 구성한 뒤, 바뀐 컨텍스트를 세션에 저장합니다. 이 세 역할을 구분함으로써 일반 업무 API의 현재 사용자 조회 방식을 유지하면서 사용자 전환과 원본 계정 복귀를 구현할 수 있었습니다.
2026.11.04
기술이야기
Zenius로 공공 정보시스템의 안정성과 운영 효율을 높이는 4가지 방법
기술이야기
Zenius로 공공 정보시스템의 안정성과 운영 효율을 높이는 4가지 방법
공공 정보시스템의 안정적인 운영에 대한 요구가 높아지고 있습니다. 「행정기관 및 공공기관 정보시스템 안정성 고시」 시행에 따라 각 기관은 점검과 모니터링, 장애 대응 체계를 구체적인 기준에 맞춰 운영해야 합니다. 이 과정에서 필요한 업무를 빠짐없이 수행하면서 담당자의 부담을 줄이는 방법도 중요해지고 있습니다. 앞선 글 「공공 정보시스템 예방점검, 반드시 알아야 할 4가지 핵심」에서 살펴본 것처럼, 예방점검은 시스템 등급에 맞게 수행하고 발견한 문제의 조치와 재점검까지 이어져야 합니다. 여기에 더해 서버·WEB·WAS·DB 등 주요 구성요소를 지속적으로 모니터링하고, 운영환경에 맞게 임계치를 관리하는 것도 중요합니다. 점검 사이에 발생하는 이상징후를 파악하고 담당자에게 제때 전달해야 신속한 대응으로 이어질 수 있기 때문입니다. 브레인즈컴퍼니는 Zenius GPM으로 예방점검 실행과 결과·이력·보고서 관리를, Zenius EMS로 인프라 모니터링과 성능 분석, 이벤트 통보 및 장애·조치 이력관리를 지원합니다. 그렇다면 이러한 기능을 실제 업무에 활용해 안정성과 운영 효율을 어떻게 높일 수 있을까요? 점검 자동화부터 이상징후 파악, 대응 우선순위 판단과 반복 문제 개선까지 네 가지로 나눠서 살펴보겠습니다. 1. 점검 실행과 결과 정리를 자동화해 반복 업무 줄이기 점검 대상이 많아지면 시스템마다 접속해 상태를 확인하고 결과를 기록하는 데 상당한 시간이 걸립니다. 점검이 끝난 뒤에는 누락된 점검 결과를 확인하고 보고 자료도 정리해야 합니다. 이런 작업을 매번 수작업으로 처리하면, 정작 발견된 이상징후를 분석하고 조치하는 데 충분한 시간을 쓰기 어렵습니다. Zenius GPM을 활용하면 정해진 일정에 따라 점검을 자동으로 실행하고, 설정한 기준으로 결과를 판정할 수 있습니다. 항목별 명령어와 판단 기준을 운영환경에 맞게 설정할 수 있어 시스템마다 다른 점검 방법을 반영할 수 있습니다. 자동으로 판정하기 어려운 항목은 담당자가 결과를 검토한 뒤 정상 여부를 직접 지정할 수 있습니다. 자동화를 적용하면 담당자는 값을 수집하고 옮겨 적는 작업을 줄이고, 추가 확인과 조치가 필요한 결과에 집중할 수 있습니다. 점검 실행: 대상과 일정을 설정해 예약한 시간에 점검을 수행하므로, 매번 직접 접속해 명령어를 실행하는 작업을 줄일 수 있습니다. 결과 확인: 항목별 판정 결과를 바탕으로 비정상 항목과 담당자의 검토가 필요한 항목을 확인할 수 있습니다. 자료 정리: 점검 현황과 상세 결과 조회, 엑셀 내보내기, 보고서 생성 기능을 활용해 자료 취합과 재입력의 부담을 줄일 수 있습니다. 이렇게 확보한 결과는 기관의 점검·보고 절차에 맞게 활용해야 합니다. 점검 대상과 수행 일시, 판단 결과에 더해 추가 확인과 조치가 필요한 내용까지 정리하면 후속 업무로 연결하기 쉽습니다. 성능점검 실적을 평가 증적으로 제출하는 경우에는 해당 평가에서 요구하는 계획서와 결과서, 보고 문서도 함께 갖춰야 합니다. 제품에서 생성한 자료를 활용하되, 기관이 실제로 무엇을 점검하고 어떤 결론을 내렸는지 설명할 수 있어야 합니다. [Zenius GPM 일상 점검현황 및 Excel 내보내기 화면] 다만 접속에 실패했거나 정상 여부를 판단하기 어려운 항목은 담당자가 별도로 확인해야 합니다. 이상이 발견된 대상과 점검하지 못한 대상을 구분해야 필요한 조치와 재점검을 빠뜨리지 않을 수 있습니다. 자동화의 범위를 넓히는 것과 함께, 담당자가 확인할 항목을 명확히 정하는 것이 중요합니다. 2. 상시 모니터링으로 점검 사이의 이상징후 빠르게 파악하기 오전 점검에서 정상이었던 시스템도 이용자가 몰리거나 배치 작업이 시작되면 부하가 높아질 수 있습니다. 다음 점검 전에 정상으로 돌아왔다면 정기 점검 기록만으로는 그사이에 발생한 문제를 놓치기 쉽습니다. 특히 야간이나 특정 시간대에 작업이 집중되는 시스템은 점검 시간 외에도 성능과 상태 변화를 살펴야 합니다. Zenius EMS를 활용하면 CPU·메모리·디스크 등 자원 사용량이 어떻게 달라졌는지 살펴보고, 설정한 기준에 따라 발생한 이벤트를 확인할 수 있습니다. 이벤트 화면에서 해당 대상의 모니터링 상세보기로 바로 이동할 수 있어, 알림을 확인한 뒤 관련 정보를 다시 찾아보는 과정도 줄일 수 있습니다. 이상이 감지됐을 때는 다음 순서로 확인할 수 있습니다. 발생 시점 확인: 성능 추이와 이벤트를 살펴보며 언제부터 상태가 달라졌는지 확인합니다. 현재 상태 확인: 해당 대상의 모니터링 상세보기에서 이상이 계속되고 있는지, 다른 지표에도 변화가 있는지 살펴봅니다. 필요한 항목 재점검: 추가 확인이 필요하면 담당자가 GPM의 즉시 실행 기능으로 관련 항목을 다시 점검합니다. 예를 들어 오전 점검에서는 디스크 여유 공간이 충분했지만, 이후 오류 로그가 급격히 쌓이면서 사용률이 높아질 수 있습니다. EMS에서 사용량 변화와 관련 이벤트를 살펴보면 다음 정기 점검 전에 로그 증가 원인을 조사하고, 저장 공간 확보 등 필요한 조치를 검토할 수 있습니다. 사용률이 얼마나 빠르게 높아지는지도 함께 확인하면 대응이 시급한지 판단하는 데 도움이 됩니다. [Zenius EMS 이벤트 화면 내 모니터링 상세보기] 발견한 이상이 실제 대응으로 이어지려면 담당자에게 제때 전달돼야 합니다. EMS는 대응이 지연될 경우 설정된 수신자나 그룹에 순차적으로 알리는 3단계 에스컬레이션을 지원합니다. 기관의 근무·당직체계에 맞춰 단계별 수신자와 통보 방식을 설정하고, 알림을 받은 담당자가 상태를 확인하고 조치할 절차도 함께 마련해야 합니다. 수집 주기와 알림 기준도 실제 운영 상황에 맞아야 합니다. 수집 간격이 길면 짧게 발생하는 이상을 놓칠 수 있고, 정상적인 배치 작업에도 경고가 반복되면 중요한 알림을 구분하기 어렵습니다. 업무 시간대와 평소 사용량을 고려해 설정하고 조정해야 합니다. 상시 모니터링의 효과는 이상 감지와 담당자의 대응이 연결될 때 높아집니다. 안정성 점검 자료에서 설명하는 ‘24시간 상시관제’는 유인관제를 의미하므로, 모니터링 도구와 알림 기능에 더해 이를 확인하고 대응할 운영체계를 갖춰야 합니다. 3. 점검 결과와 성능 추이를 분석해 대응 우선순위 정하기 점검에서 여러 항목이 비정상으로 확인됐다면 어떤 문제부터 조치할지 정해야 합니다. 이때 점검 기준을 초과한 정도만으로 대응 순서를 정하기는 어렵습니다. 일시적으로 높아졌다가 회복된 경우와 높은 상태가 계속되는 경우는 대응이 달라야 하며, 실제 업무에 영향을 주고 있는지도 함께 확인해야 합니다. Zenius GPM의 점검결과 상세 화면에서는 이상이 확인된 대상과 항목, 세부 결과를 살펴볼 수 있습니다. 여기에 EMS에서 수집한 점검 전후의 성능과 이벤트를 함께 확인하면, 해당 시점에만 발생한 현상인지 지속적인 문제인지 판단하는 데 도움이 됩니다. EMS는 성능 조회와 기간 비교, 일별·시간별 분석, 이벤트 분석 등을 지원하므로 과거의 비슷한 시간대와 비교해 평소와 다른 변화도 살펴볼 수 있습니다. 예를 들어 CPU 사용률이 기준을 초과했더라도 예정된 배치 작업 중 잠시 상승했다가 회복됐다면, 작업이 끝난 뒤에도 높은 사용률과 응답 지연이 이어지는 경우와는 구분해야 합니다. 같은 시점의 메모리·디스크 지표와 관련 이벤트까지 살펴보면 추가로 확인할 대상을 좁힐 수 있습니다. 대응 우선순위를 정할 때는 다음 내용을 함께 확인해야 합니다. 지속 시간: 일시적으로 발생한 뒤 회복됐는지, 현재도 이상이 이어지고 있는지 확인합니다. 반복 여부: 특정 시간대나 작업이 실행될 때 같은 현상이 되풀이되는지 살펴봅니다. 관련 지표와 이벤트: 같은 시점에 다른 자원의 성능도 달라졌는지, 관련 이벤트가 발생했는지 확인합니다. 업무 영향: 응답 지연이나 처리 실패가 발생했는지, 영향을 받는 업무와 이용자 범위는 어느 정도인지 확인합니다. [Zenius GPM 점검결과 상세 및 항목별 결과 화면] 담당자가 확인할 때 이미 정상으로 돌아온 경우에는 장애 발생 당시의 기록이 중요합니다. EMS의 Snapshot 기능을 활용하면 서버·네트워크 장애 시점의 성능 정보를 살펴볼 수 있어, 현재 값만으로 파악하기 어려운 당시 상황을 분석하는 데 도움이 됩니다. 성능 지표는 실제 서비스 상태와 함께 살펴야 합니다. 짧은 부하라도 주요 업무의 처리 실패로 이어졌다면 우선 대응이 필요합니다. 자원 사용률이 정상이어도 애플리케이션이나 외부 연계에 문제가 있을 수 있으므로, 필요한 경우 관련 지표와 로그를 추가로 확인해야 합니다. 점검 결과와 성능 추이, 업무 영향을 함께 보면 즉시 조치할 문제와 더 지켜볼 항목을 구분할 수 있습니다. 기준 초과 정도뿐 아니라 지속 시간과 영향을 받는 업무를 근거로 대응 순서를 정하면, 한정된 인력과 시간을 시급한 문제에 집중할 수 있습니다. 4. 점검·조치 이력을 활용해 반복되는 운영 문제 개선하기 조치할 때마다 정상으로 돌아오더라도 같은 문제가 반복된다면 원인과 해결 방법을 다시 살펴야 합니다. 당장의 이상을 해소하는 데 그치면 담당자는 같은 작업을 되풀이하게 되고, 문제를 일으키는 운영 방식이나 자원 부족은 그대로 남을 수 있습니다. 반복 문제를 찾으려면 일정 기간의 점검 결과와 조치 내역을 함께 확인해야 합니다. 같은 대상에서 어떤 항목이 자주 비정상으로 판정됐는지, 발생 간격이 짧아지고 있는지, 조치 이후에도 같은 현상이 이어지는지 살펴보는 것입니다. Zenius GPM에서는 과거 점검 결과와 상세 내역을 조회할 수 있습니다. 여기에 EMS의 기간별 성능 분석을 활용하면 문제가 발생한 시점의 자원 사용량과 장기적인 변화 추이를 비교할 수 있습니다. 예를 들어 특정 배치 작업 때마다 메모리 부족이 반복된다면, 여러 작업의 실행 시간이 겹치는지 확인하고 애플리케이션의 메모리 사용 원인을 조사하거나 자원 증설을 검토할 수 있습니다. 누적된 자료는 다음과 같은 개선 작업에 활용할 수 있습니다. 반복 원인 조사: 자주 문제가 발생하는 대상과 항목을 찾아 관련 작업이나 설정을 확인합니다. 용량 계획: 사용량의 증가 추이를 바탕으로 자원 증설이 필요한지 검토합니다. 조치 효과 확인: 작업 전후의 성능과 재발 여부를 비교해 문제가 실제로 개선됐는지 확인합니다. 점검 기준 보완: 기존 점검 항목과 판단 기준이 현재 운영환경에 맞는지 검토합니다. 조치 효과를 비교하려면 작업 내용과 수행 시점도 기록돼 있어야 합니다. EMS의 Knowledge DB에서는 장애 유형과 처리 내역을 등록하고 조회할 수 있습니다. 이 기록을 점검 이력과 성능 데이터에 대조하면 이전 조치 이후 무엇이 달라졌는지, 효과가 없는 조치를 반복하고 있지는 않은지 살펴볼 수 있습니다. [Zenius EMS 장애 조치 이력 관리] 모니터링 임계치도 운영 데이터에 맞춰 관리해야 합니다. 안정성 기준은 A1~A3등급에 모니터링 임계치 설정과 연 1회 이상 최적화를 요구합니다. 다만 경고를 줄이려고 임계치부터 높이면 실제 문제를 놓칠 수 있으므로, 정상적인 업무 부하인지 성능 저하나 자원 부족이 이어지는 상황인지 먼저 확인해야 합니다. GPM의 점검 판정 기준을 바꿀 때도 사유와 적용 시점을 남기면, 결과가 좋아진 이유가 실제 개선 때문인지 기준 변경 때문인지 구분할 수 있습니다. 반복되는 문제가 개별 조치로 해소되지 않는다면 구조진단 필요성도 판단해야 합니다. 안정성 점검에서는 A1~A3등급 시스템의 구조진단 수행 여부뿐 아니라, 필요성을 판단할 기준이나 절차가 마련돼 있는지도 확인합니다. 점검 이력과 성능 추이, 조치 기록은 이러한 판단의 근거가 됩니다. 이를 바탕으로 개선 범위를 정하면 운영 절차 변경이나 자원 증설, 구조진단에 필요한 인력과 예산을 검토할 때도 활용할 수 있습니다. 공공 정보시스템의 안정성과 운영 효율을 높이려면 반복 작업을 줄이는 동시에, 점검과 모니터링으로 확보한 정보를 대응과 개선에 활용해야 합니다. 점검 사이의 변화를 놓치지 않고, 시급한 문제부터 조치하며, 같은 문제가 되풀이되는 원인을 살피는 과정이 함께 필요합니다. Zenius GPM은 점검 실행과 결과·이력·보고서 관리를, EMS는 성능과 이벤트 모니터링·분석을 지원합니다. 두 제품에서 확보한 정보를 함께 활용하면 추가 조사와 조치가 필요한 대상을 판단하고, 조치 이후의 변화까지 확인하는 데 도움이 됩니다. 현재 운영 업무에서 반복 작업이 많은 부분부터 확인해 보시기 바랍니다. 자동화로 확보한 시간을 이상징후 분석과 후속 조치에 활용하고, 누적된 기록을 다음 개선에 반영해 서비스 안정성을 높이고 운영 부담을 줄여 나가시기 바랍니다. [함께 읽으면 좋은 글] - 공공 정보 시스템 예방점검, 반드시 알아야 할 4가지 핵심 - Zenius GPM으로 범정부 예방점검 WAS 일상점검 체계 구성하는 방법
2026.10.30
기술이야기
네트워크 모니터링 시 기억해야 할 4가지
기술이야기
네트워크 모니터링 시 기억해야 할 4가지
네트워크 모니터링은 장비의 가동 여부와 자원 상태를 확인하는 데서 시작합니다. 하지만 장비가 정상적으로 동작한다고 해서 서비스 품질까지 보장되는 것은 아닙니다. 특정 인터페이스에 트래픽이 집중되거나 오류·폐기 패킷이 늘고, 일부 구간에서 지연이 발생하면 서비스 응답에도 영향을 줄 수 있습니다. 온프레미스와 클라우드, 가상화 환경이 함께 운영되면서 네트워크를 구성하는 자원과 연결 경로도 다양해지고 있습니다. 관리 대상이 실제 구성과 다르거나 장비별 지표를 따로 확인하면, 이상 징후를 발견해도 어떤 서비스가 영향을 받았는지 파악하기 어려울 수 있습니다. 따라서 네트워크 상태를 정확히 파악하려면 관리 대상과 연결 구조를 확인하고, 장비 상태와 트래픽·성능 변화를 서비스 영향과 함께 살펴야 합니다. 이번 글에서는 네트워크 모니터링을 장애 징후 확인과 원인 분석으로 연결하기 위해 점검해야 할 네 가지 기준을 구체적으로 알아보겠습니다. 1. 관리 대상과 서비스 연결 구조를 함께 파악합니다 네트워크 모니터링을 시작할 때는 먼저 어떤 자원을 관리할지 정해야 합니다. 라우터, 스위치, 방화벽, 회선 등 주요 장비를 파악하는 것은 기본입니다. 여기에 각 장비가 어떤 서비스와 연결되어 있는지, 서비스 요청이 어떤 경로를 거쳐 전달되는지까지 확인해야 장애의 영향 범위를 판단할 수 있습니다. 예를 들어 네트워크 스위치에 장애가 발생하면, 장비 간 연결 구조를 통해 해당 스위치에 연결된 하위 장비와 영향을 받는 네트워크 구간을 파악할 수 있습니다. 여러 장비에서 장애 알림이 연이어 발생하더라도 알림과 연결 관계를 함께 확인하면, 장애가 발생한 장비와 그로 인해 영향을 받은 범위를 구분하는 데 도움이 됩니다. 관리 대상에는 실제 운영 환경의 변화도 반영해야 합니다. 장비가 추가되거나 교체됐는데 모니터링 정보가 갱신되지 않으면 관제 화면과 실제 네트워크 구성이 달라질 수 있습니다. 가상화나 클라우드 환경을 운영한다면 물리 장비뿐 아니라 가상 네트워크와 논리적으로 구성된 연결도 살펴야 합니다. 모니터링 범위를 점검할 때는 다음 항목을 확인하는 것이 좋습니다. 핵심 서비스와 연결된 장비와 구간이 파악되어 있는가? 가상화·클라우드 환경을 포함해 필요한 자원이 관리 대상에 포함되어 있는가? 장비 추가·교체나 구성 변경이 모니터링 정보에 반영되어 있는가? 지표가 수집되지 않거나 관리 범위에서 빠진 구간은 없는가? 이처럼 관리 대상과 연결 관계를 최신 상태로 유지해야 이상 징후가 발생했을 때 영향 범위와 우선 점검 구간을 빠르게 좁힐 수 있습니다. 2. 장비 상태와 통신 품질을 함께 살펴봅니다 장비가 정상 상태라고 해서 네트워크를 이용하는 서비스도 정상이라고 단정할 수는 없습니다. CPU나 메모리 사용률이 안정적이어도 인터페이스 오류나 폐기 패킷이 발생할 수 있고, 특정 구간의 지연이나 패킷 손실이 사용자에게 서비스 응답 저하로 나타날 수 있습니다. 따라서 장비 가용성과 자원 사용률 외에도 통신 품질에 영향을 주는 지표를 함께 확인해야 합니다. 인터페이스 사용량: 어느 장비와 포트에 트래픽이 집중되는지 확인합니다. Error·Discard: 패킷 오류나 폐기가 늘어나는 구간이 있는지 살펴봅니다. 지연 시간·패킷 손실: 통신 품질 저하가 서비스 응답과 같은 시점에 나타나는지 비교합니다. 서비스 상태: 네트워크 지표의 변화가 실제 업무 시스템의 응답에 영향을 주는지 확인합니다. 이때 트래픽 사용량이 높다는 사실만으로 병목을 판단해서는 안 됩니다. 정상적인 서비스 처리 과정에서도 사용량은 높게 나타날 수 있기 때문입니다. 예를 들어 인터페이스 사용률이 높더라도 오류나 폐기 패킷이 늘지 않고 서비스 응답에 문제가 없다면, 곧바로 장애로 보기 어렵습니다. 반면 사용률이 높은 상태에서 오류 지표가 함께 증가하고 서비스 응답까지 느려졌다면 해당 구간을 우선 점검할 필요가 있습니다. 여러 지표를 같은 시간대에 비교하면 단순한 사용량 증가와 실제 품질 저하 가능성을 구분하는 데 도움이 됩니다. 장비 상태와 통신 품질, 서비스 응답을 함께 살펴야 어떤 변화가 운영에 영향을 주고 있는지 판단할 수 있습니다. 3. 현재 수치뿐 아니라 트래픽 추세와 용량을 확인합니다 특정 시점에 트래픽이 높다고 해서 반드시 장애가 발생하는 것은 아닙니다. 정기적인 백업이나 대용량 파일 전송, 시간대별 업무량 증가로 사용량이 일시적으로 높아질 수 있습니다. 반대로 현재 임계치 이내에 있더라도 트래픽이 계속 증가해 회선이나 장비의 용량 여유가 줄어들고 있을 수 있습니다. 현재 수치만으로는 평소와 다른 변화인지 판단하기 어려울 수 있습니다. 과거 추이와 비교할 때는 다음 항목을 함께 확인해 보세요. 같은 시간대나 요일에 반복되는 사용량 변화인지 예상하지 못한 시점에 급격히 증가했는지 증가가 일시적인지, 일정 시간 이상 지속되는지 특정 장비나 인터페이스에 사용량이 집중되는지 사용량 증가 추세와 비교해 용량 여유가 충분한지 트래픽이 반복적으로 높은 구간을 찾았다면 장비별 사용량을 비교한 뒤, 해당 장비의 인터페이스별 현황까지 확인해야 합니다. 그래야 전체 사용량이 많은 장비와 실제 트래픽이 집중된 연결 구간을 구분할 수 있습니다. 인터페이스 사용률에 오류·폐기 패킷 등 세부 지표를 함께 비교하면 병목 가능성을 더 구체적으로 판단할 수 있습니다. 사용량이 특정 시간대에 반복적으로 집중된다면 대용량 작업 일정을 조정할 수 있습니다. 지속적인 증가라면 회선이나 장비 증설을 검토하고, IP나 서비스 포트별로 사용량을 분석해 원인이 되는 통신을 확인할 수도 있습니다. (장비에서 인터페이스까지 분석 범위를 좁혀 병목 구간을 찾는 방법은 [네트워크 장비·인터페이스별 병목 분석 방법] 에서 자세히 확인할 수 있습니다.) 4. 알림을 원인 분석과 후속 조치로 연결합니다 모니터링 알림은 이상 징후를 알려주는 출발점입니다. 알림이 발생했다는 사실만으로는 어떤 서비스가 영향을 받았는지, 원인이 어느 구간에 있는지 알기 어렵습니다. 발생 시점의 장비 상태와 인터페이스 지표, 트래픽 흐름, 연결 관계를 함께 확인할 수 있어야 점검 범위를 좁힐 수 있습니다. 알림이 발생하면 주로 다음 순서로 살펴보는 것이 일반적입니다. 영향 범위 확인: 어떤 서비스와 사용자에게 문제가 나타났는지 확인합니다. 관련 구간 점검: 해당 서비스와 연결된 장비와 인터페이스의 상태를 살펴봅니다. 지표 변화 비교: 같은 시간대의 트래픽, 오류·폐기 패킷, 지연 등 관련 지표를 비교합니다. 변경 이력 확인: 최근 네트워크 구성이나 설정이 바뀌었는지 확인합니다. 장비 상태만으로 원인을 찾기 어렵다면 트래픽 흐름과 세부 성능 지표를 함께 살펴야 합니다. NMS·TMS·NPM 데이터를 연계하면 장비 상태부터 트래픽 흐름, 성능 저하 구간까지 단계적으로 확인해 원인 분석 범위를 좁힐 수 있습니다 (자세한 내용은 [Zenius NMS·TMS·NPM을 활용한 네트워크 트래픽 분석]에서 확인 수 있습니다.) 알림의 우선순위도 서비스 영향도에 따라 정해야 합니다. 모든 알림을 같은 수준으로 처리하면 서비스 영향이 큰 장애 징후가 다른 알림에 묻힐 수 있습니다. 영향받는 서비스와 사용자 범위, 장애가 확산될 가능성을 고려해 먼저 확인할 항목을 구분해야 합니다. 조치가 끝난 뒤에는 원인과 대응 내용을 이력으로 남겨야 합니다. 같은 문제가 반복될 때 과거 발생 시점의 지표와 조치 결과를 비교하면 진단 시간을 줄일 수 있습니다. 알림을 확인하는 데서 그치지 않고 분석과 조치, 이력 관리까지 이어져야 모니터링 정보가 다음 대응에도 활용됩니다. 네트워크 모니터링은 상태를 확인하고 알림을 받는 데서 끝나지 않습니다. 어떤 구간에서 변화가 시작됐는지, 그 변화가 서비스에 어떤 영향을 주는지 파악해야 원인을 좁히고 적절한 조치를 선택할 수 있습니다. 그러려면 모니터링 대상과 지표가 실제 운영 환경을 제대로 반영하는지, 알림이 담당자의 확인과 대응으로 이어지는지 지속적으로 점검해야 합니다. 모니터링 정보를 운영 판단에 활용할 때 네트워크 문제에 더 빠르게 대응하고 안정적인 서비스 운영을 뒷받침할 수 있습니다. 자주 묻는 질문(FAQ) Q. 네트워크 모니터링 범위는 어디까지 설정해야 하나요? 라우터·스위치·방화벽 같은 장비뿐 아니라 장비 간 연결에 사용되는 인터페이스와 회선까지 살펴야 합니다. 클라우드나 가상화 환경을 운영한다면 논리 네트워크도 관리 범위에 포함하고, 핵심 서비스와 어떤 자원이 연결되어 있는지 함께 파악해야 장애 영향 범위를 판단하기 쉽습니다. Q. 장비가 정상인데도 네트워크 문제가 발생할 수 있나요? 가능합니다. 장비 자체는 정상적으로 작동해도 특정 인터페이스의 사용량이 높거나 오류·Discard가 늘면 통신 품질이 저하될 수 있습니다. 장비의 가동 상태만으로 판단하지 말고, 서비스와 연결된 구간의 트래픽과 성능 지표를 함께 확인해야 합니다. Q. 트래픽 사용량이 높으면 병목으로 봐야 하나요? 반드시 그렇지는 않습니다. 대용량 작업이나 서비스 이용 증가로 일시적으로 트래픽이 높아질 수 있기 때문입니다. 사용률이 높은 상태가 지속되거나 반복되는지, 업무 응답 지연이나 오류 지표 변화가 동반되는지를 함께 살펴 실제 병목 가능성을 판단해야 합니다. Q. NMS에서 확인한 정보만으로 원인을 찾기 어려울 때는 어떻게 해야 하나요? NMS로 트래픽이 집중된 장비와 인터페이스를 확인한 뒤, 원인 분석에 필요한 수준까지 데이터를 확장해 살펴볼 수 있습니다. 어떤 서비스나 호스트에서 트래픽이 발생했는지 확인하려면 트래픽 흐름이나 패킷 분석 정보를 함께 검토하는 것이 도움이 됩니다. 함께 보면 좋은 글 네트워크 모니터링에서 Zenius가 가지는 3가지 강점 네트워크 모니터링 툴로 장비·인터페이스별 병목 구간 찾는 방법 네트워크 모니터링 툴 Zenius NMS에서 Private OID로 기능 확장하기 복잡한 네트워크 트래픽, Zenius NMS·TMS·NPM으로 정확하게 분석하기
2026.10.19
기술이야기
하이브리드 클라우드와 쿠버네티스 모니터링 시 반드시 고려해야 할 4가지
기술이야기
하이브리드 클라우드와 쿠버네티스 모니터링 시 반드시 고려해야 할 4가지
많은 기업과 기관은 퍼블릭 클라우드와 프라이빗 클라우드(또는 온프레미스)를 병행하는 하이브리드 클라우드 환경을 도입하고 있으며, 그 위에서 쿠버네티스(Kubernetes, K8s)를 활용해 수십 개의 마이크로서비스를 독립적으로 배포하고 확장하는 방식을 채택하고 있습니다. 이러한 구조는 높은 유연성과 확장성을 제공하지만, 동시에 운영 복잡성을 크게 증가시키는 특징이 있습니다. 이에 따라 다양한 모니터링 도구와 대시보드가 활용되고 있지만, 실제로 장애가 발생하면 원인을 파악하기까지 여전히 많은 시간이 소요됩니다. 데이터 자체는 충분히 수집되고 있으나, 사용자 요청에서 애플리케이션과 컨테이너, 네트워크, 클라우드 리소스에 이르는 흐름이 하나의 시간축으로 유기적으로 연결되지 않기 때문입니다. 결국 각 지표가 분절된 조각으로만 보이면서, 문제의 전반적인 맥락을 명확하게 파악하기 어렵게 됩니다. 따라서 이제 모니터링의 목적은 단순한 데이터 수집을 넘어야 합니다. 수집된 데이터를 유기적으로 연결된 관점에서 해석하고, 복잡한 분산 환경의 특성을 반영하며, 탐지 이후에는 신속하게 조치와 대응으로 이어질 수 있는 체계를 마련하는 것이 중요합니다. 그렇다면 하이브리드 클라우드와 쿠버네티스 환경에서 모니터링을 수행할 때, 구체적으로 어떤 부분을 반드시 고려해야 할까요? 지금부터 그 핵심 요소들을 차례로 살펴보겠습니다. 하이브리드 클라우드와 쿠버네티스 모니터링, 반드시 고려해야 할 4가지 1) End-to-End Observability로 장애 원인을 빠르게 찾을 수 있어야 한다 모니터링은 사용자 경험에서 시작해 애플리케이션, 컨테이너와 노드, 네트워크, 그리고 클라우드 리소스까지 하나의 흐름으로 이어져야 합니다. 예를 들어 사용자가 웹 애플리케이션에서 지연을 겪는다면, 해당 요청의 트레이스를 열어 어느 구간에서 지연이 발생했는지 확인하고, 같은 시각의 CPU·메모리·입출력(IO) 사용량과 데이터베이스나 메시지 큐 같은 클라우드 매니지드 서비스의 상태를 함께 살펴야 합니다. 이렇게 해야 단순히 “느리다”라는 현상에서 멈추는 것이 아니라, “어떤 서비스의 어떤 호출이 병목이며, 어떤 인프라 자원이 영향을 주었는가”라는 구체적 결론으로 이어질 수 있습니다. 이를 위해서는 데이터가 일관된 방식으로 연결되어야 합니다. 트레이스 식별자(Trace ID)와 서비스·환경 태그 같은 공통 메타데이터가 전체 수집 계층에 적용되어야 하며, 로그·메트릭·트레이스는 이 기준을 통해 즉시 상관 분석이 가능해야 합니다. 화면 구성도 마찬가지입니다. 서비스 개요에서 시작해 트랜잭션 세부, 컨테이너와 노드 지표, 네트워크와 클라우드 리소스로 자연스럽게 이어지는 드릴다운 구조가 마련되어야 운영자가 불필요하게 여러 화면을 오가며 시간을 낭비하지 않습니다. 또한 사용자 경험 지표를 백엔드 데이터와 연결하는 과정도 필요합니다. 실제 사용자 모니터링(RUM, Real User Monitoring) 기능 등을 통해 웹 성능의 핵심 지표를 함께 확인해야 합니다. LCP(Largest Contentful Paint·핵심 내용이 화면에 표시되기까지의 시간), INP(Interaction to Next Paint·사용자 입력에 대한 반응성), CLS(Cumulative Layout Shift·레이아웃 안정성)와 같은 지표를 백엔드 트레이스와 매칭하면, 지연의 원인이 서버 처리인지, 네트워크 왕복 시간인지, 외부 리소스 때문인지 명확히 설명할 수 있습니다. 2) 쿠버네티스 주요 이벤트를 실시간 성능 데이터와 함께 볼 수 있어야 한다 쿠버네티스는 끊임없이 변화하는 동적 분산 시스템입니다. Pod는 생성과 종료를 반복하고, 오토스케일러는 순간적인 부하에 따라 리플리카 수를 조정하며, 롤링 업데이트와 롤백은 하루에도 여러 번 발생합니다. 이런 특성 때문에 단순히 CPU와 메모리 사용률 같은 정적 지표만 확인해서는 문제를 제대로 이해하기 어렵습니다. 쿠버네티스 환경에서는 반드시 이벤트와 성능 지표를 같은 시간축에서 함께 해석해야 합니다. 예를 들어 특정 시점에 오류율이 급증했다면, 원인은 단순한 리소스 부족일 수도 있습니다. 그러나 API Server 지연이나 etcd 병목, 혹은 롤링 업데이트 과정에서 트래픽 전환이 매끄럽지 않아 발생한 문제일 가능성도 있습니다. 만약 Pod 재시작이나 CrashLoopBackOff 이벤트가 성능 저하와 같은 시점에 발생했다면, 이는 추측이 아니라 근거 있는 원인 분석으로 이어질 수 있습니다. 또한 서비스 간 통신에서 병목을 찾으려면 서비스 메쉬 지표나 eBPF 기반 네트워크 관측이 효과적입니다. 이들은 동서 트래픽의 RTT, 오류율, 지연 분포를 보여주어 호출 경로상의 문제 지점을 명확히 드러냅니다. 여기에 HPA 동작이나 롤백 시점을 성능 지표와 함께 기록하면, 배포가 실제 성능 저하의 원인이었는지도 빠르게 확인할 수 있습니다. 결국 쿠버네티스 모니터링은 지표와 이벤트를 분리해 보는 것이 아니라, 하나의 시간선에서 연결해 해석해야 합니다. 그래야 단순히 “문제가 있다”라는 수준에 머무르지 않고, “이 시점, 이 이벤트, 이 서비스가 원인이다”라는 실행 가능한 결론으로 이어질 수 있습니다. 3) 클라우드 계정·리전·비용·보안을 하나의 기준으로 관리할 수 있어야 한다 하이브리드 클라우드는 유연성을 제공하지만, 동시에 운영 복잡성과 관리 부담을 크게 높입니다. 사업자마다 지표 체계와 콘솔이 다르고, 계정과 리전이 분산되면 운영자는 조각난 정보를 이어 붙이는 데 많은 시간을 소모하게 됩니다. 이러한 문제를 줄이려면 반드시 메타데이터 규칙을 정의하고 이를 일관되게 적용해야 합니다. 클라우드 계정과 리전 인벤토리는 자동으로 동기화되어야 하며, 모든 리소스에는 팀·서비스·환경 정보가 태그로 부여되어야 합니다. 비용, 성능, 가용성 지표는 이 태그를 기준으로 정렬·비교되어야 하며, 이를 통해 특정 서비스나 팀 단위의 문제를 빠르게 좁혀갈 수 있습니다. 비용 관리 또한 단순히 총액 확인을 넘어 예산·예측·이상 비용 감지까지 하나의 화면에서 제공되어야 실제 운영과 의사결정에 도움이 됩니다. 보안 역시 운영과 별도로 다루지 않고 같은 시각에서 관리해야 합니다. 퍼블릭 버킷 노출, 과도한 보안그룹 개방, 장기간 미사용 액세스 키와 같은 항목은 운영 대시보드에 함께 표시되어야 하며, 이를 통해 비용·성능·보안을 종합적으로 고려한 균형 잡힌 결정을 내릴 수 있습니다. 또한 재해복구 관점에서는 리전 간 지표 정합성과 복구 목표치(RTO, Recovery Time Objective·복구 시간 목표 / RPO, Recovery Point Objective·복구 시점 목표) 달성 여부를 주기적으로 점검해야 합니다. 이러한 데이터가 체계적으로 관리될 때 실제 장애 상황에서도 신속하게 대응할 수 있습니다. 결국 하이브리드 클라우드 모니터링은 각 사업자의 시스템을 따로따로 보는 것이 아니라, 하나의 기준과 규칙으로 통합 관리해야만 진정한 효과를 발휘합니다. 4) 운영 자동화와 알림 체계가 효과적으로 갖춰져 있어야 한다 모니터링의 목적은 데이터를 보여주는 것이 아니라 문제를 신속히 해결하는 데 있습니다. 따라서 알림 체계는 단순히 많은 경고를 쏟아내는 것이 아니라, 운영자가 즉시 판단하고 대응할 수 있을 만큼 충분한 정보를 담아야 합니다. 정적 임계치만으로는 환경 변화를 따라가기 어렵습니다. 시스템은 정상 상태를 스스로 학습해 기준선을 조정할 수 있어야 하며, 유사한 성격의 이벤트는 상관관계 분석을 통해 하나의 사건으로 묶여야 합니다. 이렇게 해야 알림 소음을 줄이고, 운영자가 진짜 중요한 신호에 집중할 수 있습니다. 알림은 단순한 메시지가 아니라 증거를 함께 제공해야 합니다. 예를 들어 “CPU 사용률 초과”라는 경고만으로는 부족합니다. 같은 시점의 로그, 트레이스 링크, 최근 배포 이력, 리소스 스냅샷 등이 함께 제시되어야 운영자가 알림에서 곧바로 확인과 조치로 이어질 수 있습니다. 전달 방식 또한 중요합니다. 메신저 알림이나 모바일 푸시처럼 실제 대응이 이루어지는 채널을 사용해야 하며, 에스컬레이션은 시간과 역할에 따라 명확히 정의되어야 합니다. 교대 근무 체계와 연동된 프로세스까지 갖춰져야 운영 공백을 최소화할 수 있습니다. 궁극적으로는 탐지 → 증거 수집 → 조치 → 복구 확인까지 이어지는 과정이 표준 절차로 자리 잡아야 합니다. 사건 종료 후에는 포스트모템이 자동 기록되어 재발 방지로 이어져야 하며, 이러한 체계가 반복될수록 평균 대응 시간(MTTA)과 평균 복구 시간(MTTR)은 꾸준히 단축됩니다. 운영 자동화와 알림 체계가 제대로 작동할 때, 모니터링은 단순한 관찰을 넘어 실질적인 운영 성과로 연결됩니다. 클라우드와 쿠버네티스 환경은 앞으로도 더 확장되고 다양해질 것입니다. 서비스는 더 많은 리전에 걸쳐 배포되고, 애플리케이션은 더 많은 마이크로서비스로 쪼개지며, 운영자는 더 많은 데이터와 알림에 둘러싸이게 될 것입니다. 이 상황에서 단편적인 모니터링만으로는 대응 속도와 품질을 보장할 수 없습니다. 지금 필요한 것은 데이터를 연결된 시각으로 읽어내고, 이벤트와 지표를 하나의 시간선에서 해석하며, 클라우드 리소스를 일관된 규칙으로 관리하고, 알림을 실제 조치로 이어주는 운영 체계입니다. 이 네 가지는 기술적으로는 별개의 영역처럼 보이지만, 실제 운영에서는 긴밀히 맞물려 작동해야만 효과가 있습니다. 결국 모니터링의 목표는 단순히 상태를 보여주는 것이 아니라, 문제 해결과 서비스 안정성을 보장하는 데 있습니다. 하이브리드 클라우드와 쿠버네티스 환경에서 이 네 가지 관점을 충실히 반영한다면, 복잡성을 줄이고, 장애 대응 시간을 단축하며, 미래의 확장성까지 확보할 수 있습니다.
2025.09.25
기술이야기
복잡한 네트워크 트래픽, Zenius NMS·TMS·NPM으로 정확하게 분석하기
기술이야기
복잡한 네트워크 트래픽, Zenius NMS·TMS·NPM으로 정확하게 분석하기
오늘날 기업의 IT 인프라는 클라우드, 가상화, 마이크로서비스(Kubernetes)로 빠르게 전환되고 있습니다. 서비스는 점점 더 세분화되고 연결 구조는 복잡해지면서, 단일 지점에서 발생한 문제라도 전체 서비스 품질에 즉각적인 영향을 미칠 수 있습니다. 그러나 기존의 네트워크 모니터링 방식은 주로 장비 단위에 국한되어 있어, 트래픽 증가나 지연 같은 현상이 발생했을 때 원인을 신속하고 정확하게 파악하기가 쉽지 않습니다. 이러한 환경에서는 단순한 장비 레벨 모니터링을 넘어, 인터페이스 → 트래픽 흐름 → 프로세스 단위까지 네트워크를 다각도로 관찰하는 체계가 필요합니다. Zenius의 NMS, TMS, NPM은 각각의 레벨에서 데이터를 수집·분석함으로써, 네트워크 전반을 단계적으로 추적하고 문제 지점을 빠르게 규명할 수 있도록 돕습니다. 이번 글에서는 세 가지 솔루션을 연계하여 실제 운영 환경에서 어떻게 트래픽 원인을 분석할 수 있는지를 구체적으로 살펴보겠습니다. Zenius NMS·TMS·NPM: 각 솔루션의 특징과 차이점 Zenius NMS, TMS, NPM의 정의와 역할을 먼저 정리해보겠습니다. 각각의 솔루션은 모두 네트워크 트래픽을 모니터링하고 분석하는 기능을 제공하지만, 적용되는 관점과 수집 방식, 그리고 활용 목적에서 분명한 차이가 있습니다. Zenius NMS(Network Management System)는 SNMP를 기반으로 라우터, 스위치 등 네트워크 장비의 물리 인터페이스 관점에서 트래픽을 모니터링합니다. 이를 통해 장비별 포트 사용량, bps/pps, 에러 발생 여부 등을 실시간으로 확인할 수 있으며, 네트워크 전반의 기본적인 상태를 빠르게 파악하는 데 유용합니다. 반면 Zenius TMS(Traffic Management System)는 NetFlow, sFlow, IPFIX와 같은 Flow 데이터를 활용하여, 네트워크를 경유하는 IP·Port 단위 트래픽 흐름을 분석합니다. 스위치를 경유하는 트래픽에 대해 bps/pps와 같은 기본 지표를 확인할 수 있을 뿐 아니라, 애플리케이션별·서비스별·포트별로 트래픽을 분류하고 TopN 분석을 제공하기 때문에, 백본이나 라우터 구간에서 어떤 서비스가 대역폭을 가장 많이 사용하는지 직관적으로 파악할 수 있습니다. 마지막으로 Zenius NPM(Network Performance Monitoring)은 eBPF 기술을 기반으로 서버 및 컨테이너 환경의 커널 레벨 통신을 모니터링합니다. 단순 트래픽량뿐만 아니라 Latency, RTT, Jitter, Retransmit 등 정밀한 성능 지표까지 수집할 수 있어, Kubernetes나 MSA 기반 서비스처럼 복잡한 구조에서 세밀한 원인 분석이 가능합니다. 정리하자면, NMS는 장비·인터페이스 레벨, TMS는 네트워크 경로·서비스 레벨, NPM은 서버·프로세스 레벨에서 각각 네트워크를 해석합니다. 이 세 가지를 유기적으로 결합하면, 물리적 인터페이스 → 네트워크 경로 → 커널 기반 통신까지 다층적으로 추적할 수 있어, 복잡한 네트워크 환경에서 발생하는 트래픽 문제를 효과적으로 해결할 수 있습니다. 이제 각 솔루션이 실제로 어떻게 연계되어 활용되는지, 구체적인 기능 구성 및 분석 절차를 하나씩 살펴보겠습니다. NMS·TMS·NPM 기반 트래픽 분석 기능 구성 및 확인 절차 본격적으로 NMS·TMS·NPM 기반 트래픽 분석 절차를 살펴보겠습니다. 이번 사례는 쿠버네티스(K8s) 기반 WAS 서비스의 트래픽 흐름을 추적하며, 각 구간을 어떤 방식으로 점검할 수 있는지를 단계별로 살펴보겠습니다. [Step 1] 운영환경과 트래픽 흐름 구간 확인 먼저 운영환경의 기본 구성도를 확인하고 분석 대상이 되는 구간을 정리합니다. 본 사례에서는 DB POD → WAS POD → Worker Node → 내부 L3 → 백본 → 방화벽으로 이어지는 흐름을 점검 대상으로 삼습니다. 이러한 흐름을 명확히 정의해두면 이후 어떤 도구와 지표를 중점적으로 확인해야 할지 쉽게 구분할 수 있습니다. [Step 2] 구간별 모니터링 체계 구성 다음으로 각 구간을 어떤 방식으로 수용하고 분석할지 체계를 구성합니다. - 내부 L3, 백본, 방화벽은 SNMP를 통해 NMS에 연계하여 인터페이스 단위 트래픽을 수집합니다. - 백본은 NetFlow, sFlow 등의 Flow 데이터를 TMS에 수용해 애플리케이션 및 서비스 흐름을 분석합니다. - Worker Node는 Agent 기반으로 NPM에 연결해 POD 간 세밀한 통신 현황을 추적합니다. 이렇게 구성하면 서버, 네트워크 장비, 서비스 경로까지 계층별로 입체적인 모니터링이 가능합니다. [Step 3] 구간별 상세 분석 ① POD ↔ WAS POD DB POD와 WAS POD 사이의 통신은 [NPM > 모니터링 > 트래픽 > View, 필터 조건 검색] 경로를 통해 확인합니다. 여기서 IP와 Port를 기준으로 필터링하면, 해당 세션의 트래픽량뿐 아니라 Latency, RTT, Jitter, Retransmit 같은 세밀한 성능 지표를 함께 살펴볼 수 있습니다. 또한, [NPM > 모니터링 > 트래픽현황 > View, 필터 조건 검색] 메뉴를 이용하면 DB POD Port를 기준으로 실제 트래픽 흐름이 어떻게 연결되는지를 시각적으로 파악할 수 있습니다. ② WAS POD ↔ Worker Node ↔ 내부 L3 그다음에는 [NPM > 모니터링 > 트래픽현황] 화면에서 Worker Node 전체 기준으로 트래픽을 점검합니다. 이 과정에서는 상위 트래픽 발생 호스트, 송수신 바이트, Latency, Jitter 추이를 시간대별로 확인할 수 있어, 특정 시점에서 발생한 지연 현상을 이벤트와 연관 지어 분석하기에 적합합니다. ③ Worker Node ↔ 내부 L3 내부 L3 구간은 [NMS > 모니터링 > 장비 > 인터페이스] 메뉴에서 확인합니다. bps, pps, 에러 발생 여부 같은 항목을 중심으로 살펴보면 링크의 안정성과 과부하 여부를 빠르게 점검할 수 있습니다. 또한, [NMS > 모니터링 > 성능 > 인터페이스] 메뉴를 활용하면 시간대별 bps/pps 그래프를 통해 트래픽 패턴 변화를 확인할 수 있으며, 이는 NPM에서 관측한 Latency나 Jitter 지표와 교차 검증하는 데 도움이 됩니다. ④ 내부 L3 ↔ 백본 ↔ 방화벽 마지막으로 백본 구간은 TMS를 통해 흐름을 분석합니다. [TMS > TopN > 어플리케이션] 메뉴에서 HTTPS, PostgreSQL 등 주요 애플리케이션별 트래픽 분포를 확인할 수 있으며, [TMS > TopN > 트래픽, Port] 화면에서는 IP와 Port를 기준으로 어떤 서비스가 대역폭을 점유하고 있는지 빠르게 파악할 수 있습니다. [ TMS > TopN > 트래픽, Port ] IP, Port 등 다양한 기준의 백본 경유 트래픽 분석 결국, NPM은 POD·서버 간 세밀한 지연과 통신 성능을, NMS는 네트워크 장비 인터페이스 단위 안정성을, TMS는 서비스 및 애플리케이션 흐름을 각각 보여줍니다. 이렇게 다층적인 분석을 통해, 단일 구간이 아닌 전체 서비스 경로를 종합적으로 추적할 수 있으며, 이는 재현이 어려운 네트워크 장애 원인 파악에 큰 도움이 됩니다. 활용 예시 “특정 Worker Node 트래픽 급증” 원인 추적하기 쿠버네티스(K8s) 환경의 서비스는 일반적으로 다수의 POD가 상호 연결되어 하나의 서비스를 제공합니다. 이러한 구조에서는 특정 Worker Node의 트래픽이 급격히 증가했을 때, 기존의 일반 모니터링 도구(SMS) 만으로는 증가 원인을 정확히 분석하기 어렵습니다. SMS는 대개 NIC 단위 트래픽 수준까지만 보여주기 때문입니다. 따라서 Zenius NPM을 활용해 OS(커널) 관점에서 IP·Port 기준의 세밀 분석을 수행해야만, 어떤 POD·세션·포트가 원인인지 구체적으로 밝혀낼 수 있습니다. 1) NPM으로 포트/세션 단서 포착 먼저 [NPM > 모니터링 > 트래픽 > View, 필터 조건 검색]에서 문제의 Worker Node를 기준으로 플로우 목록을 정렬합니다. 다수의 POD에서 동일 포트(예: 8081) 로 통신하는 패턴이 확인되면, 수집 트래픽 증가 가능성이 높습니다. → 8081은 Zenius APM 데이터 수집 포트이므로, APM 수집량 증가에 따른 네트워크 사용량 상승을 1차 가설로 설정합니다. 2) NPM 트래픽 맵으로 대상·방향 확정 다음으로 [NPM > 모니터링 > 트래픽현황 > View, 필터 조건 검색]에서 RemotePort = 8081로 필터링합니다. 트래픽 맵을 통해 어떤 POD들이 8081 수집 지점으로 트래픽을 보내는지와 연결 방향을 직관적으로 확인할 수 있습니다. 본 사례에서는 4개의 POD에서 동일 포트로 집중되는 흐름이 나타났고, 추가 8081 통신 대상은 확인되지 않았습니다. 3) K8s에서 트래픽 발생 POD 상태 교차 검증 이제 [Zenius K8s > 모니터링 > 파드]에서 트래픽 발생 POD(예: 192.168.0.216) 를 선택해 상태와 자원 사용률(CPU/메모리), 네트워크(bps) 를 확인합니다. 본 사례에서는 상태가 정상이고 Limit 대비 사용률도 안정적이어서, 트래픽 증가는 장애가 아닌 정상적인 수집 과정에서 발생한 현상으로 판단할 수 있습니다. 4) APM 지표로 맥락 검증 마지막으로 [Zenius APM > 모니터링] 대시보드에서 요청 건수, 응답 시간, 동시 사용자 등의 애플리케이션 지표를 확인합니다. NPM에서 포착된 8081 증가 시점과 APM 지표가 동조하면, 네트워크 증가는 APM 수집 트래픽 증가(정상 동작)로 판단할 수 있습니다. 반대로 APM 지표가 평온한데 8081만 치솟는다면, 이는 수집 설정이나 라우팅 구성의 이상을 의심해야 합니다. 이 경우, 동일 조건을 재현해 문제를 다시 발생시켜 보고, 원인이 확인되면 수집 주기·라우팅·리소스 할당 등을 조정(튜닝)하여 최적화할 수 있습니다. NPM–NMS–TMS–K8s–APM을 유기적으로 연결해, 특정 Worker Node 트래픽 급증 이슈를 포트/세션 단서 포착 → 흐름 확인 → POD 상태 교차 검증 → 애플리케이션 지표로 맥락 확인의 순서로 좁혀가는 방법을 살펴봤습니다. 핵심은 커널 레벨의 정밀 지표(NPM)로 원인을 가설화하고, 맵/인터페이스/서비스 흐름을 통해 이를 빠르게 검증하는 것입니다. 이 흐름을 표준 운영 절차로 적용하면, 재현이 어려운 상황에서도 원인 구간의 신속한 특정과 실질적인 조치(설정·라우팅·리소스 튜닝)도 가능합니다. 이번 글에서는 Zenius NMS·TMS·NPM을 통해 네트워크 트래픽을 다층적으로 분석하는 방법을 살펴보았습니다. 각 솔루션이 담당하는 관점과 역할은 다르지만, 함께 연계해 활용하면 장애 원인을 더 빠르고 정확하게 파악할 수 있습니다. 복잡해지는 인프라 환경에서 이런 분석 체계를 마련해 두는 것이 안정적인 서비스 운영의 핵심입니다.
2025.09.23
기술이야기
eBPF로 구현하는 TCP 상태 추적 기반 네트워크 모니터링
기술이야기
eBPF로 구현하는 TCP 상태 추적 기반 네트워크 모니터링
예전에는 네트워크 성능을 모니터링할 때 tcpdump로 패킷을 캡처하거나, netstat으로 연결 상태를 확인하거나, NetFlow/sFlow 기반 분석을 많이 사용했습니다. 하지만 네트워크 환경이 복잡해지고 암호화 트래픽이 늘어나면서, 그리고 컨테이너·MSA 환경으로 서비스가 쪼개지면서 기존 방식의 패킷 기반 모니터링은 점점 한계를 드러냈습니다. 성능 부하는 커지고, 세부 가시성은 부족했습니다. 이 문제를 해결해 준 게 바로 eBPF(extended Berkeley Packet Filter)입니다. eBPF는 커널 내부 함수에 직접 훅(Hook)을 걸어서 데이터를 가져올 수 있기 때문에, 서비스에 큰 영향을 주지 않고도 운영 환경에서 실시간 성능 분석이 가능합니다. 쉽게 말해, 예전에는 netstat으로 “포트가 지금 어떤 상태인지”만 볼 수 있었다면, eBPF를 쓰면 “그 포트의 상태가 어떻게 변하고 있는지”까지 관찰할 수 있습니다. 그래서 최근 클라우드 네이티브 환경이나 초저지연 서비스 운영에서는 eBPF가 차세대 네트워크 모니터링 기술로 주목받고 있습니다. eBPF란? eBPF는 커널 안에서 안전하게 실행되는 작은 프로그램으로, 네트워크·시스템 동작을 실시간으로 추적하는 데 강점을 가집니다. 네트워크 모니터링 관점에서 자주 쓰이는 기능은 다음과 같습니다. • kprobe/kretprobe: 커널 함수 진입·종료 시점 후킹 • tracepoint: 커널 이벤트 발생 시점 후킹 • BPF Map: 커널과 사용자 공간 간 데이터 공유 • BPF Helper 함수: 커널 리소스 접근 API eBPF는 Verifier(검증기)가 프로그램의 안전성을 보장하지 못하면 로드를 거부합니다. 과거에는 Verifier가 루프의 종료를 판별하지 못해 루프 사용이 전혀 허용되지 않았지만, 최근에는 단순 반복문은 사용할 수 있게 되었습니다. 또한 BTF(BPF Type Format)와 CO-RE(Compile Once – Run Everywhere) 기술 덕분에, 커널 버전이 달라져도 동일한 eBPF 프로그램을 별도 빌드 과정 없이 그대로 운용할 수 있습니다. eBPF 사용 방법 제가 공부하면서 가장 흥미로웠던 예제는 BCC 툴셋에 포함된 **tcpstates**입니다. TCP 연결 상태 변화를 추적하는 예제인데, 구조를 간단히 정리하면 다음과 같습니다. • bpf.c: 커널에서 실행되는 함수 중 “어떤 걸 관찰할지”와 “관찰 시 어떤 데이터를 수집할지” 정의 • .h: 커널과 유저 공간이 공유하는 데이터 구조체 정의 • .c: 수집된 데이터를 가공해서 사용자에게 출력 예를 들어, tcpstates.bpf.c에서는 커널 tracepoint inet_sock_set_state를 후킹해서 TCP 상태 변화를 잡아냅니다. 아래 코드를 보면 이해가 쉬우실 겁니다. int handle_set_state(struct trace_event_raw_inet_sock_set_state *ctx) { struct sock *sk = (struct sock *)ctx->skaddr; __u16 family = ctx->family; __u16 sport = ctx->sport; __u16 dport = ctx->dport; __u64 *tsp, delta_us, ts; struct tcpstates_t tcpstates = {}; if (ctx->protocol != IPPROTO_TCP) return 0; ts = bpf_ktime_get_ns(); tcpstates.skaddr = (__u64)sk; tcpstates.ts_us = ts / 1000; tcpstates.pid = bpf_get_current_pid_tgid() >> 32; tcpstates.oldstate = ctx->oldstate; tcpstates.newstate = ctx->newstate; tcpstates.family = family; tcpstates.sport = sport; tcpstates.dport = dport; bpf_get_current_comm(&tcpstates.task, sizeof(tcpstates.task)); if (family == AF_INET) { bpf_probe_read_kernel(&tcpstates.saddr, sizeof(tcpstates.saddr), &sk->__sk_common.skc_rcv_saddr); bpf_probe_read_kernel(&tcpstates.daddr, sizeof(tcpstates.daddr), &sk->__sk_common.skc_daddr); } else { /* family == AF_INET6 */ bpf_probe_read_kernel(&tcpstates.saddr, sizeof(tcpstates.saddr), &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); bpf_probe_read_kernel(&tcpstates.daddr, sizeof(tcpstates.daddr), &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32); } // 상태가 변경되면 유저 공간에 알리는 부분 bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &tcpstates, sizeof(tcpstates)); return 0; } 핵심 로직은 단순합니다. 커널에서 inet_sock_set_state가 호출되면 handle_set_state 함수가 실행되고, 이때 변경된 TCP 상태를 잡아내 사용자 공간으로 전달합니다. 언뜻 보면 복잡해 보일 수 있지만, 사실 bpf.c의 역할은 데이터를 가공하는 것이 아니라 수집하는 것입니다. 결국 중요한 것은 “내가 원하는 값이 구조체의 어디에 들어 있는지”를 정확히 찾아내는 일입니다. 그 값을 Map에 담아 사용자 공간으로 넘기면 됩니다. netstat으로 보이는 출력은 아래와 같죠. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.0.10:22 192.168.0.55:54321 ESTABLISHED 2048/sshd: user@pts/0 netstat은 사용자가 명령어를 실행한 시점의 상태만 스냅샷 형태로 보여줍니다. 그래서 LISTEN, ESTABLISHED, CLOSE_WAIT처럼 비교적 오래 유지되는 상태만 주로 확인할 수 있습니다. 반면 tcpstates를 활용하면 커널 내부에서 발생하는 모든 TCP 상태 변화를 이벤트 단위로 추적할 수 있습니다. 덕분에 기존 툴로는 관찰하기 어려웠던 3-way handshake와 4-way handshake 과정까지 실제로 확인할 수 있다는 점이 흥미로웠습니다. 조금 더 실무적으로 활용하자면, CLOSE_WAIT이 비정상적으로 쌓이는 경우 커넥션 누수를 빠르게 탐지할 수 있고, TIME_WAIT이나 FIN_WAIT2 패턴을 분석하면 리소스 사용량 문제를 조기에 파악할 수 있습니다. 관측용 예제지만, 확장하면 운영 환경에서도 충분히 유용한 진단 도구가 될 수 있습니다 다음으로 유저 공간의 tcpstates.c는 커널 eBPF 프로그램이 보낸 이벤트를 받아서 보기 좋게 출력하는 역할을 합니다. 흐름은 단순합니다. ①eBPF 오브젝트 열기 (tcpstates_bpf__open()) ②프로그램 커널 로드 (tcpstates_bpf__load()) ③훅 부착 (tcpstates_bpf__attach()) ④필요 시 cgroup 필터 등록 (open(), bpf_map_update_elem()) ⑤주기적으로 Map을 읽거나 이벤트를 받아 상태 출력 현재는 TCP 상태 변경 이벤트가 발생할 때마다 화면에 출력하는 방식으로 동작하지만, 필요하다면 일정 주기마다 netstat을 호출하듯이 현재 상태를 스냅샷 형태로 출력하도록 구현할 수도 있습니다. 마무리하며 이처럼 간단한 코드만으로도 tcpdump나 netstat보다 훨씬 세밀하게 네트워크 흐름을 분석하는 프로그램을 만들 수 있습니다. tcpstates 같은 예제는 단순하지만, eBPF의 장점을 잘 보여줍니다. • 저부하 eBPF는 패킷 전체를 캡처하지 않고, 연결 상태나 세션 정보 같은 핵심 메타데이터만 선택적으로 수집합니다. 이로 인해 CPU와 메모리 사용 부담이 최소화되며, 운영 중인 서비스에 성능 저하를 거의 일으키지 않습니다. 즉, 실서비스 환경에서도 안정적으로 적용 가능한 경량 모니터링 방식입니다. • 높은 가시성 단순히 IP와 포트 수준의 정보만 보여주는 데 그치지 않고, 프로세스명·PID·서비스 단위까지 트래픽을 구분할 수 있습니다. 이를 통해 “어떤 서비스가 얼마만큼의 네트워크 자원을 소비하는지”를 즉시 파악할 수 있으며, 서비스별 자원 사용 현황을 보다 세밀하게 모니터링할 수 있습니다. • 확장성 기본적인 송·수신량 분석을 넘어, RTT(왕복 지연시간), 재전송률, 패킷 드롭률 등 다양한 지표를 손쉽게 확장할 수 있습니다. 필요한 메트릭을 커널 훅(Hook)에 연결해 Map에 저장하기만 하면, 곧바로 시각화와 분석에 활용할 수 있습니다. 이 덕분에 환경 변화나 분석 요구에도 유연하게 대응 가능한 구조를 제공합니다. 브레인즈컴퍼니 역시 이 기술을 Zenius NPM(Network Performance Monitoring)에 적용하면서 기존 방식으로는 확인하기 어려웠던 세밀한 성능 데이터를 확보할 수 있었습니다. 이를 통해 단순한 모니터링을 넘어 서비스 간 통신 병목을 실시간으로 파악하고, 장애 분석 시간을 크게 줄일 수 있는 솔루션을 완성할 수 있었던 점이 큰 성과였습니다. 앞으로도 이러한 경험을 바탕으로 eBPF 활용을 더 넓혀가고자 합니다.
2025.09.18
기술이야기
For power plant operation big data collecton and storage solution
기술이야기
For power plant operation big data collecton and storage solution
Today, corporations are facing increasingly complex management environments as IT infrastructure continues to grow and evolve. In response, the need for an integrated management system that ensures both scalability and flexibility has become essential. Zenius-SMS enhances operational efficiency by providing integrated management of distributed servers, rapid fault handling, and comprehensive analysis and reporting. Zenius-NMS supports geographically distributed network systems with optimal status maintenance and efficient management through real-time monitoring, failure management, and in-depth reporting. The datasheets for Zenius EMS, SMS, and NMS — advanced IT infrastructure management solutions tailored for power plants — are available below. Zenius EMS datasheet Zenius SMS datasheet Zenius NMS datasheet
2025.09.18
회사이야기
브레인즈컴퍼니, 2025년 상반기 간담회 후기
회사이야기
브레인즈컴퍼니, 2025년 상반기 간담회 후기
브레인즈컴퍼니는 지난 6월 26일, 2025년 상반기를 되돌아보고 다가올 하반기를 함께 준비하기 위한 상반기 간담회를 진행했습니다. 이번 간담회를 통해 각 본부의 상반기 성과와 이슈를 공유하고, 앞으로 더 나은 방향으로 나아가기 위한 고민과 계획을 함께 나날 수 있었는데요, 자세한 후기를 함께 살펴보겠습니다. │본부별 상반기 리뷰 및 하반기 계획 공유 본부별 상반기 리뷰 및 하반기 계획 공유는 전략사업본부장인 서은숙 님의 발표로 시작됐습니다. 세일즈, 마케팅, 기술지원을 총괄하고 있는 은숙 님은 “쿠버네티스와 스토리지 모니터링 솔루션(STMS)의 고도화를 통해 고객의 수요에 빠르게 대응할 수 있었고, 1금융권을 포함한 다양한 산업 분야에서 레퍼런스를 확대한 점, 그리고 Zenius AI와 Zenius ITSM의 확산 등을 통해 상반기에 의미 있는 성과를 만들 수 있었다”고 상반기를 돌아봤습니다. 은숙 님은 이어서, “하반기에는 AI 기반 기술의 고도화와 핵심 모듈 중심의 프로젝트 운영을 통해, 더욱 큰 성과로 만드는 데 집중할 예정”이라며, “급변하는 시장 흐름에 유연하게 대응하고, 브레인즈컴퍼니가 축적해온 기술력과 경험을 바탕으로 시장 내 선도적 입지를 꾸준히 이어가자”는 말로 발표를 마무리했습니다. 이어서 홍보/마케팅을 담당하는 차정환 님의 발표가 진행됐습니다. 정환님은 “상반기에는 콘텐츠 기반의 디지털 마케팅에 집중했고, 그 결과 홈페이지 트래픽과 제품 도입 문의가 꾸준히 증가하고 있다”고 전했습니다. 이어 “하반기에는 기술 중심 콘텐츠 강화와 전시회·언론홍보 강화를 통해 고객 접점을 넓힐 계획”이라며, “고객이 자연스럽게 믿고 선택하는 브랜드가 될 수 있도록, 다 함께 노력하자”고 발표를 마무리했습니다. 기술 지원을 담당하고 있는 조영수 님은, "단순 설치나 유지보수를 넘어, 고객별 상황에 맞는 실질적인 맞춤형 컨설팅에 지속해서 집중하고 있다”며, “교육청과 금융권 등 대규모 프로젝트의 안정적 수행 경험과 클라우드·K8s 기반 환경에 대한 대응 역량을 바탕으로, 전문성과 신뢰도를 지속적으로 높이고 있다"고 전했습니다. 이어 “하반기에는 제니우스의 실질적인 활용도를 더욱 높이고, 기술 지원에 대한 만족도를 끌어올리기 위해 제니우스 활용 매뉴얼을 체계적으로 정비하고, 내부 역량 강화를 위한 세미나도 지속적으로 확대해 나갈 계획”이라고 밝혔습니다. 다음으로 연구개발본부를 총괄하고 있는 조기호 님의 발표가 진행됐습니다. 기호 님은 “상반기에는 제니우스 8.1 GS인증, CMS·SKMS·BRMS 등 핵심 솔루션 고도화, 대시보드 2.0 구축, AI v2.0 QA 및 인증 준비 등 다양한 성과를 이뤘다”며 “특히 고객 맞춤형 개발 수요에 대응하며 프로젝트 중심의 민첩한 개발 체계를 운영해왔다”고 전했습니다. 이어 “하반기에는 예방점검 시스템, UI 고도화, SaaS 고도화 등 주요 과제를 적기에 추진하고, AI 기반 분석 기능과 고성능 처리 구조를 강화해 제니우스를 한 단계 더 진화시킬 계획”이라며, “단순한 기능 구현을 넘어, 제니우스가 고객에게 더욱 의미 있는 인사이트를 제공하는 솔루션으로 도약할 수 있도록 연구본부의 방향성과 개발 역량을 지속적으로 정비해 나가겠다”고 강조했습니다. 마지막으로 경영지원실 심현보 님의 발표가 이어졌습니다. 현보 님은 상반기 동안 진행된 전 직원 해외연수, 패밀리데이, ‘CEO가 쏜다’ 등을 돌아보며, 구성원 간 소통의 기회를 넓힌 점을 강조했습니다. 또한 회계, 인사, 복지 등 전반적인 운영 업무를 중심으로 브레인즈의 운영을 원활히 뒷받침하기 위한 경영지원실의 다양한 노력을 공유했습니다. 이어 “하반기에는 경영지원 프로세스를 한층 정교화하고, 구성원들이 보다 안정적이고 효율적으로 업무에 몰입할 수 있는 환경을 만들어 가겠다”고 덧붙였습니다. │부사장 총평, "다 함께, 더 멀리 갑시다" 본부별 발표에 이어서 브레인즈컴퍼니의 부사장 심재걸 님의 상반기 총평이 진행됐습니다. 재걸 님은 “올 상반기, 각 부서가 맡은 영역에서 책임감을 갖고 성실하게 임해준 덕분에 불확실한 시장 환경 속에서도 안정적인 운영과 제품 경쟁력 확보라는 두 가지 과제를 모두 수행할 수 있었다”며 구성원들에게 감사를 전했습니다. 재걸 님은 “구성원 모두의 노력 덕분에 제니우스가 클라우드 네이티브 및 MSA 기반 인프라 환경에 최적화된 형태로 고도화되고 있다”며, “하이브리드 클라우드 환경에 대응하는 모니터링 기능을 지속 강화함으로써, 빠르게 변화하는 기술 트렌드에 한발 앞서 나가고 있으며, 이를 통해 높은 시장 점유율을 유지하고 있다”고 강조했습니다. 이어 “AI/클라우드 시장 변화에 대응하기 위해, AI 모니터링 역량을 지속적으로 고도화하여, 고객 수요에 더욱 민첩하게 대응할 계획”이라며, “특히 AI와 클라우드 네이티브 플랫폼에 특화된 자회사 에이프리카와의 전략적 협업을 통해 시너지를 극대화하는 것이 중요하다”고 말했습니다. 또한 “국내 시장에서 다져온 경쟁력을 바탕으로, 글로벌 무대에서도 가시적인 성과를 이뤄내자”며, 해외 시장을 향한 도전에도 힘을 모아줄 것을 당부했습니다. 재걸님은 이어 브레인즈컴퍼니의 조직 문화에 대한 당부로 발표를 마무리했습니다. 리뷰를 마친 뒤, 전 구성원이 단체 사진을 촬영하며 상반기 간담회 1부의 일정을 마무리했습니다. │식사와 함께 이어진 소통의 시간 1부 일정을 마친 후, 구성원들은 함께 식당에 모여 맛있는 음식을 나누며 한결 여유로운 분위기 속에서 서로 이야기를 나눴습니다.업무와 관련된 이야기부터 일상 속 소소한 근황까지 다양한 대화가 오가며, 각 테이블 마다 자연스러운 웃음이 이어졌습니다. 오랜만에 전 구성원이 한자리에 모인 자리였던 만큼, 각자의 자리에서 애써온 서로의 수고를 격려하고, 다가올 하반기를 함께 잘 준비해 나가자는 다짐도 나누는 시간이었습니다. 특히 그동안 이야기를 나눌 기회가 없었던 구성원들과도 자연스럽게 소통하며 서로에 대해 더 알아갈 수 있었습니다. 이번 간담회는 상반기의 주요 성과와 과제를 되짚고, 하반기를 더욱 힘차게 준비할 수 있는 방향을 함께 모색하는 뜻깊은 자리였습니다. 브레인즈컴퍼니는 하반기에도 기술 혁신과 고객 중심의 솔루션 고도화를 통해 시장 변화에 선제적으로 대응하고, 구성원 모두가 함께 성장하는 건강한 조직 문화를 이어가며 한 단계 더 도약해 나가겠습니다.
2025.06.30
기술이야기
하이브리드 클라우드 모니터링, 왜 필요한가?
기술이야기
하이브리드 클라우드 모니터링, 왜 필요한가?
최근 하이브리드 클라우드가 점점 더 중요한 역할을 하고 있습니다. 하이브리드 클라우드(Hybrid Cloud)는 온프레미스 환경과 프라이빗 클라우드, 퍼블릭 클라우드를 결합한 클라우드 환경을 의미하는데요. 쉽게 말해 필요에 따라 자체 인프라와 외부 클라우드 서비스를 동시에 사용할 수 있는 클라우드 환경입니다. 2024년까지 하이브리드 클라우드 시장은 연평균 22% 성장하여 약 3조 원 규모에 이를 것으로 예상될 정도로 각광받고 있습니다. 그렇다면 하이브리드 클라우드가 점점 더 주목을 받는 이유는 무엇일까요? │하이브리드 클라우드가 각광받는 이유 하이브리드 클라우드가 점점 더 주목을 받는 이유는 유연함 때문입니다. 기업들은 중요한 데이터를 프라이빗 클라우드에 저장하고, 일시적으로 많은 자원이 필요한 작업은 퍼블릭 클라우드를 사용하여 두 가지 클라우드의 장점을 모두 누릴 수 있습니다. 보안과 성능을 유지하면서도 필요한 만큼 자원을 사용할 수 있는 것이죠. 즉 프라이빗 클라우드의 퍼블릭 클라우드를 잘 조화하면 기업은 최적의 IT 환경을 구축할 수 있습니다. 하이브리드 클라우드의 이러한 장점은, 기업들이 경쟁력을 유지하고 빠르게 변화하는 시장 환경에 대응하는 데 큰 도움이 됩니다. 특히 클라우드 서비스 제공업체(CSP)의 다양한 서비스와 솔루션을 활용하면, 하이브리드 클라우드를 더욱 효과적으로 운영할 수 있는데요. 다음 내용을 통해 주요 클라우드 서비스 제공업체에 대해 좀 더 자세히 알아보겠습니다. │주요 클라우드 서비스 제공업체(CSP) 특징 클라우드 서비스 제공업체(CSP)으로 대표적으로 AWS(Amazon Web Services)와 마이크로소프트(Microsoft Azure)가 있습니다. 다음 내용을 통해 각각의 주요 특징을 살펴보겠습니다. Amazon Web Services (AWS) AWS는 서버, 스토리지, 데이터베이스, 네트워크 등 다양한 IT 인프라 서비스를 제공하는 아마존의 클라우드 플랫폼입니다. "AWS의 서버가 먹통이 되면, 시장에 혼돈이 온다."는 말이 있을 정도로 많은 기업이 AWS를 사용하고 있죠. AWS의 주요 특징은 아래와 같이 정리해 볼 수 있는데요. AWS의 주요 특징 1. AWS의 글로벌 인프라 AWS는 CSP 중 전 세계에서 가장 많은 리전을 보유하고 있습니다. 31개의 리전과 99개의 가용 영역을 운영하여, 사용자가 원하는 리전을 선택해 지연 시간을 단축할 수 있습니다. 다양한 지역에서 리전을 운영하는 만큼, 서비스 제공 범위가 넓고 안정성도 높습니다. 또한 엣지 로케이션을 통해 콘텐츠를 빠르게 전달하여 사용자 경험을 개선합니다. AWS는 CSP의 선두주자로서 AWS는 IaaS(인프라 서비스) 영역에서 시장 점유율이 가장 높고 안정적인 서비스를 제공합니다. 2. API 기반 서비스 AWS의 모든 서비스는 API를 통해 제어할 수 있으며, 다양한 프로그래밍 언어에서 사용 가능한 코드를 제공하여 다른 서비스를 연동할 수 있습니다. API Gateway라는 서비스를 통해 외부 애플리케이션과의 통신을 안전하게 관리할 수도 있죠. 3. 다채로운 서비스 AWS는 단순히 서버와 저장소를 제공하는 것을 넘어 S3(객체 스토리지), EC2(가상 서버), Lambda(서버리스 컴퓨팅), RDS(관계형 데이터베이스) 등 다양한 주요 서비스를 지원합니다. 최근에는 머신러닝과 AI 서비스까지 제공하고 있습니다. Microsoft Azure Microsoft Azure는 마이크로소프트가 제공하는 클라우드 컴퓨팅 플랫폼으로, AWS 다음으로 많은 기업들이 사용하고 있습니다. 애저라고도 많이 불리죠. 특히 PaaS(Platform as a Service)와 SaaS(Software as a Service) 분야에서 1위를 달리는 퍼블릭 클라우드라고 할 수 있습니다. Azure의 주요 특징은 다음과 같은데요. Microsoft Azure 주요 특징 1. Microsoft 제품과의 통합성 Azure의 가장 큰 장점은 Microsoft 제품과 쉽게 연동된다는 점입니다. 예를 들어 Office 365와 통합되며, 최근에는 생성형 AI 서비스인 Copilot 과의 통합으로 주목받고 있습니다. Microsoft 제품을 많이 사용하는 기업들에게 매우 유용하죠. 2. 웹 서비스에 집중 Azure는 특히 웹 서비스에 강점을 가지고 있습니다. 인프라(IaaS)에서는 다양한 유형을 수용하면서도, 애플리케이션 플랫폼(PaaS) 측면에서는 웹 서비스에 집중하고 있는데요. PC 웹, 모바일, API 등 모든 접속 유형을 하나의 앱 서비스에서 지원하며 가상 머신, 컨테이너, 서버리스 등 다양한 구성 방식을 제공합니다. 이처럼 AWS와 Microsoft Azure는 각각 고유한 강점을 가지고 있으며, 기업의 필요에 따라 적절한 서비스를 선택하여 사용할 수 있는데요. 하지만 이러한 다양한 클라우드 서비스의 특징과 이점을 제대로 활용하기 위해서는 클라우드 서비스 모니터링이 필수적입니다. 클라우드 인프라는 자원 사용량과 트래픽이 시시각각 변동되므로, 실시간 모니터링 없이는 문제를 사전에 발견하고 대응하기 어렵기 때문인데요. 다음 내용을 통해 어떤 솔루션이 필요한지 살펴보도록 하겠습니다. │하이브리드 클라우드 모니터링이 필요한 이유 앞서 언급한 내용처럼 AWS, Azure, GCP 등 다양한 퍼블릭 클라우드의 서비스 상태와 성능 지표를 확인하기 위해서는, 클라우드 서비스 모니터링 솔루션이 필요합니다. 물론 AWS의 *CloudWatch1처럼 자체적인 퍼블릭 클라우드 모니터링 도구들도 있는데요. * CloudWatch1 : AWS 클라우드 리소스를 모니터링하고 관리하는 서비스 통합적인 IT 환경에서 발생할 수 있는 다양한 문제를 예방하고 효율적으로 관리하기 위해서는, 퍼블릭 클라우드나 프라이빗 클라우드뿐만 아니라 온프레미스 인프라까지 함께 모니터링할 수 있는지 살펴보아야 합니다. 대표적인 사례로 Zenius CMS 솔루션을 통해, 어떤 방식으로 클라우드 서비스를 모니터링할 수 있는지 살펴보겠습니다. 하이브리드 클라우드의 통합 모니터링 Zenius CMS는 물리적인 서버, 네트워크 장비, DB와 같은 온프레미스 인프라와 퍼블릭 클라우드를 통합적으로 모니터링합니다. 사용자는 한 플랫폼 안에서 전체 인프라의 상태를 종합적으로 신속하게 장애를 파악할 수 있기 때문에, 다양한 환경에서 발생하는 성능 저하와 장애를 빠르게 식별하고 그 원인을 정확히 분석할 수 있죠. CloudWatch와 Alert History를 사용한 데이터 수집 Zenius CMS는 AWS의 CloudWatch나 Azure의 Alert History 같은 API를 사용해서 다양한 모니터링 데이터를 제공합니다. 예를 들어 CloudWatch가 기본적으로 제공하는 성능 지표뿐만 아니라 특정 서비스에 관심이 있다면, 그 서비스만 타겟으로 설정해서 모니터링할 수 있습니다. 이렇게 하면 사용하는 지역의 주요 서비스들만 선택해서 볼 수 있어, 필요한 정보를 더욱 쉽게 확인할 수 있는 장점이 있습니다. Billing(과금) 서비스 정보 제공 Zenius CMS를 통해 클라우드 자원의 사용량을 실시간으로 확인하여 예산을 더 잘 관리하고, 예상치 못한 과금이 발생하는 것을 막을 수 있습니다. 또한 비용이 어떻게 발생하는지 투명하게 파악할 수 있어 필요할 때 적절히 조정할 수 있죠. 자동 경고 기능을 통해 특정 비용 한도를 초과할 때 즉시 알림을 받아 효율적으로 관리할 수 있습니다. 이번 시간에는 하이브리드 클라우드 모니터링이 왜 중요해지고 있는지 중점적으로 알아보았습니다. 특히 클라우드 인프라는 자원 사용량이 수시로 변하기 때문에 실시간 모니터링이 중요합니다. 더불어 다양한 인프라를 통합 관리할 수 있는 온프레미스 환경도 함께 구축되어 있어야, 클라우드 인프라에 문제가 발생했을 때 빠르고 정확하게 대응할 수 있죠. 이제 하이브리드 클라우드 통합 관리와 온프레미스 환경 관제가 모두 가능한 Zenius CMS로, 클라우드 서비스를 더욱 효율적으로 관리해 보세요!
2024.07.29
회사이야기
브레인즈컴퍼니, NHN 클라우드와 진행한 [솔루션 설명회] 성료
회사이야기
브레인즈컴퍼니, NHN 클라우드와 진행한 [솔루션 설명회] 성료
브레인즈컴퍼니가 지난 17일 국내 대표적인 CSP(Cloud Service Provider)인 NHN 클라우드와 함께 [NHN 마켓 플레이스 솔루션 설명회]를 진행했습니다. 지난 4월 이후 두 번째로 열린 이번 행사 소식을 알아보겠습니다. │NHN 클라우드 솔루션 설명회는? NHN 클라우드는 자사의 마켓 플레이스 고객사에게 다양한 인사이트와 솔루션을 소개하기 위해 정기적으로 '솔루션 설명회'를 진행하고 있습니다. 브레인즈컴퍼니가 함께 진행한 이번 설명회에도 다수의 NHN 마켓 플레이스 고객사 및 IT 분야 관계자가 초청되었습니다. [그림] 발표 진행 중인 지혜님 웨비나로 진행된 이날 설명회에서 브레인즈컴퍼니는 '분산된 대용량 로그의 효율적인 관리 방안'이라는 제목의 발표를 맡았습니다. 발표는 '분산된 로그에 대한 통합 관리의 필요성-통합 관리 솔루션 소개-실제 고객 사례'의 순서로 신지혜 님이 진행했습니다. 대용량 로그 관리에 대한 다양한 인사이트와 구체적인 솔루션, 그리고 실제 적용 사례가 더해져서 참여자들의 많은 관심을 모았습니다. [그림] 솔루션 설명회 진행화면 지혜님은 이날 발표에서 "원활하게 IT 서비스와 인프라를 운영하고, 보안 위협에 빠르게 대응하는 것이 점점 더 중요해지고 있다. 따라서 로그 수집/저장/검색 및 시각화 기능을 제공하며, 이벤트 발생 시 즉각적인 알람을 통하여 빠른 문제 해결을 지원하는 로그 관리 솔루션 선택은 이제 필수"라고 말했습니다. 지혜님은 또한, "Zenius LogManager를 도입하게 되면 대용량 로그에 대한 통합 관리 체계와 사이버 침해 위협에 대한 보안 대응 체계를 마련할 수 있다. 또한 상급기관 및 법률에서 요구하는 지침과 법규를 준수할 수 있고, 궁극적으로 로그관리의 질적 향상과 분석 결과의 신뢰도를 확보할 수 있게 된다"라고 강조했습니다. 많은 관심을 모은 만큼 발표 후에도 많은 질문이 졌는데요, 이날 소개된 브레인즈컴퍼니의 솔루션은 Zenius LogManager입니다. │Zenius LogManager는? Zenius LogManager는 이기종의 다양한 장비에서 발생되는 대용량 로그(Log)를 수집/분석하고 통합하여 모니터링할 수 있는 시스템으로 정형/비정형 로그에 대한 실시간 수집과 신속한 분석 기능을 제공합니다. 또한 이러한 정보들을 다양한 차트와 대시보드를 통해 시각화할 수 있습니다. [그림] Zenius LogManager 예시 화면 Zenius LogManager는 독보적인 인덱싱 및 검색 속도를 제공할 뿐 아니라 확장성, 편의성, 효율성, 호환성 등의 장점을 가지고 있습니다. 또한 로그에 대한 수집, 저장, 분석, 시각화 기능을 통해 로그에 대한 전체 라이프사이클을 손쉽게 관리할 수 있게 지원합니다. 금융 등 다수 고객사에서 이미 검증받은 Zenius LogManager는 NHN 클라우드를 비롯한 다양한 클라우드 마켓에서 SaaS(Software as a Service) 형태로 편하게 이용하실 수 있습니다. 브레인즈컴퍼니는 이번에 소개된 Zenius LogManager뿐만 아니라, EMS/APM/ITSM 와 같은 솔루션을 통해 고객사의 비즈니스 경쟁력을 높일 수 있도록 최선을 다하겠습니다. Zenius에 대한 궁금증이 있으시면 여기 링크를 통해 확인해 주세요!
2024.07.29
기술이야기
옵저버빌리티(Observability) vs APM, 우리 기업에 맞는 솔루션은?!
기술이야기
옵저버빌리티(Observability) vs APM, 우리 기업에 맞는 솔루션은?!
지난 글을 통해 웹 애플리케이션을 전반적으로 모니터링하고 관리하기 위한 좋은 도구인, APM의 핵심요소와 기능에 대해서 알아봤습니다(지난 글 보기). APM은 분명 좋은 도구이지만 문제 원인이 애플리케이션, 웹, WAS, DB가 아닌 특정한 시스템 오류이거나 클라우드 네이티브 환경에서의 장애일 경우 문제 발생 원인을 명확히 밝히기 어려울 수 있습니다. 따라서 이번 시간에는 APM의 한계성은 무엇이고, 이를 보완하기 위한 방법은 무엇인지 자세히 살펴보겠습니다. │APM 한계성 불과 얼마 전까지만 해도 예상치 못한 장애를 탐지하고 분석하는 것은, 기존 APM만으로 충분했었습니다. 기존에는 모놀리식 구조로 되어있어 애플리케이션이 적은 수로 구성되어 있었고, Web-WAS-DB가 모두 단일 구조로 구성되어 있었기 때문입니다. 하지만 현재 대다수 기업들은 MSA 환경에서 서비스를 구축하고, DevOps 구조로 업무를 진행하는 경우가 많습니다. 즉 클라우드 네이티브 환경에서는 기존 모놀리식 구조의 APM의 한계가 하나둘씩 보이기 시작한 것이죠. 이러한 이유로 클라우드 네이티브 방식에는 서비스 장애 원인을 분석하기 위한 새로운 모니터링 툴이 필요했습니다. 이때 등장하는 것이 바로 옵저버빌리티(Observability)입니다. │Observability란? 그렇다면 Observability란 무엇일까요? 옵저버빌리티는 IT 인프라에 대한 근본적인 장애 원인을 분석하기 위한 방법론입니다. 관찰 가능성이라고 표현되기도 하죠. Obsevability는 비교적 최근에 사용한 용어이지만, 옵저버빌리티를 위한 고민은 오래전부터 지속되어왔습니다. 시스템이 내가 의도한 대로 작동하고 있을까? 예상치 못한 장애 탐지와 장애 근본 원인은 어떻게 분석할 수 있을까? IT 인프라 운영 환경에 문제가 발생했을 때, 문제 식별을 위해 필요한 객관적인 지표는 어떻게 도출할 수 있을까? 하지만 소프트웨어 애플리케이션에서 Observability는, 위와 같은 고민이 발생하거나 겪어보지 못했던 현상이 생길 때 이를 이해하고 설명할 수 있는 지표를 분석해 줍니다. │Obsevability의 등장배경 및 필요성 앞에서 옵저버빌리티가 무엇인지 살펴봤는데요. 이어서 Observability가 등장하게 된 이유와 필요성에 대해 자세히 살펴보겠습니다. MSA 전환에 따른 복잡성 증가 옵저버빌리티가 등장하게 된 첫 번째 이유는, 모놀리식 아키텍처에서 MSA 환경으로 전환함에 따라 복잡성이 증가했기 때문입니다. 우선 그림을 통해 자세히 살펴보겠습니다. [그림(왼)]은 모놀리식 아키텍처를 나타내는데요. 애플리케이션의 모든 구성 요소가 하나의 인프라로 통합되어 있는 형태입니다. 배포가 간단하며, 확장성이 쉽고, E2E 테스트가 용이하다는 장점이 있습니다. 하지만 조그마한 수정 사항이 있으면, 다시 구성 환경을 빌드하고 배포해야 한다는 단점이 있습니다. 또한 일부 오류가 전체 아키텍처에 영향을 미친다는 치명적인 단점도 존재하죠. 반면 [그림(오)]에 해당하는 MSA(Micro Service Architecture)는 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어, 변경과 조합이 가능합니다. 작은 서비스의 독립적 배포라는 강력한 장점을 앞세워 Netflix, PAYCO와 같은 다양한 기업들이 앞다투어 MSA를 받아들였습니다. 여기서 문제는 MSA로 변화함에 따라 통합 테스트나 E2E 테스트 검증이 필요해졌는데요. 이처럼 여러 서비스의 API를 검증해야 하므로, 복잡성이 증가하고 많은 시간과 비용이 소모되었습니다. 무엇보다 각 서비스 별로 자체적인 데이터베이스가 있어, 트랜잭션에 대한 파악이 어려워지기도 했죠. 따라서 기존 APM이 담당하는 트랜잭션 모니터링의 복잡성은 더욱 증가했고, Observability의 필요성이 대두되었습니다. DevOps와 클라우드 네이티브 환경으로서의 전환 옵저버빌리티가 등장하게 된 두 번째 이유는, DevOps와 클라우드 네이티브 환경으로 전환하기 위해 필요한 도구이기 때문입니다. DevOps의 핵심은 소프트웨어의 개발(Deployment)과 운영(Operation)을 분리하는 것이 아닌, 하나로 통합된 업무 처리 방식으로 진행됩니다. 이때 관리하는 서비스 전반에 대한 가시성이 충분히 확보되지 않으면, DevOps 조직은 근본적인 원인을 찾는 데 어려움을 겪게 됩니다. 이러한 어려움을 해결하기 위해서는 서비스를 구성하는 아키텍처부터 트랜잭션까지 가시성이 확보되어야 합니다. 이를 통해 DevOps의 목표인 지속적인 개발과 운영의 통합을 만들어낼 수 있죠. 또한 Observability는 클라우드 네이티브 환경으로 전환하기 위한 필수 조건입니다. 기업에서 운영 중인 서비스/IT 인프라가 클라우드 네이티브 환경으로 전환되면서, 이전에 발생하지 않았던 모든 장애 가능성에 대한 인지를 위해 Observability가 선행되어야 합니다. │Observability와 Monitoring 차이점 그렇다면 기존의 모니터링(Monitoring)과 옵저버벌리티(Observability)의 차이점은 무엇일까요? 기존의 모니터링 역할은 IT 인프라의 '정상 작동 확인'을 위한 도구 역할에 초점이 맞춰져 있었습니다. 모니터링 구성 요소인 대시보드와 사용자 알람을 통해 가시성을 확보하고, 장애를 쉽게 감지할 수 있었죠. 즉 모니터링은 인프라 성능 지표, 구성 관리, 사용자 알람에 주 목적을 둔 IT 운영 담당자에 포커스를 맞춘 도구입니다. Observability는 기존 모니터링이 맡는 알람(Alerting), 메트릭(Metric) 외에도 로그(시스템, 애플리케이션), 트레이스, 디버깅과 같은 작업이 가능합니다. 이를 통해 앞으로 발생할 수 있는 장애를 미리 예측하고, 발생한 장애에 대한 근본적인 원인을 찾아내는 데 초점이 맞춰져 있습니다. │Observability 확보를 위한 핵심 구성 요소 옵저버빌리티는 앞서 언급했듯이 메트릭(Metric), 로깅(Logging), 트레이싱(Tracing) 등 작업이 가능한데요. 좀 더 자세히 살펴보겠습니다. Metric 모니터링 분야에서 Metric(메트릭)이란, 인프라 혹은 서비스 성능과 상태를 나타내는 지표입니다. 여기서 중요한 점은 단순히 현재 상태를 보기 쉽게 표현하는 것에서 더 나아가 '시계열 데이터' 형태로 변화하는 데이터를 보여줘야 합니다. 예를 들어 CPU 사용률, 메모리 사용률, 스레드 사용률과 같이 시간이 지남에 따라 어떻게 변화하는지 효율적으로 보여줄 수 있어야 하죠. 또한 메트릭은 여러 AI 분석툴과 오픈소스와 결합하여, 직관적인 파라미터를 통해 시계열 데이터의 다양한 패턴을 자동 감지할 수 있어야 합니다. 운영자와 개발자에게 필요한 리소스를 선택할 수 있도록 성능 예측하는 지표도 필요합니다. Logging Logging(로깅)은 운영 중인 시스템과 애플리케이션에서 발생하는 다양한 이벤트와 에러 등을 기록하는 과정입니다. Observability는 여기서 더 나아가 클라우드 시스템의 모든 로그를 수집하여, 해당 로그를 통해 문제 원인을 식별할 수 있어야 합니다. 물론 각 로그 스트림은 단일 인스턴스에 대한 이벤트를 알려주기 때문에, 마이크로 서비스 환경에서 전체적인 문제 원인을 파악하기 어려울 수 있습니다. 하지만 중앙 집중식 로깅을 사용하면, 애플리케이션 로그를 한곳에 저장할 수 있습니다. 이를 통해 여러 서비스로 구성된 MSA 환경에서 로그를 효과적으로 검색하고 모니터링할 수 있죠. 이러한 작업을 하기 위해서 ELK Stack1 과 같은 로그 수집 활용 도구가 필요한데요. 이 도구는 로그 관리를 단순화화여, 전체 시스템 문제를 더 쉽게 분석할 수 있도록 도와줍니다. *ELK Stack1: Elastic Search. Logstash, Kibana의 약자로 데이터를 수집하고 분석하는 도구 모음 Tracing 트레이싱은 애플리케이션 실행 정보를 기록하는 '특별한 로깅' 방식을 의미합니다. 사실 로깅과 트레이싱을 구분하는 것에 큰 의미는 없습니다. 하지만 Observability 관점에서 트레이싱은, 전체 로그 중 문제를 일으키는 특정 로그들을 시각화하고 이를 선택적으로 관찰하는데 의미가 있습니다. Debugging Observability에서 말하는 디버깅은, 시스템과 서비스 성능을 확인하고 검사할 수 있는 다양한 도구입니다. 장애 원인을 찾을 경우 그 장애 원인뿐만 아니라, 연관관계를 가진 여러 인프라와 애플리케이션을 함께 보여줄 수 있어야 하죠. RUM RUM은 Real User Monitoring 약자로, 사용자의 인터랙션을 추적하여 웹사이트나 애플리케이션 성능을 실시간으로 모니터링하는 기술입니다. 옵저버빌리티는 앞서 언급했듯, 더 이상 IT 인프라 운영자를 위한 도구가 아닙니다. DevOps를 위한 통합적인 가시성을 제공하는 도구이죠. 따라서 운영자와 개발자를 위한 '실제 사용자 관점'에서 모니터링을 제공해야 합니다. 이처럼 옵저버빌리티 시스템은 애플리케이션의 전체적인 상태를 깊이 있게 파악하고, 문제 원인을 분석하는 데 중점을 두는 접근 방식입니다. 그렇다면 애플리케이션 성능 관리 시스템인 APM 도구와는 어떤 차이점이 있을까요? │APM과 Observability 차이점 어떻게 보면 APM과 Observability는 비슷해 보이지만, 문제 원인과 인프라를 분석하는 시각에 따라서 다양한 차이점을 지니고 있습니다. 우선 첫 번째 차이점으로는 모니터링 목적 대상에 따른 차이가 있습니다. APM은 E2E(End-to-End) 성능 구간에 주목합니다. WEB-WAS-DB에 걸친 이 과정을 실제 서비스 사용자의 *액티브 서비스2에 초점을 맞춰, 애플리케이션 성능을 분석하고 모니터링하죠. *액티브 서비스: 현재 시점에서 사용자에게 제공되고 있는 상태 Observability는 APM에서 주목하는 E2E보다, 더 많은 범위를 모니터링합니다. 시스템 인프라, WAS, DB에 대한 정밀 성능 분석과 장애 감지는 물론. 운영 중인 인프라와 서비스를 통합하여 문제 원인을 찾는 데 집중합니다. [그림] Zenius-APM 사용자 정의 실시간 모니터링 상황판 따라서 두 번째 차이점으로는, 측정하는 지표에도 많은 차이가 있는데요. APM은 사용자 요청에 따른 응답 시간과 응답 분포, 액티브 서비스 상태, 트랜잭션 처리율, 이슈 중심으로 '사용자 요청' 관점에 따라 주요 지표를 확인할 수 있습니다. Observability는 사용자의 요청 관점이 아닌, 발생할 수 있는 '모든 이벤트 지표'에 주목합니다. 보다 더 전방위적인 모니터링이 가능하죠. 또한 옵저버빌리티는 기존 APM에서 발생하는 주요 장애 원인뿐 아니라, 예측하지 못한 장애를 객관적인 지표로 보여줍니다. 정리한다면 인프라와 서비스를 분석하고 장애를 탐지한다는 점에서 APM과 Observability는 동일한 역할을 갖지만, 결국 사용자가 무엇을 더 초점에 맞추느냐에 따라 사용 목적은 아래와 같이 달라질 수 있습니다. 우리 기업은 Observability가 맞을까, APM가 맞을까? APM Type Observability Type 애플리케이션 성능 최적화가 필요한 경우 애플리케이션 코드 내의 문제를 식별하고 해결하는 데 중점을 둘 경우 MSA 환경이 아닌 모놀리식 아키텍처에서 서비스를 구성하고 있는 경우 MSA 환경에서의 분산 시스템을 통해 서비스를 구성하는 경우 단순한 애플리케이션 성능을 넘어 전체 IT 인프라 환경에 대한 통찰력 확보가 필요한 경우 인프라 운영자, 개발자, 보안담당자 모두가 통합 모니터링 환경이 필요한 경우 이번 글에서는 옵저버빌리티의 중요성과 APM의 차이점을 자세히 살펴보았습니다. 결론적으로 옵저버빌리티와 APM 중 어느 하나를 더 좋다고 할 수 없으며, 각 조직의 요구사항과 사용 편의성에 맞춰 선택해야 합니다. 그러나 점점 복잡해지는 IT 환경을 고려한다면, 옵저버빌리티를 기반으로 한 Zenius-APM과 같은 도구를 활용하여 좀 더 효율적으로 웹 애플리케이션을 관리해 보는 것은 어떨까요? ?더보기 Zenius APM 더 자세히 보기 ?함께 읽으면 더 좋아요 • APM에서 꼭 관리해야 할 주요 지표는?! • APM의 핵심요소와 주요기능은?!
2024.07.24
기술이야기
무선 AP에 대해서 꼭 알아야 할 세 가지
기술이야기
무선 AP에 대해서 꼭 알아야 할 세 가지
지난 시간에는 무선 AP를 '어떻게' 하면 효과적으로 관리할 수 있는지에 대한 TIP을 알려 드렸었는데요(링크). 여기서 잠깐, 무선 AP란? '무선 AP'는 Access Point의 약자로 Wireless Access Point 라고 하며, WAP으로 불리기도 합니다. 실제 인터넷으로 연결되는 신호는, 무선 신호를 받아서 유선 신호 체계로 전달해 주는 매개체가 필요한데요. 이를 AP가 담당합니다. 이름 그대로 Access Point로서 유선 신호를 무선으로 바꿔주거나, 무선 신호를 유선으로 바꾸는 접촉 지점의 역할을 하죠. 이번 시간에는 구성요소, 주요 활용사례, 관리 시스템 등 AP와 관련해서 꼭 알아야 할 세 가지를 살펴볼 예정입니다. 우선 그전에 무선 AP가 최근에 '왜' 필요해졌는지부터 짚어보겠습니다. │무선 AP의 필요성 무선 AP는 일반적인 유선 공유기보다, 설치 장소에 구애받지 않는다는 점에서 차별점을 가지고 있습니다. 무선 안테나가 AP에 자체적으로 내장되어 있고 PoE 기능을 통해 일반적인 가정에서 사용하는 유선 공유기보다 자유롭게 설치될 수 있죠. 이외에도 AP는 아래와 같은 특장점으로 각광받고 있습니다. 가용성 무선 AP는 일반적인 유무선 공유기보다 무선으로 연결된 기기를 더 많이 수용할 수 있는데요. 대규모 인원을 수용해야 하는 기업/공공 지자체/백화점/카페 등 대규모 클라이언트가 필요한 장소의 원활한 네트워크 연결을 용이하게 한다는 점에서 가용성이 뛰어납니다. 관리적 측면 무선 AP는 자신을 포함하여 대역을 무선으로 연결해 주는 기능이 기본적인 역할입니다. 하지만 부가적으로 무선관리 시스템으로부터 중앙 컨트롤을 받으며, 클라이언트의 통신 상태를 체크하는 기능을 가지고 있는데요. 사용자 확인부터 트래픽 양, 웹 접속 권한 설정과 알람까지 폭넓은 관리 기능을 제공하고 있습니다. 대규모 클라이언트 지원 일반적인 가정이 아닌 학교/기업/공공장소와 같은 대규모 클라이언트에 동시 접속을 하기 위해선, 대규모 접속을 처리할 수 있는 무선 AP가 필요합니다. 일반적인 공유기의 경우 약 한정된 IP만 할당받을 수 있으며, 인원이 많아질수록 속도 저하나 부하가 발생하기 때문이죠. 반면 무선 AP는 이러한 대규모 환경에서 접속을 효과적으로 처리할 수 있습니다. 편리성 무선 AP는 *SSID(Service Set Identifier)1가 하나로 통합되어, 접속 환경이 달라지더라도 무선 신호를 다시 잡을 필요가 없습니다. 반면 가정용 공유기의 경우 SSID가 별도로 분리되어 있어, 무선 신호 연결을 할 때마다 별도의 인증 절차를 거치게 되죠. 물론 공유기도 AP 모드로 SSID를 통합하여 사용할 수 있지만, 이는 네트워크 속도의 저하를 일으킬 수 있습니다. *SSID1: Wifi 공유기 검색할 때 나오는 명칭 이름(ex. SK_WifiXXXX) │무선 AP를 활용한 주요 사례 무선 AP는 앞에서도 언급했지만 대규모 환경에 적합하여, 다양한 분야에서 지속적으로 확대되고 있는데요. 몇 가지 대표적인 사례를 통해 좀 더 살펴보겠습니다. 디지털 뉴딜 정책 : 공공 와이파이 전환 사업 한국지능정보진흥원(NIA)에서는 2023년에 전국의 공공장소에 무선 인터넷 인프라를 대폭 확장하는 사업을 진행했습니다. 이 계획에 따라 그 해에만 4,400개의 새로운 공공장소에 공공 와이파이가 설치되어, 전체적으로 5.8만 개의 공공장소에서 공공 와이파이를 이용할 수 있게 되었습니다. 당진시 공공 와이파이 존 구축 당진시는 2018년까지 꾸준히 인구가 증가한 도시 중 하나입니다. 이러한 변화에 맞춰 교통과 물류의 인프라가 획기적으로 개선되었습니다. 더불어 당진시는 공공 와이파이 수요 증가에 대응하기 위해, Cisco AP 제품을 사용하여 시내 주요 지점에 공공 와이파이존을 확대하는 사업을 추진했습니다. 이 밖에도 국내 여러 도시에서는 스마트 시티 구축을 목표로, 도시 곳곳에 무선 AP를 설치하여 시민들이 어디서나 인터넷에 쉽게 접속할 수 있는 환경을 조성하고 있습니다. 대형 쇼핑몰, 카페 체인점(ex. 스타벅스), 호텔 등 상업 시설에서도 고객 경험 개선을 위해 무선 AP를 활용한 와이파이 서비스를 제공하고 있죠. 그렇다면 네트워크 환경에서 AP가 잘 관리될 수 있도록, 필수적으로 확인해야 하는 구성 요소는 무엇일까요? │무선 AP의 네트워크 환경 구성 요소 [그림] 무선 AP의 네트워크 환경 구성 요소 무선 AP를 구축하고 잘 관리하기 위해서는 AP 컨트롤러, LWAPP 프로토콜, PoE, UI 구성 요소들이 필요한데요. 각각 구성 요소들이 어떤 역할을 하는지 파악해 보겠습니다. AP 컨트롤러 AP 컨트롤러(WLC, Wireless Lan Controller)는 다량의 AP를 관리합니다. AP의 작동 상태를 실시간으로 모니터링하며, 접속 상태 확인과 AP 설정하는 역할을 담당하죠. 또한 로드밸런싱(대역폭 분산)과 함께 일부 AP 장애 시 주변 AP를 통한 장애 감지 기능, 플랫폼을 통한 클라이언트 접속 상태에 대한 실시간 모니터링 기능을 제공합니다. LWAPP 프로토콜 이때 AP 컨트롤러와 무선 AP 간의 통신을 위한 프로토콜인 LWAPP(Lightweight Access Point Protocol)가 필요한데요. LWAPP 프로토콜을 통해 각 AP는 컨트롤러로부터 자동으로 구성되고, 보안 업데이트를 받으며, 사용자 접속을 관리할 수 있기 때문이죠. 예를 들어 LWAPP 프로토콜 덕분에 쇼핑몰 방문객들은 어디서나 끊김 없는 와이파이 접속을 경험할 수 있으며, 운영자는 효율적으로 네트워크를 관리할 수 있습니다. PoE PoE(Power of Ethernet)는 무선 AP에 붙어 있는 이더넷 전원 장치로, 인터넷 케이블 하나에 데이터와 전원을 동시에 보내는 기술입니다. PoE를 이용하여 전원 코드를 따로 꽂을 필요가 없어, 설치가 간편하죠. 또한 별도의 어댑터 연결 없이 PoE 전송이 가능한 WAN 케이블 연결만 하면, 네트워크 기능과 전원 기능을 모두 구현할 수 있습니다. 이를 통해 AP의 벽면이나 천장에 설치가 가능합니다. UI AP 컨트롤러와 연계된 UI(UserInterface)로 AP 관리가 가능하며, AP에 연결된 클라이언트까지 확인할 수 있습니다. UI 화면을 통해 어느 정도의 트래픽을 사용했는지 확인할 수 있으며, AP의 이름(SSID)과 암호를 지정할 수 있습니다. 또한 AP에 연결된 클라이언트의 외/내부 관리가 가능합니다. Cisco Meraki와 Ruckus의 경우, AP 컨트롤러와 AP를 웹 화면으로 관리할 수 있는 UI 환경을 제공하는데요. 다음 사례를 통해 좀 더 자세히 살펴보겠습니다. │무선 AP와 컨트롤러 관리 시스템 앞에서 살펴본 것처럼 대규모의 무선 AP와 컨트롤러를 관리하기 위해서는 UI 환경, 즉 '모니터링'이 필수적인데요. 무선 AP와 컨트롤러를 모니터링할 수 있는 대표적인 사례를 살펴본다면 다음과 같습니다. Cisco Meraki [그림] Cisco Meraki 주요 장비 Cisco Meraki는 Cisco의 주요 AP, WAN, 스위치, 제품에 대한 모니터링이 가능합니다. Cisco 자체의 대시보드를 통해 장비와 현황 헬스 체크가 가능하며, 클라이언트의 실시간 사용속도와 AP에 연결된 클라이언트 리스트 역시 확인할 수 있죠. 또한 구글맵을 연동하여 주요 네트워크 장비의 위치 기반 모니터링이 가능합니다. Ruckus Networks Ruckus는 자사 네트워크 장비인 스위치, AP, AP 컨트롤러와 클라우드 관리 시스템을 제공하는 AP 전문 기업입니다. 컨트롤러와 연계된 웹 UI로 네트워크 상태를 원격으로 파악할 수 있죠. 또한 Ruckus의 대시 보드를 통해 주요 장비의 네트워크의 지리적 위치와 AP, 그리고 클라이언트 모니터링이 가능합니다. WNMS AP 벤더가 제공하는 AP 컨트롤러 관리 솔루션 외에도 WNMS(Wireless Network Monitoring System)를 통한 이기종 AP 관리가 가능합니다. 대규모 엔터프라이즈 환경에서는 다양한 이기종의 AP를 사용하는 경우가 많은데요. 이러한 환경에서 WNMS는 트래픽과 클라이언트 사용량을 확인할 수 있을 뿐만 아니라, 다양한 종류의 AP를 함께 관리할 수 있습니다. 이처럼 다양한 제조사의 AP를 하나의 시스템에서 통합적으로 관리할 수 있기 때문에, 대규모 환경에서 네트워크 관리를 효율적으로 운영할 수 있겠죠. [그림] Zenius-WNMS 모니터링 뷰 Zenius-WNMS 모니터링 화면을 보며 좀 더 자세히 살펴볼게요. Cisco와 Ruckus는 자사의 AP 무선 장비만 모니터링할 수 있는 솔루션인 반면, Zenius-WNMS는 AP 장비의 전체 운영 상황과 세부정보들을 모니터링할 수 있습니다. 컨트롤러, AP 장비 운영 상태, 벤더명, 주요 모델 및 트래픽 현황, 접속된 클라이언트 수 등 또한 확인이 가능합니다. [그림] Zenius-WNMS로 보는 무선 AP 트래픽 현황 이뿐만 아니라 Zenius-WNMS는 현재 운영중인 AP의 2.4GHz 대역, 5GH 대역에서의 트래픽 현황과 연결된 클라이언트 이벤트 현황도 모니터링할 수 있습니다. 다양한 감시 항목 설정을 통해, 주요 AP와 관련된 장애 이벤트와 운영 항목에 대한 모니터링도 가능합니다. 이를 통해 네트워크 관리자는 복잡한 네트워크 환경에서 발생할 수 있는 다양한 문제를 빠르게 대응할 수 있고, 네트워크의 성능 저하를 일으킬 수 있는 요소를 즉각적으로 식별하고 조치할 수 있죠. [그림] **대학교 종합상황판 Zenius-WNMS의 대표적인 사례로 **대학교를 들어볼 수 있는데요. 3,000여 개 이상의 대량 무선 AP를 관리하기 위해 통합 대시보드 UI 환경을 구축하였습니다. 이처럼 대규모 환경에서도 Zenius-WNMS는 효과적으로 무선 네트워크를 관리할 수 있습니다. 무선 AP와 이를 구성하는 요소들을 관리하는 체계적인 모니터링 시스템은, 이제 현대 사회에서 필수적으로 자리 잡았습니다. Zenius-WNMS을 활용하여 무선 AP를 하나의 시스템에서 통합적으로 관리하고, 대량의 무선 AP를 효율적으로 관리해 보세요!
2024.05.21
1
2
3