[AWS] EC2에 스프링 프로젝트 띄우기

2024. 8. 18. 00:11·DevOps/AWS

2024.08.17 - [DevOps/AWS] - [AWS] Amazon RDS 사용해보기

 

[AWS] Amazon RDS 사용해보기

2024.08.16 - [DevOps/AWS] - [AWS] Amazon EC2 원격 로그인 [AWS] Amazon EC2 원격 로그인2024.08.15 - [DevOps/AWS] - [AWS] Amazon EC2 인스턴스 만들기 [AWS] Amazon EC2 인스턴스 만들기2024.08.15 - [DevOps/AWS] - [AWS] Amazon 네트워

lsdiary.tistory.com

이전 포스팅까지 AWS에서 제공하는 다양한 서비스들을 활용하며 테스트 해봤다.

서버/백엔드 개발자로서 많이 사용하는 Spring 프로젝트를 이때까지 진행했던 클라우드 서비스에 올려보려고한다.

 

전체과정

 

  1. 테스트 스프링 프로젝트 준비(property / yml 파일 변경)
  2. Gradle로 패키징 -> jar 파일 생성
  3. EC2에 jar 파일 업로드
  4. EC2 서버 내부에서 스프링부트 실행(8080 포트)
    1. 보안그룹 인바운드 규칙에 8080 포트 추가 
  5. MySQL 연결 확인
SpringBoot

 

로컬 설정파일
server:
  port: 8080


spring:
  datasource:
    url: jdbc:h2:mem:admin;mode=mysql
    username: admin
    password: admin
    driver-class-name: org.h2.Driver

  h2:
    console:
      enabled: true  # 웹 콘솔 사용 설정
      path: /h2-console
      settings:
        web-allow-others: true

  jpa:
    # jpa 수행 쿼리 확인.
    show-sql: true
    hibernate:
      ddl-auto: create-drop
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
    defer-datasource-initialization: true
  output:
    ansi:
      enabled: always
  sql:
    init:
      platform: h2
      data-locations: classpath:sql/admin.sql
      mode: always
logging:
  level:
    org.hibernate.type: trace

 

EC2에 연결될 설정
server:
  port: 8080


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://test1-rds-mysql8.ctcbbrvzgs2x.ap-northeast-2.rds.amazonaws.com:3306/projectdb
    username: developer
    password: developer123!


  jpa:
    # jpa 수행 쿼리 확인.
    show-sql: true
    hibernate:
      ddl-auto: create-drop
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
    defer-datasource-initialization: true
  output:
    ansi:
      enabled: always
  sql:
    init:
      platform: h2
      data-locations: classpath:sql/admin.sql
      mode: always
logging:
  level:
    org.hibernate.type: trace

 

  • RDS 엔드포인트 설정

> 활성 yml파일 설정

>> 연결 확인!


admin.sql

 

INSERT INTO SampleProject (id,projectName, description) VALUES (1,'project-1', 'project-1-DESCRIPTION');
INSERT INTO SampleProject (id,projectName, description) VALUES (2,'project-2', 'project-2-DESCRIPTION');
INSERT INTO SampleProject (id,projectName, description) VALUES (3,'project-3', 'project-3-DESCRIPTION');

> API 작동 확인

 

> h2 데이터베이스 확인

 

  • 로컬, RDS 연결 모두 확인

gradle로 패키징 (jar 파일)

 

> build로 jar파일 생성

 

> jar 파일 확인

 

> jar 파일 실행

java -jar projectsample-0.0.1-SNAPSHOT.jar

 


EC2에 jar파일 업로드

 

  • EC2 퍼블릭 IP 주소 필요
scp -i ~/desktop/Spring정리/AWS/developer.pem projectsample-0.0.1-SNAPSHOT.jar ec2-user@43.202.62.115:~/
  • 원격 파일 복사 명령 : scp -i [.pem위치] [jar파일] [EC2사용자아이디@EC2 퍼블릭 IPv4주소]:~/[원하는 주소]

> EC2에 원격접속해서 복사된 파일 확인

ssh -i [.pem 파일] [EC2 사용자 아이디]@[EC2 퍼블릭 IPv4 주소]

EC2에 java 설치

 

  • 루트 권한 부여
sudo su
  • Java 설치할수 있는 목록 확인
yum list | grep java-11
  • Java설치
yum install java-11-amazon-corretto.x86_64

 

> 중간에 "y" 로 설치 계속 진행

> 설치완료 확인

 

java -jar projectsample-0.0.1-SNAPSHOT.jar

>  EC2 내부에서 jar 파일 실행

 

 

배포된 EC2의 퍼블릭 IPv4 주소로 접속

 

빙글빙글 로딩되는 것만 보이고 접속이 안됨..

 

왜 안되지???

-> 8080 PORT를 보안그룹의 인바운드 규칙에서 안열어줬기 때문!

 

  1. AWS -> EC2 -> 보안그룹 이동
  2. 인바운드 규칙 8080포트 추가

 

> 간단 서버 배포 성공!

 

근데 이렇게 배포된 스프링부트는 아까 두가지의 설정이있었는데, 디폴트 설정만 적용되어서 배포되지 않나..?


CLI 명령어를 통한 옵션 설정

 

java -jar -Dspring.profiles.active=prd [jar 파일]

 

> prd로 구동되는것을 확인

 

로그 확인

 

nohup java -jar -Dspring.profiles.active=prd [jar 파일] &
  • nohup : 백그라운드로 jar 파일을 실행할수 있게하는 옵션
  • & : 실행시킨 프로세스의 PID를 반환

> 백그라운드로 실행되고, 로그를 확인할수 있게됨


EC2 내부 MySQL 접속 확인

 

 mysql -h [RDS 엔드포인트] -u [사용자아이디] -p
  • -p : 패스워드로 접속한다는 옵션

> 잘 접속 되었음!


백그라운드 실행 프로세스 종료

 

ps -ef

 

  • 실행 프로세스 확인
ps -ef | grep java
  • java에 관련된 실행중인 프로세스 확인
kill -9 [PID]
  • 프로세스 죽이기

 

간단하게 배포하는 방법을 살펴봤다!

'DevOps > AWS' 카테고리의 다른 글

[AWS] AWS 리소스 삭제하기!  (0) 2024.09.04
[AWS] Route 53으로 도메인 서비스 구축하기  (0) 2024.09.04
[AWS] Amazon RDS 사용해보기  (0) 2024.08.17
[AWS] Amazon EC2 원격 로그인  (0) 2024.08.16
[AWS] Amazon EC2 인스턴스 만들기  (3) 2024.08.15
'DevOps/AWS' 카테고리의 다른 글
  • [AWS] AWS 리소스 삭제하기!
  • [AWS] Route 53으로 도메인 서비스 구축하기
  • [AWS] Amazon RDS 사용해보기
  • [AWS] Amazon EC2 원격 로그인
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
[AWS] EC2에 스프링 프로젝트 띄우기
상단으로

티스토리툴바