전체 글
node.js에서 sharp를 사용해서 이미지 크기 변경하기
node.js에서 이미지 크기를 변경하기 위해서 임시 파일에 데이터를 다운로드 받고 파일 크기를 변경하는 작업을 보통 진행한다. 하지만 이번에는 html stream으로 임시로 내려받은 버퍼를 사용해서 사이즈를 변경하고 바로 s3에 전송하거나 파일로 내보내는 작업을 진행해보려한다. 이미지의 사이즈를 변경하기 위해서 필요한 라이브러리는 sharp이다. 1npm install sharpcshttps://www.npmjs.com/package/sharp 먼저 request 요청으로 내려받은 image데이터를 sharp로 이미지를 변경하고 파일로 내보내보자.1234567891011121314151617181920212223242526272829303132'use strict'; const request = re..
위메프 특가 에어팟 구매대행으로 구입 후기
2015년 처음 회사입사하고 바로 구매했던 소니 블루투스 이어폰이 배터리가 너무 빨리닳아서 교체해주고 싶었다. 마침 위메프에서 특가로 16만원에 에어팟을 구매대행으로 팔고있었다. 그래서 회사에서 준 포인트랑 돈을 합쳐서 구매했다. https://front.wemakeprice.com/product/100942377 배송은 생각보다 빨랐다. 1주일도 안돼서 도착했다. 포장도 엄청 뚱뚱한 에어쿠션 뽁뽁이에 쌓여있었다. 맘에든다. 드디어 이 비싼 이어폰을 뜯어봤다. 구성품은 아주 단조롭다. 충전기 본체 그리고 이어폰! 여닫는 자석이 엄청 부드럽다. 착용해 봤는데 귀에 착들어오는데 떨어트릴까봐 겁난다 ㅋㅋ 연동도 잘된다. 멀티페어링은 지원 안하지만 맥이랑 돌아가면서 사용하는데는 무리없다. 정품 등..
maxmind의 geoLite2를 이용해서 접속한 사용자의 지역정보 가져오기
서비스를 운영하다보면 사용자 아이피에 따라 장소에 맞는 상품을 추천해줘야 할 때가 있다.그럴때 사용하는게 geoIp인데 이런 서비스를 제공하는 회사는 대표적으로 maxmind, db-ip, ipstack, ip2location 등이 존재한다. 그 중에 무료로 사용하기에 geoLite2가 좋다. geoLite2는 62%가 일치하고 geoIp2는 66% 일치한 정보를 제공한다. 그래서 무료로 사용할 수 있는 geoLite2를 사용해보자. 데이터베이스 다운로드먼저 지역정보를 보관하고 있는 데이터베이스를 다운받아야 한다. 데이터베이스는 csv와 mmDB를 제공한다. 링크 : https://dev.maxmind.com/geoip/geoip2/geolite2/ mmDB에서 데이터를 확인하기 어렵기 때문에 csv 파..
node.js express에서 request 사용자 아이피 찾기
요청한 사용자의 Ip를 찾아서 로그를 남기거나 Ip 지역정보를 활용해서 geoIp를 찾아내거나 할 때 request를 요청한 사용자의 IP 주소가 필요하다. Spring에서는 간단하게 HttpServletRequest에서 getHeader의 X-FORWARDED-FOR에 있는 정보를 가져오거나 getRemoteAddr()을 통해 가져올 수 있다.1234567891011121314/** * 주문요청. * * @param req the req * @return the response entity*/@PostMapping(value = "/order")public ResponseEntity order(@Valid @RequestBody OrderRequestDto req, HttpServletRequest r..
맥북 에어 11인치 2014년형 중고 구매
아이맥이 있는데 어디 나가서 컴퓨터를 해야하거나 집에서 티비보면서 컴퓨터를 해야할 때 이동할수가 없어서 조금 불편했다. 그래도 아이맥을 좋은 스펙으로 샀기 때문에 맥북을 좋은걸 사고 싶지는 않았다. 휴대성과 2014년 출시된 상품정도를 보고 중고나라를 찾았다. 그러던중 상태가 되게 좋고 가격도 40만원으로 저렴한 11인치 맥북에어를 찾았다. 그래서 바로 연락하고 퇴근하고 만나서 구매했다.박스 및 내용 구성품도 다 있었다. 괜찮은거 같다. 초기화가 된 상태지만 다시 초기화 하고 모하비로 올려서 사용해야겠다.
Elasticsearch에서 Paging시 max_result_window 초과시 조회가 안되는 이슈
엘라스틱 서치에서 데이터를 paging 하여 조회할때 from과 size를 사용한다. from은 시작 지점을 이야기하고 size는 그 시작 지점으로 부터 몇 개의 데이터를 보여주어야 하는 건지 설정할 때 사용 되는 값이다. 그래서 계산 방법은 다음과 같다.from : (page - 1) * size size : size 그럼 만약 3개씩 보여주는 페이지에서 2번째 페이지를 보여주기 위해서는 from은 3, size는 3으로 설정하면 된다.123456789GET wedul/_search{ "from": 3, "size": 3, "query": { "match_all": {} }} cs 그럼 만약 wedul 페이지를 접근하다가 다음과 같이 Document의 숫자가 10000을 넘어가게 되면 어떻게 될까? 쿼..
Elasticsearch 6.4 기본 한글 형태소 분석기 노리 (nori) 설명 및 사전 추가하기
엘라스틱 서치를 쓰면서 기존에 형태소 분석기를 아리랑, 은전한닢, open korea등을 사용했었다. 근데 이번에 6.4버전이 출시 되면서 Elasticsearch에서 기본으로 제공하는 한글 형태소 분석기가 나왔다. 이름은 nori(노리)이다. 노리는 놀이라는 뜻에서 가져왔으며 mecab-ko-dic 사전을 이용하지만 사전을 압축하므로 기존 형태소 분석기와 비교하여 메모리를 적게 쓰고 훨씬 빠르다. 그럼 Docker에 엘라스틱서치 6.4와 Kibana 6.4를 설치하고 Nori 플러그인을 설치해서 한글 형태소분석기를 사용해보자. Docker에 Elasticsearch와 Kibana 설치12docker run -d -p 9200:9200 -p 9300:9300 --name elastic -e "discov..
Javascript에서 epoch second 구하기
epoch second 는 유닉스 시간을 나타내고 Epoch 시간 이라고 한다. 이를 자바스크립트로 구하는 방법을 알아보자.1Math.floor(new Date('2018-03-11') / 1000)cs 다시 Date 값으로 돌리는 것도 어렵지 않다.1new Date(1520726400 * 1000)cs
JPA 매핑 어노테이션 - DDL 2
엔티티 매핑에서 사용될 컬럼의 필드 유형을 설정하는 매핑 어노테이션을 정리해보자. @Column 테이블에서 사용 되는 컬럼이라는 필드를 지정해줄때 사용하며 name, nullable(기본이 true) 등의 설정을 해줄 수 있다. 12@Column(name = "NAME", length = 10, nullable = true)private String userName;cs @Enumerated 자바의 enum 타입을 매핑할 때 사용한다. 속성으로 EnumType.ORDINAL과 EnumType.STRING이 존재하는데 이름 그대로 ORDINAL은 순서를 STRING은 Enum의 이름을 저장한다12345678910111213141516171819202122232425262728public class Memb..
올림픽공원 피자 스파게티 음식점 코벤트가든
개천절에 나들이 할겸 올림픽공원에 왔다. 배가고파서 근처 식당인 코벤트 가든이라는 곳을 갔다. 손님이 엄청 많아서 30분정도 대기를 했다. 그래서 얼마나 맛있는가 했는데 맛있다 ㅎㅎ 가격은 좀 비싸지만 그래도 맛은 괜찮았다.피자는 마르게리따 인가 하는 피자인데 빵이 엄청 얇아서 여러개 먹어야 하나 먹은 것 같다. 샐러드는 오렌지 드레싱이 맛있다. 게살 로제 스파게티는 이달의 메뉴인가 그래서 시켰는데 맛있다. 소스까지 다 긁어먹었다 ㅋㅋ 전체적으로 맛있었다. 대기시간이 너무 길어서 좀 그렇지만.