Browsing Tag

AI

NCLOUD

[NCLOUD] 귀찮은 건 싫으니까 AI에 올인하려고 합니다

안녕하세요. MANVSCLOUD 김수현입니다.

서버 모니터링 알림이 발생하면 어김없이 같은 루틴이 반복됩니다. 모니터링 대시보드를 확인하고, 로그를 조회하고, 문제를 분석하고, 해결하는 과정까지.
이제는 이런 반복적인 프로세스조차 ‘더 스마트하게 할 수 없을까?’하는 생각이 듭니다.

단순히 귀찮아서가 아닙니다. 엔지니어로서 항상 고민하는 것이 있다면 바로 ‘자동화’와 ‘효율화’입니다. 특히 최근 생성형 AI의 폭발적인 발전을 보면서 이러한 기술을 우리의 일상적인 업무에 접목시키면 어떨까 하는 상상을 하게 되었습니다.

그러던 어느 날 서버에 들어가는 것조차 귀찮다는 생각과 함께 최근 화제가 되었던 딥페이크 기술과 OpenAI의 Realtime API 소식이 떠올랐고 문득 “이거 아이언맨의 자비스처럼 만들 수 있지 않을까?”라는 생각이 스쳐 지나갔습니다. 영화 속 토니 스타크가 자비스와 대화하듯 우리도 AI와 자연스럽게 대화하면서 서버를 관리하고 문제를 해결할 수 있지 않을까하구요.
간단하게 “자비스, 현재 서버의 CPU 사용량이 어떻게 되지?”라고 물어보면 AI가 즉시 확인하고 답변해줄 수 있을텐데 우리는 모니터링 시스템 또는 서버에 직접 접근하고 있습니다.

물론 보안 문제도 있을 것이고 처음부터 완벽할 순 없습니다.
하지만 모든 혁신적인 프로젝트가 그렇듯 작은 상상에서부터 시작하는 법 아니겠습니까?


당신도 K-아이언맨이 될 수 있습니다.

먼저 HyperCLOVA X를 활용하여 서버를 제어하는 기본적인 시스템을 구축해보았습니다.
HyperCLOVA X를 사용한 이유는 간단했습니다. 저는 한국어로 질문을 할 것이고 제 블로그에서도 여러번 증명했듯 HyperCLOVA X의 한국어 성능은 상당히 뛰어납니다.
목표는 단순했습니다. 일상적인 서버 관리 작업들을 자연스러운 대화를 통해 수행하는 것입니다.

테스트를 위해 다음과 같은 기본적인 질문들을 설계했습니다.

  1. “Grafana가 몇 번 포트로 실행되고 있지?”
  2. “현재 파일시스템별 디스크 사용량이 어떻게 되니?”
  3. “/root/jarvis/test 파일을 삭제해줘”
  4. “/var/log/auth.log을 읽어보고 가장 최근에 시스템에 접속한 사용자가 누구인지 분석 후 알려줘”

이 과정에서 초기 프로세스는 다음과 같이 생각했습니다.

1) 사용자의 자연어 질문을 받습니다.
2) HyperCLOVA X는 질문을 분석하여 적절한 리눅스 명령어를 생성합니다.

system_template = """
# 당신은 Linux 서버 운영자입니다.
# OS는 Ubuntu 22.04입니다.
# 사용자 질문 시 적절한 명령어 및 옵션을 생성해냅니다.
# 간결하게 명령어로만 답변을 주어야합니다.
"""

3) 시스템은 생성된 명령어의 안전성을 검증합니다.
4) 검증된 명령어를 실행하고 결과를 얻습니다.
5) 실행 결과를 다시 HyperCLOVA X에 전달하여 사용자가 이해하기 쉬운 형태로 가공합니다.

second_system_template = """
# 당신은 Linux 서버 운영자입니다.
# 사용자 질문과 함께 조회된 명령어 결과를 기반으로 
# 사람과 대화하듯이 답변해 주세요.
"""

예를 들어 “Grafana가 몇 번 포트로 실행되고 있지?”라는 질문에 대해 “netstat -nltp | grep grafana”와 같이 명령어를 생성하도록 하고 실행 결과를 바탕으로 “Grafana는 현재 3000번 포트에서 실행 중입니다.”와 같이 자연스러운 대화체로 응답하도록 구현했습니다.

가장 중요한 것은 HyperCLOVA X가 직접적으로 서버를 제어하기 때문에 실행할 수 있는 명령어와 접근이 불가능한 파일을 정해두는 것이었습니다.
생성형 AI에게 서버 제어 권한을 부여하는 것은 상당한 위험을 수반하기 때문입니다.
추가적인 보안 설계가 더 필요하겠지만 몇가지 금지된 명령어 목록, 금지된 파일 목록 및 검증 로직만 간단하게 포함시켜 보았습니다.

def is_command_allowed(command):
    # 금지된 명령어 목록
    forbidden_commands = ['rm', 'mv', 'chmod', 'chown', 'dd']
    
    # 금지된 파일 목록
    forbidden_files = ['/etc/shadow', '/etc/passwd', '/etc/sudoers']
    
    # 명령어 검증 로직...

여기서 중요한 점은 AI에게 “이런 명령어는 사용하지 마”라고 프롬프트 레벨에서 제한하는 것이 아니라 시스템 레벨에서 철저하게 통제한다는 것입니다. 이는 AI의 실수나 잠재적인 보안 위협으로부터 시스템을 보호하는 가장 확실한 방법이었습니다.

기본적인 시스템을 구축 후 사전에 생각해둔 기본적인 질문을 진행해보았습니다.

  • “Grafana가 몇 번 포트로 실행되고 있지?”
  • “현재 파일시스템별 디스크 사용량이 어떻게 되니?”
  • “/root/jarvis/test 파일을 삭제해줘”
  • “/var/log/auth.log을 읽어보고 가장 최근에 시스템에 접속한 사용자가 누구인지 분석 후 알려줘”

이러한 기본적인 시스템 구축을 통해 AI 기반의 서버 관리 시스템이 실제로 구현 가능하다는 것을 확인할 수 있었습니다.
하지만 이는 시작에 불과했습니다. 다음 단계로는 이 시스템을 어떻게 확장하여 다수의 서버를 관리할 수 있을지에 대한 고민이 이어졌습니다.


앞선 테스트에서 얻은 성공적인 결과를 바탕으로 이제는 시스템을 확장하여 다수의 서버를 대상으로 명령을 수행할 수 있도록 구현해보았으며 시스템은 간단하게 다음과 같은 구조로 설계했습니다.

  1. API Gateway: 외부에서 접근 가능한 단일 엔드포인트 제공
  2. Cloud Functions: 요청을 받아 적절한 서버로 라우팅
  3. Flask 서버: 각 서버에서 실행되는 AI 에이전트
[Client] → [API Gateway] → [Cloud Functions] → [Flask Server 1]
                                           → [Flask Server 2]
                                           → [Flask Server N]

보시다시피 현재 구현된 시스템에서 가장 중요한 보안 포인트는 바로 API Gateway입니다. 이는 전체 시스템의 관문이자 첫 번째 방어선이기 때문입니다. 따라서 실제 서비스 구현 시에는 인증 및 권한 관리, 요청 제한 및 모니터링, 데이터 보안, 감사 및 로깅, 이상 행위 탐지 등 다양한 보안 요소가 모두 구현되어야 할 것입니다.

Cloud Functions에서는 다음과 같이 서버 풀을 관리되도록 하겠습니다.

def get_server_url(server_ip: str = None) -> str:
    valid_servers = {
        "10.0.11.8": "http://10.0.11.8:5000",
        "10.0.14.6": "http://10.0.14.6:5000"
    }
    
    if server_ip:
        if server_ip not in valid_servers:
            raise ValueError(f"Invalid server IP")
        return valid_servers[server_ip]
    
    return random.choice(list(valid_servers.values()))

