전체 글

전체 글

    [Spring] @JsonView에 대해

    @JsonView에 대해 public class Member { private String name; private int age; private String importantInformation; } 다음과 같은 Member 클래스에 중요한 정보가 있고 특정 api 요청에 대해서 노출이 되면 안된다고 할 때, @JsonView 를 이용하는 방법이 있다. public class AccessLevel { public static class Normal { } public static class Secret extends Normal { } } --------------------------------------------------------------------- public class Member { ..

    [Spring] JacksonAnnotationsInside에 대해

    JacksonAnnotationsInside에 대해 @JsonDeserialize(converter = 컨버터 클래스) @JsonSerialize(converter = 컨버터 클래스) @JacksonAnnotationsInside @Retention(RetentionPolicy.RUNTIME) public @interface JacksonBoxAnnotation { } jackson 관련 어노테이션들을 하나의 어노테이션에 한데모아 선언하고 @JacksonAnnotationsInside 어노테이션을 붙여서 완성시킨다. 그렇게 만들어진 어노테이션이 붙은 곳에는 해당 어노테이션 내부에 선언되어진 다른 어노테이션들에 적용받게 된다. 가령 위의 코드를 예시를 들면 dto 필드 위에 해당 어노테이션을 붙이면 ser..

    [ES] rollup으로 visualize 그리기 간략정리

    ElasticSearch rollup으로 visualize 그리기 간략정리 목적: 로그를 계속해서 쌓다보면 용량을 계속해서 차지할테고 이는 리소스 비용의 증가로 이어짐. 이것을 summary/압축하여 가볍게 보관하면서 이전의 로그데이터를 사용하기 위함 일반적인 인덱스는 필드에 값을 저장하는 형태라면 rollup은 metric 이나 aggregation 연산을 정의해두면 이를 background 에서 수행되면서 해당 값으로 조회를 할 수 있게된다. elastic search의 오픈소스인 open distro 를 이용하여 키바나에서 rollup을 생성하겠다. 먼저 인덱스 정보는 다음과 같은 상태이다. PUT bepoz { "mappings": { "properties": { "name": {"type": "..

    [Java] AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기

    AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class TimeTravel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Convert(converter = TravelListToJsonConverter.class) private List travels; public TimeTravel(List travels) { this.travels = travels; } @Getter @NoArgsConstructor(access = AccessLevel..

    [Redis] RedisTemplate, RedisCacheManager 설정에 대해

    RedisTemplate, RedisCacheManager 설정에 대해 레디스를 캐시서버로 이용하려고 하는 상황이다. @Configuration @RequiredArgsConstructor public class RedisConfig { private final RedisProperties redisProperties; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory()); return redisTemplate; } @Bean public RedisConnectionFactory ..

    [Docker] 계속 잊어버려서 작성하는 도커 사용 간단 정리

    계속 잊어버려서 작성하는 도커 사용 간단 정리 도커에서 사용하는 이미지의 이름 형식 [저장소 이름] / [이미지 이름] : 태그 ex) alicek106/ubuntu:14.04 컨테이너 생성 docker run -i -t ubuntu:14.04 docker run 명령어는 컨테이너를 생성하고 실행하는 역할을 한다. -i -t 옵션은 컨테이너와 상호(interactive) 입출력을 가능하게 한다. ubuntu:14.04 이미지가 로컬 도커엔진에 존재하지 않는다면 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려 받게된다. 태그 미지정 시, latest 한 것으로 내려받음. docker images 를 입력하면 도커 엔진에 존재하는 이미지의 목록을 출력한다. 컨테이너 생성 시에는 run 이 아..

    [JPA] Specification을 이용한 DataJPA 조회

    Specification을 이용한 DataJPA 조회 Specification을 이용하면 쿼리를 이용하는데 있어 여러 조건들을 손쉽게 처리할 수 있고 동적인 처리가 가능하다. Specification을 사용하지 않을 때의 코드를 먼저 살펴보겠다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; private int age; private LocalDate birth; public Member(String name, int age,..

    [Spring] @FeignClient 에 대해

    @FeignClient 에 대해 Feign은 netflix에서 개발한 REST client 다. 현재는 스프링으로 포함된 것 같다. 기존에 RestTemplate 을 사용한 API 호출을 코드양을 줄이고 굉장히 간편하게 호출할 수 있게끔 도와준다. ext { set('springCloudVersion', "2021.0.0") } implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } 다..