EC2 환경 세팅 (2대 기준)
EC2 환경 | 버전 |
SpringBoot + React | t3.medium |
Jenkins | t3.medium |
Ubuntu 시간 설정
시간 설정
timedatectl
sudo timedatectl set-timezone Asia/Seoul
Time zone: Asia/Seoul (KST, +0900)
Shell
복사
Jenkins 에 Dockerfile과 docker-compose.yml 파일 세팅
•
docker-compose.yml
services:
jenkins:
build: .
container_name: jenkins
ports:
- "7070:8080"
- "50000:50000"
user: root
volumes:
- ./volumes/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro # 로컬 시간 설정
environment:
- TZ=Asia/Seoul # 로컬 시간 설정
restart: unless-stopped
YAML
복사
•
Dockerfile
# ~/jenkins/Dockerfile
FROM jenkins/jenkins:lts-jdk17
USER root
# Docker CLI 설치
RUN apt-get update && \
apt-get install -y \
docker.io \
docker-compose && \
apt-get clean
# 심볼릭 링크 (docker 명령 오류 방지용)
RUN ln -s /usr/bin/docker.io /usr/bin/docker || true
# Jenkins 유저에게 docker 그룹 권한 부여
RUN usermod -aG docker jenkins
USER jenkins
Docker
복사
•
docker 및 Jenkins 설치
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
ubuntu@ip-172-31-34-164:~$ sudo usermod -aG docker $USER
ubuntu@ip-172-31-34-164:~$ newgrp docker
ubuntu@ip-172-31-34-164:~$ docker info
Shell
복사
docker-compose up -d --build
# docker compose version 확인
docker compose version
Shell
복사
Jenkins Container 접속
•
초기비밀번호 확인: docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
•
http://EC2-IP:7070 접속하여 초기비밀번호 입력
•
플러그인 자동 설치 후 몇 분간 대기
Jenkins 배포에 필요한 플러그인 (로컬과는 환경이 달라서 추가 설치 필요)
1.
SSH Agent Plugin
•
역할: Jenkins가 SSH Key 기반으로 원격 서버(EC2)에 접속하여 명령어 실행 가능하게 함
•
설정 위치: Credentials → SSH private key 등록 → Pipeline에서 sshagent 사용
2.
Pipeline Plugin
•
역할: Jenkinsfile 기반의 Pipeline 구축을 가능하게 해주는 기본 플러그인
•
3.
Docker Pipeline Plugin
•
역할: Jenkins가 Docker 관련 명령어(docker build, docker-compose, etc)를 파이프라인에서 실행할 수 있도록 지원
4.
Git Plugin
•
역할: GitHub 또는 GitLab 저장소에서 소스 코드를 pull 하기 위한 필수 플러그인
5.
GitHub Integration Plugin (또는 GitHub Branch Source Plugin)
•
역할: GitHub Webhook 연동, PR 빌드, GitHub에서 Jenkins Job 트리거 등
•
Jenkinsfile 기반 CI/CD에 GitHub 연동 시 필요
6.
Credentials Plugin
•
역할: Jenkins에서 SSH key, secret text, username/password 등을 안전하게 저장하고 불러오는 기본 플러그인
•
Jenkins에서 플러그인 설치 방법
1.
Jenkins 접속
2.
Manage Jenkins → Plugins Manager
3.
Available 탭에서 원하는 플러그인 검색
4.
체크하고 아래의 Install without restart 클릭
설치할 플러그인 (필수)
기능 | 사용 플러그인 |
GitHub 소스 가져오기 | Git Plugin + GitHub Integration |
Docker 배포 | Docker Pipeline Plugin |
SSH 원격 명령 실행 | SSH Agent Plugin |
비밀 키 관리 | Credentials Plugin |
Discord 알림 | Discord Notifier Plugin |
Backend Project 세팅
•
application.yml
spring:
mail:
host: smtp.gmail.com
port: 587
username: test@gmail.com
password:
properties:
mail:
smtp:
auth: true
starttls:
enable: true
profiles:
default: prod # 기본 실행 프로필 지정
server:
port: 8080
Shell
복사
•
application-prod.yml
spring:
datasource:
url: jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?serverTimezone=Asia/Seoul
username: ${DB_USER}
password: ${DB_PASSWORD}
jpa:
generate-ddl: true
open-in-view: false
show-sql: true
hibernate:
ddl-auto: update
batch:
jdbc:
initialize-schema: never
job:
enabled: false
sql:
init:
mode: never
elasticsearch:
uris: http://43.203.174.101:9200
data:
mongodb:
uri: ${MONGODB_URI}
database: ${MONGODB_DATABASE}
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
timeout: 6000
cloud:
aws:
s3:
bucketName: ${AWS_S3_BUCKET_NAME}
stack:
auto: false
region:
static: ${AWS_REGION}
credentials:
access-key: ${AWS_ACCESS_KEY}
secret-key: ${AWS_SECRET_KEY}
aladin:
api:
key: ${ALADIN_API_KEY}
base-url: ${ALADIN_BASE_URL}
jwt:
secretKey: ${JWT_SECRET}
access-token-expiration-ms: 1800000
refresh-token-expiration-ms: 6048020000
openai:
api-key: ${OPENAI_API_KEY}
url: ${OPENAI_URL}
model: ${OPENAI_MODEL}
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight([%-3level]) %cyan(%logger{5}) - %msg%n"
Shell
복사
•
Dockerfile
# 사용할 베이스 이미지 명시 (공식 이미지 권장)
FROM openjdk:17-jdk
# 작업 디렉토리 생성 및 설정(컨테이너 내부 경로에 시작점으로 지정 -> 없으면 생성 됨)
WORKDIR /app
# jar파일 등 빌드 결과물을 컨테이너에 복사 (호스트 -> 컨테이너)
COPY app.jar /app/app.jar
# 컨테이너 실행시 기본으로 실행할 명령
CMD ["sh", "-c", "java -jar /app/app.jar --spring.profiles.active=${SPRING_PROFILES_ACTIVE}"]
Shell
복사
•
docker-compose.yml
version: '3.8'
services:
backend:
container_name: ${PROJECT_NAME}
build:
context: .
dockerfile: Dockerfile
image: moodbook_backend
ports:
- "${APP_PORT}:${APP_PORT}"
environment:
- SPRING_PROFILES_ACTIVE=prod
- TZ=Asia/Seoul # 한국 시간 설정
# MySQL
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
# MongoDB
- MONGODB_URI=${MONGODB_URI}
- MONGODB_DATABASE=${MONGODB_DATABASE}
# Redis
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
# AWS S3
- AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}
- AWS_REGION=${AWS_REGION}
- AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
- AWS_SECRET_KEY=${AWS_SECRET_KEY}
# JWT
- JWT_SECRET=${JWT_SECRET}
# Aladin API
- ALADIN_API_KEY=${ALADIN_API_KEY}
- ALADIN_BASE_URL=${ALADIN_BASE_URL}
# OpenAI
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_URL=${OPENAI_URL}
- OPENAI_MODEL=${OPENAI_MODEL}
volumes:
- /etc/localtime:/etc/localtime:ro # 한국 시간 설정
restart: always
Shell
복사
•
.env 파일 (실제 값들을입력)
# Docker
PROJECT_NAME=
APP_PORT=
# MySQL
DB_HOST=
DB_PORT=
DB_NAME=
DB_USER=
DB_PASSWORD=
# MongoDB
MONGODB_URI=
MONGODB_DATABASE=
# Redis
REDIS_HOST=
REDIS_PORT=
# AWS S3
AWS_S3_BUCKET_NAME=
AWS_REGION=
AWS_ACCESS_KEY=
AWS_SECRET_KEY=
# JWT
JWT_SECRET=
# Aladin API
ALADIN_API_KEY=
ALADIN_BASE_URL=
# OpenAI
OPENAI_API_KEY=
OPENAI_URL=
OPENAI_MODEL=
Shell
복사
Jenkins 세팅
•
Jenkins EC2에서 SSH 키 생성
# Jenkins EC2에서 수행
ssh-keygen -t rsa -b 4096 -C "jenkins-key"
Shell
복사
•
기본 경로: /home/ec2-user/.ssh/id_rsa (또는 /var/lib/jenkins/.ssh/id_rsa 등 Jenkins 유저에 따라 다름)
생성되면:
•
id_rsa: 개인 키 (Private key)
절대 외부에 공유 금지
•
id_rsa.pub: 공개 키 (Public key)
Public Key를 배포 대상 EC2(B)에 등록
•
Jenkins EC2의 public key 확인
cat ~/.ssh/id_rsa.pub
Shell
복사
•
배포 대상 EC2(springboot-react) 에 접속 후, authorized_keys에 추가
# 대상 서버(B) 접속
ssh -i your-key.pem ec2-user@배포서버-퍼블릭IP
# .ssh 디렉토리가 없으면 생성
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Jenkins EC2의 공개키를 authorized_keys에 추가
echo "ssh-rsa AAAA....jenkins-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Shell
복사
참고로 이 public key를 등록하게 될 경우 기존 적용된 public key가 변경되어 배포 대상 EC2를 외부에서 접속이 거부되는 이슈가 발생할 수 있으므로
pem key가 있는 폴더 경로에서 다음 명령어를 실행하여 아래와 같이 적용한 다음에
ssh-keygen -y -f moodbook-server.pem > moodbook-server.pub
cat moodbook-server.pub 를 입력하여 나오는 key를 위 상단 echo “ssh-rsa “ 여기에 적용하고 chmod 600 명령어를 진행시켜주면 된다.
Jenkins 에서 SSH Key 연결 필요
•
Jenkins 왼쪽 하단 Credentials 클릭
•
System 의 global 클릭
•
SSH 키 연동을 위해 다음과 같이 입력
•
Private Key의 Enter directly 클릭 후 Jenkins의 id_rsa 내용을 전부 복사하여 등록 후 create 버튼 클릭
-----BEGIN OPENSSH PRIVATE KEY-----
ssdsdSDS ....
-----END OPENSSH PRIVATE KEY-----
Shell
복사
•
다시 New Credentials 들어가서 이번에는 Secret file 클릭 후 백엔드 폴더에 있는 .env 파일 클릭하여 업로드. ID는 임의로 입력할 수 있음 ⇒ ID, 파일 입력 후 Create 버튼 클릭
Github Webhook 설정
•
Backend repository에서 Settings 를 클릭
•
왼쪽 사이드바의 Webhooks 클릭
•
Webhook 생성
◦
초록색의
표시가 연결에 성공했다는 의미
•
Discode Webhook
•
Jenkins Webhook
◦
SSL verification을 Disable로 하면 http 에서도 SSL 허용 가능
Jenkins 구성
•
Github project 설정
•
Trigger 설정
•
Pipeline script
pipeline {
agent any
environment {
DEPLOY_USER = 'ubuntu'
DEPLOY_HOST = 'EC2의 public IP 입력'
DEPLOY_PATH = '/home/ubuntu/moodbook'
CONTAINER_NAME = 'moodbook-backend'
SSH_CRED_ID = 'jenkins-ssh-key' # 앞에서 적용한 Credential ID
ENV_FILE_ID = 'moodbook-env' # 앞에서 적용한 env file의 Credential ID
DISCORD_WEBHOOK = 'https://discord.com/api/webhooks/1390246531147366491/zR7XM-2idGeY4rsjqBZEezXxac_MQjrc3eGjq9HlyTHf0CvWo00WXQwSt6qpVVXDHkyp'
}
options {
timestamps()
}
triggers {
// ✅ GitHub webhook trigger (Jenkins UI에도 체크되어 있어야 함)
githubPush()
}
stages {
stage('Git Clone') {
steps {
git branch: 'dev', url: 'https://github.com/moodbook-space/moodbook-backend.git'
}
}
stage('Build') {
steps {
sh './gradlew clean build -x test'
// ✅ app.jar로 이름 고정 (Dockerfile과 일치)
sh 'cp build/libs/*SNAPSHOT.jar app.jar'
}
}
stage('Inject .env') {
steps {
withCredentials([file(credentialsId: "${ENV_FILE_ID}", variable: 'ENV_FILE')]) {
sh 'cp $ENV_FILE .env'
}
}
}
stage('Deploy to moodbook-server') {
steps {
sshagent (credentials: ["${SSH_CRED_ID}"]) {
sh """
ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} 'mkdir -p ${DEPLOY_PATH}'
scp -o StrictHostKeyChecking=no build/libs/moodbook-0.0.1-SNAPSHOT.jar ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/app.jar
scp -o StrictHostKeyChecking=no .env ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/.env
scp -o StrictHostKeyChecking=no docker-compose.backend.yml ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/docker-compose.yml
scp -o StrictHostKeyChecking=no Dockerfile ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/Dockerfile
ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} '
cd ${DEPLOY_PATH} &&
docker compose down || true &&
docker compose up -d --build
'
"""
}
}
}
}
post {
success {
script {
sh """
curl -X POST -H "Content-Type: application/json" \
-d '{"content": ":white_check_mark: *MoodBook* 백엔드 배포 **성공** 🎉"}' \
${DISCORD_WEBHOOK}
"""
}
}
failure {
script {
sh """
curl -X POST -H "Content-Type: application/json" \
-d '{"content": ":x: *MoodBook* 백엔드 배포 **실패** ❗ Jenkins에서 로그를 확인하세요."}' \
${DISCORD_WEBHOOK}
"""
}
}
}
}
Shell
복사
빌드 결과 확인
Started by GitHub push by codesche
Started by GitHub push by codesche
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/jenkins-test
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Git Clone)
[Pipeline] git
19:34:05 The recommended git tool is: NONE
19:34:05 No credentials specified
19:34:05 > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/jenkins-test/.git # timeout=10
19:34:05 Fetching changes from the remote Git repository
19:34:05 > git config remote.origin.url https://github.com/moodbook-space/moodbook-backend.git # timeout=10
19:34:05 Fetching upstream changes from https://github.com/moodbook-space/moodbook-backend.git
19:34:05 > git --version # timeout=10
19:34:05 > git --version # 'git version 2.39.5'
19:34:05 > git fetch --tags --force --progress -- https://github.com/moodbook-space/moodbook-backend.git +refs/heads/*:refs/remotes/origin/* # timeout=10
19:34:06 > git rev-parse refs/remotes/origin/dev^{commit} # timeout=10
19:34:06 Checking out Revision 1a002c148cc8fe237782551e1ff8cbc19c272e74 (refs/remotes/origin/dev)
19:34:06 > git config core.sparsecheckout # timeout=10
19:34:06 > git checkout -f 1a002c148cc8fe237782551e1ff8cbc19c272e74 # timeout=10
19:34:06 > git branch -a -v --no-abbrev # timeout=10
19:34:06 > git branch -D dev # timeout=10
19:34:06 > git checkout -b dev 1a002c148cc8fe237782551e1ff8cbc19c272e74 # timeout=10
19:34:06 Commit message: "Merge pull request #162 from moodbook-space/fix/#161"
19:34:06 > git rev-list --no-walk 16b2d8a392551a5dfe4357aeb1ffdb3d0c3132e7 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] sh
19:34:06 + ./gradlew clean build -x test
19:34:08 Starting a Gradle Daemon (subsequent builds will be faster)
19:34:22 > Task :clean
19:34:28
19:34:28 > Task :compileJava
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/book/entity/BookCount.java:37: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private Long viewCount = 0L;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/member/entity/MemberProfile.java:44: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private String myImage = AWSS3Constants.DEFAULT_PROFILE_IMAGE;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/post/entity/BasePost.java:40: warning: @SuperBuilder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private int viewCount = 0;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/post/entity/BasePost.java:43: warning: @SuperBuilder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private int likeCount = 0;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/post/entity/BasePost.java:47: warning: @SuperBuilder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private boolean deleted = false;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/member/entity/Member.java:44: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private Role role = Role.USER;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/member/entity/Member.java:53: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private boolean emailVerified = false;
19:34:28 ^
19:34:28 /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/member/entity/Member.java:56: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.
19:34:28 private MemberStatus status = MemberStatus.ACTIVATED;
19:34:28 ^
19:34:34 Note: /var/jenkins_home/workspace/jenkins-test/src/main/java/org/com/moodbook/post/entity/BasePost.java uses or overrides a deprecated API.
19:34:34 Note: Recompile with -Xlint:deprecation for details.
19:34:34 8 warnings
19:34:36
19:34:36 > Task :processResources
19:34:36 > Task :classes
19:34:36 > Task :resolveMainClassName
19:34:38 > Task :bootJar
19:34:38 > Task :jar
19:34:38 > Task :assemble
19:34:38 > Task :check
19:34:38 > Task :build
19:34:38
19:34:38 [Incubating] Problems report is available at: file:///var/jenkins_home/workspace/jenkins-test/build/reports/problems/problems-report.html
19:34:38
19:34:38 BUILD SUCCESSFUL in 31s
19:34:38 6 actionable tasks: 6 executed
[Pipeline] sh
19:34:39 + cp build/libs/moodbook-0.0.1-SNAPSHOT.jar app.jar
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Inject .env)
[Pipeline] withCredentials
19:34:39 Masking supported pattern matches of $ENV_FILE
[Pipeline] {
[Pipeline] sh
19:34:39 + cp **** .env
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy to moodbook-server)
[Pipeline] sshagent
19:34:39 [ssh-agent] Using credentials ubuntu (jenkins 배포)
19:34:39 $ ssh-agent
19:34:39 SSH_AUTH_SOCK=/tmp/ssh-WSIdNPn6kArZ/agent.7806
19:34:39 SSH_AGENT_PID=7809
19:34:39 Running ssh-add (command line suppressed)
19:34:39 Identity added: /var/jenkins_home/workspace/jenkins-test@tmp/private_key_7246020953665034280.key (jenkins-deploy-key)
19:34:39 [ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
19:34:40 + ssh -o StrictHostKeyChecking=no ubuntu@43.200.89.83 mkdir -p /home/ubuntu/moodbook
19:34:40 + scp -o StrictHostKeyChecking=no build/libs/moodbook-0.0.1-SNAPSHOT.jar ubuntu@43.200.89.83:/home/ubuntu/moodbook/app.jar
19:34:41 + scp -o StrictHostKeyChecking=no .env ubuntu@43.200.89.83:/home/ubuntu/moodbook/.env
19:34:42 + scp -o StrictHostKeyChecking=no docker-compose.backend.yml ubuntu@43.200.89.83:/home/ubuntu/moodbook/docker-compose.yml
19:34:42 + scp -o StrictHostKeyChecking=no Dockerfile ubuntu@43.200.89.83:/home/ubuntu/moodbook/Dockerfile
19:34:42 + ssh -o StrictHostKeyChecking=no ubuntu@43.200.89.83
19:34:42 cd /home/ubuntu/moodbook &&
19:34:42 docker compose down || true &&
19:34:42 docker compose up -d --build
19:34:42
19:34:43 time="2025-07-21T19:34:43+09:00" level=warning msg="/home/ubuntu/moodbook/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
19:34:43 Container moodbook-backend Stopping
19:34:44 Container moodbook-backend Stopped
19:34:44 Container moodbook-backend Removing
19:34:44 Container moodbook-backend Removed
19:34:44 Network moodbook_default Removing
19:34:44 Network moodbook_default Removed
19:34:44 time="2025-07-21T19:34:44+09:00" level=warning msg="/home/ubuntu/moodbook/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
19:34:44 #1 [internal] load local bake definitions
19:34:45 #1 reading from stdin 349B done
19:34:45 #1 DONE 0.0s
19:34:45
19:34:45 #2 [internal] load build definition from Dockerfile
19:34:45 #2 transferring dockerfile: 519B done
19:34:45 #2 DONE 0.0s
19:34:45
19:34:45 #3 [internal] load metadata for docker.io/library/openjdk:17-jdk
19:34:46 #3 DONE 1.4s
19:34:46
19:34:46 #4 [internal] load .dockerignore
19:34:46 #4 transferring context: 2B done
19:34:46 #4 DONE 0.0s
19:34:46
19:34:46 #5 [1/3] FROM docker.io/library/openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8
19:34:46 #5 DONE 0.0s
19:34:46
19:34:46 #6 [internal] load build context
19:34:47 #6 transferring context: 97.96MB 0.8s done
19:34:47 #6 DONE 0.9s
19:34:47
19:34:47 #7 [2/3] WORKDIR /app
19:34:47 #7 CACHED
19:34:47
19:34:47 #8 [3/3] COPY app.jar /app/app.jar
19:34:47 #8 DONE 0.6s
19:34:47
19:34:47 #9 exporting to image
19:34:47 #9 exporting layers
19:34:48 #9 exporting layers 0.4s done
19:34:48 #9 writing image sha256:13d932234e361564292bf313cf21e8d50e27498e21c20326e99291c491fa9585 done
19:34:48 #9 naming to docker.io/library/moodbook_backend done
19:34:48 #9 DONE 0.5s
19:34:48
19:34:48 #10 resolving provenance for metadata file
19:34:48 #10 DONE 0.0s
19:34:48 backend Built
19:34:48 Network moodbook_default Creating
19:34:48 Network moodbook_default Created
19:34:48 Container moodbook-backend Creating
19:34:48 Container moodbook-backend Created
19:34:48 Container moodbook-backend Starting
19:34:48 Container moodbook-backend Started
[Pipeline] }
19:34:48 $ ssh-agent -k
19:34:48 unset SSH_AUTH_SOCK;
19:34:48 unset SSH_AGENT_PID;
19:34:48 echo Agent pid 7809 killed;
19:34:48 [ssh-agent] Stopped.
[Pipeline] // sshagent
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
19:34:49 + curl -X POST -H Content-Type: application/json -d {"content": ":white_check_mark: *MoodBook* 백엔드 배포 **성공** 🎉"} https://discord.com/api/webhooks/1390246531147366491/zR7XM-2idGeY4rsjqBZEezXxac_MQjrc3eGjq9HlyTHf0CvWo00WXQwSt6qpVVXDHkyp
19:34:49 % Total % Received % Xferd Average Speed Time Time Time Current
19:34:49 Dload Upload Total Spent Left Speed
19:34:49
19:34:49 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
19:34:49 100 77 0 0 100 77 0 158 --:--:-- --:--:-- --:--:-- 158
19:34:49 100 77 0 0 100 77 0 158 --:--:-- --:--:-- --:--:-- 158
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Shell
복사
SpringBoot EC2 에서 배포 내용 확인
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.3)
2025-07-21T19:34:50.963+09:00 INFO 1 --- [ main] org.com.moodbook.MoodbookApplication : Starting MoodbookApplication v0.0.1-SNAPSHOT using Java 17.0.2 with PID 1 (/app/app.jar started by root in /app)
2025-07-21T19:34:50.974+09:00 INFO 1 --- [ main] org.com.moodbook.MoodbookApplication : The following 1 profile is active: "prod"
2025-07-21T19:34:53.998+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2025-07-21T19:34:54.002+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-07-21T19:34:54.338+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface org.com.moodbook.emotion.repository.BookEmotionScoreRepository; If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: jakarta.persistence.Entity, jakarta.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository
2025-07-21T19:34:54.492+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 474 ms. Found 21 JPA repository interfaces.
2025-07-21T19:34:54.569+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2025-07-21T19:34:54.572+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
2025-07-21T19:34:54.595+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.book.repository.AdminBookRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.596+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.chat.repository.AdminChatRoomRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.597+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.member.repository.AdminMemberProfileRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.598+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.member.repository.AdminMemberRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.598+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.book.repository.BookCountRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.598+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.book.repository.BookRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.599+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookchat.repository.ChatRoomMemberRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.600+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookchat.repository.ChatRoomRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.601+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookmark.repository.BookmarkRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.602+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.member.repository.MemberProfileRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.603+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.member.repository.MemberRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.604+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.notification.repository.NotificationRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.612+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.BasePostRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.613+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.CommentRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.616+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.MeetingRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.616+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.MoodTagRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.617+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.PostLikeRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.618+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.ReportRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.619+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.recentbookviews.repository.RecentBookViewRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.619+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.review.repository.ReviewRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.620+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface org.com.moodbook.security.authentication.repository.AuthenticationRepository; If you want this repository to be a MongoDB repository, consider annotating your entities with one of these annotations: org.springframework.data.mongodb.core.mapping.Document (preferred), or consider extending one of the following types with your repository: org.springframework.data.mongodb.repository.MongoRepository
2025-07-21T19:34:54.631+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 54 ms. Found 1 MongoDB repository interface.
2025-07-21T19:34:54.661+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2025-07-21T19:34:54.663+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2025-07-21T19:34:54.685+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.book.repository.AdminBookRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.685+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.chat.repository.AdminChatRoomRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.685+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.member.repository.AdminMemberProfileRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.685+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.admin.member.repository.AdminMemberRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.686+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.book.repository.BookCountRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.686+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.book.repository.BookRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.686+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookchat.repository.ChatRoomMemberRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.686+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookchat.repository.ChatRoomRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.687+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.bookmark.repository.BookmarkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.687+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.emotion.repository.BookEmotionScoreRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.687+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.member.repository.MemberProfileRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.687+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.member.repository.MemberRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.687+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.notification.repository.NotificationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.BasePostRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.CommentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.MeetingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.MoodTagRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.PostLikeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.688+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.post.repository.ReportRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.689+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.recentbookviews.repository.RecentBookViewRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.689+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.review.repository.ReviewRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.689+09:00 INFO 1 --- [ main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface org.com.moodbook.security.authentication.repository.AuthenticationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
2025-07-21T19:34:54.689+09:00 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 12 ms. Found 0 Redis repository interfaces.
2025-07-21T19:34:56.107+09:00 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-07-21T19:34:56.134+09:00 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-07-21T19:34:56.134+09:00 INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.42]
2025-07-21T19:34:56.202+09:00 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-07-21T19:34:56.205+09:00 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5062 ms
2025-07-21T19:34:56.518+09:00 INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-07-21T19:34:56.652+09:00 INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.18.Final
2025-07-21T19:34:56.718+09:00 INFO 1 --- [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2025-07-21T19:34:57.416+09:00 INFO 1 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2025-07-21T19:34:57.557+09:00 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-07-21T19:34:58.053+09:00 INFO 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3462e99a
2025-07-21T19:34:58.058+09:00 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2025-07-21T19:34:58.175+09:00 INFO 1 --- [ main] org.hibernate.orm.connections.pooling : HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']
Database driver: undefined/unknown
Database version: 8.0.39
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2025-07-21T19:35:00.774+09:00 INFO 1 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2025-07-21T19:35:01.137+09:00 INFO 1 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2025-07-21T19:35:02.381+09:00 INFO 1 --- [ main] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used.
2025-07-21T19:35:07.552+09:00 INFO 1 --- [kki.mongodb.net] org.mongodb.driver.cluster : Adding discovered server ac-9y42h0c-shard-00-02.e9qbkki.mongodb.net:27017 to client view of cluster
2025-07-21T19:35:07.702+09:00 INFO 1 --- [ main] org.mongodb.driver.client : MongoClient with metadata {"application": {"name": "MoodBookEmotion"}, "driver": {"name": "mongo-java-driver|sync|spring-boot", "version": "5.5.1"}, "os": {"type": "Linux", "name": "Linux", "architecture": "amd64", "version": "6.8.0-1031-aws"}, "platform": "Java/Oracle Corporation/17.0.2+8-86", "env": {"container": {"runtime": "docker"}}} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=majority, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='moodbookuser', source='admin', password=<hidden>, mechanismProperties=<hidden>}, transportSettings=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, CollectionCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.client.model.mql.ExpressionCodecProvider@218d34aa, com.mongodb.Jep395RecordCodecProvider@7e8a249, com.mongodb.KotlinCodecProvider@3a8be13b]}, loggerSettings=LoggerSettings{maxDocumentLength=1000}, clusterSettings={hosts=[127.0.0.1:27017], srvHost=moodbookemotion.e9qbkki.mongodb.net, srvServiceName=mongodb, mode=MULTIPLE, requiredClusterType=REPLICA_SET, requiredReplicaSetName='atlas-8ca6j3-shard-0', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='15 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, proxySettings=ProxySettings{host=null, port=null, username=null, password=null}}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverMonitoringMode=AUTO, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=true, invalidHostNameAllowed=false, context=null}, applicationName='MoodBookEmotion', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, dnsClient=null, inetAddressResolver=null, contextProvider=null, timeoutMS=null}
2025-07-21T19:35:07.718+09:00 INFO 1 --- [kki.mongodb.net] org.mongodb.driver.cluster : Adding discovered server ac-9y42h0c-shard-00-00.e9qbkki.mongodb.net:27017 to client view of cluster
2025-07-21T19:35:07.729+09:00 INFO 1 --- [kki.mongodb.net] org.mongodb.driver.cluster : Adding discovered server ac-9y42h0c-shard-00-01.e9qbkki.mongodb.net:27017 to client view of cluster
Shell
복사