클라우드 컴퓨팅/인프라 기초

[24.07.01] 인프라 기초 1

우잉~ 2024. 7. 1. 21:49

클라우드 서비스 종류 3가지

 

1. IaaS(Infrastructure as a Service) : 인프라(자원, 서버)를 사용자에게 서비스로 제공한다.

ex. 가상 서버, 가상 컨테이너, EC2, VPC, EBS, EKS 등

2. PaaS(Platform  as a Service): 애플리케이션 개발, 실행, 관리를 위한 클라우드 기반 플랫폼을 제공한다.

ex. Azure, AWS, Google App Engine 등

3. SaaS(Software as a Service): 제공업체 100% 관리하는 애플리케이션을 제공한다.

ex. Dropbox, Google Apps, Salesforce 등

 

인프라 엔지니어의 업무

1. 설계

2. 구축

3. 운영

 

인프라를 구성하는 요소 3가지

1. 퍼실리티(Facility)

- 물리적/비기능적 장치. 시설, 설비라고 생각하면 된다.

예. 렉, 에어컨, 발전기, 변압기, 소화 설비, 환풍기 등

 

2. 서버 및 스토리지

- 서버: 아이디 서비스 제공. 클라이언트와 응답을 주고 받는 역할을 가진다.

- 스토리지: 데이터를 저장해주는 물리 장치, 장비

 

3. 네트워크

- 서버와 스토리지 연결, 인터넷 접속

OSI 7 Layer, TCP/IP 4 Layer

 

* 현업에서는 TCP/IP를 더 많이 사용한다!

 

인프라를 구축을 위해 필요한 것 2가지

1. 물리적 서버 및 스토리지

2. 물리적 네트워크

 

-> 시간과 비용에 많은 투자가 필요하다.

 

하지만 논리적으로 만들 수 있다 -> 가상화

 

컴퓨터의 구성요소

- 서버: 서비스를 제공하는 역할 -> 365일 구동되어야 함. 보안과 성능(cpu, 메모리 등)이 중요하다. 1U, 2U, 4U와 같은 렉에 넣어놓고 사용하는 것이 서버이다.

- 데스크탑: 서비스를 제공하는 프로그램이 설치되어 있는 장치

- 랩탑: 서비스를 제공하는 프로그램이 설치되어 있는 휴대용 장치

 

 

 

인프라의 주요 자원 4가지

CPU, Memory, NIC(네트워크 인터페이스 카드), Disk

 

cpu, memory 내부 동작과정에 대해 잘 알아야 한다.

사용자 요청을 Kernel에 전달 > 라이브러리 전달하여 메모리에 적재 > cpu에 쓰레드 전달 > 프로세스 실행

 

Kernel이 하는 일: 프로세스 실행

 

 

CPU에 Thread 요청 -> 데이터 처리할 수 있게끔

 

메모리 전달을 위해서는 서버가 메모리를 많이 확보하고 있어야 한다.

이러한 사용자 요청에 따라 프로세스를 실행하는 커널을 가지고 있는 것은 OS(Operating System)

 

OS

- Unix: 분산 애플리케이션 시스템을 사용한 운영체제(3tier Architecture). 유료 서비스. 라이센스 구매.

- Linux: 오픈 소스를 통해 무료로 사용할 수 있는 분산 애플리케이션 운영체제. 분산 시스템 발전에 큰 기여를 함.

- Window

 

 

* 3tier Architecture

(출처 : Three-tier architecture overview - AWS Documentation)

 

분산 서비스가 생기면서 네트워크를 각각 레이어에 연결해야 하는데 연결해야 할 것이 너무 많아져서 관리가 힘듦

이에 따른 네트워크 관련 문제가 많이 생겨났고 네트워크 지식이 많이 필요할 것이다.

 

* mainframe computer: 서버, 요청, 프로세스 실행 등 모든 작업을 이것으로 다 한다.

- 단일 시스템이기 때문에 비용이 아주 비싸다.

 

 

* CloudNative Computing Foundation(CNCF)

https://www.cncf.io/

요즘은 오픈 소스를 이용한 인프라 구축도 괜찮은 방법이다.

 

 

