다른 개발자가 개발한 파일업로드용 웹 서버의 코드를 보면서 든 예전에 이런 부분에 대해서 간단히 노트해 본다.

수많은 개발자들이 “당연히 nio가 io보다 성능이 좋다”라는 인식을 많이 하고 있다. 나도 그렇게 생각해오긴 했었다. 그러나 그런 것만은 아니다. 환경에 따라서 io가 nio보다 성능이 더 좋을 수 있다.  내가 보았던 테스트중의 일부는 nio보다 io가 더 빨랐다. (진짜!. io가 nio보다 10~20% 정도 더 나왔다)

한 블로그(http://geekomatic.ch/2009/01/16/1232134440000.html)의 글에서는 nio가 io에 비해서 판정승으로 성능이 좋다.

java.io versus java.nio

 

 

다른 블로그(참조 : http://geekomatic.ch/2008/09/06/1220730740479.html) 의 글을 참조해 본다. 역시 nio가 io보다 성능이 좀 더 좋다.

x축은 크기, y축은 속도를 의미하며, 파란색은 nio이고, 빨간색은 io 테스트이다. 용량이 작을 때는 오히려 io가 더 속도가 높을 때(file size가 10mb)가 있다. 그러나 큰 용량으로 갈 수록 nio가 확실히 속도가 빨라진다.

java.io versus java.nio

 

구글의 한 개발자(http://www.mailinator.com/tymaPaulMultithreaded.pdf)의 발표 자료을 보면, nio보다 io가 성능이 더 높게 나오게 했다. (do not compare charts 를 하지 말라고 했지만. 해버렸다.)

image

또다른 분의 글(http://www.thebuzzmedia.com/java-io-faster-than-nio-old-is-new-again/)을 참조하면 위의 ppt에 사족을 다신 분이 있다. 이 분의 글을 잠시 빌려온다면 다음과 같다.

NIO가 빠른 이유는 asynchrous와 non-blocking 때문에 빠르다는 것이다.

 

 

누가 더 성능이 좋냐. 참 성능 이라는 지표가 io/net, 코드, vm, OS에 depedent가 있기 때문에 상당히 애매모호하다.

stackoverflow(http://stackoverflow.com/questions/1605332/java-nio-filechannel-versus-fileoutputstream-performance-usefulness)에 좋은 자료가 있다.

아래 코드를 가지고 테스트했는데, nio보다 io의 성능이 더 좋냐는 질문이었다.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class JavaNIOTest {
    public static void main(String[] args) throws Exception {
        useNormalIO();
        useFileChannel();
    }

    private static void useNormalIO() throws Exception {
        File file = new File("/home/developer/test.iso");
        File oFile = new File("/home/developer/test2");

        long time1 = System.currentTimeMillis();
        InputStream is = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(oFile);
        byte[] buf = new byte[64 * 1024];
        int len = 0;
        while((len = is.read(buf)) != -1) {
                fos.write(buf, 0, len);
        }
        fos.flush();
        fos.close();
        is.close();
        long time2 = System.currentTimeMillis();
        System.out.println("Time taken: "+(time2-time1)+" ms");
    }

    private static void useFileChannel() throws Exception {
        File file = new File("/home/developer/test.iso");
        File oFile = new File("/home/developer/test2");

        long time1 = System.currentTimeMillis();
        FileInputStream is = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(oFile);
        FileChannel f = is.getChannel();
        FileChannel f2 = fos.getChannel();

        ByteBuffer buf = ByteBuffer.allocateDirect(64 * 1024);
        long len = 0;
        while((len = f.read(buf)) != -1) {
                buf.flip();
                f2.write(buf);
                buf.clear();
        }

        f2.close();
        f.close();

        long time2 = System.currentTimeMillis();
        System.out.println("Time taken: "+(time2-time1)+" ms");
    }
}

 

좋은 답이라 투표를 받은 글의 전문은 다음과 같다.  너무 괜찮아서 번역 없이 그냥 작성한다.  결론은 nio 코딩할 때는 nio 코딩의 묘미에 맞게 코딩해야 제대로 성능이 나온다는 것이다.

My experience with larger files sizes has been that java.nio is faster than java.io. Solidly faster.Like in the >250% range. That said, I am eliminating obvious bottlenecks, which I suggest your micro-benchmark might suffer from. Potential areas for investigating:

The buffer size. The algorithm you basically have is

  • copy from disk to buffer
  • copy from buffer to disk

My own experience has been that this buffer size is ripe for tuning. I've settled on 4KB for one part of my application, 256KB for another. I suspect your code is suffering with such a large buffer. Run some benchmarks with buffers of 1KB, 2KB, 4KB, 8KB, 16KB, 32KB and 64KB to prove it to yourself.

Don't perform java benchmarks that read and write to the same disk.

If you do, then you are really benchmarking the disk, and not Java. I would also suggest that if your CPU is not busy, then you are probably experience some other bottle neck.

Don't use a buffer if you don't need to.

Why copy to memory if your target is another disk or a NIC? With larger files, the latency incured is non-trivial.

Like other have said, use FileChannel.transferTo() or FileChannel.transferFrom(). The key advantage here is that the JVM uses the OS's access to DMA (Direct Memory Access), if present.(This is implementation dependent, but modern Sun and IBM versions on general purpose CPUs are good to go.) What happens is the data goes straight to/from disc, to the bus, and then to the destination...by passing any circuit through RAM or the CPU.

The web app I spent my days and night working on is very IO heavy. I've done micro benchmarks and real-world benchmarks to. And the results are up on my blog, have a look-see:

Use production data and environments

Micro-benchmarks are prone to distortion. If you can, make the effort to gather data from exactly what you plan to do, with the load you expect, on the hardware you expect.

My benchmarks are solid and reliable because they took place on a production system, a beefy system, a system under load, gathered in logs. Not my notebook's 7200 RPM 2.5" SATA drive while I watched intensely as the JVM work my hard disc.

What are you running on? It matters.

 

 

마치며..

nio 가 io 보다 성능이 낮게 나온다면 nio가 성능이 나오도록 제대로 코딩했는지 살펴볼 필요가 있다. bottleneck이 있는지, 버퍼를 너무 크게 잡았는지, api를 잘 사용했는지, 상황에 맞게 코딩했는지 살펴보면서 테스트하면 좋은 결과가 있을 것 같다.

Posted by '김용환'
,

 

구글에서 TCP Fast Open paper를 발표했다.

<광고 동영상>

 

Let's make TCP faster

http://googlecode.blogspot.com/2012/01/lets-make-tcp-faster.html 에 간단한 요약자료가 있다.

 

1. TCP initial congestion window 를 10으로 늘리자. TCP connection 처음에는 3패킷만 전달되게 되어 있는데. 이를 수정하면 10% 이상의 지연시간을 줄 일 수 있다.

2. 초기 timeout을 3에서 1로 줄이자.

3. TCP Fast Open를 사용하자. 기존의 33%의 HTTP 요청은 TCP 연결에 사용 된다. 이를 개선한 TCP Fast Open은 Page Load 시간을 평균 10%, 때로는  40%까지 줄일 수 있다.

4. Proportional Rate Reduction for TCP를 사용하자. 네트웍으로 전달되는 패킷 손실은 순서가 꼬이거나 충돌로 문제가 될 수 있다. 새로운 recovery 알고리즘이 필요하여 부드럽게 재전송을 하도록 해서 빠르게 할 필요가 있다. 현재 이 것은 리눅스 커널에 탑재되어 있고, TCP 표준에 추가될 예정이다.

 

TCP Fast Open paper 링크는 아래와 같다.

http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/ko//pubs/archive/37517.pdf

 

Proportional Rate Reduction for TCP 에 대한 paper 링크는 다음과 같다.

http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/ko//pubs/archive/37486.pdf

 

시간 될 때 봐야겠다.

Posted by '김용환'
,

 

http://venturebeat.com/2012/01/09/onlive-finally-launches-potentially-disruptive-real-time-streaming-for-desktop-productivity-apps/

동영상은 여기서 볼 수 있다.

http://content.bitsontherun.com/previews/bqDhufhg-MA7UWZgx

 

5년 전까지만 해도 CES에 관심조차 없었는데. 격세지감이다.. CES에 주목할정도로 영향력이 생겼다. 우와~


다운로드는 iTunes의 App Store에서 Onlive Desktop 어플을 다운받는다.


http://www.onlive.com/ 에서 가입한다.



가입한 아이디(이메일)로 Onlive desktop을 사용한다.

가상 데스크탑을 사용할 때, 인터넷이 안된다. 파일업로드는 아래 싸이트에서 진행한다. 


https://desktop.onlive.com/account/myfiles

파일을 업로드하면, Documents 디렉토리에 파일이 온라가는 것을 확인할 수 있다. MS Office 파일들은 무난히 실행할 수 있을 것 같다. 




Posted by '김용환'
,

 

 

2012년 1월 5일 lol 홈피.

http://www.leagueoflegends.co.kr/

 

image

 

나름 top 10안에 들어가는 게임인데.. 고생이 많네…

Posted by '김용환'
,

 

600원짜리 아이폰 충전기

image

 

그리고, 오래되서 쓸모없는 명함과 플라스틱 명함통을 칼로 잘 다듬었다. 그리고 가운데 구멍을 내고. 그 안으로 600원짜리 아이폰 충전기를 연결했다.  (약간 아쉬운 점은 600원짜리 아이폰 충전기가 아닌 정식 충전기였으면 딱 구멍에 맞게 칼질을 해서 다듬었으면 좋은 결과가 나왔을 것 같다.)

명동에서 파는 아이폰 껍데기를 이용해서 약간 높게 했다. 아래 부분도 공간이 생기게 할 수 있었다.

IMG_1117

 

이렇게 해서 만든 아이폰 deck이다.

IMG_1118

 

아직까지는 그러저럭 쓸만한다.

Posted by '김용환'
,

네이버 ndrive는 정말 속도도 좋고 안정석이 좋아서 많이 사용하면 할 수록 감탄하게 된다.

일본 ndrive 에서 무료로 30Gbyte를 제공한다.
http://ndrive.naver.jp/

웹에서는 일본어 환경인지 체크하기 때문에 가입이 쉽지 안핟.  그러나 iphone, ipad에서는 체크를 하지 않기 때문에 가입이 가능하다.  iphone 어플 의 경우는 캡챠를 이용하고, ipad 어플의 경우는 캡차를 이용하지 않는다.
일본어이긴 하지만 일본어 번역만 이용하면 누구나 가입할 수 있다.
또한 가입절차가 편해서 사용아이디, 이메일 만 가지고 쉽게 가입이 가능하다.


ndirve 한국 어플과 ndrive 일본 어플 설치 형의 경우는 중복 실행이 되지 않는다. 따라서 동시에 하나만 쓰도록 하면 된다.



그리고,아이패드, 아이폰에서 사용할 수 있다.



아. 좋다.
 
Posted by '김용환'
,

MicroSoft에 근무하는 Scott Hanselman 이라는 분이 개발자에게 유용한 툴을 공유했다.

http://www.hanselman.com/blog/ScottHanselmans2011UltimateDeveloperAndPowerUsersToolListForWindows.aspx

완전 괜찮은 툴들을 소개시켜 주었다.내가 아는 것도 있고, 새로운 것도 있는데. 나는 소개된 툴 중 좋을 만한 것을 적어본다. 잘 써봐야겠다.
 
 * window live writer 2011은 MSword에 플러그인으로 wordpress에 연동하여 쉽게 글을 쓸 수 있도록 연동한 것이 있다. 그동안 블로그를 쓰면서 이 부분에 고민이 많았는데. 쉽게 연동할 것 같다. 

* Bins 이거 iPHONE 의 그룹처럼 해주는 윈도우 툴이다. 완전 귀엽다. 

* SQL Designer 은 웹으로 table schema 로 만들 수 있다. 귀찮은 거 설치 안해도 된다.

* Terminals 라고 해서 데스크탑 매니저(mstsc)이 하나의 터미널 창만 지원하는 것에 반해 multi로 지원되는 녀석이 있다. 오홋! 굿~
Posted by '김용환'
,



넥슨 해킹 확인 방법을 알려드립니다.
아주 간단하긴 하지만, 이런 가이드가 있으면 편하실 것 같아서 정리차원에서 드려봅니다. 탈퇴 프로세스가 번거로웠습니다.

 

본인 계정으로 해킹된 계정이 넥슨 메이플 스토리에 등록되어 있으면, 탈퇴를 할 수 없습니다.

(https://user.nexon.com/mypage/page/nx.aspx?url=myinfomanage/secede)

 

 

 

탈퇴를 진행하면 다음의 화면이 나오면서 탈퇴를 할 수 없다고 나옵니다. 그리고 게임 탈퇴를 클릭하면 메이플 스토리 웹만 뜹니다.

 

 

 
 

저의 계정은 해킹되어서 메이플 스토리 4개 계정이 만들어졌으며, 프로파일까지 변경되어 있었습니다.

 

1. 넥슨 회원인지 확인

넥슨에 가입하지 않았지만 가입되어 있는 상황이 있을 수 있습니다. 먼저 넥슨 (http://www.nexon.com) 홈페이지에 접근합니다.  상단 좌측에 있는 로그인 창 밑에 있는 아이디 찾기를 선택해서 넥슨 회원으로 가입되어 있는지 확인합니다.  

 

 

2. 넥슨 회원에 가입되어 있으면  비밀번호를 찾으시거나, 기존의 비밀번호를 넣으시면 로그인을 확인할 수 있습니다. 아이디와 패스워드를 잘 기억해주세요.

 

3. 메이플 스토리 홈페이지(http://maplestory.nexon.com/) 에서 해킹되었는지 확인합니다.

메이플 스토리 홈페이지의 로그인은 새로운 계정이 필요로 하는 곳입니다. 따라서 다시 id/pw 찾기를 합니다.  

 

주민번호인증/아이핀 인증 팝업창이 뜨면, 편하신 인증방법을 선택합니다.

 

 

 

 

넥슨의 아이디, 비밀번호, 이름, 주민번호를 넣어야 메이플 스토리 계정을 알 수 있습니다. 넥슨 일반 게임과 달리 인증 방식을 취하고 있습니다.

 

 

 하하 4개나 털렸습니다.

  

 

 

마지막 두자리를 **으로 숨겨서 메이플 스토리 계정을 알 수 없도록 되어 있습니다.

그래서 전화를 통해서 탈퇴를 해야 합니다.

 

3. 탈퇴 신청

메이플 스토리 계정을 모르는 상태에서는 오직 전화를 이용해야 합니다. 메이플 스토리 계정을 모르는 한 할 수 있는 것이 없습니다.  만약 메이플 스토리 계정을 안다면, 모든 계정에 대해서 탈퇴를 진행하고 넥슨 계정 탈퇴를 하시면 됩니다.

저의 경우는 메이플 스토리 계정을 모르기 때문에 전화로 탈퇴를 신청했습니다.

넥슨 고객 센터 전화번호는 1588-5509 번입니다. 그다음 주민 번호를 넣으시고, 2번 눌러주시고 상담원과 통화해서 탈퇴를 진행하면 됩니다. 개인인지 확인하기 위해서 주민등록증이나 운전면허 번호로 인증하는 것이 있습니다.

해킹때문에 사람들이 많이 전화 통화를 하는 것 같습니다.
통화 시도는 10차례 이상 시도했으며, 탈퇴신청을 했고, 문자로 탈퇴 결과 알려준다고 합니다.

Posted by '김용환'
,

넥슨 해킹..

scribbling 2011. 11. 25. 22:18


1,300만명의 계정이 털렸다는 뉴스가 떴다.

http://search.naver.com/search.naver?where=nexearch&sm=tol_hty&query=%B3%D8%BD%BC+%C7%D8%C5%B7


내 생각에는 기본적으로 보안을 잘 지키지 못하는 회사는 비전이 없는 것 같다.
일본에 상장하는 것보다 더 중요한 것은 기본을 지키는 것인데, 많이 실망했다.

네슨 계정은 해킹되어서 별명, 다양한 캐릭터가 만들어져 있어서 탈퇴를 하려고 했다.
암호화된 비밀번호도 뚫렸다고 했지만, 내 해킹된 계정의 프로필은 이미 낙서가 되어 있는거 봐서는 패스워드는 완전히 떨렸다고 생각이 된다. 만약 암호화된 패스워드가 뚫렸다면, 이미 보안 암고리즘까지 알고 있다는 것 같다.

근데, 탈퇴는 왜 이렇게 힘들게 만들었니? 아무리 게임회사지만, 탈퇴처리가 어렵게 해서 탈퇴를 포기하게 하지 않아주면 좋겠다.

http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=%EB%84%A5%EC%8A%A8+%ED%83%88%ED%87%B4

이 사건을 통해서 좋은 회사인 넥슨이 다시 서비스를 고민하는 때가 되기를 바래.




곰곰히 생각해보니 내가 회사에서 처리했던 업무 중에 보안 공격에 대비하는 사례들을 정리해 본다.

1. 게임서버, .net, IIS 서버를 기반으로하는 윈도우 서버는 아예 쓰지 않도록 한다.
윈도우 서버는 워낙 잘 업데이트하지 않으면 자주 취약점이 자주 발생된다. 따라서 그 취약점으로 공격한다.
내 생각에는 모든 것을 리눅스 서버에서 관리하는 것이 가장 좋은 것 같다.  리눅스의 장점이 크다.
다만 윈도우 개발자가 MSSQL과 MS 제품군을 개발환경이 뛰어나 다른 대체재를 찾을 수 없다는 점. 리눅스를 너무 어려워하는 것이 가장 큰 난제..

대부분의 해킹은 윈도우 서버로 접속하는 경우에서 발생되는 경우인 것을 많이 봐왔기 때문에 윈도우 서버만 보면 리눅스로 바꾸고 싶다.
내가 담당자라면 리눅스-자바,C++로 바꾼다.


2. 윈도우 서버에 접근 하는 계정과 윈도우 서버를 잘 관리한다.
학원에서 알려준 아이디/패스워드를 admin/admin 계정을 회사에서도 사용하는 인프라 운영자가 은근히 있다. 내가 다는 회사에서도 이런 사람들 있다. ㅡ.ㅡ;;;;
admin/passwd 이렇게 쓰는 사람도 있었다.
패스워드는 무조건 3개월에 한번씩 바꾼다. 

윈도우 서버를 몇대나 관리하는지, 항상 신경써야 한다.

그리고, 쓸데 없는 정보는 서버에 두지 않는다. 소스같은 것을 두는 사람들이 있었다. 약간 배포 개념이 없는 개발자들이 상당히 많은데, 빌드/배포서버는 따로 두고, 게임/웹 서버는 바이너리만 들어가게 한다.
빌드/배포 서버는 소수의 사람만 접근하도록 하고, 웹 접근만 가능하게 한다.

3, 어드민 계정 관리가 필요하다. 커보러스를 사용하도록 한다.
윈도우 어드민 계정은 정말 잘 관리해야 한다. 아무한테나 패스워드를 알려주지 않는다.
리눅스의 경우는 ssh 대신 커보로스 기반으로 계정관리를 하도록 한다.
ssh로 서버 관리를 하는데, 수천대의 root 비밀번호가 동일하게 하는 인프라 운영자가 있었다.
내가 이거 보안 문제가 심각해질 것이라 하며 바꾸는 것이 좋겟다고 하니, 불편해 함. 한번 구축된 인프라는 바꾸기 어려운 부분이 있음. 처음 설계부터 고민을 많이 하는 게 보안 요소와 개발 요소를 모두 볼 수 있는 개발자가 객관적으로 보고 구축하는게 좋음.
커보러스는 티켓 기반이라 계정 관리가 편한 부분이 있어 요즘 버전은 많이 쓸만해졌다.


4. 개발자의 어드민 계정 선호 사상이 없어야 한다.
일부 개발자는 어드민 계정만 선호하는데, 내가 봤을 때는 잘 못된 생각이다. 개발자는 개발자 계정만 이용해도 된다. 특정 서버로만 어드민 계정 사용하면 된다. 
root는 외부에서 무조건 접근안되게 하며, sudo 권한도 안되게 하면 된다. 필요할 때는 그 때마다 인프라 운영자의 도움을 받아 처리하면 된다.


5. 철저히 ACL 관리를 한다. 또는 방화벽을 잘 써라 
인프라 운영자 또는 보안 담당자는 ACL 목록을 잘 관리하고 있어야 한다. 이거 잘하는 인프라 운영자/보안 담당자를 본 적이 없다. 그냥 승인만 할 뿐, 어떻게 서비스가 동작하는지 전혀 관심이 없어서 관리를 하지 않아, 개발팀에서 서버에 대한 모든 ACL 관리를 하여 서비스 또는 보안에 문제가 없도록 한다. 
 
인프라 운영자와 보안 담당자는 불편하지더라도 ACL 관리를 철저히 함으로서, tcp, udp 포트 뚫을 때마다 인증절차를 거치면서 하는게 좋다. 

방화벽이 없다면, IDC에서는 서로 침투할 수 있는 취약점이 있다. 항상 고민해야 한다.

6.  게임서버는 외부에 ip를 오픈하지 않는다.
L4(L7) 장비 또는 소프트웨어 gateway 를 proxy로 써서, 클라이언트가 direct로 게임서버에 붙지 않도록 한다. 진짜 서버는 안보이게 숨긴다.

7. 쿠키는 항상 안전하게 관리한다.
쿠키 서비스를 할 경우, 쿠키 암호와 암고리즘 또는 쿠키 암호화 알고리즘의 키는 주기적(3개월에 한번)으로 바꾸어 서비스가 튼튼하게 한다. 쿠키 정보를 바탕으로 웹과 게임서버도 통신하기 때문에 쿠키 정보가 외부에서 알지 못하게 해야 한다.
그래서 쿠키를 안전하게 하기 위해서 쿠키+세션 서비스 서버를 구축하는 것도 좋다.

8. 웹/게임 서버에서 DB 접속하는 것은 알고리즘화한다.
개발자들이 많이 취약한 것 중 하나가 db 접속하는 property는 그대로 사용한다는 점이다. 따라서 db 정보, 계정, 암호가 그대로 들어나게 쓰는 개발자가 너무 많다. property를 암호화해서 잘 사용하도록 한다.

9. 회사에서는 아무거나 프로그램을 설치해서 사용하지 않는다.
회사에서 허가된 소프트웨어만 설치하고 사용할 것. 이상한 게임이나 회사에서 쓰지 말라고 하는 것은 쓰지 말아야 한다. 네이트온 해킹 사건도 보면, 회사에서 사용하지 말아야 할 소프트웨어를 쓴 것이라 할 수 있겠다..

10. db 패스워드는 자주 변경한다.
db 패스워드는 주기적(3개월에 한번)으로 변경한다. 불편함보다 보안을 더 중요히 여기자.

11. 서버 데몬 / 라이브러리 모니터링을 잘 한다.
표준화된 서버와 데몬은 정해져 있다. 쓸데 없는 데몬이 있으면 찾아내서 원인 파악을 잘하게 한다. 백도어 데몬은 항상 무섭다.
또한 보안 취약성이 있는 데몬, 라이브러리에 대해서는 빠른 대응이 있도록, 서버의 모든 파일을 검사해서 문제가 되는 데몬, 라이브러리를 파악하고 담당자에게 메일을 보내게 해서 고칠 수 있도록 한다.
오픈 소스 거버넌스와 잘 취합되는 것이 좋다.

12. 서버 로그 모니터링은 좋다.
  access / error 로그를 자주 모니터링한다. 메시지 파일/에러 로그/액세스 로그를 매일 살펴보고 항상 긴장감을 놓치 않는다. 거기서 통찰력이 나온다.

13. 관리자의 마인드 변화
성과도 중요하지만, 보안도 중요하게 여기는 관리자의 마인드가 필요하다. 자기 직원이 잘못한게 있으면 따뜻하게 지적하고 수정하게 하면 된다. 그냥 넘어가지 않게 하고 계속 기본을 지키게 해야 한다.
좋은 지적을 하는 개발자, 운영자의 의견을 잘 듣도록 해야 한다. 자기 부서의 소관이 아니라고 한눈 팔고 있지 말자. 남의 문제를 내 문제로 여길 줄 아는 관리자의 마인드가 필요하다. 타산지석!

12. 시니컬하고 귀찮아하는 운영자보다 회사를 귀하게 여기는 직원을 볼 줄 알아야 한다.
소프트웨어 분야는 뛰어난 한 사람이 대충 일하는 천명보다 백배 귀하다. 항상 겸손하게 문제나 이슈에 대해서 깊이 고민하고 해결할 수 있는 사람을 볼 줄 알아야 한다. 다. 회사의 자원을 마치 자기가 가진 자원처럼 생각하는 사람이 가끔씩 있다. 그 사람이 회사를 성장시킬 수 있다. 사장 마인드로 회사를 보는 직원은 정말 귀하다.

13. 실패을 용인하고 정직한 사람을 귀하게 여기자.
실패를 두려워 해서 거짓말을 하는 사람이 있다. 그것은 아마도 조직문화가 그렇게 만들었을 가능성이 높다. 실패가 용인되지 않는다면 서로 일을 하려 하지 않는다. 실패를 용인하고 그럴 수 있겠다 하며 배울 수 있게 해야 한다. 자신이 실수한 부분에 대해서 책임지려 하는 모습은 아름답다. 누구나 실수를 할 수 있으며 누구나 정직할 수 있는 조직문화가 되어야 다시는 보안문제가 터지지 않도록 잘 마무리 짓고, 열심히 일할 수 있는 분위기가 있어야 한다. 외양간에서 소를 잃지 않도록 예방하는 것도 좋지만, 누가 그렇게 잘 할 수 있겠나..

Posted by '김용환'
,

발표 자료 중 내 눈에 띄인 자료들만 공유한다.


1. Apache Traffic Server



Yahoo에서 캐쉬 서버로 활용하고 있으며, 

cpu core당 n개의 worker thread,

디스크당 m개의 thread, 

여러 쓰레드( 요청을 받을때, logging, admin)용을 위한 쓰레드 (최대 10개 미만)

으로 쓰레드 모델을 가지고 있어서 성능을 높였다고 발표했다.




2. Apache Http 2.4


2.4에서 Async IO를 지원하고 성능을 높였다고 한다.

그동안 apache http 서버는 async 기능이 없어서 nginx를 많이 활용하려고 했던 분위기였으며, 이 버전이 릴리즈되면 상황이 바뀔 수도 있겠다하는 생각이 들었다.  

그 외, bandwidth를 조절, timeout을 조절, 로깅,  if 지시자,  io 버퍼 조절를 지원하고, http 서버에 Lua 언어도 지원할지 모른다고 한다.

 특이사항으로는 http 서버가 proxy서버로 쓰이기 때문에 cloud 환경에서도 쓸 수 있도록 다양한 기능을 내어 놓는다고 한다. http, https, connect, ftp, ajp, cgi, load balancing, clustering, failover 등 기존의 좋은 장점과 클라우드의 특징까지 넣을 예정이라고 한다 . (제가 봤을 때는 그냥 기존의 proxy balancer에 환경설정만 더 추가한 것 같은데.. 잘 포장하려고 한것 같긴 해요)

좀더 특징적인 것은 어드민기능(모니터링 또는 파라미터 조정)이 가능하다.


 

이자료에 가장 흥미있는 것은 nginx와의 성능 비교를 제시했다는 것이다.  특이한 설정없는 상황에서 했을때..

거의 비슷한 성능이 나온 것 같다.




나름 결론으로 아래와 같은 얘기를 썼다.

- event, polling, fork/spawn 방식은 오버헤드가 있지만, 기대치보다 좋은 성능을 가질 것이다.

- concurrency 관점에서는 apache http 2.4의 event & worker 는 nginx와 비슷한 성능이다.

- transaction speed 관점에서는 apache http 2.4의 perfork 방식이 좋다.

 
3. Tomcat 얘기


tomcat native with comet 이야기
이외, servlet 3.0과 jsf 를 설명한 문서..




4. Hadoop Profiling
Hadoop profiling에 대한 노하우 공유



5. Apache Technology
Big data 처리에 관련된 모든 Apache project를 요약했다. 생소한 incubator project도 알게됨..

좋은 (Cool) 프로젝트에 대한 정보를 다룸





6. Cassandra 1.0 릴리즈

카산드라 1.0 특징
- Compression
- Read performance : maxtimestamp (많이 좋아졌음)
- LeveledCompactionStrategy (멀티쓰레딩, 16mb optional throttling, 5mb default data file)
- CQL 1.1
- Better Hinted Handoff Tracking

jni대신 jna 를 사용함. 메모리를 heap 영역이 아닌 native heap으로 바꿔서 heap gc가 자주 발생되지 않도록 함


7. HA for Hadoop NameNode

ebay 개발자가 쓴 것으로 상당히 재미있었음.. ^^
HA에 대한 고민과 디자인에 대한 내용이 있음.  자동 HA 대신 사람이 해주는 HA 솔루션도 소개해줌
Automatic-Hot HA은 현실적이었던 것 같음






8. Jmeter

Hudson을 이용해서 모듈이나 서비스에서 성능 테스트를 진행할 수 있다. 
핵심 모듈의 경우, 이 성능지표를 계속 측정함으로서, 얼마나 성능이 저하되지 않도록 하는 것이 중요하기 때문에. 필요한 것이다.


9. Rave 

위젯 엔진처럼 웹싸이트를 구축할 수 있는 툴같다. 인큐베이터 프로젝트이지만, 기대가 된다. 



10. Phonegap/Callback

내용은 없다. 그냥 폰갭에 대한 아주 심플한 ppt이다.


11. Scaling Hadoop

아래 항목에 대해서 Hadoop Scale에 대한 좋은 내용과 best practise 가 있다.
- Sequential Bottlenecks
- Load Imbalance
- Critical Paths
- Algorithmic Overheads
- Synchronization 
- Granularity/Communication Overheads


12. Lucene 4.0

lucene이 발전하는 모습이 좋다. 









 

Posted by '김용환'
,