sec 111) 애플리케이션 테스트 프로세스(B)
* 애플리케이션 테스트 프로세스 - 개발된 소프트웨어가 사용자의 요구대로 만들어졌는지, 결함은 없는지 등을 테스트하는 절차
>> 절차확인
1) 테스트 계획 - 프로젝트 계획서, 요구 명세서 등을 기반으로 테스트 목표를 정의하고 테스트 대상 및 범위를 결정함
2) 테스트 분석 및 디자인 - 테스트의 목적과 원칙을 검토하고 사용자의 요구사항을 분석
3) 테스트 케이스 및 시나리오 작성 - 테스트 케이스를 작성하고 컴토하고 확인한 다음 테스트 시나리오 작성
4) 테스트 수행 - 테스트 환경을 구축한 후 테스트를 수행
5) 테스트 결과 평가 및 리포팅 - 테스트 결과를 비교 분석하여 테스트 결과서를 작성
6) 결함 추적 및 관리 - 테스트한 후 결함 발생 위치나 종류 등 결함을 추적하고 관리
* 결함 관리 프로세스
1) 에러 발견 - 에러가 발견되면 테스트 전문가와 프로젝트팀이 논의함
2) 에러 등록 - 발견된 에러를 결함 관리 대장에 등록
3) 에러 분석 - 등록된 에러가 실제 결함인지 아닌지를 분석
4) 결함 확정 - 등록된 에러가 실제 결함이면 결함 확정 상태로 설정
5) 결함 할당 - 결함을 해결할 담당자에게 결함을 할당하고 결함 할당 상태로 설정함
6) 결함 조치 - 결함을 수정하고, 수정이 완료되면 결함 조치 상태로 설정함
7) 결함 조치 검토 및 승인 - 수정이 완료된 결함에 대해 확인 테스트를 수행하고 이상이 없으면 결함 조치 완료 상태로 설정.
sec 112) 테스트 케이스/ 테스트 시나리오/ 테스트 오라클
* 테스트 케이스(Test Case)
- 테스트 케이스는 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서
- 테스트 케이스를 미리 설계하면 테스트 오류 방지, 테스트 수행에 필요한 인력, 시간 등의 자원 낭비를 줄일 수 있다.
* 테스트 시나리오(Test Scenario)
- 테스트 시나리오는 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 테스트 케이스를 적용하는 구체적인 절차를 명세
- 테스트 순서에 대한 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있다.
필기 20.9
* 테스트 오라클(Test Oracle)
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참값을 대입하여 비교하는 기법 및 활동
- 결과를 판단하기 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인
>> 테스트 오라클의 특징
- 제한된 검증 - 테스트 오라클을 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법 - 테스트 오라클의 값을 수학적 기법을 이요해 구할 수 있음
- 자동화 가능 - 테스트 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
20.11
* 테스트 오라클의 종류
- 참(True) 오라클
- 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클
- 발생된 모든 오류를 검출할 수 있음
20.11
- 샘플링(Sampling) 오라클 - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클로 전수 테스트가 불가능한 경우 사용
- 추정(Heuristic) 오라클 - 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
- 일관성 검사(Consistent) 오라클 - 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클
sec 113) 테스트 자동화 도구(B)
* 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것.
>> 테스트 유형에 따른 테스트 자동화 도구의 종류
정적 분석 도구/ 테스트 실행도구/ 성능 테스트 도구/ 테스트 통제 도구
* 정적 분석 도구(Static Analysis Tools)
- 정적 분석 도구는 프로그램을 실행하지 않고 분석하는 도구
- 소스코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함 등을 발견하기 위해 사용
* 테스트 실행 도구(Test Execution Tools)
- 테스트 실행 도구는 스크립트 언어를 사용해 테스트를 실행하는 도구
- 테스트 데이터와 테스트 수행 방법 등이 포함된 스크립트를 작성한 후 실행
- 데이터 주도 접근 방식: 스프레드시트에 테스트 데이터를 저장, 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식: 스프레드시트에 테스트를 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장해 실행하는 방식
* 성능 테스트 도구(Performance Test Tools)
- 성능 테스트 도구는 애플리케이션의 처리량, 응답시간, 경과시간, 자원 사용률 등을 인위적으로 적용한 가상의 사용자를 만들어 테스트를 수행함으로써 성능의 목표 달성 여부를 확인하는 도구
* 테스트 통제 도구(Test Control Tools)
- 테스트 통제 도구는 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류: 형상관리도구, 결함 추적/ 관리 도구 등
* 테스트 하네스 도구(Test Harness Tools)
- 테스트 하네스 도구는 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스(Test Harness): 애플리케이션의 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터를 의미
* 테스트 하네스의 구성요소
- 테스트 드라이버(Test Driver) - 테스트 대상의 하위 모듈을 호출, 파라미터를 전달, 모듈테스트 수행 후의 결과를 도출하는 도구
- 테스트 스텁(Test Stub) - 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
- 테스트 슈트(Test Suites) - 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합
- 테스트 케이스(Test Case) - 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서
- 테스트 스크립트(Test Script) - 자동화된 테스트 실행 절차에 대한 명세서
- 목 오브젝트(Mock Object) - 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체
* 테스트 수행 단계별 테스트 자동화 도구
테스트 단계 | 자동화 도구 | 설명 |
테스트 계획 | 요구사항 관리 | 사용자의 요구사항 정의 및 변경 사항 등을 관리하는 도구 |
테스트 분석/설계 | 테스트 케이스 생성 | 테스트 기법에 따른 테스트 데이터 및 테스트 케이스 작성을 지원하는 도구 |
테스트 수행 | 테스트 자동화 | 테스트의 자동화를 도와주는 도구로 테스트의 효율성을 높임 |
정적 분석 | 코딩 표준, 런타임 오류 등을 검증하는 도구 | |
동적 분석 | 대상 시스템의 시뮬레이션을 통해 오류를 검출하는 도구 | |
성능 테스트 | 가상의 사용자를 생성하여 시스템의 처리 능력을 측정하는 도구 | |
모니터링 | CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원하는 도구 | |
테스트 관리 | 커버리지 분석 | 테스트 완료 후 테스트의 충분성 여부 검증을 지원하는 도구 |
형상 관리 | 테스트 수행에 필요한 다양한 도구 및 데이터를 관리하는 도구 | |
결함 추적/ 관리 | 테스트 시 발생한 결함 추적 및 관리 활동을 지원하는 도구 |
sec 114) 결함관리(C)
* 결함(Fault)
- 결함은 오류 발생, 작동 실패 등과 같이 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생 되는 것을 의미
- 사용자가 예상한 결과와 실행 결과 간의 차이나 업무 내용과의 불일치 등으로 인해 변경이 필요한 부분도 모두 결함에 해당
* 결함 관리 프로세스
1) 결함 관리 계획 - 전체 프로세스에 대한 결함 관리 일정, 인력, 업무 프로세스 등을 확보하여 계획을 수립
2) 결함 기록 - 테스터는 발견된 결함을 결함관리 DB에 등록함
3) 결함 검토 - 테스터, 프로그램 리더, 품질 관리(QA) 담당자 등은 등록된 결함을 검토하고 결함을 수정할 개발자에게 전달함
4) 결함 수정 - 개발자는 전달받은 결함을 수정함
5) 결함 재확인 - 테스터는 개발자가 수정한 내용을 확인하고 다시 테스트를 수행함
6) 결함 상태 추적 및 모니터링 활동 - 결함 관리 DB를 이용해 프로젝트별 결함 유형, 발생률 등을 한눈에 볼 수 있는 대시 보드 또는 게시판 형태의 서비스를 제공함.
7) 최종 결함 분석 및 보고서 작성 - 발견된 결함에 대한 정보와 이해관계자들의 의견이 반영된 보고서를 작성하고 결함 관리를 종료함.
* 결함 상태 추적
- 테스트에서 발견된 결함은 지속적으로 상태 변화를 추적하고 관리
- 발견된 결함에 대해 결함 관리 측정 지표의 속성 값들을 분석하여 향후 결함이 발견될 모듈 또는 컴포넌트를 추정할 수 있음.
>> 결함관리 측정 지표
- 결함 분포 - 모듈 또는 컴포넌트의 특정 속성에 해당하는 결함 수 측정
- 결함 추세 - 테스트 진행 시간에 따른 결함 수의 추이 분석
- 결함 에이징 - 특정 결함 상태로 지속되는 시간 측정
* 결함 추적 순서
1) 결함 등록(Open) - 테스터와 품질 관리(QA) 담당자에 의해 발견된 결함이 등록된 상태
2) 결함 검토(Reviewed) - 등록된 결함이 테스터, 품질 관리(QA) 담당자, 프로그램 리더, 담당 모듈 개발자에 의해 검토된 상태
3) 결함 할당(Assigned) - 결함을 수정하기 위해 개발자와 문제 해결 담당자에게 결함이 할당된 상태
4) 결함 수정(Resolved) - 개발자가 결함 수정을 완료한 상태
5) 결함 조치 보류(Deferred) - 결함의 수정이 불가능해 연기된 상태로, 우선순위, 일정 등에 따라 재오픈을 준비중인상태
6) 결함 종료(Closed) - 결함이 해결되어 테스터와 품질 관리(QA) 담당자가 종료를 승인한 상태
7) 결함 해제(Clarified) - 테스터, 프로그램 리더, 품질 관리(QA) 담당자가 종료 승인한 결함을 검토하여 결함이 아니라고 판명한 상태
* 결함 분류
- 시스템 결함 - 애플리케이션 환경이나 데이터베이스 처리에서 발생된 결함
- 기능 결함 - 애플리케이션의 기획, 설계, 업무 시나리오 등의 단계에서 유입된 결함
- GUI 결함 - 사용자 화면 설계에서 발생된 결함
- 문서 결함 - 기획자, 사용자, 개발자 간의 의사소통 및 기록이 원활하지 않아 발생된 결함
* 결함 심각도
- 결함 심각도는 애플리케이션에 발생한 결함이 전체 시스템에 미치는 치명도를 나타내는 척도이다.
- High, Medium, Low 또는 치명적(Critical), 주요(Major), 보통(Normal), 경미(Minor), 단순(Simple) 등으로 분류
* 결함 우선순위
- 결함 우선순위는 발견된 경함 처리에 신속성을 나타내는 척도
- 결함의 중요도와 심각도에 따라 설정되고 수정 여부가 결정
- 결정적,치명적(Critical), 높음(High), 보통(Medium), 낮음(Low) 또는 즉시 해결, 주의 요망, 대기, 개선 권고 등으로 분류
* 결함 관리 도구
- Mantis - 결함 및 이슈 관리 도구로, 소프트웨어 설계시 단위별 작업 내용을 기록할 수 있어 결함 추적도 가능한 도구
- Trac - 결함 추적은 물론 결함을 통합하여 관리할 수 있는 도구
- Redmine - 프로젝트 관리 및 결함 추적이 가능한 도구
- Bugzilla - 결함 신고, 확인, 처리 등 결함을 지속적으로 관리할 수 있는 도구/ 결함의 심각도와 우선순위르 ㄹ지정할 수도 있음
sec 115) 애플리케이션 성능분석(C)
20.5
* 애플리케이션 성능
- 애플리케이션 성능이란 최소한의 자원을 사용해 최대한 많은 기능을 신속히 처리하는 정도를 나타냄
>> 애플리케이션 성능 측정 지표
- 처리량(Throughput) - 일정 시간 내에 애플리케이션이 처리하는 일의 양
- 응답시간(Response Time) - 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
- 경과시간(Turn Around Time) - 애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
- 자원 사용률(Resource Usage) - 애플리케이션이 의뢰한 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률
* 성능 테스트 도구 - 애플리케이션의 성능을 테스트 하기위해 애플리케이션에 부하나 스트레스를 가하면서 애플리케이션의 성능 측정 지표를 점검하는 도구
>> 종류
도구명 | 도구 설명 | 지원환경 |
JMeter | HTTP,FTP 등 다양한 프로토콜을 지원하는 부하 테스트 도구 | Cross-Platform |
LoadUI | - 서버 모니터링, Drag&Drop 등 사용자의 편리성이 강화된 부하 테스트 도구 - HTTP, JDBC 등 다양한 프로토콜 지원 |
Cross-Platform |
OpenSTA | HTTP, HTTPS 프로토콜에 대한 부하 테스트 및 생산품 모니터링 도구 | Windows |
** 부하(Load) 테스트 - 애플리케이션에 일정 시간 동안 부하를 가하면서 반응을 측정하는 테스트
** 스트레스(Stress) 테스트 - 부하테스트를 확장한 테스트, 애플리케이션이 과부하 상태서 어떻게 작동하는지 테스트
* 시스템 모니터링(Monitoring) 도구
- 시스템 모니터링 도구는 애플리케이션이 실행되었을 때 시스템 자원의 사용량을 확인하고 분석하는 도구
>> 종류
도구명 | 도구설명 | 지원환경 |
Scouter | - 단일 뷰 통합/실시간 모니터링, 튜닝에 최적화된 인프라 통합 모니터링 도구 - 애플리케이션의 성능을 모니터링/통제하는 도구 |
Cross-Platform |
Zabbix | 웹기반 서버, 서비스, 애플리케이션 등의 모니터링 도구 | Cross-Platform |
sec 116) 복잡도 (A)
* 복잡도(Complexity)
- 복잡도는 시스템이나 시스템 구성 요소 또는 소프트웨어의 복잡한 정도를 나타내는 말
- 시스템 또는 소프트웨어를 어느 정도 수준까지 테스트해야 하는지 또는 개발하는데 어느 정도의 자원이 소요되는지 예측하는데 사용됨.
* 시간 복잡도
- 시간 복잡도는 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것을 의미
- 시간 복잡도가 낮을수록 알고리즘의 실행시간이 짧고, 높을수록 실행시간이 길어짐
>> 점근 표기법의 종류
* 빅오 표기법(Big-O Notation)
- 알고리즘의 실행시간이 최악일 때를 표기하는 방법
- 입력값에 대해 알고리즘을 수행했을 때 명령어의 실행횟수는 어떠한 경우에도 표기 수치보다 많을 수 없음
* 세타 표기법(Big-θ Notation)
- 알고리즘의 실행시간이 평균일 때를 표기하는 방법
- 입력값에 대해 알고리즘을 수행했을 때 명령어 실행 횟수의 평균적인 수치를 표기
* 오메가 표기법(Big-Ω Notation)
- 알고리즘의 실행시간이 최상일 때를 표기하는 방법
- 입력값에 대해 알고리즘을 수행했을 때 명령어의 실행 횟수는 어떠한 경우에도 표기 수치보다 적을 수 없음
필기 20.6
* 빅오 표기법으로 표현한 최악의 알고리즘 시간 복잡도
필기 20.6
- O(1) - 입력값(n)에 관계없이 일정하게 문제해결에 하나의 단계만을 거침 ex) 스택 삽입(Push),삭제(Pop)
- O(log2n) - 문제 해결에 필요한 단계가 입력값(n) 또는 조건에 의해 감소함 ex) 이진트리(Binary Tree), 이진검색(Binary Search)
- O(n) - 문제 해결에 필요한 단계가 입력값(n)과 1:1의 관계를 가짐 ex) for문
필기 20.6
- O(nlog2n) - 문제 해결에 필요한 단계가 n(log2n)번만큼 수행됨 ex)힙정렬(Heap Sort), 2-Way 합병정렬(Merge Sort)
- O(n^2) - 문제 해결에 필요한 단계가 입력값(n)의 제곱만큼 수행됨 ex) 삽입 정렬(Insertion Sort), 쉘 정렬(Shell Sort), 선택 정렬(Selection Sort), 버블 정렬(Bubble Sort), 퀵 정렬(Quick Sort)
- O(2^n) - 문제 해결에 필요한 단계가 2의 입력값(n) 제곱만큼 수행됨 ex) 피보나치 수열(Fibonacci Sequence)
필기 20.6
* 순환복잡도(Cyclomatic Complexity)
- 순환복잡도는 한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도
- 맥케이브 순환도(McCabe's Cyclomatic) 또는 맥케이브 복잡도 메트릭(McCabe's Complexity Metrics)라고도 함.
- 제어 흐름도 이론에 기초를 둠
- 제어 흐름도 G에서 순환 복잡도 V(G)는 다음과 같은 방법으로 계산할 수 있음
방법1) 순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수를 계산
방법2) V(G) = E-N+2 :E는 화살표수, N은 노드의 수
sec 117) 애플리케이션 성능 개선(A)
필기 20.6
* 소스코드 최적화
- 소스코드 최적화는 나쁜 코드(Bad Code)를 배제하고, 클린 코드(Clean Code)로 작성하는 것
- 클린 코드(Clean Code): 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드, 즉 잘 작성된 코드
- 나쁜 코드(Bad Code) - 프로그램의 로직(Logic)이 복잡하고 이해하기 어려운 코드/ ex) 스파게티 코드-코드의 로직이 서로 복잡하게 얽혀있는 코드, 외계인 코드- 아주 오래되거나 참고 문서나 개발자가 없어 유지보수가 어려운 코드
**나쁜 코드로 작성된 애플리케이션의 코드를 클린 코드로 수정하면 애플리케이션의 성능이 개선됨.
필기 20.9,20.8
* 클린코드 작성 원칙
필기 20.8 가독성 |
- 누구든지 코드를 쉽게 읽을수 있도록 작성 - 코드 작성시 이해하기 쉬운 용어를 사용하거나 들여쓰기 기능 등을 사용 |
필기 20.9,20.8 단순성 |
- 코드를 간단하게 작성 - 한 번에 한 가지를 처리하도록 코드를 작성하고 클래스/메소드/함수 등을 최소단위로 분리 |
필기 20.8 의존성 배제 |
- 코드가 다른 모듈에 미치는 영향을 최소화함 - 코드 변경 시 다른 부분에 영향이 없도록 작성함 |
필기 20.8 중복성 최소화 |
- 코드의 중복을 최소화함 - 중복된 코드는 삭제하고 공통된 코드를 사용함 |
추상화 | - 상위 클래스/메소드/ 함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현함 |
* 소스코드 최적화 유형
- 클래스 분할 배치: 하나의 클래스는 하나의 역할만 수행하도록 응집도를 높이고, 크기를 작게 작성
- 느슨한 결합(Loosely Coupled): 인터페이스 클래스를 이용해 추상화 된 자료 구조와 메소드를 구현함으로써 클래스 간의 의존성을 최소화함
필기 20.9, 20.6
* 소스코드 품질 분석 도구
- 소스 코드 품질 분석 도구는 소스 코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수현상, 스레드 결함 등을 발견하기 위해 사용하는 분석도구
- 정적 분석 도구와 동적 분석 도구로 나뉨
필기 20.9, 20.6 정적 분석 도구 |
작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석도구 종류: pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등 |
동적 분석 도구 | 작성한 소스 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석하는 도구 종류: Avalanche, Valgrind 등 |
* 소스코드 품질 분석 도구의 종류
도구 | 설명 | 지원 환경 |
pmd | 소스코드에 대한 미사용 변수, 최적화되지 않은 코드 등 결함을 유발할 수 있는 코드를 검사 | Linux, Windows |
cppcheck | C/C++코드에 대한 메모리 누수, 오버플로우 등 분석 | Windows |
SonarQube | 중복 코드, 복잡도, 코딩 설계 등을 분석하는 소스 분석 통합 플랫폼 | Cross-Platform |
checkstyle | 자바코드에 대해 소스 코드 표준을 따르고 있는지 검사함 다양한 개발 도구에 통합해 사용 가능 |
Cross-Platform |
ccm | 다양한 언어의 코드 복잡도를 분석 | Cross-Platform |
cobertura | 자바 언어의 소스코드 복잡도 분석 및 테스트 커버리지를 측정 | Cross-Platform |
Avalanche | Valgrind 프레임워크 및 STP기반으로 구현 프로그램에 대한 결함 및 취약점을 분석 |
Linux, Android |
Valgrind | 프로그램 내에 존재하는 메모리 및 쓰레드 결함등을 분석 | Cross-Platform |
8장 SQL 응용
sec 118) SQL - DDL(A)
필기 20.6
* DDL(Data Define Language, 데이터 정의어)
- DDL은 DB구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어
- 번역한 결과가 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러개의 테이블로 저장
>> DDL의 3가지 유형
필기 20.6
- CREATE - SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의
필기 20.6
- ALTER - TABLE에 대한 정의를 변경하는데 사용
필기 20.6
- DROP - SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제
* CREATE SCHEMA
- 스키마를 정의하는 명령문
** 표기형식
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;
ex) 소유권자의 사용자 ID가 ‘홍길동’인 스키마 ‘대학교’를 정의하는 SQL문
=> CREATE SCHEMA 대학교 AUTHORIZATION 홍길동;