Spring Boot/STUDY

[Spring Boot] JPA 프로젝트 - AWS로 서버 연결

코맹 2024. 6. 26. 17:04

 

🔽전체 요약

더보기

(설정) AWS 사용
https://aws.amazon.com/ko/
💡 (프리티어) 회원가입 및 로그인
- 매뉴얼 참조(최근 내용으로 참조)
https://blogworks.co.kr/aws-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EB%A9%94%EB%89%B4%EC%96%BC/
💡 (라이트세일) https://lightsail.aws.amazon.com/
- 인스턴스 클릭 > 인스턴스 생성 버튼 클릭
- 리전 서울
- 인스턴스 이미지 > Linux/Unix
- 블루프린트 > 운영 체제(OS) 전용 클릭 > Ubuntu 22.04 LTS
- 인스턴스 플랜 > 듀얼 스택
- 크기 선택 > 월별 $12 선택(무료 중 가장 스펙이 좋음)
- 인스턴스 확인 > 본인이 원하는 이름으로 변경 후(Ubuntu-eunji)
- 인스턴트 생성 클릭
- 실행 중 확인 > ⁝ 클릭 > 관리
- 네트워킹 > 고정 IP연결 > 아이피명(StaticIp-eunji) 연결 > 생성
- IPv4 방화벽 > 규칙 추가 > 8080 추가
- 계정 > SSH 키 > 기본 키 다운로드(.pem) > 위치 변경(옵션)

💡  PuTTY AWS 리눅스 서버 연결
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 64비트 다운로드 및 설치
- PuTTYgen 실행 > Load 기본키 선택 > Save private key 클릭 > .ppk로 저장
- PuTTY 실행
- Session > Host Name : AWS 고정 아이피 입력(43.201.221.65)
- Connection > SSH > Auth > Credentials : Private key를 .ppk로 선택(aws_eunji)
- Session > Saved Session명 입력 > save
- Open 후 콘솔 login as: ubuntu 입력

💡  FileZilla로 FTP 연결
https://filezilla-project.org/download.php 다운로드
- 사이트 관리자 열기
- 새 사이트
- 프로토콜: SFTP
- 호스트 : 고정 아이피 입력
- 로그온 유형 : 키 파일
- 사용자 : ubuntu
- 키 파일 : *.ppk 선택
💡  설정 변경
```shell
> sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime (한국 시간 변경)
> hostname
> sudo hostnamectl set-hostname eunji
> sudo reboot (서버 재시작)

> sudo apt-get update (전체서버 패키지 업데이트)
> java
> sudo apt-get install openjdk-17-jdk
> java -version
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Ubuntu-122.04.1, mixed mode, sharing)
```
💡  Visual Studio Code
        - Gradle for java > Tasks > build > clean > build > bootJar 
        - buld.gradle > version = '0.0.1-SNAPSHOT'-> version = '1.0.1-SNAPSHOT' 변경 - >  bootJar 
        - *-SAPSHOT.jar 생성 확인
💡  FileZilla
        - *.jar > AWS로 전송
💡  PuTTY 
      ```shell
  > ls
  ...
  > cd bootserver
  >ls
  backboard-1.0.1-SNAPSHOT.jar
  >sudo java -jar backboard-1.0.1-SNAPSHOT.jar
      ```

 

 

AWS 업로드 전 oracle -> h2로 Database 변경

 

build.gradle 버전 변경
id 'org.springframework.boot' version '3.3.1'
  • 3.3.0 -> 3.3.1로 변경

 

application.properties 수정
## H2 설정 - 내가 개발할 때만 쓰는 형태 추천
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:~/local
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

## Oracle 설정 - 운영DB
# spring.datasource.url=jdbc:oracle:thin:@localhost:11521:FREE
# spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
# spring.datasource.username=PKNUSB
# spring.datasource.password=pknu_p@ss

