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

[24.07.02] 인프라 기초 2

우잉~ 2024. 7. 2. 17:57

인프라 기초 1 복습

- 인프라란? 데이터를 처리하기 위한 장치. 기반 시설

인프라가 데이터를 처리하기 위해서는 cpu, memory, disk, network가 필요하다.

 

- IaaS: 인프라를 제공해주는 클라우드 서비스. Infrastructure as a Service

IaaS 예시) EC2, VPC 등

 

- 서버: 컴퓨터. 서비스를 제공해주는 역할

* 흔히 사람들이 말하는 컴퓨터는 데스크탑이다.

- 데스크탑: 업무를 처리하기 위한 역할을 하는 장치

 

* 우리는 서버를 구축하고 설계하는 방법을 알아야 한다. 

 

* 실습을 통해 특정 OS를 사용하고 서비스를 이용해보자.

- OS: 커널을 통해 프로세스를 실행하고 데이터를 처리하기 위해 여러가지 작업을 실행

컴퓨터는 OS가 꼭 필요하다. 왜?

인프라 자원들이 올바르게 작동하기 위해서는 커널(Kernel)이 꼭 필요하다. OS는 이를 포함하고 있다.

커널이란? 프로세스를 실행시켰을 때 CPU, Memory, Devices에 데이터를 전달할 수 있는 기능을 가지고 있음

 

 


 

리눅스

- 서버 측에서 많이 사용되는 OS의 한 종류

- 리눅스에서 사용되는 프로그램은 c/c++로 구성

* 6.1 버전 이후 'Rust'를 사용한 라이브러리가 추가되었다.

- 데스크탑용 리눅스는 Ubuntu를 사용한다.

 

리눅스의 장점

- 오픈 소스로 누구나 자유롭게 무료로 사용 가능 (라이센스를 구입해서 사용하는 것도 존재하긴 하다.)

- Apache http server, MySQL Database 등에 사용

- 적은 리소스를 가진 시스템에서도 사용 가능 -> 대부분 CLI 환경이기 때문에 라이브러리 적게 사용

- 높은 이식성. UNIX와 호환 가능

- multi-user, multi-tasking

 

리눅스의 단점

- Windows, macOS에 비해 상용 애플리케이션이 많지 않다.

- 소프트웨어에 따라 인코딩 문제가 있을 수 있다. 한글 깨짐

 

리눅스의 파일 구성

- 리눅스는 파일로 구성되어 있다. 모든 것을 파일로 다루기 때문에 파일 조작 방법을 익히는 것이 중요하다.

 

디렉터리란?

- 여러 개의 파일을 담아 정리하는 것. = 폴더

 

* 파일 시스템(File System[FS])이란?

- 파일을 구성하고 관리하는 데 사용하는 구조. 리눅스는 트리구조를 사용하고 있다.

윈도우는 NTFS( New Technology File System), 리눅스는 주로 ext4, xfs를 사용한다.

- 그 외 FAT32, exFAT, ext3

* 윈도우와 리눅스의 파일 시스템을 호환시키고 내용을 공유할 수 있는 samba 프로토콜도 존재한다.

 

* 리눅스에서는 디렉터리 구조가 모두 똑같다. ex. /bin, /etc, /tmp 등

이를 FHS(Filesystem Hierachy Standard)라고 한다.

 

* 최상위 디렉터리는 /, 루트 디렉터리라고 한다.

 

리눅스 디렉터리 종류

- /bin: 명령어 실행 파일 배치. 시스템과 관련된 중요도가 높은 명령어 포함

- /dev: 디바이스 파일 배치. 디스크, 키보드 등 하드웨어를 다루기 위한 특수 파일 ex) sda1, sda2

* 리눅스 디스크 이름은 sda이다. 윈도우로 따지면 c 드라이브

* sda가 1, 2로 나뉜 이유: 부팅 관련 정보를 따로 저장하여 파티셔닝함. 

- /etc: 애플리케이션 설정 파일 배치. 리눅스 운영 및 관리 위한 파일들이 배치되어 있다.

- /home: 사용자별로 할당되는 홈 디렉터리 배치. ex) /home/user01

- /sbin: 실행 파일 및 관리자용 명령어 배치 ex) shotdown

- /tmp: 임시 파일 저장. 정기적으로 /tmp 디렉터리를 삭제하는 배포판도 있으니 중요한 내용이 담긴 파일을 이곳에 보관 X

- /usr: 설치 애플리케이션 실행 파일, 문서, 라이브러리 등 저장. /usr 안에도 /bin, /sin, /etc 등 존재 -> 루트 디렉터리와 구조 비슷

- /var: 변화하는(variable) 데이터 저장. 실행 중 생성된 데이터, 로그, 메일 등 저장. 많은 파일이 기록되므로 용량 부족해질 수도 있으니 주의해야함.

 

 

 


 

Shell

shell이란 무엇인가?

- 커널과 사용자를 연결해주는 인터페이스.

즉, 사용자가 입력한 명령에 대해 읽고 해석한 뒤 프로그램을 실행시킨다.

* 쉘과 커널이 분리되어 있는 이유

