Group Study (2023-2024)/Spring 입문

[스프링 입문] 5주차 chap 06 - AWS 서버 환경을 만들어보자 - AWS EC2

jylee3 2023. 12. 25. 22:06

chap06 - AWS 서버 환경을 만들어보자 - AWS EC2

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

24시간동안 작동하는 서버에는 3가지 선택지가 있다.

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

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

  • 클라우드 : 클라우드 서비스는 인터넷(클라우드)를 통해 서버, 스토리지(파일 저장소), 데이터베이스, 네트워크 ,소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것이다.
  • 클라우드 형태
    • Infrastructure as a Service(IaaS, 아이아스, 이에스)
      • 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
      • 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해주는 서비스
      • AWS의 EC2, S3 등
    • Platform as a Service(Paas, 파스)
      • IaaS에서 한 번 더 추상화 한 서비스
      • 한 번 더 추상화 했기 때문에 많은 기능이 자동화 되어 있음
      • AWS의 Beanstalk, Heroku(헤로쿠) 등
    • Software as a Service(SaaS, 사스)
      • 소프트웨어 서비스
      • 구글 드라이브, 드랍박스 등
      AWS의 장점
      • 첫 가입 시 1년간 대부분 서비스가 무료
      • 클라우드에서 기본적으로 지원하는 기능이 많아 개인이나 소규모일때 개발에 집중할 수 있다.
      • 많은 기업이 AWS를 사용중이며, 사용자가 많아 국내 자료와 커뮤니티가 활성화 되어있다.

이 책에서 진행하는 모든 AWS 서비스는 IaaS를 사용한다. AWS의 PaaS 서비스인 빈스톡을 사용하면 대부분 작업이 간소화 되지만, 프리티어로 무중단 배포가 불가능하다.

배포할때마다 서버가 다운되면 제대로 된 서비스를 만들 수 없으니 무중단 배포는 필수이고, 빈스톡은 사용할 수 없다.

6.1 AWS 회원 가입

