본문 바로가기
Development(Web, Server, Cloud)/22) LINUX - Cloud

Cloud 02 - Volume, 허브, 스위치, WEB Server, WAS Server, DB Server, linux 명령어, mariaDB 연결, PHP DB 데이터 가져오기

by tonyhan18 2021. 12. 31.
728x90

CentOS 7에 리액트 설치하기 — Chamy's Blog (tistory.com)

 

 

CentOS 7에 리액트 설치하기

내가 사용하고 있는 CentOS7에 리액트를 설치해 기본 화면을 띄워보려고 한다. Step 1. 필수 패키지 설치 nodejs 설치 $ sudo yum install nodejs 위와 같이 명령어를 입력하면 nodejs를 설치할 수 있다. 설치가.

chamy619.tistory.com

 

가장 CentOS에 react 설치하기 좋았다.

 

GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++ (onlinegdb.com)

 

GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++

Online GDB is online compiler and debugger for C/C++. You can compile, run and debug code with gdb online. Using gcc/g++ as compiler and gdb as debugger. Currently C and C++ languages are supported.

www.onlinegdb.com

PS는 이걸로 해라잉

 

Volume

 

 

어제 우리가 AWS로 만들어낸 것을 보고 Data Center이라고 부르자 혹은 Zone이다. 이 DC는 물리적 단위이다. 이러한 DC가 서울뿐 아니라 부산도 있을때 이들을 묶어서 하나의 한국 Region을 만들 수 있다. 이때의 Region은 논리적 단위이다. 이렇게 묶인것에도 이름을 붙여주어야 하니 나는 ap-northeast-2라고 부르겠다.

 

만약 이 region에 새로운 zone을 추가한다면 각각을 a,b,c 순으로 이름을 붙이고

(ap-northeast-2a, ap-northeast-2b, ap-northeast-2c)라고 부르게 된다.

 

 

위와같이 서울과 부산에 각각 DB가 존재할텐데 만약에 해킹을 당하던 문제가 생기든 DB가 날라가면 큰일이다. 저번시간에도 비슷하게 이야기했었다. 이를 해결하기 위해서 DB를 외부에 놓게 되는데 이를 DB Server 이라고 부른다. 이렇게 만들어진 DB는 일부분을 DC에 전달해주기도 하고 동시에 공유 저장소를 만들어 파일을 공유할 수 있게 된다.

 

네트워크(IP, DHCP,)

기존에 서로 다른 회사간의 통신이 쉽지 않았다. protocol(통신 규약)이 없었기 때문에 상호통신을 못했던 것이다. 이를 해결하고자 나온것이 IP이다. 즉 표준 프로토콜이다.

 

그런데 한 컴퓨터가 다른 컴퓨터와 통신하기 위해 랜카드를 무수하게 많이 꽂을 수 없는 길이었다. 그래서 Multi-Access가 되도록 `허브`를 만들어 PC들간의 연결을 주도했다. 여러명이 동시 접속할 수 있게 되는 것이었다.

 

대충이렇게 생긴게 Switching Hub이다. 지금은 이걸 소프트웨어로 만들어버린다.

 

앞으로 논리적이라는 것은 바뀔 수 있다는 걸로 정의하자

 

IP(Internet Protocol) : 자신의 IP 주소(cmd > ipconfig)

- internetworking

- 다른 장비, 장치와 연결할 때 사용하는 통신언어

- NIC에 할당된 주소(논리적 주소 - 바꿀 수 있다.)

- 사람의 이름과 비슷하다. 그래서 네트워크주소와 호스트주소로 나뉘어서 가진다. ip주소도 일정부분은 동일네트워크에서 사용하고 나머지는 달라져서 절때 겹치어서는 안된다.

- 네트워크의 일부분 즉 서브넷마스크 : IP 주소의 어느부분이 네트워크 영역이고 어느 부분이 호스트 영역인가를 구분해주는 역활을 한다. 예를 들어 192.168.1.10 의 서브넷 마스크는 255.255.0.0이다.

 

기본게이트웨이 : 다른 네트워크로 가기 위한 출구 주소

ipconfig /all을 처보자

 

그럼 위와같이 DNS는 물론이거니와 우리가 VMware로 만들었던 네트워크 주소까지 모두 확인할 수 있다.

 

