본문 바로가기

분류 전체보기110

MySQL DATE INTERVAL 함수 함정 MySQL은 날짜와 시간 연산을 지원하는 Date Function이 많이 있다. 그중에 날짜를 unit 단위로 더하고 빼는 DATE_ADD와 DATE_SUB 함수를 자주 사용했는데, 당연하다고 생각했던 로직에 문제가 있었다. NOW()는 현재 시간을 반환하는 함수로 시간이 지날수록 증가할 텐데, NOW()에 임의의 값을 더한 시간은 그러지 않은 경우가 있다. 날짜 연산에 사용한 MONTH 단위가 문제였다. DATE_ADD(NOW(), INTERVAL 1 MONTH) NOW()가 증가하기 때문에 여기에 한 달을 더한 값도 당연히 증가할 거라 생각하고, 이에 기반한 로직이 있었는데 그렇지 않았다. 달이란 항상 일정한 상수가 아니라 현재 속한 월에 따라 개념이 달라지기 때문이다. 1월 15일에 한 달을 더하면.. 2019. 12. 13.
[bash] 간단한 부하테스트 script 부하 테스트를 할 수 있는 여러 좋은 툴들이 많지만 bash도 연습할 겸 로컬에서 실행시킬 간단한 스크립트를 만들었다. #!/bin/bash TPS=$1 URL=$2 LOG=./result.log function exit_trap() { echo -e "\nHTTP CODE" cut -f1 ${LOG} | sort | uniq -c | sort -nr echo "RESPONSE TIME" cut -f2 ${LOG} | awk '{ sum += $1 } END { print sum / NR}' exit 0 } trap exit_trap INT for((i=0;;i++)) do echo -en "\r$i sec" for _ in `seq 1 $TPS` do curl -o /dev/null -s -w '%{h.. 2019. 12. 12.
Amazon Kinesis Stream 개념 Amazon Kinesis Data Stream은 Real-time / Fully managed / Scalable를 자랑하는 서비스이다. 완전 관리형이라 인프라 관리를 안 해도 되기 때문에 신경 써야 할 부분이 상당히 적다. 기능은 간단하게 여러 Producer로부터 데이터를 받아 stream에 저장하고, 여러 Consumer에게 해당 데이터를 전달한다. 이때 전달되는 데이터는 kinesis에서 Record단위로 처리한다. 스트림은 한 개 이상의 샤드로 구성되어 있는데 데이터는 PartitionKey로 샤드를 특정 지어 그곳에 저장된다. 샤드는 Kinesis Stream의 용도에 맞게 랜덤 하게 분배하거나, 특정 샤드에 보내도록 PartitionKey를 신경 써야 한다. 이를 읽어가는 consumer는.. 2019. 12. 12.
Keras로 CartPole 강화학습 OpenAI Gym으로 이미 구현되어있는 환경을 이용할 수 있다. 가장 단순해 보이는 CartPole 환경을 가져와서 강화 학습을 시켜보자. cart위에 막대기가 있고 한 끝이 cart에 고정되어 있다. 중력에 의해 막대기는 바닥으로 떨어지려 할 테니 cart를 좌우로 움직여 최대한 오래 지탱하는 것이 목표이다. OpenAI Gym에서는 environment로 cart의 위치, 속도와 막대기의 각도, 속도가 주어지고 이를 판단해서 cart의 움직임을 구해야 한다. environment로 주어지는 모든 상태에 대해 Q-Value를 구한다면 좋겠지만 경우의 수가 무한하기 때문에 구할 수 없다. 따라서 deep learning으로 학습시켜 모델을 만들어 입력으로 주어지는 environment에 대해 cart의.. 2019. 12. 8.
[bash] sed 사용 설명서 sed는 stream editor의 약자로 인풋을 가공해서 출력하는 명령어이다. 전부 메모리에 올리지 않기 때문에 매우 큰 파일을 처리하는데 효율적이다. 알아야 할 개념으로 버퍼 2개가 있다. 스트림을 읽어 처리하는 부분인 pattern space와 처리한 값을 저장하는 hold space이다. 스트림 처리지만 여러 스트림을 받아 처리가 필요한 경우 hold space를 이용한다. 그렇기 때문에 pattern space에서는 다음 스트림을 읽어오거나, hold space로 값을 보내거나 가져오는 등의 함수들이 있다. 치환(Substitute) $ sed 's/A/B/flag' A를 B로 바꾸는 명령이다. flag는 비워놔도 문제없고, 자주 사용하는 몇 가지가 있다. p: 출력하는데 주로 -n 옵션과 같이.. 2019. 12. 1.
[bash] awk 사용 설명서 awk은 레코드(기본은 라인) 단위로 입력받아 패턴(정규식) 검색으로 일치하는 라인을 받아 처리한다. 패턴 매칭과 처리는 작은따옴표로 묶고 처리는 중괄호로 묶어서 사용한다. $ awk 'pattern {action}' filename 입력으로부터 pattern으로 필터링 후 action을 수행한다. pattern이 없으면 전부 action을 수행하고, action이 없으면 입력받은 레코드를 그대로 출력한다. filename이 없는 경우는 stdin을 입력으로 받는다. action에서는 프로그래밍 언어답게 기본으로 지원되는 내장 변수들이 많다. 내장 변수 $n $0은 레코드, $1부터는 separator 나뉜 필드가 할당된다. separator는 아래 있는 FS값이고 변경할 수 있다. NR NR은 patt.. 2019. 11. 21.