Spring

[Spring] 나만의 셀렉샵 프로젝트 - 배포(AWS RDS, EC2, MySQL, Filezilla, Port Forwarding)

jelliclesu 2024. 7. 31. 20:22

프로젝트 배포하기

  1. AWS RDS의 MySQL을 연결
    • 그 동안은 H2를 사용했기 때문에, 서비스를 내렸다 올리면 모든 데이터가 초기화되었음
      ➡️ 데이터를 클라우드에 저장하여 서비스를 껐다 켜도 데이터가 유지되도록 함
  2. AWS EC2에 배포
    • 누구나 서비스에 접속할 수 있게 하려면 원격으로 항상 작동하는 컴퓨터 필요
  3. 도메인 붙이고 카카오톡으로 공유하기
    • OG 태그: 카카오톡으로 링크를 공유할 때, 자동으로 이미지, 제목, 내용을 가져오게 함

 

 

AWS RDS 구매하고 MySQL 세팅하기

 

RDS 구매하기

  1. AWS에 접속하여 RDS 검색
  2. 데이터베이스 생성 > 표준 생성 > MySQL > 프리 티어 선택
  3. 설정 입력 - DB 인스턴스 식별자: 원하는 이름 작성 / 마스터 사용자 이름, 암호: DB 접속용으로 만들고 싶은 계정의 아이디, 비밀번호
  4. DB 인스턴스 크기, 스토리지 설정 그대로
  5. 연결 > 추가 연결 구성 탭 클릭 후 다음과 같이 설정
    - 퍼블릭 액세스 기능: "예" (이 설저이 되어 있어야 MySQL 연결 가능)
    - VPC 보안 그룹: "새로 생성"
    - 새 VPC 보안 그룹 이름: sprinboot-db-security
    - 가용 영역: 옵션 중 아무거나
  6. 추가 구성 > 초기 데이터베이스 이름에 "myselectshop" 입력 후 데이터베이스 생성 클릭

 

RDS 포트 열어주기

  1. 생성한 데이터베이스 클릭 > 연결 & 보안 > 보안 > VPC 보안 그룹의 springboot-db-security > 보안 그룹 ID 클릭
  2. 인바인드 규칙 편집 > 소스 > 위치 무관 -> 0.0.0.0, :/0 생성 후 "규칙 저장" 클릭

 

IntelliJ에서 확인

  1. RDS 앤드포인트 확인 후 드래그하여 복사
  2. <나만의 셀렉샵> 프로젝트 열기 > 우측 Database 탭 > Data Source > MySQL
    - Name: 생성한 데이터베이스 이름
    - Host: 앤드포인트
    - User: Username
    - Password: 비밀번호
    - Database: myselectshop
  3. Test Connection > 성공적으로 연결되면 OK

 

스프링부트를 MySQL과 연결하기

- 스프링부트 설정의 대부분은 application.properties 에서 관리

spring.datasource.url=jdbc:mysql://나의앤드포인트:3306/myselectshop
spring.datasource.username=나의USERNAME
spring.datasource.password=나의패스워드
spring.jpa.hibernate.ddl-auto=update

 

 

OG 태그

<meta property="og:title" content="00만의 셀렉샵">
<meta property="og:description" content="관심상품을 선택하고, 최저가 알림을 확인해보세요!">
<meta property="og:image" content="images/og_selectshop.png">

 

 

 

AWS EC2 준비하고 배포하기

 

SSH(Secure Shell Protocol)

- 다른 컴퓨터에 접속할 때 사용하는 프로그램으로 다른 프로그램보다 보안이 상대적으로 뛰어남

- 접속할 컴퓨터의 22번 포트가 열려있어야 접속 가능

- AWS EC2의 경우 이미 22번 포트가 열려있음

 

 

리눅스 명령어

ls: 내 위치의 모든 파일을 보여줌

pwd: 내 위치(폴더의 경로)를 알려줌

mkdir: 내 위치 아래에 폴더 하나 생성

cd [이동할 곳]: [이동랗 곳] 폴더로 이동

cd ..: 상위 폴더로 이동

cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기

rm -rf: 삭제

sudo [실행할 명령어]: 관리자 권한으로 명령어 실행

