[EC2, Spring Boot] EC2에서 Gradle build시 테스트단계에서 멈추는 현상

당근박쥐·2024년 6월 22일
0

개요

spring boot 서버를 배포하기 위해서 AWS EC2 프리티어 인스턴스를 생성하였다.
그 후, ./gradlew build 명령어를 이용하여 빌드되는 과정중, 아래와 같이 Test 코드가 실행되는 시점에서 EC2가 먹통이 되었다.

root@ip-tmp-ip-tmp-ip:/home/ubuntu/spring-lol-team-maker# ./gradlew build
Starting a Gradle Daemon (subsequent builds will be faster)
<==========---> 78% EXECUTING [41s]
> :test > 0 tests completed
> :test > Executing test carrotbat410.lol.LolApplicationTests

5분, 10분을 기다려도 진행 시간은 바뀌는데, 진행이 전혀 되지 않았다.
인스턴스를 삭제하고 재시도해도 결과는 같았다.

원인

EC2 프리티어의 메모리가 1GB밖에 되지 않아 발생하는 현상이라 한다.
이 문제를 해결하기 위해서는 메모리를 늘려줘야한다.

해결

돈을 주고 메모리를 늘리면 되겠지만, 돈이 나간다.
다른 방안으로는 저장 공간 일부가 메모리역할을 하도록 스왑(swap) 영역을 설정하면 된다.

# 스왑 파일 생성하는 방법

1. 스왑 파일 생성
// aws 예제에는 4GB(128MB x 32)로 되어 있지만, 권장 스왑 공간 크기 계산에 따라 2GB(128MB x 16)로 수정했다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16

2. 스왑 파일의 읽기 및 쓰기 권한을 업데이트
$ sudo chmod 600 /swapfile

3. Linux 스왑 영역을 설정
$ sudo mkswap /swapfile

4. 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용 가능하게 설정
$ sudo swapon /swapfile

5. 절차가 성공적으로 완료되었는지 확인
$ sudo swapon -s

6. 부팅 시 /etc/fstab 파일을 편집하여 스왑 파일을 시작.
편집기에서 파일 열기
$ sudo vi /etc/fstab

파일 끝에 다음 새 줄을 추가하고 파일을 저장하기
(vi 편집기는 i누르면 insert할 수 있다. 수정이 완료되면 esc후 :wq입력하여 저장하기)
/swapfile swap swap defaults 0 0

스왑 파일로 사용할 메모리를 할당후, 다시 ./gradlew build 명령어를 통해 빌드하니 막히던 테스트 부분이 정상적으로 동작하였다.!!!

스왑 공간 크기 계산

참고로 AWS에서는 이렇게 스왑 공간을 권장하고 있다.

프리티어는 RAM이 1GB이므로 권장 스왑 공간의 2배를 설정해주었다.

참고 자료

https://repost.aws/ko/knowledge-center/ec2-memory-swap-file
https://repost.aws/ko/knowledge-center/ec2-memory-partition-hard-drive
https://okky.kr/articles/884329

profile
Starting the day with "git pull," it's good for mental health.

0개의 댓글