1 / 54

고성능 웹사이트 구축을 위한 프로젝트 기획 및 튜닝기법

고성능 웹사이트 구축을 위한 프로젝트 기획 및 튜닝기법. 라이코스 정 준혁 시스템 프로그래머. 오늘 세미나는 무엇에 대해서 ?. 어떻게 하면 웹 서비스를 더 안정되고 빠르게 할 것인가 ?. 웹 사이트 튜닝 (Web Site Tuning)!. 각자 이미 가지고 있는 것으로 제일 좋다고 여겨지는 서비스 상태를 만들어 봅시다. 시작하기 전에 …. 간단한 내용의 질문은 ?. 설명 도중이라도 자유롭게 질문해 주십시오. 조금 복잡한 질문은 ?. 쉬는 시간을 이용해 질문해주시면 좋겠습니다.

lynch
Download Presentation

고성능 웹사이트 구축을 위한 프로젝트 기획 및 튜닝기법

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 고성능 웹사이트 구축을 위한 프로젝트 기획 및 튜닝기법 라이코스정 준혁 시스템 프로그래머

  2. 오늘 세미나는 무엇에 대해서? 어떻게 하면 웹 서비스를 더 안정되고 빠르게 할 것인가? 웹 사이트 튜닝(Web Site Tuning)! 각자 이미 가지고 있는 것으로 제일 좋다고 여겨지는 서비스 상태를 만들어 봅시다

  3. 시작하기 전에 … 간단한 내용의 질문은? 설명 도중이라도 자유롭게 질문해 주십시오 조금 복잡한 질문은? 쉬는 시간을 이용해 질문해주시면 좋겠습니다 매우 복잡하고 제가 즉시 답을 드릴 수 없는 질문은? 연락처를 알려주시거나 제 메일(sleepyrea@chollian.net)로 … 열심히 답을 찾아서 회신 드리겠습니다!

  4. 세미나 로드맵(Road Map) 웹 서비스 구조의 이해와 프로젝트 진행 튜닝 방향 잡기 스크립트 튜닝하기 SQL 쿼리와 응용프로그램 튜닝하기

  5. 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스의 구조 웹 서비스가 제작되는 과정 서비스 담당자에게 확인해야하는 사항

  6. 사용자의 브라우저 인터넷 서비스 회사 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스의 구조 사용자 – 인터넷 – 인터넷 서비스 회사

  7. 웹 서버들 인터넷 스토리지 네트워크 장비 스테이지 제작 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스의 구조 인터넷 서비스 회사 내부

  8. 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스의 구조 구성상의 포인트 네트워크 장비(Network Setting) 라우터(Router), 파이어월(Firewall), 스위치(Switch) 설정(Configuration) 주의 웹 서버(Web Servers) S/W, H/W 장애 발생 가능성 염두 1대 이상 구성(Dual Setting)

  9. 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스의 구조 구성상의 포인트 스테이지 서버(Stage Server) 서비스 오픈(Open) 전  라이브(Live) 환경과 유사한 곳에서 최종 테스트 스토리지(Storage) DB, File 서버 백업 정책 & 충분한 용량

  10. 기획자, 마케터, CEO 서비스 목적 수립서비스의 시장성 조사서비스 제공의 당위성 수립서비스 정책 수립 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스가 제작되는 과정 단계 I – 서비스 기획

  11. 기획자, 시스템 관리자( & DBA), 개발자, 디자이너 시스템 규모 예측시스템 구축 및 개발 일정 산출(M/M  의사소통 문제 고려)서비스 시스템 구축서비스 부문별 개발 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스가 제작되는 과정 단계 II – 프로젝트 진행

  12. 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스가 제작되는 과정 프로젝트 일정(M/M) 산출방법 1년 이하  x 4 1년 ~ 3년  x 3 3년 ~ 5년  x 2 5년 이상  x 1.5 의사소통의 문제 2 x 2 = 4 x 1 ?  No!

  13. 기획자, 시스템 관리자( & DBA), 개발자, 디자이너, 사용자 테스트 환경 구축단위 테스트  디버깅(Debugging)  총괄 테스트서비스 오픈사용자 의견 수렴 및 반영 웹 서비스 구조의 이해와 프로젝트 진행 웹 서비스가 제작되는 과정 단계 III – 테스트 & 오픈 & 피드백(FeedBack)

  14. 디자이너 시스템 관리자 기획자 개발자 DBA 웹 서비스 구조의 이해와 프로젝트 진행 서비스 담당자에게 확인해야하는 사항 기획자 & 시스템 관리자 & DBA & 디자이너 & 개발자

  15. 안정된 장비 & 충분한 용량? 시스템의 논리적 구성 머신의 안정성, 충분한 네트워크 & 저장공간, 장애 대처(Daul Setting) 다른 서비스에 영향을 미쳐서 같이 마비될 위험이 없는 구성인지 설정 이상 무? 웹 서버 옵션, OS 라이센스 리포팅(Reporting) 각종 사용자 로그, 에러 로그 웹 서비스 구조의 이해와 프로젝트 진행 서비스 담당자에게 확인해야하는 사항 시스템 관리자에게

  16. 적절한 스키마(Schema) & 쿼리(Query or DML)? DB가 불필요하게 바빠지는지, 과다 데이터 반환 가능성 DB 설정 접근 권한, 백업 체계(충분한 용량) 웹 서비스 구조의 이해와 프로젝트 진행 서비스 담당자에게 확인해야하는 사항 DBA에게

  17. 적절한 페이지 디자인 페이지용량(주요 포털 메인 - 60K 미만), 조각내기(프레임, 이미지) 이미지 사이징 이미지 파일(BMP  JPG GIF), 플레쉬, ActiveX 웹 서비스 구조의 이해와 프로젝트 진행 서비스 담당자에게 확인해야하는 사항 디자이너에게

  18. 논리적 모순? 병목(Bottleneck), 데드락(DeadLock) 과도한 자원 사용? CPU, RAM, 각종 I/O(HDD, Network) 로깅(Logging) 웹 스크립트 & 응용프로그램 작동상 로그 웹 서비스 구조의 이해와 프로젝트 진행 서비스 담당자에게 확인해야하는 사항 개발자에게

  19. 튜닝 방향 잡기 목표 - 웹 사이트가 내기를 원하는 퍼포먼스 퍼포먼스 진단과 튜닝 방향 잡기

  20. 튜닝 방향 잡기 목표 - 웹 사이트가 내기를 원하는 퍼포먼스 3초 반드시 3초가 아니라도 10초를 넘기면 곤란하겠지요?

  21. 튜닝 방향 잡기 목표 - 웹 사이트가 내기를 원하는 퍼포먼스 ‘튜닝(퍼포먼스 향상 작업)’의 범위 좁히기 튜닝한다 좁히기1: 일정한 속도의 네트워크 속도를 빠르게 만든다 좁히기2: 같은 사양의 시스템에서 속도를 빠르게 만들려면 할 일을 적게 만든다 좁히기3: 결국 컴퓨터에서 일어나는 할 일이라면  CPU & RAM & I/O 사용을 줄인다

  22. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 진단의 방법 눈에 띄는 에러 에러 메시지 현저한 장애(데이터 저장 공간 풀(Full), 네트워크 이상) 퍼포먼스 모니터링(Performance Mornitoring) 시스템 자원(System Resource) 사용 상황 점검

  23. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 모니터링 사용 툴(Tool) MS Performance Monitor (시작  프로그램  관리도구  성능)

  24. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터(Performance Counter) % Processe Time20% 이하, 80% 이상 CPU 사용율 Available Bytes전체 20% 이하, 점차 줄어듦 메모리 사용량 Current Anonymous Users평소와 다르게 갑작스러운 증가 동시 접속자 ASP Request Queued3% 이상 ASP 누적 Current ISAPI Extension Requests3% 이상 웹 서버 내부 모듈

  25. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터 – CPU 사용율 평균 63.903 안정된 상태

  26. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터 – 메모리 사용량 꾸준히 비슷한 수치 안정된 상태

  27. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터 – 동시 접속자 평소 피크타임의 수치와 비슷 안정된 상태

  28. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터 – ASP 누적 평균 0 (사용자: 약771명) 안정된 상태

  29. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 퍼포먼스 카운터 – 웹 서버 내부 모듈 평균 4.680 (사용자: 약771명) 안정된 상태

  30. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 대책 세우기 – 우선순위 부여! 20% 이하, 80% 이상 프로세서 장착, 과도한 연산 발생 로직 수정 CPU 사용율 高 전체 20% 이하, 점차 줄어듦 메모리 장착, 메모리 릭(Memory Leak) 찾기 메모리 사용량 高 평소와 다르게 갑작스러운 증가 서버 증설, 이벤트성인가 점진적인 것인가? 동시 접속자 高 3% 이상 ASP 내부 로직 확인 ASP 누적 高 3% 이상 모듈 작동 효율성 확인 웹 서버 내부모듈 高

  31. 튜닝 방향 잡기 퍼포먼스 진단과 튜닝 방향 잡기 사이트 오픈 전 가상 테스트 사용 툴(Tool) MS WAS Tool (http://webtool.rte.microsoft.com/)

  32. 스크립트 튜닝하기 웹 서버가 작동하는 방식 웹 스크립트(ASP) 튜닝 팁

  33. 스크립트 튜닝하기 웹 서버가 작동하는 방식 리퀘스트(Request)가 리스판스(Response)가 되기까지 웹 서버 포트 80 리퀘스트 x n inetinfo.exe DB서버 dllhost.exe Script 1 (asp) 리스판스 x n Thread 1 파일서버 Script n (asp) Thread n

  34. 스크립트 튜닝하기 웹 서버가 작동하는 방식 웹 스크립트 튜닝 포인트 기본 쓰레드(Thread) 갯수: 20개 그보다 많으면? 누적(Queuing)된다 쓰레드(Thread) 실행 시간이 짧게 ASP 스크립트 로직이 가급적 짧아지도록! 말은 쉽지만…

  35. 스크립트 튜닝하기 웹 스크립트(ASP) 튜닝 팁 Option Explicit 효과 변수 분석 필요 X 구문 오류(Syntax Error) 방지 <%Option Explicit Dim ComplexVariable, ComplexVariable2 ComplexVariable = “1” ComplexVariable2 = ComplexVarialbe + 3 …%>

  36. 스크립트 튜닝하기 웹 스크립트(ASP) 튜닝 팁 가급적 Session 사용은 피하세요 이유 & 효과 알 수 없는 버그 발생 (특히 DB 커넥션 처리시) Global 영역인 Session 할당 없음 <%@EnableSessionState=False%><% Option Explicit Dim ComplexVariable, ComplexVariable2 ComplexVariable = “1” …%>

  37. 스크립트 튜닝하기 웹 스크립트(ASP) 튜닝 팁 오브젝트(Object) 해제는 빨리 그리고 꼭 오브젝트가 프로세스에 설정되는 과정  그냥 되는 게 아님 웹 서버 프로세스(IIS) 컴포넌트(DLL) 오브젝트의 속성 및 실행코드로 구성됨 DLL 코드 프로세스 내 설정됨 설정(LoadLibrary) ASP 스크립트 쓰레드 오브젝트

  38. 스크립트 튜닝하기 웹 스크립트(ASP) 튜닝 팁 오브젝트(Object) 해제는 빨리 그리고 꼭 효과 메모리릭 방지 & 메모리 사용 부담 감소 … Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.Open “…” Set RS = Server.CreateObject(“ADODB.Recordset”) ‘가급적 Create – Nothing 간격 짧게 구성! RS.Close ‘의외로 Close 잊어버리는 경우 많음Set RS = Nothing ‘해주는 것이 좋음Conn.Close Set Conn = Nothing…

  39. 스크립트 튜닝하기 웹 스크립트(ASP) 튜닝 팁 ADODB를 사용할 때의 팁 커서(Cursor) 타입 & 커서 위치 & 락(Lock) 타입 주의 시스템 구성(웹 서버 – DB 서버) & 서비스 내용을 고려하여 선택 … Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.Open “…” Set RS = Server.CreateObject(“ADODB.Recordset”) RS.CursorLocation = 3 ‘클라이언트쪽 커서(adUseClient) ‘0: 앞으로 진행하는 커서(adOpenForwardOnly) ‘1: 읽기 전용 락(adLockReadOnly) RS.Open “Select …”, Conn, 0, 1 …

  40. SQL 쿼리와 응용프로그램 튜닝하기 DB 서버가 작동하는 방식 SQL 쿼리 튜닝 팁 응용프로그램 튜닝 팁

  41. SQL 쿼리와 응용프로그램 튜닝하기DB 서버가 작동하는 방식 선입관 버리기 DB 서버도 하나의 응용프로그램이다! 아무렇게나 쿼리를 보내면 알아서 잘 처리하는 게 아니다역시 CPU & RAM & I/O 등을 효율적으로 사용할 방법을 찾는다

  42. SQL 쿼리와 응용프로그램 튜닝하기DB 서버가 작동하는 방식 쿼리 처리 과정 쿼리 구성 및 전송(네트워크) 분석(Parsing), 최적화(Optimization)  실행계획 실행계획(실행코드) 수행(루프, 락, I/O, 일반연산) 데이터 반환

  43. 1 2 3 4 5 6 SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 쿼리 튜닝 팁 SELECT TOP 10 Field1, Field2, Field3, AVG(Field4) FROM TableA WHERE Field3 > 1000 GROUP BY Field3 HAVING AVG(Field4) > 500 ORDER BY Field1 DESC SELECT TOP 10 Field1, Field2, Field3, AVG(Field4) FROM TableA GROUP BY Field3 HAVING Field3 > 1000 AND AVG(Field4) > 500 ORDER BY Field1 DESC

  44. SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 쿼리 튜닝 팁 SELECT * FROM TableA … SELECT Field1, Field2, FROM TableA … Loop 속의 SELECT Field1 FROM TableA Where number = n (number: 1~n) SELECT Field1 FROM TableA WHERE number > 0 AND number < (n + 1) SELECT Field1 FROM TableA WHERE …값(newnum)을 프로그램에서 1 증가UPDATE TableA SET Field1 = newnum WHERE … UPDATE TableA SET Field1 = Field1 + 1 WHERE …

  45. SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 쿼리 튜닝 팁 NoLock 힌트 – SELECT만 하는 경우 SELECT Field1 FROM TableA (NOLOCK) … TOP 구문 사용 – 필요한 갯수만큼만 반환 SELECT TOP 10 Field1 FROM TableA … 기본키(PrimaryKey) & Row 갯수 많음 & 총갯수 필요  Count 함수 대신 SELECT rows FROM sysindexes WHERE id = OBJECT_ID(‘TableA’) AND indid < 2

  46. SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 인덱스(Index) 인덱스를 타면 왜 속도가 향상될까? 책에 있는 인덱스, 즉 찾아보기를 이용하는 것과 유사 정렬되어있는 지표를 이용하여 데이터 스캔(Scan) 범위 찾기

  47. A~Z 루트 중간단계 A~H I~Q ‘Like’ Pointer R~Z A~… … … ‘Like’ … …~Z 데이터 SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 클러스터드 인덱스(Clusterd Index) 실제 데이터(사실은 Offset 주소)가 정렬되어있는 인덱스

  48. 루트 A~Z 중간 단계 A~H I~Q R~Z A~… … ‘Like’ Pointer … …~Z 데이터 … … … … … ‘Like’ SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 논클러스터드 인덱스(Non-Clusterd Index) 포인트 정보만 정렬되어있는 인덱스

  49. SQL 쿼리와 응용프로그램 튜닝하기SQL 쿼리 튜닝 팁 인덱스(Index) 인덱스를 잡을 때에는 SELECT FieldA, FieldB, FieldC FROM TableA FieldA, FieldB, FieldC 필요한 필드를 모두 포함한 인덱스 구성

  50. SQL 쿼리와 응용프로그램 튜닝하기 응용프로그램 튜닝 팁 변수 크기 확인 로직 넣기 단편적인 퍼포먼스에는 좋지 않지만… …#define FIXED_VALUE “0123456789” …char ValChar[VALUE_LEN];if (sizeof (ValChar) <= strlen(FIXED_VALUE)){ printf(“Fixed string is too long.\n”); return;}…

More Related