저번 성장일지에 적었던 스프링부트 프로젝트 코드를 마무리하고 EC2에 배포를 진행했다.
예전 MVP를 배포할 때는 Heroku를 썼다가 과금 되는 걸 보고 호다닥 카드를 취소하고 클라우드타입을 썼었는데, 클라우드 타입은 배포가 간단했다.
물론 한 번에 성공하진 못함.
다만 무료 버전은 매일 서버를 직접 켜줘야하는 불편감이 있었고, 그래서 한동안 아침에 일어나서 가장 먼저하는 일이 클라우드 타입 서버를 키는 거였다.
굉장히 피곤했음.
다행인 건 10명 정도에게 뿌렸고 사용자가 한 명이었다는 거?ㅎ
그래서 이번엔 AWS EC2를 이용해보기로 했다.
백엔드 서버는 보통 EC2에 배포하는 것 같기도 하고, 수동으로 켜줄 필요도 없고, 프리티어는 웬만하면 무료로 이용가능하다고 했다.
그리고 예전에 받아둔 크레딧도 있었다.
근데 이틀만에 10달러가 과금되었다.
3일차엔 12달러로 늘어남;;
하마터먼 베타버전 출시하기도 전에 파산할 뻔했다.
AWS는 정말...무서운 곳이구나...

그래서 이번엔 과금 주의 사항도 적을 겸, 백엔드 서버를 EC2에 처음 배포해보면서 겪은 에러 일지를 작성해보고자 한다.
공식문서와 구글링을 참고하면서 진행했지만, 이해가 안가는 부분은 역시 GPT와 함께 했다.
개발할 때 정말 도움되는 게 GPT지만, 위험한 것도 GPT다.
그러나 무작정 코드 복붙하면서 물어보지 않고, 모르는 부분을 설명해달라고 하면서 진행하면 공부에도 도움이 되었다.
또 개발 진행하면서 가장 어려운 것 중 하나가
빨리 완성하기 VS 머리에 남기면서 진행하기
중에 잘 선택해서 하는건데, 전자로만 진행하다보면 머리에 남는 게 없고 다음에 똑같은 문제를 보고 어? 이거 기출문젠데? 근데 풀이가 기억이 안나 상태가 반복된다. 물론 후자는 너무 오래 걸린다.
적절히 섞어가면서 해야하는데, 이럴 때도 GPT가 도움이 되었다. 마지막에 GPT한테 오늘 내가 질문했던 부분들의 문제원인과 해결책을 정리해달라고 하면 싹 정리해준다.
그래서 이게 그 부분.
localhost 대신 EC2의 퍼블릭 IP 주소 사용.0.0.0.0으로 변경하여 외부에서 접근할 수 있도록 설정.springdoc-openapi-ui 버전을 2.x대로 업데이트 (implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0').springdoc-openapi-ui:1.6.9 삭제).localhost를 퍼블릭 IP로 변경.tail -f app.log 명령어로 로그 파일을 찾을 수 없었음.nohup.out에 기록되고 있어서 tail -f nohup.out으로 확인../gradlew: Permission denied 오류 발생.chmod +x ./gradlew 명령어로 실행 권한 부여.sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 명령어로 1GB 크기의 swap 파일 생성.sudo mkswap /swapfile 및 sudo swapon /swapfile으로 swap 활성화.아 근데 MySQL 다운받다가 계속 멈추는 문제를 해결하다가 프리티어에서 이틀만에 10달러가 과금되는 문제를 발생시켰다!
사용자는 나랑 팀원 둘 뿐인데!
이틀에 10달러면... 하루에 5달러고...
한 달이면 150달러인데...

안돼
백수는 돈이 없다.
부랴부랴 구글링을 했고 문제 원인은
이것 때문이었다.
다운이 안되길래 그냥 프리티어 한도 내에서 최대로 늘린 것 뿐인데...
프리티어는 프리티어가 아니었다.
프리의 뜻이 나 모르게 바뀌었나?
자유롭게 나의 돈을 가져가겠다는 뜻이었던걸까?
AWS는 이런 식으로 돈을 벌고 있었구나
너무 무서워요

다시 기본으로 줄였더니 다음날 아침에 12달러로 늘긴했지만, 그건 늦게 반영된 부분이었던 것 같고
그 이후로는 과금이 되지 않고 있다. 제발
물론 우분투 서버가 계속 멈추는 일도 이젠 일어나지 않고 있다. 당연함. 저게 문제가 아니었음.
휴...
그리고
12달러 내고 배운 EC2 서버 배포 방식
cd /c/Users/admin/.ssh
chmod 400 "pem키"
ssh -i "pem키" ubuntu@~~

# git 설치
sudo apt-get install git
git --version
# SSH KEY 생성
cd ~/.ssh
ssh-keygen -t rsa -C "깃 이메일"
# github -> setting -> SSH and GPG Keys -> new SSH key
cat id_rsa.pub
git clone "ssh 코드 복사한 값" # yes 입력
# JDK 23 설치(오라클에서)
wget https://download.oracle.com/java/23/latest/jdk-23_linux-x64_bin.tar.gz
# 압축 해제
sudo tar -xvzf jdk-23_linux-x64_bin.tar.gz -C /opt/
# 환경 변수 설정
sudo nano ~/.bashrc
export JAVA_HOME=/opt/jdk-23
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc
java -version
./gradlew build -x test # text 제외
cd build/libs
ls
nohup java -jar '파일명'-0.0.1-SNAPSHOT.jar &
# 로그 파일 출력
cat nohup.out
# MySQL 패키지 설치
sudo apt update
sudo apt install mysql-server
# MySQL 보안 설정
sudo mysql_secure_installation
# 실행 확인
sudo service mysql status
# MySQL 접속
sudo mysql -u root -p
# 빈 스왑 파일 생성(1GB)
sudo fallocate -l 1G /swapfile
# 스왑 파일 권한 설정
sudo chmod 600 /swapfile
# 스왑 파일로 저장
sudo mkswap /swapfile
# 스왑 활성화
sudo swapon /swapfile
# 스왑 파일 영구 적용
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
여기까지가 현재 진행상황이다.
내가 java로 백엔드까지 만들고 있을 줄이야.
내가 개발을 하고 있을 줄이야.
일단 백엔드는 배포까지 끝났지만, 프론트와 협업하는 과정에서 수정할 부분이 꽤 있었다.
근데 프론트와 협업할 때 백엔드 로그를 계속 백엔드 개발자가 따로 보내주는건가?
협업하는 방식도 공부해야겠는데... 어디서 해야할까
사실 이번주에 프론트까지 배포를 하려고 했으나, 생각보다 에러가 발목을 잡아서 조금 미뤄지게 되었다.
그리고 이제 내가 프론트를 공부해서 프론트에 합류할 예정이다!
창업을 준비하다 풀스택 개발자로...?
라고 말하기엔 실력이 부족하다.
지난 MVP는 빠르게 내는 것에 집중하다보니 너무 기능이 없어서 사용자에게 주는 차별성이 없었고,
이번 베타버전은 기능을 최소한으로 넣되 필수적인 건 꼭 동작하게 하려고 하다보니 시간이 길어지고 있다.
그 사이의 적정선을 찾는 게 정말 어려운 일인 것 같다.
근데 또 개발은 나름 재밌는 듯.
이러고 다음주에 컴퓨터에 대고 내가 너한테 대체 뭘 잘못했냐고 고해성사하고 있을지도 모르지만...