위의 구성을 잘 확인해보자 주소는 IP만 있지 않다.

IP(논리적 주소) -> NIC -> 이름

MAC주소(물리적 주소) -> NIC -> 신체

 

IP주소는 크게

- IPv4 : 32bit를 사용, 4개의 옥텟을 사용한다. 8비트 x 4 (0.0.0.0 ~ 255.255.255.255). 10진수로 표현

- IPv6 : 128bit를 사용

로 구분이 된다.

 

하지만 IPv6를 사용하고 싶어도 현재는 많이 어려운 편이다. 왜냐하면 IPv6간의 통신을 하고자 하더라도 중간에 IPv4가 길을 막고 있어서 그렇다. 이를 해결하기 위해 IPv6간에 `터널링`을 만들어서 수행한다.

암튼 어렵다. 그래서 아직까지 IPv4를 많이 사용하고 있다.

 

IP는 크게 2개의 주소할당 방식을 갖는다.

1. static : 관리자나 사용자가 IP/Subnet mask 등을 직접 입력하는 방식 - 한번 입력하면 고정된다.

2. dynamic : DHCP(Dynamic Host Configuration Protocol)가 자동으로 IP를 할당해준다.

 

DHCP

 

DHCP 작동방식은 이와같다. 만약 어떤 컴퓨터가 켜졌다면 DHCP Discover을 동일 네트워크 상의 컴퓨터들에게 물어본다. 그래서 서버를 찾는 작업을 수행한다. 일반 컴퓨터라면 구지 대답할 필요가 없어서 해당 Discover 패킷들을 드랍한다. 반대로 서버는 offer을 컴퓨터에게 보낸다.

그리고 컴퓨터는 해당 ip를 쓸 수 있는지 확인해보고 쓸 수 있으면 서버로 request를 보낸다. 그럼 서버는 알겠다는 의미로 ACK를 컴퓨터로 보내준다. 이때 서버내에는 ip table이 있어서 컴퓨터가 쓰고 있는 ip를 등록해놓는다.

위의 과정을 거치어서 서버와 호스트는 discover, offer, request, ack 메시지를 주고 받으며 호스트의 IP를 결정한다.

 

- DHCP 작동방식 :

1) DHCP DIscover : 기계가 브로드캐스팅을 하여 DHCP서버에 DHCP Discover을 보냄

2) DHCP Offer : DHCP서버가 브로드캐스트/유니캐스트로 메시지를 보고 단말에게 쓸 수 있는 ip를 전달함

3) DHCP Request : 단말이 DHCP 서버의 정체와 사용가능한 IP를 알았기에 DHCP 서버에 해당 ip를 쓰겠다고 보냄

4) DHCP Ack : DHCP 서버가 알겠다고 하고 임대기간을 설정해준다.

 

 

IP

인터넷 서비스를 사용할 수 있느냐 여부에 따라 달라진다.

- public IP(공인 IP) : ISP업체(LG U+, SK ,KT ... )에게 비용을 지불하고 공인IP를 하나 할당 받는다. 이 뒤에는 공유기를 연결해서 사용하게 된다.

- private IP(사설 IP) : 비용지불 없이 자체적으로 사용하는 IP주소이며, 인터넷으로의 연결은 불가능하다. 보통 10.x.x.x 혹은 172.16.x.x ~ 172.31.x.x 혹은 192.168.x.x도 사설IP이다. 이 주소로는 인터넷을 사용할 수 없다.

 

그런데 어라 우리 네트워크의 ip 주소는 10.으로 시작한다 그런데 브라우저에 ifconfig.me를 검색하면

아예 IP주소가 다르다... 왜이런것을까?

 

이건 NAT(Network Access Translation)로 ip들을 묶어서 하나의 스위치로 내보내기 때문에 일어나는 일이다.

기본게이트웨이는 다른 네트워크로 가기 위한 출구이다. 그래서 게이트웨이 도착한 사설 ip를 공인 ip로 바꾸어서 내보내는 것이다.

 

사설 주소 자체는 인터넷과의 연결이 불가능하다. 이를 공인주소로 변경하면 통신할 수 있는데 이러한 방법을 NAT이라 한다.

 

---

 

이제 우리가 만든 VM에다가 NAT를 설정해보자.

우리 VM 오른쪽 클릭

 

