개발/실습

AWS를 이용하여 배포 해보기 - 보안그룹 설정

람무 2023. 5. 15. 11:41

이전에 보안그룹을 설정하지 않고 서버를 실행해서 제대로 된 결과를 받지 못했습니다.
오늘은 보안그룹을 설정해서 이를 해결하도록 하겠습니다.

보안그룹?

보안그룹은 인스턴스에서 발생하는 트래픽에 대한 가상 방화벽 입니다. 트래픽이 인스턴스로 들어오는 경우라면 인바운드, 인스턴스에서 트래픽이 나간다면 아웃바운드 라고 부릅니다. 앞서 제대로 배포를 진행했는데도 정상적인 접속이 되지 않았던 이유는 인바운드 규칙을 설정하지 않았기 때문입니다.

EC2 인스턴스는 기본적으로 인바운드 규칙에 허용되지 않은 것들은 접근하지 못하도록 필터링 되어있습니다.

인스턴스를 생성하면 기본적으로 SSH접속을 위한 규칙만 생성이 되었기 때문에 ubuntu OS로 접속해서 이런저런 설정들을 할 수 있었지만 SMB프로토콜 등의 기타 규칙이 허용되지 않아서 접속이 안되었습니다.

보안그룹 규칙 추가

인스턴스 탭에서 스크롤을 오른쪽으로 쭉 이동하다보면 '보안 그룹 이름' 을 통해서 해당 인스턴스가 어떤 보안그룹에 속해있는지 확인할 수 있습니다.

1. 좌측의 보안그룹 클릭
2. 인스턴스에서 확인한 보안그룹 이름과 동일한 이름을 가진 행 체크
3. 하단 탭 인바운드 규칙 클릭
4. 인바운드 편집버튼 클릭
순서로 진행합니다.

규칙 추가를 클릭합니다.

8080 포트에 대한 접근을 허용해줄 계획입니다.
1. 사용자 지정 TCP 선택
2. 포트번호에 8080 입력
3. 소스탭 Anywhere-IPv4 선택
4. 규칙저장 클릭
순서로 진행합니다.

다시 EC2 인스턴스로 돌아옵니다.
혹시나 인스턴스를 중지했거나 재부팅한 상태라면 인스턴스에 연결하여 이전의 java 파일을 다시 실행해줍니다.

보안그룹을 추가해준 후 정상적으로 8080포트에 접속하여 결과가 제대로 보여지는지 확인이 되었습니다.

그런데 한가지 문제가 남았습니다.
EC2 터미널이 동작중일 때는 서버가 잘 작동하지만 터미널을 종료하게 된다면 서버 역시 종료가 됩니다. 서버를 계속 가동해야 하는 상황이라면 매우 난처할 수 있겠습니다. 이러한 문제를 해결하기 위해서 백그라운드 환경으로 서버를 실행할 수 있는데요, 이를 Shell Script 라고 부릅니다.

Shell Script 설정

Shell Script는 운영체제를 위한 스크립트로 한번 작성을 해두면 새롭게 재작성을 해야할 일은 많지 않고, 기존에 작성해둔 스크립트를 기준으로 조금씩 변형해서 사용할 수 있습니다.

먼저 터미널에서 build 폴더가 있는 경로로 이동합니다.

nano restart.sh

nano 편집기를 사용하여 restart.sh 파일을 생성합니다. 리눅스는 nano 외에도 vim, emacs등의 편집기를 제공합니다. nano 외에 사용가능한 편집기가 있다면 해당 편집기로 작성해도 무방합니다.

#!/bin/bash

ps -ef | grep "{어플리케이션 실행파일 명}-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null

if [ $? -eq 0 ];then
    echo "my-application Stop Success"
else
    echo "my-application Not Running"
fi

echo "my-application Restart!"
echo $1

nohup java -jar build/libs/{어플리케이션 실행파일 명}-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > /dev/null 2>&1 &

상기 내용에서 {} 에 해당하는 부분만 수정하여 복붙하시면 됩니다. 구조를 살펴보자면
1. ps -ef 행은 어플리케이션이 실행중이라면 실행을 종료하는 내용 입니다.
2. if ~ fi 행은 종료 이력을 파악하여 적절한 문구가 출력될 수 있도록 하는 내용 입니다.
3. echo은 어플리케이션을 다시 실행하기 위한 전조과정 입니다.
4. nohup 명령어를 통해 백그라운드 환경으로 어플리케이션을 실행합니다.

제 경우엔 이런 화면입니다.
작성 완료 후 Ctrl + X 키로 문서편집을 종료하면 저장여부를 묻습니다. Y 입력 후 Enter 를 입력하면 저장을 완료하고 build 폴더로 이동하게 됩니다. 이후 ls 입력 후 Enter 키를 누르면 'restart.sh' 파일이 생성된 것을 확인할 수 있습니다.

sudo chmod 755 restart.sh

해당 명령어를 통하여 실행 권한을 부여합니다.

./restart.sh

해당 명령어를 통해서 어플리케이션을 실행할 수 있습니다.