
Group : 회사명. 어떤 그룹에서 이 프로젝트를 만들고 있는지 적는다.
Artifact : 내가 빌드할 프로젝트의 결과물 이름
(Name) : Optional - Artifact가 공식적 이름이라면 Name은 비공식적 이름이라고 생각하면 된다.
Package Name : 위의 옵션들과 함께 전체 패키지명이 결정된다.
dependency는 일단 아래와 같이 설정해주고 프로젝트를 생성해준다.

현재 따로 db를 설정해주지 않았기 때문에 h2로 해준다. (이후에 RDS로 진행할 예정이다.)
TestController.java
package hyundai.movie;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
return "Hello, World!";
}
}
application.yml
spring:
config:
import: "classpath:secret.yml"
application:
name: backend
datasource:
driver-class-name: org.h2.Driver # H2 드라이버 클래스
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE # 인메모리 H2 데이터베이스
username: sa # 기본 사용자 이름
password: # 기본적으로 비밀번호가 필요하지 않음
jpa:
properties:
hibernate:
show_sql: true
format_sql: true
hbm2ddl.auto: update # Hibernate가 데이터베이스 스키마를 자동으로 생성 및 업데이트
show-sql: true
h2:
console:
enabled: true # H2 콘솔 활성화
management:
endpoints:
web:
exposure:
include: health,info
build.gradle에 dependency 추가
dependencies {
runtimeOnly 'com.h2database:h2'
}
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin {깃허브 레포지토리 주소}
git push -u origin main
FROM openjdk:17-jdk-alpine
# 인자 설정 - Jar_File
ARG JAR_FILE=build/libs/*.jar
# jar 파일 복제
COPY ${JAR_FILE} config.jar
# 실행 명령어
ENTRYPOINT ["java","-jar","config.jar"]
아래의 명령어를 통해 build/libs/ (또는 target/) 디렉토리에 .jar 파일이 생성된다.
# [Spring Boot 애플리케이션 빌드]
# Spring Boot 애플리케이션을 JAR 파일로 빌드
./gradlew build # Gradle
# 새로운 jar 파일 빌드
./gradlew clean build
java -jar build/libs/movie-0.0.1-SNAPSHOT.jar

# Docker 이미지 빌드
docker build -t jinii915/review-backend .
# Docker 컨테이너 실행
## 이미지가 빌드된 후, Docker 컨테이너를 실행하여 애플리케이션을 로컬에서 테스트
docker run --name backend-container -dp 8080:8080 jinii915/review-backend
이제 로컬 브라우저에서 http://localhost:8080/test 로 접근해 Spring Boot 애플리케이션이 제대로 실행되는지 확인한다.

여기서부터는 [3-tier 구축] 4️⃣ Docker로 Nginx 웹서버 구축에서 진행한 프론트엔드와 같은 방식이다.
// docker hub에 push
docker push jinii915/review-backend

// 원하는 docker 이미지 pull
docker pull jinii915/review-backend
// Pull한 이미지로 컨테이너 실행
docker run --name backend-container -dp 8080:8080 jinii915/review-backend
❗️EC2의 아키텍처와 이미지의 이케틱처가 맞지 않는 에러 발생
프론트에서도 이런 에러가 발생했었으면서 왜 생각 못했지...
🙆🏻♀️ docker build --platform linux/amd64 -t {ImageName} . 명령어를 통해 빌드했던 이미지를 지우고 다시 빌드해줘야 한다.
이렇게 해서 로컬에서 docker image를 다시 빌드해서 클라우드 서버와 호환성을 맞춰주고 docker run 하면 정상적으로 실행 된다.
// 기존의 이미지 삭제 후,
// 프로젝트의 Dockerfile이 있는 터미널에서
docker build --platform linux/amd64 -t jinii915/review-backend:latest .
// docker hub에 다시 Push
docker push jinii915/review-backend
// ec2에서
docker pull jinii915/review-backend:latest
docker run --name backend-container -dp 8080:8080 jinii915/review-backend
