spring

springboot & AWS - AWS EC2

Jan 07, 2020

AWS 서버 환경을 만들어 보자

목차

1. AWS EC2
1.1 AWS 회원가입
1.2 EC2 인스턴스 생성하기
1.3 EC2 서버에 접속하기
1.4 아마존 리눅스 1 서버 생성시 꼭 해야 할 설정들

1. AWS EC2

외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요하다. 24시간 작동하는 서버에는 3가지 선택지가 있다.

일반적으로 비용은 호스팅이나 집PC를 이용하는 것이 저렴하다. 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.

클라우드 서비스는 인터넷(클라우드)를 통해, 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것이다. 단순히 물리장비를 대여하는 것이 아니다.

예를 들어 AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원한다.

이런 클라우드에는 몇 가지 형태가 있다.

  1. Infrastructure as a Service(IaaS, 아이아스, 이에스)

    • 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스이다.
    • 가상머신, 스토리지, 네트워크, 운영체제 등의 IT인프라를 대여해주는 서비스로 보면 된다.
    • AWS의 EC2, S3등
  2. Platform as a Service(Paas, 파스)

    • 앞에 언급한 IaaS에서 한 번 더 추상화한 서비스이다.
    • 한 번 더 추상화 했으므로, 많은 기능이 자동화되어 있다.
    • AWS의 Beanstalk(빈스톡), Heroku(헤로쿠)등
  3. Software as a Service(SaaS, 사스)

    • 소프트웨어 서비스를 말한다.
    • 구글 드라이브, 드랍박스, 와탭 등

AWS EC2를 사용하면 1년간 무료이고, 지원되는 기능도 많고, 국내 커뮤니티나 이직시에도 배워두면 좋다.

여기서 진행하는 모든 AWS 서비스는 IaaS를 사용한다. AWS의 PaaS 서비스인 빈스톡을 사용하면 대부분의 작업이 간소화 되나, 프리티어로 무중단 배포가 불가능하다. 배포마다 서버가 다운되면 제대로된 서비스를 만들 수 없으니 무중단 배포는 필수이고 빈스톡은 사용할 수 없다.

1.1 AWS 회원가입

AWS공식 사이트로 가서 무료 계정 만들기를 선택한다. 해외결제 카드는 필수다. 개인/무료.

1.2 EC2 인스턴스 생성하기

EC2(Elastic Compute Cloud)는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다. 보통 AWS에서 리눅스 서버 혹은 윈도우 서버를 사용한다고 하면 EC2를 이야기한다.

1.3 EC2 서버에 접속하기

오랜 시간 접속이 안 되거나, 권한이 없어서 안 된다고 메시지가 나오면 - HostName 값이 정확히 탄력적 IP로 되어있는지 확인 - EC2 인스턴스가 running 상태인지 확인 - EC2 인스턴스의 보안그룹 -> 인바운드 규칙에서 현재 본인의 IP가 등록되어 있는지 확인

외부 서버로 SSH 접속을 하려면 매번 다음과 같은 긴 명령어 입력이 필요하다.

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

쉽게 ssh 접속을 하려면 pem파일을 ~/.ssh로 복사한다. 여기로 pem을 옮기면 ssh실행 시 pem 키 파일을 자동으로 읽어 접속을 진행한다.

cp pem 키를 내려 받은 위치 ~/.ssh

복사되었다면 pem 키의 권한을 변경합니다.

chmod 600 ~/.ssh/pem키의 이름

권한을 변경했다면 pem 키가 있는 ~/.ssh 디렉토리에 config 파일을 생성한다.

vim ~/.ssh/config
# 주석
 Host 본인이 원하는 서비스명
    HostName ec2의 탄력적 IP주소
    User ec2-user
    IdentityFile ~/.ssh/pem키 이름

:wq로 저장 종료한다.

생성된 config 파일은 실행 권한이 필요하므로 권한 설정을 다음과 같이 한다.

chmod 700 ~/.ssh/config

실행 권한까지 설정했으면 다음의 명령어로 접속한다.

ssh confing에 등록한 서비스명

1.4 아마존 리눅스 1 서버 생성시 꼭 해야 할 설정들

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

  1. java8 설치

    • 자바8 설치
      • sudo yum install -y java-1.8.0-openjdk-devel.x86_64
    • 인스턴슽의 자바 버전 변경
      • sudo /usr/sbin/alternatives —config java
    • 2 입력하여 java8 선택
    • 자바7 제거
      • sudo yun remove java-1.7.0-openjdk
    • 자바 버전 확인
      • java -version
  2. 타임존 변경

    • EC2 서버의 기본 타임존은 UTC이다 한국과는 9시간 차이가 발생한다.
    • sudo rm /etc/localtime
    • sudo ln -s /usr/share/zoneinfo/Asia/Seoul/etc/localtime
    • data 명령어로 타임존이 KST로 변경된 것을 확인할 수 있다.
  3. Hostname 변경

    • 각 서버가 어떤 서비스인지 표현하기 위해 HOSTNAME을 변경하겠다.

    • 편집파일 열기

      • sudo vim /etc/sysconfig/network
    • 화면에 노출되는 항목 중 HOSTNAME으로 되어있는 부분을 본인이 원하는 서비스명으로 변경

    • 변경 후 서버 리부팅

      • sudo reboot
    • 변경된 HOSTNAME 확인

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

      • sudo vim /etc/hosts

      • 127.0.0.1 등록한 hostname

      • :wq

      • curl 등록한 hostname

        • 접근이 안 된다는 메시지가 나오면 등록 성공한 것이다.
        • 아직 80포트로 실행된 서비스가 없음을 의미한다. curl 호스트 이름으로 실행은 잘 되었음을 의미한다.

        %% Amazon Linux 2 사용시 설정 sudo hostnamectl set-hostname 원하는이름.localdomain