[프로젝트]AWS 배포 - 인스턴스 생성 및 설정

Inung_92·2023년 3월 28일
1

프로젝트

목록 보기
7/9
post-thumbnail

개요

⚡️ 개발환경

  • Front - React.js
  • Back - SpringFramework(legacy) 4.3.30
  • DB - MySql5.7
  • Server - Tomcat 9
  • Tool - 전자정부프레임워크 3.0(수업목적), VScode
  • Build - maven
  • Mac OS

⚡️ AWS EC2란?

📖Amazon Elastic Compute Cloud의 약자로 클라우드에서 확장 가능 컴퓨팅 용량을 제공

쉽게 이야기하면 클라우드에서 확장이 가능한 가상의 컴퓨터를 제공한다고 생각하면된다. 이렇게되면 하드웨어에 선투자할 필요없이 빠르게 애플리케이션을 개발하고 배포가 가능해진다.

간단하게 제공하는 기능만 알고 넘어가자.

  • 인스턴스 : 가상 컴퓨텅 환경
  • AMI : 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿(인스턴스를 간편하게 만들 수 있게 활용가능)
  • 키페어 : 인스턴스 로그인 정보 보호 및 로컬에서 원격 접속 시 사용(지우면 안됨)
  • 인스턴스 스토어 볼륨 : 임시 데이터를 저장하는 스토리지 볼륨으로 중요한 부분은 인스턴스 중단, 최대 절전 모드로 전환 또는 종료시 삭제됨
    -보안그룹 : 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스IP 범위를 지정하는 방화벽 기능
    -탄력적IP : 접속 시 마다 변경되는 IP를 고정적으로 사용할 수 있도록 지원

글을 읽어도 잘 와닿지 않을 것이다. 지금 글을 쓰고 있는 나 역시도 마찬가지이다. 그러니 거두절미하고 인스턴스를 생성하러 가보겠다.


인스턴스 생성 및 설정

⚡️ 생성 준비

먼저 AWS를 클릭하여 무료계정생성을 통해 회원가입을 하자.

회원가입이 완료되면 우측 상단의 콘솔에 로그인 버튼을 클릭하여 로그인을 하면 아래와 같은 화면이 출력된다.

위 화면에서 처럼 서비스를 클릭하여 EC2를 찾아도 되지만 한국인이라 성격이 급한 우리는 아래처럼 빠르게 검색을하여 들어가주자.

EC2를 클릭하면 아래와 같이 인스턴스 생성을 할 수 있는 페이지로 이동한다. 최초 화면에서 우측 상단을보면 지역을 정할 수 있는 메뉴가 보이는데 서울을 선택하여주자.

지역 선택까지 완료가 되었다면 인스턴스를 생성하겠다. 아래 사진에서 보이는 것처럼 좌측 또는 중앙의 인스턴스를 클릭하여 생성페이지로 이동하자.

이동하면 아래와 같은 화면이 나올 것이다. 나는 사전에 만든 인스턴스가 있기 때문에 리스트에 조회가 되는 것이며, 처음하시는 분들은 인스턴스가 없을 것이다. 우측 상단의 인스턴스 시작을 눌러서 생성페이지로 이동하자.

이제부터 본격적으로 인스턴스를 생성하는 과정이다. 먼저 이름을 지정해주자. 본인이 마음에 드는 이름으로 지정하면 된다. 이후 AMI을 선택해주면 되는데 나는 ubuntu를 선택했다. 여기서 중요한 점은 '프리티어 사용 가능'이라는 문구가 붙어있는지 반드시 확인해주자.

1번은 위에서 설명한 ubuntu를 선택 시 출력되는 사항이며, 우측에 프리티어 사용가능이라는 문구가 보일 것이다. 2번 아키텍처는 64비트(x86)과 64비트(arm)이 있으니 원하는 것을 선택해주자. 3번 인스턴스 유형은 목록을 누르면 선택할 수 있는 유형이 굉장히 많이 나온다. 그중에 지금 사진에 보이는 것만 프리티어 사용가능 문구가 붙어 있으니 말안해도 알 것이라 생각한다. 참고로 유형에 따라 CPU 또는 메모리 성능과 요금의 차이가 있다.

