카테고리 보관물: 미분류

RabbitMQ client 에서 useNio 사용시 timeout 이 먹히지 않는현상…

개인적으로 개발하고 있는 OpenSource Project illuminati 는 rabbitMQ 를 사용중이다.

illuminati를 프로젝트에 적용을 하면 해당 프로젝트가 bootrun 할때 같이 올라가는데
rabbitMQ 에 문제가 생겨 컨넥션을 만들지 못할 경우 장시간 멈추는 (약 1분 20초정도) 현상이
로컬 테스트에서 발견 되었다.

분명 소스에는 timeout 이 설정되어있었지만 소용이 없었다.

Connection factory 의 useNio 옵션을 사용하지 않고 useBlockingIo 옵션을 사용할 경우
정상적으로 5초후에 timeout 이 나는것을 확인 하였지만 useNio 옵션을 사용할경우 1분이 넘게
대기를 하는 현상을 다시한번 확인하고 amqp-client 소스를 까보기 시작했다.

useNio 옵션을 사용하느냐 하지 않느냐에 따라서

FrameHandler 를 생성하기 위한 Factory 는 2가지의 구현체를 사용하는데

nio : SocketChannelFrameHandlerFactory
io : SocketFrameHandlerFactory

일단 io (blockingIo) 부터 보면

socketConnect 라는 native method 를 사용하는것을 볼 수 있으며 timeout 를 파람으로 받아서 사용할 수 있는것을 볼 수 있다.

다음 nio 를 보면

Net.class 에서 connect0 이라는 native method 를 사용하는 것을 볼 수 있고 이놈은 timeout 를 파람으로 받지를 않는것을 볼 수 있다.

헐…. 뭐지… 하고 찾아본 경과

이놈은 OS 의 tcp timeout 설정을 사용한다는것을 알 수 있었다.

sysctl 명령을 이용하여 TCP 설정들을 보면

이렇게 1분 15초가 설정된것을 볼 수 있다.

왜 timeout 을 임의로 어플리케이션 딴에서 설정을 할 수 없는지

설정할 수 있는 native method 가 있는지는 아직 찾지 못했다.

나만 몰랐던 이슈로

일단 정리한대까지 까먹기 전에 기록으로 남겨 둔다. (나의 스승님들이 답을 주실듯)

gmail smtp 서버를 이용시에 534-5.7.14 오류가 발생하면….

smtp 를 이용한 어플리케이션에서 메일발송…

아마 다들 gmail smtp 서버를 많이 쓸것이다.

하지만 만약 534-5.7.14 오류가 발생한다면

https://www.google.com/settings/security/lesssecureapps

를 방문하여

Screen Shot 2016-03-31 at 12.36.59 AM

이미지와 같이 보안설정이 낮은 앱에서 허용 체크를 해주면 된다. (ㅜㅜT-T 어쩌겠어…)

구글의 이미지 포멧 Webp 를 소개 합니다..

안녕하세요. 오늘은 아는 사람은 알지만 대부분이 모른다는 이미지 포멧인 webp 를 소개 합니다.

(이미지 포멧이란 ? jpg 나 png 같은 이미지 파일의 형식을 말합니다.)

webp 는 나온지 좀 되었습니다. 제 기억에 2009 년에 처음 발표 했을꺼에요.
간단하게 어떻게 탄생하게 되었나 알아보면… 구글이 youtube 를 운영 하려고 하다보니 뭔기 더 좋은 동영상 포멧이 필요 했습니다.
그래서 On2 라는 회사를 인수한뒤 이 회사에서 개발한 VP8 엔진을 이용하여 webm 이라는 동영상 포멧을 만들고 youtube를 운영 했었죠.

이 webm 의 동생 프로젝트가 webp 입니다. 그래서 webp 는 이미지 이지만 VP8 영상 엔진을 사용하고 있죠.
Jpg 를 대체하기 위해서 만든것이고 jpg 대비 용량의 작게는 10% ~ 70% 이상 줄일수가 있습니다. 동일한 이미지 퀄리티를 유지하고도 말이죠.

요즘은 모바일 시대이다 보니 사람들이 전부 다 스마트폰을 들고 다니죠. 하지만 LTE 요금은 아직 비쌉니다. 따라서 서비스의 대부분을 차지하고
있으며 트래픽 비용을 많이 먹는 이미지 파일의 용량을 줄이는 것이 정말 중요한 숙제 입니다.

특히나 제가 몸담고 있는 e-commerce 에서는 상품을 웹상에서 팔다보니 고객에게 직접 보여줄수 있는 이미지가 정말 중요하죠. 따라서 이미지로 도배
를 할수밖에 없습니다. 그러다 보면 트래픽의 압박과 고객 입장에서는 서비스 로딩도 느리면서 LTE 데이타 용량도 많이 먹기 때문에 서비스를 사용하기
꺼려지죠. 예를들어 전에 제가 일했던 어느 회사에서 CS 가 들어왔는데 앱을 사용한지 일주일도 안되었는데 데이타를 1G나 먹었다고 항의가 들어왔었죠.
그래서 확인해 보니 이미지가 원본 사이즈 그대로 쓰이고 있더군요. (개당 용량이 막 15M 넘음)

