AWS EC2로 서버 만들기

jjunhwan.kim·2022년 1월 28일
5

AWS 사용하기

목록 보기
1/4
post-thumbnail

이 포스팅은 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 책을 보고 정리한 내용입니다. 책에서는 아마존 리눅스1을 기준으로 설명하고 있으나 현재는 아마존 리눅스2만 지원되므로 이에 맞게 설명합니다.

AWS란?

  • AWS(Amazon Web Service)라고 하는 클라우드 서비스를 이용해 물리적인 서버 컴퓨터 없이 원격으로 서버를 생성하여 이용할 수 있다.
  • 이번 포스팅에서는 AWS의 EC2 서버를 생성하고 기본적인 설정을 해본다.

1. AWS 회원가입

  • AWS 사이트(https://aws.amazon.com/ko/)에 접속하여 회원가입을 한다.
  • 회원 가입할 때 신용카드가 필요하다.
  • 첫 가입시 프리 티어 혜택으로 12개월동안 일부 서비스를 무료로 사용할 수 있다.
  • 프리 티어 혜택은 조건이 있으므로 자세한 건 구글에 검색해서 찾아보자.

2. EC2 인스턴스 생성

  • EC2는 AWS에서 제공하는 원격으로 연결할 수 있는 하나의 컴퓨터이다. 가상머신이라고 생각하면 될 것 같다.
  • 프리 티어에서 제공되는 성능, 용량 등이 정해져있다.
  • 프리 티어에서 1대의 컴퓨터로 월 750시간까지 무료로 사용할 수 있다. 예를 들어, EC2 2대를 24시간 1달 내내 사용한다면 EC2 1대의 비용이 부과된다.
  1. AWS 사이트 우측 상단의 리전을 서울로 설정한다.
  2. AWS 사이트 상단에 있는 검색창에서 EC2를 검색한다.
  3. EC2 대시보드에서 인스턴스 시작을 선택한다.
  4. 인스턴스에 설치할 운영체제를 선택한다. 윈도우, 맥, 리눅스 등 여러 종류가 있고 프리 티어에서 사용 가능한 운영체제는 "프리 티어 사용 가능" 이라고 표시되어있다. 이 중 아마존 리눅스2를 선택한다.
  5. 성능 사양을 선택한다. 프리 티어에서는 t2.micro만 사용가능하므로 이를 선택하고 세부 정보 구성을 선택한다.
  6. 인스턴스 세부 정보 구성 설정이다. 일단 별다른 설정 없이 다음 설정인 스토리지 추가로 넘어간다.
  7. 스토리지 설정에서 서버의 SSD 용량을 설정한다. 프리 티어에서 30GB까지 사용할 수 있으므로 30GB로 변경하고 태그 추가 설정으로 넘어간다.
  8. 태그를 설정한다. 태그는 AWS 웹 콘솔에서 표시된다. 간단하게 키 이름은 Name으로 값은 인스턴스를 나타내는 이름으로 입력한다. 다음으로 보안 그룹 구성으로 넘어간다.
  9. 보안 그룹에서 방화벽을 설정한다. 먼저 EC2에 터미널로 접속하기 위해 SSH를 "내 IP"로 설정한다. 전체 오픈하는 것은 위험하다. 그리고 사용자 지정 TCP 8080 포트와 HTTPS를 "모든 IP"로 설정한다.
  10. 8080포트가 모든 IP에 개방되어있다고 보안을 개선하라는 메시지가 뜨지만 문제없으므로 시작하기를 선택한다.
  11. EC2 인스턴스에 접근하기위해 필요한 프라이빗 키인 pem파일을 다운로드하고, 인스턴스 시작을 선택한다. pem키는 절대 유출되면 안된다.
  12. 인스턴스가 성공적으로 시작된다. 인스턴스 보기를 선택하여 EC2 인스턴스 목록으로 이동한다.

3. EIP 할당

  • EIP는 탄력적 IP로 고정 IP를 할당하는 것을 말한다. 외부에서 EC2 인스턴스에 접근하려면 IP가 고정되어있는 것이 편하므로 고정 IP를 할당한다.
  • EIP를 할당하고 EC2 인스턴스에 연결하지 않으면 아마 요금이 부과될 것이다. 자세한 건 구글에 검색해서 찾아보자.
  1. 왼쪽 메뉴에서 탄력적 IP를 선택한다.
  2. 탄력적 IP 주소 할당을 선택한다.
  3. 할당을 선택하여 탄력적 IP를 생성한다.
  4. 할당된 IP를 선택하고 작업 -> 탄력적 IP 주소 연결을 선택한다.
  5. 인스턴스 목록에서 생성한 EC2 인스턴스를 선택하고 연결을 선택한다.
  6. 이제 탄력적 IP주소를 통해서 EC2 인스턴스에 접근할 수 있다.

4. EC2 접속

  • 맥OS를 기준으로 EC2에 접속하는 방법을 설명한다. 맥OS의 터미널을 이용해 EC2에 SSH 접속을 한다.
  • EC2 인스턴스 생성시 보안그룹에서 설정한 SSH에 등록된 IP주소의 컴퓨터로만 접속할 수 있다. 다른 컴퓨터로 접속하려면 보안그룹 설정에 IP를 추가해야 한다.
  1. 먼저 EC2 인스턴스 생성시 받은 pem파일을 ~/.ssh 경로로 복사한다.
    만약 todo-app-backend.pem파일이 데스크탑의 aws/ec2 디렉토리에 있다면 터미널에서 아래와 같이 입력한다.
cp ~/Desktop/aws/ec2/todo-app-backend.pem ~/.ssh
  1. 아래 명령어로 잘 복사되었는지 확인할 수 있다.
cd ~/.ssh
ll
  1. 아래 명령어로 권한을 변경한다.
chmod 600 ~/.ssh/todo-app-backend.pem
  1. ~/.ssh 디렉토리에 config파일을 생성한다.
vim ~/.ssh/config
  1. config파일에 아래와 같이 입력한다. Host는 접속할 키 값이고, HostName에는 탄력적 IP 주소를 입력한다.
  2. config파일의 권한을 설정한다.
chmod 700 ~/.ssh/config
  1. 아래의 명령어로 EC2에 접속한다. 접속종료시에는 exit를 입력한다.
ssh todo-app-backend

5. 아마존 리눅스2 설정

스프링 웹 애플리케이션을 동작시키기위해 필요한 설정을 한다.

1. Java 11 설치

아마존 리눅스2에 기본적으로 자바가 설치되어있지않다. 아래 명령어를 순차적으로 입력하여 자바11을 설치한다.

sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm # JDK 11 다운로드
sudo yum localinstall jdk11.rpm # JDK 11 설치
sudo /usr/sbin/alternatives --config java # EC2의 Java 버전 설정
java -version # Java 버전 확인
rm -rf jdk11.rpm # 설치 파일 삭제

2. 타임존 변경

아래 명령어를 순차적으로 입력하여 기본 타임존인 UTC를 한국시간 KST로 변경한다. date 명령어로 현재 타임존을 확인할 수 있다.

sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date # 타임존 확인 명령어

3. 호스트이름 변경

SSH 터미널에서 IP로 표시되는부분을 변경하는 설정이다. 자세한 설정은 공식 문서를 참고하자.
(https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/set-hostname.html)

  1. hostnamectl 명령으로 호스트 이름을 설정하여 원하는 시스템 호스트 이름을 반영한다. 아래에서는 todo-app-backend라는 이름으로 반영하였다.
sudo hostnamectl set-hostname todo-app-backend.localdomain
  1. /etc/sysconfig/network 구성 파일을 열고 HOSTNAME 항목을 변경하여 원하는 호스트 이름을 반영한다.
sudo vi /etc/sysconfig/network
# /etc/sysconfig/network 파일에 아래처럼 HOSTNAME을 변경한다.
HOSTNAME=todo-app-backend.localdomain
  1. /etc/hosts 파일을 열고 127.0.0.1로 시작되는 항목을 추가한다.
sudo vi /etc/hosts
# /etc/hosts 파일에 아래처럼 원하는 호스트이름을 추가한다.
127.0.0.1   todo-app-backend.localdomain todo-app-backend
  1. 아래 명령어를 입력하여 재부팅한다.
sudo reboot
  1. 아래 명령어를 입력하여 다시 접속하여 변경된 호스트 이름을 확인한다.
ssh todo-app-backend

지금까지 AWS EC2 서버를 생성하고 기본적인 설정을 하였다. 다음 포스팅에서는 AWS에서 제공하는 관계형 데이터베이스인 RDS를 생성하고 설정해보자.

0개의 댓글