diff --git a/build.gradle b/build.gradle index 9cef4c1a..3d43dcea 100644 --- a/build.gradle +++ b/build.gradle @@ -121,6 +121,10 @@ dependencies { implementation 'org.springframework.retry:spring-retry' implementation 'org.springframework.boot:spring-boot-starter-aop' + // Spring Cache 의존성 추가 + implementation 'org.springframework.boot:spring-boot-starter-cache' + implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8' + //kafka implementation "org.springframework.kafka:spring-kafka" diff --git a/src/main/java/spot/spot/domain/job/command/mapper/WorkerCommandMapper.java b/src/main/java/spot/spot/domain/job/command/mapper/WorkerCommandMapper.java index f948abfe..c2e5ac24 100644 --- a/src/main/java/spot/spot/domain/job/command/mapper/WorkerCommandMapper.java +++ b/src/main/java/spot/spot/domain/job/command/mapper/WorkerCommandMapper.java @@ -11,8 +11,7 @@ import org.mapstruct.ReportingPolicy; import spot.spot.domain.job.command.dto.request.RegisterWorkerRequest; import spot.spot.domain.job.command.dto.response.JobCertifiationResponse; -import spot.spot.domain.job.query.dto.response.CertificationImgResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.member.entity.Ability; import spot.spot.domain.member.entity.AbilityType; import spot.spot.domain.member.entity.Member; diff --git a/src/main/java/spot/spot/domain/job/command/service/ClientCommandService.java b/src/main/java/spot/spot/domain/job/command/service/ClientCommandService.java index 85701a3f..8656b5a5 100644 --- a/src/main/java/spot/spot/domain/job/command/service/ClientCommandService.java +++ b/src/main/java/spot/spot/domain/job/command/service/ClientCommandService.java @@ -14,7 +14,6 @@ import spot.spot.domain.job.command.mapper.NotificationMapper; import spot.spot.domain.job.command.service._docs.ClientCommandServiceDocs; import spot.spot.domain.job.command.util.ReservationCancelUtil; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; import spot.spot.domain.job.command.dto.request.YesOrNoWorkersRequest; import spot.spot.domain.job.command.dto.response.RegisterJobResponse; import spot.spot.domain.job.command.entity.Job; @@ -31,7 +30,6 @@ import spot.spot.domain.notification.command.repository.NotificationRepository; import spot.spot.domain.notification.command.service.FcmAsyncSendingUtil; import spot.spot.domain.notification.command.service.FcmMessageUtil; -import spot.spot.domain.notification.query.service.NotificationService; import spot.spot.domain.pay.service.PayService; import spot.spot.global.response.format.ErrorCode; import spot.spot.global.response.format.GlobalException; diff --git a/src/main/java/spot/spot/domain/job/query/service/ClientQueryService.java b/src/main/java/spot/spot/domain/job/query/service/ClientQueryService.java index f8483187..e44129bb 100644 --- a/src/main/java/spot/spot/domain/job/query/service/ClientQueryService.java +++ b/src/main/java/spot/spot/domain/job/query/service/ClientQueryService.java @@ -12,7 +12,7 @@ import spot.spot.domain.job.command.entity.Job; import spot.spot.domain.job.query.repository.jpa.JobRepository; import spot.spot.domain.job.query.service._docs.ClientQueryServiceDocs; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.query.dto.response.AttenderResponse; import spot.spot.domain.job.query.dto.response.NearByWorkersResponse; import spot.spot.domain.job.query.mapper.ClientQueryMapper; diff --git a/src/main/java/spot/spot/domain/job/query/util/DistanceCalculateUtil.java b/src/main/java/spot/spot/domain/job/query/util/calculate/DistanceCalculateUtil.java similarity index 92% rename from src/main/java/spot/spot/domain/job/query/util/DistanceCalculateUtil.java rename to src/main/java/spot/spot/domain/job/query/util/calculate/DistanceCalculateUtil.java index a2d1313d..657460cc 100644 --- a/src/main/java/spot/spot/domain/job/query/util/DistanceCalculateUtil.java +++ b/src/main/java/spot/spot/domain/job/query/util/calculate/DistanceCalculateUtil.java @@ -1,4 +1,4 @@ -package spot.spot.domain.job.query.util; +package spot.spot.domain.job.query.util.calculate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/spot/spot/domain/job/query/util/GeometryUtil.java b/src/main/java/spot/spot/domain/job/query/util/calculate/GeometryUtil.java similarity index 71% rename from src/main/java/spot/spot/domain/job/query/util/GeometryUtil.java rename to src/main/java/spot/spot/domain/job/query/util/calculate/GeometryUtil.java index 4ff8a31c..78ca391b 100644 --- a/src/main/java/spot/spot/domain/job/query/util/GeometryUtil.java +++ b/src/main/java/spot/spot/domain/job/query/util/calculate/GeometryUtil.java @@ -1,12 +1,9 @@ -package spot.spot.domain.job.query.util; +package spot.spot.domain.job.query.util.calculate; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; -import org.springframework.context.annotation.Scope; -import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.stereotype.Component; -import org.springframework.web.context.WebApplicationContext; import spot.spot.domain.job.query.util._docs.GeometryUtilDocs; @Component diff --git a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobJPQLQueryUtil.java b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobJPQLQueryUtil.java index cedae142..a8d1781e 100644 --- a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobJPQLQueryUtil.java +++ b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobJPQLQueryUtil.java @@ -7,7 +7,7 @@ import spot.spot.domain.job.query.dto.response.NearByJobResponse; import spot.spot.domain.job.query.repository.jpa.JobRepository; import spot.spot.domain.job.query.util._docs.SearchingJobQueryUtil; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; @Service @RequiredArgsConstructor diff --git a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobNativeQueryUtil.java b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobNativeQueryUtil.java index 4fc7fc34..da99d4f0 100644 --- a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobNativeQueryUtil.java +++ b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobNativeQueryUtil.java @@ -9,7 +9,7 @@ import spot.spot.domain.job.query.dto.response.NearByJobResponse; import spot.spot.domain.job.query.repository.jpa.JobRepository; import spot.spot.domain.job.query.util._docs.SearchingJobQueryUtil; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; @Service @RequiredArgsConstructor diff --git a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobQueryDSLUtil.java b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobQueryDSLUtil.java index 5a0178ac..93c5a456 100644 --- a/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobQueryDSLUtil.java +++ b/src/main/java/spot/spot/domain/job/query/util/searching/SearchingJobQueryDSLUtil.java @@ -7,7 +7,7 @@ import spot.spot.domain.job.query.dto.response.NearByJobResponse; import spot.spot.domain.job.query.repository.dsl.SearchingListQueryDsl; import spot.spot.domain.job.query.util._docs.SearchingJobQueryUtil; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; @Service @RequiredArgsConstructor diff --git a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobJpqlQueryUtilV1.java b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobJpqlQueryUtilV1.java index af6141b2..7ea04e81 100644 --- a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobJpqlQueryUtilV1.java +++ b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobJpqlQueryUtilV1.java @@ -9,7 +9,7 @@ import spot.spot.domain.job.command.dto.Location; import spot.spot.domain.job.command.entity.Job; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v1.query.mapper.WorkerQueryMapperV1; import spot.spot.domain.job.v1.query.repository.jpa.JobRepositoryV1; import spot.spot.domain.job.v1.query.service._docs.SearchingJobQueryUtilV1; diff --git a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobNativeQueryUtilV1.java b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobNativeQueryUtilV1.java index 9cb292f1..0258123b 100644 --- a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobNativeQueryUtilV1.java +++ b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobNativeQueryUtilV1.java @@ -9,7 +9,7 @@ import spot.spot.domain.job.command.dto.Location; import spot.spot.domain.job.command.entity.Job; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v1.query.mapper.WorkerQueryMapperV1; import spot.spot.domain.job.v1.query.repository.jpa.JobRepositoryV1; import spot.spot.domain.job.v1.query.service._docs.SearchingJobQueryUtilV1; diff --git a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobQueryDslUtilV1.java b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobQueryDslUtilV1.java index 283888f9..2f83d331 100644 --- a/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobQueryDslUtilV1.java +++ b/src/main/java/spot/spot/domain/job/v1/query/service/SearchingJobQueryDslUtilV1.java @@ -9,7 +9,7 @@ import spot.spot.domain.job.command.dto.Location; import spot.spot.domain.job.command.entity.Job; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v1.query.mapper.WorkerQueryMapperV1; import spot.spot.domain.job.v1.query.repository.dsl.SearchingListQueryDslV1; import spot.spot.domain.job.v1.query.service._docs.SearchingJobQueryUtilV1; diff --git a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithJpqlV2.java b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithJpqlV2.java index 574af772..5aee8a76 100644 --- a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithJpqlV2.java +++ b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithJpqlV2.java @@ -5,7 +5,7 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v2.query.repository.jpa.JobRepositoryV2; @Service diff --git a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithNativeQueryV2.java b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithNativeQueryV2.java index fd912c3e..de2a87aa 100644 --- a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithNativeQueryV2.java +++ b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithNativeQueryV2.java @@ -7,7 +7,7 @@ import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Service; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v2.query.repository.jpa.JobRepositoryV2; @Service diff --git a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithQuerydslV2.java b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithQuerydslV2.java index e31e83b0..a345df2c 100644 --- a/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithQuerydslV2.java +++ b/src/main/java/spot/spot/domain/job/v2/query/util/SearchingJobQueryUtilWithQuerydslV2.java @@ -5,7 +5,7 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import spot.spot.domain.job.query.dto.response.NearByJobResponse; -import spot.spot.domain.job.query.util.DistanceCalculateUtil; +import spot.spot.domain.job.query.util.calculate.DistanceCalculateUtil; import spot.spot.domain.job.v2.query.repository.dsl.SearchingListQueryDslv2; @Service diff --git a/src/main/java/spot/spot/domain/notification/command/service/FcmMessageUtil.java b/src/main/java/spot/spot/domain/notification/command/service/FcmMessageUtil.java index a865a526..59cd1f5b 100644 --- a/src/main/java/spot/spot/domain/notification/command/service/FcmMessageUtil.java +++ b/src/main/java/spot/spot/domain/notification/command/service/FcmMessageUtil.java @@ -6,22 +6,13 @@ @Component public class FcmMessageUtil { - private static final ThreadLocal localBuilder = ThreadLocal.withInitial(StringBuilder::new); - public FcmDTO askingJob2WorkerMsg(String ownerName, String workerName, String jobTitle) { - localBuilder.remove(); - StringBuilder msg = localBuilder.get(); - msg.setLength(0); - msg.append(ownerName).append("님이 ").append(workerName).append("님께 ").append(jobTitle).append("을 신청하였습니다."); - return makeMsg("일 의뢰 알림!",msg.toString()); + return makeMsg("일 의뢰 알림!", ownerName + "님이 " + workerName + "님께 " + jobTitle + "을 신청하였습니다."); } public FcmDTO sayYes2WorkerMsg(String ownerName, String workerName, String jobTitle) { - localBuilder.remove(); - StringBuilder msg = localBuilder.get(); - msg.setLength(0); - msg.append(ownerName).append("님이 ").append(workerName).append("님의 ").append(jobTitle).append("해결 요청을 수락하셨습니다!"); - return makeMsg("일 신청 수락 알림", msg.toString()); + return makeMsg("일 신청 수락 알림", + ownerName + "님이 " + workerName + "님의 " + jobTitle + "해결 요청을 수락하셨습니다!"); } diff --git a/src/main/java/spot/spot/global/config/CacheConfig.java b/src/main/java/spot/spot/global/config/CacheConfig.java new file mode 100644 index 00000000..f5cd5d18 --- /dev/null +++ b/src/main/java/spot/spot/global/config/CacheConfig.java @@ -0,0 +1,23 @@ +package spot.spot.global.config; + +import com.github.benmanes.caffeine.cache.Caffeine; +import java.time.Duration; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CacheConfig { + @Bean + public CacheManager cacheManager() { + CaffeineCacheManager manager = new CaffeineCacheManager("job-geohash"); + manager.setCaffeine(Caffeine.newBuilder() + .maximumSize(10_000) + .expireAfterWrite(Duration.ofDays(1)) + .recordStats()); + return manager; + } +}