* Kubernetes distribution(배포판)

- EKS/GKE/AKS

- vm tanzu

- redhat Openshift

 

* Linux Distribution란?

리눅스 커널 + GNU Project

 

* 리눅스 배포판 종류 

- ubuntu

- Debian

- CentOS

- RHEL

- rocky

 

* L4, L7의 요청 방법

L4> IP:TCP Port

L7> Hostname

L3

L2

 

 

* 서브넷 마스크 이론

172.16.0.1/24 -> 24는 서브넷 마스크 -> 255.255.255.0이란 뜻

이진수로 표현하면 11111111.11111111.11111111.0

서브넷 마스크를 통해 같은 네트워크 영역에 포함되어 있는지 파악할 수 있다.

 

네트워크 영역은 172.16.0.0~172.16.0.255

하지만 사용할 수 있는 네트워크 대역은 1~ 254

 

왜?

네트워크 주소(첫 주소)와 브로드캐스트 주소(마지막 주소)는 사용자가 쓸 수 없음!

 

네트워크 대역대

같은 네트워크 대역인가? 다른 네트워크 대역인가?를 잘 확인해야 함.

통신하는 방법이 다르다.

같은 네트워크 대역일 경우 라우팅 테이블이 필요하지 않다.

다른 네트워크 대역일 경우 라우팅 테이블을 설정하여 서로 연결해줘야 통신이 가능하다.

 

IP address = network address + host address

 

네트워크에서 서브넷 마스크에 따라서 사용할 수 있는 네트워크 개수가 달라지기 때문에

필요한 요청과 서비스에 따라 서브넷 마스크를 잘 설정할 수 있도록 유의해야 한다.

 

이진수 밖에 모르는 컴퓨터가 ip를 보고 같은 네트워크라는 것을 어떻게 알 수 있을까???

> ARP를 사용하여 ip를 mac 주소로 변경하여 컴퓨터상에서 시스템이 같다고 파악함

 

 

 


가상 환경 구축 및 리눅스 실습

실습 내용: 가상 머신을 이용해 서버를 구축하고 터미널 프로그램을 이용하여 ssh 원격 접속

 

- virtualbox 6.1 다운로드

https://www.virtualbox.org/wiki/Download_Old_Builds_6_1

 

 

가상화 시스템을 제공해주는 솔루션, 가상화 머신(추상화 개념)

AWS에서도 virtualbox와 같은 가상화 서버를 제공하고 자원을 사용할 수 있음

 

Locky 9 설치

- rocky9-minimal.iso 다운로드

https://rockylinux.org/download

 

 

 

VirtualBox 설치 완료

 

 

호스트 키 조합 변경

리눅스에서 한영 변환 키 지원되지 않기 때문에 호스트 키를 변경해준다.

파일 > 환경 설정 > 입력 > 가상 머신(상단 탭) > 호스트 키 조합 Ctrl + Alt로 변경하기

호스트 키 조합 변경

 

 

가상머신 기본 세팅

 

Memory: 2048MB

 

 

 

디스크 vdi, 동적할당, 20GB 설정하면 생성 완료

 

가상 머신 생성 완료

 

CPU: 1 vCPU(default)

현재 환경에 생성할 수 있는 가상 머신의 수 8개(8 vCpu)

 

가상 NIC(Network Interface Card) 추가

* 여러 개의 네트워크로 분리하는 이유: 서버를 24시간 동안 제공해야 하기 때문에 다른 수단이 필요함 => 네트워크 이중화

 

NIC 종류 2가지

1. NAT(Network Address Transformation) (default): external network. 외부 데이터를 내부로 들여오기 위해 사용된다. 

2. host-only: 내부에서 이루어지는 데이터 통신을 하는 경우 생성할 수 있다.

 

내 컴퓨터 환경에서만 데이터를 주고 받을 것이기 때문에 host-only로 설정한다.

 

* 폐쇄망: 내부 시스템에서만 데이터를 받아 사용하며, 외부와 연결되지 않음

 

NIC 설정 방법

설정 > 네트워크 > 어뎁터 2

