Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UNI-255] fix: FastJson 사용으로 인한 프로메테우스 오류 해결 #199

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/be-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- be
- refactor/UNI-255-v3

jobs:
uniro-ci:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import com.softeer5.uniro_backend.common.exception.custom.AdminException;
import com.softeer5.uniro_backend.common.exception.custom.RouteException;
import com.softeer5.uniro_backend.common.exception.custom.UnivException;
import com.softeer5.uniro_backend.common.redis.RedisService;
import com.softeer5.uniro_backend.external.redis.RedisService;
import com.softeer5.uniro_backend.map.dto.response.AllRoutesInfo;
import com.softeer5.uniro_backend.map.dto.response.GetChangedRoutesByRevisionResDTO;
import com.softeer5.uniro_backend.map.dto.response.GetRiskRoutesResDTO;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.softeer5.uniro_backend.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.alibaba.fastjson2.support.spring6.data.redis.FastJsonRedisSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.softeer5.uniro_backend.map.service.vo.LightRoutes;

@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // ISO-8601 형식
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
ObjectMapper.DefaultTyping.NON_FINAL); // 타입 정보 추가

StringRedisSerializer stringSerializer = new StringRedisSerializer();
GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);

// Key serializer 설정
template.setKeySerializer(stringSerializer);
template.setHashKeySerializer(stringSerializer);

// Value serializer 설정
template.setValueSerializer(jsonSerializer);
template.setHashValueSerializer(jsonSerializer);

template.afterPropertiesSet();
return template;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
Expand Down Expand Up @@ -35,22 +36,23 @@ public WebMvcConfig(AdminInterceptor adminInterceptor, JwtInterceptor jwtInterce

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 기존 FastJson 컨버터 설정
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//custom configuration...
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
config.setReaderFeatures(JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean);
config.setWriterFeatures(JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.PrettyFormat);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(StandardCharsets.UTF_8);

converter.setSupportedMediaTypes(List.of(
MediaType.APPLICATION_JSON, // application/json 지원
MediaType.APPLICATION_JSON,
new MediaType("application", "json", StandardCharsets.UTF_8),
new MediaType("application", "openmetrics-text", StandardCharsets.UTF_8)
));

converters.add(0, converter);
converters.add(1, new ByteArrayHttpMessageConverter());

converters.forEach(c -> log.info("✔ {}", c.getClass().getName()));
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softeer5.uniro_backend.common.redis;
package com.softeer5.uniro_backend.external.redis;

import java.time.Duration;
import java.util.HashMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.softeer5.uniro_backend.map.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.softeer5.uniro_backend.admin.service.AdminService;
import com.softeer5.uniro_backend.map.dto.request.CreateBuildingRouteReqDTO;
import com.softeer5.uniro_backend.map.dto.request.CreateRoutesReqDTO;
Expand All @@ -14,16 +15,20 @@
import com.softeer5.uniro_backend.map.service.MapService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;

@RequiredArgsConstructor
@RestController
@Slf4j
public class MapController implements MapApi {

private final MapService mapService;
private final AdminService adminService;
private final ObjectMapper objectMapper;

@GetMapping("/{univId}/routes-local")
public ResponseEntity<GetAllRoutesResDTO> getAllRoutesAndNodesByLocalCache(@PathVariable("univId") Long univId){
Expand All @@ -35,7 +40,24 @@ public ResponseEntity<GetAllRoutesResDTO> getAllRoutesAndNodesByLocalCache(@Path
@GetMapping("/{univId}/routes")
public ResponseEntity<GetAllRoutesResDTO> getAllRoutesAndNodes(@PathVariable("univId") Long univId){
GetAllRoutesResDTO allRoutes = mapService.getAllRoutes(univId);
return ResponseEntity.ok().body(allRoutes);

ResponseEntity<GetAllRoutesResDTO> body = ResponseEntity.ok().body(allRoutes);

long duration = 0;
try{
long startTime = System.nanoTime();
String json = objectMapper.writeValueAsString(body); // JSON 직렬화
long endTime = System.nanoTime();

duration = (endTime - startTime) / 1_000_000; // ms 단위 변환
}
catch (Exception e){

}

log.info("🧪🧪🧪🧪🧪Serialization Time: {} ms", duration);

return body;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.softeer5.uniro_backend.common.exception.custom.NodeException;
import com.softeer5.uniro_backend.common.exception.custom.RouteCalculationException;
import com.softeer5.uniro_backend.common.exception.custom.RouteException;
import com.softeer5.uniro_backend.common.redis.RedisService;
import com.softeer5.uniro_backend.external.redis.RedisService;
import com.softeer5.uniro_backend.external.MapClient;
import com.softeer5.uniro_backend.map.dto.request.CreateRoutesReqDTO;
import com.softeer5.uniro_backend.map.entity.Node;
Expand Down
Loading