이를 통해 특정 서버를 지정해서 명령을 실행할 수 있습니다.
Postman을 통해 다음과 같이 API를 호출 및 응답되도록 했으며 예시는 다음과 같습니다.

POST /api/jarvis/ask
{
    "server": "10.0.11.8",  // 선택사항
    "question": "현재 CPU 사용량이 어떻게 돼?"
}
{
    "server_ip": "10.0.11.8",
    "command": "top -bn1 | grep 'Cpu(s)'",
    "command_result": "Cpu(s): 12.5% us, 6.2% sy...",
    "answer": "현재 CPU 사용률은 사용자 프로세스가 12.5%, 시스템 프로세스가 6.2%를 사용하고 있습니다."
}

실제 Postman에서 API Gateway 주소로 요청을 진행해보았습니다.

현재 구현된 시스템에 몇 가지 기능만 추가한다면 영화 속 자비스에 한 걸음 더 다가갈 수 있을 것 같습니다.
그런데 중요한 건 이런 것들이 이미 존재하며 구현 가능한 기능들이라는 것입니다.

  • 실시간 Speech-to-Speech 인터페이스
    : OpenAI의 Realtime API
  • Context 관리
    : Redis나 MongoDB를 활용한 대화 세션 관리
    : 이전 대화 내용을 기반으로 한 더 자연스러운 응답
    : 사용자별 선호도와 자주 사용하는 명령어 학습
  • 선제적 모니터링과 알림
    : 이상 징후 감지 및 모니터링 알림 Trigger로 자발적 보고 (서버 A의 CPU 사용량이 급증했습니다. 확인해보시겠습니까?””
    : 예측 기반 리소스 관리 제안

이러한 아이디어는 인프라 서버 관리 및 운영에만 해당되는 것이 아니라 다양한 분야에 적용할 수 있습니다.

1) 스마트 팩토리 관리자
: 공장 설비 상태 모니터링
: 생산 라인 최적화 제안
: 품질 관리 데이터 분석

2) 의료 시설 어시스턴트
: 의료 장비 상태 관리
: 응급실 자원 할당 최적화
: 환자 데이터 실시간 모니터링

3) 스마트 빌딩 매니저
: 건물 내 모든 시설 통합 관리
: 에너지 사용량 최적화
: 보안 시스템 실시간 모니터링

4) 교통 관제 시스템
: 실시간 교통 흐름 분석
: 신호 체계 최적화 제안
: 사고 예방 및 대응

이번 테스트를 통해 SF 영화에서나 보던 AI 비서가 더 이상 먼 미래의 이야기가 아니라 원한다면 실제로 만들어볼 수 있는 가능성을 확인했습니다.
앞으로 해결해야 할 과제들이 남아있긴 하지만 이미 그 길의 초입에 들어섰습니다.


HyperCLOVA X를 활용한 단일 서버 제어부터 시작하여 Cloud Functions과 API Gateway를 통한 다중 서버 관리까지 우리가 상상하던 ‘자비스’와 같은 AI 비서 시스템이 더 이상 공상과학 영화 속 이야기만은 아니라는 것을 보여주었습니다.

이제 기술의 제약은 크게 줄어들었습니다. HyperCLOVA X, ChatGPT와 같은 생성형 AI의 발전은 우리가 상상하던 많은 것들을 현실로 만들어주고 있습니다.
이런 시대에 진정한 경쟁력은 ‘무엇을 만들 것인가’에 대한 아이디어에서 나올 것이고 경쟁력이 될 것입니다.

하지만 이러한 혁신 속에서 우리가 절대 놓치지 말아야 할 것이 있습니다. 바로 ‘보안’입니다.
AI가 권한을 갖고 무언가를 조회하고 제어한다는 것은 그만큼 큰 책임이 따른다는 것을 의미합니다. 이러한 보안 요소들은 AI 시스템 구축에 있어 선택이 아닌 필수가 되어야 할 것입니다.

긴 글 읽어주셔서 감사합니다.