준비물 : Master 혹은 Visa 카드

  1. AWS 공식 사이트(https://aws.amazon.com/ko/ )로 이동한 뒤, 무료 계정 만들기를 선택한다.
  2. 신규로 생성할 AWS 계정 정보를 등록하고, 영문 주소를 입력한다.
  3. 준비한 Master 혹은 Visa 카드를 등록한다.
  4. 로그인을 진행합니다. 정상적으로 로그인이 되면 바로 EC2를 생성

6.2 EC2 인스턴스 생성하기

  • EC2 : AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다. 보통 "AWS에서 리죽스 서버 혹은 윈도우 서버를 사용한다"라고 하면 이 EC2를 이야기 하는 것이다.

AWS에서 제공하는 프리티어는 다음과 같은 제한이 존재

  1. 사양이 t2.micro만 가능하다.
    • vCPU (가상 CPU) 1 Core, 메모리 1GB 사양이다.
    • 보통 vCPU는 물리 CPU 사양의 절반 정도의 성능을 가진다.
  2. 월 750시간의 제한이 있으며, 이를 초과할 경우 비용이 부과된다.
    • 24시간 * 31일 = 744시간
    • 즉, 1대의 t2.micro만 사용한다면 24시간 사용할 수 있다.
  • EC2 만들기
    1. EC2를 만들기 전에, 본인의 리전을 확인
    2. 화면 중앙 검색창에서 EC2를 검색하면 EC2 대시보드가 나오는에 여기 중앙에 있는 [인스턴트 시작] 버튼을 클릭한다. 인스턴스랑 EC2 서비스에 생성된 가상머신을 이야기
    3. 인스턴스를 생성하는 첫 단계는 AMI를 선택하는 것이다. 태그에는 웹 콘솔에서 표기될 태그인 Name 태그를 등록한다.
      • AMI : EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것
    4. Amazon Linux AMI 선택
    5. 인스턴스 유형은 프리티어로 표기된 t2.micro를 선택한다.
      • 인스턴스로 접근하기 위해서는 pem 키 (비밀키) 가 필요하며, 마지막 단계에서는 할당할 pem 키를 선택
      • 마스터 키로 절대로 유출되어서는 안된다.
    6. 네트워크 세팅
      1. 보안 그룹은 방화벽을 이야기하며, 서버로 80 포트 외에는 허용하지 않는다는 역할을 하는 방화벽이 AWS에서는 보안 그룹으로 사용
      2. SSH이면서 포트 번호가 22인 경우 : AWS EC2에 터미널로 접속할 때
      3. 자신의 집의 IP를 기본적으로 추가하고, 만약 집 외에 장소 (ex. 카페) 에서 접속할 때는 해당 장소의 IP를 다시 SSH 규칙에 추가하는 것이 안전하다.
    7. 스토리지 선택 단계로 서버 용량을 선택
      1. 설정 기본값은 8GB, but 프리티어로 30GB까지 가능하므로 30GB로 설정한다.
    8.  설정을 다 하면 [인스턴트 시작] 버튼을 누르자. 다음 화면과 같이 성공했다는 것을 확인할 수 있다. 인스턴스 ID를 누르자.
    9. IP와 도메인이 할당된 것을 확인할 수 있다.
  •  

인스턴스도 결국 하나의 서버이기 때문에 IP가 존재한다. 인스턴스 생성 시에 항상 새 IP를 할당하는데, 한 가지 조건이 더 있다. 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다

즉, 요금을 아끼기 위해 잠깐 인스턴스를 중지하고 다시 시작할 시 IP가 변경된다. 이렇게 되면 매번 접속할 시 IP가 변경되서 PC에서 접근할 때마다 IP주소를 확인해야 한다. 이는 굉장히 번거로우므로 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야 한다. 그러므로 고정 EIP 할당

  • EIP(탄력적 IP) : AWS의 고정 IP
  1. EC2 인스턴스 페이지의 왼쪽 카테고리에서 탄력적 IP를 눌러 선택하고, 주소가 없으므로 [새주소 할당] 버튼을 클릭해서 [할당]버튼을 클릭
  2. 그 다음 방금 생성한 탄력적 IP와 방금 생성한 EC2 주소를 연결한다.
  3. 탄력적 IP를 왁인 하고, 페이지 위에 있는 [작업] 버튼 ⇒ [주소 연결]메뉴를 선택
  4. 연결이 완료되면 왼쪽 카테고리에 있는 [인스턴스] 탭을 클릭해서 다시 인스턴스 목록으로 이동한다. 해당 인스터스의 퍼블릭, 탄력적 IP가 잘 연결되었는지 확인한다.

6.3 EC2 서버에 접속하기 (MAC)

방금 생성한 EC2로 접속

여기서는 많은 분이 사용하는 운영체제인 MAC과 윈도우 중 윈도우를 중심으로 진행하겠다

  • MAC&Linux는 터미널
  • Window는 putty
  • Windows   
    1. putty 사이트(https://www.putty.org/)에 접속해 실행파일(아래 2가지 파일)을 내려받는다
      1. putty.exe
      2. puttygen.exe
    2. puttygen.exe파일 실행
      • putty는 pem 키로 사용이 안 되며 pem 키를 ppk 파일로 변환을 해야만 한다 —> puttygen : 이 과정을 진행해 주는 클라이언트
    3. puttygen 화면 상단에서 [Conversions ⇒ Import Key]를 선택하여 내려받은 pem키를 선택
    4. [Save private key]버튼을 클릭 후 ppk 파일 생성(경고 메세지가 뜨면 [예]를 클릭하고 넘어간다)
      1. ppk 파일이 저장될 위치와 ppk이름을 등록
      2. ppk 파일이 잘 생성되었으면 putty.exe. 파일을 실행해 다음과 같이 각 항목을 등록
        1. HostName : Username@public.ip 를 등록. 우리가 생성한 Amazon Linux는 ec2-user가 username이라서 ec2-user@탄력적IP주소를 등록하면 된다
        2. Port : ssh접속 포인트인 22를 등록
        3. Connection type : SSH를 선택
    5. 항목들을 모두 채우면 왼쪽 사이드바에 [Connection ⇒ SSH ⇒ Auth]를 차례로 클릭해 ppk파일을 로드할 수 있는 화면으로 이동. [Browse…]버튼 클릭
    6. 좀 전에 생성한 ppk파일을 선택해 불러온다. 정상적으로 불러오면 다시 [Session]탭으로 이동해 [Saved Sessions]에 현재 설정들을 저장할 이름을 등록하고 [Save]버튼을 클릭
    7. 저장후 [open]버튼을 클릭하 후 SSH 접속 성공여부 확인

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

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

- JAVA 11 설치

 $ sudo yum install java-11-amazon-corretto

JAVA11 선택

 $ sudo /usr/sbin/alternatives --config java

JAVA 버전 확인

java -version
  • 타임존 변경

EC2 서버의 기본 타임존은 UTC이다. 이는 세계 표준 시간으로 한국의 시간대가 아니다. 즉, 한국의 시간과는 9시간의 차이가 발생한다. 이렇게 되면 서버에서 수행되는 Java 애플리케이션에서 생성되는 시간도 모두 9시간씩 차이가 나기 때문에 꼭 수정해야 할 설정이다.

다음 명령어들을 수행

 $ sudo rm /etc/localtime
 $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul etc/localtime
  • Hostname 변경

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

다음 명령어로 편집 파일을 연다

sudo vim/etc/sysconfig/network

화면에 노출되는 항목 중 HOSTNAME으로 되어있는 부분을 본인이 원하는 서비스 명으로 변경 후 재부팅

sudo reboot

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

sudo vim/etc/hosts

다음과 같은 화면에 방금 등록한 HOSTNAME을 등록

127.0.0.1 등록한HOSTNAME

:wq를 누르고 종료한 뒤 정상적으로 등록되었는지 확인

curl 등록한 호스트 이름

잘 등록하면 다음과 같이 80포트로 접근이 안된단 에러 발생

아직 80포트로 실행된 서비스가 없음을 의미는 즉, curl 호스트 이름으로 실행은 잘 되었음을 의미