Spring Boot Admin Server, Client config 설정하기

이미지
 Spring Boot로 많은 프로젝트를 진행하게 됩니다. 많은 모니터링 도구가 있지만, Spring Boot 어플리케이션을 쉽게 모니터링 할 수 있는 방법을 소개하려고 합니다.   코드 중심으로 살펴보겠습니다. 1. 어드민 서버 구축 1-1. 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server implementation 'de.codecentric:spring-boot-admin-starter-server:2.5.4' } 1-2. 어드민 서버 설정 활성화 @SpringBootApplication @EnableAdminServer public class ServerApplication { public static void main (String[] args) { SpringApplication. run (ServerApplication. class, args) ; } } EnableAdminServer를 하면 됩니다. 2. 클라이언트 서버 설정  예제는 book-client, member-client 2가지 클라이언트, member-client가 2개의 인스턴스 실행으로 작성했습니다.  2-1 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator implementation 'org.spring...

자바 LocalDate json 변환에 관하여

 안녕하세요. 자바가 java.time 패키지를 제공하면서, 기존 Date 객체에 비하여 개발이 편해졌습니다. LocalDate를 json으로 변환하여 사용할때 만나는 문제를 다뤄보겠습니다.


jackson 라이브러리를 사용하여 json으로 변환하고 다시 읽어 보겠습니다.

jackson 라이브러리 json 변환 예제1

@Test
public void objectMapper() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();

LocalDate ld = LocalDate.now();
String json = objectMapper.writeValueAsString(ld);

System.out.println("json == " + json);
LocalDate ldFromJson = objectMapper.readValue(json, LocalDate.class);
System.out.println("ld1 == " + ld);
System.out.println("ld2 == " + ldFromJson);
}

실행 결과1

실행 결과1

json으로 변환할때 LocalDate의 모든 속성이 그대로 변환된 것을 볼 수 있습니다.


이경우 serializer, deserializer를 구현하여 형식을 정할 수 있습니다.

jackson 라이브러리 json 변환 예제2

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;ㅇ
@Test
public void registerModule() throws JsonProcessingException {
ObjectMapper objectMapper =
new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(LocalDate.class,         new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE));
simpleModule.addDeserializer(LocalDate.class,         new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE));
objectMapper.registerModule(simpleModule);

LocalDate ld = LocalDate.now();
String json = objectMapper.writeValueAsString(ld);

System.out.println("json == " + json);
LocalDate ldFromJson = objectMapper.readValue(json, LocalDate.class);
System.out.println("ld1 == " + ld);
System.out.println("ld2 == " + ldFromJson);
}

실행 결과2

json == "2022-06-22"
ld1 == 2022-06-22
ld2 == 2022-06-22

json으로 변환할때, ISO_LOCAL_DATE 형식의 문자열로 변환 되었습니다. 쓰고 다시 읽는 것도 정상 실행 되었습니다.


구글에서 만든 gson을 이용하는 경우 더 쉽게 사용할 수 있습니다.

gson 예제

@Test
public void gson() {
Gson gson = new Gson();

LocalDate ld = LocalDate.now();
String json = gson.toJson(ld);

System.out.println("json == " + json);
LocalDate ldFromJson = gson.fromJson(json, LocalDate.class);
System.out.println("ld1 == " + ld);
System.out.println("ld2 == " + ldFromJson);
}

실행 결과3

json == {"year":2022,"month":6,"day":22}
ld1 == 2022-06-22
ld2 == 2022-06-22

오류 없이 잘 실행 되었습니다.

앞으로 자바에서 시간관련 패키지를 다룰때 문제 없기 바랍니다.



댓글

이 블로그의 인기 게시물

Spring boot redis cache config

Spring boot redis RedisTemplate

MySQL PK 중복 (duplicate key ) 해결 방법