아무튼 그래서 저도 찾아 보다가 webp 를 발견했고 제가 지금 일하고 있고 제가 담당하고 있는 부분중에 하나인 파일 업로드 쪽에 적용을 해보았는데
제가 몸담고 있는 조직은 플랫폼 개발이라 고객과의 접점이 없어요… 그래서 팀내에 발표를 했었는데 반응이 그냥 그렇네요. ㅎㅎㅎ ㅜㅜ

뭐 고객과의 접점이 없고 그 부분을 담당하는 조직이 따로 있기 때문에 어쩔수 없죠뭐 이해 합니다.

언젠간 기회가 오겠죠… 아무튼.. 이런 webp 는 기사를 검색하다 보니 facebook 에서 2013년에 cdn 비용을 줄이기 위해 도입 하겠다라고
뉴스에 나온적이 있는데 확인결과 아직 적용을 안했더라구요.

아무튼 jpg 와 동일한 퀄리티에 용량은 3분의1이라니 매력이 넘치지 않습니까? 하지만 커다란 단점이 몇가지 있습니다… ㅜㅜ

1. 일단 브라우저에서 webp 를 지원해야 합니다….

Screen Shot 2016-03-29 at 12.18.51 PM

자 보시죠… 에이 뭐야 라고 생각 하실수도 있는데 역시 구글의 이미지 포멧 답게 크롬과 안드로이드에선 (!) 다 지원합니다!
우리나라의 스마트폰 사용자의 대부분이 안드로이드를 사용하고 있죠? 따라서 충분히 가능성이 있습니다.

2. 이미지 파일을 컨버팅 하는 리소스가 필요하다… 이건 뭐 당연하죠?;;

이정도의 문제점이 있으나 제 개인적인 생각으론 브라우져에서 webp 를 지원하는지 않하는지에 따라 분기를 탄다면 충분히 가능성이 있습니다.
(이미 만들어서 제 깃헙에 올려놨어요. 글 하단에서 공개 합니다.)

그리고 webp 의 인코딩 모듈은 c 로 개발되어있습니다. 따라서 c 모듈을 서버에 설치하고 java 에서 사용하려면 jni 를 쓰셔서 로드를 해야 합니다.

제가 webp 를 테스트를 할수있는 데모를 만들었습니다.

http://webp.leekyoungil.com/

Screen Shot 2016-03-29 at 12.17.12 PM

대략 이런식으로 이미지 파일을 선택하고 업로드를 해보면 webp 로 변환되어 나오며 이미지 퀄리티와 용량을 확인할수 있습니다.
(클릭하면 팝업으로 원본 사이즈로 뜸)
webp의 압축 방식은 Lossy 와 Lossless 방식 2가지가 있습니다. 말그대로 손실과 무손실 방식이며 용량에 차이가 있습니다.

해당 데모의 소스는 github 에 올렸습니다. https://github.com/LeeKyoungIl/webp-java-sample

제 생각에는 e-commerce 에서 사용하면 많은 트래픽 비용을 절약할수 있을꺼 같으니 꼭한번 써보시기를 추천 합니다.

데모 – http://webp.leekyoungil.com/
이미지 출처 – http://caniuse.com/#feat=webp
webp 프로젝트 홈 – https://developers.google.com/speed/webp/

[ptcompare.com] 귀차니스트를 위한.. 한눈에 네이버 다음 인기 키워드 및 추천 검색 결과를 볼수 있는 서비스

목요일에 팀 동료에게 GoLang이 재미있다고 들었습니다.
그때 잘 기억해 두었다가 주말에 프로젝트나 하나 해봐야지 라고 생각 했고

주말에 조금 보니 와… 정말 재미있네? 흥미가 가더라구요. 그래서 간단하게 프로젝트나 하나 해보자 하고
git 에 repository 를 만들고 프로젝트를 시작했어요.

어여 기획한다음 뚝딱 해서 하루만에 만든 결과물 입니다.

이름하여 ptcompare.com 귀차니스트를 위한 포털 사이트 검색 서비스 이며

네이버와 다음의 유저가 입력한 특정 키워드로 자동완성결과를 한눈에 비교할수 있으며
실시간 hot 한 키워드도 두 포털의 데이타를 한눈에 확인할 수 있습니다.

아직 ver 0.1 시험판이라 간단한 기능만 있습니다.

해당 프로젝트는

backend – GoLang 1.5.2
frontend – Reactjs 0.14.6 <- (이것도 이번에 프로젝트 하면서 이번에 처음 써봤는데... 뭐.. view 에만 써봐서 딱히 강력한줄을 잘 모르겠어요.) 으로 만들었구요 스케줄러 및 프록시 등등을 개발 했습니다. http://www.ptcompare.com <- 여기 가서 구경해보시고 후기좀 부탁 드려요.