호스트 전용(host-only) 네트워크 어댑터 사용

 

IP 변경 -> 172.16.0.1

파일 > 호스트 네트워크 관리자 

172.16.0.1 로 변경

 

 

OS 설치

설정 > 저장소 > CD 아이콘 클릭 후, 디스크 파일 선택 > 다운로드 받은 Rocky 선택

rocky 9 OS 연결

 

 

언어 설정

rocky 가상 머신 접속 후 언어 영어(US)로 설정

언어 설정

 

 

Installation Destination 설정

파티션: 디스크를 나눈 논리적 단위

파티셔닝: 디스크를 나누는 행위

 

리눅스는 디스크 이름으로 파티션을 나눔

자동적으로 20개로 나뉨

 

 

Root 사용자 설정

간단한 테스트를 하기 위해서 root 계정의 원격 접속을 패스워드 인증으로 허가할 수 있도록 설정한다.

 

root 계정 비밀번호 설정 및 root 원격 접속 패스워드 인증 허용

 

유저 생성

user01 생성

 

 

재부팅 후 root 계정으로 로그인

 

root 로그인

 

ip a(= ip addr) 명령어를 통해 각 어댑터의 주소 확인

ip addr 명령어 사용하여 어댑터 확인

 

 

1. lo: looopback 인터페이스. 데이터를 전달하려고 하는 로직 프로세스를 가짐. A 프로세스가 컴퓨터(커널) 쪽으로 정보를 전달할 때, 루프백 인터페이스가 B 프로세스로 데이터를 전달

127.0.0.1/8 < 루프백 인터페이스를 가리키는 ip (본인)

2. enp0s3: nat. 주소가 자동으로 생성됨. dhcp 프로토콜이 사용됨.

3. enp0s8: host-only. 가상 머신 시작 전, 네트워크 대역을 172.16.0.1/24로 변경

 

 

nmcli 명령어 이용하여 enp0s8 주소 변경 -> 172.16.0.200/24


# nmcli con mod enp0s8 ipv4.address 172.16.0.200/24 ipv4.method manual

-> enp0s8 ip 주소를 172.16.0.200/24로 변경 후 재부팅한다.

* nmcli con mod(NetworkManager Connection modify: 현재 네트워크에 연결된 아이피를 변경(Modify)한다. 

enp0s8 ip address 변경

 

네트워크 연결 확인

커맨드 ping 명령어 사용

 

ssh 실행하기 위한 MobaXterm 터미널 프로그램 설치

 

https://mobaxterm.mobatek.net/download.html

 

shell과 terminal 이론

명령어를 바이너리로 바꿔주는 역할을 하는 것은 Shell

쉘을 interpreter라고 부른다.

 

인터프리터란?

프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경

 

binary file > kernel

interpreter(shell) > kernel

 

리눅스는 C언어로 컴파일되어 있음

리눅스에서는 기본적으로 bash shell을 사용함.

윈도우는 PowerShell

 

 

속도는 바이너리 파일이 더 빠르다 왜? 이미 다 빌드되어 있음

바이너리 파일과 인터프리터의 차이점은?

바이너리 파일: 고정된 실행 파일

인터프리터: 유연한 작동

 

 

터미널이란? 사용자가 명령어를 입력하고 출력된 결과를 볼 수 있는 물리적 장치

 

terminal 입력 > shell > kernel > process > terminal

 

이 터미널 장치는 키보드와 모니터가 보급회되면서 사용하지 않게됨

하지만? 터미널은 꼭 필요하다!

tty라는 명령어로 터미널을 사용할 수 있따.

 

 

MobaXterm 실행하여 SSH 세션 생성

ssh 세션 생성

 

패스워드 입력
가상 머신 접근 완료

 

 

echo $SHELL

현재 어떤 쉘을 사용하고 있는지 확인할 수 있는 명령

bash shell을 사용할 수 있는 것을 확인할 수 있다.

 

bash 쉘 프로그램도 프로세스로 커널에 의해 실행(/bin 디렉터리에 저장되어 있음)이 되었음.

메모리 특정 부분에 적재되어 메모리를 사용하고 있는 중이다.