Backend
home

EC2 환경에서 Jenkins CI/CD 구축

생성 일시
2025/09/01 13:19
태그
AWS
게시일
최종 편집 일시
2025/09/01 13:23

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 JenkinsPlugins 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
복사