SlideShare a Scribd company logo
속도의 필요성
Code Craft
Chapter 11
목차
1. 최적화란 무엇인가 ?
2. 코드의 최적화를 막는 것은 ?
3. 왜 최적화가 안 되나 ?
4. 왜 최적화를 하는가 ?
5. 세세한 실무
6. 최적화 테크닉
7. 효율적인 코드 작성하기
8. 간추림
1. 최적화란 무엇인가 ?
최적화란 무엇인가 ?
일반적 의미
코드가 더 빠르게 실행되도록 만드는 것
최적화란 무엇인가 ?
소프트웨어의 최적화
프로그램의 실행 속도를 높이는 것
실행 파일의 크기를 줄이는 것
코드의 질을 향상 시키는 것
출력의 정확성을 높이는 것
기동 시간 (Start up) 을 최소화 하는 것
단위 시간당 데이터의 처리량을 늘리는 것
저장 장치의 부담을 줄이는 것
최적화란 무엇인가 ?
코드 성능의 결정 요소
소스 코드 각 행의 품질
저급 모듈 설계
실행 플랫폼
전개 또는 설치 구성 ( configuration )
아키텍처에서의 소프트웨어 관련 결정 사항
기존에 만들어져 있는 것들 ( 시스템의 기존 부분과의 상호 작용의 필요
성 )
2. 코드의 최적화를 막는 것은 ?
불필요한 복잡성
코드 실행 속도의 저하
코드의 최적화를 막는 것은
?
복잡성
프로그래밍 문제의 해결책으로 권유
느린 코드를 양산
코드의 최적화를 막는 것은
?
간접성
필연적으로 코드의 성능을 망친다 .
코드의 최적화를 막는 것은
?
중복성
코드의 최적화를 막는 것은
?
중복성
1
2
3
4
5
6
7
8
9
10
class Image
{
    Image( std::string path )
    {
        /*  이미지 파일 읽어오기   
        ...
        */
    }
    ...
};
강한 연관성 , 높은 호출 비용
성능 저하
코드의 최적화를 막는 것은
?
잘못된 설계
코드의 최적화를 막는 것은
?
잘못된 설계
1
2
3
4
bool Bullet::Move( Object destObj, float dt )
{
    collisionMgr->transitionHandler->MovementProcedure->Move( this, destObj.Position, dt );
}
느리다
코드의 최적화를 막는 것은
?
I/O
3. 왜 최적화가 안 되나 ?
왜 최적화가 안 되나 ?
최적화의 대가
바람직한 품질 하나를 다른 하나와 맞바꾸는 행위
왜 최적화가 안 되나 ?
가독성 결여
최적화된 코드는 원래의 코드만큼 명료하기가 힘들다
.
왜 최적화가 안 되나 ?
복잡성 증가
플랫폼에 한정된 지식
왜 최적화가 안 되나 ?
유지보수의 어려움
가독성 결여 + 복잡성 증가 -> 코드 관리가 힘듬
부자연스럽고 따라가기 힘든 코드 양산 -> 위험한 코
드
왜 최적화가 안 되나 ?
확장의 어려움
종종 최적화는 일반성과 미래의 성장을 제한
↓
확장이 힘듬
왜 최적화가 안 되나 ?
이해의 충돌
특정 플랫폼에 한정된 최적화
한 프로세서에서만 최적인 데이터 타입 사용
왜 최적화가 안 되나 ?
더 많은 일거리
다른 해야할 일이 충분히 많다
왜 최적화가 안 되나 ?
대안
합리화 하기
프로젝트가 끝날 때를 예상하여 더 빠른 기계를 사용
하드웨어 해결책 ( 더 큰 메모리 , 특정 연산용 유닛 추가 )
높은 성능을 요구하는 다른 프로세스 막기
백그라운드 스레드 만들기
작업 완료 전에 사용자 인터페이스를 미리 변화시키기
자동화 하여 사용자가 없도록 하기
더 효율적인 최적화를 하는 최신 컴파일러 사용
4. 왜 최적화를 하는가 ?
왜 최적화를 하는가 ?
게임 프로그래밍
사실적인 그래픽
인상적인 인공지능 알고리즘
↓
한계 수준의 높은 성능을 요구함
왜 최적화를 하는가 ?
DSP ( Digital signal
processing )
대량의 데이터를 빠르게 필터링 하도록 최적화 된 장비를 사용
프로그래머가 프로세서가 하는 일을 고도로 제어해야 함
왜 최적화를 하는가 ?
자원이 제한된 환경 ( 임베디드 )
작은 크기의 메모리
요구 성능에 비해 좋지 못한 하드웨어
왜 최적화를 하는가 ?
리얼타임 시스템
제한 시간 안에 작업을 완료 되어야 함
왜 최적화를 하는가 ?
금융 / 과학 분야
수치 프로그래밍은 높은 성능을 필요로 함
5. 세세한 실무
세세한 실무
최적화 과정
1. 지나치게 느린지 확인 , 정말 최적화가 필요한지 증명
2. 가장 느린 코드를 식별하여 타깃으로 삼기
3. 최적화할 타깃의 성능을 테스트
4. 코드를 최적화
5. 코드가 여전히 잘 작동하는지 테스트
6. 속도가 향상 되었는지 테스트
세세한 실무
유의점
목표에 맞게 과정을 조정하여 진행
다른 부분들에 영향을 주지 않도록 별도로 최적화
Debug 가 아닌 Release 빌드를 최적화
세세한 실무
최적화가 필요하다는 것을 증명
“ 우리는 작은 효율성 , 예를 들면 시간을 97% 정도로 줄이는
것에 대해서는 잊어야 합니다 : 조급한 최적화는 악의 근원입니
다 . “
프로그램의 요구사항
사용자 편의성에 관한 조사
세세한 실무
가장 느린 코드를 식별
20 : 80 규칙
20% 에 못 미치는 부분에서 80% 이상의 시간을 소모
타깃을 잘 정하는게 중요하다
세세한 실무
가장 느린 코드를 식별하는 방법
프로파일러 사용
CPU 가 시간을 보내는 부분의 위치를 알려주며
가장 느린 부분이 어디인지 알려주지 않음
세세한 실무
가장 느린 코드를 식별하는 방법
시간을 재는 코드를 직접 작성
함수의 호출 횟수 세기 ( 지원하는 라이브러리 사용 가능 )
직접 디버깅하여 흐름을 추적 ( 테스트용 함수 따로 작성 가능
)
프로그램을 느리게 만듦으로서 느린 부분을 찾기 쉽게 만들기
세세한 실무
가장 느린 코드를 식별할 때의 유의점
설계 수준에서 개선이 필요한 부분을 놓칠 수 있다 .
세세한 실무
코드의 테스트
성능 테스트 ( 최적화 전 )
올바르게 작동하는지 테스트
성능 테스트 ( 최적화 후 )
세세한 실무
테스트 할 때의 유의점
테스트는 항상 똑같은 입력 데이터 집합을 이용
모든 테스트를 동일한 조건 하에서 실시
사용자 입력에 의존하지 않도록 자동화
6. 최적화 테크닉
최적화 테크닉
최적화 방법
설계 변경 코드 변경
어렵다
효율을 많이 높일 수 있다
비교적 쉽다
비교적 효율을 덜 높인다
실행 속도를 높이는 방법
느린 일의 속도를 높인다 .
느린 일을 덜 자주 한다 .
느린 일을 정말 필요할 때까지 미루었다가 한다 .
최적화 테크닉
설계 변경
캐싱 , 버퍼링 추가하여 중복이나 느린 접근 개선
Resource pool 을 이용하여 자원 할당 부담 줄이기
저장 포맷을 바이너리로 바꾸어 파싱 속도 늘리기
병렬 처리를 사용하여 일들이 밀리지 않게 하기
스레드의 과도한 잠금을 피하거나 제거하기
과도한 예외 처리 피하여 컴파일러의 최적화를 돕기
설계의 품질을 떨어트려 속도를 높이기
기능 제거하기
최적화 테크닉
알고리즘
최적화 테크닉
A A( 최적
화 )
B
시간 5ms 4ms 10ms
반복 횟수 1000 1000 100
총 시간 5000ms 4000ms 1000m
s
근본적인 알고리즘을 바꾸는 편이 좋다 .
컴파일러가 알아서 최적화 해주는 것들
루프 풀기
코드 인라인
상수 접기
컴파일 시간으로 이동
강도 축소
부분식
죽은 코드의 제거
코드 변경
최적화 테크닉
1
2
3
4
for( int i = 0; i < 5; i++ )
{
    arr[i] = i;
}
루프 풀기
최적화 테크닉
1
2
3
4
5
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[4] = 4;
1
2
3
4
int Add( int a, int b )
{
    return a + b;
}
코드 인라인
최적화 테크닉
1
2
3
4
inline int Add( int a, int b )
{
    return a + b;
}
함수의 코드를 호출한 부분으로 옮김으로서
최적화의 폭이 더 넓어지는 장점도 있다 .
상수 접기
최적화 테크닉
1 int a = 5 + 5; 1 int a = 10;
컴파일 시간으로 이동
최적화 테크닉
조건 테스트 , 음수 테스트 등등 ( 상수 접기도 포함
)
1
2
3
4
5
6
7
8
int Find( int idx )
{
    if ( idx < 0 || idx >= arrSize )
    {
        return 0;
    }
    return arr[idx];
}
1
2
3
4
5
6
7
8
int Find( unsigned int idx )
{
    if ( idx >= arrSize )
    {
        return 0;
    }
    return arr[idx];
}
강도 축소
최적화 테크닉
1 x / 4
1 x >> 2
부분식
최적화 테크닉
1
2
int first = (a * b) + 10;
int second = (a * b ) / c;
1
2
3
int temp = a * b;
int first = temp  + 10;
int second = temp  / c;
죽은 코드의 제거
최적화 테크닉
1
2
3
4
5
6
7
8
if ( true )
{
    sum += temp;
}
else
{
    sum -= temp;
}
용납되는 변경 사항들
오래 걸리는 함수는 결과를 캐시하여 재사용
느린 함수를 다른 언어로 다시 구현 ( JNI )
성능 향상을 위해 코드의 순서를 정리
코드 변경
최적화 테크닉
작업을 절대적으로 필요할 때까지 미루기
조건 검사를 함수 위쪽으로 끌어올려서 불필요한 작업 피하기
결과 값이 바뀌지 않는 계산은 루프 밖으로 옮기기
실패할 가능성이 있는 테스트를 제일 앞에 두기
성능 향상을 위해 코드의 순서를 정리
최적화 테크닉
1
2
3
4
5
6
7
8
9
FileWriter fw( "test.txt" );
 
