전체 글

전체 글

    블로그를 이전하게 되었습니다.

    안녕하세요 이렇게 인사드리는 것은 처음인 것 같습니다.짧지 않은 기간동안 tistory를 제 기술블로그 플랫폼으로 사용해왔었는데요, 이번에 velog로 이전하게 되어 이렇게 글을 작성하게 되었습니다.   velog로 이전하게된 이유는 큰 이유는 없고 마크다운 형식의 글 가독성 때문에 옮기게 되었습니다. 항상 마크다운 형식으로 글을 작성해왔었기 때문에 tistory를 사용하면서 글의 폭이 좁게 보이는 것에 대해 불만을 항상 가지고 있었는데요, 최근에도 동일한 생각을 가지게 되면서 마크다운 지원을 확실하게 하는 velog로 옮겨버리자고 결심하게 되었습니다.   새로운 블로그 url은 'https://velog.io/@bepoz' 입니다.  애초에 블로그 포스팅 취지를 위해 기술 블로그 및 글 작성을 시작한..

    Kafka Producer, Consumer 코드 사용법

    Kafka Producer, Consumer 코드 사용법Kafka Client를 이용한 프로듀서final Properties configs = new Properties();configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());configs.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());final KafkaProducer producer = new KafkaProduce..

    Spring Boot3에서의 @Enumerated(EnumType.STRING) 문제

    Spring Boot3에서의 @Enumerated(EnumType.STRING) 문제 Spring Boot 3 부터는 Hibernate 6 버전을 default로 사용하고 여기서는 @Enumerated(EnumType.STRING) 을 enum 필드에 붙여도 db에 enum 타입으로 들어간다. 따라서 추가적인 조치를 취해주어야 한다. @Column(name = "enum_name", nullable = false, columnDefinition = "varchar") @Enumerated(EnumType.STRING) private EnumName enumName = EnumName.BEPOZ;

    ElasticSearch index.refresh_interval 옵션의 -1 값에 대해

    ES index.refresh_interval 옵션의 -1 값에 대해GET {index_name}/_settings을 조회해보면 index의 설정이 나오는데, 이때 refresh_interval 값이 나오는 경우도 욌고 없는 경우도 있다. 없다면 기본값인 1s 으로 돌아가는 것이다. ES는 near-realtime으로 돌아간다. 만약 문서를 색인했으면 검색에서 조회가 되기 위해서는 refresh가 되는 것을 기다려야 한다. 이 때 사용되는 옵션이refresh_interval 다. refresh 작업 자체가 비싼 작업이기 때문에 색인 성능을 높이기 위해서는 이 값을 올리는 것이 좋다. 이 값을 -1로 둔다는 것은 refresh를 비활성화한다는 뜻이기 때문에 추가된 문서가 검색이 되지 않을 수 있다. ES는..

    k8s secret properties 파일로 volume mount 하기

    k8s secret properties 파일로 volume mount 하기apiVersion: v1kind: Secretmetadata: name: bepoz-secret labels: app: bepoz-apptype: Opaquedata: name: YmVwb3o= # 'bepoz'의 base64 인코딩apiVersion: apps/v1kind: Deploymentmetadata: name: bepoz-deploymentspec: replicas: 1 selector: matchLabels: app: bepoz-app template: metadata: labels: app: bepoz-app ..

    OpenSearch Sink Connector 등록 설정

    OpenSearch Sink Connector 등록 설정OpenSearch Sink Connector 란말 그대로 open search를 위한 sink connector 입니다. 카프카 토픽의 내용을 바로 open search의 index로 인덱싱하기 위해서 사용합니다. elastic search에서 fork 되어서 나온 open search 라고 elastic search sink connector를 사용하면 동작하지 않습니다.( 관련해서 es 직원이 답변해둔 링크 ) es sink connector의 경우 confluent 사에서 공식적으로 plugin을 제공한다(ex. confluentinc/kafka-connect-elasticsearch:14.0.12). open search sink conn..

    [JPA] JPA Auditing에서 OffsetDateTime 사용하기

    JPA Auditing에서 OffsetDateTime 사용하기 @EnableJpaAuditing을 사용한 jpa의 auditing에서 @CreateDate 과 같은 Date 관련 기능은 기본적으로 LocalDateTime 타입이 할당된다. /** * Default {@link DateTimeProvider} simply creating new {@link LocalDateTime} instances for each method call. * * @author Oliver Gierke * @author Christoph Strobl * @since 1.5 */ public enum CurrentDateTimeProvider implements DateTimeProvider { INSTANCE; /* * (..

    MongoDB 특정 필드만 가져오게끔 하는 projection

    MongoDB 특정 필드만 가져오게끔 하는 projection 개요 몽고 DB에서 document를 조회할 때 매치되는 doc의 모든 필드를 가져오지만 projection을 이용해 특정 필드만 가져올 수가 있다. 필드 수가 많은 collection에서 내가 원하는 데이터의 특정 필드값만 조회하고 싶은데, 전체 필드를 가져오는 것은 굉장히 비효율 적일 것이다. 그럴 때에 사용할 수 있다. public class Person { @Id private String id; private Name name; //Name 클래스는 firstName과 lastName 이렇게 2개의 필드가 존재 @Positive private int age; @CreatedDate private LocalDateTime created..