1.Network
1)IP Address
=>TCP/IP 라는 프로토콜을 사용하는 인터넷 망에서 컴퓨터를 구분하기 위한 숫자의 조합
=>인터넷 망에서 데이터를 송수신 할 때 Port 와 함께 사용
IP Address 는 컴퓨터를 구분하고 Port 컴퓨터 안에서 동작하는 Application을 구분
실제 데이터의 송수신은 컴퓨터의 애플리케이션이 수행하기 때문
인터넷 망에서 각 컴퓨터의 IP는 구별되어야 하고 하나의 컴퓨터에서 각각의 Application이 사용하는 Port는 구분되어야 합니다.
하나의 컴퓨터에서 여러 개의 Application을 동작할 때는 포트를 확인해봐야 합니다.
=>IPv4 와 IPv6
- IPv4: 32비트 주소 체계로 8비트씩 나누어서 표현을 하는데 일반적으로 10진수로 변환해서 표현
00000000.00000000.00000000.00000000 ~ 11111111.11111111.11111111.11111111
0.0.0.0 ~ 255.255.255.255
- IPv6: IPv4 의 주소 개수 한계로 등장한 주소 체계, 현재는 전부 IPv6를 사용하는데 IPv4로 설정하면 자동으로 변환을 수행
128비트 주소 체계로 16비트씩 8개의 영역으로 구분을 하고 각 16비트는 16진수 4자리로 표현하고 중복되는 부분을 생략할 수 있도록 설계
00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000.00000000 ~ 11111111.11111111.11111111.11111111
.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111.11111111
0000:0000:0000:0000:0000:0000:0000:0000 ~ FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
Loopback(자기 자신)을 표현할 때 IPv4는 127.0.0.1 으로 표현하고 IPv6는 0:0:0:0:0:0:0:1 로 표현합니다.
Windows7 이상에서는 로컬 호스트에서 자신의 웹 서버에게 접속하면 IPv6로 표현됩니다.
=>Private IP & Public IP
- Public IP는 인터넷에서 외부 망에서 구별하기 위한 주소로 이 주소는 컴퓨터 마다 유일 무이해야 합니다.
- Private IP는 인터넷에서 내부 망에서 구별하기 위한 주소로 이 주소는 내부 망에서만 유일 무이하면 됩니다.
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
이 대역은 외부에서 사용할 수 없음
Docker에서 Network 만들 때 Kubernetes 에서 Pod를 생성할 때 유동 IP를 사용하는 인터넷을 이용할 때 확인 가능
=>유동 IP 와 고정 IP
- 유동 IP는 IP Address 가 계속해서 변하는 것
전용선을 사용하지 않고 통신 회사의 라우터를 이용해서 인터넷을 사용하는 경우 통신 회사에서는 라우터에 몇 개의 IP만 할당하고 각 개인에게는 Port Forwarding 이라는 기술로 분배해서 사용하는 경우에 할당됩니다.
- 고정 IP는 IP Address 가 고정되는 것
전용선을 사용하는 환경에서 배정
서버가 될려면 이 고정 IP를 사용해야 합니다.
- Elastic IP(탄력적 IP)
AWS에서 클라우드 서버에게 배정하는 IP로 하나의 고정 IP를 부여하는 것
컴퓨터를 임대해서 사용하는 EC2 서비스를 사용할 때 임대한 컴퓨터를 서버로 활용할려면 이 탄력적 IP를 부여받아서 사용해야 합니다.
최근에는 EC2 서비스의 인스턴스를 생성하면 Public IP가 부여됩니다.
2)Domain 과 DNS(Domain Name Service)
=>IP Address 는 숫자로 된 주소이므로 사람이 기억하기가 어렵습니다.
=>숫자로 된 주소를 문자의 조합으로 사용할 수 있도록 만든 것 중 하나가 Domain 입니다.
인터넷 망에서는 IP Address 를 이용해서 다른 컴퓨터에 요청을 할 수 있고 Domain을 이용해서 요청을 할 수 도 있습니다.
=>Domain을 입력했을 때 Domain을 해석해서 IP Address 로 변환해주는 서비스가 DNS
=>AWS에서 DNS 서비스를 제공하는데 이름이 Route53
=>도메인은 이름이기 때문에 호스트 또는 서비스 이름이 안들어가는데 실제 사용을 할 대는 호스트 이름 과 도메인을 합쳐서 사용을 해야 하는데(https://www.naver.com) 이것을 FQDN(Fully Qualified Domain Name) 이라고 합니다.
맨 앞은 프로토콜을 의미하고 도메인 앞 부분은 호스트 이름이라고 합니다.
가끔 http 나 https를 붙이지 않고 //로 시작한느 경우가 있는데 이는 필요에 따라 http 나 https로 접속
=>URI(Uniform Resouce Identifier), URN(Name), URL(Locator)
- URI: 자원 식별자로 가장 큰 개념으로 URN 과 URL이 하위 개념으로 존재
- URL: 네트워크 상에서 자원이 어디에 위치해 잇는지 알려주기 위한 규칙
- URN: 자원을 구별하기 위해서 붙이는 이름
=>ARN: AWS 안에서 자원을 구별하기 위해서 붙이는 이름
2.VPN(Virtual Private Network)
=>Private Network: 외부에서는 접근할 수 없는 네트워크
여기에서 외부는 사내를 의미
=>최근에는 건물 내부 뿐 아니라 다른 건물 또는 외부에서 인터넷을 이용해서 Private Network 를 사용해야 하는 경우가 많은데 이 때 내부 구성원을 제외한 사람들이 접근할 수 없도록 해야하는데 이렇게 구축하는 것을 VPN이라고 합니다.
=>AWS 에서는 이를 VPC 라고 개념으로 제공합니다
최근에는 서비스를 만들면 데이터 - 애플리케이션 - API 형태로 만들어지는데 이때 API는 외부로 노출이 되지만 데이터와 애플리케이션은 외부로 노출되지 않도록 하는 것을 권장합니다.
하나의 서비스를 만들 때 데이터와 애플리케이션 그리고 API는 하나의 VPC 로 구성해서 내부 통신이 가능하도록 하고 API만 외부로 노출시켜서 클라이언트나 다른 API와 통신을 할 수 있도록 만드는 것을 권장합니다.
=>VPN 안에는 보안 그룹이나 ACL의 개념이 있어서 특정 네트워크 또는 컴퓨터나 접속할 수 있도록 설정을 할 수 있습니다.
=>NAT (Network Address Translation) 를 이용해서 내부에서는 사설 IP을 사용하고 외부로 나갈 때 Public IP 로 변환해서 나가도록 해줍니다.
3.네트워크 범위와 CIDR 표기
=>하나의 컴퓨터를 구별하기 위해서는 IP Address 를 사용하는데 여러 개의 컴퓨터 특히 연속된 IP 대역을 가진 컴퓨터를 표현하기 위한 방법이 CIDR 표기법
=>IP주소/공통된 주소의 개수를 비트 단위로 입력
공통된 주소 부분을 포함하는 모든 컴퓨터를 하나의 대역으로 표현 가능
192.168.0.0/16 => 앞의 16개 비트는 고정이고 나머지는 자유롭게 사용
192.168.0.0 ~ 192.168.255.255 까지를 의미
192.168.1.0/24
192.168.1.0 ~ 192.168.1.255 를 의미
0.0.0.0/0 =>고정되어야 하는 것이 하나도 없음. 모든IP 를 의미
192.168.0.1/32 =>모든 비트가 고정되어야 합니다. 하나의 IP를 의미
이 방식은 지금 거의 사용하지 않은데 데이터베이스에 애플리케이션 서버가 하나만 연결되는 경우 이런식으로 작성해서 다른 컴퓨터는 데이터베이스에 접속을 못하도록 하는 경우에 사용
4.알려진 포트(well -known port)
=>포트 중에서 0~1023 번 까지는 대부분 정해져 있습니다
http:80
https:443
SSH(원격 접속):22
FTP(파일전송):20,21
DNS:53
Mail: 25,110,143
=>애플리케이션이 사용하는 포트
RDP(원격 데스크톱):3389
DB: 1433(SQL Server) , 1521(Oracle) ,3306(MySQL, Maria DB) , 5432 ( Postgre SQL) , 27017 (Mongo DB) , 6397(Redis)
zookiper(2181), Kafka(9092)
logstash(5044) , elastic search (9200,9300) , kibana(5601)
5.End Point
=>외부에서 접속하기 위한 접속점
=>외부에서 AWS 서비스에 접속할 때 IP가 부여되면 IP 주소를 이용해서 접속을 하면 되지만 IP를 부여하지 않은 경우에는 End Point 를 이용해서 접속을 해야 합니다.
EC2 같은 서비스는 IP도 부여되고 End Point 도 부여되므로 2가지 모두 외부에서 접속이 가능하지만 RDS 같은 데이터베이스 서비스는 IP를 알려주지 않고 End Point 만 알려주므로 End Point 를 이용해서 접속을 해야 합니다.
============================================================================================
EC2 Service
=>준비
-AWS 계정
-SSH 접속을 위한 소프트웨어
1.개요
=>Amazon Elastic Compute Cloud의 약자
=>컴퓨팅 용량을 제공하는 서비스 -IaaS(Infrastructure as a Service)
=>운영체제가 설치된 컴퓨터를 임대해주는 서비스
서버를 만들고자 할 때 항상 켜져 있고 고정된 IP 를 갖는 컴퓨터가 필요한 경우 사용
=>Managed Service 가 아니므로 네트워크나 컴퓨터 자체의 운영은 AWS 가 담당하지만 나머지는 사용자가 결정
1)사용 이유
=>클릭 몇번으로 서버 생성
=>생성과 삭제가 편리
-고장난 경우 복구가 가능
-부하가 증가하면 같은 구성의 서버를 복제하면 됩니다
2)단점
=>서버 한대로 서비스가 가능하고 트래픽이 거의 변화가 없는 경우 비용이 부담될 수 있습니다
2.주요 구성 요소
=>인스턴스:가상 서버
=>AMI: 가상 이미지 - 운영체제 이미지
=>Key Pair: 외부에서 SSH를 이용해서 접속할 때 사용하기 위한 인증을 위한 키
최근에는 ID와 PW 를 사용해서 로그인을 하지 않음
=>EBS:스토리지
=>보안그룹:특정 그룹에 접속할 수 있는 그룹을 설정하는 기능
=>Elastic IP: 고정된 IPv4 주소
3.접속 방법
=>AWS 웹 서비스에 로그인해서 콘솔 조작
=>외부에서 SSH 를 이용해서 접속
4.인스턴스 생성
1)인스턴스를 생성하고자 하는 region 선택
2)인스턴스 시작을 클릭한 후 작업
-이름을 작성
- 사용할 환경 -운영체제(AMI) 선택
-인스턴스 유형 선택
-키페어 선택(외부에서 로그인을 하기 위해서 생성)
-네트워크 설정에서 기본적으로 사용할 포트를 설정(22,80,443 - 나중에 변경 설정이 가능하지만 22번은 포트 개방을 하지 않으면 수정을 못함)
-스토리지 구성(하드디스크 얼마나 사용할껀지)
-인스턴스 시작을 누르면 새로운 인스턴스가 생성
5.인스턴스에 접속
1)관리 콘솔에서 접속
=>EC2 대시보드에서 인스턴스 ID를 클릭
=>연결 버튼 클릭하고 새로 나오는 화면에서 클릭
2)SSH을 이용해서 외부에서 접속 - key pair 파일 필요 (pem 파일)
글자 크기도 조정못해서 조금 불편함
=>Mac 은 ssh 가 바로 사용가능하지만 windows 는 open ssh를 설치해야 합니다.
Windows 기능에 포함되어 있습니다.
cmd 창에 ssh -i pem파일경로 이미지이름(ubuntu)@IP 나 DNS
6.Web servere 생성
1)리눅스에 접속
2)웹 서버 생성
=>패키지 정보 업데이트:sudo apt-get update
=>apache2 패키지 설치: sudo apt-get install apache2 -y
=>apache2 서비스 시작: sudo service apache2 start
=>서비스 확인: ps aux | grep apache2
3)보안그룹 설정
=>EC2 서비스는 모든 서비스를 차단합니다
외부에서 접속하는 것을 허용하지 않습니다.
=>보안그룹에서는 필요한 포트를 외부에 개방을 해주어야 합니다
webserver 는 http 프로토콜을 사용하고 기본 포트가 80번입니다
=>인스턴스 상세 정보 화면으로 이동
-보안 탭으로 이동
80번 포트가 있는지 확인
(없으면 상단의 보안 그룹 링크를 클릭)
Inbound 는 외부에서 접속할 때 보안을 설정하는 것이고 아웃 바운드는 내부에서 외부로 나갈때 보안을 설정하는 것입니다
-인바운드 규칙 편집 누르고 규칙 추가 (Add rule)
-규칙 저장
4)다른 컴퓨터에서 웹페이지 접속
http://공인IP
7.인스턴스 중지 및 해제
1)인스턴스 중지:현재 EC2 컴퓨터를 끄는 것과 비슷한 효과
2)인스턴스 종료: 인스턴스를 삭제하는 것
8.MySQL 서버
1)EC2 인스턴스에 접속
2)설치
=>sudo apt-get update
=>sudo apt-get install mysql-server
=>버전확인:mysql --version
=>mysql 접속( 기본 비밀번호는 없거나 관리자 비밀번호 -ubuntu)
sudo mysql -u root -p
=>MySQL 에 접속해서 관리자 비밀번호를 재설정
use mysql
alter user "root"@"localhost" identified with mysql_native_password by "암호";
flush privileges;
=>외부 접속
-관리자 모드로 우분투에 접속:sudo su
다른 계정으로 접속: sudo su 계정
-관리자 모드로 접속 후 MySQL 설정 파일 변경
cd /etc/mysql/mysql.conf/.d 명령으로 프롬프트 이동
vi mysqld.cnf 명령으로 파일 편집으로 이동
i를 줄러서 편집 모드로 전환한후 bind-address= 0.0.0.0 으로 수정
esc를 눌러서 명령모드로 전환한 후 :wq! 을 입력해서 저장하고 종료
-서비스 재시작
service mysql restart
=>사용자 등록
-mysql 관리자로 접속: mysql -u root -p
-데이터베이스 생성: create database 이름;
-유저 생성: create user 유저이름@'%' identified by '비밀번호';
-권한 부여: grant all privileges on * 또는 데이터베이스이름.* to 유저이름;
-변경 내용 작성: flush privileges;
3)3306번 포트에 대한 인바운드 규칙 설정
EC2 들어가서 인바운드에 mysql 만들기
4)외부에서 접속 프로그램을 이용해서 접속
Debeaver 를 활용해서 접속 가능 ( 접속할 때 localhost 자리에 id넣고 입력)
'Study > AWS' 카테고리의 다른 글
AWS(6)-S3에 파일 upload(Django, Spring Boot, react) (2) | 2024.04.17 |
---|---|
AWS(5) - DataBase (0) | 2024.04.16 |
AWS(4) (0) | 2024.04.15 |
AWS(3) (0) | 2024.04.13 |
AWS (0) | 2024.04.09 |