# 성능 최적화 체크리스트

#### 코드 최적화

* **중복 제거**: 코드에서 반복되는 부분을 함수나 매크로로 추출하여 중복을 최소화한다.
* **루프 최적화**: 루프 안에서 불필요한 계산이나 조건문을 제거하여 실행 속도를 향상시킨다.
* **데이터 로컬리티**: 데이터 구조를 최적화하여 캐시 히트율을 높이고, 메모리 접근 시간을 줄이다.
* **인라인 함수 사용**: 자주 호출되는 짧은 함수는 인라인으로 선언하여 호출 오버헤드를 줄이다.
* **메모리 할당 최적화**: 동적 메모리 할당을 최소화하고, 필요한 경우에는 메모리 풀을 사용하여 메모리 할당 시간을 줄이다.

#### 컴파일러 최적화

* **최적화 옵션 설정**: 컴파일러의 최적화 플래그를 설정하여 최적의 성능을 끌어낸다. 예를 들어, `-O2` 또는 `-O3` 옵션을 사용한다.
* **프로파일링 도구 사용**: gprof, perf와 같은 프로파일링 도구를 사용하여 병목 구간을 파악하고 최적화한다.
* **링커 최적화**: LTO(Link Time Optimization)를 활성화하여 최적화된 실행 파일을 생성한다.

#### 실시간 특성 최적화

* **우선순위 설정**: 실시간 스레드의 우선순위를 적절히 설정하여 스케줄링이 원활히 이루어지도록 한다.
* **잠금 최소화**: 동기화 오버헤드를 줄이기 위해 잠금 구간을 최소화하고, lock-free 알고리즘을 사용한다.
* **타이머 최적화**: 정밀한 타이머를 사용하여 이벤트를 정확한 시간에 실행하도록 한다.
* **주기적 작업 최적화**: 주기적으로 실행되는 작업의 주기를 최적화하여 시스템 자원을 효율적으로 사용한다.

#### 네트워크 최적화

* **패킷 처리 최적화**: 네트워크 패킷의 처리 경로를 최적화하여 지연 시간을 줄이다.
* **네트워크 스택 튜닝**: 커널 네트워크 스택의 파라미터를 조정하여 네트워크 성능을 향상시킨다.
* **QoS 설정**: Quality of Service를 설정하여 중요한 네트워크 트래픽이 우선적으로 처리되도록 한다.

#### I/O 최적화

* **비동기 I/O 사용**: 블로킹을 방지하고 성능을 높이기 위해 비동기 I/O를 사용한다.
* **버퍼 크기 조정**: I/O 버퍼 크기를 적절히 조정하여 I/O 성능을 최적화한다.
* **DMA 사용**: Direct Memory Access를 사용하여 CPU 부하를 줄이고 I/O 성능을 향상시킨다.

#### 시스템 리소스 모니터링

* **CPU 사용률 모니터링**: CPU 사용률을 모니터링하여 병목이 발생하는 지점을 파악한다.
* **메모리 사용 모니터링**: 메모리 사용량을 모니터링하여 메모리 누수를 방지하고, 필요시 메모리를 최적화한다.
* **디스크 I/O 모니터링**: 디스크 I/O 성능을 모니터링하여 디스크 병목을 해결한다.

#### 추가 최적화

* **전력 소비 최적화**: 전력 소비를 줄이기 위해 저전력 모드와 같은 최적화 기술을 적용한다.
* **성능 테스트**: 성능 테스트를 통해 시스템의 최대 처리 능력과 지연 시간을 측정하고 최적화한다.
* **성능 분석**: 성능 분석 도구를 사용하여 시스템의 성능을 지속적으로 모니터링하고, 최적화 기회를 찾는다.
