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