Peony의 기록 창고 🌼
article thumbnail
반응형

이 글은 이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책 내용을 정리한 것입니다.

http://www.yes24.com/Product/Goods/83849117

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24

가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링

www.yes24.com

 

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

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

일반적인 비용은 2번이나 1번이 저렴하지만, 특정시간에만 사용량이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.

 

클라우드란?

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

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

 

클라우드 형태

  1. IaaS(아이아스, 이에스)
    • 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
    • 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해주는 서비스
    • AWS의 EC2, S3 등
  2. Paas(파스)
    • IaaS에서 한 번 더 추상화 한 서비스
    • 한 번 더 추상화 했기 때문에 많은 기능이 자동화 되어 있다
    • AWS의 Beanstalk, Heroku(헤로쿠) 등
  3. SaaS(사스)
    • 소프트웨어 서비스
    • 구글 드라이브, 드랍박스 등

 

여러 클라우드 서비스 AWS, Azure, GCP들 중에서 AWS의 장점

  • 첫 가입 시 1년간 대부분 서비스가 무료이다. 단, 서비스마다 제한이 있다.
  • 클라우드에서 기본적으로 지원하는 기능이 많아 개인이나 소규모일때 개발에 집중할 수 있다.
  • 많은 기업이 AWS를 사용중이며, 사용자가 많아 국내 자료와 커뮤니티가 활성화 되어있다.

 

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

배포할때마다 서버가 다운되면 제대로 된 서비스를 만들 수 없으니 무중단 배포는 필수이고, 빈스톡은 사용할 수 없다. 이제 AWS 회원가입과 앞으로 배포할 서버인 EC2를 생성하고 설정해보자.

 

AWS 회원 가입

준비물 : Master 혹은 Visa 카드

