반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
EMS Solution
Features
클라우드 관리
AI 인공지능
서버관리
데이터베이스 관리
네트워크 관리
트래픽 관리
설비 IoT 관리
무선 AP 관리
교환기 관리
운영자동화
실시간 관리
백업 관리
APM Solution
애플리케이션 관리
URL 관리
ITSM Solution
서비스데스크
IT 서비스 관리
Big Data Solution
SIEM
Dashboard
대시보드
Consulting Service
컨설팅 서비스
고객
레퍼런스
고객FAQ
문의하기
가격
자료실
카탈로그
사용자매뉴얼
회사소개
비전·미션
연혁
2016~현재
2000~2015
인증서·수상
투자정보
재무정보
전자공고
IR자료
새소식
공고
보도자료
오시는 길
채용
피플
컬처
공고
FAQ
블로그
열기
메인 페이지로 이동
블로그
기술이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
기술이야기
검색
기술이야기
하이브리드 클라우드 모니터링, 왜 필요한가?
기술이야기
하이브리드 클라우드 모니터링, 왜 필요한가?
최근 하이브리드 클라우드가 점점 더 중요한 역할을 하고 있습니다. 하이브리드 클라우드(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
기술이야기
옵저버빌리티(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
기술이야기
데브옵스(DevOps)에 대한 오해, 그리고 진실은?!
기술이야기
데브옵스(DevOps)에 대한 오해, 그리고 진실은?!
2000년 대 후반 IT 분야에서 데브옵스(DevOps)라는 움직임이 시작된 후, 꾸준하게 관심이 이어지고 있습니다. 데브옵스와 관련된 전 세계 시장의 규모는 2023년 기준 약 15조 원으로 추산되며, 올해부터는 연평균 25.5%씩 성장하여 2032년에 118조 원에 이를 것으로 예상됩니다(*출처: Grand View Research). 우리나라의 경우 네이버, 카카오, 우아한 형제들, 토스 등과 같은 국내 대기업부터 스타트업까지 데브옵스 팀을 구축하여 적극적으로 활용하고 있기도 한데요. 이처럼 많은 기업들이 말하는 데브옵스란 과연 무엇일까요? 그리고 어떻게 하면 데브옵스를 성공적으로 도입하고 활용할 수 있을까요? │ 데브옵스(DevOps)란 무엇인가? [그림 1] DevOps 개념 ⓒdevopedia 우선 데브옵스가 무엇인지부터 살펴봅시다. 검색 사이트에서 '데브옵스 혹은 DevOps'라고 검색하면 위 [그림1]과 같은 결과를 찾을 수 있는데요. [그림 2] DevOps에 대한 필자의 첫인상 하지만 처음 데브옵스라는 단어를 접할 경우 [그림 2]처럼 오버랩되는 건, 필자만 그런 것은 아니라고 생각합니다. 위 그림처럼 "개발자 보러 운영까지 하라는 거야? 아니면 운영자에게 개발까지 하라는 거야?"라는 질문을 던질 수 있겠죠. 데브옵스(DevOps)는 소프트웨어의 개발(Developmnet)과 + 운영(Operations)의 합성어이다. 이는 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직 간의 상호 의존적 대응이며, 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다. ⓒ위키백과 위 내용에도 언급되었듯이, 데브옵스라는 것은 결국 단순한 기술이 아닌 환경 또는 사람들 간에 관계라고 할 수 있습니다. 그렇다면 데브옵스는 어떤 이유로 주목받을 수 있었을까요? │ 데브옵스(DevOps)가 주목받게 된 배경은? 데브옵스가 주목받은 이유는 여러 가지 있을 수 있지만, 주요한 이유 중 몇 가지를 설명하면 다음과 같습니다. 클라우드 컴퓨팅 기술의 발전 IT 산업의 발전에 따라 빠른 개발과 빠른 배포, 그리고 고객의 요구에 신속하게 대응하는 능력이 중요해졌습니다. 특히 클라우드 컴퓨팅(Cloud Computing) 기술의 발전으로 데브옵스의 필요성이 더 대두되었는데요. 클라우드 자원의 가상화 기술과 빠른 프로비저닝*1을 통해 기존의 개발과 운영 간의 경계가 허물어지며, 서로 간의 협력이 필수적으로 요구되었기 때문입니다. 실제로 데브옵스만으로는 52%, 클라우드 단독 사용으로는 53%의 성능 향상을 얻었지만, 데브옵스와 클라우드가 결합된 환경에서는 평균 81%의 성능을 향상시킬 수 있다는 조사 결과도 있습니다. *1 프로비저닝(Provisioning): 사용자가 요청한 IT 자원을 사용할 수 있는 상태로 준비하는 것 MSA의 등장 [그림 4] 모놀리식 구조 예시(왼) [그림 5] MSA 구조 예시(오) 지금까지 운영 중인 시스템 혹은 서비스는, 하나의 큰 덩어리로 구성된 [그림 4] 모놀리식(Monolithic) 구조를 많이 사용하고 있습니다. 안정성을 확보하고 기능 추가를 편리하게 할 수 있었기 때문이죠. 하지만 한 부분의 변경이 전체 시스템에 영향을 미칠 수 있어, 유지보수가 어렵다는 한계점이 있습니다. 예를 든다면 특정 기능이 수정이 필요한 경우에도, 전체 시스템을 수정해야 해서 번거롭고 비효율적인 부분이 있습니다. 이러한 모놀리식 구조의 한계점으로 소프트웨어의 구조가 서서히 [그림 5] MSA(Micro Service Architecture)로 변화되고 있습니다. MSA는 통합된 하나의 덩어리를 관리하는 것이 아닌, 작은 단위로 쪼개어 관리하는 방식인데요. 관리하기도 효율적이고, 소프트웨어 품질개선과 요구사항 반영이 비교적 편리해졌습니다. 각 서비스가 독립적으로 배포되고 운영되기 때문에, 특정 기능을 수정할 때 전체 기능을 수정하거나 다시 배포할 필요가 없어진 거죠. 하지만 이러한 변화는 기존의 개발 환경과 조직 문화로 대응하기엔 어려움이 있었습니다. 이때 '데브옵스(DevOps)'가 좋은 솔루션으로 등장한 것이죠! 데브옵스가 지속적인 통합(CI)1과 지속적인 배포(CD)2를 통해 빠른 개발 주기를 실현하고 배포할 수 있을 뿐만 아니라, 다수의 독립적인 서비스가 상호작용할 수 있도록 원활한 협업과 통합을 가능하게 했기 때문입니다. *1 지속적인 통합(Continuous Integration, CI) 개발자가 코드를 변경할 때마다 자동으로 통합하고 빌드 하여, 소프트웨어의 품질을 빠르게 확인하는 과정 *2 지속적인 배포(Continuous Delivery, CD) 통합된 코드를 자동으로 테스트하고, 안정적으로 통과한 경우에는 자동으로 프로덕션 환경에 소프트웨어를 배포하는 것. 이에 따라 사용자에게 새로운 기능이나 수정 사항을 신속히 제공하는 과정 │ 데브옵스(DevOps) 도입 성공사례는? 이처럼 데브옵스의 정의와 주목받게 된 배경을 살펴봤는데요. 이번에는 데브옵스를 실제로 기업에 적용해 보고 성공한 사례를 자세히 살펴볼까요? 넷플릭스 넷플릭스(Netflix)는 데브옵스를 성공의 핵심요소로 삼아, 지속적으로 새로운 기능과 업데이트를 제공했습니다. 자동화된 유연한 인프라로 사용자 경험을 향상시켰죠. 이를 통해 빠르게 변화하는 스트리밍 산업에서 앞서 나갈 수 있게 되었고, 많은 비즈니스 이점을 얻게 되었습니다. 사실 넷플릭스는 2008년 큰 장애를 겪은 후, 클라우드로 이전되면서 인프라를 혁신적으로 개편했습니다. 이로써 기존의 수직적 단일 장애 지점에서 벗어나, 수평적으로 확장 가능한 분산 시스템을 구축할 수 있었습니다. 아마존 아마존(Amazon)은 데브옵스 원칙을 초기에 채택하여, 개발과 운영팀 간의 협력을 강화했습니다. 자동화와 지속적인 통합을 강조함에 따라, 빠른 배포 주기와 개선된 확장성을 달성할 수 있었죠. 이러한 아마존의 데브옵스 접근 방식은, 시장에서 경쟁 우위를 유지하는데 중요한 역할을 했습니다. 아마존 창립자인 제프 베이조스는 아마존의 데브옵스에 대해 '고객에게 집중하고, 혁신을 포용하며, 실험할 용기'를 강조했습니다. 베이조스는 혁신을 위해, 오해를 받고 비판받을 의향이 있어야 한다고 말했던 것이죠. 페이스북 페이스북(Facebook)은 "빠르게 움직이고 물건을 부수라"는 문화에 뿌리를 둔 데브옵스 관행을 택했습니다. 실험, 민첩성, 위험 감수를 중시하는 접근 방식을 포함해서 말이죠. 이처럼 페이스북은 지속적인 통합과 배포, 자동화된 테스팅, 모니터링을 사용하여 사용자에게 더 빠르고 높은 품질의 새로운 기능과 업데이트를 제공하고 있습니다. 월마트 2011년부터 데브옵스를 도입한 월마트(Walmart)는 자동화와 협업 그리고 지속적인 배포에 중점을 두었습니다. 애자일(Agile) 방법론과 클라우드 기반의 인프라 및 데브옵스 툴체인을 활용하여, 하루에 최대 100번까지 코드를 배포할 수 있게 된 것이죠. 이를 통해 디지털 변환을 가속화하고, 전자상거래 플랫폼을 개선하며, 고객 경험을 향상시킬 수 있었습니다. 위 기업들은 데브옵스라는 도구를 효과적으로 활용하여 비즈니스 성과를 창출하고, 경쟁 우위를 확보할 수 있었습니다. 그렇다면 데브옵스를 도입하기만 하면 무조건 성공할 수 있을까요? │ 데브옵스(DevOps)의 오해와 한계 앞선 질문에 대한 대답은 아쉽게도 NO입니다. 데브옵스는 개발 환경과 문화를 전부 해결해 줄 수 있는 '만능책'은 아니라는 것이죠. 데브옵스가 도입된 이후 새로운 한계점이 발견되었고, 실패할 사례들도 적지 않게 나왔습니다. 이러한 결과는 아래와 같은 오해들에서 비롯될 확률이 높은데요. 대표적으로 3가지만 살펴봅시다. [그림 6] DevOps 구현을 위한 도구 ⓒMedium_Ajesh Martin 오해 1. 데브옵스는 일종의 단순한 도구일 뿐이다? 데브옵스를 '일종의 도구'로만 보는 것은 잘못된 판단입니다. 물론 여러 팀에서 보다 더 나은 환경과 문화를 위해 슬랙(Slack), 젠킨즈(Jenkins), 도커(Docker) 등 여러 도구를 사용하는 것은 좋습니다. 하지만 데브옵스는 이보다 더 광범위한 접근 방식을 담고 있습니다. 즉 개발과 운영팀 간의 협력과 더 빠른 소프트웨어 개발과 배포를 가능하게 하는 방법론을 포함한다는 것이죠. 다시 말해 데브옵스라는 '도구'를 이용하기 이전에, 문화적 그리고 기술적 접근 방식이 바탕이 되어야 데브옵스라는 툴이 도움 될 수 있습니다. 오해 2. 데브옵스는 모든 조직에 적합하다? 만약 '다른 회사에 데브옵스라는 팀이 있으니, 우리도 데브옵스 팀을 만들자'라는 식으로 접근한다면, [그림 2]와 같은 모습이 될 것으로 예상됩니다. 즉 데브옵스의 조직 체계를 구성한다고 해서 데브옵스가 실현될 순 없습니다. 서로 다른 입장과 상황이 있는 개발자-팀-회사, 운영자-팀-회사 간에 상당한 노력을 통해 만들어 내는 것이 더 중요한 것이죠. 이와 비슷한 사례로 애자일(Agile) 문화가 있습니다. 2000년대 초반 '애자일 소프트웨어 선언문'으로 다양한 애자일 방법론이 주목을 받았었죠. 개발에서 빠르고 유연한 방법을 강조하며, 이후 많은 기업들이 애자일 방법론을 도입하게 되며 유행처럼 번져갔습니다. [그림 7] Agile 프로세스 여기서 애자일 문화를 도입한 많은 기업들이 간과했던 사실은, 애자일 문화 도입 자체가 '해결책'이라고 생각했다는 점입니다. 이보다 기존의 조직 문화에서 애자일 문화를 도입하는 것이 적합한 상황인지, 기존의 프로세스보다 효과를 발휘할 수 있는지, 팀 구성원들이 충분히 적응할 수 있는 문화인지 등을 우선적으로 고려하는 것이 더 중요합니다. 데브옵스 역시 마찬가지로 기존의 조직 규모, 문화, 프로젝트의 특성에 대한 명확한 이해가 먼저 선행되어야 합니다. 데브옵스 도입 전에 조직의 현재 상황과 목표를 면밀히 평가한 후, 점진적으로 도입하는 것이 중요하죠. 대기업이나 캐시카우가 있는 기업들이 데브옵스를 실행했다고 해서, 또는 단지 트렌드라는 이유만으로 도입하는 것은 위험할 수 있습니다. 오해 3. 데브옵스는 빠른 소프트웨어 배포만을 목표로 한다? 데브옵스는 속도만 중시하고 품질이나 안정성을 소홀히 한다는 인식이 있습니다. 하지만 데브옵스는 소프트웨어의 빠른 배포뿐만 아니라, 품질과 안정성 그리고 보안을 동시에 추구해야 합니다. 이에 따라 지속적인 통합과 배포(CI/CD), 자동화된 테스트, 모니터링 등을 통해 이러한 목표를 달성하려고 노력해야 하죠. 이처럼 데브옵스라는 도구를 도입하고 데브옵스 팀을 구성했다고 해서, 데브옵스가 즉각적으로 실현되는 것은 아닙니다. │ 데브옵스(DevOps) 보다 선행되어야 하는 '이것' 진정한 데브옵스를 실현하기 위한 방법을 한 문장으로 표현한다면 다음과 같습니다. "싸우지 말고 함께 소프트웨어 시스템 혹은 서비스를 만들어봐요" 힘 빠지는 결론일 수도 있습니다. 하지만 데브옵스를 도입하기 이전에 더 선행되어야 할 것은 각각 다른 업무의 조직원들끼리 서로를 이해하고, 협력하며, 보다 안정적인 시스템과 서비스를 제공하는 '문화'를 만드는 것이 더 현실적인 행동이라고 생각합니다. 물론 데브(Dev)와 옵스(Ops)는 우선순위가 동일하지 않고, 동일한 언어를 사용하지 않을 수 있으며, 매우 다른 관점에서 문제 해결될 가능성이 높습니다. 이처럼 팀을 하나로 모으기 위해서는 상당한 시간과 지속적인 노력이 필요한 것이죠. 그렇다면 어떤 방식으로 팀 협업 문화를 만들어야, 데브옵스를 보다 성공적으로 도입할 수 있을까요? │ 데브옵스(DevOps) 성공을 위한 첫걸음 먼저 조직 내의 문화를 이해한 다음, 조직 내 교육과 커뮤니케이션을 강화하는 것이 중요한데요. 구체적인 방안을 제안한다면 다음과 같습니다. 로테이션 프로그램 도입 진정한 데브옵스를 실현하려면, 무엇보다 각 부서의 업무적인 이해가 중요합니다. 가장 직관적인 방법으로는 다른 부서의 업무를 '직접 체험'해 보는 것입니다. 예를 든다면 개발자가 운영팀의 업무를 수행하거나, 보안 팀이 개발 업무에 참여하는 등, 다양한 부서 간의 경험을 쌓아 보는 것이죠. 이를 통해 서로의 업무 환경과 각 부서 간의 역할을 이해하는 데 큰 도움을 받을 수 있습니다. 지식 공유 플랫폼 구축 내부 플랫폼이나 문서화된 지식 공유 시스템을 구축하는 방법도 있습니다. 각 부서의 업무와 프로세스에 대한 정보를 쉽게 접근할 수 있도록 하는 것이죠. 예를 들면 데브옵스 문화나 기술적인 도구, 프로세스 등을 포함하여 다양한 지식을 공유합니다. 이를 통해 각 부서의 업무 특성을 명확히 이해할 수 있고, 협업을 원활하게 진행할 수 있겠죠. 정기적인 교육 세션 빠르게 변화하는 기술에 대응하기 위해, 팀원들이 지속적으로 학습하고 발전해야 합니다. 정기적인 교육은 이러한 학습을 지원하는 데 중요한 역할을 하는데요. 예를 든다면 새로 도입된 CI/CD 도구에 대한 워크숍을 개최하여, 팀원들이 해당 도구의 사용법과 이점을 학습할 수 있도록 합니다. 또한 현재 사용 중인 프로세스 개선점에 대한 세션을 주기적으로 열어, 팀원들이 학습한 내용을 바탕으로 업무에 효율적으로 적용할 수 있습니다. 만약 특정 분야에 강점을 가진 팀원이 있어 주기적으로 자신의 경험과 성과를 공유한다면, 팀 전체에게 영감을 주고 학습 기회를 제공할 수도 있겠죠. 스탠드 업 미팅 활성화 매일 정해진 시간에 각 팀원이 자신의 진행 상황이나 이슈, 계획을 간결하게 공유합니다. 정해진 시간을 지키고 효율적인 미팅 진행을 위해, 공유하는 팀원들의 말에 집중하되 '총 15분'을 초과하지 않도록 노력하는 것이 중요합니다. 이를 통해 짧은 시간 동안 팀 전체가 빠르게 현재 상황을 파악하고, 실시간으로 정보를 공유하며, 신속하게 문제를 해결할 수 있습니다. 이처럼 위와 같은 방법들을 통해 구성원들이 효과적으로 협력할 수 있는 환경을 조성하는 노력들이 필요합니다. 。。。。。。。。。。。。 많은 기업들이 경쟁에서 지지 않기 위해 도입하고 있는 데브옵스(DevOps). 하지만 진정한 데브옵스를 실현하기 위해서는 "싸우지 말고 소프트웨어 시스템 혹은 서비스를 만들어 봐요"라는 문장처럼 각각 다른 업무의 조직원들끼리 서로 이해하고, 협력하는 문화가 선행되는 것이 매우 중요합니다. 즉 너희 팀 vs 우리 팀 업무를 구분하지 않고 함께 협력하여, 아이디어를 생산하고, 가치를 창출해야 하는 것이죠. 혹시 아직 데브옵스를 도입하기 전이거나, 도입 이후에 올바르게 활용되고 있는지 궁금하시다면, 오늘 이 글을 통해 심도 있게 생각해 보시는 건 어떨까요?
2024.02.14
기술이야기
가트너부터 딜로이트까지, 2024 IT트렌드 총정리
기술이야기
가트너부터 딜로이트까지, 2024 IT트렌드 총정리
지난해는 AI를 중심으로 IT 전 분야에서 혁신적인 변화가 있었고, 올 2024년에는 변화의 속도가 더 빨라질 것으로 예상됩니다. 따라서 이와 같은 빠른 변화를에 얼마나 잘 대처하는지가 점점 더 중요해지고 있는데요. 변화를 더 자세하고 빠르게 파악하기 위해서 가트너, 딜로이트, 포레스터 리서치가 발표한 2024 IT 트렌드의 핵심 내용을 모아봤습니다. 。。。。。。。。。。。。 가트너, AI가 가져올 구체적인 변화에 주목하다 가트너는 AI TRiSM부터 Machine Customers까지 총 10개의 주제로 2024년 IT 트렌드를 정리했습니다. 특히 AI와 클라우드를 통한 산업에서의 구체적인 변화에 주목했는데요. 자세한 내용을 살펴보겠습니다. [1] AI TRiSM: AI의 신뢰, 위험 및 보안 관리 AI TRiSM(AI Trust, Risk, and Security Management)은 인공지능 시스템의 신뢰성, 위험, 보안을 관리하는 프레임워크입니다. AI가 윤리적이고 공정하며 투명해야 함을 의미하며, 잠재적 위험을 식별하고 완화하는 데 중점을 둡니다. 보안 관리는 AI 시스템을 사이버 공격과 데이터 유출로부터 보호합니다. AI TRiSM은 의료·금융·자율주행 차량 등, 다양한 분야에서 AI의 안전하고 책임 있는 사용을 보장하는 데 필수적입니다. 이를 통해서 AI 기술의 지속 가능한 발전과 사회적 신뢰를 유지할 수 있습니다. [2] CTEM: 지속적인 위협 노출 관리 Continuous Threat Exposure Management(CTEM)은 사이버 보안 분야에서 조직의 지속적인 위협 노출을 관리하는 전략입니다. 이 방법론은 실시간 모니터링, 자동화된 위험 평가, 적응적 대응 전략을 포함하며 장기적으로 비즈니스의 연속성을 보장하는데 기여합니다. 예를 들어 금융 서비스 회사는 네트워크와 시스템을 지속적으로 스캔하여 취약점을 탐지하고, 감지된 위협에 대해 우선순위를 매겨 신속하게 대응해야 합니다. 또한 소프트웨어 개발 회사는 개발 중인 소프트웨어와 인프라를 모니터링하여 보안 취약점을 조기에 발견하고, 자동화된 도구를 사용해 코드의 취약점을 수정해야 합니다. [3] Sustainable Technology: 지속 가능한 기술 지속 가능한 기술은 환경 영향을 줄이고 지속 가능성을 촉진하는 혁신 및 관행을 포함합니다. IIoT(산업용 사물 인터넷) 센서와 AI를 사용하여 공급망 작업을 최적화하고, 탄소 배출을 줄이며 전반적인 장비 효율성을 향상시키는 산업이 좋은 예입니다. 또한 자급자족 LED 조명, 전기 교통, 태양 에너지, 탄소 포집 및 저장 기술 등의 지속 가능한 기술과 관행도 포함됩니다. 가트너는 또한 지속 가능한 기술이 위험 감소, 운영 효율성 향상, 경쟁 우위 획득, 인재 유치, 환경 및 사회적 책임 강화와 같은 비즈니스 이점을 제공한다고 강조합니다. [4] Platform Engineering: 플랫폼 엔지니어링 플랫폼 엔지니어링은 개발자와 사용자가 쉽게 사용할 수 있는 도구, 기능 및 프로세스 세트를 제공하는 방식입니다. 사용자의 생산성을 높이고 부담을 줄이는데 중점을 둡니다. 플랫폼 엔지니어링은 사용자의 특정 요구와 비즈니스 요구에 맞게 플랫폼을 수정합니다. 전담 제품 팀은 재사용 가능한 도구와 적절한 기능을 제공하며, 사용자 친화적인 인터페이스 솔루션을 제공합니다. 자동화된 프로세스 및 의사 결정을 위한 기초를 제공하며, 복잡한 상황에서도 디지털 개발을 가속화하게 하는 Be Informed 플랫폼이 좋은 예입니다. [5] AI-Augmented Development: AI 증강 개발 소프트웨어 개발 과정에서 AI를 활용하여 개발자의 작업을 돕고, 테스트 플랫폼과 문서 작성을 지원하는 것을 뜻합니다. GitHub Copilot, Replit GhostWriter, Amazon CodeWhisperer와 같은 AI 기반 코드 생성 서비스가 좋은 예입니다. 이러한 AI 기반 코딩 도우미를 사용하여 업무의 효율을 높일 수 있지만, AI가 오류를 발생시킬 수 있고 독창적인 코드를 생성할 수 없기에 개발자의 역할은 여전히 중요합니다. [6] Industry Cloud Platforms: 산업 클라우드 플랫폼 Industry Cloud Platforms은 특정 산업에 특화된 기능을 제공하는 클라우드 서비스입니다. SaaS(Software as a Service), PaaS(Platform as a Service), IaaS(Infrastructure as a Service)를 결합하여 업계별 맞춤형 기능을 제공합니다. 구체적으로 네 가지의 서비스를 예로 들 수 있습니다. ◾ AWS for Healthcare AWS는 의료 산업에 특화된 클라우드 서비스를 제공하여 의료 데이터 관리, 환자 관리, 의료 연구 등을 지원합니다. ◾ Microsoft Cloud for Financial Services 금융 산업에 맞춤화된 클라우드 솔루션을 제공하여 은행업, 보험 업계에서 사용되고 있습니다. ◾ GCP for Retail Google은 소매 산업에 특화된 클라우드 서비스를 통해 고객 데이터 분석, 재고 관리, 전자상거래 솔루션 등을 지원합니다. ◾ IBM Cloud for Telecommunications 통신 산업에 최적화된 클라우드 서비스를 제공하여 네트워크 운영, 고객 서비스 향상, 신기술 적용 등을 지원합니다. 이러한 산업별 클라우드 플랫폼은 기업이 보다 효율적으로 운영하고 혁신을 가속화하는 데 도움을 줍니다. [7] Intelligent Applications: 지능형 애플리케이션 Intelligent Applications은 인공지능(AI)과 머신러닝 기술을 활용하여 데이터를 분석하고, 사용자 행동을 예측하는 등의 기능을 제공합니다. 자동화된 의사결정, 사용자 맞춤형 경험 제공, 그리고 비즈니스 프로세스의 효율성 향상을 위해 설계되었습니다. 예를 들어 고객 서비스를 위한 AI 기반 챗봇, 데이터 분석을 통해 사용자에게 맞춤형 추천을 제공하는 소매 애플리케이션, 또는 실시간 의료 데이터 분석을 제공하는 헬스케어 애플리케이션 등이 있습니다. Salesforce Einstein, Google Cloud AI, IBM Watson, Microsoft Azure AI가 지능형 애플리케이션에 해당합니다. [8] Democratized Generative AI: 민주화된 생성 AI Democratized Generative AI는 인공지능의 생성 능력을 널리 사용할 수 있게 하는 개념으로, 비전문가도 쉽게 사용할 수 있는 AI 도구와 플랫폼을 의미합니다. 창작물 생성, 데이터 분석, 예측 모델링 등 다양한 분야에서 사용됩니다. 구체적인 서비스나 회사로는 OpenAI의 GPT-, Google의 DeepMind, Adobe의 Sensei와 같은 플랫폼들이 이에 해당합니다. 이러한 도구들은 사용자가 복잡한 알고리즘을 직접 다루지 않고도 AI의 혜택을 누릴 수 있게 해줍니다. [9] Augmented Connected Workforce: 증강 연결된 노동력 기술을 활용하여 직원들의 작업 능력을 향상시키고 원격 협업을 강화하는 전략입니다. 가상 현실, 증강 현실, 인공지능 등을 포함하는 다양한 기술을 활용하여 직원들이 더 효율적이고 효과적으로 협업하고 작업할 수 있도록 지원합니다. Microsoft의 HoloLens와 같은 증강 현실 기기나 Slack, Microsoft Teams와 같은 협업 플랫폼이 좋은 예입니다. 이러한 기술들은 직원들이 시간과 장소의 제약 없이, 효과적으로 협업하고 작업할 수 있는 환경을 만들어줍니다. [10] Machine Customers: 기계 고객 기계나 소프트웨어가 독립적으로 결정을 내리고 트랜잭션을 수행하는 시나리오를 말합니다. 예를 들어 IoT(사물 인터넷) 기기나 자동화 시스템이 소비자 역할을 수행하여 자동으로 주문하거나, 서비스를 요청하는 것입니다. Amazone Dash의 예시 소모품의 사용량을 체크하여 필요할 때 자동으로 주문하는 Amazon의 Dash Service가 대표적인 예입니다. 이러한 기술은 자동화된 공급 체인 관리와 효율적인 재고 관리 등에 기여하며, 비즈니스와 소비자 모두에게 편리함을 제공합니다. 딜로이트, 6가지 트렌드에 주목하다 딜로이트(Deloitte)는 2024 IT 트렌드를 아래와 같은 여섯 개의 주제로 정리했습니다. [1] 공간 컴퓨팅과 메타버스 메타버스는 기업의 주요 도구로 자리 잡고 있으며, 공간 컴퓨팅 기술도 점점 더 중요한 역할을 할 예정입니다. 디지털 트윈, 5G, 클라우드, 엣지, AI 기술에 대한 투자가 이 변화를 주도하고 있습니다. [2] 생성형 AI 생성형 AI는 비즈니스를 개선하고 혁신을 촉진하는 강력한 도구로, 전략적 계획과 특정 비즈니스 요구에 초점을 맞추어 구현되고 있습니다. 기업은 이 기술을 통해 각 분야에서 높은 경쟁력을 확보할 수 있습니다. 사용자의 시청 패턴과 선호도를 분석하여, 개인화된 추천 콘텐츠를 제공하는 Netflix와 Spotify가 가장 기본적이고 좋은 예입니다. [3] 새로운 컴퓨팅 방식의 도입 비즈니스는 기존 인프라를 더 효율적으로 활용하고, 최첨단 하드웨어를 추가하여 프로세스를 가속화하고 있습니다. 일부 기업은 이전 컴퓨팅을 넘어서 클라우드, 엣지, 양자 컴퓨팅 등 새로운 컴퓨팅 방식을 모색하고 있습니다. [4] 개발자 경험 강화(DevOps를 넘어 DevEx로) 기술 인재를 유치하고 유지하기 위해 회사들은 개발자 경험에 초점을 맞추고 있습니다. Github Copilot 같은 코드 자동 완성 및 분석 도구의 도입, 통합 개발 환경(IDE) 최적화, 컨테이너화 및 오케스트레이션 도구 도입 등이 이에 해당합니다. 이러한 노력은 결국 최종 사용자의 경험을 향상시켜 비지니스 성과를 높여줄 예정입니다. [5] 합성 미디어 시대의 진실 방어 AI의 부상으로 인해 악의적인 딥페이크 콘텐츠가 증가함에 따라, 각 기업과 조직들은 유해 콘텐츠를 식별하고 잠재적 공격을 예측하기 위한 방법을 도입하고 있습니다. 특히 2024년은 미국 대통령 선거 등 중요한 이벤트가 많기에 중요한 이슈로 떠오를 예정입니다. [6] 기술적 부채에서 기술적 웰니스로 각 회사와 조직은 기존 코어 시스템, 인프라, 데이터, 애플리케이션을 포함한 노후화된 시스템을 현대화해야 합니다. 이를 위해 정기적인 점검과 예방적 관리에 중점을 두는 새로운 접근 방식이 필요합니다. 포레스터 리서치, 생성형 AI와 디지털 혁신에 주목하다 포레스터 리서치에 따르면 전 세계 기술 분야에 대한 투자는 5.3% 증가할 것으로 예상됩니다. 이 중 금융 서비스와 헬스케어가 가장 빠른 성장세를 보일 것이고, 클라우드 컴퓨팅을 포함한 IT 서비스와 소프트웨어 분야는 2027년까지 가장 높은 비중을 차지할 예정입니다. 또한 기업이 위험을 줄이고 경쟁력을 확보하기 위해선 생성형 AI, 그리고 녹색 및 디지털 혁신 등에 주목해야 합니다. 생성형 AI 생성형 AI는 2024년에 중요한 역할을 할 것으로 예상됩니다. 대형 컨설팅 회사들은 생성형 AI에 큰 규모의 투자를 할 것이며, 해당 기업들은 경쟁력을 높이기 위해 AWS, Microsoft Azure, GCP 등과 파트너십을 맺을 것으로 예상됩니다. 이제 각 기업이 생성형 AI를 활용하여 실질적인 이윤을 추구하기 시작할 것이기 때문에, 2024년을 '의도적 AI 시대(era of intentional AI)의 원년'이라고도 말할 수 있습니다. 녹색 및 디지털 혁신 데이터 센터의 에너지 효율을 높이기 위한 노력이 진전을 보이고 있습니다. 2030년까지 데이터 센터를 탄소 중립으로 만들겠다는 약속이 강화되고 있습니다. 이는 지속 가능하고 환경친화적인 기술로의 전환의 시작을 뜻합니다. 기술 리더들의 도전 기술 분야의 리더들이 인재를 발굴하고 비즈니스 전략과 기술을 조화시키는데 어려움을 겪을 것으로 예상됩니다. 또한 AI와 관련된 기술의 수요가 빠르게 증가할 것이기에, 관련된 기술과 경험을 기르는 것도 매우 중요해지고 있습니다. 마지막으로 포레스터는 기업들의 경쟁력 유지와 성장 촉진을 위해 위와 같은 트렌드를 빠르게 받아들여야 한다고 강조했습니다. 매튜 구아리니 포레스터 리서치 부사장은, "전체 기술 전략을 핵심까지 현대화하고 조직과 운영을 크게 향상시켜야 성과를 얻을 수 있다"라고 말했습니다. 。。。。。。。。。。。。 가트너, 포레스터 리서치, 딜로이트가 전망한 2024 IT 트렌드를 살펴봤습니다. 트렌드를 아는 것에서 그치는 것이 아니라 발 빠르게 대응하는 것이 가장 중요합니다. 브레인즈컴퍼니는 트렌드에 빠르고 효과적으로 대응할 수 있도록, 제니우스(Zenius)를 통해 쿠버네티스(Kubernetes)를 비롯한 프라이빗/퍼블릭/하이브리드 클라우드 환경, 온-프레미스 환경 모두를 완벽하게 관리할 수 있는 서비스를 제공하고 있습니다. 또한 브레인즈컴퍼니의 자회사인 에이프리카는 AI 비즈니스를 위한 쿠버네티스 기반의 AI 개발 통합 플랫폼 솔루션과, 멀티 클라우드 통합 관리 플랫폼(CMP) 솔루션을 제공하고 있습니다(🔍에이프리카 솔루션 자세히 보기). 힘차게 시작한 2024년, 올 한 해는 또 얼마나 큰 변화가 있을까요? 이 글을 읽으시는 모두가 변화에 앞서가서 성공 스토리를 만들 수 있기를 기원합니다.
2024.01.19
기술이야기
테라폼(Terraform)의 모든 것, 그리고 AWS EC2 생성하기
기술이야기
테라폼(Terraform)의 모든 것, 그리고 AWS EC2 생성하기
클라우드 환경이 도래하면서 CSP(Cloud Service Provider)에서는 콘솔을 통해 클라우드 자원에 쉽게 접근할 수 있게 되었습니다. 하지만 서비스를 운영하며 발생하는 다양한 이슈를 콘솔에서 전부 관리하기에는 무리가 있습니다. 반복적인 작업과 휴먼에러가 발생하기 때문이죠. 이러한 문제를 한 번에 해결할 수 있는 방법이 바로 IaC(Infrastructure as Code)입니다. 인프라를 코드로 관리하는 컨셉으로, 효율적인 데브옵스와 클라우드 자동화 구축을 위해 ‘꼭’ 필요한 기술로 각광받고 있죠. 그중에서도 ‘테라폼(Terraform)’은 가장 강력한 IaC 도구로 꼽힙니다. “테라폼(Terraform)이란?” 테라폼은 하시코프(Hashicorp) 사에서 Go 언어로 개발한 오픈소스 IaC 도구입니다. 테라폼에서는 HCL(Hashicorp Configuration Language, 하시코프 설정 언어)을 사용해 클라우드 리소스를 선언합니다. *쉽게 설명한다면 코드로서 클라우드 인프라 서버를 더 효율적으로 구축하고, 운영할 수 있는 오픈소스 소프트웨어죠. 따라서 이번 시간에는 테라폼의 기본동작방식, 특장점, 명령어의 종류, 구체적인 활용 예시에 대해서 살펴보겠습니다. 。。。。。。。。。。。。 테라폼의 기본동작방식 테라폼은 Write, Plan, Apply 기본동작방식으로 이루어져 있는데요. Write 단계에서는 HCL 언어로 필요한 리소스를 선언하고, Plan 단계에서는 앞에서 선언된 리소스들이 생성 가능한지 테스트 및 예측 실행을 수행하며, Apply 단계에서는 선언된 리소스들을 CSP에 적용하는 과정을 거칩니다. *쉽게 설명한다면 Write 단계는 코드 기반으로 선언하고, Plan 단계는 코드 기반으로 검토하며, Apply 단계는 코드 기반으로 리소스를 생성하는 것이죠. 테라폼의 기본개념 테라폼의 주요 기본개념이자 구성요소입니다. 전부 필수적인 내용이지만 특히 Resource, Provider, State는 많이 쓰이는 중요 개념이며 하단 예시에도 나오니 꼭 기억해 두세요! 테라폼의 장점 테라폼은 다양한 장점들이 있는데요. 그중 가장 큰 장점은 자동화를 통해 코드 기반으로 서버 운영 및 관리가 가능한 점입니다. 초보자도 쉬운 코드 재사용을 통해, 효율적인 협업이 가능하고 생산성도 향상시킬 수 있죠. 또한 테라폼은 AWS, GCP(구글), Azure(MS), Naver Cloud(네이버클라우드) 등 다양한 환경에서 지원이 가능한데요. 즉 테라폼만으로도 멀티 클라우드 리소스들을 선언하고 코드로 관리할 수 있습니다. 테라폼의 명령어 테라폼에서 자주 쓰이는 명령어입니다. 그중에서도 코드를 통해 실행될 내용을 미리 확인하는 Plan, 코드 기반으로 리소스를 생성하는 Apply, 그리고 상태를 확인하는 State가 핵심 명령어로 많이 사용되고 있습니다. 테라폼의 활용예시 테라폼을 통해 많은 것을 할 수 있지만, 이번 시간에는 테라폼을 이용하여 AWS에 가장 중심이 되는 서비스인 EC2(AWS에서 제공하는 서버)를 생성해 보겠습니다. 또한 제니우스(Zenius) 모니터링까지 살펴봅시다! 우선 앞서 [테라폼의 기본동작방식]에서 설명했던 것처럼 테라폼은 Write, Plan, Apply 단계를 거치게 되는데요. 테라폼 명령어가 어떤 방식으로 쓰이고 반응하는지, 예시를 통해 확인해 볼까요? > Write 단계: Provider 및 Resource 선언하기 Writer 단계에서는 [테라폼의 기본개념]으로 언급된 *Provider, Resource를 코드 기반으로 선언한 부분을 확인할 수 있습니다. > Plan 단계: Terraform plan Plan 단계에서는 *Terraform plan을 통해 검증을 하게 되는데요. 위 사진 하단에 나와있듯 1개가 추가되고, 0개가 변하고 0개가 없어진다는 의미입니다. 이처럼 +을 통해 추가되는 인프라의 상세정보를 확인할 수 있습니다. > Apply 단계: Terraform apply Apply 단계에서는 앞서 구축 계획에 문제가 없다면 *Terraform apply를 통해 검증된 결과를 바탕으로 실제 인프라에 적용하는 단계입니다. apply 명령을 이용하여 리소스를 생성·수정·삭제하는 것이죠. > State로 확인해 보기 State list 명령어를 통해서도 확인해 보니, 1개의 인스턴스(instance, 클래스의 현재 생성된 오브젝트)가 확인 되네요. 앞서 State list 명령어를 통해 생성된 ‘부분’만 확인했다면, 이번에는 State show 명령어를 통해 어떻게 생성이 됐는지 ‘상세’하게 확인해 봅시다. State 명령어뿐만 아니라 State는 terraform.tfstate 파일로도 확인 가능해 인스턴스 Name 또한 비교해 보았습니다. 테라폼을 이용해 최종 목표였던 AWS에 EC2 인스턴스가 잘 생성이 되었는지 확인해 봐야겠죠? *빨간색 네모 박스에 표기되어 있는 것처럼 잘 생성 되었습니다. 여기서 다시 주목할 점은 AWS의 인스턴스를 생성하기 위해선, 여러 가지 절차를 거쳐야 하는데요. 테라폼을 이용하면 ‘코드’ 하나로 바로 생성이 가능하다는 점입니다. 코드 기반으로 서버운영 및 관리의 자동화라는 특장점 또한 다시 한번 상기해 볼 수 있겠죠? 이처럼 인프라 서버를 효율적으로 구축하는 테라폼을 이용하여, AWS에 EC2를 생성해 보았습니다. 하지만 ‘생성’만 중요한 게 아닌, 효율적인 클라우드 인프라 관리를 극대화하기 위해 ‘모니터링’하는 점도 매우 중요한데요. 테라폼처럼 매우 쉽고 효율적인 방법을 소개하겠습니다. 바로 AWS EC2 모니터링이 가능한 클라우드 서비스 모니터링 시스템인 제니우스-CMS(Zenius-CMS) 예시를 통해, 다양한 환경에서 인프라 모니터링을 어떻게 하고 있는지 살펴보겠습니다! Zenius에서 AWS 모니터링하기 Zenius-CMS는 API를 통해 AWS 계정 기반으로 자동 모니터링을 제공하고 있는데요. 테라폼을 통해 AWS에서 EC2가 코드 기반으로 쉽게 생성했던 것처럼, CMS도 간편한 AWS 모니터링 실행이 가능합니다. 위 사진처럼 EC2 클라우드 서버에 대한 성능도 모니터링이 가능하죠. 여기서 새로운 인스턴스를 추가하면, 이 또한 자동으로 모니터링이 됩니다. Zenius-CMS는 EC2뿐만 아니라 RDS, VPC 등 과금 현황까지 통합 모니터링할 수 있는데요. AWS 콘솔에 접속하지 않고도, AWS 주요 성능 지표에 대한 모니터링 추이도 확인할 수 있습니다. 。。。。。。。。。。。。 이번 시간에는 인프라 서버를 효율적으로 구축하는 테라폼에 대해 학습하고, AWS에 EC2를 생성해 보며 활용 예시까지 살펴보았습니다. 또한 제니우스-CMS(Zenius-CMS) 예시를 통해, AWS EC2 모니터링뿐만 아니라 다양한 환경에서 인프라 모니터링 방법을 알 수 있었는데요. 앞으로도 클라우드 환경에서의 인프라 관리뿐만 아니라, 다양한 환경에서의 모니터링이 가능한 제니우스 제품에 많은 관심 부탁드릴게요! 📚참고 자료 모두의 Terraform(테라폼) PART1 - 개념(230313) Terraform(테라폼)이란? 간단 사용기(220711) 테라폼(Terraform) 기초 튜토리얼(200314)
2024.01.11
기술이야기
클라우드(Cloud) 관리와 AWS가 뭔가요?
기술이야기
클라우드(Cloud) 관리와 AWS가 뭔가요?
오늘날 IT 인프라 운영환경은 매우 복잡해졌어요. 갑작스러운 환경 변화에 따라 신속한 대응도 필요한 시점이죠. 이러한 현상으로 많은 기업들이 온프레미스(On-premise) 환경에서 클라우드(Cloud) 환경으로 전환하는 추세이기도 해요. 클라우드 컴퓨팅 서비스 중에는 여러 벤더가 있는데요. 대표적으론 Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)가 있어요. 그중 ‘AWS’는 국내 클라우드 시장에서 3년 간 70% 내외의 시장점유율로, 1위를 차지했는데요(*클라우드 서비스 분야 실태조사(2022), 공정거래위원회) 이처럼 높은 점유율을 가진 1) AWS의 주요 서비스를 살펴보고 2) 하이브리드 클라우드 모니터링이 필요한 이유는 무엇인지 3) AWS의 각종 서비스를 모니터링할 수 있는 제니우스(Zenius)도 함께 소개해 드릴게요! AWS(Amazon Web Services)란? AWS는 ‘Amazon Web Services’의 약어로, 아마존 닷컴이 제공하는 클라우드 컴퓨팅 플랫폼 및 서비스의 집합이에요. AWS에서 제공하는 여러 가지 서비스를 이용하면, 기업 및 개인이 필요한 컴퓨팅 리소스를 유연하게 확장하고 관리할 수 있죠. AWS 주요 서비스는 다음과 같아요! AWS 주요 서비스 ▪Amazon VPC(Amazon Virtual Private Cloud) 격리된 네트워크 환경을 구성하게 해주는 서비스예요. AWS의 동일 계정이나, 서로 다른 계정 간에 격리된 네트워크를 연결할 수 있도록 다양한 옵션들을 제공해 줘요. ▪Amazon EC2(Amazon Elastic Compute Cloud) AWS에서 가장 많이 사용되는 컴퓨팅 서비스예요. 가상 서버를 호스팅 할 때 사용하죠. 리눅스나 윈도우 환경 등 다양한 인스턴스 유형을 지원하고, 필요에 따라 성능을 조정할 수 있어요. 생성 가능한 인스턴스 타입은 리전 별 차이가 있으나, 100개~300개에 이를 정도로 방대하답니다. ▪AWS Lambda AWS에서 제공하는 서버리스 컴퓨팅 플랫폼이에요. 여기서 ‘서버리스’란 개발자가 서버의 존재를 신경 쓸 필요가 없다는 뜻이에요. AWS에서는 서버 인프라에 대한 프로비저닝, 유지관리 등을 대신 처리해 주죠. 이처럼 개발자가 비즈니스 로직에 집중하여 코드를 실행하게 해줘요. ▪Amazon S3 AWS에서 제공하는 스토리지 서비스예요. S3는 파일시스템이 아닌 오브젝트 스토리지 서비스로, 모든 파일에 API를 통해 접근 가능해요. 무제한적인 확장성, 높은 가용성과 내구성을 제공하며 단일 파일을 최대 5TB까지 업로드할 수 있어요. ▪Amazon EBS(Amazon Elastic Block Store) EC2 인스턴스에 장착하여 사용할 수 있는 가상 저장 장치에요. EBS를 연결하여 파일을 저장하면, EC2 인스턴스와 관계없이 데이터를 영구적으로 보관 가능해요. 이 밖에도 AWS에서 제공하는 서비스는 매우 방대한대요. 아래 URL로 접속 시, 필요한 서비스 목록 확인이 가능하답니다! 🔍 더 많은 AWS 서비스가 궁금하다면? 온프레미스와 AWS의 차이 온프레미스 방식은, 클라우드 컴퓨팅 서비스가 나오기 전까지 기업에서 전통적으로 사용한 ‘일반적인 인프라 구축 방식’이에요. 온프레미스 환경에서 서버를 운영하면, 호스팅 서비스를 이용하거나 서버를 직접 구매 또는 임대하죠. 그다음 데이터 센터(IDC, Internet Data Center) 또는 기업 전산실에 설치하여 운영해요. 하지만 물리적인 서버를 직접 설치할 경우, 많은 시간과 비용이 소모되어 이를 위한 운영 공간과 인력이 필요할 수 있어요. 예시를 들어 볼게요. 대형 콘서트 예매, 대학교 수강신청, 입시 원서 접수 등 단기간에 트래픽이 급증했다가 감소되는 경우를 생각해 볼까요? 이때 ‘온프레미스 방식’으로 시스템을 구축한다면, 매우 많은 비용 낭비가 발생하게 될 거예요. 반면 AWS의 경우는 어떨까요? 인터넷이 연결된 어디에서든 쉽게 인프라를 구축하고, 사용한 만큼 비용을 지불할 수 있어요. 큰 이벤트를 처리한 후 생성된 리소스를 간편하게 삭제할 수 있죠. 이처럼 온프레미스 방식과 대비한다면, 남는 자원에 대한 비용 고민이 없어지겠죠? 하이브리드 클라우드 모니터링이 필요한 이유 이처럼 AWS는 매우 유연하고 확장성 있는 클라우드 서비스예요. 하지만 모든 서비스를 AWS를 이용해서 서비스하는 것은 한계가 있는데요. 이유는 다음과 같아요. ▪보안 및 규정 준수 민감한 데이터나 규정 준수가 필요한 업무의 경우, 사설 클라우드나 온프레미스 환경의 자체 데이터 센터를 통해 운영하려는 경향이 있어요. ▪비용 효율 AWS는 사용한 만큼 비용을 지불하기 때문에, 예측할 수 없는 트래픽 증가 등에 대응하기에 좋아요. 하지만 서비스에 따라 온프레미스 환경에서 운영하는 것이 비용 측면에서 더 효율적인 경우가 있죠. 이처럼 많은 기업이 AWS를 이용한 클라우드 서비스로 전환하는 추세지만, 당분간 온프레미스 방식과 결합한 하이브리드 클라우드 운영환경이 많은 편이에요. 그렇다면 이러한 하이브리드 클라우드 운영 환경을 모니터링할 수 있는 방법이 없을까요? 바로 ‘제니우스’를 활용한다면 가능해요! 제니우스를 이용한 하이브리드 클라우드 모니터링 구성도 제니우스 하이브리드 클라우드 모니터링 프로세스를 간략히 소개할게요! 우선 클라우드 환경 단계에서는 AWS 서비스를 이용하여 구축된 클라우드 환경 정보를 RestAPI 방식으로 수집해요. CMS Manager는 AWS 클라우드 환경에서 수집한 정보를 취합 후 스토리지에 저장해 주죠. EMS Manager는 온프레미스 환경에서 수집한 정보를 취합 후 스토리지에 저장해 줘요. Web UI에서는 스토리지에 저장된 데이터를 이용하여, 사용자에게 모니터링 정보를 제공한답니다! 제니우스에서 AWS 모니터링하기 제니우스를 이용한 ‘하이브리드 클라우드 모니터링 구성’을 좀 더 자세히 살펴볼까요? ▪CMS > 모니터링 > 요약 : 위 그림은 AWS 통합 요약 페이지인데요. EC2, RDS, VPC 등 과금 현황까지 통합 모니터링할 수 있어요. ▪EMS > 토폴로지 > 클라우드 맵 : 리전 별 자동 구성형 클라우드 맵 페이지에서는, AWS 리전 별 이용하는 서비스와 연관관계를 클라우드 맵이 자동으로 구성해 줘요. ▪CMS > 클라우드서비스 > EC2 > 주요 성능 지표 : 주요 성능지표 모니터링 페이지에서는 AWS 콘솔에 접속하지 않고, AWS 주요 성능 지표에 대한 모니터링 추이를 확인할 수 있어요. ▪EMS > 오버뷰 : 오버뷰를 통한 온프레미스 + AWS 통합 모니터링 페이지에서는, AWS 모니터링 항목과 온프레미스 환경 모니터링 항목의 통합 현황판을 확인할 수 있어요. 이처럼 AWS와 온프레미스 환경은 물론, 더 다양한 환경의 인프라 모니터링을 위해 제니우스를 사용을 해보는 건 어떨까요?
2023.11.16
기술이야기
서버 모니터링 데이터의 3가지 활용 방법
기술이야기
서버 모니터링 데이터의 3가지 활용 방법
서버는 기업의 핵심 시스템과 데이터를 보관하고, 애플리케이션과 서비스를 호스팅하며, 비즈니스에 필요한 작업을 수행합니다. 이러한 서버가 원활하게 작동하지 않거나 성능 이슈가 발생할 경우, 업무 중단, 데이터 손실, 고객 서비스 저하 등 심각한 문제가 발생할 수 있습니다. 따라서 서버의 안정적인 운영과 성능 관리는 비즈니스의 지속 가능성과 경쟁력에 직결되는 중요한 요소입니다. 서버 모니터링은 이러한 서버의 상태와 동작을 지속적으로 감시하고, 성능 및 이상 상황을 식별하는 프로세스입니다. 이를 통해 시스템 관리자나 운영팀은 잠재적인 문제를 사전에 감지하고 조치를 취할 수 있습니다. 서버 모니터링을 통해 수집하는 데이터는 다양합니다. CPU 사용률, 메모리 사용량, 디스크 공간, 응답 시간, 서비스 가용성, 로그데이터 등 다양한 데이터를 통해 서버의 상태와 동작을 감시합니다. 앞에 언급한 데이터들 외에도 네트워크 연결 상태, 서비스 상태, 프로세스 실행 상태 등 다양한 데이터를 모니터링할 수 있으며, 서버의 운영 환경과 요구사항에 따라 수집되는 데이터의 종류가 달라질 수 있습니다. 이렇게 수집한 데이터들은 어떻게 활용할 수 있을까요? 먼저 병목 현상 식별, 리소스 확장 등을 통해 성능 최적화를 하는 데에 활용될 수 있습니다. 관리자는 수집한 모니터링 데이터를 분석하여 병목 현상을 식별할 수 있습니다. CPU 사용률이 지나치게 높거나 메모리 사용량이 극단적으로 증가하는 경우에는 해당 자원에 대한 최적화가 필요하다는 사실을 인지할 수 있습니다. 또 데이터를 분석하여 서버 리소스의 부족을 파악하고, 필요한 경우 리소스를 확장할 수 있습니다. 예를 들어, CPU 부하가 높다면 CPU를 추가로 할당하거나, 메모리 부족이 발생하면 메모리 용량을 늘릴 수 있습니다. 리소스뿐만 아니라 프로세스의 동작 또한 최적화할 수 있습니다. 특정 프로세스가 많은 CPU 사용량을 차지하고 있다면 해당 프로세스를 최적화하여 자원 사용을 줄일 수 있습니다. 디스크 I/O의 경우 역시 성능을 분석하여 디스크 병목 현상을 확인할 수 있습니다. 그 후 필요에 따라 디스크 용량을 확장하거나 디스크 성능을 향상시킬 수 있습니다. 디스크 공간이 부족한 경우 쓰기 작업을 최적화하여 디스크 공간을 효율적으로 활용할 수 있습니다. 두 번째로 용량 계획에 참고할 수 있습니다. 예를 들어, 서버 모니터링 데이터를 사용하여 트래픽 패턴을 분석하고 예측할 수 있습니다. 특정 시간대에 트래픽이 증가하는 경향을 발견할 수 있다면 해당 시간대에 필요한 용량을 예측하여 서버 리소스를 적절히 조정할 수 있습니다. 이를 통해 예상되는 트래픽 증가에 대비하여 서버의 용량을 조정하고 성능을 유지할 수 있습니다. 또 서버 모니터링 데이터를 사용하여 서버의 성능 패턴을 분석할 수 있습니다. 예를 들어, 특정 시간대에 서버의 응답 시간이 급격히 증가하는 경향을 발견할 수 있다면 해당 시간대에 용량이 부족한 것으로 예상할 수 있습니다. 이를 기반으로 용량을 조정하거나 추가 리소스를 할당하여 성능을 최적화할 수 있습니다. 예비 용량 계획 역시 수립할 수 있습니다. 예를 들어, 서버의 CPU, 메모리, 디스크 사용량 등을 모니터링하고 기준치를 설정한 후, 해당 기준치에 도달하거나 근접할 때 추가 용량을 확보하는 계획을 세울 수 있습니다. 이를 통해 예상치 못한 용량 부족 상황을 방지하고 서버의 안정성과 성능을 유지할 수 있습니다. 마지막으로 장애 예측 및 대응에 활용할 수 있습니다. 서버 모니터링 데이터를 실시간으로 분석하여 이상 상황을 감지하고 경고를 발생시킬 수 있습니다. 예를 들어, CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽 등을 모니터링하고 미리 설정한 임계값을 초과하는 경우에는 이상 상황으로 판단하고 관리자에게 경고 알림을 보내도록 설정할 수 있습니다. 이를 통해 잠재적인 장애 상황을 사전에 인지하고 대응할 수 있습니다. 혹은 서버 모니터링 데이터를 사용하여 이전의 장애 패턴을 분석하고 예측할 수 있습니다. 예를 들어, 특정 작업이나 트래픽 패턴에 따라 일정한 주기로 장애가 발생했던 경우, 해당 패턴을 파악하여 동일한 상황에서 장애가 발생할 가능성을 예측할 수 있습니다. 이를 기반으로 예방적인 조치를 취하거나 대응 전략을 수립하여 장애를 예방하거나 대응할 수 있습니다. 로그 분석을 통해 서버 모니터링 데이터와 로그 파일을 연계하여 장애 분석 및 대응이 가능합니다. 로그 파일에는 서버 동작 상태, 오류 메시지, 경고 등이 기록되어 있으므로, 장애 발생 시 해당 로그를 분석하여 장애의 원인을 찾고 대응할 수 있습니다. 로그 분석을 통해 예상치 못한 동작, 오작동, 예외 상황 등을 식별하여 이에 대한 조치를 취할 수 있습니다. 서버 모니터링 데이터는 다양한 방식으로 수집되고, 성능 최적화, 용량 계획, 장애 예측 및 대응 등 여러가지 방식으로 활용됩니다. 이를 바탕으로 IT 인프라 관리자와 서버를 사용하는 이용자들이 원활하고 안정적으로 서버를 이용할 수 있도록 도와줍니다.
2023.07.04
기술이야기
서버 모니터링 트렌드 살펴보기
기술이야기
서버 모니터링 트렌드 살펴보기
기업이나 조직의 IT 인프라 모니터링은 서버 모니터링에서 출발합니다. 통상적으로 서버 모니터링부터 네트워크, 데이터베이스, 웹애플리케이션, 전산설비 등으로 모니터링의 범위를 확장해 나가는 것이 일반적입니다. 서버는 초창기 메인 프레임부터 유닉스 서버, 리눅스 서버를 거쳐 최근의 가상화 서버에 이르기까지 물리적 및 논리적으로 그 성격이 변화해 왔습니다. 그에 따라 서버 모니터링의 관점도 많이 변모해 왔습니다. 기껏해야 1~2대 규모로 운영하던 메인 프레임의 시대와 수천, 수만대의 서버팜을 관리해야 하는 시대의 모니터링 개념은 달라야 합니다. 또, 가상화 시대를 맞아 물리적 서버 개념보다는 논리적 서버 개념이 중요해지고, 서버 1~2대의 장애 상황보다는 서버팜이 이루고 있는 서비스의 영속성이 중요해졌습니다. 이처럼 서버라는 인프라가 기술 발전에 따라 변모하고 있고, 그에 대응해 모니터링 콘셉트나 방법도 변화하고 있습니다. 이번 블로그에서는 서버 관련 새로운 인프라 개념 및 기술들이 대두되면서 변화하는 서버 모니터링의 새로운 트렌드에 관해 논의해 보고자 합니다. 1. 클라우드 네이티브 모니터링 더 많은 기업이나 조직이 전통적인 레거시 시스템에서 클라우드로 이동함에 따라 클라우드 모니터링의 필요성이 급격히 증가했습니다. 클라우드 네이티브 모니터링 도구는 Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)과 같은 클라우드 환경에서 애플리케이션과 클라우드 인프라를 모니터링하도록 설계됐습니다. 또, 클라우드 인프라의 성능, 가용성 및 보안에 대한 실시간 인사이트를 제공해, IT운영부서가 문제를 신속하게 발견하고 해결할 수 있도록 지원합니다. 일반적인 클라우드 모니터링은 메트릭과 로그를 사용해 클라우드 인프라 및 애플리케이션 성능을 하나의 통합된 화면에 제공합니다. 또한 통합 IT 환경 측면에서는 컨테이너 오케스트레이션 플랫폼 및 서버리스 컴퓨팅과 같은 다른 클라우드 환경과 통합해 모니터링할 수도 있습니다. 클라우드 기반 모니터링의 최신 추세는 하이브리드 모니터링입니다. 조직은 하이브리드 모니터링을 통해 클라우드와 온프레미스에서 각각 실행 중인 서버 및 애플리케이션 모두를 단일 플랫폼에서 모니터링할 수 있습니다. 2. 인공지능과 머신러닝 서버 모니터링의 또 다른 트렌드는 인공 지능(AI)과 머신 러닝(ML)을 사용해 모니터링 과정을 자동화하는 것입니다. AI 및 ML 알고리즘은 모니터링 과정에서 생성된 방대한 양의 데이터를 분석하고 패턴을 식별해 이상 징후를 감지할 수 있습니다. 이는 실시간으로 수행될 수 있으므로 운영관리자는 발생하는 모든 문제에 신속하게 대응할 수 있습니다. ML 알고리즘은 과거 데이터를 분석해 트래픽이 가장 많은 시기나 잠재적 장애와 같은 미래 추세를 예측할 수 있습니다. 이를 위해 서버의 성능과 관련된 대규모 데이터 세트에서 ML 알고리즘을 교육해야 합니다. 이 데이터는 서버 로그, 시스템 메트릭, 애플리케이션 로그 및 기타 관련 정보가 해당됩니다. 다음으로 알고리즘을 학습해 다양한 메트릭 간의 패턴과 상관 관계를 식별하고 이상 징후와 잠재적 문제를 감지합니다. 머신 러닝 모델이 훈련되면 서버를 실시간으로 모니터링하도록 배포할 수 있으며, 모델은 지속적으로 서버 메트릭을 분석하고 이를 학습한 패턴과 비교합니다. 편차나 이상을 감지하면 문제를 해결하기 위해 경고 또는 자동화된 작업을 트리거할 수 있습니다. 예를 들어, 트래픽이 갑자기 증가하는 경우 리소스를 자동으로 Scaling 하거나 다운 타임을 방지하기 위해 다른 조치를 취할 수 있습니다. 전반적으로 인공 지능과 머신 러닝을 사용해 서버 모니터링을 자동화하면, 문제해결에 시간을 절약하고 인적 오류의 위험을 줄일 수 있습니다. 또, 심각한 문제로 번지기 전에 잠재적 문제를 식별해 서버 인프라의 전반적인 안정성과 가용성을 향상할 수 있습니다. 3. 컨테이너 모니터링 컨테이너가 애플리케이션 배포에 점점 더 많이 사용되면서, 컨테이너 모니터링은 서버 모니터링의 중요한 측면이 됐습니다. 컨테이너란 애플리케이션을 모든 인프라에서 실행하는데 필요한 모든 파일 및 라이브러리와 함께 번들로 제공하는 소프트웨어 배포 도구입니다. 컨테이너를 사용하면 모든 유형의 디바이스 및 운영 체제에서 실행되는 단일 소프트웨어 패키지를 만들 수 있습니다. 뿐만 아니라, 단일 시스템에서 한 컨테이너는 다른 컨테이너의 작업을 방해하지 않으므로 확장성이 뛰어나고, 결함이 있는 서비스가 다른 서비스에 영향을 주지 않아 애플리케이션의 복원력과 가용성이 향상되는 장점이 있습니다. 컨테이너 모니터링은 CPU 및 메모리 사용량과 같은 컨테이너 리소스 사용률에 대한 실시간 메트릭을 제공할 수 있습니다. 또, 애플리케이션이 의도한 대로 실행되고 있는지 확인하기 위해 Kubernetes(쿠버네티스)와 같은 컨테이너 오케스트레이션 플랫폼을 모니터링하고, 컨테이너 및 기본 인프라에 대한 실시간 가시성을 제공합니다. 4. 서버리스 모니터링 서버리스 컴퓨팅은 사용량에 따라 백엔드 서비스를 제공하는 방법으로, 개발자가 서버를 관리할 필요없이 애플리케이션을 빌드하고 실행하는 것을 가능하게 합니다. 서버리스 컴퓨팅은 벤더 종속성(Vendor lock-in), 콜드 스타드와 DB백업이나 영상 인코딩 등 단시간에 많은 컴퓨팅 용량이 필요한 경우, 효율적이지 않음에도 불구하고 최근 몇 년 동안 주목을 받아오며 서버리스 모니터링이 서버 모니터링의 새로운 트렌드가 됐습니다. 서버리스 모니터링은 CPU, 메모리, 디스크 사용량 등 리소스 사용률, 애플리케이션 성능, 호출 시간 및 오류율과 같은 기능 성능에 대한 실시간 인사이트를 제공합니다. 서버리스 모니터링은 데이터베이스 쿼리 성능과 같은 서버리스 함수의 종속성에 대한 인사이트도 제공합니다. 5. 마이크로서비스 모니터링 마이크로서비스는 하나의 큰 애플리케이션을 여러 개의 작은 기능으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처로, 각 서비스를 다른 서비스와 독립적으로 개발, 배포 및 확장할 수 있는 장점이 있습니다. 하지만 마이크로서비스는 일반적으로 분산된 환경에 배포되므로 성능을 추적하고 문제를 찾아내기가 어렵고, 독립적으로 설계됐으므로 호환성에 어떤 문제가 있는지 감지할 필요가 있어 마이크로서비스 모니터링이 필요합니다. 마이크로서비스 모니터링은 개별 마이크로서비스 및 전체 애플리케이션의 성능과 상태를 추적하는 프로세스로 로그, 메트릭 및 트레이스와 같은 다양한 소스에서 데이터를 수집하고 분석해 문제를 식별하고 성능을 최적화하는 작업입니다. 마이크로서비스 모니터링은 각 마이크로서비스 별 가용성, 응답 시간, 가동 시간, 지연 시간, 오류율을 포함합니다. CPU, 메모리, 디스크 사용량과 같은 리소스 사용률을 추적해 잠재적인 성능 병목 현상이나 리소스 제약을 식별할 수 있고, 마이크로서비스 간의 데이터 흐름을 추적하고 서비스 간의 종속성 추적을 모니터링합니다. 또, 마이크로서비스 모니터링은 애플리케이션 전체의 전반적인 상태와 성능뿐만 아니라 타사 서비스 및 API의 성능과 상태도 모니터링할 수 있습니다. ----------------------------------- 브레인즈컴퍼니는 꾸준히 연구개발에 매진해 상기와 같은 새로운 트렌드를 반영한 Zenius-EMS를 개발, 출시했습니다. Zenius-EMS는 고객들이 레거시 시스템에서부터 클라우드 네이티브 시스템에 이르기까지 다양한 관점의 서버모니터링을 할 수 있도록 지원합니다. *이미지 출처: Unsplash, flaction
2023.03.29
기술이야기
IT 인프라 모니터링 트렌드
기술이야기
IT 인프라 모니터링 트렌드
EMS란? EMS는 Enterprise Management System의 약자로, 여러 기업과 기관의 IT서비스를 이루는 다양한 IT Infrastructure를 통합적으로 모니터링하는 시스템을 의미합니다. 해외에서는 일반적으로 ITIM(IT Infra Management)이라는 용어로 많이 사용되고 있지만, 국내에서는 EMS라는 용어로 통용되고 있습니다. EMS는 IT인프라의 데이터를 실시간으로 수집 및 분석할 뿐만 아니라, 수집된 데이터를 활용해 비즈니스의 가치를 창출할 수 있습니다. 글로벌 IT분야 연구자문 기업인 “가트너(Gartner)”에서는 ITIM, 즉 EMS를 데이터센터, Edge, IaaS(Infrastructure as a Service), PaaS(Platform as a Service) 등에 존재하는 IT인프라 구성요소의 상태와 리소스 사용률을 수집하는 도구로 정의하며, 컨테이너, 가상화시스템, 서버, 스토리지, 데이터베이스, 라우터, 네트워크 스위치 등에 대한 실시간 모니터링이 가능해야 한다고 서술합니다. <사진 설명: 가트너의 ITIM 정의를 도식화한 그림> 이러한 EMS는 초기에는 기업 전산실에 물리적인 형태로 존재하는 서버, 네트워크의 리소스관리를 중심으로 모니터링해 왔습니다. 서버의 CPU, Memory 등의 리소스 정보를 수집하거나, 네트워크 장비의 트래픽 정보를 모니터링하고 임계치를 기반으로 이벤트 감지하는 역할이 대부분이었으며, 이 정도 수준에서도 충분한 IT 인프라 관리가 이뤄질 수 있었습니다. 그러나 가상화(Virtualization)라는 개념이 생겨나고 다양한 IT 인프라들이 기업 전산실에서 클라우드(Cloud) 환경으로 전환됨에 따라, EMS의 모니터링 분야도 조금씩 바뀌어 가고 있습니다. 많은 기업들이 효율적인 리소스 사용과 비용 절감을 목표로 VMware와 같은 가상화 시스템을 도입해 운영하게 됐으며, 모니터링 부문도 이에 대응하기 위해 가상화 리소스에 대한 관리 영역으로 확장됐습니다. 가상화 환경을 이루는 하이퍼바이저(Hypervisor)와 가상머신(Virtual Machine)의 연관성을 추적하고, 각 가상머신들이 사용하고 있는 리소스를 실시간으로 분석해 효율적인 자원 배분, 즉 프로비저닝(Provisioning)을 위한 근거 데이터를 제공할 수 있도록 하고 있습니다. 더 나아가 VMware, Hyper-V 등의 다양한 가상화 플랫폼에서 가상머신을 생성하고 삭제하고, 실제로 가상머신에 CPU, Memory 등과 같은 리소스를 할당해 줄 수 있는 컨트롤 영역까지 제공하는 제품을 개발하는 벤더사들이 많아지고 있습니다. 이러한 가상화 기술을 기반으로 현대에는 IT 인프라들이 대부분 클라우드 환경으로 전환하고 있는 추세입니다. 클라우드 환경으로의 전환 클라우드(Cloud)란, 언제 어디서나 필요한 컴퓨팅 자원을 필요한 시간만큼 인터넷을 통해 활용할 수 있는 컴퓨팅 방식으로, 최근 기업들은 각자의 목적과 상황에 맞게 AWS, MS Azure와 같은 Public Cloud 및 OpenStack, Nutanix 등을 활용한 Private Cloud 등의 환경으로 기업의 전산설비들을 마이그레이션 하고 있습니다. 클라우드로의 전환과 기술의 발전에 따라, EMS의 IT 인프라 모니터링은 더 이상 *On-Premise 환경에서의 접근이 아닌, Cloud 환경, 특히 MSA(Micro Service Architecture)를 기반으로 하는 클라우드 네이티브(Cloud Native) 관점에서의 IT 운영 관리라는 새로운 접근이 필요하게 됐습니다. (*On-Premise : 기업이 서버를 클라우드 환경이 아닌 자체 설비로 보유하고 운영하는 형태) 클라우드 네이티브란, 클라우드 기반 구성요소를 클라우드 환경에 최적화된 방식으로 조립하기 위한 아키텍처로서, 마이크로서비스 기반의 개발환경, 그리고 컨테이너 중심의 애플리케이션 구동환경 위주의 클라우드를 의미합니다. 클라우드 네이티브는 IT비즈니스의 신속성을 위해 도커(Docker)와 같은 컨테이너를 기반으로 애플리케이션이 운영되므로, EMS는 컨테이너의 성능, 로그, 프로세스 및 파일시스템 등 세부적인 관찰과 이상징후를 판단할 수 있는 기능들이 요구되고 있습니다. 자사 제품인 Zenius SMS에서는 이러한 변화에 따라 Docker에 대한 모니터링 기능을 기본적으로 제공하고 있습니다. Docker 컨테이너가 생성되면 자동으로 관리대상으로 등록되며, Up/Down 뿐만 아니라, CPU, Memory, Network 및 Process의 정보를 실시간으로 모니터링하고 발생되는 로그들을 통합관리 할 수 있도록 합니다. <사진 설명: Zenius-SMS에서 제공하고 있는 Docker 컨테이너 모니터링 기능> 또, 복원력과 탄력성을 위해 쿠버네티스와 같은 오케스트레이션 도구를 활용해 컨테이너를 스핀업하고, 예상되는 성능에 맞게 효율적으로 리소스를 맵핑하고 있으며, 이러한 기술에 대응하기 위해 EMS는 쿠버네티스(Kubernetes), 도커스웜(Docker Swarm) 등의 오케스트레이터들의 동작여부를 직관적으로 관찰하는 제품들이 지속적으로 출시되고 있는 상황입니다. 이와 더불어 컨테이너, 오케스트레이터의 동적 연결관계를 실시간으로 모니터링하고, 파드(POD), 클러스터, 호스트 및 애플리케이션의 관계를 표현하는 역할의 중요성이 점차 커져가고 있습니다. 통합 모니터링(Monitoring) EMS 모니터링의 또 다른 변화로는 통합(Integration)의 역할이 더더욱 강해지고 있다는 것입니다. IT 서비스가 복잡해지고 다양해짐에 따라 IT 인프라의 관리 범위도 점차 증가하면서, 다양한 IT 인프라들을 융합하고 관리하기 위한 노력들이 관찰되고 있습니다. 데이터독(Datadog), 스플렁크(SPLUNK)와 같은 장비 관점의 모니터링 벤더들은 APM과 같은 애플리케이션 모니터링 시장으로, 앱다이나믹스(AppDynamics), 다이나트레이스(Dynatrace), 뉴렐릭(NewRelic)과 같은 애플리케이션 모니터링 시장의 강자들은 인프라 장비 관점의 모니터링 시장으로의 융합이 확인되고 있습니다. 자사 제품인 Zenius 역시 서버, 네트워크 중심의 관리에서 애플리케이션, 데이터베이스 등의 시장으로 관리 범위를 확장해 나가고 있는 추세입니다. IT 서비스의 영속성을 유지하기 위해서는 IT 서비스를 구성하는 다양한 요소들을 실시간으로 모니터링하고 연관관계를 추적해 문제 원인을 찾아내는 것이 중요하기 때문에 다양한 IT 요소들을 통합적으로 모니터링하는 것 뿐만 아니라, 상호 연관관계를 표현하고 추적할 수 있는 기능들이 지속적으로 요구되고 있습니다. 모니터링의 트렌드는 서버, 네트워크 등의 독립적인 개체에 대한 모니터링 아닌 IT 서비스를 중심으로 기반 요소들을 모두 통합적으로 모니터링하고, 각 상호간의 의존성과 영향도를 파악해 RCA(Root Cause Analysis) 분석을 가능하게 하고 이를 통해 IT 서비스의 연속성을 보장할 수 있는 통찰력을 확보하게끔 하는 방향으로 흘러가고 있습니다. Zenius는 서버, 네트워크, 애플리케이션, 데이터베이스 및 각종 로그들의 정보를 시각적으로 통합 모니터링할 수 있는 오버뷰(Overview) 도구와 IT 서비스 레벨에서 인프라들의 연관관계를 정의하고 다양한 조건(Rule)에 따라 서비스 이상유무와 원인분석이 가능한 서비스 맵(Service Map) 도구를 기본적으로 제공하고 있습니다. <사진 설명: Zenius 오버뷰 화면> <사진 설명: Zenius 서비스맵 화면> 앞서 언급했듯이, 클라우드 환경으로 전환함에 따라 통합적 관리 요구는 더욱 높아지고 있습니다. IT 인프라에 대한 통합 뿐만 아니라, AD(Active Directory), SAP 및 AWS, Azure, GCP 등의 다양한 서비스의 주요 지표까지 연계하고 하나의 시스템으로 통합 모니터링하기 위한 노력들이 관찰되고 있습니다. 데이터독(Datadog)의 경우, 500개 이상의 시스템, 애플리케이션 및 서비스들의 지표들을 손쉽게 통합 관리할 수 있다고 돼있습니다. <사진 설명: 데이터독 홈페이지 캡처> 이처럼 IT 서비스의 복잡성과 다양화에 따라 관리해야 될 서비스와 지표들은 점점 늘어나고 있으며, 기업의 현황에 맞게 컴포넌트 기반으로 손쉽게 지표들을 통합할 수 있는 기능과 도구들이 요구되고 있습니다. AI 기반의 예측&자동화 모니터링의 세번째 변화로는 ’AI 기반의 예측과 자동화’입니다. IT 인프라 및 서비스의 주요 지표를 모니터링하는 것도 중요하지만, 축적된 데이터를 기반으로 미래의 상황을 예측 및 이상탐지해 사전에 대비할 수 있는 체계를 갖추는 일은 모니터링 시장에서 중요한 이슈로 자리잡고 있습니다. 현재의 AIOps(AI for IT Operations)를 표방하는 모니터링 기술들은 서버, 네트워크, 애플리케이션, 데이터베이스 등의 주요 지표들을 실시간으로 수집하고, 저장된 데이터를 기반으로 AI 알고리즘 또는 통계기법을 통해 미래데이터를 예측하며 장애 발생가능성을 제공하고 있습니다. 이와 같은 기술을 통해 미래 성능 값을 예측해 IT 인프라의 증설 필요성 등을 판단하고, 장애 예측으로 크리티컬한 문제가 발생되기 전에 미리 조치를 취할 수 있도록 해 효율적인 의사결정을 할 수 있도록 합니다. Zenius도 4차 산업혁명 및 디지털 뉴딜시대가 도래함에 따라 미래예측 기능을 최신 버전에 탑재했으며, 이를 통해 IT운영자가 미래 상황에 유연하고 선제적으로 대응할 수 있도록 합니다. Zenius에서는 서버, 네트워크, 애플리케이션 등 다양한 IT 인프라의 미래 성능 값, 패턴 범위, 이상 범위 등을 예측해 IT 운영자에게 제시합니다. <사진 설명: 인공지능(AI) 기반 미래데이터 예측 화면> 다만, 인공지능 기술을 통해 장애 발생 가능성을 탐지하는 기능 외에, 어디에 문제가 발생됐는지 알려주는 기능은 모니터링 시장에 과제로 남아있고, 이를 제공하기 위한 여러 업체들의 노력이 보이고 있습니다. 이제는 EMS에서 보편적인 것이 됐지만, 모바일 기기를 통해 시∙공간적 제약 없는 모니터링이 이뤄지고 있습니다. 다양한 기종의 스마트폰, 태블릿PC 등을 이용해 운영콘솔(Console) 뿐만 아니라, 회의 등 시간을 잠시 비우더라도 IT 인프라에 대한 연속적인 모니터링이 모바일기기를 통해 가능해졌습니다. <사진 설명: 다양한 기기를 통한 모니터링>
2022.09.05
기술이야기
Java APM 기반 기술에 대한 간략한 설명
기술이야기
Java APM 기반 기술에 대한 간략한 설명
몇 년 전부터 미국 실리콘밸리에서 불어온 스타트업 광풍이 인플레이션과 경기 침체가 동시에 예상되는 최악의 전망 속에서 조금 사그러드는 모습입니다. 그러나 빠른 속도로 퍼지기 시작한 IT 관련 유행들은 아마 꽤 오랜 시간 우리들 근처에 남아 그 영향이 지속되지 않을까 예상해봅니다. 그 중 한 부분을 차지하는 것이 새로운 혹은 인기가 급상승한 Go, Python, R, Julia, Kotlin, Rust, Swift 등의 컴퓨터 언어들입니다. 이렇게 많은 언어들이 새로 등장해 번쩍번쩍하는 장점을 뽐내고 있는 와중에도, 아직 세상의 많은 부분, 특히 ‘엔터프라이즈 IT’라 불리는 영역에서 여전히 가장 많이 사용되는 것은 Java입니다. 절대적이지는 않지만 컴퓨터 언어의 인기 순위 차트인 TIOBE 인덱스에 따르면, 2022년 6월 현재도 Java의 인기는 Python, C의 뒤를 잇는 3위입니다. Java 역시 Java 9부터는 십 수년간 고수하던 백워드 컴패티빌리티 정책을 포기하고 여러가지 반짝거리는 장점을 받아들이면서 버전업을 계속해, 올해 9월에는 Java 19가 나올 예정입니다. 그러나 아직도 우리나라 ‘엔터프라이즈 IT’에서 가장 많이 쓰이는 버전, 그리고 작년까지는 세계에서 가장 많이 쓰이는 버전은 Java 8이었습니다. 이렇게 많은 Java 어플리케이션의 성능을 모니터링하고 관리할 수 있는 솔루션을 통상적으로 APM(Application Performance Management)이라고 합니다. 위에서 서술한 것처럼 다른 컴퓨터 언어들의 인기가 올라가고 사용되는 컴퓨터 언어가 다양해지면서 많은 APM 제품들이 Java외의 다른 컴퓨터 언어로 작성된 어플리케이션도 지원하는 경우가 늘어나고 있으나, 이 글에서는 APM을 Java 어플리케이션의 성능을 모니터링하고 관리할 수 있는 솔루션으로 한정하도록 하겠습니다. 어플리케이션의 성능을 보다 깊이 모니터링하는데 필수적인 것이 Trace[i]입니다. Trace는 어플리케이션이 실행되는 과정에 중요하다고 생각되는 부분에서 중요하다고 생각되는 어플리케이션의 상태를 기록으로 남긴 것입니다. 전통적인 어플리케이션에서는 실행 Thread를 따라가면서 순차적인 Trace가 남게 되고 유행에 맞는 MSA(Micro-Service Architecture) 어플리케이션에서는 서로 연관됐지만 직선적이지는 않은 형태의 Trace가 남게 됩니다. 이러한 Trace를 수집하고 추적하고 분석하는 것이 APM의 주요 기능 중 하나입니다. 그런데, 여기서 문제가 하나 생깁니다. Trace는 누가 남길 것인가 하는 문제입니다. 개발 리소스가 충분하고 여유가 있는 경우, 개발시 성능에 대한 부분에 신경을 써서 개발자들이 Trace를 남기며 이를 분석하고 최적화하는 것이 정례화, 프로세스화 돼있겠지만, 많은 경우 개발 리소스를 보다 중요한 목표 달성을 위해 투입하는 것도 모자랄 지경인 것이 현실입니다. 아무리 분석 툴인 APM이 좋아도, 분석할 거리가 되는 Trace가 없으면 무용지물이 돼 버립니다. 그래서 APM에는 미리 정해진 중요한 시점에 어플리케이션에서 아무 것도 하지 않더라도 자동으로 Trace를 남기도록 하는 기능이 필수적으로 필요합니다. Java 어플리케이션의 경우 이러한 기능은 Java Bytecode Instrumentation이라고 하는 기반 기술을 사용해 구현됩니다. 서론이 매우 길어졌지만, 이 글에서는 Java Bytecode Instrumentation에 대해 조금 상세히 살펴보도록 하겠습니다. Java Bytecode Instrumentation을 명확히 이해하려면, 먼저 Java가 아니라 C, C++, Rust등의 언어들로 작성된 프로그램이 어떤 과정을 거쳐서 실행되는가, 그리고 Java 프로그램은 어떤 과정을 거쳐서 실행되는가를 살펴보는 것이 도움이 됩니다. Java가 세상에 나오기 이전에는 ‘컴퓨터 학원’이나 고등학교 ‘기술’ 과목, 그리고 대학의 ‘컴퓨터 개론’ 등에 반드시 이런 내용이 포함돼 있었지만 요즘은 그렇지도 않은 것 같습니다. 컴퓨터에서 프로그램을 실행시키는 것은 CPU, 즉 Central Processing Unit입니다. 지금 이 글을 작성하고 있는 컴퓨터의 CPU는 Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz입니다. CPU는 메모리의 프로그램이 있는 영역을 읽어 들여, 미리 정해진 값에 따라 정해진 동작을 수행하게 됩니다. 이때 어떤 값이 어떤 동작을 수행하는지 규정해 놓은 것을 Machine Language라고 합니다. Machine Language는 100% 숫자의 나열이므로 이를 좀더 사람이 읽기 쉬운 형태로 1:1 매핑 시킨 것이 Assembly Language입니다. (그렇다고 읽기가 많이 쉬워지지는 않습니다.) 이 글에서는 이 두 단어를 구분없이 혼동해 사용합니다. C, C++, 그리고 나온 지 벌써 10년이나 된 Go, 요즘 인기가 계속 상승하고 있는 Rust 등의 언어로 작성된 프로그램은, 이들 언어로 작성된 소스 코드를 Machine Language로 미리 변환해서[ii] 실행 파일을 만들고 이를 실행하게 됩니다. 이 변환을 수행하는 것을 Compile한다라고 하고 이 변환을 수행하는 프로그램을 Compiler라고 부릅니다. 한편, 소스 코드를 완전히 Machine Language로 변환시킨 실행 파일을 실행하는 것이 아니라 Interpreter라 불리우는 프로그램이 소스 코드를 읽으면서 그 의미에 맞게 동작을 수행시키는 언어들도 있습니다. ‘스크립트 언어’라 불리는 bash, Perl, PHP, Ruby, Python 등이 이에 해당되면, 요즘은 잘 쓰이지 않지만 그 옛날 Bill Gates가 직접 Interpreter를 만들기도 했던 BASIC 등이 이에 해당합니다. 본론으로 돌아가보겠습니다. 그렇다면, Java 프로그램은 어떤 방식으로 실행이 되는가? 기본적으로는 Interpreter 방식이라고 생각해도 이 글의 주제인 Java Bytecode Instrumentation을 이해하는 데는 무리가 없습니다.[iii] 여기에 더해 Java의 실행 방식에는 몇 가지 큰 특징이 있습니다. 첫째로, Java는 소스 파일을 직접 읽어 들이면서 실행하는 것이 아니라 소스 파일을 미리 변환시킨 Java Class File을 읽어 들이면서 실행합니다. 하나의 Java Class File에는 하나의 Java Class 내용이 모두 포함됩니다. 즉, Class의 이름, public/private/internal 여부, 부모 클래스, implement하는 interface 등의 Class에 대한 정보, Class의 각 필드들의 정보, Class의 각 메서드[iv]들의 정보, Class에서 참조하는 심볼과 상수들, 그리고 이 글에서 가장 중요한 Java로 작성된 각 메서드의 내용을 Java Bytecode 혹은 JVM Bytecode라고 하는 중간 형태의 수열로 변환시킨 결과 등이 Java Class File에 들어가게 됩니다. 이 Java Bytecode는 실제 실행 환경인 CPU 및 Machine 아키텍처에 무관합니다. 똑같은 Java 소스 코드를 Windows에서 Compile해 Java Class File로 만들건, Linux에서 Compile해 Java Class File로 만들건 그 내용은 100% 동일하게 되고 이 점은 C, C++, Rust 등 Compiler 방식의 언어와 큰 차이점입니다. Java의 가장 큰 마케팅 캐치프레이즈 “Write Once, Run Anywhere”는 이를 표현한 것입니다. 둘째, Java Bytecode는 일반적인 CPU의 Machine Language와 많은 유사점을 지닙니다.[v] 어찌 보면 Java Bytecode는 실제 존재하지는 않지만 동작하는 가상의 CPU의 Machine Language라고 볼 수 있는 것입니다. 이러한 이유에서 Java Class File을 읽어 들여 실행시키는 프로그램을 JVM이라고 (Java Virtual Machine) 부릅니다. Java 소스 파일을 Java Class File로 변환시키는 프로그램을 Java Compiler라고 부르며, 가장 많이 쓰는 Java Compiler는 JDK(Java Development Kit)에 포함된 javac라고 하는 프로그램입니다.[vi] JVM은 JDK에 포함된 java라고 하는 프로그램을 가장 많이 씁니다. 한편 사용 빈도는 그렇게 높지 않지만, Java Class File을 사람이 알아볼 수 있는 형태로 변환해서 그 내용을 보고 싶은 경우도 있습니다. 이런 일을 하는 프로그램을 Java Bytecode Disassembler[vii]라고 부르며, JDK에는 Java Bytecode Disassembler인 javap가 포함돼 있습니다. 혹은, Eclipse나 Intellij IDEA 같은 IDE에서 Java Class File을 로드하면 사람이 알아볼 수 있는 형태로 변환해 보여줍니다. Java Bytecode의 실제 예를 한번 살펴보도록 하겠습니다. 설명을 간단히 하기 위해, 클래스나 메서드 선언 등은 다 제외하고, 오직 메서드의 내용에만 집중하면, System.out.println(“Hello, World.”); 라는 Java 프로그램은 다음과 같은 Java Bytecode로 변환됩니다. (전통적으로 16진수로 표시합니다.) b2 00 0b 12 09 b6 00 0f b1 이를 javap를 사용해, 혹은 JVM Reference[viii]를 보고 좀더 사람이 보기 쉬운 형태로 표현하면 다음과 같습니다. 0: getstatic #11 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #9 // String Hello World 5: invokevirtual #15 // Method java/io/PrintStream.println: (Ljava/lang/String;)V 8: return JVM Reference의 Chapter 7을 참고하면, Java Bytecode를 javap의 결과에 어떻게 대응되는지를 알 수 있습니다. javap의 결과를 조금 더 살펴봅시다. 먼저 콜론 앞의 숫자는 인스트럭션의 offset으로서 Bytecode 시퀀스의 0번째, 3번째, 5번째, 8번째를 의미합니다. 0번째의 getstatic은 그 다음 숫자에 해당하는 필드를 스택의 맨 위에 저장하도록 합니다. 3번째의 ldc는 “Hello, World”라는 상수값을 스택의 맨 위에 저장하도록 합니다. 5번째의 invokevirtual은 println 메서드를 호출하고, 8번째의 return은 메서드에서 리턴해 호출한 곳으로 실행을 넘깁니다. Java 프로그램은 (정확히는 Java 소스 코드로 작성된 프로그램을 Compile한 결과) 통상적으로 많은 수의 Java Class File로 이뤄집니다. JVM은 이러한 Java Class File을 한꺼번에 읽어 들이는 것이 아니라 실행을 하다가 필요한 순간이 되면 그 때 읽어 들입니다. JVM은 이 로딩 과정에 사용자가 개입할 여지를 남겨 뒀는데, 이것이 Java Bytecode Instrumentation입니다. 이에 대한 개요는 https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html에 설명돼 있습니다. 요약해서 설명하면 다음과 같습니다. (1)사용자는 미리 정해진 규약대로 Java Agent라는 프로그램을 작성하고 이를 JVM 실행시에 옵션으로 명기합니다. (2)JVM은 Java Class File을 읽어 들여서 JVM이 처리하기 좋은 형태로 저장하기 전에, 그 파일 내용을 Java Agent의 ClassFileTransformer 클래스의 transform 메서드[ix]에 전달합니다. (3)JVM은 Java Class File의 원래 내용이 아니라 (2)의 메서드가 반환하는 결과를 저장하고 실행합니다. 이 과정을 Java Bytecode Instrumentation이라고 합니다. 사용자는 Java Bytecode Instrumentation을 구현해, 즉 Java Agent를 잘 작성헤 무엇이든 원하는 바를 달성할 수 있는 것입니다![x] 이러한 Java Bytecode Instrumentation은 APM, 그리고 Aspect-Oriented Programming의 기반 기술이 됩니다. 우리나라에서 Java로 프로그래밍을 한다고 하면 누구나 다 알고 있을 것 같은 Spring Core의 핵심 요소 중의 하나가 Aspect-Oriented Programming입니다. 예를 들어 Spring에서 @Transaction 이라고 annotation된 메서드가 있으면, Spring은 그 메서드의 맨 처음에 transaction을 시작하는 코드, 정상적으로 return하기 직전에는 transaction을 commit하는 코드, 그리고 익셉션에 의해 메서드를 빠져 나가기 직전에는 transaction을 rollback하는 코드를 삽입해 주게 되는데 이를 Java Bytecode Instrumentation을 이용해 구현하는 것입니다. 그럼, Java Agent에 거의 무조건적으로 필요한 기능은 무엇일까요? Java Agent는 Java Class File 내용을 그대로 전달받기 때문에 이를 해석할 수 있어야 무언가를 할 수 있습니다. 불행히도, java 스탠다드 라이브러리에는 Java Bytecode를 직접 다루는 기능은 없습니다.[xi] 그래서 de facto standard로 사용되는 것이 asm이라는 라이브러리입니다. 이 라이브러리는 수많은 java 라이브러리와 어플리케이션에 포함돼 있습니다. 그러나 asm이 훌륭한 라이브러리이긴 하지만, 이를 직접 사용하려면 각 상황에 맞게 코드를 삽입하는 프로그램을 작성해서 사용해야 하므로 자유도가 떨어집니다. 그래서 Zenius APM에서는 asm을 사용하되 삽입될 코드를 설정 파일에서 지정할 수 있는 suji(Simple Universal Java Instrumentor)[xii]라고 이름 붙인 라이브러리를 직접 만들어 사용하고 있습니다. suji를 사용하면 yaml 형식의 설정 파일에서, 어떤 클래스의 어떤 메서드의 어느 부분에 삽입할 것인지에 대한 조건과 삽입될 코드를 yaml의 list 형태로 지정하는 것만으로 (이는 Lisp와 비슷한 방식으로, 이렇게 하면 파싱 과정을 생략하면서 쉽게 코드를 넣을 수 있습니다.) Java Bytecode Instrumentation을 손쉽게 처리할 수 있습니다. 예를 들어, Zenius APM에서 JDBC getConnection을 처리하기 위해서 다음과 같은 부분이 설정 파일에 포함돼 있습니다. JDBC.DataSource.getConnection: IsEnabled: true ClassChecker: [ HasInterface, javax/sql/DataSource ] MethodName: getConnection IsStatic: false IsPublic: true IsDeclared: false ReturnType: Ljava/sql/Connection; Locals: [ Ljava/lang/Object;, Ljava/lang/Object; ] AtEntry: - [ INVOKE, dataSourceGetConnection, l1, [] ] AtExit: - [ INVOKE, poolGetConnectionEnd, l2, [ l1, ^r, true ] ] - [ LOAD, l2 ] - [ CAST, Ljava/sql/Connection; ] - [ STORE, ^r ] AtExceptionExit: - [ INVOKE, endByException, null, [ l1, ^e ] ] 간략하게 설명하면, Class가 만약 javax.sql.DataSource를 implement하고 메서드가 스태틱이 아니고 public이면서 java.sql.Connection을 리턴하는 getConnection이라는 이름을 가진 경우에 메서드 시작 시, 리턴 시, 그리고 익셉션에 의해 메서드를 나갈 때 위의 예제에 규정된 코드를 삽입하라는 의미입니다. 이상으로 Java Bytecode Instrumentation에 대한 간략한 설명을 마칩니다. 다음에는 실제로 APM이 중점적으로 추적하고 분석하는 것은 어떤 것들인가에 대해 설명하겠습니다. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [i] Sridharan, Distributed Systems Observability, O’Reilly, 2018의 Chapter 4. The Three Pillars of Observability 참조. 번역본은 없는 듯합니다. [ii] 이 외에 여러가지 과정을 거치지만 이 글의 목적과는 무관하므로 과감하게, 자세한 설명은 생략합니다. [iii] 실제로는 Java 프로그램이 100% 이렇게 interpret되어 실행되는 것은 아닙니다. 특정 메쏘드 혹은 메쏘드의 일부분이 자주 실행돼 interpret하는 것보다 미리 컴퓨터(=CPU)가 바로 실행할 수 있는 형태(=Machine Language)로 변환(=compile)해 놓는 것이 더 낫다고 JVM이 판단하는 경우, 미리 이런 변환 과정을 한번 거쳐 그 결과를 기억해 놓고, 그 기억된 결과를 컴퓨터(=CPU)가 바로 실행합니다. 이렇게 변환하는 과정을 Just-In-Time Compile 혹은 JIT라고 합니다. 또 이 때문에 JVM을 단순한 interpreter로 부를 수는 없는 것입니다. [iv] 국립국어원은 메서드가 맞는 표기라고 합니다. [v] 물론 많은 차이점도 지닙니다. (1) JVM은 register가 존재하지 않고 오로지 stack에만 의존한다. (2) JVM은 Class, Method의 개념을 포함하고 있지만 일반적인 범용 CPU에는 그런 상위 개념은 없습니다. [vi] 보통 IDE를 써서 개발을 하기 때문에, javac를 직접 사용하거나 Java Class File을 직접 다룰 일은 잘 없고, jar 파일이 이 글을 읽는 여러분에게 훨씬 더 익숙할 지도 모릅니다. Jar 파일은 그냥 zip으로 압축된 파일이니 그 압축을 한번 풀어 보길 바란다. 확장자가 class인 수많은 파일을 찾을 수 있을 것입니다. [vii] Assembly는 Assemble의 명사형이며, Assemble의 반대말은 Disassemble입니다. [viii] JVM에 대한 모든 것은 The Java Virtual Machine Specification에 나와 있습니다. 이 중 'Chapter 6. The Java Virtual Machine Instruction Set'를 참고하면 각각의 instruction에 대해 상세히 알 수 있습니다. [ix] https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/ClassFileTransformer.html#transform-java.lang.ClassLoader-java.lang.String-java.lang.Class-java.security.ProtectionDomain-byte:A- [x] 쉽다고는 하지 않았습니다. 또 몇가지 제약 사항은 있습니다. [xi] 참고로 최근에는 asm을 대체할 수 있는 기능을 스탠다드 라이브러리에 넣을 계획이 진행되고 있습니다. https://openjdk.org/jeps/8280389 [xii] 명명이 아이돌 그룹 출신 모 여배우와 관계가 아주 없지는 않음을 조심스럽게 밝혀 둡니다.
2022.08.04
1