가상화 (Virtualization)
소프트웨어 마에스트로 14기 팀 프로젝트에서 나는 백엔드 파트를 담당하여 Spring Boot를 통한 WAS 개발을 하게 되었다. Docker를 우리 프로젝트에 도입하게 된다면 우리 프로젝트에 어떠한 이점이 있는 지 학습 차 게시글을 작성하게 되었다.
가상화 (Virtualization)
가상화
란 컴퓨터의 물리적인 자원을 추상화하고, 이를 분할하여 여러 가상 환경으로 구성하는 기술이다. 가상화
를 통해 하나의 물리적 시스템에서 여러 개의 가상 시스템을 동시에 실행할 수 있게 된다.
가상화의 유형
가상화의 유형에는 데스크탑 가상화
, 네트워크 가상화
, 스토리지 가상화
, 데이터 가상화
, 애플리케이션 가상화
, 데이터 센터 가상화
, CPU 가상화
, GPU 가상화
, Linux 가상화
, 클라우드 가상화
등이 있지만
서버 가상화
하나의 물리적 서버를 여러 개의 가상 서버로 분할하는 것이다. 각 가상 서버는 독립적인 운영체제와 애플리케이션을 실행할 수 있다. 이를 통해 서버의 자원 사용률을 개선하고, 시스템 관리를 간편화할 수 있다.
ex) VMware의 vSphere, Microsoft의 Hyper-V, 오픈 소스인 KVM(Kernel-based Virtual Machine) 등
네트워크 가상화
물리적 네트워크 자원을 여러 개의 독립적인 가상 네트워크로 분할하는 것이다. 이를 통해 네트워크 구성의 유연성을 증가시키고, 네트워크 관리를 간편화할 수 있다
ex) 가상 사설 네트워크(Virtual Private Network, VPN), 소프트웨어 정의 네트워킹(Softwrare Defined Networking, SDN) 등
- VPN: 물리적으로 떨어진 네트워크를 인터넷 상에서 가상의 터널을 만들어 연결하는 기술
- SDN: 네트워크의 통제를 소프트웨어화하여 중앙에서 관리하게 하는 기술
스토리지 가상화
물리적인 저장 공간을 분할하고 추상화하여 하나 또는 여러 개의 가상 디스크로 제공하는 것이다. 이를 통해 애플리케이션을 원래의 환경과 독립적으로 실행하거나, 여러 버전의 애플리케이션을 동시에 실행할 수 있다.
ex) SAN(Storage Area Network)
- SAN: 여러 스토리지 장치를 네트워크로 연결하여 하나의 스토리지처럼 사용할 수 있게 해줌
애플리케이션 가상화
애플리케이션을 실행하는 데 필요한 운영체제와 하드웨어 환경을 추상화하는 것이다. 이를 통해 애플리케이션을 원래의 환경과 독립적으로 실행하거나, 여러 버전의 애플리케이션을 동시에 실행할 수 있고, 서로 다른 환경에서도 동일하게 실행될 수 있도록 해준다.
ex) Docker 등의 컨테이너 기술
- Docker: 애플리케이션과 그 의존성들을 컨테이너라는 패키지에 넣어 운영체제 위에서 독립적으로 실행되도록 해줌
클라우드 가상화
클라우딩 컴퓨팅 모델은 가상화를 기반으로 한다. 서버
, 스토리지
및 기타 물리적 데이터 센서 리소스를 가상화함으로써, 클라우드 컴퓨팅 제공자는 고객들에게 다양한 서비스를 제공할 수 있는데, 대표적인 서비스들은 아래와 같다.
- IaaS(Infrastructure as a Service): 해당 요구사항에 맞게 구성이 가능한 가상화된 서버, 스토리지 및 네트워크 리소스
- PaaS(Platform as a Service): 클라우드 기반 애플리케이션과 솔루션의 구축에 사용할 수 있는 가상화된 개발 툴, 데이터베이스 및 기타 클라우드 기반 서비스
- SaaS(Software as a service): 클라우드에서 사용하는 소프트웨어 애플리케이션, 하드웨어에서 가장 많이 추상화된 클라우드 기반 서비스
가상화를 했을 때 얻을 수 있는 이점
자원 효율성 증대
가상화를 통해 하나의 물리적인 하드웨어를 여러 가상 환경으로 분할하여 자원을 효율적으로 활용할 수 있다. 이를 통해 서버 비용과 에너지 사용을 절감할 수 있다.
유연성 및 확장성 증가
가상화 환경은 빠르게 배포하고, 변경하며, 조정할 수 있다. 이로 인해 인프라의 확장성과 유연성이 향상되며, 비즈니스 요구 사항에 더 빠르게 대응할 수 있다.
운영체제와 애플리케이션의 분리
애플리케이션 가상화를 통해 운영체제에서 애플리케이션을 분리할 수 있다. 이를 통해 애플리케이션을 서로 다른 환경에서도 동일하게 실행할 수 있으며, 운영체제에 구애받지 않는 이식성을 제공한다.
복원 및 재해 복구 용이
가상화 환경은 스냅샷과 복제를 통해 빠르게 백업하고 복원하기 용이하다. 이는 시스템 장애 발생 시 빠른 복구를 가능하게 하며, 재해 복구 전략을 강화한다.
테스트 환경의 효율화
가상화는 안전한 테스트 환경을 제공하며, 실제 환경을 변경하지 않고 다양한 시나리오를 시험해볼 수 있다. 이는 새로운 애플리케이션의 배포나 업데이트를 안전하게 관리하는 데 도움이 된다.
관리 용이성 향상
가상화는 물리적 자원을 한 곳에서 중앙 집중식으로 관리할 수 있도록 해줌으로써, IT 관리의 복잡성을 줄이고 운영 효율성을 높일 수 있다.