AWS 공식 사이트(https://aws.amazon.com/ko/ )로 이동한 뒤, 무료 계정 만들기를 선택한다. 신규로 생성할 AWS 계정 정보를 등록하고, 영문 주소를 입력한다. 후에 준비한 Master 혹은 Visa 카드를 등록한다. 아래 화면 중앙에 있는 가입 완료를 누르면 가입이 완료 됩니다.

이제 로그인을 진행합니다. 정상적으로 로그인이 되면 바로 EC2를 생성해보자.

 

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를 만들기 전에, 본인의 리전을 확인해보자.

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

서울 리전이 생기기 전까지는 국내 서비스들은 도쿄 리전을 사용했지만, 현재는 서울 리전이 있어 국내에서 서비스한다면 무조건 서울 리전을 선택하면 된다.

 

EC2를 검색하면 EC2 대시보드가 나오는에 여기 중앙에 있는 [인스턴트 시작]버튼을 클릭한다. 인스턴스랑 EC2 서비스에 생성된 가상머신을 이야기 한다.

 

인스턴스를 생성하는 첫 단계는 태그를 등록하는 것이다. 태그에는 웹 콘솔에서 표기될 태그인 Name 태그를 등록한다.

  • EC2의 이름을 붙인다고 생각하면 된다. (ex. 페이스북, 인스타그램 등 SNS의 태그와 동일한 역할)

 

그 다음, AMI를 선택부분 이다. 여기서는 Amazon Linux AMI를 선택한다.

  • AMI (Amazon Machine Image) - EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것

 

인스턴스 유형은 프리티어로 표기된 t2.micro를 선택한다.

 

인스턴스로 접근하기 위해서는 pem 키 (비밀키) 가 필요하며, 마지막 단계에서는 할당할 pem 키를 선택하는 것이다.

일종의 마스터 키이며 절대로 유출되어서는 안된다.

 

다음은 네트워크 세팅이다.

 

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

  • SSH이면서 포트 번호가 22인 경우 : AWS EC2에 터미널로 접속할 때
  • 자신의 집의 IP를 기본적으로 추가하고, 만약 집 외에 장소 (ex. 카페) 에서 접속할 때는 해당 장소의 IP를 다시 SSH 규칙에 추가하는 것이 안전하다.

 

스토리지 선택 단계이며, 서버의 용량을 얼마나 정할지 선택하는 단계이다.

설정 기본값은 8GB이지만, 프리티어로 30GB까지 가능하므로 30GB로 설정한다.

 

설정을 다 하면 [인스턴트 시작] 버튼을 누르자. 다음 화면과 같이 성공했다는 것을 확인할 수 있다. 인스턴스 ID를 누르자.

IP와 도메인이 할당된 것을 확인할 수 있다.

 

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

때문에 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야 한다. ⇒ EIP 할당

  • EIP(탄력적 IP) : AWS의 고정 IP

EC2 인스턴스 페이지의 왼쪽 카테고리에서 탄력적 IP를 눌러 선택하고, 주소가 없으므로 [새주소 할당] 버튼을 클릭해서 할당하자. 그 다음 방금 생성한 탄력적 IP와 방금 생성한 EC2 주소를 연결한다.

주소 연결을 위해 생성한 EC2 이름과 IP를 선택하고 [연결] 버튼을 누른다.

연결이 완료되면 왼쪽 카테고리에 있는 [인스턴스] 탭을 클릭해서 다시 인스턴스 목록으로 이동한다. 해당 인스터스의 퍼블릭, 탄력적 IP가 잘 연결되었는지 확인한다.

 

EC2 서버에 접속하기 (MAC)

여기서는 윈도우가 아닌 MAC OS에서 기본으로 제공하는 터미널을 이용하여 인스턴스에 접속하는 방법을 소개한다.

 

다음과 같이 pem 키 파일의 권한을 변경한다.

 $ chmod 600 <pem 키 이름>.pem

 

아래와 같은 명령어를 입력하여 ec2에 접속한다.

 ssh -i pem <pem 키 위치> <EIP주소>

위 명령어로도 접속이 가능하지만 매번 이렇게 하기 번거로우니 config 파일을 통해 쉽게 접속하도록 하자.

 

쉽게 SSH 접속하기

키페어 pem 파일을 ~/.ssh/로 복사한다.

 $ cp pem키파일 ~/.ssh/

 

 

pem키가 잘 복사되었는지 확인해보자.

 $ cd ~/.ssh/
 $ ll

 

마찬가지로 복사된 pem 키의 권한을 변경한다.

 $ chmod 600 ~/.ssh/pem키파일

권한을 변경하였다면 ~/.ssh에 config파일을 생성하고 다음과 같이 채워넣는다.

 $ vim ~/.ssh/config

i를 쳐서 입력모드로 변환한 뒤에 다음과 같이 적어준다.

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

esc를 누르고, :wq를 쳐서 저장한다.

 

생성된 config 파일은 실행 권한이 필요하기 때문에 권한을 설정해준다.

 $ chmod 700 ~/.ssh/config

 

이제 다음 명령어를 수행하여 접속이 성공하였음을 확인할 수 있다.

 $ ssh config에 등록한 서비스명

 

기타 설정들

  1. Java11 설치
  2. 타임존 변경
  3. 호스트 네임 변경

 

1. Java11 설치

 $ sudo yum install java-11-amazon-corretto

버전 확인

 $ java -version

자바 선택

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

 

2. 타임존 변경

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

다음 명령어를 차례로 수행하자.

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

 

3. 호스트 네임 변경

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

호스트 이름 업데이트를 유지하려면 preserve_hostname cloud-init 설정이 true로 설정되어 있는지 확인해야 한다.

 $ sudo vim /etc/cloud/cloud.cfg

preserve_hostname 설정이 나열되어 있지 않으면 파일 끝에 다음 텍스트 줄을 추가하자.

 

Amazon Linux 2

 $ sudo hostnamectl set-hostname springboot-webservice

mazon Linux AMI

 $ sudo vim /etc/sysconfig/network

HOSTNAME 항목을 변경하여 원하는 호스트 이름을 반영하자.

 

마지막으로 인스턴스를 재부팅하여 새 호스트 이름을 적용한다.

 $ sudo reboot

 

 

Hostname이 등록되었다면 한 가지 작업을 더 해야한다.

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

다음 명령어로 /etc/hosts 파일을 열어보자.

 $ sudo vim /etc/hosts

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

 127.0.0.1 방금 등록한 HOSTNAME

:wq 명령어로 저장하고 종료한 뒤 정상적으로 등록되었는지 확인해보자.

 $ curl springboot-webservice

잘 등록하였다면 다음과 같이 80 포트로 접근이 안된다는 에러가 발생한다.

 

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

 

자세한 내용은 공식문서를 확인해보자.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/set-hostname.html

 

Amazon Linux 인스턴스에서 호스트 이름 변경 - Amazon Elastic Compute Cloud

이 정보는 Amazon Linux에 적용됩니다. 기타 배포에 대한 자세한 내용은 해당 설명서를 참조하세요.

docs.aws.amazon.com

반응형
profile

Peony의 기록 창고 🌼

@myeongju