전체 글 18

On-Device AI 프레임워크

길게 설명할 필요 없이 요즘 온디바이스(on-device) AI 가 핫하다. 사이즈가 큰 모델을 서버에서 돌려 네트워크로 받아오는 것이 아닌, 로컬 디바이스에서 추론을 돌려 네트워크 비용과 보안 이슈를 걱정하지 않고 AI 를 적용하겠다는 것이다.  이에 맞추어 모델을 최적화하고 경량화 하는 프레임워크들이 정말 우후죽순으로 나오고 있다. 대표적인 프레임워크를 살펴보면 다음과 같다.  ONNX (Open Neural Network Exchange)설명: 일반적인 모델 최적화 프레임워크. 다른 프레임워크 간 모델 호환성을 제공하는 표준이 된다.특징: PyTorch, TensorFlow 등의 프레임워크에서 모델을 변환하여 다양한 하드웨어에서 실행 가능. (단 기기 별 최적화 효율은 떨어질 수 있음)최적화 프레임..

AI 2024.12.05

Embedded Linux, 욕토(Yocto) 빌드해보기

임베디드 시스템 위에서 작업을 하게 되면 욕토(Yocto) 를 다룰 일이 생긴다. 작은 IoT 디바이스 등의 임베디드 시스템에도 펌웨어로 돌리는 경우가 아니라면 OS 가 올라가게 되고 최대한 필요한 기능만 추려서 경량화된 사이즈의 OS 를 구성하게 되는데 리눅스를 기반의 OS 를 쉽게 커스터마이즈 할 수 있는 툴이 바로 욕토다. 욕토가 욕토인 이유는 욕나오고 토나와서라고..   욕토는 여러가지 장점을 가지고 있는데 간단히 요약해보면 다음과 같다.  크로스 플랫폼 지원: ARM, X86, MIPS 등 다양한 아키텍처를 지원함커스터마이징: 원하는 모듈과 어플리케이션 등을 하드웨어 요구사항에 맞게 커스터마이징이 가능모듈화 및 확장성: Layer 구조를 기반으로 기능을 쉽게 추가하거나 변경 가능강력한 커뮤니티:..

커널 모듈(Kernel Module)

임베디드 시스템 위에서 작업을 하다보면 경량화 된 리눅스 이미지 위에서 작업을 해야 할 일이 있다. 그러다 보면 Ubutu 나 Debian 같은 Linux 시스템 위에서는 잘 돌아가던 프로그램이 경량화 된 리눅스 위에서는 안돌아가는 경우를 마주할 수 있다. 이런 경우 대부분의 원인은 커널의 모듈이 빠져서 그런데 이런 경우 커널 모듈(Kernel Module)을 추가해주거나 커널 설정(Kernel Config) 를 수정해서 다시 커널을 빌드해줌으로써 문제를 해결할 수 있다. 그렇다면 과연 커널 모듈이란 무엇일까?  커널 모듈은 커널의 기능을 구성하는 코드 조각으로 일반적으로 .ko (Kernel Object) 파일 형태로 저장되며, 필요에 따라 동적으로 로드되고 관리되고 필요한 모듈만 따로 구성함에 따라 ..

dmesg vs journalctl

시스템을 디버깅 하다보면 로그를 봐야할 일이 많이 있다. 파이썬이나 C 에서 띄워주는 컴파일/런타임 에러 말고.. 시스템에서 부팅 또는 커널레벨에서의 로그를 봐야 하는 경우가 왕왕 있다. 이 경우 많이 쓰는 두 명령어가 바로 'dmesg' 와 'journalctl' 이다.  그런데 궁금한 점은 이 두 로그를 보는 명령어는 어떤 차이일까? 그리고 어떤 경우에 어떤걸 사용해야 할까? 이번 기회에 한번 정리해보았다. dmesg란?dmesg는 "diagnostic message"의 약자로, 리눅스 커널에서 발생하는 진단 메시지를 확인할 수 있는 명령어다. 주로 커널에서 하드웨어, 장치 드라이버, 그리고 시스템 부팅 과정에서 발생한 이벤트를 확인하는 데 사용된다. - 로그의 위치: /var/log/dmesg해당 ..

SELinux: 리눅스 보안 툴 2

SELinux 보안 컨텍스트 관리작업을 할 때 안드로이드를 부팅할때마다 `setenforce 0` 를 켜줘야 화면이 부팅되는 이슈가 있었다. 처음에는 기계적으로 명령어를 쳤지만 곧 이게 SELinux 라는 놈의 모드를 변경하는 명령어라는 것을 알았다. SELinux 는 리눅스의 보안툴인데 AppArmor 를 정리한 김에 SELinux 도 한번 정리해보기로 했다. SELinux란?리눅스 시스템에서 강력한 보안 정책을 구현하기 위해 설계된 프레임워크이다. SELinux 를 이해하기 위해서는 MAC(Mandatory Access Control) 이라는 개념을 이해해야한다.  MAC(Mandatory Access Control)이란? 리눅스에서는 기본적으로 user 와 group 을 기반으로 파일시스템 등의 자..

