BOOK 2 - 스프링부트와 AWS로 혼자 구현하는 웹 서비스(5)
스프링부트와 AWS로 혼자 구현하는 웹 서비스 - 5
AWS EC2에 서버 환경 구축
Cloud Service에 대한 이론
- 외부에서 서비스에 접근하기 위해서는 24시간 구동되는 서버가 필요하다.
- 이 때 호스팅 서비스(Cafe24 등) 또는 클라우드 서비스(AWS, Azure 등)를 이용할 수 있다.
- 로컬 PC를 24시간 구동하는 것도 가능하지만 트래픽이 많아질 경우 CPU가 감당하지 못할 위험이 있다.
Cloud Service
- 인터넷을 통해
server,storage,database,network,software,monitoring등의 컴퓨팅 서비스를 제공하는 것을 의미한다. - 즉, AWS의 EC2는 서버 장비를 대여함과 동시에 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원하고 있는 것이다.
Cloud 종류
IaaS (Infrastructure as a Service)- 기존 물리 장비를 middleware와 함께 묶어둔 추상화 서비스
- virtual machine, storage, network, OS 등의 IT 인프라를 대여해주는 서비스를 의미한다.
- ex)
AWS EC2,AWS S3
Paas (Platform as a Service)IaaS를 한번 더 추상화한 서비스- 한번 더 추상화했기 때문에 더 많은 기능이 자동화되어 있다.
- ex)
AWS Beanstalk,Heroku
Saas (Software as a Service)- ex)
Google Drive,Dropbox
- ex)
AWS EC2 Instance 생성
- EC2 (Elastic Compute Cloud)는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다.
AWS 프리티어 EC2 인스턴스 생성
-
region 설정
- AWS의 서비스가 구동될 지역 설정
- 서울로 설정
-
AMI(Amazon Machine Image) 선택
- EC2 인스턴스를 시작하는 데 필요한 정보를 image로 만들어둔 것을 의미
- 즉, instance라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지이다.
- 예를 들어 아마존 리눅스 AMI를 사용한다면 Amazon Linux OS가 인스턴스에 설치된다.
- Amazon Linux AMI 선택
- EC2 인스턴스를 시작하는 데 필요한 정보를 image로 만들어둔 것을 의미
-
인스턴스 유형 선택
- 프리 티어에서는
t2.micro선택
- 프리 티어에서는
-
인스턴스 세부 정보 구성
- 네트워크, 서브넷, 모니터링, IAM 등 다양한 세부정보를 설정할 수 있다.
- 여기서는 인스턴스 1대만 개인적으로 사용할 것이기 때문에 기본 설정으로 두고 넘어간다.
-
스토리지 추가
- 흔히 하드디스크라고 부르는 서버의 디스크(SSD 포함)를 의미
- 서버의 용량을 정한다.
- 30GB까지 프리티어로 가능하기 때문에 30GB로 설정
-
태그 추가
- 태그는 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다.
Name태그를 해당 프로젝트의 이름으로 등록한다.
-
보안 그룹 구성
- 방화벽을 의미한다.

- 22번 포트 SSH 접속은 AWS EC2에 터미널로 접속하는 경우이다.
- 만약 pem키가 노출되는 경우 임의의 사용자가 쉽게 EC2에 접속할 수 있게 되므로 지정된 IP에서만 접속이 가능하도록 설정한다.
- 프로젝트의 기본 포트인 8080번 포트와 HTTPS 접속 포트인 443번 포트는 모든 사용자에게 오픈한다.
-
키 페어 생성
- 인스턴스로 접근하기 위해서는 pem키(비밀키)가 필요하다.
- 일종의 마스터키이므로 보안이 굉장히 중요하다.
- 인스턴스로 접근하기 위해서는 pem키(비밀키)가 필요하다.
-
생성된 인스턴스 확인

고정 IP 할당
-
인스턴스 생성 시에 새 IP를 할당한다. 또한, 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP를 할당한다.
-
즉, 잠시 인스턴스를 중지했다가 다시 시작할 때마다 IP가 변경돼서 확인해야 하는 번거로움이 있다.
=> 매번 변경되지 않고 고정 IP를 가지도록 변경한다.
-
AWS의 고정 IP를 EIP(Elastic IP)라고 한다.
탄력적 IP탭에서 탄력적 IP 주소를 할당받는다.- 할당받은 탄력적 IP에 생성한 인스턴스를 연결해준다.
- 생성한 탄력적 IP에 EC2 서버를 연결하지 않으면 비용이 발생하므로 주의한다.
EC2 서버 접속
서버 접속 명령어
ssh -i pem키 위치 EC2의 탄력적 IP 주소
Pem키 설정
-
서버에 접속할 때마다 위의 명령어를 입력하는 것이 번거로우므로 pem키의 위치를 변경하여 pem키 파일을 자동으로 읽어 접속 할 수 있도록 한다.
-
pem키 파일을
~/.ssh/로 복사한다.cp pem키 위치 ~/.ssh/ -
이후부터는 별도로 pem키 위치를 명령어로 지정할 필요가 없게 된다.
-
-
pem키에 owner만 read/write할 수 있도록 권한을 변경한다.
chmod 600 ~/.ssh/pem키 이름
config 파일 생성
-
~/.ssh/디렉토리에 config 파일을 생성한다.vim ~/.ssh/configHost all-review HostName 탄력적 IP 주소 User ec2-user IdentityFile ~/.ssh/pem키 이름-
config 파일의 실행 권한을 위해서 권한을 변경한다.
chmod 700 ~/.ssh/config
-
명령어로 EC2 서버 접속
ssh config에 등록한 서비스명

Amazon Linux 1 서버 생성 후 기본 설정
Java 8 설치
-
아마존 리눅스 1 서버의 경우 기본 자바 버전이 7이다.
-
다음 명령어를 실행하여 자바 8 버전을 설치한다.
sudo yum install -y java-1.8.0-openjdk-devel.x86_64 -
설치 완료 후 인스턴스의 Java 버전을 8로 변경한다.
sudo /usr/sbin/alternatives --config java -
버전 변경 후 사용하지 않는 Java 7을 삭제한다.
sudo yum remove java-1.7.0-openjdk
타임존 변경
-
EC2 서버의 기본 타임존은 UTC이다.
-
서버의 시간을 한국시간(KST)으로 변경한다.
sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime -
date명령어로 타임존이 KST로 변경된 것을 확인한다.
Hostname 변경
-
여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인하기 어렵다.
- 각 서버가 어느 서비스인지 표현하기 위해
HOSTNAME을 변경한다.
sudo vim /etc/sysconfig/networkHOSTNAME값을 서비스명으로 변경해준 후 리부팅하면 변경된 것을 확인할 수 있다.
- 각 서버가 어느 서비스인지 표현하기 위해
-
/etc/hosts에 변경한 hostname을 등록한다.sudo vim /etc/hosts127.0.0.1 등록한 hostname/etc/hosts파일은 호스트 주소를 찾을 때 가장 먼저 검색해보는 파일이므로 hostname을 등록해주어야 접속이 가능하다.