본문 바로가기

스프링부트와 AWS로 구현하는 웹서비스

[스프링부트/AWS] 6장 AWS 서버 환경을 만들어보자 AWS - EC2

※ 참고사항

앞으로 진행하는 실습은 터미널(CMD)에서 주로 진행됩니다. 그래서 저같은 경우에는 파일명, sciprt 오타로 인해서 이슈가 많이 발생했었습니다. 책 또는 블로그에 따라서 진행하면서 정상동작이 안되는 경우에는 오타가 있는지, 없는 지 확인 후 저자 git issue(github.com/jojoldu/freelec-springboot2-webservice/issues) 또는 구글링을 하면 좋습니다.

 

※ Amazon Linux 2 AMI으로 진행

Amazon Linux AMI의 표준 지원은 2020년 12월 31일에 종료되었다고 합니다. 그래서 Amazon Linux 2 AMI으로 진행합니다.

 

aws.amazon.com/ko/amazon-linux-ami/

 

AWS | Amazon Linux AMI

Amazon Linux AMI는 Amazon Web Services와 긴밀하게 통합되는 패키지와 구성으로 이루어져 있습니다. Amazon Linux AMI는 많은 AWS API 도구와 CloudInit가 미리 설치되어 있는 상태로 제공됩니다. AWS API 도구를 이

aws.amazon.com

※ Windows로 진행(putty 설치) -> 저는 Windows PowerShell로 진행

1. pem 설정하기(보호되지 않은 개인 키 파일 이슈 -> 보안설정 변경)

아래 youtube를 보고 진행

 

 

www.putty.org/

 

Download PuTTY - a free SSH and telnet client for Windows

Is Bitvise affiliated with PuTTY? Bitvise is not affiliated with PuTTY. We develop our SSH Server for Windows, which is compatible with PuTTY. Many PuTTY users are therefore our users as well. From time to time, they need to find the PuTTY download link. W

www.putty.org

www.youtube.com/watch?v=FOTJm5oLo64

※ 리눅스 명령어

dora-guide.com/linux-commands/

 

리눅스 명령어 모음 BEST 50 초보자 및 전문가용 - 도라가이드

리눅스 명령어 모음 입니다. 오늘날 배울 수있는 가장 유용한 리눅스 명령어들이며, 리눅스 기본 명령어와 함께 정기적으로 사용할 50가지 최고의 Linux 명령어를 간략하게 요약하여 이 안내서를

dora-guide.com

※ yum 패키지 관리도구

jinseok12.tistory.com/61

 

Linux) yum개념 및 실습

yum 패키지 관리 도구 - rpm기반의 패키지 관리 도구로 의존성 문제를 자동으로 해결해주며, 시스템에 설치되어 있는 패키지 버전과 저장소에 저장되어 있는 패키지의 버전을 비교하여 최신 버전

jinseok12.tistory.com

※ vim 편집기 명령어

vi 기본 동작업

jhnyang.tistory.com/54

 

