SlideShare a Scribd company logo
1 of 15
이민웅
   코드의 패턴과 스타일이 어긋남
   개인적으로 선호하는 방식이 틀림
   객체 간 통신을 엄격히 규제하지 않으면 의존관계
    들이 뒤엉켜 복잡한 스파게티 코드가 만들어짐
   실제로 의도하지는 않지만 다른 객체와 연결하려
    면 반드시 필요한 헤더파일 의존성이 생기기 쉬움
   깨지기 쉬운 코드를 디버깅하다 보면 잡은 버그보
    다 새로 생긴 버그다 더 많음
   하나의 간단한 기반 클래스(base class)를 상속
   개념적으로는 장면그래프와 비슷함
    ◦ 모든 노는는 부모-자식 관계를 유지
   코드 모듈들의 부모-자식 관계와 동기관계를 명시
    적으로 정의
   계통구조 안에서의 객체의 형식을 손쉽게 파악할
    수 있는 실행 시점 형식 식별(RTTI)시스템도 필요
   루트노드
    ◦ 관리자 클래스가 가짐
   객체 노드는 자신의 다음 동기 노드로의 링크와 자
    신의 첫 자식 노드로의 링크를 가짐
   갱신순서
    ◦ 항상 자식들보다 부모를 먼저 갱신
    ◦ 동기들을 항상 앞에서 뒤의 순서로 갱신
   갱신방법
    ◦ 너비 우선(depth-first)
    ◦ 깊이 우선(breath-first)
      필자는 메모리 접근 패턴과 성능의 관점에서 선호
   코드가 갱신 주기에 유연하게 반응하게 하고 객체
    들이 수직 동기화 사전으로부터 분리되게 하면 여
    러가지 이득을 얻음
   가변 시간 간격의 지원
    ◦ 다양한 타이밍 요구사항을 처리 하는데 도움
   갱신 계통구조를 실행 시점에서 구축
    ◦ 하나의 동적 자료구조로 취급
   예를 들어 네트워크에 연결된 처리를 하고 싶지 않
    으면 헤당 노드를 제거 하면 됨
    ◦ 자료파일을 읽어서 갱신 계통구조를 구축하는 것도 가능
    ◦ IF문을 쓸 필요가 없음
      If(networkActive)
      {
         …Code…
      }
   자기조사 시스템
    ◦ 객체들의 목록을 처리하는 기능
    ◦ 계통구조 안에서의 상대위치에 따라 객체를 걸러내는 기
      능
   객체연결관계가 더 이상 코드에 명시적으로 박혀
    있는 어떤 것이 아니라 실행시점의 동적인 속성이
    됨
    ◦ 클래스의 어떤 한 인스턴스를 얻어올려면..
     EX) ptrG = GetD()->GetA()->GetB()->GetF()->GetG();

    ◦ CEH면 간단하기 얻음
      EX) ptrG = GetFirst<G>();
   CEH 관리자 클래스
    ◦ 호출 그래프와 실제 호출 순서를 관리자 클래스가 제어
    ◦ 코드의 행동방식에 대한 자료를 원하는 형태로 출력
      필자는 GraphViz 사용해서 코드가 연결되고 실행되는지를
       한 눈에 볼 수 있는 그래프를 얻음
   계통구조 그래프를 운행하는 도중에 수행하기 매
    우 위험한 것들
    ◦ 갱신 단계에서 계통구조를 변경(삭제,삽입,생성)하면 심
      각한 문제 발생
      대기열등에 모아두어 갱신 단계 끝에서 실행
   추가적인 보호막의 도입
   코드를 일관된 패턴으로 구축
   갱신 순서를 쉽게 수정
   자기조사 기능을 이용해서 객체 인스턴스등을 쉽
    게 찾음
   코드의 실행 순서와 계통구조를 가시화하기가 간
    단
   코드만 봐서는 어떤 일이 일어나는지를 파악하기
    힘듬
    ◦ 갱신순서가 동적, 소스코드를 조사하는 것은 도움이 안됨
   CEH와 잘 맞지 않는 코드도 있음
    ◦ 간단하고 유연하지만 틀에 맞지 않는 기능성은 있음
   CEH 적용 단위의 크기를 세심하게 설정하여야 함
    ◦ 파티클이나 비슷한것들에게는 CPU와 메모리 낭비가 심
      해 적절한 조율이 필요
   CEH를 사용하는 도중 계통구조를 수정하면 심각
    하고 찾기 힘든 버그가 발생
감사합니다.

More Related Content

Viewers also liked

니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌민웅 이
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf민웅 이
 
Wrapped diffuse
Wrapped diffuseWrapped diffuse
Wrapped diffuse민웅 이
 
Deferred decal
Deferred decalDeferred decal
Deferred decal민웅 이
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4민웅 이
 
Post processing in_color
Post processing in_colorPost processing in_color
Post processing in_color민웅 이
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting민웅 이
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리민웅 이
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)민웅 이
 
Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space민웅 이
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기Jong Wook Kim
 

Viewers also liked (13)

니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
니시카와젠지의 3 d게임 팬을 위한「gravity daze」그래픽스 강좌
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf
 
Wrapped diffuse
Wrapped diffuseWrapped diffuse
Wrapped diffuse
 
Deferred decal
Deferred decalDeferred decal
Deferred decal
 
D2 Hdr
D2 HdrD2 Hdr
D2 Hdr
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
Post processing in_color
Post processing in_colorPost processing in_color
Post processing in_color
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)
 
Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
 

Similar to Ceh

