From 5bd7e5f9168e833390887ca32e6a374a0eaacdc7 Mon Sep 17 00:00:00 2001 From: dbfgml20 Date: Mon, 13 Oct 2025 20:30:05 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20DB=20=EC=99=B8=EB=9E=98=ED=82=A4=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EB=B0=9C=EC=83=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/back/global/initData/RoadmapProdInitData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java index 386bf5c8..23c61ad6 100644 --- a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java +++ b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java @@ -58,7 +58,7 @@ ApplicationRunner baseInitDataApplicationRunner2() { public void runInitData() { initJobData(); initTaskData(); // 보강된 Task 목록 - initSampleJobRoadmap(); // 직업 로드맵 조회 API 테스트용 샘플 데이터 + //initSampleJobRoadmap(); // 직업 로드맵 조회 API 테스트용 샘플 데이터 // 통합 로직 테스트 //initSampleMentorRoadmaps(); // 샘플 멘토 로드맵 10개 생성 From 30802b526382de6cf7f7b59a500c803aa59c1434 Mon Sep 17 00:00:00 2001 From: dbfgml20 Date: Mon, 13 Oct 2025 20:32:21 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/back/global/initData/RoadmapProdInitData.java | 1 - 1 file changed, 1 deletion(-) diff --git a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java index 23c61ad6..257d8cfd 100644 --- a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java +++ b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java @@ -143,7 +143,6 @@ public void initJobData() { } // --- Task 초기화 (기존 + 기초 보강) --- - @Transactional public void initTaskData() { if (taskService.count() > 0) return; From 09ce727a92f6af0e76210da0df1d99779082b444 Mon Sep 17 00:00:00 2001 From: dbfgml20 <53211374+dbfgml2000@users.noreply.github.com> Date: Mon, 13 Oct 2025 20:37:46 +0900 Subject: [PATCH 3/4] =?UTF-8?q?Revert=20"[Fix]=20=EC=9A=B4=EC=98=81=20DB?= =?UTF-8?q?=20=EC=99=B8=EB=9E=98=ED=82=A4=20=EB=AC=B8=EC=A0=9C=20=EC=A0=9C?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/back/global/initData/RoadmapProdInitData.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java index 257d8cfd..386bf5c8 100644 --- a/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java +++ b/back/src/main/java/com/back/global/initData/RoadmapProdInitData.java @@ -58,7 +58,7 @@ ApplicationRunner baseInitDataApplicationRunner2() { public void runInitData() { initJobData(); initTaskData(); // 보강된 Task 목록 - //initSampleJobRoadmap(); // 직업 로드맵 조회 API 테스트용 샘플 데이터 + initSampleJobRoadmap(); // 직업 로드맵 조회 API 테스트용 샘플 데이터 // 통합 로직 테스트 //initSampleMentorRoadmaps(); // 샘플 멘토 로드맵 10개 생성 @@ -143,6 +143,7 @@ public void initJobData() { } // --- Task 초기화 (기존 + 기초 보강) --- + @Transactional public void initTaskData() { if (taskService.count() > 0) return; From 12bc2e17be9d9fab0d5d9613608031f407a03023 Mon Sep 17 00:00:00 2001 From: dooongdaeng Date: Tue, 14 Oct 2025 14:22:42 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:conditionalonberedn=C2=A0an=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/build.gradle.kts | 1 - .../member/member/email/EmailService.java | 20 ++++++++-- .../RedisVerificationCodeStore.java | 39 ------------------- back/src/main/resources/application-dev.yml | 3 -- back/src/main/resources/application-prod.yml | 3 -- back/src/main/resources/application.yml | 3 -- 6 files changed, 16 insertions(+), 53 deletions(-) delete mode 100644 back/src/main/java/com/back/domain/member/member/verification/RedisVerificationCodeStore.java diff --git a/back/build.gradle.kts b/back/build.gradle.kts index bbcee3fa..9c971237 100644 --- a/back/build.gradle.kts +++ b/back/build.gradle.kts @@ -39,7 +39,6 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-web") - implementation ("org.springframework.boot:spring-boot-starter-data-redis") implementation("org.springframework.boot:spring-boot-starter-mail") // QueryDSL diff --git a/back/src/main/java/com/back/domain/member/member/email/EmailService.java b/back/src/main/java/com/back/domain/member/member/email/EmailService.java index c66cd2e0..18b0f530 100644 --- a/back/src/main/java/com/back/domain/member/member/email/EmailService.java +++ b/back/src/main/java/com/back/domain/member/member/email/EmailService.java @@ -3,9 +3,8 @@ import com.back.global.exception.ServiceException; import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; @@ -14,15 +13,24 @@ @Slf4j @Service -@RequiredArgsConstructor -@ConditionalOnBean(JavaMailSender.class) public class EmailService { private final JavaMailSender mailSender; + public EmailService(@Autowired(required = false) JavaMailSender mailSender) { + this.mailSender = mailSender; + if (mailSender == null) { + log.warn("JavaMailSender is not available. Email sending will be disabled."); + } + } + /** * 간단한 텍스트 이메일 발송 */ public void sendSimpleEmail(String to, String subject, String text) { + if (mailSender == null) { + log.warn("JavaMailSender is not available. Skipping email to: {}", to); + return; + } try { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); @@ -44,6 +52,10 @@ public void sendSimpleEmail(String to, String subject, String text) { * HTML 이메일 발송 */ public void sendHtmlEmail(String to, String subject, String htmlContent) { + if (mailSender == null) { + log.warn("JavaMailSender is not available. Skipping email to: {}", to); + return; + } try { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); diff --git a/back/src/main/java/com/back/domain/member/member/verification/RedisVerificationCodeStore.java b/back/src/main/java/com/back/domain/member/member/verification/RedisVerificationCodeStore.java deleted file mode 100644 index 20977709..00000000 --- a/back/src/main/java/com/back/domain/member/member/verification/RedisVerificationCodeStore.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.back.domain.member.member.verification; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Profile; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - -import java.time.Duration; -import java.util.Optional; - -@Component -@Profile("prod") -@ConditionalOnProperty(name = "spring.data.redis.host") -@RequiredArgsConstructor -@Slf4j -public class RedisVerificationCodeStore implements VerificationCodeStore { - private final RedisTemplate redisTemplate; - - @Override - public void saveCode(String email, String code, Duration ttl) { - String key = "verification:" + email; - redisTemplate.opsForValue().set(key, code, ttl); - } - - @Override - public Optional getCode(String email) { - String key = "verification:" + email; - String code = redisTemplate.opsForValue().get(key); - return Optional.ofNullable(code); - } - - @Override - public void deleteCode(String email) { - String key = "verification:" + email; - redisTemplate.delete(key); - } -} \ No newline at end of file diff --git a/back/src/main/resources/application-dev.yml b/back/src/main/resources/application-dev.yml index ba771fba..db7b0d32 100644 --- a/back/src/main/resources/application-dev.yml +++ b/back/src/main/resources/application-dev.yml @@ -4,6 +4,3 @@ spring: username: sa password: driver-class-name: org.h2.Driver - autoconfigure: - exclude: - - org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration diff --git a/back/src/main/resources/application-prod.yml b/back/src/main/resources/application-prod.yml index 3b5673b4..bf137086 100644 --- a/back/src/main/resources/application-prod.yml +++ b/back/src/main/resources/application-prod.yml @@ -1,7 +1,4 @@ spring: - autoconfigure: - exclude: - - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration datasource: url: jdbc:mysql://devcos-team10-mysql.czvbgr7hie3i.ap-northeast-2.rds.amazonaws.com:3306/fivelogic?useSSL=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8 username: ${DB_USERNAME} diff --git a/back/src/main/resources/application.yml b/back/src/main/resources/application.yml index 3556e1d3..e614e9a4 100644 --- a/back/src/main/resources/application.yml +++ b/back/src/main/resources/application.yml @@ -15,9 +15,6 @@ spring: import: optional:file:.env[.properties] profiles: active: dev - autoconfigure: - exclude: - - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration output: ansi: enabled: always