개발자가 맥을 써야하는 이유 ?

저는 회사에서 플랫폼 개발 및 아키텍쳐를 담당하고 있습니다.
저는 맥을 업무용 PC 로 사용하기 때문에 회사의 보안쪽에게 부탁을 해야하는 경우가 많은데요.

왜 당신은 꼭 mac 을 써야 합니까? 라는 질문에 제가 대답한 내용을 정리해서 글로 남겨 봅니다.


안녕하세요. 이경일 입니다.

일단 저희 팀에서 주장하는 저희 팀이 (정확히는 저희 플랫폼 개발 파트 개발자가) 맥을 써야하는 이유입니다.

mac 의 OS인 osx 의 코어인 unix 정확히 말하면 (FreeBSD) 때문 입니다.
Android 개발이나 웹 개발은 솔직히 꼭 mac 이 필요 없긴 합니다. 하지만 웹어플리케이션 또는 서버 플랫폼 아키텍쳐 개발을 하는
저희 파트의 경우 특성상 서버 환경에서 오픈 소스 및 오픈 플랫폼을 가지고 개발을 하는 경우가 많습니다. 이 오픈 소스의 경우
대부분 unix 환경에 최적화 되어있기 때문입니다. 윈도우 os 에서 개발을 한것이 unix 나 linux 환경에서 안돌아 가는 경우가
종종 있습니다.

저희 파트는 서버상에서 돌아가는 것들을 만드는 파트이고 또한
개인용 PC 시장은 윈도우가 장악했을지 몰라도 서버 시장은 unix, linux 의 세상이라고 말할수 있을 정도 이기 때문이죠.

만약에 mac 을 쓰지 말라고 할 경우 저희 파트의 경우 윈도우를 쓰지 말고 Linux 를 (우분투 같은) 써야 하는것이 맞습니다.
따라서 편리한 컴퓨터 사용 환경과 개발을 위해 최적화된 환경 모두를 충족해주는 OS 는 지금은 mac 뿐 입니다.

그리고 Android 나 웹 개발자는 그럼 mac 을 쓸필요가 없지 않느냐 ? 라고 물어 보실수도 있는데 물론 반드시 쓸 필요는 없습니다.

하지만 Android 개발자나 웹 개발자는 주로 개발 도구로 eclipse 를 사용합니다. 이 eclipse 는 java 로 짜여진 개발 도구로
OS 의 메모리 관리에 매우 민감합니다.

따라서 메모리 관리가 엉망인 윈도우에서 사용하다가 종종 eclipse 가 죽는 경우가 종종 있는데 그런경우 힘들게 개발한 코드가
날아가는 경우가 허다하게 발생 하고 있습니다.
mac 에서는 아직 그런 경우는 경험해보지 못했습니다.

쉽게 이야기 하면 안정성과 효율성 이라고 말하고 싶네요. (싱글 모니터 쓰는것보다 듀얼 모니터 쓰는것이 효율이 좋은것과 같은 맥락)

저희 팀 안에 ui 개발 파트가 있는데 이 파트는 맥을 안쓰고 윈도우 PC 를 쓰고 있습니다.
이분들은 eclipse 를 안쓰고 editplus 라는 text 편집 툴을 쓰고 사용자들과 접점인 브라우저 상에서 돌아가는 것을 개발하는 파트 이기
때문에 사용자의 대부분을 차지하는 익스플로어 환경 (윈도우) 에 맞추어 개발할 필요가 있기 때문이죠.

그들 입장에서는 맥에서 개발하고 확인을 하기 위해서 VDI 의 익스플로어를 쓰면 너무 불편하고 효율성을 위해 PC 를 쓰는것 입니다.

저희 파트는 mac 을 꼭 사용했으면 하는 점을 어필한 것이니 검토 부탁 드립니다.

 

어떤가요? 동감 가시나요?

추가

죄송합니다. 해당 글은 매우 개인적인 글로 한창 패기 있을 때 쓴 글입니다. 당시 매우 폐쇄적인 대기업의 상황에서 온갖 보안 프로그램이 달려있는 윈도 랩톱을 사용하다가 화가 나서 쓴 글인데… 오해가 좀 있을 거 같네요. 저 회사 다닐 때 결국을 맥을 사용하긴 했는데 결국 맥용 보안 프로그램을 어디서 또 구해 오더라고요… 우분투는 그런 보안 프로그램을 설치가 불가능해서 인터넷을 접속할 수 없어 전혀 사용할 수 없었고요. (개인적으로는 우분투 좋아합니다. 제가 사용하는 씽크패드에도 일부 파티션에 우분투를 설치해서 사용하고 있습니다.) 우분투 이야기가 많으신데 물론 우분투 좋습니다. 하지만 가끔 답답하때가 있더라고요. 에버노트 사용이라던지 가끔 하는 게임류? (제가 가난해서 게임용 데스크톱이 따로 없다 보니 ㅜㅜ)