개발/기타(6)
-
cron으로 스케쥴러 만들기.
스케쥴러를 추가해야할 일이 있었다. 근데 요구사항이 미묘했다. 무조건 2주 간격으로 작동해야한다고 한다. cron은 시각, 날짜, 요일 등을 특정해서 스케쥴을 돌릴 순 있어도, 일정 간격을 지정해서 돌리는 기능은 없는것으로 알고있다.(단순히 시간마다 한 번, 하루에 한 번, 일주일에 한 번, 달에 한 번 정도는 정할 수 있지만) 즉, 기존에 사용하던 방식이 아니라 다른 방식으로 사용할 필요가 있었다. 2주 간격으로 스케쥴을 진행하려면 여러가지 방법을 채택할 수 있다. 스케쥴 자체를 crontab에서 2주 간격으로 돌린다.일단 stackoverflow를 찾아보았다.https://serverfault.com/questions/633264/cronjob-run-every-two-weeks-on-saturday..
2019.02.15 -
MongoDB, Morphia - 같은 도큐먼트 내의 두 필드 비교 쿼리 (Query - Comparing two fields in Same Document)
MongoDB에 같은 도큐먼트 내의 두 필드를 비교하는 쿼리를 보내야 할 상황이 있었다. 비교해야 하는 두 필드를 A, B라고 하자. 평소 비교 쿼리를 만들 때 처럼, "find" 와 "$lt" 조건을 통해 쿼리를 만들었다. 해당 쿼리에서, "$lt" 다음에 써 주어야 하는 비교 대상이 상수인 경우는 문제가 생기지 않는다. 하지만 이번에는 비교 대상도 변수가 되어야 했다. 그래서 "$lt" 에 변수값을 상수값처럼 "this.B" 와 같은 형태로 써주었는데, 에러가 발생하였다. 에러 내용은 인티저 값인 A와 String인 "this.B"를 비교할 수 없다는, 결국 타입이 맞지 않다는 에러였다. 그래서 where("this.A < this.B") 와 같은 형태의 쿼리로 바꾸어서 실행했는데, 원하는 결과를 얻..
2018.11.17 -
Chrome Extension - response를 보여주는 chrome extension 작성
운영팀에서 요청이 들어왔다. CS 처리를 할 때에 SpreadSheet 테이블에서 값을 찾는 경우가 많은데 이 상황에서 시간이 많이 걸린다고, 간단한 툴을 제작해 줄 수 없냐는 요청이었다. Chrome Extension이 적절할 것 같아서 찾아봤는데 마침, Chrome Extensions 개발자 모드를 사용하면 직접 만든 크롬 익스텐션 zip만 업로드해주면 사용에 아무런 제약이 없을 것 같아서, 채택하기로 했다. 내가 만든 Chrome Extensions은 테스트 서버에 만들어둔 모든 테이블 조회용 API를 호출하여 그 결과를 Extensions 팝업에 띄워주는 것이 전부이다. 기능이 단순하기에, Json, Html, Js 파일 1개씩 ( ThirdParty로 JQuery가 있지만 이건 내가 짠게 아니므..
2018.11.12 -
Redis - Jedis 사용 시 겪었던 문제.
최근, Redis 의 java 프레임워크인 Jedis를 사용하면서, "Could not get a resource from pool" 이라는 메시지를 받으며, 서버와 Redis 연결이 끊기는 문제가 발생하였다. Redis의 상태를 보니 Clients의 갯수가 1000개 언저리에서 머물고 있었다. 하지만, Redis 서버의 Config에는 "maxclients" 값이 default (4096)로 설정되어 있었다. 그럼에도 Clients는 1000개를 넘지 못하고 있었다. 이는, Redis의 Client가 되는 서버 소스 상에서 JedisPool의 설정값이 1000으로 설정되어 있어서 생기는 문제였다. 위와 같은 상태로 JedisPool에서 resource를 받아오고 있었다. 위 소스코드에서 "setMaxT..
2018.10.13 -
Elasticsearch - ELK 스택을 사용하면서 겪었던 이슈들
키바나가 죽었어요. 복구해주세요. 라는 질문을 자주 받는다. ELK(Elasticsearch-Logstash-Kibana) 스택을 사용할 때에, Kibana에서 로그 조회가 불가능한 경우에 위같은 질문이 쏟아진다. Kibana는 로그를 조회하는 곳이니 문제를 일으킨 경우가 거의 없었다. 하지만 ES와 Logstash는 여태까지 여러 문제를 겪은 경험이 있다. 이번 글에서는 내가 겪었던 문제들에 대해 어떤 것이 원인이었고, 어떤식으로 이를 해결할 수 있었는지 다루려고 한다. 먼저, ES가 장애를 일으킨 문제에는 아래와 같은 것들이 있었다. 1. Request Time-out 루씬 쿼리가 복잡하거나, 검색 날짜의 텀이 길면 생기는 문제인 듯 하다. 대부분 일정 기간을 기다리면 다시 살아난다. 하지만 살아나지..
2018.09.01 -
Slack에 메시지 보내기.
Slack에 메시지를 보낼 때 두 가지 방법을 사용해보았다. 1. Legacy Token - https://api.slack.com/custom-integrations/legacy-tokens 슬랙 계정에서 토큰을 부여받아서, API 중 chat.postMessage를 GET Method를 사용하여 메시지를 슬랙 채널에 보낼 수 있다. 토큰을 부여받은 계정이 사라지면, 봇도 제대로 작동하지 못하므로 다시 부여받아야 한다. 슬랙 토큰을 통해서 특정 채널에 메시지를 보내기 위해서는 채널의 ID가 필요하다. ID는 웹으로 슬랙 채널을 접속 했을 때에 URL 가장 뒷부분에 있는 영어와 숫자로 이루어진 문자열이다. 아래 링크에 자세한 확인 방법이 있다. - https://www.wikihow.com/Find-a-..
2018.08.04