프로덕션 지원 애플리케이션 개발을 위한 권장 사항
Important
Azure Sphere(레거시) 설명서입니다. Azure Sphere(레거시)는 2027년 9월 27일에 사용 중지되며 사용자는 이 시간까지 Azure Sphere(통합)로 마이그레이션해야 합니다. TOC 위에 있는 버전 선택기를 사용하여 Azure Sphere(통합) 설명서를 볼 수 있습니다.
Azure Sphere 디바이스에 대한 애플리케이션을 개발할 때 애플리케이션이 프로덕션 준비가 되었는지 확인하는 몇 가지 사항을 고려해야 합니다. 이 항목에는 애플리케이션이 파일럿 또는 프로덕션 배포에 사용할 준비가 되었는지 확인하는 모범 사례 검사 목록이 포함되어 있습니다. 이러한 항목이 완료되었는지 확인하면 프로덕션에서 발생하는 문제 수를 줄이고 발생하는 문제를 보다 쉽게 진단할 수 있습니다.
Azure Sphere 애플리케이션을 개발할 때 HL(High-Level), RT(실시간) 코어 또는 둘 다의 하이브리드에서 실행할지 여부를 결정합니다. 상위 수준 애플리케이션은 Azure Sphere OS에서 컨테이너화되고 RTApps(실시간 지원 애플리케이션)는 운영 체제 미설치 또는 실시간 코어에서 RTOS(실시간 운영 체제)로 실행됩니다.
여기에 제공된 권장 사항은 프로덕션 준비 애플리케이션에서 품질과 생산성을 높이는 데 도움이 됩니다. 아래 검사 목록은 두 애플리케이션 유형에 대한 디자인 제안의 간결한 목록뿐만 아니라 각 사항에 대해 자세히 설명하는 항목에 대한 링크를 포함하여 권장되는 코딩 기본 사항 및 솔루션 디자인 고려 사항을 제공합니다. 이러한 제안은 현장 분석, 코드 검토 및 실제 솔루션 및 디바이스 디자인에서 프로덕션 배포 애플리케이션의 상호 작용을 지원하는 등 고객과의 파트너 관계에서 파생됩니다.
일반적인 문제
- 프로덕션 준비 애플리케이션에서 베타 도구 집합을 사용하지 않는지 확인합니다.
- API 집합을 대상으로 지정할 때 최신 CMake 및 Azure Sphere 도구를 사용합니다.
- 전체 코드 최적화 및 크기를 보장하려면 프로덕션에 애플리케이션을 배포하기 전에 릴리스 모드에서 최종 이미지 패키지를 컴파일하는 것이 좋습니다. 릴리스 패키지를 배포하기 전에 빌드하고 테스트해야 합니다.
- 전체 빌드를 수행할 때 0 경고 정책을 사용하여 컴파일러 경고가 의도적으로 해결되도록 합니다.
- 일관된 CI/CD 파이프라인을 설정하고 적절한 분기 전략을 사용합니다.
메모리 관련 문제
- 가능하면 모든 공통 고정 문자열을
global const char*
하드 코딩 대신 정의하여 데이터 포인터로 사용할 수 있습니다. - 전역 데이터 구조가 비교적 작은 경우 동적으로 할당된 메모리에 대한 포인터를 사용하는 대신 배열 멤버에 고정 길이를 지정하는 것이 좋습니다.
- 가능하면 동적 메모리 할당을 방지합니다.
- 메모리 버퍼에 대한 포인터를 반환하는 함수의 경우 참조된 버퍼 포인터 및 관련 크기를 호출자에게 반환하는 함수로 변환하는 것이 좋습니다.
- 가능하면 모든 공통 고정 문자열을
동적 컨테이너 및 버퍼
- 목록 및 벡터와 같은 컨테이너에 증분 할당 방법을 사용하는 것이 좋습니다.
일반적인 기본 사항
- 종료 또는 오류 시 모든 처리기를 올바르게 초기화하고 삭제합니다.
- 항상 종료 코드를 사용합니다.
- 애플리케이션이 복구할 수 없는 상태임을 감지하고 다시 시작해야 하는 경우 교착 상태의 위험이 아니라 항상 "깨끗한" 애플리케이션 종료로 처리되는지 확인합니다.
- 오류 처리 및 로깅을 구현합니다. 자세한 내용은 오류 처리 및 로깅을 참조하세요.
- 시스템 타이머를 Watchdog으로 사용하여 애플리케이션이 복구할 수 없는 상태인지 또는 중단 상태인지(예: 교착 상태, 고갈된 메모리 또는 구현된 논리를 통해 복구되지 않는 연결)를 검색하고 적절한 복구에 영향을 줍니다. 자세한 내용은 시스템 타이머를 Watchdog로 사용하세요.
동시성 처리
- 가능하면 EventLoop을 사용합니다.
- 동시 작업에 대한 효율성을 찾습니다.
- 스레드 및 범위를 특정 작업으로만 사용해야 하는 시기를 평가합니다. 스레드를 사용하는 시기에 대한 자세한 내용은 동시성 처리를 참조 하세요.
연결 모니터링
- 인터넷 연결 상태를 정기적으로 확인하는 강력한 상태 컴퓨터를 기반으로 적절한 연결 상태 검사 작업을 구현합니다.
- 전원 관리가 필요한 솔루션의 경우 데이터를 보낸 후 Azure Sphere 칩의 전원을 끄고, 총 가동 시간을 추적하고, 종료 타이머를 설정합니다.
- cURL은 최근 콜백 동작 및 모범 연습을 업데이트했습니다. Azure Sphere는 이전 버전의 cURL 동작이 예상대로 계속 작동하도록 하기 위해 노력해 왔지만 재귀 콜백을 사용하면 예기치 않은 충돌, 연결 중단 및 잠재적인 보안 취약성이 발생할 수 있으므로 curl_multi 사용할 때 보안 및 안정성에 대한 최신 지침을 따르는 것이 좋습니다. TimerCallback이 0ms의 시간 제한으로 발생하는 경우 재귀 콜백을 방지하기 위해 1ms의 시간 제한으로 처리합니다. curl_multi_add_handle 호출한 후 한 번 이상 명시적으로 curl_multi_socket_action 호출해야 합니다.
메모리 관리 및 사용량
- Azure Sphere OS API를 사용하여 애플리케이션 메모리 사용량을 추적하고 애플리케이션이 예기치 않은 메모리 사용에 적절하게 반응하도록 합니다.
- MT3620 watchdog 타이머를 사용하도록 설정하여 교착 상태를 감지하고 적절한 복구 논리를 구현합니다.
- 하이브리드 HL 코어 및 RT 코어 애플리케이션에 대한 코어 간 통신을 구현합니다.
연결 요구 사항 및 문제 해결
- 모든 네트워크 필수 구성 요소가 충족되는지 확인합니다. 자세한 내용은 연결 요구 사항 및 문제 해결을 참조 하세요.
- 를 사용하여
OSNetworkRequirementCheck-HLApp
연결 문제를 해결합니다.OSNetworkRequirementChecker-PC
권장 콘텐츠
IoT 솔루션을 프로덕션 환경으로 이동할 때 고려해야 할 추가 항목은 테스트에서 프로덕션으로 IoT 솔루션 이동을 참조하세요.