## JPA 설정
spring.jpa.database=h2
# spring.jpa.database=oracle
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
# spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.OracleDialect
### ddl-auto 자동으로 테이블을 만들어주는 기능
### 데이터베이스 관리 정책 >> 실제 운영하는 서버에서는 validate(1), update(2)
### create: application 실행시마다 새로 생성, 최초 개발시
### create-drop: application 실행시 생성, 종료시 드랍. 사용 비추천
### update: 최초 한번만, 변경사항이 있으면 반영, 계속 개발시
### validate: DB테이블과 엔티티 클래스가 일치하는지 검증만, 운영시
### none(default) - 사용 비추천
spring.jpa.hibernate.ddl-auto=update
  • JPA 설정 부분 주석, H2 설정 추가

 

https://lightsail.aws.amazon.com/ Lightsail접속

1. 인스턴스 클릭 > 인스턴스 생성 버튼 클릭

더보기

- 리전 서울
- 인스턴스 이미지 > Linux/Unix
- 블루프린트 > 운영 체제(OS) 전용 클릭 > Ubuntu 22.04 LTS
- 인스턴스 플랜 > 듀얼 스택
- 크기 선택 > 월별 $12 선택(무료 중 가장 스펙이 좋음)
- 인스턴스 확인 > 본인이 원하는 이름으로 변경 후(Ubuntu-eunji)
- 인스턴트 생성 클릭

  • 실행된 것을 확인할 수 있음

 

실행 중 확인 > ⁝ 클릭 > 관리

 

네트워킹 > 고정 IP연결 > 아이피명 연결 > 생성

  • 본인이 지우기 전까지는 고정IP 유지

 

IPv4 방화벽 > 규칙 추가 > 8080 추가

 

  • 8080포트를 열어줌

 

SSH 키 > 기본키 다운로드

  • 계정 클릭

  • SSH 키 > 기본키 다운로드
  • C:\work에 저장

 

PuTTY AWS 리눅스 서버 연결

1. https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 64비트 다운로드 및 설치

  • 64-bit x86 설치

 

2. PuTTYgen 열기

 

3. PuTTYgen 실행 > Load 기본키 선택 > Save private key 클릭 > .ppk로 저장

다운로드했던 기본키 열기
Save private key클릭
.ppk로 저장

 

 

PuTTY 실행

1. Session > Host Name: AWS 고정 아이피 입력(43.201.221.65)

 

2. Connection > SSH > Auth > Credentials : Pri

 

3. Session > Saved Session명 입력 > save

 

4. Open 후 Accept 클릭

 

5. 콘솔 login as: ubuntu 입력

 

 