[리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제

[리눅스 / 유닉스 / 셸 프로그래밍 완전 정복 목차 바로가기 ] 가장 많이 사용되고, 꼭 알아야 하는 ~ vi 편집기 사용하기 vi는 다른 편집기들과는 다르게 모드형 편집기라는 특징이 있습니다. (명

jhnyang.tistory.com

ex. vim ~~ 를 통해서 편집기 접속 i(현재 커서의 위치로 부터 입력)클릭 문구 수정 후 esc(명령모드로 전환) 클릭 후 저장(:wq)

 

 

- 아마존 리눅스 2 서버 생성 후 꼭 해야하는 설정들

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

  • Java 8 설치 : 현재 이 프로젝트의 버전은 Java 8 입니다.
  • 타임존 변경 : 기본 서버의 시간은 미국 시간대 입니다. 한국 시간대가 되어야만 우리가 사용하는 시간잉 모두 한국 시간으로 등록되고 사용됩니다.
  • 호스트네임 변경 : 현재 접속한 서버의 별명을 등록합니다. 실무에서는 한 대의 서버가 아닌 수십 대의 서버가 작동되는 데, IP만으로 어떤 서버가 어떤 역할을 하는지 알 수 없습니다. 이를 구분하기 위해 보통 호스트 네임을 필수로 등록합니다.

1. Java 8 설치

java 7버전이 설치가 되어 있지 않았으므로 java 8 설치 후 java 버전 매칭 확인

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

# Java 매칭
sudo /usr/sbin/alternatives --config java

# 원치않는 Java7 삭제
sudo yum remove java-1.7.0-openjdk

# Java 버전확인
java -version

설치한 java 1.8 선택

 

2. 타임존 변경

EC2 서버의 기본 타임존은 UTC입니다. 한국의 시간과는 9시간 차이가 발생합니다.(UTC +09:00) 이렇게 되면 서버에서 수행되는 Java 애플리케이션에서 생성되는 시간도 모두 9시간 씩 차이가 나기 때문에 꼭 수정해야 할 설정입니다.

ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD_%ED%91%9C%EC%A4%80%EC%8B%9C

 

한국 표준시 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. KST는 여기로 연결됩니다. 다른 뜻에 대해서는 KST (동음이의) 문서를 참조하십시오. 한국 표준시(韓國標準時, KST, Korea Standard Time)는 대한민국과 조선민주주의인

ko.wikipedia.org

# root 계정으로 변경 후 진행
sudo su - root

# 폴더 삭제 후 심볼적 링크로 한국시간 연결
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 타임존 확인
date

webdir.tistory.com/148

 

리눅스 ln - 링크파일 생성

리눅스에서의 링크파일은 윈도우와 비슷하지만 두가지의 링크가 존재합니다. 아래에서 자세히 살펴봅니다. ln ln은 Link 의 약어로서 리눅스 파일시스템에서 링크파일을 만드는 명령어이다. 리눅

webdir.tistory.com

# config 타임존 변경
 vim /etc/sysconfig/clock

# Asia/Seoul로 변경 후 :wq
ZONE="Asia/Seoul"
UTC=true

 

※ 파일 편집 시 ' E325: ATTENTION '발생 했을 경우

.swap 파일이 생겼기 때문입니다. vi파일 편집 중 비정상적으로 종료되었을 경우 스왑(.swap)파일이 생성됩니다.

# 스왑파일 존재 확인(스왑 파일은 숨김 파일)
ls -all

#다른 프로세스가 작업중인지 확인
ps -ef | grep /etc/sysconfig/clock

# 사용중인 프로세스가 있다면 kill -9(강제종료)
kill -9 PID Number

# 작업 중이 아니라면 복구
vi -r clodk

# 작업 완료 후 swap 파일 삭제
rm /etc/sysconfig/.clock.swap

www.orcinus.kr/post/48/

 

코딩웨일

조회수 : 7764 작성일 : 2018-09-06 00:01 ubuntu vi linux """ 맨 밑에 요약이 있습니다. """ 1. 개요 vi를 통해 파일을 수정하는 작업을 하다 보면, 가끔씩 마주치는 문제가 있다. E325: ATTENTION Found a swa

www.orcinus.kr

3. Hostname 변경

아래의 AWS 설명서를 보고 진행하겠습니다.

docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/set-hostname.html

 

Amazon Linux 인스턴스에서 호스트 이름 변경 - Amazon Elastic Compute Cloud

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. Amazon Linux 인스턴스에서 호스트 이름 변경 인스턴스를 시작하면 인스턴스

docs.aws.amazon.com

# 퍼블릭 DNS 이름 등록을 위한 cloud-init 설정
sudo vi /etc/cloud/cloud.cfg

#preserve_hostname 설정이 나열되어 있지 않으면 파일 끝에 o입력 후 아래 텍스트 추가 후 저장(esc -> :wq)
preserve_hostname:true

# hostname 변경(hostnamectl 명령어 사용)
sudo hostnamectl set-hostname oss0202-springboot-webservice

# 인스턴스 재부팅
sudo reboot

저는 reboot 명령어 실행 시 Putty Fatal Error가 발생해서 AWS 콘솔에서 재부팅을 하였습니다. 

※ reboot를 실행 중이라서 network connection이 끊긴것으로 추정됩니다.

sudo reboot 실행시 에러

- EC2 > 인스턴스 > 해당 인스턴스정보

AWS콘솔에서 인스턴스 재부팅

※ 인스턴스 종료를 하면 안됩니다. 종료 => 인스턴스 삭제 입니다.

저는 스크립트 작업까지 완료 후 실수로 동료를 눌러서 인스턴스가 삭제되었습니다......

docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/terminating-instances.html

 

인스턴스 종료 - Amazon Elastic Compute Cloud

인스턴스 종료 더 이상 필요하지 않은 인스턴스는 삭제할 수 있습니다. 이를 인스턴스 종료라고 합니다. 인스턴스 상태가 shutting-down 또는 terminated로 변경되는 즉시 해당 인스턴스에 대한 반복적

docs.aws.amazon.com

 

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

- hostname이 /etc/host에 등록되지 않아서 발생한 장애 공유(우아한 형제들)

woowabros.github.io/experience/2017/01/20/billing-event.html

 

빌링 시스템 장애, 이러지 말란 Maria~ - 우아한형제들 기술 블로그

우아한 6시

woowabros.github.io

# /etc/host 파일 열기
sudo vim /etc/hosts

# hostname 등록 후 저장(:wq)
127.0.0.1 oss0202-springboot-webservice

# 정상등록 확인
curl oss0202-springboot-webservice

- 등록 실패인 경우

- 등록 성공인 경우

등록이 성공해도 failed가 나옵니다. 왜내하면 80포트로 실행된 서비스가 없기 때문입니다. 즉, curl 호스트 이름으로 실행은 잘 되었음을 의미합니다.