배포(Deployment)란?
다른 사용자들이 인테넛을 통해서 사용할 수 있게 만드는 것을 의미
개발을 할 때는 localhost라는 주소로 테스트도 하고 개발을 하는데, 다른 컴퓨터에서는 접근이 불가능하다.
배포를 하게 되면 IP(ex. 124.16.2.1)나 도메인(ex. www.naver.com)과 같이 고유의 주소를 부여받게 되고, 다른 컴퓨터에서 그 주소로 접속할 수 있게 되는데 이것이 바로 배포(Deployment)다.
EC2 (Elastic Compute Cloud) 란?
컴퓨터를 빌려서 원격으로 접속해 사용하는 서비스
서버를 배포하기 위해서는 컴퓨터가 필요하다.
내 컴퓨터에서 서버를 배포했을 때 고려되는 문제점
- 내 컴퓨터로 서버를 배포하면 24시간 동안 컴퓨터를 켜놔야 한다.
- 인터넷을 통해 내 컴퓨터에 접근할 수 있게 만들다보니 보안적으로도 위험할 수도 있다.
이러한 불편함 때문에 AWS EC2라는 컴퓨터를 빌려서 사용하는 것이다.
이 외에도 AWS EC2는 여러 부가기능들(로깅, 오토스케일링, 로드밸런싱 등)을 많이 가지고 있다.
AWS EC2는 주로 백엔드 서버를 배포할 때 사용한다.
프론트 엔드는 AWS EC2보다 vercel, netlify 또는 AWS S3를 사용해서 주로 배포
AWS EC2 시작하기
먼저 회원가입을 한 후, 로그인을 하면
콘솔 홈이 뜬다!
검색창에 EC2를 검색하고 접속하자.
1. 리전(Region) 선택하기
가장 먼저 리전을 세팅해야 한다.
Region이란?
인프라를 지리적으로 나누어 배포한 각각의 데이터 센터를 의미
AWS에서 자주 쓰이는 용어다.
EC2가 컴퓨터를 빌려서 원격으로 접속해 사용하는 서비스인데, 해당 컴퓨터는 실제로 존재할 것이고, 전세계적으로 분포가 되어 있다. 컴퓨터가 위한 위치를 AWS에서는 리전(Region)이라고 한다.
리전(Region)의 특징
- AWS는 전 세계적으로 다양한 Region을 보유하고 있다.(전세계 모두는 아님)
- 각 Region은 고유의 이름을 가지고 있다.
- ex) us-east-1, eu-west-3
리전(Region) 선택 기준
애플리케이션의 주된 사용자들의 위치와 지리적으로 가까운 리전(Region)을 선택하는 것이 유리
ex) 한국 유저들이 주로 사용하는 서비스를 만들거라면 리전(Region)을 아시아 태평양(서울)로 선택
사람들이 애플리케이션을 사용할 때는 네트워크를 통해 통신하는데 사용자의 위치와 애플리케이션을 실행시키고 있는 컴퓨터와 위치가 멀면 멀수록 속도가 느리기 때문에 가까운 리전을 선택하는 것이 좋다.
참고
우리는 통신을 해야한다! (웹페이지 받을 때, 데이터 받을 때 등등)
이 통신은 전기선을 통해 신호를 받고 신호에 맞는 전기를 통해 데이터를 송수신 한다.
전기도 거리가 멀수록 시간이 오래걸리기 때문에 통신이 느려지는 것이다.
주의점
리전(Region)마다 EC2가 따로따로 관리가 되고 있다.
아시아 태평양(서울) 리전에서 EC2를 생성하고 실수로 미국 동부(버지니아 북부) 리전에 들어가면 EC2는 없으니 주의
2. EC2 빌리기
기본 설정
인스턴스 시작 누르기
1. 이름 및 태그: EC2의 이름을 설정하는 곳
여러 컴퓨터를 빌리면 컴퓨터마다 이름을 지정할 수 있다.
일반적으로 이름은 어떤 역할을 하는지 알아볼 수 있도록 작성하는 것이 좋다.
ex) instagram-server
2. Application and OS Images (Amazon Machine Image)
OS를 선택하자.
Windows와 macOS는 쉽게 쓰기위한 기능이 많기 때문에 용량이 크다.
그래서 서버를 배포할 때 필요한 기능만 있는 OS를 선택하는 것이 유리하다.
그래서 여기선 가볍고 성능이 좋은 Ubuntu를 선택하고 버전은 그대로 최신 버전을 사용한다.
3. 인스턴스 유형
인스턴스: AWS EC2에서 빌리는 컴퓨터 1대를 의미
인스턴스 유형: 컴퓨터 사양을 의미
컴퓨터 사양이 좋으면 좋을수록 많은 수의 요청을 처리할 수 있고, 무거운 서버나 프로그램을 돌릴 수 있다.
프리 티어에 해당하는 t2.micro를 사용
t3a.small
사용 안하면
t2 micro swap 검색해서 해보기
https://tech.zinnunkebi.com/it-tip/webservice_building/aws-t2-micro-swap-allocate/
아래는 t2 micro를 했을 경우 EC2 설치를 완료하고 EC2에 접속해서 메모리를 증설하는 내용이다.
따라서 필요없다면 다음 단계로 넘어가도 된다.
free로 확인한 초기 메모리 상태는 아래와 같다.
~$ free
total used free shared buff/cache available
Mem: 980400 338456 483888 888 313472 641944
Swap: 0 0 0
df를 통해 디스크 사용량을 알 수 있다.
~$ df --total
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 29378688 1633040 27729264 6% /
tmpfs 490200 0 490200 0% /dev/shm
tmpfs 196080 876 195204 1% /run
tmpfs 5120 0 5120 0% /run/lock
/dev/xvda16 901520 77020 761372 10% /boot
/dev/xvda15 106832 6246 100586 6% /boot/efi
tmpfs 98040 12 98028 1% /run/user/1000
total 31176480 1717194 29379774 6% -
가상 메모리 증설
# 1. swap 파일 생성
~$ sudo dd if=/dev/zero of=/swapfile bs=64M count=32
32+0 records in
32+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 14.6486 s, 147 MB/s
# 2. swap 파일 권한 설정
~$ sudo chmod 600 /swapfile
# 3. swap 영역 설정
~$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=8adfd38f-a613-4761-8d0a-a16664962aa2
# 4. swap 파일 활성화
~$ sudo swapon /swapfile
# 5. 활성화된 swap 파일 확인
~$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
- swap 파일 생성(dd)
- if=/dev/zero: 입력 파일로 /dev/zero를 사용
- /dev/zero는 0으로 채워진 바이트 스트림을 제공하는 특수 파일
- of=/swapfile: 출력 파일을 /swapfile로 지정하여 스왑 파일 생성
- bs=64M: 블록 크기를 64MB로 설정합니다.
- count=32: 32개의 블록을 생성하여 총 2GB(64MB * 32)의 파일 생성 (1024MB = 1GB)
- if=/dev/zero: 입력 파일로 /dev/zero를 사용
- 권한 설정
- /swapfile 파일의 권한을 600으로 설정 - 소유자만 읽기 및 쓰기 권한
- 보안 상의 이유로 스왑 파일에 대한 접근 권한을 제한하는 것이 중요
- /swapfile 파일의 권한을 600으로 설정 - 소유자만 읽기 및 쓰기 권한
- 영역 설정
- mkswap: 스왑 파일로 사용할 수 있도록 /swapfile을 스왑 영역으로 설정
- 이 명령어를 실행하면 해당 파일이 스왑 공간으로 준비
- mkswap: 스왑 파일로 사용할 수 있도록 /swapfile을 스왑 영역으로 설정
- 스왑 파일 활성화
- swapon: /swapfile을 활성화
- 시스템이 이 파일을 스왑 메모리로 사용할 수 있게 됨
- swapon: /swapfile을 활성화
- 활성화된 스왑 확인
- Filename: /swapfile이 스왑 파일로 등록
- Type: file 기반 스왑 공간임을 나타냄
- Size: 스왑 파일의 크기(2097148 KB ≈ 2GB).
- Used: 현재 사용 중인 스왑 용량 (지금은 0KB 사용 중).
- Priority: 스왑 파일의 우선 순위(-2).
- 여러 스왑 파일/파티션이 있을 때 어떤 순서로 사용할지 결정
- /etc/fstab에 /swapfile 정보를 추가
- “리눅스 컴퓨터 부팅시 mount 정보“를 저장하고 있는 /etc/fstab에 /swapfile 정보를 추가
$ sudo vi /etc/fstab
...중간생략...
#마지막 라인에 추가
/swapfile swap swap defaults 0 0
i 가 insert mode, :wq가 저장
- 확인
~$ free
total used free shared buff/cache available
Mem: 980400 339016 151776 896 651616 641384
Swap: 2097148 0 2097148
t2.micro는 학습할 때나 테스트할 때만 쓰는 안 좋은 사양의 컴퓨터일까?
실제 서비스에서 활용해도 될 정도로 나름 괜찮은 사양이라 한다.
하루 방문자 수가 2,000명 정도였던 서비스를 운영했었는데 문제 없이 잘 돌아갔다고 한다.
4. 키 페어(Key Pair)(로그인)
키 페어: EC2 컴퓨터에 접근할 때 사용하는 비밀번호라고 생각하면 된다. 열쇠(Key, 키)의 역할을 한다.
빌린 컴퓨터에 아무나 접근하지 못하도록 막는 용도이다.
키 페어 이름은 어떤 EC2에 접근하기 위한 키 페어였는 지 알아볼 수 있게 지정하면 좋다.
ex) instagram-server-key-pair
키 페어를 생성하면 파일이 하나 다운받아질텐데, 이 파일은 EC2에 접속하는 용도로 사용할 수 있다.
잃어버리면 안 되니 잘 보관해놔야 한다. 유출되면 다른 사람도 빌린 EC2에 접근이 가능해 진다.
실습에서는 키 페어를 활용해서 EC2에 접근하지 않고, 더 편한 방법으로 접근할 예정이다.
보안 그룹 설정
먼저 편집을 누른다.
보안 그룹(Security Group)
보안그룹: AWS 클라우드에서의 네트워크 보안을 의미
EC2 인스턴스를 집이라고 생각한다면, 보안 그룹은 집 바깥 쪽에 쳐져있는 울타리와 대문이라고 생각하면 된다.
집에 접근할 때 울타리의 대문에서 접근해도 되는 요청인지 보안 요원이 검사를 하는 것과 비슷하다.
인터넷에서 일부 사용자가 EC2 인스턴스에 접근하려고 할 때
- EC2 인스턴스 주위에 방화벽 역할을 할 보안 그룹(Security Group)을 만들고
- 보안 그룹에 규칙을 지정
보안 규칙을 크게 두가지로 나눌 수 있다.
1. 인바운드 트래픽(즉, 외부에서 EC2 인스턴스로 보내는 트래픽)에서 어떤 트래픽만 허용할 지 설정할 수 있다.
2. 아웃바운드 트래픽(즉, EC2 인스턴스에서 외부로 나가는 트래픽)에서 어떤 트래픽만 허용할 지 설정할 수 있다.
보안 그룹을 설정할 때는 허용할 IP 범위와 포트(port)를 설정할 수 있다.
EC2 인스턴스 생성 때 보안 그룹(Security Group) 설정
- 보안 그룹 이름: instagram-server-security-group
- 유형
- ssh: 원격 접속하기 위한 경로
- http
- 포트 범위: 접근 포트는 22번 포트와 80번 포트 2가지
- 22: EC2에 원격 접속할 때 사용하는 포트
- 80: 백엔드 서버를 띄울 포트여서 서버에 요청이 들어와야 응답이 가능해짐.
IP & PORT
IP: 네트워크 상에서의 특정 컴퓨터를 가리키는 주소
PORT: 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소 (한 컴퓨터 내에서는 여러 프로그램이 실행되고 있다)
- 잘 알려진 포트(well-known port)
포트 번호는 0 ~ 65,535번까지 사용할 수 있다.
그 중 0 ~ 1023번까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있다.
이렇게 규약을 통해 역할이 정해져있는 포트 번호를 보고 잘 알려진 포트(well-known port)라 부른다.- 22번 (SSH, Secure Shell Protocol) : 원격 접속을 위한 포트 번호
- EC2 인스턴스에 연결할 때 22번 포트를 사용한다.
- 80번 (HTTP) : HTTP로 통신을 할 때 사용
- 443번 (HTTPS) : HTTPS로 통신을 할 때 사용
- 22번 (SSH, Secure Shell Protocol) : 원격 접속을 위한 포트 번호
위에서 정해놓은 규약을 꼭 지키지 않아도 된다.
규약으로 정해져 있는 포트 번호와 다르게 사용해도 된다.
ex) 특정 서버와 HTTP 통신을 할 때 80번 포트를 쓰지 않고 3000번 포트나 8080번 포트를 써도 상관 없다.
스토리지 구성
고급 선택
우리가 쓰고 있는 노트북이나 데스크톱 컴퓨터는 전부 하드디스크를 가지고 있다.
하드디스크: 컴퓨터에서 파일을 저장하는 공간
EBS(Elastic Block Storage)
EC2도 여러 파일들을 저장할 저장 공간이 필요하다. 이 저장 공간을 보고 EBS(Elastic Block Storage)라고 부른다.
EBS란 EC2 안에 부착되어 있는 일종의 하드디스크라고 생각하면 된다.
EBS와 같은 저장 공간을 조금 더 포괄적인 용어로 스토리지(Storage), 볼륨(Volume)이라고 부른다.
- 스토리지의 종류: gp3 이외에도 여러가지 종류의 스토리지가 있지만 가성비가 좋은 gp3를 선택
- 용량은 30GiB 선택(이유는 프리 티어에서 30GiB까지 무료로 제공)
스토리지의 크기는 추후에 늘릴 수도 있으므로 처음 설정할 때 너무 큰 고민을 할 필요는 없다.
이제 인스턴스 시작을 누르자!
EC2 대시보드
-> 인스턴스(실행 중)
-> running x
인스턴스 상태 실행 중
EC2 인스턴스 살펴보기
퍼블릭 IPv4 주소
EC2 인스턴스가 생성되면서 부여받은 IP 주소
EC2 인스턴스에 접근하려면 이 IP 주소로 접근하면 된다.
인스턴스 상태
말그대로 EC2 인스턴스가 실행 중이라는 뜻은 컴퓨터가 켜져있다는 뜻
EC2 인스턴스를 중지, 재부팅, 종료도 할 수 있다.
- 재부팅: 말그대로 컴퓨터를 재시작시키는 것
- 중지: 컴퓨터를 잠시 꺼놓는 것
- 종료: 컴퓨터를 아예 삭제시킨다는 것
EC2 인스턴스를 한 번 종료하면 도중에 취소할 수 없으니 주의
보안
인스턴스 생성 시 설정한 보안 그룹에 대한 정보를 볼 수 있다.
설정한 보안 규칙 인바운드, 아웃바운드를 볼 수 있다.
아웃바운드 규칙은 직접 설정하진 않았지만 기본적으로 모든 포트 범위에 대해 (0.0.0.0) 모든 IP를 허용하겠다는 설정이 되어 있다.
네트워크
IP주소 확인
퍼블릭 IPv4 주소를 보면된다.
스토리지
인스턴스 생성 시 설정한 스토리지 정보
모니터링
EC2 인스턴스에 관련한 여러가지 정보를 볼 수 있는 창
AWS를 실제 서버를 운영할 때는 자주 보게되는 창이다.
EC2 인스턴스가 정상적으로 작동하고 있는 지,
EC2 인스턴스의 성능을 향상시켜주어야 하는 건 아닌 지
지표를 통해 파악할 수 있다.
연결하기
EC2 인스턴스 연결
AWS에서 로그인해서 홈페이지 자체에서 컴퓨터를 그 빌린 컴퓨터에 원격 접속하는 방식
사용자 이름은 그냥 기본 값인 Ubuntu로 그대로 사용했다.
연결을 누르면 EC2 인스턴스를 생성한 컴퓨터에 접속한다.
검은 화면은 Ubuntu라는 OS 기반으로 깔려있는 컴퓨터라 보면된다.
상위 폴더로 이동하면 우분투를 살 때 세팅되어 있는 기본 파일들을 확인할 수 있다.
명령어
pwd, ls, cd ..
출처
'devops > AWS' 카테고리의 다른 글
[AWS] CI/CD Github Actions, SCP로 빌드된 파일 전송하기 (0) | 2024.07.29 |
---|---|
[AWS][S3] 파일 저장 서비스 S3 (0) | 2024.05.13 |
[AWS][EC2] 백엔드 API 서버를 배포하기 - sprint boot 서버 EC2에 배포 (0) | 2024.05.13 |
[AWS][EC2] 백엔드 API 서버를 배포하기 - 탄력적 IP 연결 (0) | 2024.05.13 |