- 리눅스는 '한 프로그램에 너무 많은 기능을 넣지 않는다'라는 철학을 가지고 있기 때문에 셸과 커널이 분리되어 있다.

- 쉘은 메모리 관리, 커널은 프로세스 관리 수행

 

프롬프트의 구조

- [사용자 이름@호스트 이름] # or $

예시) [root@localhost ~]  #, [user01@localhost ~] $

 

프롬프트 $ 기호와 # 기호의 차이점

- $: 일반 사용자

- #: 루트 사용자

 

쉘 변수

- 쉘은 변수를 선언할 수 있다.

- 변수 설정 방법: 변수명=값

- 변수에 할당된 값을 확인하고 싶을 때는 echo 명령어를 활용 => echo =$변수명

ex. echo $var1


퍼미션

- 누구에게 어떤 권한을 허가할지에 대한 정보

알파벳 의미

r 읽기(read)
w 쓰기(write)
x 실행(execute)

 

소유자/소유 그룹/기타사용자

디렉터리의 경우 맨 앞쪽에 d가 붙는다.

디렉터리 정보 퍼미션

- sybolic mode: chmod [ugoa] [+-=][rwx]〈파일 이름〉

+, - 기호를 사용하여 권한을 추가할지 삭제할지 정한다. ex. u+w: 사용자에게 쓰기 권한 부여

- octal mode (numeric mode): 8진수로 모드 설정 ex. 644, 755

 


프로세스(process)

- 커널에서 명령어 입력 시 발생하는 내부 동작 과정

- 리눅스 커널 입장에서 바라본 프로세스 처리 단위

> 커널이 디스크에 있는 해당 파일을 읽어 메모리에 올린 뒤, CPU가 프로그램을 실행하는 과정이 진행됨

여기서 메모리에 올린 프로그램을 프로세스라고 한다.

 

- PID: 프로세스가 가지고 있는 고유 번호

- ps 명령어를 사용하면 현재 디렉터리에 존재하는 프로세스 목록을 확인할 수 있다.

- 모든 사용자의 프로세스를 상세하게 확인하고 싶을 경우 aux, xf 옵션을 사용한다.

- 모든 프로그램을 확인하고 싶을 경우? ax 옵션


잡(job)

- 셸에서 바라본 프로세스 처리 단위

- Ctrl + z를 눌러 일시 중지된 프로세스를 jobs 명령어로 확인 가능하다.

 

잡 동작 방식 2가지

- foreground: 잡 종료 시점 까지 다른 명령어 수행 X. 대기 상태로 전환됨

- background: 잡을 종료하지 않아도 동시에 다른 명령어 실행 가능. = 멀티 태스킹(multi-tasking)


* 멀티 태스킹이란?

- 동시에 다른 명령어 실행하는 것

 

 

-  잡이 여러 개가 있을 경우 fg %[잡 번호]로 돌아갈 수 있다.

- 그냥 fg 명령어 사용 시 가장 최근에 중지한 잡이 실행됨

- 잡 종료하는 방법은 kill 명령어 사용. kill % [잡 번호]

* kill 명령어는 프로세스를 종료할 때도 사용한다. kill [PID]

 


소프트웨어 패키지

프로세스가 동작을 할 때 프로세스를 실행하기 위해서는 라이브러리 필요

명령어 입력하기 위해서

리눅스같은 경우는 바이너리만 있으면 파일을 실행할 수 있음

복합적인 명령어를 실행하려고 함.

예를 들어 리눅스에서 vscode를 실행하려고 하면 gui 라이브러리가 더 필요할 수 있다.

이러한 프로세스를 실행하기 위해서는? 바이너리만 있으면 되는 게 아니다.

 

[binary + library]가 필요함!!!

라이브러릴들과 바이너리를 함께 모아 => [package]

패키지는 binary+library이다.

 

실제 프로세스는 여러 패키지를 설치, 이 패키지에 있는 바이너리를 실행했을 때 동작할 것이다.

패키지 객체를 생성해야 함.

RedHet 계열에서는 RPM(redhat package maanger)를 사용

.rpm 확장자의 패키지 파일을 사용.

이러한 패키지 파일을 관리하는 방법은?

> dnf/yum 패키지 관리 도구를 사용하여 .rpm 파일을 관리

- yum은 RHEL 8 버전까지 기본으로 사용

- dnf는 RHEL 9 버전부터 기본으로 사용되도록 채택되었음. 동작 과정은 거의 똑같다.

 

예시) git 패키지 설치

dnf install git

git 설치를 위한 라이브러리(rpm파일) 목록을 같이 설치하는 모습

 

appstream은 레포지토리 정보이다.

레포지토리의 정보가 담긴 url이 /etc/yum.repos.d/ 디렉터리에 있는 rocky.repo 파일에 담겨져있다. 

이 url의 미러 사이트에 담겨 있는 정보들을 가지고올 수 있다.

패키지 파일을 관리하는 이유가 무엇일까? => 종속성

각 라이브러리마다 다양한 버전을 가지고 있고, 각 버전마다 호환될 수 있는 것들이 전부 다르기 때문이다.

 

http 패키지를 다운 받아 http 연결을 할 수 있다.

