본문 바로가기

Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스

AWS EC2 서버 환경 구현

728x90

□ AWS (Amazon Web Service)

: 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼으로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 지원합니다. 

 

외부에서 내가 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요한데, 24시간 작동하는 서버에는 3가지 종류가 존재합니다.

  • PC를 24시간 구동
  • 호스팅 서비스를 이용
  • 클라우드 서비스를 이용

 

□ 클라우드 종류

  • Infrastructure as a Service (IasS)
    • 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
    • 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해 주는 서비스
    • AWS의 EC2, S3 등
  • Platform as a Service(PaaS)
    • 앞에서 언급한 IasS에서 한 번 더 추상화한 서비스
    • 많은 기능이 자동화 됨
    • AWS의 Beanstalk, Heroku 등
  • Software as a Service(SaaS)
    • 소프트웨어 서비스를 이야기 함
    • 구글 드라이브, 드랍박스, 와탭 등

 

 

■ AWS 사용하기

□ AWS 회원 가입

   1. https://aws.amazon.com/ko/ 로 이동

   2. AWS 회원 가입

이메일, 암호, 이름 등록

                            

개인 클릭, 주소는 영문으로

* 영문 주소는 네이버에 검색하여 사용하시면 됩니다.

 

Visa 카드 or Master 카드 필요

* 현재 단계에서는 비용이 들지 않습니다

 

인증 받기

 

기본지원으로 선택 후 가입 완료 선택

 

□ EC2 인스턴스 생성하기

EC2 (Elastic Compute Cloud)

AWS에서 제공하는 성능, 용량 들을 유동적으로 사용할 수 있는 서버입니다.

 

1. 리전(Resion) 설정

지역 - 서울로 변경

 

2. EC2 검색 후 인스턴스 시작 선택

단계 1 : AMI 선택

Amazon Linux 선택

* 본 책에서는 리눅스1을 사용하라 하지만 책 발행 일자 기준으로 시간이 많이 지나 저는 리눅스2를 채택했습니다.

 

단계 2 : 인스턴스 유형 선택

t2 >> 프리 티어 사용가능 선택 >> 다음

 

단계3 : 인스턴스 세부 정보 구성

특별한 경우가 아닌 경우 기본값으로 설정하면 됩니다. >> 다음

 

단계 4 : 스토리지 추가

크기(GiB) 를 30 으로 변경 >> 다음

 

단계 5 : 태그 추가

키 이름, 값 입력 >> 다음

 

단계 6 : 보안 그룹 구성

내 IP 설정 >> 규칙 추가 >> 포트 범위 8080 추가 >> 검토 및 시작

 

단계 7 : 검토 후 이상이 없을 경우 시작하기

 

단계 8 : 인스턴스 검토

키 페어 다운로드

* 인스턴스로 접근하기 위해서는 pem 키(비밀키)가 필요합니다.

인스턴스로 지정된 pem 키와 매칭되는 공개키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지 않습니다.

- pem 키는 이후 EC2 서버로 접속할 때 필수 파일이니 잘 관리할 수 있는 디렉토리로 저장을 해야합니다.

 

생성된 인스턴스 화면

 

* 인스턴스

  • 인스턴스도 하나의 서버이기 때문에 IP가 존재
  • 인스턴스 생성 시에 항상 새 IP를 할당
  • 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당
  • 매번 IP 주소를 확인해야하는 번거러움이 발생

 

이를 해결하기 위해 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야합니다.

 

□ EIP 할당 (Elastic IP, 탄력적 IP)

 

1. 탄력적IP 

왼쪽 카테고리에 있는 '탄력적 IP' 클릭

 

2. 새 주소 할당

주소 할당 클릭

 

3. 할당

Amazon의 IPv4 주소 풀 선택 >> 할당

 

4. 생성된 EIP 주소 연결

생성된 EIP 확인 >> 탄력적 IP 주소 연결

 

5. 탄력적 IP 주소 연결

 

인스턴스를 클릭하면 자동으로 선택할 수 있게 됩니다.

 

프라이빗 IP 주소 또한 자동으로 뜹니다.

 

'연결' 클릭시 EIP (탄력적 IP)에 연결되게 됩니다.

 

보기와 같이 탄력적 IP 주소가 뜨는 것을 볼 수 있습니다.

* 탄력적 IP는 매우 중요한 개인 정보이기 때문에 타인에게 공개되지 않도록 유의하시기 바랍니다

 

 

□ EC2 서버에 접속하기 (mac 기준)

- 책에는

            ssh -i pem 키 위치 EC2의 탄력적 IP 주소