FileZilla로 FTP 연결
(https://filezilla-project.org/download.php) 다운로드

 

1. FileZilla.exe 실행 > 파일 > 사이트 관리자 열기

더보기

- 새 사이트
- 프로토콜: SFTP
- 호스트 : 고정 아이피 입력
- 로그온 유형 : 키 파일
- 사용자 : ubuntu
- 키 파일 : *.ppk 선택

  • ubuntu 연결 성공!

 

전체 설정 변경

sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  • 콘솔에 date를 입력하면 한국시간과 다르게 나옴
  • 위 명령어를 통해 한국시간으로 변경

 sudo hostnamectl set-hostname eunji
 sudo reboot
  • hostname : ip ~~ -> eunji로 변경
  • 이후 reboot를 통해 서버 재실행 

 

sudo apt-get update
  • 전체 서버 패키지 업데이트를 시켜줌

 

java 입력

💥 아래 뜨는 명령어 입력하면 Spring Boot 실행이 안되는 문제 생기니 설치하면  안됨!! 💥

 

 

sudo apt-get install openjdk-17
  • 입력 후 tab 두번 입력하면 관련 명령어 나옴

sudo apt-get install openjdk-17-jdk
  • ⭐ 이중 jdk로 설치해야함!⭐

 

java -version

  • 잘 설치되었는지 확인

 

설치가 잘 되었다면 vscode로 이동!

 

Gradle for java > task > build > clean, build 실행

libs에 snapshot 생긴 것 확인
build.gradle에 snapshot 추가 후 bootjar 실행

 

Gradle for java > task > build > bootjar

 

FileZilla 실행

1. bootserver 디렉터리 만들기

 

2. 로컬에서 lib에 생긴 1.0.1 SNAPSHOT ubuntu/bootserver로 이동

 

 

PuTTY 실행
> ls
...
> cd bootserver
>ls
backboard-1.0.1-SNAPSHOT.jar
>sudo java -jar backboard-1.0.1-SNAPSHOT.jar

  • Spring Boot 실행

 

실행이 완료되면 http://43.201.221.65:8080/ 주소창 입력

 

 

ctrl + c로 서버 끄기

 

local.mv.db 원격에 생성됐는지 확인
java -jar backboard-1.0.1-SNAPSHOT.jar
  •  sudo java -jar backboard-1.0.1-SNAPSHOT.jar를 입력하면 생성되지 않으므로 sudo를 떼고 입력

  • local.mv.db 생긴 것을 확인할 수 있음

 


❌어떤 url은 들어가지고, 어떤  url은 안들어가지는 문제 발생 ❌

application.properties 추가
## H2 추가 설정
spring.h2.console.settings.web-allow-others=true

 

build.gradle 설정 변경
version = '1.0.2-SNAPSHOT'

 

FileZilla에서 SNAPSHOT 추가

 

ubuntu 콘솔 창에서 실행
java -jar backboard-1.0.2-SNAPSHOT.jar
  • Spring Boot 실행

  • h2-console 연결된 것 확인

  • local에 있는 local.mv.db를 ubuntu 파일에 덮어씌우기
java -jar backboard-1.0.2-SNAPSHOT.jar
  • ubuntu 콘솔에서 다시 실행

  • 이전에 넣어뒀던 데이터가 불러와짐!

🔽전체 요약

더보기

      - 스프링부트서버 백그라운드 실행 쉘 작성
         - > nano start.sh
            ```shell
            #!/bin/bash

            JAR=backboard-1.0.2-SNAPSHOT.jar
            LOG=/home/ubuntu/bootserver/backbord_log.log

            nohup java -jar $JAR > $LOG 2>&1 &
            ```
         - 파일권한 바꾸기(실행가능)
            ```shell
            > chmod +x start.sh
            ```

         - > nano stop.sh
            ```shell
            #!/bin/bash

            BB_PID=$(ps -ef | grep java | grep backboard | awk '{print $2}')

            if [ -z "$BB_PID" ];
            then
               echo "BACKBOARD is not running"
            else
               kill -9 $BB_PID
               echo "BACKBOARD terminated!"
            fi
            ```
         - 파일권한 바꾸기(실행가능)
            ```shell
            > chmod +x stop.sh
            ```
         
         - 서버실행

 

스프링부트서버 백그라운드 실행 쉘 작성
nano start.sh

#!/bin/bash

JAR=backboard-1.0.2-SNAPSHOT.jar
LOG=/home/ubuntu/bootserver/backbord_log.log

nohup java -jar $JAR > $LOG 2>&1 &
  • ctrl + s로 저장
  • ctrl + x로 나오기

  • ls로 start.sh 생성된 것 확인

 

nano stop.sh

  • ctrl + s로 저장
  • ctrl + x로 나오기

  • ls로 stop.sh 생성된 것 확인

 

  • rw -> read write 읽고 쓰기 권한만 있음
chmod +x start.sh
chmod +x stop.sh
  • 해당 명령어로 권한 변경

  • 녹색이 뜨면 실행 가능
./start.sh
  • 실행

  • start.sh를 실행하니까 backbord_log.log 생성

 

nano backbord_log.log

 

 

 

  • 서버 연결과 데이터 잘 들고와지는 것 확인!