Backend
home
⛅

EC2 환경에서 Jenkins CI/CD 구축

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

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