스프링부트와 AWS 로 구현하는 웹서비스

yelosta·2023년 9월 12일
0

AWS

목록 보기
1/1

일반적으로 웹 서비스를 만들게 되면 배포 하기 전 단계에서 그치는 경우가 많은데요,
이 상태에서 멈추게 되면 같은 ip주소를 공유하는 곳에서만 접속할 수 있습니다.

외부에서도 접속하게 하려면 많은 선택지가 있으나, 1년동안 Free tier를 통해 무료로 사용이 가능한 Amazon의 클라우드 서비스를 이용해서 배포하도록 하겠습니다.

1. AWS 회원가입

https://aws.amazon.com/ko/
Master 카드나 Visa 카드를 준비하고 무료 계정을 만듭니다.
이 단계는 이미 설명이 잘 되어 있는 참고 자료가 많기 때문에 넘어가도록 하겠습니다.

2. 리전 설정


서울로 리전을 변경해 줍니다.

3. 인스턴스 생성

서비스에서 EC2를 검색하고 인스턴스 생성을 클릭합니다.

3.1 이름 및 태그

이름 및 태그는 key : value 형식으로 되어 있습니다.

  • 키 : Name
  • 값 : springboot-webservice

3.2 AMI(Amazon Machine Image)

프리 티어로 사용이 가능한 이미지를 찾아주면 되는데, 저는 Amazon Linux2를 선택했습니다.

3.3 인스턴스 유형

인스턴스 유형으로는 프리 티어로 사용이 가능한 t2.micro 를 사용하겠습니다.

3.4 키 페어

인스턴스를 안전하게 연결할 수 있도록 필수로 해야하는 설정입니다.

  • 키 페어 이름 : springboot-webservice
  • 유형 : rsa
  • 프라이빗 키 파일 형식 : .pem

3.5 네트워크 설정

보안그룹을 생성해줍니다.
네트워크 설정은 추후에도 진행할 예정이지만, EC2 인스턴스를 보호하기 위해
SSH 인바운드 규칙은 꼭 추가해주세요.

네트워크 설정에서 우측 상단의 편집 버튼을 눌러서 보안그룹 이름을

springboot-webservice-ec2

로 변경해줍니다. (원하시는 다른 이름으로 바꾸셔도 괜찮습니다.)

3.6 스토리지 구성

스토리지는 기본인 8GiB로 해도 되지만 인스턴스를 어차피 1개만 사용할 예정이라 넉넉하게 30GiB로 설정해줍니다.

3.7 pem 키

여기서, SSH 프로토콜을 이용해 EC2에 접속하는데, pem 키가 필요하게 됩니다.
아까 위에서 RSA 기반의 키 페어를 생성하였습니다.
키 페어 다운로드를 통해 로컬환경에 안전하게 다운로드를 합니다.

3.8 탄력적 IP 주소

인스턴스는 하나의 서버이기 때문에 IP 주소를 갖게 됩니다.
하지만, 이 IP 주소는 고정되지 못하고 갱신이 되는데 갱신되는 조건은 다음과 같습니다.

  • 인스턴스 생성 시
  • 인스턴스 재부팅 시

때문에, 고정 IP를 가지게 하려면 탄력적 IP 주소인 EIP(Elastic IP)를 할당해야합니다.
좌측 메뉴에서 네트워크 및 보안 - 탄력적 IP 선택 - 탄력적 IP 주소 할당

저는 이미 진행을 해서 화면에는 있지만 처음하시는 분들은 없습니다.
생성한 EIP는 EC2 인스턴스와 연결을 해줍니다.
‼️ 생성한 탄력적 IP(EIP)는 바로 EC2에 연결을 해야합니다.
연결하지 않으면 비용이 발생하므로 꼭 연결하고, 추후에 사용할 인스턴스가 없을 때는 탄력적 IP를 꼭 삭제해야합니다.‼️

4. SSH 접속

