-
Elasticsearch에서의 relationDEV 2023. 12. 2. 20:50
반복되는 일정을 검색하는 방법에 대한 이야기 Elasticsearch에서 어떻게 RDB처럼 relation을 만들어 join검색을 할 수 있을까? radio_progaram의 방송시간 데이터 Data { "program_name": "TBS 기상정보", "channel_name": "TBS FM", .... "routine": [ { "days": [ "MON", "TUE" ], "start_time": 658, "end_time": 700 }, { "days": [ "MON", "TUE" ], "start_time": 958, "end_time": 1000 } ] } User Query 이번주 월요일 라디오 월요일 밤 10시 라디오 오늘 아침 라디오 이번 주말 라디오 How to search on ES..
-
Spring batch integration test (feat.Elasticsearch)DEV 2023. 12. 2. 20:10
Purpose of Integration Test 여러 컴포넌트 간 상호작용이 정상적으로 수행되는지 DAO가 올바르게 연결돼 있어서 원하는 데이터를 저장, 읽을 수 있는지? Test Environment Setup 멱등성(idempotent) 유지 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 멱등성이 깨지기 쉬운 구간 → 외부 모듈 → DB 개발 DB로 테스트를 하기엔 좀 그렇고, 테스트만을 위한 DB를 세팅하기도 좀.. DB 테스트 환경 구축 방법 local DB 설치 in-memory DB - H2, 빠르지만 특정 DB에 특화된 기능 지원 x 사용하는 DB의 Embedded Library 사용 - in-memory DB 이슈 해결 - embedded를 지원하지 않거나 특정 버전, OS지원 ..
-
K8S, DNS 간헐적 5~15초 지연DEV 2023. 12. 2. 19:54
Background k8s 일부 pod에서 간헐적으로 5초 단위의 타임아웃 발생 5*x초의 지연이 DNS조회로 인한 이슈라는 문서를 찾음 DNS Domain Name System 도메인명(www.daum.net) → IP주소(12.34.56.67) In Linux Linux 환경에서 DNS를 사용하는 방법 크게 2가지 /etc/hosts 도메인명으로 IP를 찾을 때 가장 먼저 열어보는 파일 /etc/resolv.conf DNS resolver, DNS 서버 목록을 기록한 파일 /etc/hosts 파일에 도메인명이 존재하지 않을 경우 /etc/resolv.conf에서 도메인명을 검색할 도메인 서버의 주소를 찾는다. DNS in K8S CoreDns v.1.12 이후로 k8s에서 사용을 권장하고 있는 도메인..
-
Test DoubleDEV 2023. 12. 2. 19:33
테스트 대역 = Test Double 개발하다 보면 여러 객체들 간 의존성이 발생 → 의존성이 단위 테스트를 어렵게 만듦 → 진짜 객체는 느리고 자원을 많이 사용하기 때문에 → 실제 객체를 대신할 수 있는 객체가 필요 → 가짜객체 생성 ⇒ test double (테스트 대역) 💡 test double을 mock이라고 말하는 경우도 있지만, mock은 좁은 의미로 test double의 한 종류, 넓게는 테스트 더블을 의미하기도 한다. 대역(test double)의 종류 stub, fake, spy, mock 역할을 명확히 나누는 것이 애매할 경우가 있고, 서로의 특성을 조금씩 포함 input & output 입력 → 논리 → 출력 모든 프로그램은 입력 → 출력의 흐름으로 이어지는데, 입출력의 종류에는 직..
-
Dependency MechanismDEV 2023. 12. 2. 11:44
maven, gradle dependency tree 아래와 같은 커맨드로 볼 수 있긴 하지만,, mvn dependency:tree gradle dependencies 좀 더 편하게 볼 수 없나? view dependencies as a diagram intellij 다이어그램 형태로 볼 수 있는 bundled plugins를 제공한다. maven gradle ultimate에서만 가능하다. 😓 Maven Extension, Gradle Extension bundled plugins Dependency Mechanism maven의 핵심 기능은 종속성 관리인데, 같은 라이브러리인데 여러버전이 발견 될 경우 어떤 버전을 선택할지 결정하는 메커니즘을 가지고 있다. https://maven.apache.or..
-
slf4j, facade, TDDDEV 2023. 12. 2. 11:13
slf4j log4j 취약점 사태로 인해 로깅 라이브러리들을 살펴보다가.. slf4j를 쓰면서 단 한번도 f의 의미에 대해 생각해보지 않음을 깨달음. Simple Logging Facade For Java facade = 외관, 파사드 패턴의 그 파사드 로깅 라이브러리의 인터페이스 역할 SLF4J가 인터페이스화 되어있기에, SLF4J를 의존하는 클라이언트 코드에서는 실제 구현을 몰라도 됨 의존관계 역전 원칙(dependency inversion principle) spring-boot-starter-web > spring-boot-starter-logging에 기본적으로 logback 구현체가 포함되어 있기 때문에 logback을 기본으로 사용 Facade pattern 파사드 패턴은 단순화된 인터페이스..