반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
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
블로그
열기
메인 페이지로 이동
블로그
기술이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
기술이야기
검색
기술이야기
테라폼(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
기술이야기
클라우드 네이티브의 핵심! CNCF의 세 가지 핵심가치
기술이야기
클라우드 네이티브의 핵심! CNCF의 세 가지 핵심가치
최근 디지털 트랜스포매이션(Digital Transformation)이 IT 트렌드로 자리 잡았습니다. 기업과 조직은 빠르게 변화하는 환경에 대응하고 경쟁에서 앞서기 위해 '클라우드 네이티브 컴퓨팅' 기술을 채택하고 있는데요. 여기서 클라우드 네이티브 컴퓨팅 기술을 연구 및 발전시키고, 생태계를 촉진하는데 중추적인 역할을 하는 커뮤니티가 바로 'CNCF(Cloud Native Computing Foundation)'입니다. 현재 CNCF에서는 Google, Intel, Azure 등 700여 곳 이상의 회원사들이 활동에 참가하고 있습니다. 이번 시간에는 CNCF가 정확히 무엇이고, 추구하는 핵심가치와 주요 프로젝트에 대해 자세히 알아보겠습니다. 。。。。。。。。。。。。 CNCF(Cloud Native Computing Foundation)란 CNCF는 2015년 12월에 리눅스 재단에 의해서 출범된 비영리 단체로, 네이티브 컴퓨팅 기술의 채택을 촉진하는 오픈소스 소프트웨어 재단입니다. CNCF는 클라우드 네이티브 컴퓨팅 플랫폼에서 사용하며, 확장 가능한 애플리케이션을 개발하는데요. 이와 관련된 기술인 컨테이너, 마이크로서비스, 서비스 메쉬 등의 발전을 촉진하여 이러한 기술 패턴을 누구나 이해하고 활용할 수 있도록 하는 것이 목표입니다. ▲총 24개의 CNCF Platinum Members 이러한 클라우드 네이티브 컴퓨팅 환경을 대중화하기 위해 Google Cloud, AWS, MS Azure, Cisco, IBM, Apple, Oracle, Red Hat, VMware, SAP 등 유수의 기업들이 플래티넘 회원사로 참여하여 뜻을 같이 하고 있습니다. CNCF의 세 가지 핵심 가치 CNCF의 핵심가치는 1) 클라우드 네이티브 기술의 촉진 2) 오픈소스 프로젝트 생태계 육성 3) 기술의 표준화 수립으로 정리할 수 있습니다. 이 세 가지 핵심 가치를 더 자세하게 살펴볼까요? CNCF 핵심가치1 : 클라우드 네이티브 기술의 촉진 CNCF는 현대적이고 미래 지향적인 '클라우드 네이티브 기술의 촉진'을 중요한 핵심 가치로 규정하고 있는데요. 이는 CNCF가 오늘날의 IT 생태계의 중심에 서서, 클라우드 네이티브 기술을 지속적으로 연구 및 개발하여 새로운 디지털 전환의 시대를 선도하고자 하는 의지가 담겨 있다고 볼 수 있습니다. CNCF는 기존 온 프레미스(On-Premise) 환경, 그리고 모놀리식(Monolithic)한 개발 환경에서 탈피한 컨테이너, 마이크로서비스, 서비스 메시, 서버리스 등. 보다 혁신적이고 미래지향적인 기술 영역을 보급하고 대중화하기 위한 노력과 지원을 아끼지 않습니다. ▲기존 모놀리식 아키텍처와 마이크로서비스 아키텍처 비교 또한 디지털 트랜스포메이션 과정에서 클라우드 환경으로의 전환이 더욱 효율적으로 이루어질 수 있도록, 클라우드 네이티브 기술과 기업들의 서비스 모델을 재구성하기 위한 방법들을 안내하고 있습니다. 이렇게 새로운 서비스 모델 구축을 통해 민첩성과 효율성을 강화하여, 빠르게 변화하는 IT서비스의 수요에 기민하게 대응하고 고객 요구에 부응할 수 있도록 지원합니다. 여기서 계속 언급되고 있는 '클라우드 네이티브'는 정확히 무엇을 뜻할까요? CNCF의 활동에 대한 이해도를 높이기 위해, 클라우드 네이티브의 의미를 짚어보겠습니다! 📑클라우드 네이티브(Cloud Native)란? 클라우드 네이티브는, 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축·배포·관리할 때의 소프트웨어 접근 방식입니다. 기업과 조직은 고객의 요구를 충족하기 위해 신속하게 업데이트할 수 있는 확장성과 유연성, 그리고 복원력이 뛰어난 애플리케이션을 구축하고자 합니다. 이를 위해 클라우드 네이티브에서 사용되는 기술들은, IT 서비스에 영향을 미치지 않고 애플리케이션을 신속하게 변경합니다. 또한 리소스를 효율적으로 활용하여 빠르게 변화에 대응할 수 있도록 지원하고 있습니다. 위의 개념을 '클라우드 컴퓨팅'과 비교한다면 보다 더 쉽게 이해할 수 있는데요. 클라우드 컴퓨팅은, 클라우드 서비스 제공 업체가 단순히 리소스와 인프라를 클라우드 형태로 제공하는 방식입니다. 여기서 서비스 제공 방식은 기존 '모놀리식' 방식과 크게 다르지 않습니다. ▲클라우드 네이티브의 핵심요소 ⓒPivotal 클라우드 네이티브는 마이크로서비스 아키텍처(MSA)와 컨테이너를 기반으로, IT 서비스의 확장·변경 등에 대응이 용이한 환경입니다. 예를 들어 Ex1) 서비스 수요가 폭증하거나 장애가 생겼을 경우 Ex2) 자동적으로 애플리케이션을 확장하거나 장애가 발생했을 경우에는 대체 가능한 모델을 바로 적용하여 Fail-Over가 손쉽게 이루어질 수 있도록 합니다. CNCF에서는 위 그림과 같이 클라우드 네이티브의 핵심 요소를 마이크로서비스, 컨테이너, 애플리케이션의 개발·통합·배포의 의미를 내포하는 DevOps, CI/CD의 개발 방법론을 포함하여 설명하고 있습니다. CNCF 핵심가치2 : 오픈소스 프로젝트 생태계 육성 CNCF는 다양하고 혁신적인 '오픈소스 프로젝트'를 개발·공급·대중화하여, 클라우드 네이티브 생태계를 활성화하는데 큰 기여를 하고 있습니다. 또한 클라우드 네이티브 컴퓨팅 환경을 구성하고 효율적으로 운영하기 위해, 다양한 오픈소스를 개발하고 있는데요. 누구나 이와 같은 기술들을 이용할 수 있도록 지원합니다. 가장 성공적인 프로젝트는 2018년 8월에 컨테이너 오케스레이션 플랫폼인 'Kubernetes' 프로젝트이며, 컨테이너 생성·실행·종료 등의 역할을 하는 'Containerd', 시스템 모니터링 및 경고 역할을 하는 'Prometheus' 그리고 여러 시스템의 트래픽을 균등하게 분배하여 로드밸런싱을 제공하는 'Envoy' 등이 있습니다. 이처럼 클라우드 네이티브 생태계 활성화를 위한 다양한 프로젝트를 실행하며 배포하고 있습니다. ▲CNCF 개발 완료된 프로젝트 이외에도 클라우드 네이티브 커뮤니티인 이벤트·웨비나·워크샵 등을 활성화하여, 온오프라인 영역에서 개발자들 간의 교류를 원활하게 합니다. 개발자들이 오픈소스 프로젝트를 효과적으로 활용할 수 있도록, 사용법에 대한 교육과 튜토리얼을 제공하기도 합니다. 이를 통해 많은 기업과 이용자들이 클라우드 네이티브 환경에 손쉽게 접근할 수 있도록 지원하고 있습니다. CNCF 핵심가치3 : 기술의 표준화 수립 CNCF는 클라우드 네이티브 관련 기술의 무분별한 확장과 사용으로 인한 혼란을 방지하고자, 기술의 표준화를 촉진하고 정책의 일관성을 확보하는 노력 또한 지속하고 있는데요. 기술의 안정성과 품질 확보를 위해 재단 자체적으로 테스트와 벤치마킹 등을 수행하고, Best Practice를 공유하여, 기술의 표준화와 성숙도를 유지합니다. 이 외에도 CNCF는 새로운 기술의 적용 가능성과 성숙도를 평가하고, 클라우드 관련 기술을 보유한 회원사 및 파트너와의 협력을 촉진합니다. 이처럼 다양한 형태로 클라우드 네이티브 생태계의 지속적인 발전을 지원하고 있습니다. 。。。。。。。。。。。。 이번 시간에는 CNCF의 정의와 핵심가치를 알아보았는데요. CNCF는 앞에서 소개해 드린 내용처럼, 클라우드 네이티브 생태계 활성화를 위해 다양한 노력을 기울이고 있습니다. 브레인즈컴퍼니 역시 클라우드 네이티브 모니터링을 위한 다양한 제품과 기능들을 속속 출시하고 있으니, 많은 관심 부탁드립니다. 다음 시간에는 [CNCF의 핵심 프로젝트] 주제로 돌아오겠습니다!
2023.12.27
기술이야기
클라우드(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
기술이야기
메모리 누수 위험있는 FinalReference 참조 분석하기
기술이야기
메모리 누수 위험있는 FinalReference 참조 분석하기
Java에서 가장 많이 접하는 문제는 무엇이라 생각하시나요? 바로 리소스 부족 특히 ‘JVM(Java Virtual Machine) 메모리 부족 오류’가 아닐까 생각해요. 메모리 부족 원인에는 우리가 일반적으로 자주 접하는 누수, 긴 생명주기, 다량의 데이터 처리 등 몇 가지 패턴들이 있는데요. 오늘은 좀 일반적이지 않은(?) 유형에 대해 이야기해 볼게요! Java 객체 참조 시스템은 강력한 참조 외에도 4가지 참조를 구현해요. 바로 성능과 확장성 기타 고려사항에 대한 SoftReference, WeakReference, PhantomReference, FinalReference이죠. 이번 포스팅은 FinalReference를 대표적인 사례로 다루어 볼게요. PART1. 분석툴을 활용해 메모리 누수 발생 원인 파악하기 메모리 분석 도구를 통해 힙 덤프(Heap Dump)를 분석할 때, java.lang.ref.Finalizer 객체가 많은 메모리를 점유하는 경우가 있어요. 이 클래스는 FinalReference와 불가분의 관계에요. 나눌 수 없는 관계라는 의미죠. 아래 그림 사례는 힙 메모리(Heap Memory)의 지속적인 증가 후 최대 Heap에 근접 도달 시, 서비스 무응답 현상에 빠지는 분석 사례인데요. 이를 통해 FinalReference 참조가 메모리 누수를 발생시킬 수 있는 조건을 살펴볼게요! Heap Analyzer 분석툴을 활용하여, 힙 덤프 전체 메모리 요약 현황을 볼게요. java.lang.ref.Finalizer의 점유율이 메모리의 대부분을 점유하고 있죠. 여기서 Finalizer는, 앞에서 언급된 FinalReference를 확장하여 구현한 클래스에요. JVM은 GC(Garbage Collection) 실행 시 해제 대상 객체(Object)를 수집하기 전, Finalize를 처리해야 해요. Java Object 클래스에는 아래 그림과 같이 Finalize 메서드(Method)가 존재하는데요. 모든 객체가 Finalize 대상은 아니에요. JVM은 클래스 로드 시, Finalize 메서드가 재정의(Override)된 객체를 식별해요. 객체 생성 시에는 Finalizer.register() 메서드를 통해, 해당 객체를 참조하는 Finalizer 객체를 생성하죠. 그다음은 Unfinalized 체인(Chain)에 등록해요. 이러한 객체는 GC 발생 시 즉시 Heap에서 수집되진 않아요. Finalizer의 대기 큐(Queue)에 들어가 객체에 재정의된 Finalize 처리를 위해 대기(Pending) 상태에 놓여있죠. 위 그림과 같이 참조 트리(Tree)를 확인해 보면, 많은 Finalizer 객체가 체인처럼 연결되어 있어요. 그럼 Finalizer 객체가 실제 참조하고 있는 객체는 무엇인지 바로 살펴볼까요? 그림에 나온 바와 같이 PostgreSql JDBC Driver의 org.postgresql.jdbc3g.Jdbc3gPreparedStatement인 점을 확인할 수 있어요. 해당 시스템은 PostgreSql DB를 사용하고 있었네요. 이처럼 Finalizer 참조 객체 대부분은 Jdbc3gPreparedStatement 객체임을 알 수 있어요. 여기서 Statement 객체는, DB에 SQL Query를 실행하기 위한 객체에요. 그렇다면, 아직 Finalize 처리되지 않은 Statement 객체가 증가하는 이유는 무엇일까요? 먼저 해당 Statement 객체는 실제로 어디서 참조하는지 살펴볼게요. 해당 객체는 TimerThread가 참조하는 TaskQueue에 들어가 있어요. 해당 Timer는 Postgresql Driver의 CancelTimer이죠. 해당 Timer의 작업 큐를 확인해 보면 PostgreSql Statement 객체와 관련된 Task 객체도 알 수도 있어요. 그럼 org.postgresql.jdbc3g.Jdbc3gPreparedStatement 클래스가 어떻게 동작하는지 자세히 알아볼까요? org.postgresql.jdbc3g.Jdbc3gPreparedStatement는 org.postgresql.jdbc2.AbstractJdbc2Statement의 상속 클래스이며 finalize() 메서드를 재정의한 클래스에요. Finalize 처리를 위해 객체 생성 시, JVM에 의해 Finalizer 체인으로 등록되죠. 위와 같은 코드로 보아 CancelTimer는, Query 실행 후 일정 시간이 지나면 자동으로 TimeOut 취소 처리를 위한 Timer에요. 정해진 시간 내에 정상적으로 Query가 수행되고 객체를 종료(Close) 시, Timer를 취소하도록 되어 있어요. 이때 취소된 Task는 상태 값만 변경되고, 실제로는 Timer의 큐에서 아직 사라지진 않아요. Timer에 등록된 작업은, TimerThread에 의해 순차적으로 처리돼요. Task는 TimerThread에서 처리를 해야 비로소 큐에서 제거되거든요. 이때 가져온 Task는 취소 상태가 아니며, 처리 시간에 아직 도달하지 않은 경우 해당 Task의 실행 예정 시간까지 대기해야 돼요. 여기서 문제점이 발생해요. 이 대기 시간이 길어지면 TimerThread의 처리가 지연되기 때문이죠. 이후 대기 Task들은 상태 여부에 상관없이, 큐에 지속적으로 남아있게 돼요. 만약 오랜 시간 동안 처리가 진행되지 않는다면, 여러 번의 Minor GC 발생 후 참조 객체들은 영구 영역(Old Gen)으로 이동될 수 있어요. 영구 영역으로 이동된 객체는, 메모리에 즉시 제거되지 못하고 오랜 기간 남게 되죠. 이는 Old(Full) GC를 발생시켜 시스템 부하를 유발하게 해요. 실제로 시스템에 설정된 TimeOut 값은 3,000초(50분)에요. Finalizer 참조 객체는 GC 발생 시, 즉시 메모리에서 수집되지 않고 Finalize 처리를 위한 대기 큐에 들어가요. 그다음 FinalizerThread에 의해 Finalize 처리 후 GC 발생 시 비로소 제거되죠. 때문에 리소스의 수집 처리가 지연될 수 있어요. 또한 FinalizerThread 스레드는 우선순위가 낮아요. Finalize 처리 객체가 많은 경우, CPU 리소스가 상대적으로 부족해지면 개체의 Finalize 메서드 실행을 지연하게 만들어요. 처리되지 못한 객체는 누적되게 만들죠. 요약한다면 FinalReference 참조 객체의 잘못된 관리는 1) 객체의 재 참조를 유발 2) 불필요한 객체의 누적을 유발 3) Finalize 처리 지연으로 인한 리소스 누적을 유발하게 해요. PART2. 제니우스 APM을 통해 Finalize 객체를 모니터링하는 방법 Zenius APM에서는 JVM 메모리를 모니터링하고 분석하기 위한, 다양한 데이터를 수집하고 있어요. 상단에서 보았던 FinalReference 참조 객체의 현황에 대한 항목도 확인할 수 있죠. APM 모니터링을 통해 Finalize 처리에 대한 문제 발생 가능성도 ‘사전’에 확인 할 수 있답니다! 위에 있는 그림은 Finalize 처리 대기(Pending)중인 객체의 개수를 확인 가능한 컴포넌트에요. 이외에도 영역별 메모리 현황 정보와 GC 처리 현황에 대해서도 다양한 정보를 확인 할 수 있어요! 이상으로 Finalize 처리 객체에 의한 리소스 문제 발생 가능성을, 사례를 통해 살펴봤어요. 서비스에 리소스 문제가 발생하고 있다면, 꼭 도움이 되었길 바라요! ------------------------------------------------------------ ©참고 자료 ◾ uxys, http://www.uxys.com/html/JavaKfjs/20200117/101590.html ◾ Peter Lawrey, 「is memory leak? why java.lang.ref.Finalizer eat so much memory」, stackoverflow, https://stackoverflow.com/questions/8355064/is-memory-leak-why-java-lang-ref-finalizer-eat-so-much-memory ◾ Florian Weimer, 「Performance issues with Java finalizersenyo」, enyo, https://www.enyo.de/fw/notes/java-gc-finalizers.html ------------------------------------------------------------
2023.10.12
기술이야기
[브레인저가 알려주는 IT#1] 네트워크 관리, SNMP가 뭔가요?
기술이야기
[브레인저가 알려주는 IT#1] 네트워크 관리, SNMP가 뭔가요?
1. SNMP(Simple Network Management Protocol)란? 컴퓨터 네트워크 장치를 관리하고 모니터링하기 위해 사용되는 네트워크 관리 프로토콜이에요. 네트워크 장치, 서버, 라우터, 스위치, 프린터 등과 같은 네트워크 장치들의 상태를 모니터링하고 구성할 수 있는 표준 방법 또한 제공하고 있어요. 요약한다면 네트워크에 있는 장비들을 관리하기 위한 프로토콜이라고 이해하시면 된답니다! (1) SNMP의 역사 • SNMPv1(1988)초기 SNMP 버전으로 RFC 1067에 정의되었어요. 간단한 모니터링과 설정 변경 기능을 제공했으나, 보안 측면에서 취약점이 있었어요. 커뮤니티 문자열(Community String)을 사용하여 인증을 수행했어요. • SNMPv2(1993) SNMPv1의 한계와 보안 이슈를 개선하기 위해 개발되었어요. 여러 개의 추가 기능을 제공하려 했으나, 규격이 복잡해졌고 보안 문제로 인해 널리 채택되지 않았어요. • SNMPv2c(1996) SNMPv2의 복잡성을 줄이고 보안을 개선한 버전이에요. 커뮤니티 문자열을 계속 사용하여 보안적인 취약성은 여전히 존재했어요. • SNMPv3(1998) 현재까지 널리 사용되고 있는 최신 버전이에요. 보안 기능을 크게 강화하여 데이터 암호화, 사용자 인증, 데이터 무결성 검사 등을 제공하고 있어요. 비동기적인 알림 메커니즘으로 Trap 메시지와 함께 메시지의 암호화 및 보안 기능을 지원해요. • SNMPv3의 보안 개선(2002 이후~) SNMPv3에서 시작된 보안 향상이 계속 발전되어 왔어요. 데이터 암호화와 사용자 인증 등의 기능이 더욱 강화되고, 다양한 보안 솔루션과 표준이 제안되었어요. 2. SNMP의 주요 특징과 역할 (1) 클라이언트-서버 모델 SNMP는 관리자의 명령을 수행하는 에이전트와, 에이전트의 정보를 수집하는 매니저 간의 통신을 기반으로 해요. (2) MIB(Management Information Base) 네트워크 장치의 정보를 계층 구조로 정의한 데이터베이스입니다. 각 정보 항목은 OID(Object Identifier)로 식별되며, 매니저는 OID를 통해 특정 정보를 요청하고 수집할 수 있어요. (3) 동작 방식 • GET: 매니저가 에이전트에게 특정 정보의 값을 요청해요. • SET: 매니저가 에이전트에게 특정 정보의 값을 변경하도록 요청합니다. • TRAP: 에이전트가 이벤트 발생 시 매니저에게 알림을 보내요. (4) 보안 • SNMPv1: 초기 버전으로, 보안에 취약한 프로토콜이었어요. • SNMPv2c: SNMPv1을 확장한 버전으로, 여전히 보안에 취약했어요. • SNMPv3: 보안 강화 버전으로 데이터 암호화, 사용자 인증, 데이터 무결성 검사 등을 지원하여 보안을 강화했어요. (5) 확장 가능성 SNMP는 다양한 버전과 확장 프로토콜을 지원하여 새로운 기능을 추가하거나 보완할 수 있어요. (6) 주요 용도 • 네트워크 장치 모니터링: 장비의 성능, 상태, 트래픽 등 정보를 수집하여 네트워크를 모니터링해요. • 구성 관리: 장치의 설정 변경 및 관리를 원격으로 수행할 수 있어요. • 이벤트 알림: 장애나 이상 상태가 발생하면 즉시 알림을 받을 수 있어요. 이처럼 SNMP는 네트워크 관리에 필수적인 프로토콜 중 하나로, 네트워크의 안정성과 성능을 유지하며 문제를 신속하게 해결하는 데 도움을 준답니다! 3. Zenius에서의 SNMP 활용 안내 (1) NMS 모니터링 SNMP GET 방식으로 데이터를 수집할 수 있어요. SNMP를 활용하여 장비모니터링 화면, 등록된 장비의 장비명, IP, 성능데이터 등을 확인 할 수 있어요. 장비의 상세한 데이터를 모니터링 할 수 있어요. IF 포트의 UP/DOWN과 트래픽 데이터를 수집하여 확인 가능해요. • NMS in/out bps 전일 대비 In/Out bps의 데이터 확인 및 추이 분석기능도 제공하고 있어요. 사진과 같이 초 단위 실시간 데이터를 통한 상세 트랙픽 분석도 가능하답니다! 성능 데이터를 수집하여 그래프 형태로 보관하고 제공하고 있어요. 수집 시간대별 데이터도 제공해요. 해당 데이터를 통하여, 트래픽사용량이 많이 발생한 시간을 찾을수 있어요. • 장비등록 화면 SNMP 모든 버전에 대해서 모니터링을 제공하고 있어요. 장비 설정에 따라서, 버전 및 정보 입력하여 등록하여 모니터링 할 수 있어요. (2) TRAP 모니터링 • 네트워크 장비와 시스템에서 발생하는 이벤트나 상태 변화를 실시간으로 알려주기 위한 SNMP의 비동기적인 메시지에요. 이벤트 발생 시, 장치가 주도적으로 SNMP 매니저에게 알림을 보내는 방식으로 작동해요. Trap은 장애 상황이나 경고 상태 등에 대한 신속한 대응을 가능하게 해요. • Trap은 네트워크 관리자에게 실시간 정보를 제공해요. 장비나 시스템의 이상 상태를 빠르게 감지하고 대응하여, 서비스의 가용성과 신뢰성을 유지하는 데 중요한 역할을 하고 있죠. • Trap의 활용✅ 장애 관리: 장비나 시스템의 고장이나 다운 상태 등의 이벤트가 발생하면 즉시 Trap이 생성되어 매니저에게 알려줘요.✅ 경고 및 알림: 주의가 필요한 상황에서도 Trap을 활용하여 관리자에게 알림을 제공해요.✅ 보안 이벤트: 불법 로그인 시도나 보안 위반 등의 이벤트가 발생하면, 해당 정보를 Trap으로 매니저에게 전송하여 보안 조치를 취할 수 있어요. Trap 발생시, 모니터링 화면을 통해서 내용을 확인 할 수 있어요. Trap 받은 내역을 저장하여, 기간 검색 등을 통하여 활용할 수 있어요. 이제 Zenius를 활용하여 네트워크 장비를 모니터링 해보는 것은 어떨까요?
2023.09.05
기술이야기
시련이 많았던 경험자의 CI/CD 간략 소개
기술이야기
시련이 많았던 경험자의 CI/CD 간략 소개
과거에는 근로자 1명이 기획/설계/구현 테스트까지 진행이 가능했다고 합니다. 하지만 최근에는 근로자 1명이 기획부터 테스트까지 진행하는 일은 거의 드물다고 볼 수 있습니다. OLD SCHOOL 지금 이 시간에도 많은 회사 내의 개발자들은 자신에게 주어진 기능 구현을 훌륭하게 완수하기 위해서 모니터를 째려보고 있습니다. 모니터를 째려보다가 자신이 작성한 내용을 다른 팀원에게 공유하고자 혹은 반대로 다른 팀원이 작성한 내용을 공유받고자 '형상 관리 시스템'을 사용하고 있습니다. CVS와 SVN으로 대표되는 이 시스템은 최근들어 Git을 많이 사용하는 추세라고 합니다. 필자 역시 여러 프로젝트에서 해당 시스템을 사용도 해보았고, 연동하여 다른 시스템을 구현한 경험이 있습니다. 하지만 프로젝트 마다 해당 시스템 사용에 있어서 몇몇 시련이 있었습니다. "차주에 전체 기능 리뷰가 있습니다. 각 파트 별로 코드 커밋해주세요." 라고 PM(Project Manager) 또는 PL(Project Leader)이 요청을 하면, 각 하위 PL(Part Leader)은 파트(Part)에 돌아가 파트원들에게 이 내용을 공유하고, 개별 개발자들은 자신이 작성한 코드를 관리 시스템에 커밋하게 됩니다. 잠시 후 형상 관리 시스템에서 작성 코드를 내려 받은 PL(Part Leader)은 아래와 같은 상황에 직면하게 됩니다. - 동료의 작성 코드에는 관심 없이, 본인의 작성물만 커밋하는 경우 - 별도의 공지 없이 이미 작성된 파일 등을 삭제하여 커밋하는 경우 - 약속되지 않은 환경이나 lib으로 작성한 코드를 커밋하는 경우 프로젝트에 따라 기간이 길어지거나 다른 여러 상황이 발생하면 위의 문제보다 더 많은 문제를 경험하게 됩니다. 각 파트 단위로 위와 같은 문제가 해결되고 정상적으로 컴파일, 빌드까지 완료되면, PL(Part Leader)들은 파트별로 단위테스트를 완료하고 결과가 정상적이면 결과를 품질관리자에게 통보합니다. 각 파트별로 완료 통보를 받은 품질관리자는 다시 관리 시스템에서 전체 작성물을 수동으로 내려받아 통합테스트를 진행합니다. 통합테스트까지 완료되었다면 해당 내용을 릴리즈관리자에게 통보합니다. 릴리즈관리자는 바뀐 부분만 찾아서 변경하면 시간적으로 적용이 빠르겠지만 '바뀐 부분만 변경하면 될까?'라는 의심으로 전체 작성물을 수작업으로 전처리(컴파일 & 빌드)하고 다시 수작업으로 릴리즈하게 됩니다. 만약 진행상의 이슈가 없다면 이제 기능 리뷰 준비가 완료됩니다. 단계별로 문제 없이 진행되고 모든 기능을 확인하였다고 하지만 기능 리뷰 혹은 데모만하면 꼭! 오류가 발생하여 난처한 상황이 종종 발생하곤 합니다. 필자 역시 이런 경우가 많았으며 그때마다 문제 부분을 찾기 위해 많이 고생했습니다. 아래의 개념은 아마도 저 같은 경험을 하고 있는 많은 사람들을 위한 것이 아닌가 싶습니다. CI (Continuous Integration, 지속적인 통합) '지속적인 통합'이란 개발 과정에서 생산되는 코드의 관리와 코드의 문법적인 오류 확인 및 기능 점검(=테스트)을 특정한 일정에 진행하는 것이 아니라 날마다 혹은 특정 시간마다 진행하여 코드 및 기능에 대한 품질을 유지하는 개념이라고 말할 수 있을 것입니다. 앞에서 언급했던 과거 모습을 개선하는 노력은 CI 라는 개념이 나오기 이전부터 많은 개발사 혹은 팀에서 그들만의 문화나 관습으로 처리하는 경우가 있었을 것입니다. 하지만 문제는 새로운 구성원이 생겼을 때 입니다. 조직 문화를 새로이 접하는 이들에게는 이를 설명하고 이해시키는 일은 시간과 노력이 드는 일이니까요. 하지만 이젠 일반적인 Java 개발팀에서는 SVN(or GitHub)+Jenkins+Maven+JUnit으로 구성하는 개발 환경을 사용하고 있습니다. 다만, 프로젝트 목표나 목적되는 환경에 따라 약간씩 다른 환경을 구성하기도 합니다. 그러나 대부분의 경우 Open Source 기반으로 CI 개념을 구성하는 경우가 많습니다. 이는 일단 무료라는 큰 장점과 많은 레퍼런스가 있어 구성하기 편리하고 "우린 Open Source인 SVN과 Jenkins를 사용합니다. 일단 자세한 개념과 동작 원리는 너트뷰 선생님께..." 라고 하며 짧은 노력으로 교육을 끝낼 수 있어 그런 것이 아닌가 합니다. CI 개념을 활용하는 개발 프로젝트에서는 UI 메뉴 혹은 구현 단위 기준으로 구분하여 개발파트나 개발자를 할당하고는 합니다. 각각의 개발자는 할당받은 구현 범위에 대한 문제를 개별적으로 개발 도구를 활용하여 구현하고 구현 내용을 형상 관리 시스템에 커밋합니다. 이런 과정을 다른 개발자들도 같이 수행한 후에 빌드 자동화 환경에서 컴파일 및 빌드 스크립트에 맞춰서 문법적으로 확인된 결과물을 만들고 이를 다시 기능이 확인이 가능한 테스트 스크립트에 맞춰서 테스까지 진행합니다. 만약 테스트 과정에서 비정상적인 결과가 발생할 경우, 해당 내용 수정 후 위의 작업을 다시 진행하게 됩니다. 이런 일련의 절차는 일정 시간 준위 단위로 수행되어 구현하고 있는 기능을 주기적으로 확인하는 과정을 수행합니다. 올바른 진행을 위하여 개발자 개개인에게 분장되는 업무의 크기가 비슷해야 한다고 생각됩니다. 개발자별로 업무의 크기가 서로 다른 겨우, 결과물이 정상적이라고 볼 수 없게 될 것이고 그렇게 된다면 테스트 결과 역시 믿을 수 없는 경우가 발생할 것입니다. CD (Continuous Delivery/Deploy, 지속적 제공/배포) 지속적인 통합(CI)을 사용하던, 기존의 개발 환경을 사용하던, 결국 작성된 결과물은 최종적으로 운영환경에 적용되어 사용작 혹은 타 시스템과 연결되어야 합니다. 그래야 제품 개발 또는 프로젝트가 완료됩니다. CD는 결과물을 운영환경에 적용하는 방식을 나타내는 환경으로써 결과물 적용 여부를 판단하는 행위를 담당하는 주체가 누구냐에 따라, Continuous Delivery와 Continuous Deploy로 구분됩니다. Continuous Delivery는 CI 환경을 통하여 자동으로 컴파일 및 빌드가 되고, 테스트된 결과물에 대해서 릴리즈 관리자가 적용 시점마다 테스트 결과 및 서비스 영향도를 판단하여 수동으로 적용하는 방식이며, Continuous Deploy는 결과물은 항상 옳고 서비스 영향도는 없다고 미리 판단하여 자동으로 적용하는 방식입니다. 아마도 대부분의 개발 환경에서는 Continuous Delivery로 적용하고 있기에 CD라고 표기되는 경우 Continuous Delivery를 의미하는 경우가 많을 것입니다. 소프트웨어 솔루션을 제작하는 개발팀에서는 아마도 Continuous Delivery로 또한 MSA 기반의 서비스를 제공하는 개발팀에서는 Continuous Deploy를 사용하는 편이 여러 관계를 보았을 때 유리하다고 판단합니다. 하지만, 개발팀의 업무 성격과 제품 혹은 서비스의 출시 시기 등이 CD 방식을 결정하는 가장 중요한 요소가 될 것입니다. 지금까지 CI/CD 도입 배경과 내용을 필자의 경험을 바탕으로 간략하게 정리하였습니다. 개발자들이 자기가 맡은 기능 혹은 프로세스에만 전념할 수 있는 훌륭하고 편리한 개발 환경 및 적용 환경이 언제 어떻게 나타나게 될지 궁금합니다. 가능하다면, 많이 바꿔서 따라가기 귀찮은 시니어들과 새롭게 따라가야하는 주니어 개발자 모두에게 즐거운 환경이 등장했으면 합니다. 감사합니다.
2023.08.22
기술이야기
[Zenius Case#2] 서버관리, 서버가 왜 이렇게 느리지?
기술이야기
[Zenius Case#2] 서버관리, 서버가 왜 이렇게 느리지?
평온한 오후 퇴근 준비가 한창인데 불길한 전화가 걸려 옵니다. “서비스가 먹통이어서 확인 좀 해야 하는데 서버가 엄청 버벅거리고 반응이 느려요!! 이거 왜 이러죠??” 왜!! 도대체 왜!! 한 번쯤은 겪어보았을 급작스러운 Linux 서버의 상태 이슈! 불행하게도 무척이나 다양한 원인으로 인해 발생하게 됩니다. 우리의 목표는 이 다양한 원인 중 실제 발생 원인을 빠르게 특정하는 것! 기본적인 항목들의 체크리스트를 통해 빠르게 원인을 파악 해 봅시다. Linux 서버 상태 이슈 체크리스트 1. 서버의 CPU 부하 확인하기 2. BUFFER, CACHE, SWAP 상태 확인하기 3. 디스크 상태 확인하기 Zenius를 통한 데이터 추이 분석!! 장애의 발생은 순식간에 일어나지만, 장애 발생 시점의 데이터만을 확인해서는 원인을 파악하기가 쉽지 않은 경우가 많습니다. Zenius를 활용하여 앞서 정한 체크리스트를 빠르게 확인해 봅시다. 1. 서버의 CPU 부하 확인하기 - CPU 부하 확인의 Point는 Load Average Load Average는 CPU 사용 대기 중인 프로세스와 I/O 완료를 대기하고 있는 프로세스의 수를 의미합니다. 따라서, Load Average가 높다는 것은 CPU가 바쁘며 시스템에 걸리는 부하가 있다는 뜻입니다. 화면과 같이 1분, 5분, 15분의 로드 평균을 확인 해 보도록 합시다. 1분 로드 평균은 순간적으로 증가하는 경우가 있지만, 5분 15분 데이터상에도 이전과 비교하였을 때 높은 수치를 보인다면, CPU의 부하가 의심스러운 상황입니다. 그렇다면 CPU의 사용률과 I/O 대기율은 어떨까요? user가 사용한 CPU 사용률은 일정하지만, Iowait 수치가 올라간 것을 볼 수 있습니다. 이 경우 CPU의 리소스 부족이기보다는 I/O로 인한 부하로 판단할 수 있고, 자세히는 메모리나 프로세스의 현황 확인이 필요한 경우입니다. 반대로 user 수치가 높은 경우에는 물리적인 CPU 자체의 리소스 부족이라 볼 수 있습니다. 2. BUFFER, CACHE, SWAP 상태 확인하기 - 메모리 사용률과 Swap, Buffer, Cache 메모리 사용률이 높다 = 서버에 부하가 있다?? 답은 No !! Linux 서버의 메모리 사용률은 Buffer/Cache의 사용량이 포함되어 표현되게 됩니다. 따라서, 우리는 그 추이를 통하여 이슈를 확인하는 것이 중요합니다. 위의 검은 바탕의 그래프는 메모리 사용률이 높지만, 일정한 수치를 유지하고 있습니다. 이런 경우 서버의 메모리 사용은 안정적인 영역에서 이루어진다고 판단이 가능합니다. 그 이유는 실제 메모리 사용량과 Buffer/Cache에 할당량의 수치가 할당 가능한 수치 내에서 이루어지기 때문에 사용률이 유지된다고 볼 수 있기 때문입니다. 반면 흰 바탕의 그래프는 메모리 사용률이 점차 증가하며 결국 100%까지 도달한 것을 확인할 수 있는데요, 이경우에는 프로세스가 연산에 필요한 공간을 할당받지 못하여 프로세스 행이 발생하게 됩니다. 그렇다면 Buffer Cache Swap은 어떨까요? 먼저 Buffer Cache에 관해 확인 해 보도록 하겠습니다. *Buffer – 메타데이터를 메모리에 저장. *Cache – Page Cache, Slab을 메모리에 저장. 쉽게 말해, 둘 다 용도에 맞는 정보를 저장하여 수행 속도에 도움을 주는 영역입니다. 메모리 사용량이 늘어나면 이 Buffer, Cache 영역이 줄어들게 되고, 저장 영역이 줄어든다는 것은 속도가 떨어져 성능 저하로 이어지게 됩니다. 아래 그래프는 메모리 사용률이 올라가고 있는 상태의 서버 데이터입니다. 다음으로 이 시점의 Buffer, Cache의 영역을 확인해 보겠습니다. 추이 그래프를 통해 메모리 사용률이 올라갈수록 Buffer, Cache 영역이 줄어드는 것을 확인할 수 있습니다. 그렇다면 이 시점의 I/O는 어떨까요? 보시는 바와 같이 Iowait 수치가 급격히 올라갔음을 확인 할 수 있으므로, “메모리 사용률의 상승은 Buffer, Cache 영역을 줄어들게 하여 속도 저하를 발생시킨다.” 라는 결론을 도출할 수 있습니다. 또한, 메모리 사용률의 상승은 Swap에도 영향을 끼치게 됩니다. *Swap – 디스크 공간에 할당하여 메모리 역할로 사용하는 공간. 따라서, Swap 영역의 사용은 실제 메모리가 아닌 디스크를 사용하기 때문에 속도 저하가 발생 됩니다. 위 그래프는 Swap 사용률이 증가하고 있는 서버의 데이터입니다. 이 시점의 디스크의 상태를 보면 Read와 Write가 점차 Swap과 동일하게 상승하는 것을 볼 수 있습니다. 이렇게 메모리 대신 디스크 영역을 사용하면서 속도가 저하하게 되는 것입니다. 3. 디스크, 확인하기 - Mount Point 별 디스크 사용량, 작업량 추이 확인 디스크의 여유 공간이 없으면 시스템이 파일 생성을 못 하게 되고 결국엔 서버의 운영에 영향을 끼치게 됩니다. 각각의 마운트 지점의 사용률을 체크하여 여유 공간을 확보하는 것이 필요합니다. 디스크의 사용량이 급작스럽게 늘어난 경우는 신규 파일이 업로드되었다거나, 로그파일이 급작스럽게 많이 쌓이는 경우가 있습니다. 그렇기에 각 Mount Point의 사용률을 확인하고 해당 지점의 이슈 사항을 파악하는 것이 가장 좋습니다. 위 그래프와 같이 1시간 이내에 /data 지점의 사용률이 급등하였다면, 해당 지점에 쌓이는 데이터나 로그파일이 급격하게 증가한 것이므로 확인이 필요합니다. 다음으로는 디스크 사용 추이를 확인 해 보도록 하겠습니다. 서버에서 사용하는 물리 디스크는 각각의 성능의 한계가 있습니다. 이 한계를 직관적으로 확인할 수 있는 데이터로는 Disk Busy Rate(작업률)와 Disk Wait Rate(대기율)이 있는데요, Read 및 Write의 양이 한계치까지 치솟게 된다면 Busy Rate 값이 증가하게 되고, 이에 따른 Wait Rate 가 늘어나면서 서버의 성능 저하를 불러오게 됩니다. 어떻게 관리해야 할까? 앞서 확인한 서버의 상태 이슈들, 물론 급작스럽게 발생하는 경우는 어쩔 수 없지만 미리 대비가 가능한 것들은 Zenius-EMS를 이용하여 임계치 기반의 사전 모니터링과, 모니터링 페이지를 통한 직관적인 관리가 가능합니다. 각각의 항목들에 세부적으로 단계별 임계치를 걸어서 서버의 상태 이슈를 사전에 인지하고, 요약 페이지를 통해 빠르게 상태를 파악하여 우리의 퇴근 시간을 사수해 보는 건 어떨까요?
2023.08.08
기술이야기
서버 모니터링의 두 가지 방식
기술이야기
서버 모니터링의 두 가지 방식
이번 블로그에서는 일반적으로 서버 모니터링 소프트웨어들이 널리 쓰고 있는 서버 모니터링의 두 가지 방식에 대해서 논의하고 그 차이점을 알아보겠습니다. 지난 블로그에서 언급했듯이, 서버 모니터링은 컴퓨터 서버의 성능을 관찰하고 분석해 최적의 상태로 실행되고 있는지 확인하는 작업입니다. 이 프로세스에는 일반적으로 CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽 및 응용 프로그램 성능과 같은 다양한 메트릭에 대한 데이터를 수집하는 소프트웨어 도구의 사용이 포함됩니다. 서버 모니터링 소프트웨어는 데이터 수집 후 추세, 패턴 및 이상 현상을 식별하기 위해 데이터를 분석합니다. 분석을 통해 잠재적인 문제가 심각해지기 전에 식별하고 서버 관리자가 시정 조치를 취할 수 있도록 합니다. 예를 들어, CPU 사용률이 지속적으로 높은 경우 서버의 성능이 부족해 더 많은 리소스를 할당해야 할 수 있음을 나타낼 수 있습니다. 또는 디스크 I/O가 느린 경우 서버의 저장소가 과부하됐거나 최적화가 필요함을 나타낼 수 있습니다. 서버 모니터링 소프트웨어에는 관리자가 서버 성능을 파악하는데 도움이 되는 대시보드, 경고 및 보고 기능이 포함되는 경우가 많습니다. 대시보드는 핵심 성과 지표의 실시간 보기를 제공하는 동시에 특정 임계값을 초과하거나 문제가 감지되면 관리자에게 알림을 보냅니다. 서버 관리자는 보고 기능을 통해 시간 경과에 따른 성능 추세 및 문제에 대한 보고서를 생성할 수 있으며, 이를 통해 용량 계획 및 리소스 할당 결정을 알리는데 사용할 수 있습니다. 서버 모니터링은 일반적으로 에이전트 없는 서버 모니터링과 에이전트 기반 서버 모니터링, 이 두 가지 주요 접근 방식이 있습니다. 두 가지 모두 장단점이 있으며 어떤 것을 선택하느냐는 특정 요구 사항과 선호도에 따라 달라집니다. 에이전트 기반 서버 모니터링 에이전트 기반 서버 모니터링에는 모니터링하려는 각 서버에 ‘에이전트’라고 하는 별도의 서버용 모니터링 소프트웨어를 설치해 데이터를 수집하는 방식을 말합니다. 에이전트는 서버에서 다양한 성능 메트릭에 대한 데이터를 수집해 모니터링 시스템으로 다시 보냅니다. 이 접근 방식은 에이전트 없는 모니터링보다 더 상세하고 세분화된 데이터와 기능을 제공합니다. 또, 데이터를 암호화하고 보안 채널을 사용해 데이터를 전송하므로 일반적으로 에이전트 없는 모니터링보다 더 안전합니다. 에이전트 기반 서버 모니터링의 주요 기능은 다음과 같습니다. ∙ 성능 모니터링: 에이전트는 CPU, 메모리, 디스크 사용률, 네트워크 트래픽 등의 정보를 수집할 수 있습니다. 이를 이용해 서버의 성능을 모니터링하고, 부하가 높아지면 적시에 대처할 수 있습니다. ∙ 로그 모니터링: 에이전트는 서버에서 발생하는 로그를 수집할 수 있습니다. 이를 이용해 서버에서 발생한 이벤트의 원인 파악에 도움을 줄 수 있습니다. ∙ 보안 모니터링: 에이전트는 서버 내부의 보안 상태를 모니터링할 수 있습니다. 예를 들어, 악성 코드 감지, 사용자 로그인 상태, 파일 권한 등을 체크해 보안 위협을 조기에 감지할 수 있습니다. ∙ 애플리케이션 모니터링: 에이전트는 서버에 설치된 애플리케이션의 상태를 모니터링할 수 있습니다. 예를 들어, 웹 서버에서는 HTTP 요청, 응답 코드, 응답 속도 등을 모니터링해 애플리케이션의 상태를 파악할 수 있습니다. ∙ 자동화된 조치: 에이전트는 모니터링 데이터를 기반으로 자동화된 조치를 수행할 수 있습니다. 예를 들면, CPU 부하가 높아지면 자동으로 스케일 업 또는 스케일 아웃을 수행할 수 있습니다. 에이전트 리스 서버 모니터링 에이전트가 없는 서버 모니터링은 서버 자체에 소프트웨어를 설치할 필요가 없습니다. 대신 모니터링 소프트웨어가 별도의 서버나 워크스테이션에 설치되고, SNMP 또는 WMI와 같은 네트워크 프로토콜을 사용해 대상 서버에서 데이터를 원격으로 수집합니다. 이 접근 방식은 각 서버에 소프트웨어 에이전트를 설치하고 관리할 필요가 없어 일반적으로 설정 및 유지 관리가 더 쉽고 빠릅니다. 또, 에이전트 기반보다 같은 자원을 이용해서 더 많은 수의 서버를 모니터링할 수 있어 경제적입니다. 대신 기능이 제한적이고 프로토콜이 의존해 데이터를 수집하기 때문에 보안 문제가 발생할 수 있습니다. 에이전트 리스 서버 모니터링의 주요 기능은 다음과 같습니다. ∙ 원격 모니터링: 에이전트 없는 모니터링 도구는 원격 데이터 센터, 지사 또는 클라우드 환경에 있는 서버를 포함해 모든 곳에 있는 서버를 원격으로 모니터링할 수 있습니다. 이러한 유연성을 통해 조직의 전체 서버 인프라를 중앙집중식으로 모니터링하고 관리할 수 있습니다. ∙ 확장성: 에이전트 없는 모니터링은 서버 인프라 또는 워크로드 요구사항의 변화를 수용하기 위해 쉽게 확장 또는 축소할 수 있습니다. 추가 에이전트 소프트웨어 설치 또는 구성 없이 모니터링 시스템에 추가 서버를 추가할 수 있습니다. ∙ 포괄적인 모니터링: 에이전트 없는 모니터링은 서버 성능 메트릭을 추적하고 문제를 식별하며, 실시간 경고를 제공함으로써 관리자가 서버 인프라의 상태를 유지하고 중요한 애플리케이션과 서비스가 원활하게 실행되도록 합니다. ∙ 손쉬운 유지 관리 및 업데이트: 에이전트 없는 모니터링을 사용하면 모니터링 되는 각 시스템에서 에이전트 소프트웨어를 관리하고 업데이트할 필요가 없습니다. 이는 유지보수를 단순화하고 모니터링 시스템을 항상 최신 상태로 유지합니다. Zenius(제니우스)의 서버 모니터링 브레인즈컴퍼니의 지능형 IT 인프라 통합관리 소프트웨어 ‘Zenius(제니우스)’는 고객의 시스템 상황에 따라 에이전트 기반 및 리스 방식 모두 가능합니다. 에이전트 기반의 통합 모니터링 소프트웨어 ‘Zenius SMS’는 HTML5 기반 Web UI와 토폴로지 맵을 통해 서버 성능과 상태 및 서버 간 연관관계를 직관적으로 파악합니다. 특히, Zenius SMS는 애플리케이션 단위에 성능이나 로그를 세밀하게 모니터링 및 분석이 가능합니다. Zenius SMS의 주요 기능은 아래와 같습니다. Zenius SMS의 주요 서버 모니터링 기능 1. 프로세스: 프로세스 상태(Up/Down) 및 성능 모니터링(CPU/MEM) 2. 로그: 프로세스나 시스템 로그와 같은 각종 로그 모니터링 3. GPU: GPU의 상태 및 성능 모니터링 4. 보안: 서버의 보안 취약점 점검 5. 자동화: 모니터링 데이터를 기반으로 자동화된 조치 수행 6. 기타: 코어별 온도 모니터링, 서비스 포트별 네트워크 상태, S/W 목록, 환경변수, 계정, 그룹, 스케쥴링, 공유폴더 현황 등 ‘Zenius SMS’ 도입을 통해 체계화된 서버 통합관리를 할 수 있습니다. 반복적이고 수동적인 업무는 자동화돼 업무 효율성을 향상시키며, 객관적인 데이터를 기반으로 정확한 성능 현황 및 비교분석이 가능합니다. 이는 곧 서비스 연속성 확보로 이어지며, 향후 고객 만족도 향상을 기대할 수 있습니다. 반면, 고객 서버에 에이전트 탑재가 불가능한 경우에는 에이전트 리스 방식으로도 사용 가능합니다. 브레인즈컴퍼니의 에이전트 리스 제품으로는 ‘Zenius VMS’가 있습니다. ‘Zenius VMS’는 VMware, Citrix Xen Server, Hyper-V와 같은 서버 가상화 환경에서 호스트 서버와 게스트 서버의 리소스 할당 및 사용 현황, 관계 등을 통합적으로 관제합니다. ‘Zenius VMS’는 프라이빗 클라우드 환경을 모니터링하는데 효과적입니다. Open API로 프라이빗 클라우드 인프라와 통신해, 가상머신의 상태 및 성능, 스토리지 활용도 및 네트워크 트래픽과 같은 환경의 다양한 측면에 대한 데이터를 수집합니다. 수집된 데이터를 분석해 잠재적 문제를 나타낼 수 있는 경향, 패턴 및 이상 현상을 식별하고, 크게 CPU, 메모리, 디스크, MIB 이 4가지 정보를 기본적으로 제공합니다. ‘Zenius VMS’는 VM 상세 관리를 위해 SMS 추가 확장이 용이한 제품입니다. VMS를 통해 호스트-게스트 간 연관관계 기반의 모니터링을 시행하고, 별도로 가상화 서버에 SMS 모듈을 추가해 보다 다양한 모니터링 항목으로 정밀하게 관리함으로써 효과적인 통합관리 환경을 조성할 수 있습니다.
2023.05.09
기술이야기
서버 모니터링, 서버 관리, 서버 관리자
기술이야기
서버 모니터링, 서버 관리, 서버 관리자
서버는 기업의 IT 인프라를 구성하는 필수 요소입니다. 서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로, ▲파일 저장 및 공유 ▲웹사이트 및 애플리케이션 호스팅 ▲프린터 및 스캐너와 같은 네트워크 리소스 관리 ▲이메일 서비스 제공 등 다양한 기능을 수행합니다. 일반적으로 Microsoft Windows Server, Linux 또는 Unix와 같은 다양한 운영 체제를 실행하며, 가동 중지 시간을 최소화하면서 지속적으로 실행되도록 설계됐습니다. 오늘날과 같이 급변하는 비즈니스 환경에서의 서버 중단은 상당한 수익 손실과 평판 손상으로 이어질 수 있습니다. 이에 따라 기업은 서버 모니터링 및 관리를 위해 문제를 신속하게 식별하고 해결할 수 있는 강력한 서버 모니터링 시스템을 필수적으로 갖춰야합니다. 서버 모니터링과 서버 관리는 서버의 성능을 최적화하고 가용성을 보장하는데 중요한 관련이 있습니다. 이 블로그에서는 서버 모니터링과 서버 관리에 대해서 알아보고, 마지막으로 서버관리자가 어떤 일을 하는지 논의해 보고자 합니다. 먼저, 서버 모니터링과 서버 관리의 차이점은 다음과 같습니다. ------------------------------------------ 서버 모니터링이란? 서버 모니터링에는 도구와 소프트웨어를 사용해 서버의 성능, 상태 및 가용성을 추적하는 작업이 포함됩니다. 여기에는 CPU 사용량, 메모리 사용량, 디스크 공간, 네트워크 트래픽 및 애플리케이션 성능과 같은 모니터링 지표가 포함됩니다. 서버 모니터링의 목표는 문제가 발생하기 전에 잠재적인 문제를 감지하고, 문제가 발생할 때 문제 해결을 위한 데이터를 제공하는 것입니다. 서버 모니터링은 일반적으로 특수 도구를 사용해 자동화되는 프로세스입니다. 서버 관리란? 서버 관리는 서버가 최적으로 작동하도록 서버를 능동적으로 유지∙관리하고 구성하는 프로세스입니다. 여기에는 운영 체제, 소프트웨어 및 응용 프로그램의 설치 및 구성, 사용자 계정 및 사용 권한 관리, 백업 및 복원 수행, 서버 환경의 보안 및 규정 준수 보장 등의 작업이 포함됩니다. 서버 관리의 목표는 서버가 최고의 효율성으로 실행되고 안전하며, 사용자에게 필요한 서비스를 제공할 수 있도록 하는 것입니다. 요약하면, 서버 모니터링은 관찰 및 경고에 중점을 두는 반면, 서버 관리는 성능을 최적화하고 가용성을 보장하기 위해 서버를 능동적으로 구성하고 유지∙관리하는데 중점을 둡니다. 서버 모니터링은기업의 서버 관리자가 담당합니다. 서버 관리자는 기업의 비전과 전략을 달성하기 위해 서버를 비롯한 IT 시스템의 방향을 수립하는 IT 전문가입니다. 서버 관리자는 높은 수준의 가동 시간과 가용성을 보장하고 서버, 시스템 및 애플리케이션의 소프트웨어 및 하드웨어 기능과 같은 구성 요소를 평가합니다. 서버 관리자의 주요 업무는 조직의 규모와 특정 요구 사항에 따라 다를 수 있지만, 일반적으로 아래와 같습니다. 서버 관리자의 주요 업무 1. 서버 설치 및 구성 서버 설치 및 구성은 서버 관리자의 필수 업무로, 서버 하드웨어, 소프트웨어 및 네트워크 인프라에 대한 기술적 전문 지식, 세부 사항에 대한 주의 및 철저한 이해가 필요한 복잡한 작업입니다. 서버 관리자는 최적의 성능, 보안 및 안정성을 제공하는 동시에 서버가 조직의 요구사항을 충족하도록 올바르게 설치 및 구성됐는지 확인해야 합니다. 2. 서버 모니터링 및 유지보수 서버의 안정성과 성능을 유지하기 위한 핵심 업무입니다. 서버 관리자는 서버 하드웨어 및 소프트웨어를 유지∙관리해, 서버가 효율적이고 안전하게 실행되도록 하고 시스템 성능을 모니터링해 잠재적인 문제를 식별합니다. 3. 서버 보안 서버 보안 관리는 서버에 저장된 데이터의 기밀성, 무결성 및 가용성을 손상시킬 수 있는 잠재적인 보안 위협으로부터 서버를 보호하는 것과 관련된 업무입니다. 서버 관리자는 서버가 잠재적인 보안 위협으로부터 보호되고 서버가 관련 규정 및 표준을 준수하는지 확인하기 위해 적극적으로 노력합니다. 4. 서비스 제공 및 지원 서비스 제공 및 지원은 서버 서비스 및 응용 프로그램의 배포, 유지 및 지원 관리와 관련 있습니다. 이 업무는 서버 가용성을 유지하고 사용자 요구 사항을 충족하는데 중요하며, 서버 관리자는 사용자가 필요할 때 시기 적절하고 효과적인 지원을 받을 수 있도록 합니다. ------------------------------------------ 이처럼 서버 관리자는 서버가 원활하고 안전하며 효율적으로 실행되도록 하는데 중요한 역할을 합니다. 서버 관리자는 복잡한 기술적 지식을 보유해야 하고 빠른 대처 능력을 요구받으며, 보안 대응 및 최적화 작업 등에서 많은 어려움을 겪습니다. 더욱이 서버가 기능에 따라 세분화돼 일반 서버, 웹 어플리케이션 서버, 데이터베이스 서버 등으로 나뉘게 되면 각 기능별로 웹 애플리케이션 서버관리자나 데이터베이스 서버관리자 등으로 관리자의 역할이 세분화되기도 합니다. 서버의 수나 종류가 많아지고 구성이 복잡해지면 모니터링과 관리가 어려워집니다. 이를 돕기 위해 브레인즈컴퍼니의 Zenius(제니우스)와 같은 통합 서버 모니터링 및 관리 소프트웨어가 필요하게 됩니다.
2023.05.09
기술이야기
옵저버빌리티 향상을 위한 제니우스 대표 기능들
기술이야기
옵저버빌리티 향상을 위한 제니우스 대표 기능들
이번 블로그에서는 지난 블로그에서 다루었던 옵저버빌리티를 구현하기 위한 오픈 소스들은 어떤 것들이 있는지 간략히 알아보고, 제니우스(Zenius-EMS)에서는 옵저버빌리티 향상을 위해서 어떤 제품들을 제공하고 있는 지 살펴보겠습니다. 옵저버빌리티 구현을 위해 널리 활용되는 대표적인 오픈소스로는 아래 네 가지 정도를 들 수 있습니다. l Prometheus: 메트릭 수집 및 저장을 전문으로 하는 도구입니다. Prometheus는 강력한 쿼리 기능을 가지고 있으며, 다양한 기본 메트릭을 제공하며 데이터 시각화를 위해 Grafana와 같은 도구와 통합될 수 있습니다. 또한 이메일, Slack 및 PagerDuty와 같은 다양한 채널을 통해 알림을 보낼 수 있습니다. l OpenTelemetry: 에이전트 추가 없이 원격으로 클라우드 기반의 애플리케이션이나 인프라에서 측정한 데이터, 트레이스와 로그를 백엔드에 전달하는 기술을 제공합니다. Java, Go, Python 및 .NET을 포함한 다양한 언어를 지원하며 추적 및 로그에 대한 통합 API를 제공합니다. l Jaeger: 분산 서비스 환경에서는 한번의 요청으로 서로 다른 마이크로서비스가 실행될 수 있습니다. Jaeger는 서비스 간 트랜잭션을 추적하는 기능을 가지고 있는 오픈 소스 소프트웨어입니다. 이 기능을 통해 애플리케이션 속도를 저해하는 병목지점을 찾을 수 있으며 동작에 문제가 있는 애플리케이션에서 문제의 시작점을 찾는데 유용합니다. l Grafana: 시계열 메트릭 데이터를 시각화 하는데 필요한 도구를 제공하는 툴킷입니다. 다양한 DB를 연결하여 데이터를 가져와 시각화 할 수 있으며, 그래프를 그릴 수도 있습니다. 시각화한 그래프에서 특정 수치 이상일 때 알람 기능을 제공하며 다양한 플러그인으로 기능확장이 가능합니다. ------------------------------------------------- 오픈 기술을 이용해 Do It Yourself 방식으로 옵저버빌리티를 구현한다면 어떨까요? 직접 옵저버빌리티를 구현하기 위해서는 먼저 필요한 데이터를 수집해야 합니다. 필요한 데이터가 무엇인지, 어떤 방식으로 수집할지 결정하고 Prometheus, OpenTelemetry 같은 도구들을 이용해 설치 및 설정합니다. 이 단계는 시간이 가장 오래 걸리고, 나중에 잘못된 구성이나 누락이 발견되기도 합니다. 다음 단계는 데이터 저장입니다. 이 단계에서 주의할 점은 예전처럼 여러 소스에서 수집한 데이터를 단순하게 저장하는 것이 아니라, 전체적인 관점에서 어떤 이벤트가 일어나는지를 추적이 가능하도록 데이터 간의 연결과 선후 관계를 설정하는 것입니다. 어려운 점은 새로운 클라우드 기술을 도입하거나 기존의 인프라나 애플리케이션에서 변경이 발생할 때마다 데이터를 계속해서 정리를 해야 하는데, 이를 위해 플랫폼을 지속적으로 수정하고 구성을 추가해야 한다는 것입니다. 마지막으로 부정확한 경고들은 제거해야 합니다. 비즈니스 상황과 데이터는 계속해서 변화하기 때문에 이에 맞게 베이스 라인을 지속적으로 확인하고, 임계치를 조정해서 불필요한 알람이나 노이즈 데이터가 생기는 것을 방지해야 합니다. 결론적으로 직접 옵저버빌리티를 구현하는 것은 처음에는 쉬워 보여도 고급 인력과 많은 시간을 확보해야 하며, 별개로 시간이 지남에 따라서 효율성과 확장성이 떨어진다는 점을 감안하면 대부분의 기업은 감당하기 어렵다고 할 수 있습니다. 그렇다면, Zenius(제니우스) EMS는 옵저버빌리티를 어떻게 확보하고 있을까요? 옵저버빌리티 향상을 위한 가장 기본적인 기능은 토폴로지맵 또는 대시보드입니다. 다양한 인프라의 물리적 논리적 연결구조들을 한 눈에 시각적으로 파악할 수 있도록 해야 합니다. Zenius는 각 인프라별 상황을 한 눈에 볼 수 있는 오버뷰와 시스템 전체를 조망할 수 있는 토폴로지맵, 그리고 서비스 별 상황들을 감시할 수 있는 대시보드 등 크게 세가지의 뷰어(Viewer)를 제공합니다. 인프라의 구성 상황에 따라 다층적으로 구성되어 고객들이 인프라에서 일어나는 상황을 즉각 알 수 있도록 해 줍니다. 이러한 뷰어들은 기존 ‘모니터링’의 개념에서 ‘옵저버빌리티’ 개념으로 진화화면서 좀 더 다층적, 다양화되는 형태로 진화하고 있습니다. 또한, Zenius는 기존의 각 인프라별로 단순히 감시를 설정하는 방식이 아닌 다양한 인프라로부터의 로그와 메트릭 정보를 이용해 어떤 상관관계가 있는지 분석하는 ‘복합감시’라는 서비스가 기본적으로 탑재돼 있습니다. 복합감시를 대표 기능에는 ERMS(Event Relation Management System), 스냅샷 그리고 조치 자동화 등을 들 수 있습니다. l ERMS 기능은 로깅, 메트릭 정보와 장비의 상태를 이용해 새로운 감시 기준을 만들어, 의미있는 이벤트를 생성해 사용자에게 개별 장비 수준이 아닌 서비스 관점에서 정확한 상황 정 보를 제공합니다. l 스냅샷은 서비스 동작에서 이벤트가 발생했을 때, 당시 상황을 Rawdata 기반으로 그대로 재현하는 기능으로 SMS, DBMS, APM, NMS 등 모든 인프라를 동시에 볼 수 있습니다. l 조치 자동화는 ERMS를 자동운영시스템과 연동해, 특정 상황에서 자동으로 스크립트를 실행해 제어하는 기능입니다. 트레이싱 기능은 APM에서 제공하는 기능으로, WAS(Web Application Server)에 인입되고 처리되는 모든 트랜잭션들을 실시간으로 모니터링하고 지연되고 있는 상황을 토폴로지 뷰를 통해 가시적으로 분석할 수 있습니다. 사용자는 토폴로지 뷰를 통해 수행 중인 액티브 트랜잭션의 상세정보와 WAS와 연결된 DB, 네트워크 등 여러 노드들 간의 응답속도 및 시간들을 직관적으로 파악할 수 있습니다. 제니우스의 또 다른 옵저버빌리티는 인공지능 기반의 미래 예측 기능으로 미래 상황을 시각적으로 보여줍니다. 인프라 종류에 상관없이 인공신경망 등 다양한 알고리즘을 통해 미래 데이터를 생성하고, 장애발생 가능성을 빠르게 파악해 서비스 다운타임이 없도록 도와줍니다. 또한 이상 탐지 기능은 보안 침해 또는 기타 비정상적인 활동을 나타낼 수 있는 시스템 로그, 메트릭 및 네트워크 트래픽의 비정상적인 패턴을 식별할 수 있습니다. 이상탐지 알고리즘은 시간이 지남에 따라 시스템 동작의 변화에 적응하고 새로운 유형의 위협을 식별하는 방법을 학습할 수 있습니다. 이상과 같이 Zenius(제니우스) EMS는 최고의 옵저버빌리티를 제공하기 위해서 연구개발에 매진하고 있습니다. 옵저버빌리티 향상을 위한 다양한 기능/제품들은 고객의 시스템과 조직 상황에 맞게 선별적으로 사용될 수 있습니다.
2023.04.19
기술이야기
옵저버빌리티 확보를 위한 대표 정보 소스 3가지
기술이야기
옵저버빌리티 확보를 위한 대표 정보 소스 3가지
지난 블로그에서는 옵저버빌리티가 기존 모니터링과 어떻게 다른지 비교해봤습니다. 간략히 되짚어보면, 옵저버빌리티란 IT 환경이 다양해지고 기업의 서비스가 점점 복잡해짐에 따라 빠르게 문제를 찾아 해결하기 위해 서비스의 내부 상태와 동작을 이해하는 능력입니다. 옵저버빌리티는 IT 인프라별로 어떤 것이 문제라는 기준을 중심으로 모니터링하는 기존 방식에서 벗어나 모든 데이터를 실시간으로 수집하고 분석하여 IT시스템의 근본 원인에 접근하고, IT 운영 전문가의 노하우를 바탕으로 각 메트릭별 상관관계를 분석해 미래의 장애를 예측하는 인사이트를 강조합니다. 이번 블로그에서는 옵저버빌리티 확보에 가장 기본이자 중요한 정보 소스인 로깅, 메트릭, 트레이싱을 중심으로 알아보겠습니다. 이 세가지 소스는 시스템의 정확한 모니터링을 보장하고, 문제가 발생할 때 무엇이 잘못됐는지 근본원인을 추적하고, 전체 기능을 개선하는 데 도움이 되는 방법들입니다. 물론 이 세가지 방법만으로 옵저버빌리티가 확보됐다고 할 수는 없습니다. 옵저버빌리티 확보를 위해서는 로깅, 메트릭, 트레이싱을 통합해 이벤트의 상관관계를 분석하고, 데이터 시각화로 사용자에게 인사이트를 제공하는 능력이 추가돼야 합니다. l Logging : 시스템 내에서 발생하는 이벤트를 인지하고 향후 분석을 위해 저장하는 프로세스 l Metric : 응답 시간 또는 오류율과 같은 시스템 성능을 설명하는 숫자 값 l Tracing: 개발자가 병목 현상과 성능 문제를 식별할 수 있도록 서비스 호출 경로와 시간을 추적하는 프로세스 Logging 로깅은 로그를 남기는 것으로 로그를 수집하고, 저장하는 프로세스입니다. 로깅은 시스템 동작을 이해하고 문제를 진단하는 데 필요한 것으로, 향후 분석을 위해 저장하는 데이터인 만큼 올바른 세부 기준에 따라 의미가 있는 로그를 추출하는 것이 필요합니다. 그리고 예를 들어 웹 애플리케이션에 문제가 발생한 경우 로그를 남기는데, 메트릭을 통해서는 이 문제를 발견할 수 없으므로 그래서 로그는 중요합니다. 로그의 수집은 간단한 텍스트 파일에서 ELK(Elasticsearch, Logstash, Kibana)처럼 정교한 프레임워크에 이르기까지 다양한 형태를 취할 수 있습니다. 그래서 로그는 정형화하기 어렵고 그 양이 방대함으로 로그를 수집, 저장하고 분석할 때 다음과 같은 사항을 유의해야 합니다. l 과도한 로깅은 스토리지 비용을 증가시키고 로그의 검색 효율을 떨어뜨릴 수 있습니다. 따라서 어떤 데이터를 기록하고, 어떤 데이터를 기록하지 않을지 필터링하는 것이 중요합니다. l 장기간 보관할 필요가 없는 로그 효율적인 로깅 시스템을 위한 로그 보관 정책이 필요합니다. l 로그에는 인사이트를 제공할 수 있는 모든 컨텍스트 정보가 포함돼야 합니다. l 로깅은 다른 프로세스에 영향을 미치지 않도록 비동기 방식이어야 합니다. l 민감한 데이터가 로그에 남겨지지 않도록 마스킹을 해야 합니다. 그럼 로그 분석을 통해 알 수 있는 정보는 무엇이 있을까요? l 시스템의 상태: 로그에는 어떤 액션을 수행했는지, 어떤 데이터가 처리됐는지, 또 어떤 오류가 발생했는지 등의 정보가 담겨 있으므로 이러한 정보를 분석해 시스템의 상태를 파악할 수 있습니다. l 이슈 파악: 로그에는 어떤 오류가 발생했고, 어떤 요청이 실패했는지, 어떤 리소스가 부족한지 등의 정보가 담겨 있으므로 이러한 정보를 분석해 이슈를 파악하고, 빠르게 대응할 수 있습니다. l 보안성 강화: 로그에는 로그인 시도, 권한 부여, 보안 이벤트 발생 등의 정보가 담겨 있으므로 이러한 정보를 분석해 보안 이슈를 파악하고, 보안성을 강화할 수 있습니다. Metric 로그가 텍스트라면 메트릭은 단순한 수치입니다. 메트릭은 시스템의 상태를 측정하고, 모니터링하는데 사용되는 숫자 측정값입니다. 조금 더 자세히 설명하면, 메트릭은 측정 항목을 정의하고 해당 항목을 수치로 측정해, 그 결과를 보고하고 시스템이 정상적으로 동작하는지 확인하거나 장애를 빠르게 감지하기 위한 소스입니다. 메트릭의 측정 대상은 CPU 사용률, 메모리 사용률, 네트워크 트래픽 등 인프라의 성능이나 초당 수신하는 요청수, 응답에 걸린 시간, 사용자에게 오류를 다시 보낸 응답 수 등 애플리케이션의 상태와 관련돼 있습니다. 메트릭을 통한 수집 가능한 범위는 모니터링 도구 사용 여부에 따라 달라집니다. 일반적인 방식은 에이전트를 이용해 모니터링 대상으로부터 데이터를 수집하는 것으로, 수집할 메트릭을 정의하기가 유연하고 성능이나 안정성 등의 이슈에 대한 정보도 수집할 수 있는 장점이 있습니다. 에이전트를 사용하지 않고 운영 체제나 애플리케이션에서 제공하는 메트릭 수집 API를 사용하는 방식도 있는데, 수집하는 메트릭이 비교적 제한적입니다. 단순히 메트릭을 수집하는 것만으로 시스템을 모니터링하기에 충분하지 않습니다. 메트릭 데이터를 잘 활용하기 위해서는 분석 방법이 중요한데, 분석을 위해서는 몇가지 단계를 거쳐야 합니다. l 먼저, 데이터를 시각화하여 쉽게 이해할 수 있는 형태로 변환해야 합니다. 차트나 그래프, 대시보드 등을 통해 데이터의 패턴과 추세를 파악할 수 있으며, 시스템의 상태를 실시간으로 모니터링할 수 있습니다. l 다음으로, 데이터를 분석하여 시스템의 문제를 식별합니다. 예를 들어, 응답 시간이 지연되는 경우, 이를 발생시키는 주요 요인을 파악하여 시스템을 개선해야 합니다. 이를 위해 데이터를 세분화하여 요소를 파악하고, 문제를 식별하는 데 도움이 되는 경향성을 찾아야 합니다. l 마지막으로 이전 데이터와 비교하고 평가에 활용합니다. Metric 데이터를 분석할 때는 이전 데이터와 비교하여 시스템의 개선 정도를 파악하는 것이 중요하고, 이를 통해 시스템의 성능 개선 여부를 판단하고, 추가적인 개선 방안을 모색할 수 있습니다. Tracing 트레이싱은 분산 시스템에서의 서비스 호출 경로와 시간을 추적하는 기술입니다. 즉, 서비스 간의 호출 관계와 시간 정보를 추적해 각 서비스의 응답 시간을 파악하고, 이를 시각화해 병목 현상을 파악할 수 있습니다. 트레이싱은 크게 세 가지 구성 요소로 이뤄져 있습니다. l Trace: Trace는 서비스 간의 호출 경로와 시간 정보를 담고 있는 데이터 레코드입니다. Trace는 Span과 Trace ID, Parent Span ID 등의 정보를 가지며, 각 Span은 서비스 내부에서의 호출 관계와 시간 정보를 담고 있습니다. l Span: 분산 추적에서 가장 기본이 되는 논리 단위로 여러 개의 span 이 모여 trace를 완성한다는 개념입니다. 각각의 Span은 작업이름, 시작 시간과 종료 시간, key value 형태의 tags 와 Logs, span contexts를 가지고 있습니다. Span contexts는 분산추적을 하기위해 Trace 구간에서 종속된 Span을 구별할 수 있는 Span id와 Trace id를 말합니다. l Collector: Collector는 Trace 정보를 수집하고 저장하는 역할로, Trace 정보를 수집하기 위한 에이전트와 수집된 Trace 정보를 저장하고 분석하기 위한 Backend로 이뤄져 있습니다. (출처: [MSA] OpenTracing, 분산추적(Distributed Tracing) 과 Span context, KSR의 저장소) 이렇게 옵저버빌리티를 구현하기 위한 로깅, 매트릭, 트레이싱 등 세 가지의 중요한 정보 소스들을 다루기 위해서는 여러가지 기술들이 조합되어야 합니다. 다음 블로그에서는 그와 같은 정보 소스들을 다루어 옵저버빌리티를 구현하기 위해서 널리 사용되는 대표적인 오픈 소스들을 알아보고 Zenius-EMS에서는 옵저버빌리티 향상을 위해서 어떤 기능들을 제공하고 있는지 살펴보겠습니다.
2023.04.19
기술이야기
클라우드 송환(Cloud Repatriation): 클라우드에서 다시 온프레미스로
기술이야기
클라우드 송환(Cloud Repatriation): 클라우드에서 다시 온프레미스로
다시 온프레미스로 복귀하려는 움직임 2022년 발표된 IDC 조사 결과에 의하면, 미국 기업의 71%가 향후 2년내에 ‘클라우드 송환’ 계획이 있다고 합니다. 실제 일부 애플리케이션을 클라우드에서 빼내 자체 데이터센터로 다시 가지고 오는 기업이 늘고 있습니다. 우리나라의 경우 ‘클라우드 전환’이 업계의 화두가 되고 있지만, 클라우드 전환을 10년 넘게 경험하고 있는 미국의 경우에는 이제 ‘클라우드 송환’이 또 다른 화두가 되고 있습니다. 클라우드 송환(Cloud repatriation)은 기업이 클라우드 환경에서 운영하던 애플리케이션, 데이터, 서비스 등을 온프레미스 환경으로 되돌리는 것을 말합니다. 이는 퍼블릭 클라우드가 비즈니스 민첩성을 향상시킬 수 있지만, 특정한 상황에서 온프레미스보다 퍼블릭 클라우드의 지출 비용이 더 크다는 사실을 기업이 깨달으면서 해당 애플리케이션 등을 온프레미스로 복귀시키려는 IT 전략입니다. 클라우드 송환 현상은 IT 비용과 성능을 비롯한 여러 측면에서 클라우드가 항상 최선의 해결책은 아니라는 인식을 바탕으로 확대되는 추세이며 이제 기업이 비용, 성능, 보안의 극대화를 위해 기존 환경과 새로운 환경 사이에서 자연스러운 워크로드 분산을 시작했다는 의미이기도 합니다. 미처 몰랐던 클라우드 서비스의 문제점 클라우드를 채택한 기업이 클라우드 송환을 선택하는 이유는 다음과 같은 문제가 있기 때문입니다. 첫째, 클라우드 비용 문제입니다. 2022년 클라우드 현황(Flexera 2022 State of the Cloud Report) 보고서에 따르면, 클라우드 비용의 30% 정도가 낭비되고 있습니다. 클라우드 서비스가 표면적으로 내세우는 클라우드의 가장 큰 장점이 비용 절감임에도 불구하고, 클라우드 전환 OPEX(operational expenses)가 기존 CAPEX(capital expenses) 대비 더 낫다고 단정하기 어렵습니다. 초기에는 클라우드의 비용이 저렴하게 느껴지지만, 가상머신(VM)과 컨테이너 인스턴스에서 처리하는 작업이 늘어날수록 비용도 더해지기 때문입니다. 워크로드가 증가하는 스타트업은 클라우드를 통해 유연성을 확보하는 것이 비용면에서 유리하겠지만, 예측 가능한 수준의 워크플로우를 갖고 있는 기업이라면 얘기가 달라집니다. 특히, 클라우드에서는 인터넷 대역폭 및 스토리지 요금 등 추가적인 비용이 발생할 수 있습니다. 둘째, 보안 문제입니다. 기업은 클라우드 제공자가 제공하는 기본적인 보안 기능 외에도 보안 문제에 대한 책임을 직접 지게 됩니다. 또, 기업은 자체 보안 정책을 준수해야 하며, 이를 클라우드 환경에 적용하는 것이 쉽지 않습니다. 특히 복잡한 멀티클라우드 환경에서는 견고하게 클라우드 보안 아키텍처를 구축하기 어렵고 외주 처리에 따라 많은 비용이 듭니다. 셋째, 성능 문제입니다. 클라우드에서는 다른 기업과 리소스를 공유하기 때문에 성능 문제가 발생할 수 있습니다. 또, 클라우드 환경에서 애플리케이션 및 데이터를 조작하는 데 필요한 대역폭이 충분하지 않을 경우 성능 문제가 발생할 수 있습니다. 따라서 기업은 성능 문제로 인해 클라우드 송환을 선택할 수 있습니다. 넷째, 제어 문제입니다. 클라우드에서는 기본적으로 클라우드 제공자가 인프라 관리와 보안을 담당합니다. 이는 기업이 클라우드 환경에서는 많은 경우 애플리케이션, 데이터, 서비스 등을 직접 제어할 수 없다는 것을 의미합니다. 따라서, 기업이 직접 컨트롤하지 못해서 문제가 발생한다고 느낄 때에는 클라우드 송환을 선택할 수 있습니다. 클라우드 송환의 이점 클라우드 송환(Cloud repatriation)은 기업에게 여러 가지 이점을 제공합니다. 첫째, 기업은 애플리케이션, 데이터, 서비스 등을 직접 관리할 수 있습니다. 이는 기업이 보안 및 규정 준수와 같은 중요한 문제를 직접 다룰 수 있도록 해주며, 제어력을 높임으로써 IT 부서가 잠재적 문제에 대비해 인사이트와 더 나은 계획을 수립할 수 있게 해줍니다. 클라우드에서는 기본적으로 클라우드 제공 업체가 인프라 관리와 보안을 담당하기 때문에, 이를 직접 제어할 수 없습니다. 클라우드 송환에 적합한 케이스는 정적인 기능을 제공하며 사용량이 많은 애플리케이션입니다. 비용이 고정되고 예측 가능한 애플리케이션은 온프레미스 환경에서 관리하는 편이 더 효과적입니다. 둘째, 기업은 클라우드 비용을 절감할 수 있습니다. 한때 퍼블릭 클라우드가 모든 문제의 해답이라고 생각했다가 퍼블릭 클라우드의 비용 특성과 이점이 기업의 상황과는 맞지 않는다는 사실을 깨닫게 됩니다. 2~3년에 걸쳐 추가되는 비용을 감안하면 퍼블릭 클라우드를 계속 사용할 만한 매력은 시간이 갈수록 희석됩니다. 기업은 반복적으로 발생하는 클라우드 운영 비용을 줄이거나 없애는 방법으로 많은 비용을 절감할 수 있습니다. 예를 들어, 어떤 기업의 데이터가 여러 사이트에서 발생하고 그 양이 많다면 클라우드 환경에서 데이터를 보관하고 이동시키는 데 많은 비용이 발생할 수 있습니다. 또 다른 예로 영상을 불러오고 저장하는 작업이 빈번한 영상 제작 기업의 경우, 클라우드 서버에서 병목현상이 발생할 수 있고 내부 LAN처럼 10Gbps 속도로 데이터를 옮기려면 그 비용이 저렴하지 않을 수 있습니다. 비용 외에도 데이터 이동에 많은 시간이 소모되며 이로 인해 데이터를 필터링해 최소한의 데이터만 저장해야 하는 불편함이 있습니다. 한편, 메모리와 디스크 리소스 비용이 계속 하락하면서 기업의 온프레미스 투자가 유리해지고 있습니다. 더불어 클래스 메모리 및 SDN(소프트웨어 정의 네트워크)과 같은 비용에 도움을 주는 솔루션을 활용하면, 한때 퍼블릭 클라우드의 큰 매력이었던 유연성, 확장성, 중복성의 간극이 상당부분 사라집니다. 셋째, 기업은 데이터 보호와 백업을 더욱 쉽게 할 수 있습니다. 클라우드 업체도 데이터 프라이버시에 대해 엄격하지만 온프레미스 환경에서 데이터를 저장하고 백업 받고 복구하는 것보다 더 안전할 수 없습니다. 물론 민감한 정보를 로컬 환경에 저장하는 것 역시 문제 제기가 있겠지만 최소한 고객 데이터가 사라졌을 때 무엇을 어떻게 해야 하는지 알 수 있습니다. 규정 준수 측면에서도 각 국마다 개인정보보호 규정이 달라 우발적인 규정 위반 가능성이 있습니다. 이러한 우려를 줄이는 방법은 애플리케이션을 특정 위치의 온프레미스 환경에서 실행하는 것입니다. 넷째, 대역폭 문제에서 자유로운 장점이 있습니다. 클라우드 환경에서 빅데이터 시스템을 활용하는 기업은 빅데이터 시스템에서 생성되는 데이터가 높은 대역폭을 요구하면서 자사 데이터 센터보다 훨씬 더 많은 운용 비용을 지불합니다. 컴퓨팅은 온디맨드이므로 탄력적인 클라우드가 유리할 수 있지만 스토리지는 매일 매초 비용이 계속 증가하고 있는 사실을 알아야 합니다. 클라우드냐 온프레미스냐 고려할 점 클라우드 송환은 비용면에서 매력적이지만 매우 도전적인 과제입니다. 클라우드 서비스 공급자는 일반적으로 클라우드에서 빠져나오기 상당히 어렵게 계약하고, 해체됐거나 아예 존재하지 않던 온프레미스 환경을 준비하기 위해 기업의 재무와 조직 운영에 큰 영향을 미치기 때문입니다. 게다가 애플리케이션을 온프레미스 데이터센터로 마이그레이션하는 경우 기업은 클라우드의 확장성, 유연성, 가용성, 탄력성을 유지하기 힘들고 자체 데이터센터가 클라우드에 비해 더 안전하다는 보장을 하기도 어렵습니다. 따라서 이런 경우에는 애플리케이션에서 실행 중인 환경에 대한 종속성이 있는 부분과 단순히 데이터를 관리하는 부분을 분리하면 혼란을 최소화할 수 있습니다. 처음부터 클라우드 환경을 고려해 서비스를 설계했다면, 워크로드를 다시 데이터센터로 되돌리기 위해서는 어느 정도의 재설계가 필요하며 빅데이터에 의존하는 기업은 상당한 마이그레이션 작업을 각오해야 합니다. 이처럼 클라우드 송환은 매우 어려운 과제입니다. 따라서 처음부터 워크로드를 퍼블릭 클라우드로 이전하는데 매우 신중한 입장을 취하는 것이 가장 중요합니다. 그래서 최근에는 기업들이 클라우드 환경을 고수하는 것보다는 필요한 경우 클라우드와 온프레미스 환경을 융합하는 하이브리드 클라우드 전략을 선택하는 경향이 있습니다. 모든 서비스를 클라우드로 전환하는 것이 아니라, 단기간에 트래픽이나 사용자가 급속히 늘어날 가능성이 있거나, 클라우드 서비스를 활용해 서비스를 빠르게 런칭해야 하는 경우로 한정하는 것이 필요합니다. 우리나라에서도 많은 기업들이 이미 클라우드가 갖고 있는 단점들을 경험하고 온프레미스로 전환하고 있습니다만, ‘클라우드 전환’이라는 큰 물결 아래 ‘클라우드 송환(Cloud Repatriation)’에 대한 논의는 제한적입니다. 우리나라의 클라우드 전환율이 세계시장과 비교해 볼 때 현저히 낮지만, 오히려 클라우드 환경의 문제를 이미 경험한 나라들의 교훈을 미리 받아들인다면 학습비용을 줄일 수 있을 것으로 기대합니다. Zenius-EMS는 고객들이 레거시 시스템에서부터 클라우드 네이티브 시스템에 이르기까지 다양한 관점의 서버모니터링을 할 수 있도록 지원합니다. 대규모 인프라가 존재하는 데이터센터 및 클라우드 환경에서 대용량 데이터 처리에 대한 높은 성능을 확인할 수 있습니다. 고유의 특허 기술을 통해 수천대의 장비에서 발생되는 데이터들을 안정적으로 수집하고 빠르게 처리할 수 있습니다. [출처] John Edwards, "클라우드의 온프레미스 송환이 타당한 5가지 경우", IT WORLD, 2019.04.16 Steven J. Vaughan-Nichols, "모두가 '클라우드' 외칠 때 '로컬 서버' 선택해야 하는 이유, IT WORLD, 2022.07.27 Andy Patrizio, "기업 71%, 2년 이내 클라우드에서 온프레미스로 복귀할 것", IT WORLD, 2022.06.29 Clint Boulton, "'전진 위한 후퇴'··· 클라우드서 온프레미스로 송환하는 기업들", CIO Korea, 2020.03.30 Brian Adler, "Cloud Computing Trends: Flexera 2022 State of the Cloud Report", flexera, 2022.03.21
2023.04.07
1
2
3