1. 서버란?
서버 : 클라이언트 요청에 응답
클라이언트 <-> 서버 <-> 백엔드 <-> DB와의 관계이다.
2. 네트워크 지식
인터넷 세계에서 주소를 표현하는 방식은 2가지이다.
IP : 3.36.43.123
도메인 : www.naver.com
protocol
HTTP, HTTPS, SSH, SFTP, FTP, MYSQL등의 종류가 있다. 이들은 자주 쓰는 port가 정해져있다.
즉, 특정 port로 들어가면 소통 방식 protocol이 정해져있다는 의미다.
이는 반드시 지켜야하는 것은 아니지만, 관례이다.
3. AWS 서버구축
AWS에서 컴퓨터를 1대 빌려 서버를 구축해보자. EC2라는 컴퓨팅 서비스를 사용할 것이다.
1) 메뉴 중 EC2를 선택한다.
2) 지역은 서울로 선택한다.
3) 메뉴에서 인스턴스 선택 후 우측 노란 버튼 "인스턴스 시작"을 클릭한다.
4) 운영체제를 선택한다.
영상에서 운영체제는 리눅스 우분투 18.04 LTS 버전을 사용한다. 근데 내가 하는 시점에는 18.04버전은 없어서 22.04 버전을 썼다. 클라우드 환경이기 때문에 x86인지 Arm인지는 상관없다.
5) 인스턴스 유형을 선택한다.
컴퓨터의 성능을 선택하는 것이다. 목록에서 가장 아래 있을수록 좋은 것이다. 하지만 나는 프리티어를 사용해야한다... 그래서 t2.micro를 선택했다.
6) 스토리지를 선택한다.
스토리지는 하드드라이브이다. SSD 크기를 어느정도 할 것인지를 선택하는 것이다. 기본적으로 프리티어는 30GB까지 사용할 수 있다.
7) 키페어 생성
키페어 이름은 자유롭게 생성 가능하다. 키 페어 생성 시 mac os X 인 경우, 프라이빗 키 파일 형식은 [.pem] 으로 지정해야 한다.
'키페어 생성'을 누르면 pem 파일이 다운로드 된다.
8) 인스턴스 시작
인스턴스 시작 버튼을 누르면 서버 컴퓨터를 1대 빌리기 완료이다!
우리가 궁극적으로 하기 원하는 것은 이 컴퓨터에 실제로 들어가서 우리가 필요한 프로그램들을 설치하고 서버로 이용하는 것이다. 이 서버에 접근할 수 있도록 도와주는 PuTTY와 WinSCP를을 설치해야 한다.
9) PuTTY 설치
PuTTY는 우리가 빌린 서버에 SSH 프로토콜 즉 터미널로 접근할 수 있게 해주는 프로그램이다. 또한 무료 오픈소스 프로그램이다. 하지만 맥은 PuTTY를 깔지 않아도 기본 터미널로 SSH 연결이 가능한 것 같다. (https://soobakba.tistory.com/29)
- 맥에 PuTTY 설치하는 법
https://velog.io/@wlgus2134/MAC-PUTTY-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
- 맥에 PuTTY 설치 없이 SSH 연결하는 법
public ip는 변동되는 IP이기 때문에 탄력적 IP (고정 IP)를 설정한다.
- aws EC2 메뉴 탄력적 IP로 들어간다.
- 탄력적 IP 주소 할당 버튼을 누른다.
- 아무것도 안하고 그냥 할당 버튼을 또 누른다.
- 작업 드롭다운을 눌러 탄력적 IP 주소 연결을 누른다.
- 인스턴스에는 우리가 만든 인스턴스를 지정하고 연결하면 된다.
연결이 안된다면 맥은 시스템 환경설정 > 공유 > 원격 로그인에 체크되어있는지 확인해야한다.
10) WinSCP 설치
FTP 프로토콜로 접근할 수 있게 해주는 클라이언트 프로그램이다. 리눅스 서버의 경우 특히 파일을 주고받기 더 까다롭기 때문에 파일 전송에 유용하게 쓰일 수 있다. 마찬가지로 포트는 22를 사용한다. 하지만 이 WinSCP도 윈도우 전용이라서 맥북은 사이버덕을 사용하면 된다고 한다 :)
4. 리눅스 명령어 소개 및 관련 프로그램 설치
우분투의 apt-get이라는 패키지 관리자를 이용해 다양한 서버 프로그램(노드, MySQL) 등을 설치할 것이다.
0) ubuntu 홈으로 이동
sudo su
root@ip-~~~ :/home/ubuntu#으로 이동한 모습을 볼 수 있다.
1) 패키지 관리자 업데이트
apt-get update
2)nginx 다운
패키지 관리자가 nginx 라는 웹서버를 설치해준다.
apt-get install nginx
3) port 연결
이 과정만으로는 우리가 빌린 ip주소를 쳐도 연결이 안된다. HTTP 방식의 port가 열려있지 않기 때문이다. 터미널로 연결이 가능하지만 AWS에서도 가능하다.
- AWS 보안 탭 클릭
- 보안그룹 주소를 클릭한다.
- 그 안의 인바운드 규칙 탭에 들어가서 'Edit inbound tules' 버튼을 누른다.
- 규칙 추가 버튼을 눌러 HTTP/TCP/80/Anywhere IPv4를 선택해준다.
- 규칙 저장 버튼을 누른다.
- ip주소로 접속 시 Welcome to nginx! 페이지가 보이면 성공
4) node 설치
apt-get install nodejs
node -v //버전확인
//버전 업그레이드하는 방법
# n 패키지 설치
$ sudo npm install -g n
# lts(최신버전)로 업그레이드
$ sudo n lts
# 10.16.0(특정버전) 으로 업그레이드
$ sudo n 10.16.0
4) MySQL 다운하기
apt-get install mysql-server
//설치 후 접근 (초기 비밀번호는 없다 그냥 엔터)
mysql -u root -p
//비밀번호 설정
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '원하는 password 입력';
//나가는 법
exit;
5) MySQL 외부접속
현재까지 서버(nginx), 백엔드(nodejs), DBMS(MySQL) 설치를 완료했다. 그렇다면 aws 인스턴스에 설치해둔 MySQL에 접근할 수 있도록 외부접속 설정을 해보도록 하겠다.
- grant all privileges on *.* to '아이디'@'%' identified by '패스워드'; //모든 ip 허용
- flush privileges; //권한변경 저장
- exit; //mysql 종료
- vi /etc/mysql/mysql.conf.d/mysqld.cnf //mysql 설정 파일 접근
- bind-address를 i를 눌러 #으로 주석처리한다. (127.0.0.1은 로컬 접근만 허용)
- bind-addredd = 0.0.0.0으로 해준다. //ip 대역 변경
- esc키를 눌른 후 :wq!를 쓰고 엔터를 누른다. (저장하고 나가기)
- service mysql restart //mysql 재시작
5. mysql 접근
1) mysql에 새로운 유저를 생성한다.
create user 'sanha'@'%' idetified by 'ssafy';
- 'Username'@'%' : 해당 사용자는 외부에서 접근 가능
- 'Username'@'localhost' : 해당 사용자는 내부에서만 접근 가능
- 'Username'@'xxx.xxx.xxx.xxx' : 해당 사용자는 지정한 ip주소로만 접근 가능
use 특정데이터베이스;
select user, host from user;
위 명령어를 통해 user가 잘 생성되었는지 확인 가능하다.
2) 테스트 데이터베이스를 생성한다.
create database testDB;
show databases;
3) 테스트 데이터베이스에 권한을 부여한다.
grant all privileges on testDB.* to 'sanha'@'%';
flush privileges;
show grants for 'sanha'@'%'; // 확인
4) mysql 재시작
sudo service mysql restart
5) 워크벤치 실행 후 셋팅
Store in Keychain을 눌러 mysql user sanha의 password를 입력하면 된다. 그 후 Test Connection을 누르면 다음과 같이 뜬다.
6) 연결이 안된다면?
그 이유는? port가 연결 안되어있기 때문이다.
위에 했던 것처럼 또 mysql port를 추가해줘야 한다.
- AWS 보안 탭 클릭
- 보안그룹 주소를 클릭한다.
- 그 안의 인바운드 규칙 탭에 들어가서 'Edit inbound tules' 버튼을 누른다.
- 규칙 추가 버튼을 눌러 MYSQL/Aurora/TCP/3306/Anywhere IPv4을 입력해준다.
- 규칙 저장 버튼을 누른다.
- MySQL 외부 연결이 성공하면 끝!
6. EC2 회수
1) 탄력적 IP 연결 해제
릴리즈까지 해주면 아예 삭제된다.
2) 인스턴스 종료
인스턴스 중지가 아닌 종료는 서버 삭제와 같다 :)
3) 보안그룹 삭제
4) 안쓰는 키페어도 삭제
네트워크 및 보안 > 키페어 > 삭제할 키페어 선택 후 삭제
그동안 백엔드나 인프라 담당자가 쳐주는대로 보기만 했는데,
직접 해보니 어떤 식으로 외부 MySQL이 연결되고, 쓰이는지 이해가 간다 :)
'INFRA > 배포' 카테고리의 다른 글
Permission denied (publickey) 해결 with 맥북 연결 (0) | 2023.12.30 |
---|