|
가상화란?
서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성하는 데 사용할 수 있는 기술이며, 가상 소프트웨어는 물리적 하드웨어 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행한다. 대량의 시스템을 필요로 하는 기업이나 단체는 가상화를 통해 하드웨어 자원을 효율적으로 사용하여 투자 대비 이익을 더 많이 얻을 수 있다. 또한 클라우드 컴퓨팅 서비스를 지원하여 조직의 인프라를 더욱 효율적으로 관리할 수 있다.
조금 더 살펴보자. 가상화(Virtualization)는 하나의 물리적 컴퓨터(호스트 머신)에서 여러 개의 가상 컴퓨터(가상 머신, VM)를 실행할 수 있게 하는 기술이며 이를 통해 여러 운영 체제(OS)를 동시에 실행하거나, 물리적 하드웨어 자원을 효율적으로 사용할 수 있다.
가상화 기술의 주요 이점은 다음과 같다.
- 자원 효율성: 물리적 하드웨어를 최대한 활용하여 여러 운영 체제를 동시에 실행할 수 있다.
- 유연성: 다른 운영 체제나 환경을 테스트하거나 개발할 때 유용하다.
- 격리성: 각 가상 머신은 독립된 시스템으로 실행되기 때문에 하나의 시스템에서 발생한 문제는 다른 시스템에 영향을 미치지 않는다.
- 비용 절감: 서버를 가상화하여 물리적 서버의 수를 줄일 수 있어 하드웨어 및 유지 관리 비용을 절감할 수 있다.
가상화의 유형 : 가상화 기술은 크게 전가상화(Full Virtualization)와 반가상화(Paravirtualization)로 나눌 수 있다.
1) 전가상화 (Full Virtualization) :
개념: 전가상화는 물리적 하드웨어를 완전히 가상화하여 가상 머신이 마치 실제 하드웨어에서 실행되는 것처럼 보이게 한다. 이 방식에서는 가상 머신이 호스트 시스템의 하드웨어와 동일한 기능을 갖추고 있어, 기존의 운영 체제를 수정하지 않고도 실행할 수 있다.
예시: VMware, VirtualBox, Microsoft Hyper-V 등.
장점: 기존 운영 체제(OS)를 수정할 필요 없이 그대로 사용할 수 있다.
단점: 전가상화에서는 호스트 하드웨어의 모든 기능을 에뮬레이션해야 하므로, 성능이 다소 저하될 수 있다.
2) 반가상화 (Paravirtualization) :
개념: 반가상화는 운영 체제를 가상화 환경에 맞게 수정하여 가상화된 하드웨어와 직접 상호작용할 수 있도록 하는 방식으로 성능을 향상시키지만, 운영 체제의 수정이 필요하다.
예시: Xen 하이퍼바이저(반가상화 모드).
장점: 전가상화에 비해 성능이 우수하다.
단점: 운영 체제를 수정해야 하므로, 일부 운영 체제에서는 사용할 수 없다.
윈도우에 가상머신 설치 실습 (VMware + Ubuntu) https://hackingisly.tistory.com/545
리눅스 기본 명령어 https://cafe.daum.net/flowlife/9A8Q/205
실습목표 : - 가상머신을 설치해 아래 그림과 같은 결과 보기.
순서 :
1) 현재 운영체제(윈도우 등)에 가상머신용 프로그램 VMware 설치
2) VMware에 Ubuntu 설치
3) Ubuntu에 Java 설치 https://cafe.daum.net/flowlife/9A8Q/206
4) Ubuntu에 MariaDB 설치 https://cafe.daum.net/flowlife/HqLk/81
5) 4번의 작업결과를 윈도우 환경에서 MariaDB 클라이언트 툴로 연동 확인, Springboot 프로젝트로 연동 확인.
6) 기본 운영체제( 윈도우 )에서 Springboot 프로젝트를 배포파일(jar)로 만들어서 실행.
1. 콘솔로 이동 : 명령 프롬프트(cmd)로 이동 > cd c:\work\spring-sou\testproject 2. 빌드하기 > gradlew build 3. 참고 : 빌드가 되지 않을 때 빌드 폴더를 삭제하고 다시 빌드하는 명령어 > gradlew clean > gradlew clean build 4. jar 파일 생성 확인 > cd build/libs > dir 5. 서버 배포 : 프로젝트명-0.0.1-SNAPSHOT.jar 파일만 복사해서 원하는 서버에 저장 후에 jar 파일을 실행시키면 실행 가능! > java -jar testproject-0.0.1-SNAPSHOT.jar |
7) Filezilla(FTP 소프트웨어)를 설치해 배포파일(jar)을 Ubuntu에 전송. https://cafe.daum.net/flowlife/9A8Q/205
8) $ sudo java -jar 배포파일명.jar <== 주의 : 우분투에서 배포 파일을 실행할 때는 관리자 권한으로 하자.
여기까지 🚀
다음 목표 : 이를 그대로 AWT EC2 인스턴스에서 사용할 수 있다.
이어지는 실습은 클라우드 서비스에서 ...
기본 실습 끝 ~~
🕸 클라우드 서비스의 개념에 대한 이해
일반적으로 클라우드 서비스는 웹을 통해 컴퓨팅 자원, 데이터 저장, 소프트웨어, 플랫폼 및 기타 IT 관련 서비스를 원격으로 제공하는 것을 말한다. 즉, 하드웨어나 소프트웨어적인 측면에서 인프라를 관리할 필요 없이 사용에만 집중할 수 있다. 사용자가 선택하는 공급자(AWS, MS, Naver ...)는 애플리케이션 처리 및 교환, 데이터 저장 및 관리와 같은 비즈니스 운영을 유지하는 광범위한 활동을 지원한다. 이러한 서비스를 사용하면 인증된 사용자가 커뮤니케이션, 협업, 프로젝트 관리 및 데이터 분석, 처리, 공유 및 스토리지 사용을 효과적으로 실행할 수 있다.
클라우드 서비스는 필요한 리소스를 필요한 만큼 요청하고 제공받는 on-demand 방식으로 작동하므로, 사용자가 필요한 시점에 적절한 양의 자원을 빠르게 할당받거나 반환할 수 있다. 이렇게 함으로써 사용자는 자원의 유연성과 확장성을 활용하여 비용을 절감하고, IT 인프라를 효율적으로 관리할 수 있다.
클라우드 서비스를 이용하면 전통적인 온프레미스( On-Premises : 기업이나 조직이 IT 시스템과 데이터를 물리적으로 소유하고, 자체 데이터 센터나 현장에서 직접 운영 및 관리하는 방식) 인프라와 비교해 비용 절감, 빠른 배포, 쉬운 유지 보수 및 글로벌 확장성 등의 이점을 얻을 수 있다. 그러나 보안, 법률 준수 등과 관련된 매우 민감한 문제에 대해 반드시 확인해야 한다.
Cloud Computing이란?
: 인터넷을 통해 가상화 된 컴퓨터의 IT 리소스를 제공하는 것.
: 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아니라 네트워크에 연결된 다른 컴퓨터로 업무를 처리하는 기술을 의미한다.
X As A Service
- Socar, 따릉이 : Mobility As A Service
- Airbnb : Housing As A Service
- Netflex : Video As A Service
- Computing Resource As A Service
Cloud의 특징
- 컴퓨팅 자원을 원할 때, 사용하는 만큼 요금을 지불하고 사용한다.
On Demand : 수도물 사용, 전기 사용 ...
- 클라우드를 도입하면 Computing Resource에 수요에 따른 자원을 탄력적으로 운영 할 수 있다.
- 시스템에 대한 별도의 관리를 할 필요가 없다.
👉 너튜브 게시 동영상 클라우드 컴퓨팅 개념 https://www.youtube.com/watch?v=4b_zMvj_1qM
👨👩👦 클라우드 서비스의 유형 3가지 https://www.youtube.com/watch?v=oY8Tc5OQ-JI
Cloud Computing 분류 기준 중 Service Model에따른 분류 유형
- IaaS : 물리 또는 논리족인 컴퓨터를 제공
- PasS : code만 개발해서 배포하면 서비스 되는 환경을 제공
- SaaS : 돈만 내면 모든 것을 제공
1) IaaS(Infrastructure as a Service, 인프라 기반 서비스)
기본적인 컴퓨팅 인프라를 제공하는 서비스로, 가상화된 기본 인프라 자원(서버, 스토리지, 네트워크 등)을 제공하는 서비스 모델이다. 사용자는 필요한 용량만큼 확장 가능한 리소스를 선택하고 구성할 수 있다. IaaS는 물리적 또는 가상화된 컴퓨팅 리소스를 제공하는 서비스이다. 사용자는 서버, 스토리지, 네트워크 등의 인프라를 필요에 따라 확장하거나 축소할 수 있다.
IaaS의 주요 특징은 다음과 같다.
- 유연성: 사용자는 필요에 따라 자원을 추가하거나 제거할 수 있다.
- 비용 절감: 초기 하드웨어 투자 없이 사용한 만큼만 비용을 지불한다.
- 관리의 편의성: 클라우드 제공자가 하드웨어 유지보수와 관리 작업을 수행한다.
예: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP)
2) PaaS(Platform as a Service, 플랫폼 기반 서비스)
IaaS에서 제공하는 인프라 위에 개발, 배포, 운영을 지원하는 플랫폼을 제공한다. 애플리케이션 개발 및 배포에 필요한 플랫폼(미들웨어, 데이터베이스 관리 시스템, 개발 도구, 운영 체제, 라이브러리 등)을 제공하는 서비스 모델이다. PaaS는 애플리케이션 개발, 실행 및 관리를 위한 플랫폼을 제공한다. 이 서비스는 개발자들이 애플리케이션을 개발하고 배포하는 데 필요한 환경을 제공합니다. PaaS의 주요 특징은 다음과 같다.
- 개발 환경 제공: 코드 작성, 테스트, 배포를 위한 통합 개발 환경(IDE)을 제공한다.
- 자동화: 자동화된 배포, 확장 및 관리 도구를 제공한다.
- 협업 지원: 여러 개발자가 협업할 수 있는 기능을 제공한다.
예: Google App Engine, Microsoft Azure App Service, Heroku(여러 종류의 프로그래밍 언어를 지원하는 클라우드 컴퓨팅 플랫폼)
3) SaaS(Software as a Service, 소프트웨어 기반 서비스)
클라우드에서 호스팅 되는 소프트웨어 애플리케이션을 제공하는 서비스 모델이다. 사용자는 인터넷을 통해 소프트웨어에 접속하고 사용할 수 있으며, 소프트웨어의 설치, 업데이트, 유지 보수 등에 대한 걱정이 없다. SaaS 서비스는 대개 사용량이나 구독 기반의 요금제를 사용한다. SaaS는 인터넷을 통해 애플리케이션 소프트웨어를 제공하는 서비스이다. 사용자는 소프트웨어를 설치하거나 유지보수할 필요 없이 브라우저를 통해 애플리케이션을 사용할 수 있다.
SaaS의 주요 특징은 다음과 같다.
- 접근성: 어디서나 인터넷만 연결되면 사용할 수 있다.
- 업데이트: 소프트웨어 제공자가 업데이트와 보안 패치를 관리한다.
- 비용 효율성: 구독 기반 모델로 초기 비용 없이 사용량에 따라 비용을 지불한다.
예: Google Workspace (구 Google G Suite), Microsoft Office 365, Salesforce(고객 관계 관리 (CRM) 소프트웨어와 애플리케이션을 제공)
😁 클라우드 적용 시기
1) IaaS: 빠른 변화를 원하는 스타트업이나 중소기업에게 유리할 수 있다. 일단 IaaS는 하드웨어나 소프트웨어를 설치하는데 시간과 돈을 낭비 하지 않는다. 빠르게 성장하는 기업의 경우, IaaS는 요구 사항이 변화하고 발전함에 따라 특정 하드웨어 나 소프트웨어에 전념 할 필요가 없으므로 좋은 선택이 될 수 있다. 또한 필요에 따라 확장 또는 축소 할 수 있는 유연성이 있으므로 새로운 응용 프로그램에 어떤 요구가 필요한지 확실하지 않은 경우 도움이 될 수 있다.
----------
2) PaaS: 신속한 개발을 원한다면 PaaS를 이용하는 것이 효과적인 경우가 많이 있다. 동일한 개발 프로젝트를 수행하는 여러 개발자가 있거나 다른 공급 업체도 포함해야 하는 경우 PaaS는 전체 프로세스에 뛰어난 속도와 유연성을 제공 할 수 있다. PaaS는 사용자 정의된 응용 프로그램을 만드는 경우에도 유용하다. 또한 환경에 따라 비용을 크게 절감 할 수 있으며 앱을 신속하게 개발하거나 배포하는 경우 발생하는 몇 가지 문제를 단순화 할 수 있다.
----------
3) SaaS: 비지니스에 집중해야 할 때 보안상 민감한 사항이 아니라면 모든 기업에게 SaaS는 최고의 선택이다. 또한 협업이 필요한 단기 프로젝트라면 SaaS를 도입하는 것이 유리하다. 일반적으로 On-Prems 솔루션은 모바일 액세스를 지원하지 않기 때문에 모바일 액세스가 필요한 경우에도 SaaS를 사용하면 비용과 시간을 절약할 수 있다.
😎알고가기 : 온프레미스(On-premise)란 소프트웨어 등 솔루션을 클라우드 같이 원격 환경이 아닌 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식을 말한다.
😊 클라우드 서비스의 장점
- 초기 투자 비용과 유지 보수 비용이 절감된다.
클라우드 서비스는 사용한 만큼 비용을 지불하는 방식을 채택하여 기업이 초기 투자 비용을 줄일 수 있다. 또한, 유지 보수, 전력, 냉각 등과 관련된 비용을 절약할 수 있다.
- 신속하고 유연한 인프라 구성이다.
클라우드 서비스는 사용자의 요구에 따라 신속하게 리소스를 확장, 축소 가능하다. 이를 통해 자원의 낭비를 최소화하고 요구 사항에 맞게 인프라를 구성할 수 있다.
- 네트워크에 이상이 없다면 장소, 시간 불문하고 편리하게 접근할 수 있다.
인터넷이 연결된 어디에서나 클라우드 서비스에 접근할 수 있도록 구성할 수 있다. 이로 인해 원격 근무, 협업, 글로벌 확장 등에 유리한 환경이 제공된다.
- 정기적으로 자동 업데이트가 가능하다.
클라우드 서비스 제공자가 소프트웨어 및 하드웨어를 정기적으로 업데이트하는 서비스를 사용하면, 일반 사용자는 이러한 작업에 신경을 쓰지 않아도 된다.
- 안전한 데이터 관리가 가능하다.
클라우드 서비스 제공자는 데이터의 안정성과 백업을 위해 여러 데이터 센터에 데이터를 분산 저장하므로 데이터 손실 위험을 최소화 할 수 있다.
👌 클라우드 서비스 도입 시 고려해야 할 사항은?
- 비용이 증가될 수 있다.
클라우드 서비스를 사용하면 데이터를 전송하는 데 추가 비용이 발생하게 된다. 장기간 사용 시 비용이 높아질 수 있다. 특히 대용량 데이터를 자주 전송하는 경우라면 이러한 비용이 매우 부담스러울 수 있다. 따라서 초기 구축 비용 외에도 운영 비용을 종합적으로 고려하고 모니터링하는 것이 필요하다.
- 보안 위협과 법적 문제.
데이터가 외부 서버에 저장되므로 데이터 유출 위험이 있다. 데이터의 민감성, 프라이버시, 해킹 등의 보안 위험에 노출될 수 있다. 또한 클라우드 서비스를 사용하면 국가 간 데이터 보호법, 규제 및 규정에 관한 복잡한 문제가 발생할 수 있다.
- 서비스 제공자에 대한 종속 또는 제한이 발생할 수 있다.
클라우드 서비스 제공자에 의존하는 경우, 제공자의 정책 변경, 가격 인상, 서비스 중단 등의 위험이 발생할 수 있다. 이로 인해 사용자는 클라우드 서비스 제공자에게 과도한 종속성을 갖게 될 수 있으며, 다른 서비스로의 이전이 어려워질 수 있다. 또한 일부 클라우드 서비스는 사용자 정의 기능이 제한적일 수 있다. 이 경우 사용자는 제공된 옵션 내에서만 서비스를 사용해야 하며, 복잡한 요구 사항이나 특수한 기능 구현이 어려울 수 있다.
- 네트워크 또는 인프라의 성능 관련.
클라우드 서비스의 성능은 사용자가 위치한 지역, 인터넷 연결의 품질 및 서비스 제공자의 인프라에 영향을 받을 수 있다. 때로는 클라우드 서비스의 성능이 사용자의 기대에 미치지 못할 수도 있다. 인터넷 연결이 불안정한 경우 서비스 이용에 지장이 발생할 수 있다. 이는 특히 원격 지역에서 더욱 문제가 될 수 있다.
CI/CD 란 : https://velog.io/@leejungho9/CICD-%EB%9E%80
CI/CD는 소프트웨어 개발과 배포를 효율적으로 자동화하는 프로세스를 의미하며, 두 가지 주요 개념인 CI(지속적 통합)와 CD(지속적 배포 또는 지속적 제공)를 포함한다.
- CI (Continuous Integration, 지속적 통합) : 개발자들이 작성한 코드 변경 사항을 자주 중앙 저장소에 통합하고 자동화된 빌드와 테스트를 실행하는 프로세스이다. 이를 통해 코드 품질을 유지하고 버그를 빠르게 발견할 수 있다.
- CD (Continuous Delivery, 지속적 제공) : CI를 통해 통합된 코드가 자동으로 스테이징 환경이나 테스트 환경에 배포될 수 있도록 준비하는 과정이다. 사람이 수동으로 승인하면 프로덕션에 배포할 수 있다.
- CD (Continuous Deployment, 지속적 배포) : 지속적 제공을 한 단계 더 확장한 개념으로, 코드 변경 사항이 자동화된 테스트를 통과하면 자동으로 프로덕션 환경에 배포된다. 별도의 수동 작업이나 승인 과정이 필요 없다.
간단하게 말해
CI: 코드 변경 사항을 자주 통합하고 자동 테스트를 수행하는 과정.
CD: 코드가 프로덕션 환경에 안정적으로 배포되도록 준비하거나 자동 배포하는 과정.
이 과정을 통해 개발팀은 소프트웨어를 더 빠르게, 더 안전하게 배포할 수 있다.
추가적으로 품질 향상, 자동화, 테스트, 버전 관리를 해 준다. 효율성과 신뢰성 증대됨.
가장 많이 쓰이는 CI/CD 도구 5가지
1. 젠킨스 : Jenkins는 중앙 빌드 및 지속적인 통합 프로세스가 가능하며, Windows, macOS 및 기타 Unix 계열 운영 체제용 패키지가 포함된 독립형 Java 기반 프로그램이다. 수백개의 플러그인을 사용할 수 있는 Jenkins는 소프트웨어 개발 프로젝트의 빌드 파이프라인 구성, Build 자동화의 확립, 배포 및 테스트 자동화 등을 지원한다.
홈페이지: https://jenkins.io/
2. 서클CI : CircleCI는 코드 구축, 테스트에서 배포에 이르기까지 사용자의 파이프라인 전반에 걸쳐 신속한 소프트웨어 개발 및 게시를 지원하는 CI/CD 자동화 도구이다. CircleCI를 GitHub, GitHub Enterprise 및 Bitbucket과 통합하여 사용할 수 있다는 장점이 있다. 홈페이지: https://circleci.com/
3. 팀시티 : TeamCity는 JetBrains의 빌드 관리 및 지속적 통합 서버로써 Java 환경에서 실행되며 Visual Studio 및 IDE와 통합될수있는데, Windows 및 Linux 서버에 모두 설치할 수 있으며 .NET 및 개방형 스택 프로젝트도 지원한다.
홈페이지 : https://www.jetbrains.com/teamcity/
4. Bamboo (대나무) : 홈페이지 : https://www.atlassian.com/software/bamboo
5. GitLab 홈페이지 : https://about.gitlab.com/