sudo su: 관리가 권한으로 들어감 (나올 땐 exit)

 

 

AWS EC2 서버 구매 

https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Home:

 

AWS EC2 접속

  • Mac OS의 경우 ssh가 있어서 명령어로 AWS EC2에 바로 접근 가능
    # Keypair 접근 권한 바꿔주기 
    sudo chmod 400 받은키페어경로
    
    # SSH로 접속하기 
    ssh -i 받은키페어 ubuntu@AWS에적힌내아이피

 

배포 파일 빌드

  1. 프로젝트 실행 후 우측 탭 중 "Gradle" 선택
  2. Tasks > build > build 더블 클릭
  3. 좌측 build 폴더 > libs 아래 .jar 확장자로 끝나는 파일 생기면 빌드 성공

 

OpenJDK 설치

  • ubuntu 안에 설치
sudo apt-get update
sudo apt-get install openjdk-17-jdk
java -version

 

 

 

Filezilla 이용하여 배포 파일 업로드

  1. Filezilla 실행 후 왼쪽 상단 사이트 관리자 클릭
  2. 새 사이트 생성 후 연결
    - 프로토콜: SFTP - SSH File Transfer Protocol
    - 호스트: EC2 퍼블릭 IPv4 주소
    - 로그온 유형: 키 파일
    - 사용자: ubuntu
    - 키 파일: EC2 인스턴스 생성 시 생성한 .pem 파일
  3. 마우스로 드래그하여 .jar 파일 업로드

 

스프링부트 작동시키기

cd jar파일상위폴더

java -jar jar파일명.jar

 

더보기

⚠️ 오류 발생 ⚠️

 

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

 

‼️ 해결 방법 ‼️

lsof -i tcp:8080 으로 8080 포트 사용 중인 프로세스 확인

sudo kill -9 [PID] 로 해당 프로세스 종료

 

 


AWS에서 80, 8080 포트 열어주기

  • AWS EC2 에서도 자체적으로 포트를 열고 닫을 수 있게 관리하고 있음
    ➡️ AWS EC2 Security Group 에서 인바운드 요청 포트 열어줘야 함 
  • EC2 관리 콘솔 > 보안그룹 > 인바운드 규칙 편집 > 8080포트 추가
    - 80포트: HTTP 접속을 위한 기본 포트
    - 8080포트: 스프링부트 기본 포트

 

포트포워딩(Port Forwarding)

  • http 요청에서는 80포트가 기본이기 때문에 굳이 :80을 붙이지 않아도 자동으로 연결
  • 지금은 8080 포트에서 웹 서비스가 실행되고 있기 때문에, 매번 :8080 이라고 뒤에 포트 번호 입력해야함
  • 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 80포트로 오는 요청을 8080 포트로 전달하게 함 ➡️ 포트포워딩

 

포트 번호 없애기

  1. 돌아가고 있던 서비스 종료하고 터미널에 포트포워딩 룰 입력
  2. 다시 서비스 시작
    sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
  3. 포트 번호 입력 없이 웹 브라우저에서 접속
    java -jar JAR파일명.jar

 

 

SSH 접속을 끊어도 서버가 계속 돌게 하기

  • 현재 상황: SSH 접속을 끊으면 프로세스가 종료되면서 서버가 돌아가지 않음
  • 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
    # 아래의 명령어로 실행하면 된다
    nohup java -jar JAR파일명.jar &
  • 서버 종료하기(강제 종료)
    # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다
    ps -ef | grep java
    
    # 아래 명령어로 특정 프로세스를 죽인다
    kill -9 [pid값]
  • 다시 켜기
    # 아래의 명령어로 실행하면 된다
    nohup java -jar JAR파일명.jar &​
  • SSH 접속 종료 후 다시 접속해보기

 

 

도메인 붙이고 카카오톡에 공유

  • 도메인 구매: 네임서버릉 운영해주는 업체에, IP와 도메인 매칭 유지비를 내는 것
  1. '가비아'에서 도매인 구매 후 관리툴 > 도메인 연결 > DNS 설정 클릭
  2. 호스트 이름: @, IP 주소: IP 주소 입력 후 10분 정도 대기
  3. 내 도메인으로 접근하여 접속하고 카카오톡으로 공유하기