> systemctl start httpd

방화벽 켜져 있어서 http 통신 불가능

* 방화벽 내리는 방법

> systemctl stop firewalld

 

http 연결 성공 화면


리눅스 기본 명령어 실습

 

가상 머신을 '헤드 리스로 시작'한 후, mobaXTrem으로 가상 머신 터미널 실행

로그인 완료

 

date

- 현재 날짜, 시간 출력

date 명령어 사용

 

echo

- 인자로 지정한 문자열 출력

- $ 기호를 사용하여 변수를 지정하고 값을 출력할 수도 있다.

현재 작업하고 있는 디렉터리 출력

- pwd 명령과 같은 값을 출력함

 

hostnamectl [호스트 네임]

- 호스트 이름 변경

 

history

- 사용한 명령어 목록 출력

터미널에서 사용한 명령어 목록 출력

 

cd

- 디렉터리 이동

- 경로를 적지 않고 cd 명령어를 사용할 경우, 현재 로그인한 사용자의 홈 디렉터리로 이동한다. (cd ~)

로그인 한 유저가 root이기 때문에 root 홈 디렉터리로 이동

 

ls

- 현재 위치한 디렉터리(워킹 디렉터리)에 있는 파일과 디렉터리를 출력

- '-a' 옵션은 모든 목록 출력

루트 홈 디렉터리에 있는 파일, 디렉터리 출력

 

 

mkdir

- 디렉터리 생성

- 'p' 옵션을 이용해 디렉터리의 하위 디렉터리도 생성 가능

- 디렉터리가 이미 있을 경우에는 기존에 있던 디렉터리 경로 이용

work 디렉터리 생성

 

touch

- 파일 생성

work 디렉터리에 testfile 생성

 

rm, rmdir

- 파일과 디렉터리 삭제.

- rm은 파일, 디렉터리가 모두 삭제할 수 있다. '-r' 옵션을 이용하여 디렉터리 삭제 가능한다.

- rmdir은 거의 사용 X

- 여러 파일을 지우기 위해서는 -f(false) 옵션 사용하여 문구 안 띄우게 할 수 있다.

- 'rm -r' 명령어는 다 삭제를 해버리기 때문에 중요한 파일을 지우지 않게 사용할 때 조심해야 한다.

work 디렉터리 삭제

 

cat

- 파일 내용 출력

/etc/hosts 파일 내용 출력

 

less

- 파일 첫 부분부터 페이지별로 출력

- 엔터 누르면 한 줄씩, 스페이스 누르면 한 페이지씩 이동

- q 누르면 less 명령어 종료

less 명령어 이용하여 파일 페이지로 나눠 읽기

- / 입력 후 원하는 단어 검색하면 해당 단어만 검색할 수 있다. 차례대로 보고 싶으면 n을 눌러 넘기기

/Symbol 입력하여 검색 기능 사용

 

cp

- 파일 복사. copy and paste

- cp file1 file2: file1을 file2로 복사

/etc/hosts파일을 test파일로 복사

 

 

mv

- 파일 이동. cut and paste이기 때문에 기존에 있던 파일은 없어진다.

- -i 옵션을 사용하여 덮어 쓰기 경고문을 띄울 수 있다. 왜? 기존 파일이 사라지기 때문에 사용하는 것을 추천

mv -i 명령어 사용하여 파일 덮어쓰기

 

ln

- 링크 생성

* 링크란?

- 파일에 별명을 붙이는 것. '링크를 생성한다'라고 이야기 한다.

 

* 링크 종류 2가지

1. 심볼릭 링크

- 윈도우의 '바로가기'와 유사. 생성되어 있는 다른 파일이나 디렉터리를 가리킨다.

- ln -s [원본파일/경로] [새로 생성하는 파일or링크 경로]

- A파일과 B파일이 있을 때, B에 A 링크를 생성하였다. 이 때 링크된 파일인 A 파일을 삭제되면 링크가 깨지면서 접근할 수 없게 된다.

2. 하드 링크

- 같은 기능을 하는 파일이나 디렉터리를 생성하게 된다.

- 옵션 없이 사용하면 하드 링크 생성

 

ls -l

- 파일, 디렉터리에 존재하는 파일/디렉터리의 정보 확인

chmod

- 파일, 디렉터리에 대한 접근에 대해 수정

user에게 쓰기 권한 부여

 

소유그룹을 소유자와 같은 권한을 부여


 

vi 편집기 활용 실습

vim 편집기는 최소한의 손동작으로 문서를 편집할 수 있도록 설계되어 있다.

- vi [파일 이름]

 

vim mode 3가지

- normal mode: 처음 진입했을 때. 입력할 수 없는 상태이다. esc키를 누르면 노멀 모드 진입 가능

- insert mode: 입력 모드. a, o, i를 입력하면 진입할 수 있음. 입력이 완료되면 esc를 눌러 노멀 모드로 돌아갈 수 있다.

- command line mode: 콜론 입력 시 좌측 하단에 명령어 입력 가능하다. w: 저장, q나가기

vi 편집기로 파일 생성, 내용 입력 후 저장 및 나가기