AppArmor, 리눅스 보안 툴

업무를 하던 중 system daemon 이 특정 directory 에 접근하지 못해서 이를 해결하느라 애를 먹었다. 알고 보니 AppArmor 라는 보안 기능이 system daemon 의 파일 접근 권한을 막고 있었다.. 그래서 이번 기회에 AppArmor 에 대해 한번 정리해보았다. AppArmor 의 핵심은 각 process 가 허용된 자원 (파일 시스템, 네트워크 등)에만 접근하게 허용해주는 것이다. system daemon 같은 경우는 root 권한을 갖고 돌기 때문에 악용된다면 보안적으로 심각한 문제를 초래할 수 있기에 이런 보안적인 장치가 꼭 필요하다! 예를 들어, Apache2와 같은 웹 서버는 일반적으로 다음 경로에만 접근하도록 설정할 수 있다./etc/apache2: 설정 파일 경로/..

GStreamer 란?

회사에서 GStreamer 로 작업을 해야할 일이 생겼다. 단순히 시스템에서 Video 를 띄우는 작업이었는데 GStreamer 라는 툴을 이용해서 진행했다. 단순하게 비디오를 띄우는 작업이라면 `xdg-open` 을 쓰면 되지 않아? 라고 생각했으나 우리의 use-case 는 단순히 비디오를 띄우는 것 뿐 아니라 비디오를 원하는 화면 사이즈에 맞게 조정해서 띄우거나 필요에 따라 재생 동작을 제어하는 등 등 섬세한 컨트롤이 필요했다. 그래서 일반적인 미디어 플레이어를 쓰기 보다 조금 더 섬세한 컨트롤을 할 수 있는 기능이 필요했고 그걸 도와주는 툴이 바로 GStreamer 였다. GStreamer 란? GStreamer는 멀티미디어 애플리케이션을 개발하기 위한 오픈소스 프레임워크다. 주로 C 언어로 작성..

왜 자꾸 sudo apt update 를 쳐줘야 할까?

Ubuntu와 같은 Debian 계열의 Linux를 사용하다 보면 "sudo apt install", "sudo apt update" 같은 명령어를 자주 보게 된다. 특히 "sudo apt update"는 굉장히 자주 등장하는데, 이 명령어가 정확히 무슨 일을 하는지, 왜 이렇게 자주 쳐야 하는지 궁금해하는 사람들이 많다. 이 글에서는 apt 라는 도구의 역할과 그 속에서 "sudo apt update"와 "sudo apt upgrade"가 어떤 역할을 하는지 알아본다. apt install 이 하는 일 예를 들어 vim이라는 소프트웨어를 설치하고 싶으면 다음 명령어를 쳐주면 된다. sudo apt install vim  이 명령어를 실행하면 APT는 저장소(repository) 라고 불리는 패키지 서버..

tc 명령어를 활용한 네트워크 스로틀링 테스트

열심히 구축한 백엔드 서버가 한국에서는 잘 동작하는데 일본이나 미국에만 가면 돌지 않는 이슈가 생겼다. 브라우저 디버깅 툴을 통해 확인해보니 우선 네트워크 환경 때문에 생기는 문제임이 분명했고 이를 체계적으로 분석할 필요성을 느끼게 되었다.내 네트워크 환경에서 서버와의 대역폭을 확인하는 법은 iperf 가 있다. 구축한 서버(한국 위치)와 한국에서의 네트워크 환경에서 대역폭을 테스트를 해봤을 대 100MB/s 이상의 대역폭이 나왔으나 미국에 aws 인스턴스를 하나 만들어서 대역폭을 테스트 해보니 10MB/s 가 채 나오지 않았다. 따라서 미국에서도 우리가 만든 서비스가 잘 동작하려면 네트워크를 10MB/s 이하로 맞춰놓고 테스트를 진행해야 했다.이때 활용할 수 있는 것이 tc 명령어다. 리눅스 환경에서 ..

네트워크 2024.11.15

Iperf3 를 이용한 네트워크 대역폭 테스트

작업을 하다보면 특정 서버와의 내트워크 대역폭을 측정해야 할 경우가 있다. 이 때 iperf3 를 활용해서 간단히 측정해 볼 수 있다.iPerf3 설치 및 환경 설정1. iPerf3 설치우선, 서버와 클라이언트 모두에 iPerf3를 설치해야 한다. 다음 명령어를 사용해 설치할 수 있다.$ sudo apt install iperf32. 서버 설정서버에서 iPerf3를 실행하여 테스트 요청을 대기 상태로 만든다. 기본 포트는 5201번이지만, 필요에 따라 -p 옵션으로 사용자 지정 포트를 설정할 수 있다.$ iperf3 -s -p 5876위 명령은 포트 5876번을 사용하는 서버를 실행한다.3. 클라이언트 설정클라이언트에서 서버로 데이터를 전송하며 대역폭 테스트를 수행한다. 다음은 클라이언트 측 명령어의 예..

네트워크 2024.11.15