4.1 MAC OS에서 접속해보기(터미널 이용)

pem 파일의 권한 변경

chmod 600 대충비밀스러운.pem

ec2 접속(번거로운 방법) ⬅️ 테스트 용으로 해보세요.

ssh -i pem 파일저장한디렉토리 EIP주소

4.2 쉽게 SSH 접속하기

매번 위의 방법으로 접속하기 어려우니 pem 파일을 ~/.ssh/ 로 복사해줍니다.

cp 대충비밀스러운.pem ~/.ssh/

pem 파일이 잘 복사되었는지 확인합니다.

# 복사한 디렉토리로 이동
cd ~/.ssh/ 
# 현재 디렉토리의 파일 및 폴더 확인
ll 

잘 복사가 되었다면 복사한 pem 파일에도 권한을 부여해줍니다.

chmod 600 ~/.ssh/대충비밀스러운.pem

권한을 변경하였다면 ~/.ssh 디렉토리에 config 파일을 생성합니다.

vim ~/.ssh/config

생성한 config 파일에는 아래와 같이 입력합니다.
(vim에서는 i를 눌러서 입력모드로 전환할 수 있습니다.)

 Host 원하는서비스명
     HostName EIP주소
     User ec2-user
     IdentityFile ~/.ssh/pem키 이름

esc 누르고 :wq 를 입력&엔터로 저장합니다.(write&quit)
생성한 config 파일에 실행권한을 설정합니다.

chmod 700 ~/.ssh/config

config 파일에 지정했던 원하는서비스명을 통해 접속해봅니다.

ssh config에등록한서비스명

5. 리눅스 서버 설정

이제 아마존 리눅스 서버에 접속이 가능해졌습니다.
자바 기반의 웹 애플리케이션이 작동하는 서버에서는 필수로 해야하는 설정입니다.

  • Java 11 설치
  • 타임존 변경
  • Hostname 변경

5.1 Java11 설치

설치

sudo yum install java-11-amazon-corretto

버전 확인

java -version

설치한 자바 버전 선택

sudo /usr/sbin/alternatives --config java

5.2 타임존 변경

EC2 서버의 기본 타임존은 세계 표준시간인 UTC이므로 한국의 시간대인 KST로 바꿔야 합니다.

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

5.3 Hostname 변경

서버가 여러개인 경우 IP만으로는 어떤 서비스의 서버인지 알기가 어렵기 때문에 Hostname을 변경하여 확인을 용이하게 해야 합니다.

5.3.1

다음 명령어로 편집 파일을 엽니다.

sudo vim /etc/sysconfig/network

HOSTNAME 부분을 원하는 서비스 명으로 바꿉니다.

NETWORKING=yes
HOSTNAME=원하는서비스명
NOZEROCONF=yes

서버를 재부팅합니다.

sudo reboot

등록한 서비스 명으로 바뀐 것을 확인할 수 있습니다.

5.3.2 /etc/hosts에 hostname 등록

호스트의 주소를 찾을 때는 /etc/hosts를 가장 먼저 검색합니다.
그러므로 파일을 열어서 수정해줍니다.

sudo vim /etc/hosts

파일 맨 아래에 추가해줍니다.

 127.0.0.1 방금등록한HOSTNAME

:wq 명령어로 저장&종료 하고 아래 명령어를 통해 정상 등록되었는지 확인합니다.

curl 방금등록한HOSTNAME

잘 등록하였다면 80포트로 접근이 안된다는 에러 발생하며, 이는 아직 80 포트로 실행된 서비스가 없음을 의미합니다.
즉, 위의 명령어로 실행은 잘 되었음을 의미합니다.

이로써 AWS EC2까지 설정이 완료되었습니다.
다음 포스트에서는 AWS 데이터베이스 서비스 RDS를 생성하고 설정해보겠습니다.

[출처]
해당 글은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 참고하여 작성하였습니다.

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

profile
노란 별의 기록 저장소

0개의 댓글