인스턴스 유형 하단의 키페어 메뉴에서 생성을 누르면 아래와 같은 화면이 나온다. 키 페어는 위에서 설명한 것처럼 프라이빗 키로 사용이 되며, 로컬 PC에서 터미널을 이용해 원격접속 시 필요하니 반드시 잘 저장해주자!(키 페어를 모르고 삭제해서 키를 재발급 받고 볼륨을 임시 인스턴스로 옮겨서....등등 해줄 것이 많다.😞)
이름 아래의 2개는 현재 단계에서는 선택할 필요없이 기본값으로 하면된다. 하지만 putty라는 툴을 사용할 예정이라면 형식은 .ppk로 선택하자.

아래는 보안그룹을 설정하는 것인데 현재 단계에서는 그냥 기본값으로 설정하고 지나가도록 하자.

스토리지 구성의 경우에는 해당 인스턴스의 얼만큼의 용량을 부여할 것인지를 지정하는 것이다. 프리티어는 최대 30GB이니 인스턴스를 추가로 생성할 예정이라면 적당한 용량을 할당해주자. 나는 참고로 인스턴스를 2개 이상만들지 않을 예정으로 15GB를 할당하였다.

여기까지했다면 고급 세부정보 등은 패스하고, 제일 하단의 주황색 인스턴스 시작 버튼을 눌러주면 된다. 그리고 잠시 기다리면 인스턴스 목록에 방금 생성한 인스턴스가 뜰 것이다.

⚡️ 인스턴스 접속 및 초기 설정

인스턴스가 생성되었으니 접속을 해보겠다. 먼저 2가지 방법이 있다.

  • AWS를 이용하여 직접 연결하는 방법
  • 로컬 PC를 이용하여 원격 접속하는 방법

AWS를 직접 접속해도 되지만 이왕이면 원격접속을 통해 자신이 편하게 설정해준 터미널 UI안에서 익숙하게 작업을 하는게 낫지 않을까 싶다. 추가로 로컬에서 서버로 파일을 보낼때에도 원격접속이 편한 경우가 많다. 나는 MacOS를 사용하기 때문에 MacOS를 기준으로 설명하겠다. 윈도우의 경우 Linux가 실행되는 터미널을 사용하면 될 것이다.

🖥️ 접속

/*key pair 파일 이동*/
sudo mv 폴더명/키페어파일명.pem ~

편하게 이동을 해주기 위해서 cd를 이용해 실제 설치한 위치로 이동하여 명령어를 입력하는 것이 좋다. 위와 같이 입력하면 ~ 디렉토리로 키 페어 파일이 이동한다. 그럼 아래와 같이 입력하여 원격 접속을 수행하자.

chmod 400 키페어이름.pem //키페어 공개여부 설정
ssh -i 키페어이름.pem ubuntu@ip //원격접속

정상적으로 따라했다면 아래와 같은 화면이 출력된다.

연결이 완료된 것이다. 이제 명령어를 이용해서 제어할 수 있다. 사용을 하기 위해서는 몇가지 설정을 사전에 해주는 것이 편하다.

🖥️ 설정

패키지 업데이트
서버 접속을 성공했다면 아래의 명렁어를 통해 패키지를 업데이트 해주자

sudo apt update
sudo apt upgrade

//중간에 y/n를 묻는다면 y를 입력 후 엔터

타임존 설정

sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

기본적으로 설정된 지역은 우리나라가 아닐 가능성이 높다. 그렇기 때문에 서울을 기준으로 타임존을 설정해주자.

계정 비밀번호 설정

sudo passwd [계정명] [비밀번호]

ex) sudo passwd root 1234

이렇게 설정을 해주어야 나중에 DB 또는 톰캣을 실행할 때 명령어 접근 권한을 승인할 수 있다.

탄력적IP 생성
탄력적IP는 매번 인스턴스를 실행할때마다 변하는 IP를 고정하기 위해 사용한다.

우측 상단의 버튼을 클릭하여 탄력적 IP를 할당하기 위해 이동하자.

기본적으로 생성될 정보들이 작성되어있으니 할당을 눌러주면 탄력적 IP주소가 생성된다. 생성된 탄력적IP를 클릭하면 아래와 같이 화면이 나올 것이다. 우측 상단에 연결 버튼을 클릭하자.

아래 화면처럼 주소를 연결해주는 페이지가 출력되고, 해당 페이지에서는 원하는 인스턴스를 선택하고 탄력적IP를 연결하면된다. 다른 부분은 현재 단계에서 수정할 필요는 없다.

연결이 완료되고 인스턴스로 돌아와보면 아래와 같이 퍼블릭IPv4 주소와 탄력적IP 주소가 동일한 것을 볼 수 있다.