std::vector<Word> sameWords = GetSameWords( words );
std::sort( sameWords.begin(), sameWords.end() );
 
for ( auto itr = sameWords.begin(); itr != sameWords.end; ++itr )
{
    fw.Write( itr.GetString() );
}
작업을 절대적으로 필요할 때까지 미루
기
최적화 테크닉
작업을 절대적으로 필요할 때까지 미루
기
최적화 테크닉
1
2
3
4
5
6
7
8
std::vector<Word> sameWords = GetSameWords( words );
std::sort( sameWords.begin(), sameWords.end() );
FileWriter fw( "test.txt" );
 for ( auto itr = sameWords.begin(); itr != sameWords.end; ++itr )
{
    fw.Write( itr.GetString() );
}
조건 검사를 함수 위쪽으로 끌어올려서 불필요한 작업 피하기
최적화 테크닉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void InsertEncryptData( int idx, int data )
{
    int encryptData = data;
    for(int i = 0; i < 5; ++i)
    {
        encryptData <<= EncryptKey[i];
    }
 
    if ( idx < 0 || datas.size() <= idx )
    {
        return;
    }
 
    datas[idx] = encryptData;
}
조건 검사를 함수 위쪽으로 끌어올려서 불필요한 작업 피하기
최적화 테크닉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void InsertEncryptData( int idx, int data )
{
    if ( idx < 0 || datas.size() <= idx )
    {
        return;
    }
    int encryptData = data;
    for(int i = 0; i < 5; ++i)
    {
        encryptData <<= EncryptKey[i];
    }
  
    datas[idx] = encryptData;
}
결과 값이 바뀌지 않는 계산은 루프 밖으로 옮기기
최적화 테크닉
1 for ( int i = 0; i < tree.AppleCount(); ++i )
1
2
int appleCount = tree.AppleCount();
for ( int i = 0; i < appleCount; ++i )
프로파일을 하여 증명하는 것을 잊지 말아야 함
C# 에서는 아래의 경우가 더 느릴 수 있다 .
실패할 가능성이 있는 테스트를 제일 앞에 두
기
최적화 테크닉
통계적으로 실패할 가능성이 더 많은 조건을 앞으로
1 if ( condition_one && condition_two )
복잡한 계산은 테이블을 사용하여 시간과 공간을 교환하
기
최적화 테크닉
1
2
3
4
5
6
7
8
9
int DamageForEachLevel[] = {
    3,
    5,
    8,
    13,
    18,
    20,
    ...
};
실행 전에 압축이 풀리는 압축 실행 파일 만들기
공통 코드를 함수에 넣어서 중복 피하기
호출 빈도가 낮은 함수는 DLL 이나 별도 프로그램으로 옮기기
크기에 초점을 맞춘 코드 변경
최적화 테크닉
7. 효율적인 코드 작성하기
최적화하면서 일을 진행
효율적인 코드 작성하기
실제 필요한 것보다 낮은 수준의 코드가 작성됨 .
보완 방법
효율적인 코드 작성하기
효율적인 코드를 작성
코드의 최적화는 나중에
↓
나중에 대량의 최적화를 할 필요는 없앰
안좋은 방법
효율적인 코드 작성하기
단순하게 작성하고 프로파일이 보틀넥을 입증했을 때 최적화 하
기
빠른 검색을 위한 데이터 구조
배열 X 이진트리 O
어느정도 단순하게 짜더라도 성능에 대한 고려는 필요하다 .
최적화를 돕는 설계 방안들
효율적인 코드 작성하기
네트워크 / 느린 저장장치에 접근하는 함수에 대한 신뢰를 최소화
목표로 하는 전개 방법과 실행 방법을 알아두어 그에 걸맞게 설
계
최적화 시 특정 섹션만 재작성 가능하도록 코드를 모듈화
8. 간추림
좋은 프로그래머
간추림
최적화가 절대적으로 필요하다고 증명되어야만 최적화를 합니다
.
신중한 접근 방법으로 체계적인 최적화를 시도합니다 .
코드의 품질을 파괴하지 않는 최적화를 선호합니다 .
코드 수준의 최적화를 하기 전에 대안을 찾아내고 설계 개선에
대해 연구합니다 .
나쁜 프로그래머
간추림
코드의 부적절성을 증명하기도 전에 최적화부터 시작합니다 .
측정이나 조사 없이 보틀넥이라고 생각하는 코드를 수정합니다 .
코드의 품질보다 속도가 더 중요하다고 생각합니다 .
자기가 하는 최적화가 다른 코드 영역이나 사용 패턴에 대해 어
떤 의미를 갖는지 전체적으로 고려하지 않습니다 .

