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

AWS EC2 Instance 생성

  • EC2 (Elastic Compute Cloud)는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다.

AWS 프리티어 EC2 인스턴스 생성

  1. region 설정

    • AWS의 서비스가 구동될 지역 설정
    • 서울로 설정
  2. AMI(Amazon Machine Image) 선택

    • EC2 인스턴스를 시작하는 데 필요한 정보를 image로 만들어둔 것을 의미
      • 즉, instance라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지이다.
      • 예를 들어 아마존 리눅스 AMI를 사용한다면 Amazon Linux OS가 인스턴스에 설치된다.
    • Amazon Linux AMI 선택
  3. 인스턴스 유형 선택

    • 프리 티어에서는 t2.micro 선택
  4. 인스턴스 세부 정보 구성

    • 네트워크, 서브넷, 모니터링, IAM 등 다양한 세부정보를 설정할 수 있다.
    • 여기서는 인스턴스 1대만 개인적으로 사용할 것이기 때문에 기본 설정으로 두고 넘어간다.
  5. 스토리지 추가

    • 흔히 하드디스크라고 부르는 서버의 디스크(SSD 포함)를 의미
    • 서버의 용량을 정한다.
    • 30GB까지 프리티어로 가능하기 때문에 30GB로 설정
  6. 태그 추가

    • 태그는 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다.
    • Name 태그를 해당 프로젝트의 이름으로 등록한다.
  7. 보안 그룹 구성

    • 방화벽을 의미한다.

    image

    • 22번 포트 SSH 접속은 AWS EC2에 터미널로 접속하는 경우이다.
      • 만약 pem키가 노출되는 경우 임의의 사용자가 쉽게 EC2에 접속할 수 있게 되므로 지정된 IP에서만 접속이 가능하도록 설정한다.
    • 프로젝트의 기본 포트인 8080번 포트와 HTTPS 접속 포트인 443번 포트는 모든 사용자에게 오픈한다.
  8. 키 페어 생성

    • 인스턴스로 접근하기 위해서는 pem키(비밀키)가 필요하다.
      • 일종의 마스터키이므로 보안이 굉장히 중요하다.
  9. 생성된 인스턴스 확인

    image

고정 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/config
    
    Host all-review
    	HostName	탄력적 IP 주소
    	User ec2-user
    	IdentityFile ~/.ssh/pem키 이름
    
    • config 파일의 실행 권한을 위해서 권한을 변경한다.

      chmod 700 ~/.ssh/config
      

명령어로 EC2 서버 접속

ssh config에 등록한 서비스명

스크린샷 2020-09-04 오전 10 38 02

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/network
    
    • HOSTNAME 값을 서비스명으로 변경해준 후 리부팅하면 변경된 것을 확인할 수 있다.
  • /etc/hosts 에 변경한 hostname을 등록한다.

    sudo vim /etc/hosts
    
    127.0.0.1		등록한 hostname
    
    • /etc/hosts 파일은 호스트 주소를 찾을 때 가장 먼저 검색해보는 파일이므로 hostname을 등록해주어야 접속이 가능하다.