이렇게하면 탄력적IP 설정도 마무리되었다.

스왑 영역 만들기(*중요)
스왑 영역을 설명하기에 앞서 가상 메모리에 대해서 알아보자.

가상 메모리란?

운영체제에서 실행 중인 프로세스에 할당할 메모리를 RAM 용량보다 2~3배 크게 할당된 메모리를 가상 메모리라고 한다. 즉, 이 운영체제에서 사용하는 메모리 주소는 RAM의 주소가 아니고 RAM 용량보다 2~3배 큰 가상 메모리 주소이다.
이러한 가상 메모리는 작은 페이지(page)들로 나뉜다. 가상메모리의 페이지들 중 활발하게 사용되는 페이지들은 RAM에 할당되어 있고, 아주 가끔 사용되는 페이지들은 디스크에 할당되어 있다.
활발하게 사용되던 페이지가, 시간이 지나 아주 가끔 사용하게 되면 그 페이지는 RAM에서 디스크로 이동한다. 반대로 디스크에 있던 페이지를 읽고 쓰게 되면, 그 페이지는 디스크에서 RAM으로 이동한다. 이러한 페이지들의 이동을 페이징(paging) 혹은 스왑(swap)이라고 부른다.

스왑 영역(Swap space)

가상 메모리에 할당된 디스크 영역을 스왑 영역(Swap space) 이라고 부른다.

간단한 설명을 들었으니 시작해보자. 먼저 메모리와 디스크 용량을 확인하자. 기본적으로 AWS EC2에는 스왑 영역이 만들어져 있지 않다.

메모리 용량 및 사용량 확인

$ free -m
               total        used        free      shared  buff/cache   available
Mem:            1851         216         314           0        1320        1459
Swap:              0           0           0

swap 영역의 크기가 0으로 설정되어있다. linux에서 메모리 용량이 부족하면 시스템이 매우 느려지므로 swap 영역을 만들어야 한다. 특히 AWS를 이용해 직접 접속한다면 확실하게 체감이 될 것이다.

디스크 사용량 확인 명령

$ df

Linux에서는 /dev/root가 기본 파일 시스템으로 내 서버는 15,054,340블럭이 사용가능(15GB)하다. 이 부분이 인스턴스 생성시 설정해준 스토리지 용량과 동일한 것 같다.

스왑 영역 만들기

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.0564 s, 212 MB/s

조회

$ ls -l /swapfile
-rw-r--r-- 1 root root 1073741824 Aug  1 15:08 /swapfile

생성된 /swapfile 파일을 소유자(root)만 읽고 쓸수 있게 권한 설정하기

$ sudo chmod 600 /swapfile
$ ls -l /swapfile
-rw------- 1 root root 1073741824 Aug  1 15:08 /swapfile

/swapfile 파일을 스왑 영역으로 설정

$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=5b1a4cd3-c6cc-4582-8a84-a2f53ca58607
$ sudo swapon /swapfile

/etc/fstab 파일에 swapfile 등록하기

$ sudo vi /etc/fstab

여기서 헷갈릴 수 있는데 다음과 같이 따라하자. /etc/fstab 파일을 오픈후 i 눌러서 insert 모드에 진입한다. 아래 내용을 추가하고, ESC 누르고 :wq (저장후 나가기)

/swapfile swap swap defaults 0  0

메모리 용량 및 사용량 확인 (0에서 1023으로 늘어남)

$ free -m
               total        used        free      shared  buff/cache   available
Mem:            1851         183          81           0        1586        1491
Swap:           1023           0        1023

마무리

여기까지하면 AWS EC2 인스턴스를 생성하고 기본적인 설정을 완료하였다. 다음 게시글에서는 Mysql과 톰캣 서버를 설치하고 보안 설정을하여 외부에서 접속하는 방법에 대해 알아보자.

인스턴스를 생성하고 설정하는 부분에서 주의해야하는 것은 패키지 설치 및 설정 등 시간이 오래 걸릴 수도 있다. 그럴 경우 임의로 중단하지말고 커피라도 한잔하면서 열심히 모니터를 쳐다보면 언젠간 완료가 될 것이다. 비밀번호 설정 등에 대해서도 오타가 발생하지 않도록 확인하고 차근차근 설정을 하도록 하자.

그럼 이만.👊🏽

profile
서핑하는 개발자🏄🏽

0개의 댓글