More Related Content

Similar to 속도의 필요성

OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316기한 김
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
tobeware
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
KH Park (박경훈)
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
Sungmin Kim
 
Testing & refactoring
Testing & refactoringTesting & refactoring
Testing & refactoring
Lim Hosung
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
haiteam
 
4-1: JMP/Python 에코시스템 성공 사례
4-1: JMP/Python 에코시스템 성공 사례4-1: JMP/Python 에코시스템 성공 사례
4-1: JMP/Python 에코시스템 성공 사례
JMP Discovery Summit Korea 2023
 
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
JMP Korea
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
GunHee Lee
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
Kenu, GwangNam Heo
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development기룡 남
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
Kay Kim
 
[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략
Ji-Woong Choi
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
Ji-Woong Choi
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 

Similar to 속도의 필요성 (20)

OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
 
Testing & refactoring
Testing & refactoringTesting & refactoring
Testing & refactoring
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
4-1: JMP/Python 에코시스템 성공 사례
4-1: JMP/Python 에코시스템 성공 사례4-1: JMP/Python 에코시스템 성공 사례
4-1: JMP/Python 에코시스템 성공 사례
 
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
4-1: JMP/Python 에코시스템 성공 사례 (한얼솔루션 이광기 상무)
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
 
[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 

속도의 필요성

Editor's Notes

  1. 충분히 빠르지 않다면 최적화를 하게 되는데, 코드의 성능을 높이는 방법이 있다.
  2. 이러한 것들로 성능이 결정된다. 시스템적인 것도 있고 코드적인 부분도 있다
  3. 어떤 것들이 문제가 되는지 알아둘 필요
  4. 응집성
  5. 최적화를 하면 안되는 이유
  6. 덜 명료한 코드를 넣다보면..
  7. 최적화 하다보면 이런부분이 열외가 됨… 멤버변수 public으로 만들거나 함수 안만들고 커플링 높게 그냥 갖다가 쓰거나
  8. 다른 곳에서는 느려질 수 있고, 다른 플랫폼에서의 작업 희생
  9. 많은 시간과 노력이 필요 최적화 필요성 증명, 테스트… 해야할게 많다
  10. 많은 시간과 노력이 필요
  11. 실행파일 크기 메모리 소모 문제 -&amp;gt; 메모리를 소진하는 데이터 구조를 타깃으로
  12. 최대한 신중하게
  13. 유의점.. 개선의 여지가 전혀 없는 함수에서 시간을 보낼 수도 있다. 결과를 해석하고 머리를 써야함
  14. 프로파일러가 없을 때 사용할 수 있는 방법들 느리게 만들기 -&amp;gt; 함수 두번씩 호출
  15. 현재 설계된 수준에서, 코드의 수준을 개선하도록 부추기기 때문
  16. 이런 순서로 행해져야 한다. 안하면 최악화의 여지가 있음
  17. CPU, 메모리 상태등, 자원을 많이먹는 프로그램을 실행시키고 한다던가…
  18. 스레드 lock.. 오버헤드 품질떨어트리고 속도 얻는 것은 응집성 낮추고 커플링 늘려서 속도 높이는 방법임, 예로 클래스 멤버를 모두 publi으로..
  19. 매크로 사용시 종종 나옴
  20. 많은 조건 테스트를 정적으로 증명한 다음에 코드로부터 제거할 수 있습니다. ?????
  21. JIT컴파일러가 최적화 되지 않은 코드의 패턴을 알고 최적화 해서 없앨 수 있기 때문
  22. JIT컴파일러가 최적화 되지 않은 코드의 패턴을 알고 최적화 해서 없앨 수 있기 때문
  23. JIT컴파일러가 최적화 되지 않은 코드의 패턴을 알고 최적화 해서 없앨 수 있기 때문