6. AWS 서버 환경 만들어보기(AWS EC2)

WOOK JONG KIM·2023년 2월 17일
0

스프링부트 & AWS

목록 보기
6/8
post-thumbnail

외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수

  • 집에 PC를 24시간 구동시킴
  • 호스팅 서비스(Cafe 24, 코리아 호스팅 등)을 이용
  • 클라우드 서비스(AWS, AZURE, GCP 등)을 이용

특정 시간에만 트래픽이 급격히 올라가는 경우가 아니라면 일반적으로 호스팅 서비스나 PC를 이용하는 저렴
-> 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴수 있는 클라우드가 유리

클라우드란 쉽게 말해 클라우드를 통해 서버, 스토리지, DB, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것(단순 물리 장비 대여 X)

AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원
-> 개발자가 직접 해야할일을 AWS가 지원해주는 것

클라우드 형태

  1. Infrastructure as a Service(Iaas, 아이아스)
    기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
    가상 머신, 스토리지, 네트워크, 운영체제 등의 IT인프라를 대여해주는 서비스
    ex) AWS의 EC2, S3 등

  2. Platform as a Service(PaaS, 파스)
    laas에서 한번 더 추상화 한 서비스(한번더 추상화했기에 많은 기능이 자동화 되어있음)
    ex) AWS의 Beanstalk(빈스톡), Heroku(헤로쿠) 등

  3. Software as a Service(SaaS, 사스)
    소프트웨어 서비스를 의미
    ex) 구글 드라이브, 드랍박스,와탭 등


EC2(Elastic Compute Cloud) 인스턴스 생성하기

EC2란 AWS에서 제공하는 성능,용량 등을 유동적으로 사용할 수 있는 서버
-> 보통 AWS에서 리눅스 서버 혹은 윈도우 서버를 사용합니다 하면 EC2를 의미

리전 : AWS의 서비스가 구동될 지역을 의미
(AWS는 도시별로 클라우드 센터를 지어 해당 센터에서 구축한 가상 머신을 사용할 수 있음)

리전을 서울로 변경하기

이후 EC2 서비스에서 인스턴스 시작하기를 클릭
-> 여기서 인스턴스란 EC2 서비스에 생성된 가상머신

인스턴스 생성

1단계 : AMI(Amazon Machine Image, 아마존 머신 이미지)를 선택하는 것

AMI는 EC2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것
-> 즉 인스턴스라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 됨

이때 센토스 AMI가 아닌, 아마존 리눅스 AMI 사용한 이유

  1. 아마존이 개발하기에 지원받기 쉽고, AWS의 각종 서비스와 상성이 좋음
  2. 레드햇 베이스이므로, 레드헷 계열의 배포판을 많이 다뤄보면 사용하기 쉬움
  3. 아마존 독자적 리파지토리를 사용하고 있어 yum이 빠름

인스턴스 유형으로 t2.micro 선택
-> 여기서 t2는 요금타입, micro는 사양을얘기 함

스토리지 용량은 프리티어의 최대인 30GB로 설정

여러 인스턴스가 있을 경우 이를 태그별로 구분할 경우 검색이나 그룹 짓기가 편하므로 본인 서비스의 인스턴스를 나타낼수 있는 값으로 등록

보안 그룹은 방화벽을 의미
-> ex) 서버로 80포트 외에는 허용하지 않는다는 역할을 하는 방화벽이 AWS에서는 보안그룹으로 사용 됨

이후 인스턴스로 접근하기 위해서는 pem키(비밀번호)가 필요함
-> 인스턴스는 지정된 pem키와 매칭되는 공개키를 가지고 있기 때문에 해당 pem 키 외에는 접근을 허용하지 않음
-> 이는 마스터키이기 때문에 절때 유출되서는 안되며 pem키는 EC2서버로 접속할 때 필수 파일이기에 잘 관리할 수 있는 디렉토리로 지정

키페어 저장 이후 인스턴스 시작 시 정상적으로 실행이 되며, IP와 도메인이 할당 된것을 볼 수 있음


인스턴스도 결국 하나의 서버이기때문에 IP가 존재
-> 인스턴스는 생성시에 항상 새 IP를 할당받는데, 같은 인스턴스를 중지하고 다시 실행할때도 새 IP가 할당됨
-> 이를 막기 위해 매번 변경되지 않는 고정 IP를 가지게 해야함

AWS의 고정 IP를 Elastic IP(EIP: 탄력적 IP)라고 함

탄력적 IP를 눌러 선택하고 새 주소 할당을 클릭

방금 생성한 EIP, 방금 생성한 EC2 주소를 연결해주어야 함

EIP 생성 시 주의점
-> 생성하고 EC2 서버에 연결하지 않으면 비용이 발생
(즉 바로 연결해야 함, 사용할 인스턴스가 없으면 삭제해야함)


EC2 서버에 접속하기

AWS와 같은 외부 서버로 SSH 접속을 하려면 매번 다음과 같은 긴 명령어를 쳐야 함

ssh -i pem 키 위치 EC2의 EIP 주소

좀더 줄이기 위해 받은 키페어 pem 파일을 ~/.ssh/로 복사
-> ~/.ssh/ 디렉토리로 pem 파일을 옮겨 놓으면 ssh 실행 시 pem 키 파일을 자동으로 읽어 접속을 진행
-> 이후 부터는 별도로 pem 키 위치를 명령어로 지정할 필요 없음

cp /Users/gim-ugjong/Documents/freelec-springboot-webservice.pem ~/.ssh/

// 확인

cd ~/.ssh/
ll

// 권한 변경
chmod 600 ~/.ssh/freelec-springboot-webservice.pem

권한 변경 이후 pem 키가 있는 디렉토리에 config 파일 생성

vim ~/.ssh/config

// 파일 형태

Host 본인이 원하는 서비스 명
	HostName ec2의 Eip 주소
    User ec2-user
    IdentityFile ~/ssh/pem키 이름
    
위에서 유저 이름은 AMI에 따라 다름
    
작성 완료 후 :wq

작성한 config 파일은 실행 권한이 필요함

chmod 700 ~/.ssh/config

권한 설정 후 ssh 접속

ssh config에 등록한 서비스 명

ssh freelec-springboot-webservice

위 화면에서 yes 입력 시 EC2 서버 접속 성공
-> 이후부터는 ssh 서비스명만 입력하면 접속 가능한 상태가 됨


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

  • Java 8 설치 (또는 각자 프로젝트에 맞게)
sudo yum install -y java-1.8.0-opdenjdk-devel.x86_64

sudo /usr/sbin/alternatives --config java
  • 타임존 변경
    기본 서버의 시간은 미국 시간대
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

이후 date로 KST로 변경되었는지 확인
  • 호스트네임 변경 (현재 접속한 서버의 별명을 등록)
    실무에서는 수십 대의 서버가 작동하는 데, IP만으로는 어떤 역할을 하는지 구분할 수 없다.구분하기 쉽도록 호스트 네임을 등록하자
sudo vim /etc/sysconfig/network

안에서

NETWORKING=yes
HOSTNAME=freelec-springboot2-webservice
NOZEROCONF=yes

저게 안되어

sudo hostnamectl set-hostname freelec-springboot-webservice
이걸로 해결

호스트 네임 등록 이후
-> etc/hosts에 변경한 hostname 등록
-> 등록이후 curl 등록한 호스트 이름으로 체크해보기

위 경우 아직 80포트로 실행된 서비스가 없음을 뜻하는데
-> 즉 curl 호스트 이름으로 실행은 잘 되었다는 의미


profile
Journey for Backend Developer

0개의 댓글

관련 채용 정보