[6장] AWS 서버 환경을 만들어보자

미천한 개발중생·2023년 9월 28일
0

본인이 만든 서비스를 외부에서 접근하려면 24시간 작동하는 서버가 필요합니다. 일반적으로는 다음의 세가지가 있습니다.

  • 집에 PC를 24시간 구동한다.
  • 호스팅 서비스를 이용한다.
  • 클라우드 서비스를 이용한다.

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

클라우드 서비스

클라우드 서비스는 인터넷을 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 서비스를 제공하는 것입니다.

클라우드 형태

  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를 사용하여 앞선 챕터에서 만든 서비스를 배포합니다.

회원가입

AWS 공식사이트에서 회원가입을 진행합니다. 가입 시 영문주소와 Master 및 Visa 카드를 등록해야 합니다.


EC2 인스턴스 생성

EC2는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버입니다.
AWS에서 무료로 제공하는 프리티어 플랜에는 EC2 사용에 몇가지 제한사항이 있습니다.

  1. 사양이 t2.micro만 가능합니다.
    • vCPU(가상 CPU) 1 Core, 메모리 1GB 사양.
    • 보동 vCPU는 물리 CPU 사양의 절반 정도의 성능을 가집니다.
  2. 월 750 시간의 제한이 있고, 초과하면 요금이 부과됩니다.
    • 즉, 1대의 t2.micro만 사용한다면 24시간 사용할 수 있습니다.

먼저 로그인을 하고 상단 우측에서 리전을 서울로 변경해줍니다.

  • 리전이란 AWS 서비스가 구동될 지역을 이야기합니다. AWS는 도시별로 클라우드 센터를 지어 해당 센터에서 구축된 가상머신들을 사용할 수 있습니다. 이걸 리전이라고 합니다.

리전 변경 후 검색창에 ec2를 검색하여 EC2 서비스를 클릭합니다.

EC2 대시보드에서 [인스턴스 시작] 버튼을 클릭합니다. 인스턴스란 EC2 서비스에 생성된 가상 머신을 말합니다.


인스턴스의 이름을 입력합니다.

AMI를 선택합니다. 기본값으로 설정되어있는 Amazon Linux를 사용합니다.

  • AMI란, EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것을 말합니다.

제가 실습을 하는 날짜를 기준으로 Amazon Linux 2023 AMI가 기본값으로 되어있습니다. Amazon Linux 2023 AMI에는 MySQL이 포함되어있지 않아 7장에서 ec2에 MySQL 설치 시 오류가 생깁니다(관련링크). 다른 방법으로도 설치를 할 수 있으나 앞으로의 실습을 더 수월하게 하기위해 이 단계에서 꼭 사진과 같은 AMI를 선택하시길 추천드립니다.

인스턴스 유형으로 t2.micro를 선택합니다.

인스턴스로 접근하기 위해 키 페어를 생성해줍니다.

  • 인스턴스는 지정된 pem 키(비밀키)와 매칭되는 공개키를 사지고 있어, 해당 pem 키 외에는 접근을 허용하지 않습니다.
  • EC2 서버로 접속할 때 필수 파일이니 본인이 잘 찾을 수 있는 폴더에 저장합니다.

네트워크 설정을 위해 편집 버튼을 클릭합니다.

보안 그룹 규칙을 설정해줍니다.

  • 보안그룹은 방화벽을 이야기합니다. '서버로 80 포트 외에는 허용하지 않는다'는 역할을 하는 방화벽이 AWS에서는 보안 그룹으로 사용됩니다.

내 IP 설정이유

유형 항목에서 ssh 이면서 포트번호가 22인 경우는 AWS EC2에 터미널로 접속할 때를 이야기합니다. 기본값인 위치무관(0.0.0.00/0) 으로 설정하는 경우 안전하지 않기 때문에 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전합니다.


하단의 [보안 그룹 규칙 추가] 버튼을 클릭하여 8080 포트를 추가합니다. CIDR은 0.0.0.0/0 과 ::/0을 입력해줍니다.

스토리지는 프리티어의 최대치인 30GB로 변경합니다.

  • 스토리지는 흔히 하드디스크라 부르는 서버의 디스크를 이야기하며 서버의 용량을 얼마나 정할지 선택하는 단계 입니다.

앞의 설정을 완료했으면 우측의 요약 탭 하단의 인스턴스 시작 버튼을 클릭합니다.

인스턴스 아이디를 클릭하여 인스턴스 정보를 확인합니다.

