본문 바로가기

Slack 채널 정리

(87)
ZeroMQ pub/sub ZeroMQ pub/sub 테스트를 위해 샘플 참고해 구현한 텍스트 파일 읽어서 계속 전송하는 Pub 자바 소스. import org.zeromq.ZMQ; ​ import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class JsonServer { public static void main (String[] args) throws Exception { System.out.println("the server starting..."); ZMQ.Context context = ZMQ.context(1); ZMQ.Socket publisher = context.socket(ZMQ.PUB); publisher.b..
JpaSystemException: No default constructor for entity 오늘 배운 거. spring, jpa (spring-boot-starter-data-jpa) 로 코딩 중에 'JpaSystemException: No default constructor for entity' 발생. 1. 잘 돌던 다른 엔티티 클래스랑 비교해봤는데 lombok 을 이용하고 있다 보니 코딩 소스 자체로는 별 차이 없어 보였지만 실제 구조 확인하려고 클래스 스트럭쳐 창을 열어보니(IntelliJ 에서는 단축키 Alt + 7) 에러 메시지 그대로 디폴트 생성자가 안 만들어져 있네요. 2. 문제 원인 추적해보니 테스트 코드에서 값 생성 쉽게 하려고 문제된 엔티티 클래스에 lombok 의 @Builder 를 추가해준 것 때문에 그렇더군요. @Builder 애노테이션은 빌드 클래스를 자동으로 만들어주..
대량 데이터 조회 비동기 처리 대량 데이터 처리 관련해서 막 코딩한거 공유해봅니다. 대략 이런 내용입니다. 클라이언트 단에서 요청한 특정 시점 이후의 데이터를 DB 에서 뽑아 일정한 주기로 전송해주어야 함. 1. 데이터 건수가 상당히 큼. 이로 인한 DB/서버의 성능 저하/부하를 가능한 줄이는 방법이 필요. 2. 데이터 조회 시간 지연 등등의 문제가 전송 주기에 영향을 주어서는 안됨.여러가지 방법을 생각해보았으나 깔끔한 해법 못 찾아서 일단 막 코딩해봤습니다. 실행 환경은 jdk8, spring, JPA 등입니다 (ZeroMQ 사용한 전송 처리 부분은 위에 적지 않았습니다) 구현단은 그리 복잡하지는 않습니다. 1. DB 조회가 전송에 직접적으로 영향 주지 않도록 비동기 처리(Spring 의 @Async 이용). 2. DB 조회는 한 ..
특정 좌표가 어느 위치에 포함되어 있는지 찾기(ST_CONTAINS) 이동하는 장비가 어느 블록 내에 있는지 찾아야 하는 경우가 생겼다. 장비의 이동 위치는 위,경도 값으로 DB 에 저장되어 있었고, 블록의 위, 경도 정보는 xml 파일에 있는 상태라 우선 xml 파일의 정보를 DB 에 저장했다. 1. Block 의 Polygon 정보가 들어 있는 xml 파일 ... ... 2. xml 파일에서 Bound ID 와 Polygon 좌표 정보를 저장할 Table 생성(mariaDB) CREATE TABLE `evt_bound` ( `reg_seq` bigint(20) NOT NULL AUTO_INCREMENT, `bnd_id` varchar(20) DEFAULT NULL, `bnd_pol` polygon DEFAULT NULL, PRIMARY KEY (`reg_seq`) ) ..
ZeroMQ 잡담 zeroMQ 의 공식 가이드에 보면 스스로 'switch-and-bait'란 표현을 사용하고 있다. switch-and-bait 는 우리 말로 '미끼 상품'이라고 보통 번역되는데 다들 알다시피 이런 식 - 초저가로 매장 앞에서 상품 홍보해서 매장에 고객을 끌어들인 뒤 고가의 상품을 사게 만드는 - 의 마켓팅 기법이다. 0MQ 가이드 1장에 나와 있는 샘플들을 이용해서 코딩 해보면 이 미끼를 안 물기 힘들다. 몇 년 전 0MQ 를 회사 게시판을 통해 소개할 때 내가 그랬고, 잊고 지내다 여기 슬랙에 요근래 다시 언급하던 내가 또 역시 그랬다. 그런데 일단 매장에 들어서서 실제 제품 구매를 고민하기 시작하는 순간 보이기 시작한다. 몇 개 예를 들어보자. 1. 0MQ 의 req-rep 패턴의 코딩 짜서 cli..
vim macro db 테이블 생성 스크립트를 java entity 클래스로 변환하기 위해 간만에 vim 으로 편집 작업 중. 반복 작업이 많아서 macro 사용하는 김에 매크로 사용법 간략하게 정리.가령 매크로명을 'z'으로 한다면 qz (매크로 레코딩 시작) 반복 작업할 명령들 차례대로 입력 q (레코딩 종료)매크로 실행은 @z (직전 매크로 재실행 시에는 @@ 해도 됨)작성한 매크로를 편집하려면 "zp 현재 열려진 에디터 창에 매크로 내용 뜨면 원하는 곳 수정 후 커서를 시작 부분으로 이동. "zy$ (매크로 편집 종료)
LocalDateTime 타입의 값 비교 - ChronoUnit LocalDateTime 타입 두 값 간의 차이 구하는 방법. ChronoUnit 이란 녀석 처음 알게되어서 ... (저만 몰랐던건가요? ㅜㅠ) @Test public void gatLocalDateTimeTest() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); LocalDateTime a = LocalDateTime.parse("20190212162455", formatter); LocalDateTime b = LocalDateTime.parse("20190212162457", formatter); assertEquals(2, ChronoUnit.SECONDS.between(a, b)); }
Json, POJO 매핑 Json 매핑 POJO 만드는 것 귀찮아서 ... 당연히 있을 줄 알았고 역시나 있었다. http://www.jsonschema2pojo.org/ 나같은 이를 위해서 옵션으로 Lombok 이 있었으면 금상첨화일텐데