본문 바로가기
Study/AWS

AWS(2)-EC2 를 활용해 MySQL 접속

by 왕방개 2024. 4. 11.

 

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)

anywhere 나 사용자 지정 IP 선택 가능

 

-규칙 저장

 

 

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