Chimy's Program
정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 개선 본문
정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 개선
소스 코드 최적화의 이해
- 소스 코드 최적화는 읽기 쉽고 변경 및 추가가 쉬운 클린 코드 작성
- 소스 코드 품질을 위해 기본적으로 지킬 원칙과 기준 정의
① 나쁜 코드(Bad Code)
(1) 개요
- 다른 개발자가 로직(Logic)을 이해하기 어렵게 작성된 코드
- 처리 로직의 제어가 정제되지 않고 서로 얽혀 있는 스파게티 코드, 변수나 메소드에 대한 이름 정의를 알 수 없는 코드, 동일한 처리 로직이 중복되게 작성된 코드
(2) 문제점
- 스파게티 코드의 경우 잦은 오류가 발생할 가능성
- 소스 코드 이해가 안 되어 계속 덧붙이기할 경우 코드 복잡도 증가
② 클린 코드(Clean Code)
(1) 개요
- 잘 작성되어 가독성이 높고 단순하며 의존성을 줄이고 중복을 최소화하여 깔끔하게 잘 정리된 코드
(2) 효과
- 중복 코드 제거로 애플리케이션의 설계 개선
- 가독성이 높으므로 애플리케이션의 기능에 대해 쉽게 이해 가능
- 버그 찾기가 쉬움
- 프로그래밍 속도가 빠름
소스 코드 품질 분석 도구의 이해
① 정적 분석 도구
- 작성된 소스 코드를 실행시키지 않고 코드 자체만으로 코딩 표준 준수 여부, 코딩 스타일 적정 여부, 잔존 결함 발견 여부를 확인하는 코드 분석 도구
(1) 정적 분석 도구의 유형
- 사전에 결함을 발견하고 예방하는 도구
- 코딩 표준 준수 여부를 분석하는 도구
- 소스 코드의 복잡도를 계산하는 도구
② 동적 분석 도구
- 애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고 발생한 스레드의 결함 등을 분석하기 위한 도구
수행
① 애플리케이션 성능 개선 방안 검토
- 성능 테스트 결과를 분석하고 성능 저하 요인별 성능 개선 방안 계획
(1) 성능 저하 요인별 성능 개선 방안 검토
(가) DB 연결 및 쿼리 실행 단계의 성능 개선 방안 검토
- DB Lock, 불필요한 DB Fetch, 네트워크 연결 오류 등에 대해 성능 개선 방안 검토
(나) 메모리 누수, 아키텍처 조정, 호출 순서 변경, 동기화 등 내부 로직 변경으로 인한 성능 개선 방안 검토
(2) 애플리케이션 성능 개선 계획서 작성
(가) 성능 개선 계획서의 필수 항목 결정
- 성능 개선 개요, 성능 개선 수행 전략, 성능 개선 수행 일정 및 절차, 성능 개선 수행 방안에 대해 설정
(나) 선정된 항목을 토대로 성능 개선 계획서 작성
② 코드 최적화 기법을 통한 성능 개선 방안 작성
- 나쁜 코드 형식으로 작성된 소스 코드를 클린 코드로 수정하여 성능을 개선할 수 있는 다양한 방안에 대해 검토하고 정리
(1) 클린 코드를 작성하기 위한 원칙에 대해 파악
- 클린 코드의 작성 원칙에 대해 파악하고 원칙에 대해 정의
- 가독성 : 누구든지 읽기 쉽게 코드를 작성
- 단순성 : 소스 코드는 복잡하지 않고 간단하게 작성
- 의존성 : 다른 모듈에 미치는 영향을 최소화하도록 작성
- 중복성 : 중복을 최소화할 수 있는 코드 작성
- 추상화 : 상위 클래스/메소드/함수를 통해 애플리케이션의 특성을 간략하게 나타내고 상세 내용은 하위 클래스/메소드/함수에서 구현
※ 클린 코드 작성 원칙
① 가독성
- 이해하기 쉬운 용어 사용
- 코드 작성 시 들여쓰기 기능 사용
② 단순성
- 한 번에 한 가지 처리만 수행
- 클래스/메소드/함수를 최소 단위로 분리
③ 의존성
- 영향도 최소화
- 코드의 변경이 다른 부분에 영향이 없게 작성
④ 중복성
- 중복된 코드 제거
- 공통된 코드 사용
⑤ 추상화
- 클래스/메소드/함수에 대해 동일한 수준의 추상화
- 상세 내용은 하위 클래스/메소드/함수에서 구현
(2) 소스 코드 최적화 기법의 유형에 대해 파악
- 클래스/메소드의 분할, 배치, 느슨한 결합(Loosely coupled), 다형성, 코딩 작성 표준 준수, 좋은 이름 사용, 적절한 주석문 사용 등에 대해 파악하고 정리
(가) 클래스 분할 배치 기법 파악
- 클래스는 하나의 역할, 책임만 수행할 수 있도록 응집도를 높이고 크기를 작게 작성
(나) 느슨한 결합(Loosely Coupled) 기법 파악
- 클래스의 자료 구조, 메소드를 추상화할 수 있는 인터페이스 클래스를 이용하여 클래스 간의 의존성 최소화
(다) 코딩 형식 기법을 파악
- 줄바꿈으로 개념을 구분
- 종속(개념적 유사성 높음) 함수 사용
- 호출하는 함수를 먼저 배치하고 호출되는 함수는 나중에 배치
- 변수 선언 위치를 지역 변수는 각 함수 맨 처음에 선언할 때 사용
(라) 좋은 이름 사용 방법 파악
- 기억하기 좋은 이름, 발음이 쉬운 용어, 접두어 사용 등 기본적인 명명 규칙(Naming Rule)을 정의하고 정의된 이름 사용
(마) 적절한 주석문 사용 방법 파악
- 소스 코드 작업 시 앞으로 해야 할 일을 기록하거나 소스상의 중요한 부분을 강조할 때 사용
(3) 소스 코드 최적화 기법을 통해 애플리케이션의 성능 개선
- 애플리케이션 개발 프레임워크의 코딩 표준을 설정하고 인터페이스 클래스를 이용하여 느슨한 결합(Loosely coupled) 코드 구현
- 통합 개발 프레임워크 Eclipse의 JAVA Code Style의 Formatter 설정
- 인터페이스를 통해 추상화된 자료 구조를 구현하여 의존성 최소화
③ 아키텍처 조정을 통한 성능 개선 방안 작성
- 소프트웨어 아키텍처 기법 중 사용자 화면 계층(User Interface Layer)의 Spring MVC의 구조 및 각 컴포넌트에 대해 파악하고 아키텍처 기법인 생성과 사용의 분리 작업을 통해 애플리케이션의 성능 개선
(1) Spring MVC(Model View Controller)의 구조와 각 컴포넌트의 역할에 대해 조사하고 정리
(가) Spring MVC(Model View Controller)의 구조 및 동작 순서에 대해 정리
(나) Spring MVC의 각 컴포넌트에 대해 정리
- DispatcherServlet(디스패처 서블릿) : Spring MVC 프레임워크의 Front Controller, 웹 요청과 응답의 수명주기(Life Cycle)를 주관하는 컴포넌트
- HandlerMapping(핸들러매핑) : 웹 요청 시 해당 URL에 매핑되는 컨트롤러를 검색, 결정하는 컴포넌트
- Controller(컨트롤러) : 비즈니스 로직을 수행하고 결과를 ModelAndView에 반영하는 컴포넌트
- ModelAndView : 수행 결과와 반영하는 모델 데이터 객체, 이동할 페이지 정보 및 뷰로 이루어짐
- View Resolver(뷰 리졸버) : 결과를 표시할 어떤 뷰를 선택할지 결정
- View : 결과 데이터인 모델 객체 표현(Display)
(2) 아키텍처 조정을 통한 성능 개선 방안 수행
- 객체의 생성과 사용을 분리함으로써 소프트웨어의 의존성을 최소화하기 위하여 팩토리 메소드(Factory Method) 패턴을 이용하여 성능 개선 방안 수행
④ 프로그램 호출 순서 조정을 통한 성능 개선 방안 작성
- 서로 연관된 내용은 세로로 가깝게 작성함으로써 밀집도를 높이고 유사성이 높은 함수나 코드끼리 가깝게 배치
- 호출하는 함수를 먼저 작성하고 호출되는 함수는 나중에 배치
(1) 프로그램 호출 순서를 조정하여 성능 개선 방안 수행
- 호출하는 함수를 먼저 코딩하고 호출되는 함수는 나중에 배치하여 애플리케이션의 성능 개선
⑤ 소스 코드 품질 분석 도구를 활용하여 애플리케이션 성능 개선
(1) 메모리 사용 최소화를 통해 성능 개선
(가) String 클래스를 StringBuffer 또는 StringBuilder 클래스로 수정하여 코딩
- String 클래스는 연산 시마다 new 객체를 생성하여 Heap 메모리 사용량이 증가함에 따라 속도 저하의 가능성 존재
- StringBuffer 또는 StringBuilder 클래스가 기존 객체의 크기를 증가시키면서 이를 처리
(나) 루프 내 불필요한 메소드의 호출이 반복되지 않도록 코딩
- 루프 내에서 메소드(함수)의 호출이 반복되는 코드를 루프 진입 전에 호출하도록 소스 코드를 수정하여 성능 개선
(2) 입출력 발생 최소화를 통하여 성능 개선
- 문자 입력 스트림 또는 파일 정보를 읽어올 때 버퍼(Buffer)를 사용하거나 BufferedReader를 사용하여 입출력 발생 최소화를 통해 애플리케이션 성능 개선
(3) System.out.println()을 사용하지 않음으로써 성능 개선
- 파일, 콘솔에 로그를 남기면 애플리케이션 대기 시간 발생
- 이에 대응하여 Log4j 로거를 사용함으로써 성능 개선
⑥ 애플리케이션 성능 현황 관리
(1) 성능 현황판(Q-Board) 작성
(가) 성능 테스트 수행 단계 기록
- 성능 테스트 계획, 성능 테스트 수행 단계, 성능 개선 단계로 나누어 기록
(나) 업무 기능별로 할 일, 진행 중, 완료 항목 준비
- 수행 단계의 업무 기능별로 앞으로 테스트를 수행할 단위 업무명, 현재 진행 중인 테스트 단위 업무명, 이미 테스트를 완료한 단위 업무명 작성
(다) 성능 테스트 단계와 각 업무 기능별 매트릭스 작성
- 가령 ‘xx응용체계 개발 프로젝트’의 성능 테스트를 진행 시 테스트 대상 을 건강/인사관리, OO관리, 교육훈련관리, 종합OOO 등 업무 기능별로 나누고 할 일, 진행 중, 완료 항목에 접착 메모지 등을 이용하여 기록하고 관리
(라) 소멸 차트 작성
- 가로축은 날짜를 기록하고 세로축은 남은 작업량을 기록하여 정해진 날짜가 되었을 때 남은 작업량이 0이 되도록 관리
(2) 성능 현황판을 이용하여 애플리케이션 성능 개선
- 성능 관리자는 성능 현황판을 이용하여 성능 테스트 분석 결과 및 성능 저하 원인을 개발자에게 전달함으로써 애플리케이션 성능을 개선하도록 관리
'BASE' 카테고리의 다른 글
정보처리기사 실기 - SQL 응용 : 사용자 정의함수 및 호출쿼리 작성 (0) | 2020.08.02 |
---|---|
정보처리기사 실기 - SQL 응용 : 프로시저 및 호출문 작성 (0) | 2020.08.01 |
정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 성능 분석 (0) | 2020.07.30 |
정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 개선 조치사항 작성 (0) | 2020.07.29 |
정보처리기사 실기 - 애플리케이션 테스트 관리 : 애플리케이션 테스트 결과 분석 (0) | 2020.07.25 |