Fix : 레디스 설정 deprecated로 변경(spring boot 3.2부터 변경됨)

This commit is contained in:
lsh9672 2025-06-11 17:43:38 +09:00 committed by 정유빈
parent 65d8b91140
commit 0f92015b84
18 changed files with 374 additions and 51 deletions

View File

@ -20,10 +20,11 @@ spring:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
ai-api:
openai:

View File

@ -1,4 +1,19 @@
package com.ktds.hi.common.dto;
public class BaseRequest {
import lombok.Getter;
import lombok.Setter;
/**
* 기본 요청 DTO
*/
@Getter
@Setter
public abstract class BaseRequest {
private String requestId;
private Long timestamp;
public BaseRequest() {
this.timestamp = System.currentTimeMillis();
}
}

View File

@ -1,4 +1,26 @@
package com.ktds.hi.common.dto;
public class BaseResponse {
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 기본 응답 DTO
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public abstract class BaseResponse {
private Boolean success;
private String message;
private Long timestamp;
public BaseResponse(Boolean success, String message) {
this.success = success;
this.message = message;
this.timestamp = System.currentTimeMillis();
}
}

View File

@ -1,4 +1,25 @@
package com.ktds.hi.common.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 페이징 요청 DTO
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageRequest {
@Builder.Default
private Integer page = 0;
@Builder.Default
private Integer size = 10;
private String sort;
private String direction;
}

View File

@ -1,4 +1,27 @@
package com.ktds.hi.common.dto;
public class PageResponse {
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 페이징 응답 DTO
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageResponse<T> {
private List<T> content;
private Integer page;
private Integer size;
private Long totalElements;
private Integer totalPages;
private Boolean first;
private Boolean last;
private Boolean empty;
}

View File

@ -1,4 +1,60 @@
package com.ktds.hi.common.response;
public class ApiResponse {
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* API 응답 래퍼
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiResponse<T> {
private Boolean success;
private String code;
private String message;
private T data;
private Long timestamp;
public static <T> ApiResponse<T> success(T data) {
return ApiResponse.<T>builder()
.success(true)
.code(ResponseCode.SUCCESS.getCode())
.message(ResponseCode.SUCCESS.getMessage())
.data(data)
.timestamp(System.currentTimeMillis())
.build();
}
public static <T> ApiResponse<T> success(String message, T data) {
return ApiResponse.<T>builder()
.success(true)
.code(ResponseCode.SUCCESS.getCode())
.message(message)
.data(data)
.timestamp(System.currentTimeMillis())
.build();
}
public static <T> ApiResponse<T> error(ResponseCode responseCode) {
return ApiResponse.<T>builder()
.success(false)
.code(responseCode.getCode())
.message(responseCode.getMessage())
.timestamp(System.currentTimeMillis())
.build();
}
public static <T> ApiResponse<T> error(String code, String message) {
return ApiResponse.<T>builder()
.success(false)
.code(code)
.message(message)
.timestamp(System.currentTimeMillis())
.build();
}
}

View File

@ -1,4 +1,52 @@
package com.ktds.hi.common.response;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 에러 응답 DTO
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResponse {
private String code;
private String message;
private String path;
private Long timestamp;
private List<ValidationError> validationErrors;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class ValidationError {
private String field;
private Object rejectedValue;
private String message;
}
public static ErrorResponse of(ResponseCode responseCode, String path) {
return ErrorResponse.builder()
.code(responseCode.getCode())
.message(responseCode.getMessage())
.path(path)
.timestamp(System.currentTimeMillis())
.build();
}
public static ErrorResponse of(String code, String message, String path) {
return ErrorResponse.builder()
.code(code)
.message(message)
.path(path)
.timestamp(System.currentTimeMillis())
.build();
}
}

View File

@ -1,4 +1,30 @@
package com.ktds.hi.common.response;
public class ResponseCode {
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 응답 코드 열거형
*/
@Getter
@AllArgsConstructor
public enum ResponseCode {
// 성공
SUCCESS("200", "성공"),
// 클라이언트 에러
BAD_REQUEST("400", "잘못된 요청"),
UNAUTHORIZED("401", "인증 실패"),
FORBIDDEN("403", "접근 권한 없음"),
NOT_FOUND("404", "리소스를 찾을 수 없음"),
CONFLICT("409", "리소스 충돌"),
VALIDATION_ERROR("422", "입력값 검증 실패"),
// 서버 에러
INTERNAL_SERVER_ERROR("500", "내부 서버 오류"),
SERVICE_UNAVAILABLE("503", "서비스 이용 불가");
private final String code;
private final String message;
}

View File

@ -2,7 +2,6 @@ package com.ktds.hi.common.security;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ktds.hi.common.constants.SecurityConstants;
import com.ktds.hi.common.response.ApiResponse;
import com.ktds.hi.common.response.ResponseCode;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;

View File

@ -20,17 +20,18 @@ spring:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
timeout: 2000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
timeout: 2000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
jwt:
secret: ${JWT_SECRET:hiorder-secret-key-for-jwt-token-generation-must-be-long-enough}

View File

@ -20,10 +20,11 @@ spring:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
recommendation:
cache-ttl: 3600 # 1시간

View File

@ -19,11 +19,11 @@ spring:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
servlet:
multipart:

View File

@ -1,4 +1,19 @@
package com.ktds.hi.store.domain;
package com.ktds.hi.store.biz.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 좌표 객체
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Coordinates {
private Double latitude;
private Double longitude;
}

View File

@ -1,4 +1,27 @@
package com.ktds.hi.store.domain;
package com.ktds.hi.store.biz.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* 메뉴 도메인 엔티티
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Menu {
private Long id;
private Long storeId;
private String name;
private String description;
private BigDecimal price;
private String category;
private String imageUrl;
private Boolean isAvailable;
}

View File

@ -1,4 +1,38 @@
package com.ktds.hi.store.domain;
package com.ktds.hi.store.biz.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
/**
* 매장 도메인 엔티티
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Store {
private Long id;
private Long ownerId;
private String name;
private String description;
private String address;
private String phoneNumber;
private String category;
private Double latitude;
private Double longitude;
private LocalTime openTime;
private LocalTime closeTime;
private String imageUrl;
private Boolean isActive;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private List<String> tags;
private List<Menu> menus;
}

View File

@ -1,4 +1,25 @@
package com.ktds.hi.store.domain;
package com.ktds.hi.store.biz.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 매장 검색 조건
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StoreSearchCriteria {
private String keyword;
private String category;
private String tags;
private Double latitude;
private Double longitude;
private Integer radius;
private Integer page;
private Integer size;
}

View File

@ -1,4 +1,20 @@
package com.ktds.hi.store.domain;
package com.ktds.hi.store.biz.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 매장 태그 도메인 엔티티
*/
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StoreTag {
private Long id;
private Long storeId;
private String tagName;
}

View File

@ -20,10 +20,11 @@ spring:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
external-api:
naver: