파즈의 공부 일기
[Spring] Filter와 server.compression 설정을 통한 api 압축
Filter와 server.compression 설정을 통한 api 압축 API를 압축해서 return 하려고 한다. 먼저 가장 대표적인 server.compression 설정을 알아보고 사용해보고 이후 Filter를 이용하여 조금 더 응용해보려고 한다. server.compression 설정을 통한 api 압축 설정 종류 server: compression: enabled: min-response-size: mime-types: excluded-user-agents: server.compression 설정에는 위의 4개 항목이 있다. 단순히 yaml 파일에 기입을 해두면 동작한다. enabled: 압축 여부 default: false min-response-size: 압축을 수행할 최소 용량 defau..
여러 파드 로그 조회 명령어 Stern
여러 파드 로그 조회 명령어 Stern k logs {pod-name} 으로 파드를 조회할 때에 1개의 파드만 조회가능하다. 만약 replicas가 여러개라면 1개의 파드를 보는 것으로는 제대로된 로그파악이 되지 않는다. k logs -l app=bepoz 이렇게 레이블이 app=bepoz인 것 들을 한 번에 조회할 수도 있긴하지만 -f 옵션으로 지속적으로 로그변경을 확인하고 싶을 때에는 최대 5개의 파드까지만 가능하기 때문에 파드 수가 많다면 k logs -f -l app-bepoz 이렇게 사용이 어렵다. 명령어 stern은 가능하다. stern은 쿠버네티스 클러스터의 여러 파드와 여러 컨테이너를 tail 할 수 있게끔 해준다. brew install stern 으로 stern을 설치한다. 기본적으로 ..
쿠버네티스 인 액션
쿠버네티스 소개쿠버네티스 클러스터 이해마스터 노드는 전체 쿠버네티스 시스템을 제어하고 관리하는 쿠버네티스 컨트롤 플레인을 실행한다워커 노드는 실제 배포되는 컨테이너 어플리케이션을 실행한다컨트롤 플레인컨트롤 플레인은 클러스터를 제어하고 작동시킨다. 하나의 마스터 노드에서 실행되거나 여러 노드로 분할되고 복제돼 고가용성을 보장할 수 있는 여러 구성 요소로 구성된다.쿠버네티스 API 서버는 사용자, 컨트롤 플레인 구성 요소와 통신한다.스케줄러는 애플리케이션의 배포를 담당한다.(애플리케이션의 배포 가능한 각 구성 요소를 워크 노드에 할당)컨트롤러 매니저는 구성 요소 복제본, 워커 노드 추적, 노드 장애 처리 등과 같은 크러스터단의 기능을 수행한다.Etcd는 클러스터 구성을 지속적으로 저장하는 신뢰할 수 있는 분..
[Kotlin] 기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다
기본 생성자가 없고, 필드가 1개여도 코틀린은 역직렬화가 된다 class BepozDTOTest { @Test fun convertTest() { val mapper = jacksonObjectMapper() val mapper2 = ObjectMapper() val json = "{\"name\": \"kang\"}" val result: BepozDTO = mapper.readValue(json) val result2: BepozDTO = mapper2.readValue(json) } } data class BepozDTO( val name: String ) 자바의 경우 jackson 2.13버전 부터 추가된 jackson-module-parameter-names 모듈에 의해 기본 생성자가 없어도 다..
[Spring Batch] 이벤트 리스너 내용 정리
Spring Batch 이벤트 리스너 내용 정리 Listener는 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트를 받아 용도에 맞게 활용할 수 있도록 제공하는 인터셉터 개념의 클래스 이벤트를 받기 위해 Listener를 등록해야 하며 등록은 API 설정에서 각 단계별로 지정 가능하다. Job JobExecutionListener - Job 실행 전 후 Step StepExecutionListener - Step 실행 전 후 ChunkListener - Chunk 실행 전 후 (Tasklet 실행 전 후), 오류 시점 ItemReadListener - ItemReader 실행 전 후, 오류 시점, item이 null 일 경우 호출 안됨 ItemProcessListener..
[Spring Batch] Multi Thread Processing 내용 정리
Spring Batch Multi Thread Processing 내용 정리 AsyncItemProcessor, AsyncItemWriter Step 안에서 ItemProcessor가 비동기적으로 동작하는 구조 AsyncItemProcessor와 AsyncItemWriter가 함께 구성이 되어야 함 AsyncItemProcessor로 부터 AsyncItemWriter가 받는 최종 결과값은 List 타입이며 비동기 실행이 완료될 때까지 대기한다 spring-batch-integration 의존성 필요 public Step step() throws Exception { return stepBuilderFactory.get("step") .chunk(100) .reader(pagingItemReader()) ..
[Spring] Spring Data MongoDB 잊어버리는 것들 정리
Spring Data MongoDB 잊어버리는 것들 정리 기본적으로 CrudRepository 를 사용 core conecept로 CrudRepository 를 사용한다. 하위 계층에 일반적으로 사용하는 MongoRepository 가 존재한다. ref. https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.core-concepts data jpa와 다르게 생성 시에 컬렉션 생성이 되지 않는다 data jpa에서 spring.jpa.hibernate.ddl-auto 옵션으로 create 과 같은 옵션을 주어 어플리케이션 생성 시에 테이블을 생성하고는 했는데, data mongodb 에서는 따로 컬렉션 생성 ..
[Spring Batch] @JobScope, @StepScope 에 대해
Spring Batch @JobScope, @StepScope 에 대해 스프링 빈에 scope 가 있는 것 처럼 Job과 Step에도 빈 생성과 관련한 scope이다. 해당 스코프가 선언되면 빈 생성이 어플리케이션 구동시점이 아니라 빈의 실행시점에 이루어지게 된다. @Values를 주입해서 빈의 실행 시점에 값을 참조할 수 있어 지연 로딩이 가능해진다. @Value("#{jobParameters[파라미터명]}") 와 같이 표현식 언어를 런타임 시점에 주입받을 수 있다. @Values를 사용시에 반드시 빈 선언문에 @JobScope, @StepScope 정의가 필요하다. 프록시 모드를 기본으로 잡고있는 스코프이기 때문에 어플리케이션이 구동될 때에 해당 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호..