다음과 같이 IP 도메인이 할당된 것을 확인할 수 있습니다.


EIP 할당

AWS의 고정 IP를 Elastic IP라고 합니다. 같은 인스턴스를 중지하고 다시 시작하면 새 IP가 할당되어 PC에서 접근하려면 매번 IP를 확인해야하는 번거로움이 생깁니다. 그렇기 때문에 고정 IP를 가지도록 EIP를 설정하겠습니다.

왼쪽 메뉴바에서 [탄력적 IP] -> [탄력적 IP 주소 할당] -> [할당] 을 차례대로 선택합니다.

생성한 IP주소를 EC2 주소와 연결합니다. [작업] -> [탄력적 IP 주소 연결] 메뉴를 선택합니다.

연결할 EC2와 IP를 선택하고 연결을 클릭합니다.

다시 인스턴스 메뉴로 돌아가 할당된 IP를 확인합니다.

탄력적 IP는 생성 후 EC2에 연결하지 않으면 비용이 발생하니 무조건 EC2에 바로 연결해야 합니다. 연결할 EC2가 없다면 탄력적 IP를 삭제해야 합니다.


EC2 서버 접속 [Windows]

putty 사이트에 접속하여 실행 파일을 다운로드하고 설치합니다.

설치 후 puttygen을 실행합니다.

  • putty는 pem 키로 사용이 안되기때문에 pem 키를 ppk 파일로 변환해야만 합니다. puttygen은 이 과정을 진행해 주는 클라이언트 입니다.

상단 메뉴에서 [Conversions] -> [Import Key] -> [내려받은 pem키 선택] 순으로 진행합니다.

[Save Private Key] -> [예] 버튼을 클릭해 ppk파일을 생성합니다.

putty.exe를 실행하여 각 항목을 등록합니다.

  • HostName : username@public_Ip 를 등록합니다.
  • Port : ssh 접속 포트인 22를 등록합니다.
  • Connection type : SSH를 선택합니다.

각 항목을 등록하고 좌측 메뉴에서 [Connection] -> [SSH] -> [Auth] -> [Credentials] 를 차례로 클릭합니다.

Browse를 클릭해 puttygen으로 생성한 ppk 파일을 등록합니다.

등록을 마쳤다면 Session 탭으로 이동하여 Saved Sessions 에 현재 설정들을 저장할 이름을 등록하고 Save 버튼을 클릭합니다.

저장 후 [open] -> [accept] 를 클릭하면 SSH에 접속을 성공한 것을 확인할 수 있습니다.


추가 설정들

Java 11 설치

EC2에서 다음 명령어들을 입력합니다.

sudo yum install java-11-amazon-corretto.x86_64

Is this ok [y/N] 이라는 문구가 나오면 y를 입력해 Java 11 설치를 진행합니다.

설치된 Java 버전을 확인합니다.

java -version

Java 버전을 선택합니다. 이전 단계에서 설치한 버전 그대로 나왔다면 넘어가셔도 됩니다.

sudo /usr/sbin/alternatives --config java

설치된 Java 버전을 확인하고 Selection 번호를 입력해 선택합니다.


타임존 변경

EC2 서버의 기본 시간대는 UTC입니다. 이는 세계 표준 시간으로 한국의 시간과 9시간이 차이납니다. 그렇게 되면 Java 애플리케이션에서 생성되는 시간도 모두 차이가 나기 때문에 꼭 수정해야 합니다.

다음 명령어들을 차례대로 입력합니다.

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

정상적으로 변경되었다면 date 명령어로 타임존이 KST로 변경된 것을 확인할 수 있습니다.


Hostname 변경

여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어렵기 때문에 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경하겠습니다.

hostname 명령어로 현재 hostname을 확인합니다.

다음 명령어로 hostname을 변경합니다.

sudo hostnamectl set-hostname 변경할 hostname

변경 후 sudo reboot로 서버를 재부팅하고 다시 접속하여 변경된 hostname을 확인합니다.

/etc/hosts에 변경한 hostname을 등록합니다.

sudo vim /etc/hosts

127.0.0.1	등록한 hostname

다음 명령어로 정상적으로 등록되었는지 확인합니다.

curl 등록한 호스트 이름

위와 같은 오류가 나온다면 등록이 완료된 것입니다. 이는 아직 80 포트로 실행된 서비스가 없어서 나오는 오류입니다.

profile
공부 목적의 블로그 입니다. 부족한 점이 많으니 잘못된 정보가 있다면 지적부탁드려요!

0개의 댓글