라는 명령어를 터미널에 입력합니다. 저는 이걸 터미널에 입력했더니 아래와 같은 오류가 발생하였습니다.

 

빨간색 = EIP

해당 오류는 다운로드 받은 pem(인증키)의 사용권한이 너무 개방되어 있어 사용을 제한한다는 뜻입니다. 

그래서 매번 이 긴 명령어를 사용하지 않고 위와 같은 오류를 해결하기 위해 아래와 같이 수행하였습니다.

 

1.  SSH 접속하기

* 매번 ssh 명령어를 입력하면 너무 번거롭기 때문에 파일을 ~/.ssh/로 복사합니다.

> ssh 실행 시 pem 키 파일을 자동으로 읽어 접속을 진행합니다. 이후부터는 별도로 pem 키 위치를 명령어로 지정할 필요가 없게 됩니다

 

2. 복사된 pem 키 확인

ssh 디렉토리로 복사된 것을 확인 할 수 있습니다.

* cp pem 키가 위치하는 디렉토리 ~/.ssh/   :   .ssh 아래 pem 키를 복사한다.

 

3. pem 키의 사용 권한을 변경

rw-r--r-- 에서 -rw------- 로 변경된 것을 확인할 수 있습니다.

* 권한을 변경하는 이유는 첫번째와 같은 오류를 잡기 위해서입니다.

 

4. ~/.ssh 디렉토리에 config 파일을 생성

.ssh 디렉토리에서 생성할 것!!
config 내용 작성

* 부연 설명

  • I >> 입력 모드
  • Host 이름  >> 앞으로 해당 이름으로 실행
  • HostName >> EIP (탄력적 IP 주소 입력)
  • ESC >> 명령 모드
  • :wq >> w : 저장 / q : 종료

config 파일이 생성된 것을 볼 수 있습니다.

 

5. config 파일 사용 권한 변경

rw-r--r-- 에서 rwx------로 변경된 것을 확인할 수 있습니다.

 

6. ssh 실행

접속에 성공한 모습

* config에서 정한 Host 이름을 입력하면 작동하는 모습

 

 

■ 서버 생성 시 꼭 해야 할 설정들

□ JAVA 설치

: 자바 기반의 웹 애플리케이션 (톰캣과 스프링부트)가 작동해야 하는 서버들에선 필수로 해야하는 설정들

 

1. Java 8 버전 (책에서 사용한 버전)

# 자바 8 설치
sudo yum install -y java-1.8.0-openjdk-devel.x86_64

# 버전 변경
sudo /usr/sbin/alternatives --config java

# 사용하지 않는 버전 삭제
sudo yum remove java-1.7.0-openjdk

# 버전 확인
java -version

 

□ 타임존 변경

UTC : EC2 서버의 기본 타임존 (한국의 시간과는 9시간 차이 발생)

이기 때문에 한국 시간(KST)로 변경해야 합니다.

sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

date 명령어로 현재 시간과 KST로 변경된것을 확인할 수 있습니다.

□ Hostname 변경

여러 서버를 관이 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어렵습니다.

이를 해결하기 위해 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경하겠습니다.

 

# 편집 파일 열기
sudo vim /etc/sysconfig/network

 

보기와 같이 HOSTNAME을 지정해줍니다.

 

#서버 재부팅
sudo reboot

* 원래 그런건지 잘 모르겠는데 reboot 후 바로 ssh 접속을 하게 되면 계속 refused가 뜨는데, 조금 기다렸다 다시 하거나 터미널 종료 후 다시 작동하면 잘 작동했습니다.

 

재부팅 후 기존 IP가 아닌 설정해놓은 HOSTNAME이 뜨는 것을 확인할 수 있습니다.

 

* 추가 작업

: 호스트 주소를 찾을 때 가장 먼저 검색해 보는 /etc/hosts에 변경한 hostname을 등록합니다.

#파일 열기
sudo vim /etc/hosts

 

기존에는 위와 같이 되어있는 것을
아래와 같이 아까 등록한 HOSTNAME을 한 줄을 추가해줍니다.

 

 

정상적으로 등록되었는지 확인을 위해

# HOSTNAME 등록 확인
# curl 등록한 호스트 이름
curl Spring-WebService

보기와 같이 (7) Failed to connect to 호스트 이름 port 80으로 떠야 정상 작동된 것 입니다.

 

* 아직 80포트로 실행된 서비스가 없음을 의미하는 것일뿐, curl 호스트 이름으로 실행은 잘 되었음을 의미합니다.

 

* curl : (6) Could not resolve host : 호스트명

오류가 발생하게 되면 HOSTNAME을 잘못 등록하여 찾을 수 없다는 것을 의미합니다.

728x90