Your SlideShare is downloading. ×
  • Like
Nginx Testing in NAVER
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Nginx Testing in NAVER

  • 3,810 views
Published

2013-02-23, 13th JCO Conference

2013-02-23, 13th JCO Conference

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • 기술적인 내용이라 다는 이해되지 않지만, 형근이가 대단하게 보이는 효과가 확실히 느껴지네 ㅎㅎ ㅊㅋㅊㅋ
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,810
On SlideShare
0
From Embeds
0
Number of Embeds
5

Actions

Shares
Downloads
58
Comments
1
Likes
17

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 제13회 한국자바개발자 컨퍼런스네이버 메인의 NGiNX 테스팅기 송형근, 윤준호 NHN 1
  • 2. 제13회 한국자바개발자 컨퍼런스1. 네이버 메인의 NGiNX 테스트 사례! 송형근 - hyunkeun.song@nhn.com 자칭 훈남 개발자  NHN, 메인 서비스 개발  손노리, 게임 클라이언트 개발2. nGrinder 로 성능테스트 끝장내보자! 윤준호 - junoyoon@nhn.com 자칭 슈퍼 개발자  NHN, SW 테스트 / 검증 자동화  nGrinder 프로젝트 Lead 2
  • 3. 제13회 한국자바개발자 컨퍼런스네이버 사용하시나요? 개발자라면 구글이지! 구글 티셔츠 정도 걸쳐줘야 간지지 3
  • 4. 제13회 한국자바개발자 컨퍼런스일 PV 2억 이상 4
  • 5. 제13회 한국자바개발자 컨퍼런스겉모습은 참 화려하죠?내부의 모습은 어떨까요? 5
  • 6. 제13회 한국자바개발자 컨퍼런스노후 된 엔진 ...그리고? APACHE 6
  • 7. 제13회 한국자바개발자 컨퍼런스때는 바야흐로, 2009년 7월…좀비들의 빈집 털이 습격… DDoS Attack 7
  • 8. 제13회 한국자바개발자 컨퍼런스 8
  • 9. 제13회 한국자바개발자 컨퍼런스 웹 서버의 근본적인 취약점은 어쩔? 웹 서버를 바꿔보자…높으신 분 9
  • 10. 제13회 한국자바개발자 컨퍼런스짜잔~ 최신 엔진으로 튜닝!! 10
  • 11. 제13회 한국자바개발자 컨퍼런스 에이, 그냥 엔진만 바꿔 뀌면 되는 거 아냐? 누굴 그냥동네 구멍가게서비스로 보나.. 11
  • 12. 제13회 한국자바개발자 컨퍼런스24시간 365일 무정지 서비스 서버 점검 시간 따윈 없음. 장애 발생하면 절대 절대 안 된다! 아주 디테일하게 검증이 필요한 시스템 12
  • 13. 제13회 한국자바개발자 컨퍼런스 진행 과정 모듈간 호환X 검증작업 전체 NGINX 용 일부 서버도입결정 (기능, 성능 서비스 모듈 개발 적용 테스트) 적용 프로젝트 팀에 합류 13
  • 14. 제13회 한국자바개발자 컨퍼런스네이버 메인 페이지는 이렇게 만들어진다 정적 컨텐츠 + 동적 컨텐츠 14
  • 15. 제13회 한국자바개발자 컨퍼런스웹서버 모듈을 이용한 동적 컨텐츠 생성 컨텐츠 데이터 index.html Web Server 사용자 데이터 웹 서버 모듈 15
  • 16. 제13회 한국자바개발자 컨퍼런스 웹서버 모듈의 다른 기능은?- 로그인 인증 처리 캐쉬- 컨텐츠 캐싱 랜덤- 백엔드 시스템 연동 연동- 쿠키, 헤더 처리- 랜덤 노출 처리 웹서버- ... 웹 서버 모듈은 네이버 메인의 핵심!!
  • 17. 제13회 한국자바개발자 컨퍼런스 웹 서버 모듈• 웹 서버에서 제공하지 않는, 특정 기능 추가 httpd.conf LoadModule proxy_module mod_proxy.so Q : 보통은 WAS 를 많이 사용하지 않나? A : WAS 로도, 동일 기능 구현 가능 (단지, 구성 방식의 차이일 뿐..) 고성능? WAS(X), 웹 서버 모듈(O) 17
  • 18. 제13회 한국자바개발자 컨퍼런스 웹 서버 검증 대상?• 기본적으로 NGINX 웹서버 자체의 기능 신뢰.• 네이버 메인에서는, 웹 서버 모듈(15개)을 개발하여 사용• 검증 대상은 우리가 직접 만든 모듈의 안정성 NGiNX 모듈, 주요 검증 대상 18
  • 19. 제13회 한국자바개발자 컨퍼런스기존에는 어떻게 테스트를 했을까? 결과 코드 200? 19
  • 20. 제13회 한국자바개발자 컨퍼런스 기존 테스트 방법? 내부 리소스 활용 모듈 확장모듈 WGET 정상적인 응답만을 제공클라이언트 웹 서버 20
  • 21. 제13회 한국자바개발자 컨퍼런스 기존 테스트 방법? 외부 리소스 활용 모듈 정상응답만을 제공 확장모듈 WGET TCP, UDP, HTTP클라이언트 웹 서버 백엔드 서버 21
  • 22. 제13회 한국자바개발자 컨퍼런스 [이슈1] 내부 시스템 예외 상황• Segmentation Fault ?• 잘못된 메모리 주소 접근으로 인한 오류 : 비정상 종료  NULL 로 설정된 영역을 접근  할당 받은 메모리 공간을 넘어서는 영역에 접근했을 경우 22
  • 23. 제13회 한국자바개발자 컨퍼런스발생 가능한 케이스는? 파라미터, 리소스 오류 2012-13월의 13 계좌 조회? 월?? 데이터 파일 요청 23
  • 24. 제13회 한국자바개발자 컨퍼런스 NGiNX 모듈 테스트 Flow1. 최신 NGiNX 모듈 소스 빌드 수작업 NO !!!!2. NGiNX 서버 실행3. HTTP 호출(WGET 등)4. 결과 검증 근데 NGiNX 는 C 언어 아닌가요? 갑자기 JUnit은? 어짜피 HTTP (윈도우에서 테스트할래, 리눅스에서 할래?) 24
  • 25. 제13회 한국자바개발자 컨퍼런스 테스트 코드 예제public void 정상_응답_테스트(){ // Client 측 요청 (HTTP) Map<String,Object> headers = new HashMap(); headers.put( “cookie”, “…” ); page = new WebClient().getPage("http://localhost/deposit?mon=13", headers ); // 검증단계 : 기대했던 결과값이 들어왔는지 검증 assertThat( page.getStatusCode(), is(200) ); assertThat( page.getContent().containts(expectedContent ), is(true));} 25
  • 26. 제13회 한국자바개발자 컨퍼런스 [이슈2] 백엔드 시스템 예외 상황백엔드 시스템이 다운 되어도,우리는 정상적으로 서비스 가능해?테스트 해볼 수 있어? 높으신분 왈 26
  • 27. 제13회 한국자바개발자 컨퍼런스 백엔드 서비스가 정상적으로 동작하지 않는 상황?천재 지변 시스템 오류 해킹 27
  • 28. 제13회 한국자바개발자 컨퍼런스 발생 가능한 케이스는? 네트워크 관련 오류요청 : 계좌 이체 내용 조회, 기대 응답 : { 날짜, 금액, 계좌번호, 잔액 } 1월 계좌이체 조회 계좌조회 잘못된 데이터 궁금하면 500원 시스템 1월 계좌이체 조회 응답 없음 1월 계좌이체 조회 전체 응답 01/23, 500원 받지 못함 28
  • 29. 제13회 한국자바개발자 컨퍼런스그럼 어떻게 테스트 하지? 29
  • 30. 제13회 한국자바개발자 컨퍼런스 이번 테스트는요, 0.1 초안에 강제로 TCP 연결을 끊어주세요-_- 뭥미.. (멘붕) 백엔드 시스템 담당자 30
  • 31. 제13회 한국자바개발자 컨퍼런스랜선을 뽑아야 하나? 아님 두꺼비집이라도 내려? 31
  • 32. 제13회 한국자바개발자 컨퍼런스 백엔드 서비스의 테스트 환경 구성 우리 시스템은 절대로 다운 시킬 수 없습니다. 시키기만 해봐?!! 테스트를 위한 NGiNX 모듈 수정은 못합니다. 환경적으로 제어할 수 있는 방법 고민? 결론은 MOCKING !!Mocking : mock objects are simulated objects that mimic the behavior of real objects in controlledways, wikipedia 32
  • 33. 제13회 한국자바개발자 컨퍼런스 백엔드 시스템 Mocking 테스트 환경 구성 Localhost 1 2 X NGiNX 클라이언트 백엔드 시스템Request 검증Response 생성 Redirectio n Mock 서비스 Redirection, Mock : 외부의 환경 변화 없이, 원하는 테스트 가능 33
  • 34. 제13회 한국자바개발자 컨퍼런스 Redirection1. 도메인으로 접속 시 : hosts 설정 외부서비스 Host IP 도메인주소 서비스 #1 127.0.0.1 www.xxx.com2. IP 로 접속 시 : iptables 설정 (리눅스 환경)외부서비스 iptables 를 사용한 IP 포워딩 이용 iptables -t nat -A OUTPUT -p tcp -d 서버주소 -j DNAT --to-destination 서비스 #2 127.0.0.1:10000 34
  • 35. 제13회 한국자바개발자 컨퍼런스백엔드 시스템 Mocking 테스트 FlowHTTP 요청 Redirection (N) 클라이언트(C) Mock 서비스(M) 35
  • 36. 제13회 한국자바개발자 컨퍼런스 정상 테스트 코드 예제 (HTTP)public void before(){ createServer( HTTP_PROTOCOL, PORT ); startServer(); // Server 측 결과 생성 server.setHandler( new AbstractHandler(){ public void handle( HttpServletRequest req, HttpServletResponse resp ){ ... // NGiNX Request 메시지 검증 + Response 메시지 전송 });}public void 정상_응답_테스트(){ N page = new WebClient().getPage("http://localhost/” );} C M 36
  • 37. 제13회 한국자바개발자 컨퍼런스 비정상 예외 테스트 코드 예제 (HTTP)public void before() throws Exception { 1 createServer( HTTP_PROTOCOL, PORT ); startServer(); 2 // Server 측 결과 생성 server.setHandler( new AbstractHandler(){ public void handle( HttpServletRequest req, HttpServletResponse resp ){ resp.write( “잘못된 데이터지롱” ); stopServer(); } });} 37
  • 38. 제13회 한국자바개발자 컨퍼런스 테스트 코드 예제 (TCP, UDP)// TCP, IoAcceptor 객체 이용server.setHandler(new IoHandlerAdapter() {public void processStreamIo(IoSession session, InputStream in, OutputStream out) { out.print ( responseMsg ); }});// UDPserver.setHandler(new StreamIoHandler() { public void messageReceived(IoSession ssn, Object msg){ ssn.write( … ); }});
  • 39. 제13회 한국자바개발자 컨퍼런스기존 방법으로는 절대 검출 못했을 23개 오류 발견 개당 1억 : 23억 절감 39
  • 40. 제13회 한국자바개발자 컨퍼런스백엔드 시스템 예외상황 테스트 Redirection + Mocking 40
  • 41. 제13회 한국자바개발자 컨퍼런스 NGiNX 적용 이후NGiNX 고가용성 확보 : TPS 약 3배 증가서버 대수 : 1/3 수준으로 감소NGiNX 장애 : 0 건 41
  • 42. 제13회 한국자바개발자 컨퍼런스2. nGrinder 로 성능테스트 끝장내보자! 42
  • 43. 제13회 한국자바개발자 컨퍼런스 성능 테스트? 스트레스 테스트 로드 테스트 로드 상황에서 로드 상황에서크래시 등의 문제점 확인 성능 특성 파악 43
  • 44. 제13회 한국자바개발자 컨퍼런스 로드 테스트 초당 2500처리량 2000 1500 Apache 1000 Nginx Nginx-caching 500 0 1 2 5 10 50 100 200 동시사용자 # (Think Time 없을 때) 44
  • 45. 제13회 한국자바개발자 컨퍼런스스트레스 테스트 부적절한 커넥션 풀? 불충분한 쓰레드 풀? 메모리 릭? 리소스 릭? 비효율적인 코드? 45
  • 46. 제13회 한국자바개발자 컨퍼런스 NHN에서는 어떻게 로드를 주나요? ApacheBench? LoadRunner?NGiNX 같은 고성능 서버에는 부적절… 46
  • 47. 제13회 한국자바개발자 컨퍼런스 분산 테스트? 제어 부하 스크 립트컨트롤러 테스트 대상 서버 로드 생성기무제한 로드 부여 가능 / NGiNX 테스트에 적합 47
  • 48. 제13회 한국자바개발자 컨퍼런스그냥 하나 만들고 만다. 48
  • 49. 제13회 한국자바개발자 컨퍼런스nGrinder since 2010 49
  • 50. 제13회 한국자바개발자 컨퍼런스데모 > 테스트 흐름 스크립트 작성 테스트 설정 (vuser 개수등) 상세 결과 보기 결과 리포트 테스트 진행 50
  • 51. 제13회 한국자바개발자 컨퍼런스언제든 원하는 시점에 테스트 수행 테스트 준비시간 0분 네트워크 과점유 자동 검출 월간 2000건 성능 테스트 실행 51
  • 52. 제13회 한국자바개발자 컨퍼런스http://www.nhnopensource.org/ngrinder/
  • 53. 제13회 한국자바개발자 컨퍼런스Thank You. 53