[졸프] AWS EC2를 이용해서 연동서버 구축하기

순두누나·2025년 5월 31일

졸업프로젝트

목록 보기
5/21

졸프 업로드,,,오랜만이어요 그동안 뭔가 개발했는데 진짜 너무 바빠서 블로그 올릴 생각도 안들었슈... 왜냐면 개발보고하는 날이 가까워져서 그냥 어떻게든 개발을 했어야했음

현 API 상황


다른 수업들이랑 병행하기 힘들다....난 개발을 방학때 하는 줄 알았어 (본전생 애들도 개발은 방학때 함 근데 왜 복전생 반을 이렇게 빡세게 시키시나요?)
근데 뭐 어떡해 해야지. 정신차리자.


자, 오늘은 백엔, 프엔, ML을 다같이 연동하기 위한 서버를 구축해보겠음. 스따또

우선 전체적인 진행상황

1. EC2 인스턴스 생성

1-1. AWS 로그인 및 EC2 대시보드 접속

  • AWS Console에 로그인
  • "EC2" 서비스 검색 후 진입

1-2. 인스턴스 생성

  • "인스턴스 시작" 클릭
  • AMI: Ubuntu 22.04 선택
    나는 최신 버전인 24.04보다 안정성이 뛰어난 22.04를 선택했다
  • 인스턴스 유형: t3a.medium
  • 키 페어: 새로 생성 (pem 파일 저장 필수!)
  • 보안 그룹 설정:
    • 22 (SSH)
    • 8080 (Spring Boot)
    • 3000 (React 등 프엔)
    • 5000 (Flask 등 ML 서버)
    • 필요 시 80, 443 (HTTP/HTTPS)

1-3. 인스턴스 시작 및 퍼블릭 IP 확인


2. EC2에 SSH 접속


chmod 400 your-key.pem
ssh -i "qnb-server-key.pem" ubuntu@<EC2 퍼블릭 IP>

이렇게 해당 서버에 접속!


3. 개발 환경 세팅

3-1. Java (Spring Boot 용)


sudo yum install java-17-amazon-corretto -y  # Amazon Linux
# 또는
sudo apt install openjdk-17-jdk -y  # Ubuntu
java -version

3-2. Node.js (React 등 프론트 용)


curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
node -v
npm -v

3-3. Python + pip (ML 서버용)


sudo yum install python3 -y
sudo yum install python3-pip -y
python3 --version
pip3 --version

이렇게 진행하고 각 레포지에 있는 파일들을 clone하려고 했는데 토큰 문제가 생겨서 403 오류가 났다. (밑 코드)

remote: Write access to repository not granted.
fatal: unable to access 'https://github.com/q-n-b/BackEnd.git/': The requested URL returned error: 403

403 오류는 깃허브에 로그인되었지만 해당 레포지에 접근할 권한이 없다는 것!

내가 알고보니 깃허브의 토큰을 만들고 EC2 서버에 로그인하는 과정에서 classic 토큰을 받아어야했는데 fine-grained 토큰을 받은 것....그래서 이후 수정하고 클론해올 수 있었다!

나의 경우 다른 친구의 계정 조직에 레포지토리를 가져오는 것이었기 때문에 각 레포지토리의 coordinators에 나를 추가하고 가져올 수 있었다.


각 서비스 실행

백엔드 (Spring Boot)

cd Backend
./gradlew build  # 또는 mvn package
java -jar build/libs/*.jar

기본적으로 8080 포트에서 실행됨 → http://:8080 접속 가능

프론트엔드 (React)

cd Frontend
npm install
npm start

기본 3000 포트 → http://:3000

ML 서버 (Flask 예시)

cd ML
python3 app.py

Flask에서 host='0.0.0.0' 설정 필요 → http://:5000

이 부분에서 이제 어떻게 하는거지? 싶었는데 이제 각자 개발은 로컬 컴퓨터 작업 -> 것허브 push -> 서버에서 pull 하는 방식으로 테스트 해보기로 했다!


5. 각 서비스 배포

이 부분부턴 아직이지만 나중에 진행하게 된다면 따로 포스트를 작성하겠음! 그냥 가볍게만 봐놓는걸로!

5-1. Spring Boot 서버 배포

  1. QnB-Backend-0.0.1-SNAPSHOT.jar 파일을 SCP로 EC2에 복사:

scp -i your-key.pem QnB-Backend.jar ec2-user@your-public-ip:/home/ec2-user/
  1. EC2에서 실행:

java -jar QnB-Backend.jar

-> application.yml에서 DB 등 설정이 EC2 내에서 작동하도록 확인 필요

5-2. 프론트엔드 배포 (React 예시)


git clone your-frontend-repo.git
cd frontend
npm install
npm run build
  • build/ 폴더를 Nginx 등의 웹서버로 서빙하거나,
  • 간단하게 serve 모듈로 실행:

npm install -g serve
serve -s build -l 3000

5-3. ML 서버 (Flask 예시)


pip3 install flask
# app.py 예시
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/predict", methods=["POST"])
def predict():
    data = request.json
    # 예측 로직
    return jsonify({"result": "ok"})
app.run(host="0.0.0.0", port=5000)

6. 연동 방식 설계

Backend ↔ ML 서버

  • Spring Boot에서 RestTemplate, WebClient 등을 통해 EC2 내부 IP로 Flask 서버 요청

Frontend ↔ Backend

  • React 앱에서 EC2 퍼블릭 IP의 8080 포트로 API 요청

ML ↔ DB

  • 가능하면 직접 DB 접근은 Backend를 거치게 구성 (보안상 권장)

7. 지속적 배포 (선택)

  • PM2, Docker, Nginx, 도메인 연결, HTTPS 인증서(Let's Encrypt) 등 추가 설정 가능

8. 유지보수 팁

  • EC2는 껐다 켜면 IP가 바뀌므로 고정 IP(Elastic IP) 할당 추천
  • 각 서버는 백그라운드 실행 또는 PM2, systemd 등록 권장
  • 로그 모니터링은 tail -f로 실시간 확인 가능
profile
순두의 누나입니다

0개의 댓글