C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxsung suk seo
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2Minseok Jang
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13Shin heemin
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준HoJun Sung
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
리액트 18 공유.pptx
리액트 18 공유.pptx리액트 18 공유.pptx
리액트 18 공유.pptxcksal4785911
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기종빈 오
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
HeadFisrt Servlet&JSP Chapter 5
HeadFisrt Servlet&JSP Chapter 5HeadFisrt Servlet&JSP Chapter 5
HeadFisrt Servlet&JSP Chapter 5J B
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 

Similar to Ceh (20)

C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptx
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
Design patterns
Design patternsDesign patterns
Design patterns
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
리액트 18 공유.pptx
리액트 18 공유.pptx리액트 18 공유.pptx
리액트 18 공유.pptx
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
HeadFisrt Servlet&JSP Chapter 5
HeadFisrt Servlet&JSP Chapter 5HeadFisrt Servlet&JSP Chapter 5
HeadFisrt Servlet&JSP Chapter 5
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 

More from 민웅 이

Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...민웅 이
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation 민웅 이
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현민웅 이
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각민웅 이
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor민웅 이
 

More from 민웅 이 (6)

Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
Siggraph15 A Novel Sampling Algorithm for Fast and Stable Real-Time Volume Re...
 
PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation PowerVR Low Level GLSL Optimisation
PowerVR Low Level GLSL Optimisation
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor
 

Ceh

  • 2. 코드의 패턴과 스타일이 어긋남  개인적으로 선호하는 방식이 틀림  객체 간 통신을 엄격히 규제하지 않으면 의존관계 들이 뒤엉켜 복잡한 스파게티 코드가 만들어짐  실제로 의도하지는 않지만 다른 객체와 연결하려 면 반드시 필요한 헤더파일 의존성이 생기기 쉬움  깨지기 쉬운 코드를 디버깅하다 보면 잡은 버그보 다 새로 생긴 버그다 더 많음
  • 3. 하나의 간단한 기반 클래스(base class)를 상속  개념적으로는 장면그래프와 비슷함 ◦ 모든 노는는 부모-자식 관계를 유지  코드 모듈들의 부모-자식 관계와 동기관계를 명시 적으로 정의  계통구조 안에서의 객체의 형식을 손쉽게 파악할 수 있는 실행 시점 형식 식별(RTTI)시스템도 필요
  • 4.
  • 5.
  • 6. 루트노드 ◦ 관리자 클래스가 가짐  객체 노드는 자신의 다음 동기 노드로의 링크와 자 신의 첫 자식 노드로의 링크를 가짐
  • 7. 갱신순서 ◦ 항상 자식들보다 부모를 먼저 갱신 ◦ 동기들을 항상 앞에서 뒤의 순서로 갱신  갱신방법 ◦ 너비 우선(depth-first) ◦ 깊이 우선(breath-first)  필자는 메모리 접근 패턴과 성능의 관점에서 선호
  • 8. 코드가 갱신 주기에 유연하게 반응하게 하고 객체 들이 수직 동기화 사전으로부터 분리되게 하면 여 러가지 이득을 얻음  가변 시간 간격의 지원 ◦ 다양한 타이밍 요구사항을 처리 하는데 도움
  • 9. 갱신 계통구조를 실행 시점에서 구축 ◦ 하나의 동적 자료구조로 취급  예를 들어 네트워크에 연결된 처리를 하고 싶지 않 으면 헤당 노드를 제거 하면 됨 ◦ 자료파일을 읽어서 갱신 계통구조를 구축하는 것도 가능 ◦ IF문을 쓸 필요가 없음 If(networkActive) { …Code… }
  • 10. 자기조사 시스템 ◦ 객체들의 목록을 처리하는 기능 ◦ 계통구조 안에서의 상대위치에 따라 객체를 걸러내는 기 능  객체연결관계가 더 이상 코드에 명시적으로 박혀 있는 어떤 것이 아니라 실행시점의 동적인 속성이 됨 ◦ 클래스의 어떤 한 인스턴스를 얻어올려면.. EX) ptrG = GetD()->GetA()->GetB()->GetF()->GetG(); ◦ CEH면 간단하기 얻음 EX) ptrG = GetFirst<G>();
  • 11. CEH 관리자 클래스 ◦ 호출 그래프와 실제 호출 순서를 관리자 클래스가 제어 ◦ 코드의 행동방식에 대한 자료를 원하는 형태로 출력  필자는 GraphViz 사용해서 코드가 연결되고 실행되는지를 한 눈에 볼 수 있는 그래프를 얻음
  • 12. 계통구조 그래프를 운행하는 도중에 수행하기 매 우 위험한 것들 ◦ 갱신 단계에서 계통구조를 변경(삭제,삽입,생성)하면 심 각한 문제 발생  대기열등에 모아두어 갱신 단계 끝에서 실행  추가적인 보호막의 도입
  • 13. 코드를 일관된 패턴으로 구축  갱신 순서를 쉽게 수정  자기조사 기능을 이용해서 객체 인스턴스등을 쉽 게 찾음  코드의 실행 순서와 계통구조를 가시화하기가 간 단
  • 14. 코드만 봐서는 어떤 일이 일어나는지를 파악하기 힘듬 ◦ 갱신순서가 동적, 소스코드를 조사하는 것은 도움이 안됨  CEH와 잘 맞지 않는 코드도 있음 ◦ 간단하고 유연하지만 틀에 맞지 않는 기능성은 있음  CEH 적용 단위의 크기를 세심하게 설정하여야 함 ◦ 파티클이나 비슷한것들에게는 CPU와 메모리 낭비가 심 해 적절한 조율이 필요  CEH를 사용하는 도중 계통구조를 수정하면 심각 하고 찾기 힘든 버그가 발생