한다음 Wired를 잠깐 껏다가 키자

 

했더니 위와같이 동적 ip가 할당되었다.

 

그런데 얘는 서버로 운영될건데 계속 IP가 바뀌면 곤란해진다. 그래서 이를 고정시키기 위해 다음과 같이 수행하자

그래서 위와같이 ip를 고정해버리기로 했다.(10.5.1.207)

 

 

이제 방화벽을 비활성해놓자. 또 재시작시 firewall이 실행되지 않도록 두가지 명령어를 입력하자

```

systemctl stop firewalld

systemctl disable firewalld

```

이제 우리 웹페이지를 재시작시키자. 또 재시작시 httpd가 실행되도록 만들자

```

systemctl restart httpd

systemctl enable httpd

```

 

이제 cd /var/www/html/로 가자

gedit index.html

 

이제 리눅스 명령어들을 알아보자

```

echo $? : 앞으코드가 정상/비정상 구분 (0 - 정상, 그외 - 비정상)

ssh -l user1 ip주소 : ip주소로 접속할 수 있다.

```

 

이제 푸티를 설치하라고는 하는데.... 내가 푸티를 겁나 싫어한다. 그냥 MobaXterm을 설치했다.

 

---

 

client에서 server로 요청을 하면 그것에 대한 응답이 돌아온다. 그런데 통신을 위해서는 ip가 필요하다 그래서 서버측에도 ip를 집어넣었다. 이제 외부에서 서버로 접속하는 사용자는 특정 포트로 접속하게 된다. 이때 보통 ip 뒤에 포트번호를 붙이는데 그냥 앞에 http가 붙어있다면 80번 포트로 접속하게 된다.

 

이번에 한번 접속 로그를 확인해보자

```

cat /var/log/httpd/access_log

```

 

그래서 이걸 나중에 실시간으로 모니터링도 해보자.

```

tail -f

```

 

이제 외부에서 유입된 웹 요청 트래픽은 웹서버의 홈 디렉토리로 이동한다. 그래서 지금까지 /var/www/htmld/에서 계속 작업한 것이다.

홈디렉토리로 이동한 트래픽에 대해서는 기본 웹 파일을 상대방(클라이언트)에게 전달한다.

 

```

mv index.html head.html -> 파일을 옮길뿐 아니라 명칭을 변경할 수 있음

```

```

gedit /etc/httpd/conf/httpd.conf

```

로 서버 엑세스 정보를 수정하자

 

 

가서 index.html 파일을 찾아보자. 이 부분을 head.html로 바꿔버리면 사용자 접근시 이 파일을 먼저 접근하게 된다.

그리고 systemctl restart httpd

 

---

 

이제 외부에서 부터 내부로 FW, SW를 거치어서 서버로 들어오게 된다. 이때 FW도 두가지가 존재하는데 서버자체의 FW과 네트워크의 FW가 존재한다. 

첫번째 FW는 네트워크에만 갈 수 있도록 열어놓아야한다. 그리고 서버쪽 FW도 점검을 해야한다.

 

그런데 서버 밖에 있는 FW를 보고 웹 방화벽이라고 부른다. 이걸 두어서 최소안의 보호를 시도한다. 하지만 방화벽이 늘어나니 속도가 줄어든다. 그래서 대역폭(bandwidth)을 늘려야한다. 이런 대역폭에 사람이 몰리면 병목현상이 발생하고 곧 delay로 이어진다. 이는 곧 jitter로 이어진다. 이는 곧 우리가 보내줄 수 있는 사이즈가 정해져있는 것이다.

 

jitter은 그거다. 패킷을 보냈는데 그 패킷이 가다가 시간이 다되면 라우터가 패킷을 처리않고 그냥 버려진다.

서버에도 처리용량이 있다 이것을 보고 ???라고 부른다.

방법 1. cpu 1개, ram 1g일때 scale을 up하거나 out하는 방법중 하나를 선택할 수 있다. up은 그냥 같은 서버의 성능을 높이는 것이고 scale out은 동일한 성능의 서버를 더 만드는 것이다. 나중에 클라우드는 scale out을 보다 많이 쓰게 된다. 

 

그런데 나중에 이렇게 서버가 많아지더라도 클라이언트가 원하는 위치에 갔는지에 대한 확신이 없다. 이를 해결하기 위해 load balancer가 필요하게 되었다.

 

```

yum -y install php

```

 

이제 한번 php로 스크립트 파일을 만들어보자.

```

touch info.php

```

 

한다음 내부에 위와같이 코드를 작성해주자 그리고 파일에 접근해보면

위와같이나오는 것을 확인할 수 있다. 이렇게

 

 

3-tier

 

 

가장 앞에는 web server 그 뒤에는 Web Application Server 마지막에는 DB Server가 배치된다. 그러면 WEB은 그냥 사용자에게 보여지기만 하는 것이다. 그래서 사용자가 입력해도 이걸 처리할 방법이 없다. 그래서 이걸 WAS한테 넘기어서 처리해달라고 한다. WAS는 데이터가 없으니 다시 DB Server에게 요청해달라고 한다. 그럼 DB Server에서 해당 데이터를 받아들여 저장한다.

 

이제 html에서 작성된 파일이 php로 읽어들이는 것을 해보도록 해보자. 이를 위해 a.html과 a.php를 만들어보자.

 

 

위와같이 form이 데이터를 전송하면 WAS인 a.php에서 받아다가 DB에 던지거나 내부에서 처리하거나 하나를 하게 된다.

 

위와같이 데이터를 전달하고 나니 a.php로 넘어간것을 확인할 수 있다.

 

그럼 이렇게 온 데이터를 받을 양동이가 필요해진다. 그래서 이것을 위해 우리는 미리 input데이터에 name을 붙여놓았다. 이제 이걸 받아오면 되는 것이다.

 

우리는 앞에서 html에서 POST 방식으로 php에 데이터를 던진것을 볼 수 있었다.

 

했더니 위와같이 우리가 보낸 데이터 + 우리가 출력할 데이터가 나온것을 확인할 수 있다.

 

DB

 

이번에는 db까지 연결해보자.

 

```

yum -y install mariadb mariadb-server php-mysql

systemctl start mariadb

```

하면 필요한게 설치된다.

```

mysql_secure_installation

```

하고 나니 위와같이 .my로 시작하는 파일들이 생긴것을 확인할 수 있다. 이것이 DB 기본 셋팅인것이다.

그다음 Enter하고

 

PW를 설정하라고 요구한다. 그래서 test123으로 설정한다.

 

이제 익명사용자들을 지울것인지 물어본다.

원격지에서 접속하는 것을 못하도록 한다.

test database를 지울지를 물어본다.

지금까지의 설정 반영여부를 뭍는다.

 

모두 Enter을 치자

MariaDB가 만들어지고 DB용 파일들이 사라진것을 확인할 수 있다.

 

이제 DB를 담기위해 테이블을 만들어야한다. 서로 관계로 묶인 DB를 보고 RDB라보 부르고 이걸 관리하는 시스템을 보고 RDBMS라고 부른다. 그런데 RDBMS에 비해 빠른 NOsql이 나오게 된다. 이건 그냥 key랑 value로만 값을 넣기 때문에 속도가 굉장히 빠르다.

바로 이런 NOsql을 대응하기 위해서 RDBMS를 튜닝한다.

 

이제 DB로 들어와서 일을 처리하자.

```

mysql -u root -p

show databases;

```

```

create database testdb;

use testdb;

create table testtbl (

-> id int primary key,

-> name CHAR(30));

```

하면 DB안에 table이 생성된다.

```

show tables; : 이걸로 모든table들을 볼 수 있다.

desc testtbl; : 테이블 내부를 볼 수 있다.

```

그 결과 위와같이 출력되는 것을 확인할 수 있다.

 

```

INSERT INTO testtbl VALUES(1, 'gildong');

INSERT INTO testtbl VALUES(2, "TonyHan");

```

참고로 sql에서 ''와 ""은 같은걸로 취급한다. 그리고 `==` 아니고 `=`이다.

 

지금하는 행위는 Query에서 질의를 하고 그결과를 php로 보내고 php는 다시 WEB으로 보내서 내용을 출력하는 것이다.

 

이제 php에서 DB로 연결이되는지 해보도록 하자.

 

---

 

우리가 앞으로 6개월동안 할것을 알려주겠다.

 

1. LINUX 존나 할거다.(기본 명령어, KVM/DNS/NFS)

2. 네트워크와 DB 할거다

728x90