회사 소개
저희 회사는 직원 9명 연매출 10억 정도의 작은 스타트업으로 하드웨어를 구축하여 판매하는 것이 주 수익 모델이지만 회사에서 개발한 센서 데이터를 분석하여 AI 모델을 만들거나 분석 결과로 특징이 잘 잡히는 경우는 모델 없이 에러를 검출하는 로직들을 만들어 제공하는 회사입니다.
실습 개요 및 목표
제가 인턴을 통해 얻고자 하는 목표는 데이터의 전반적인 흐름을 겪어보는 것이었습니다.
뉴로센스의 실습으로 체험할 수 있을 것이라 예상되는 내용은 센서 데이터 처리 프로그램 개발 및 데이터 분석, 가속도 센서를 활용한 기기의 이상 상태 감지 프로젝트 이해, 가속도 센서의 데이터 수집, 저장, 데이터 서버 관리 이해, 사용자를 고려한 센서 데이터 전처리 프로그램 설계 방법 이었기 때문에 데이터 수집, 전처리, 데이터 적재, AI 개발, 클라우드 서버 관리 등 다양한 환경을 경험할 수 있을 것이라 예상하였습니다.
인턴 시작 전 취업하고자 하는 진로는 백엔드 개발자였기에 직무가 완전히 겹치지는 않지만 데이터가 굴러가는 형태를 접할 수 있으며, 직접 회사에 다녀보며 어떤 문제점들이 있는지 겪어보고자 하는 목표가 있었습니다.
실습 내용 정리
H기업 자동 변속기 모니터링
차량 개발 및 검증 단계에서 기어단 변화에 따른 RPM 이상치 탐지를 자동화 하는 목적의 프로젝트였습니다.
H사에서 제공한 이상 데이터, 정상 데이터를 구분할 수 있는 특징을 잡아내는 것이 저의 업무였는데, 초기에는 이상 데이터가 무엇이고, 어떤 값에 대해 분석을 수행해야 하는지 클라이언트 측에서 정의를 확실히 해주지 않아 정확한 분석이 어려웠습니다. 추후 미팅을 통해 얻어온 자료로 차량 Turbine의 RPM 값과 현재 Gear를 속력과 함께 연산하여 RPM으로 바꾼 값의 차이가 50~500인 경우 노란색으로, 500이상인 경우 빨간색으로 시각화하였습니다.
관련해서 GUI 제작도 진행하였습니다. CAN 통신에 대한 공부 후 CAN 장비의 데이터를 파이썬으로 받아오도록 사용하여, 받아온 데이터를 실시간으로 GUI 화면에 그래프 출력 및 에러에 대한 로깅, 경고메시지 출력을 진행하였습니다.
엔진마운트
엔진마운트는 엔진에서 발생하는 진동을 차체 전체로 퍼지지 않도록 흡수하는 고무 부품으로 정상 차량, 불량 차량, 오래된 차량에 대해 구분할 수 있는 특징을 찾아내는 업무였습니다.
적분하여 차체와 엔진 자체 차이의 넓이구하기, 차체 기준으로 가장 큰 진동을 보였던 Peak값 찾아서 평균 내보기, Peak 인근지점 5개를 합쳐 평균 내보기등 여러 시도를 했지만 결국 특징 추출에 성공하지 못하여 다른 연구원님께 일이 넘어갔던 업무였습니다.
남양 HK 연구소 데이터 수집
차량 볼트 체결시에 강하게 볼트가 체결될수록 철판들의 밀어내는 척력에 의해 볼트의 길이가 길어집니다. 그래서 체결 전 보트의 길이를 측정하고, 체결 후 볼트의 길이를 측정하여 이를 결과값으로 설정하고, 볼트 체결 기계에 기록되는 시간과 degree 기반 데이터(체결선도)를 기반으로 분석 및 AI를 설계하여 체결력 예측하는 것이 목표였습니다.
분석 및 AI개발은 저의 업무는 아니었지만 데이터 수집을 진행하여 차량 50대 볼트 300개 분량의 데이터를 수집하였습니다.
스마트 휠 센서 분석
차량 바퀴에 가속도, 자이로, 지자기 센서를 부착하여 데이터를 측정하고 원본데이터로 맨홀, 이음새, 포트홀(도로에 구멍), 방지턱 을 구분하기 위한 시각화를 진행하였습니다.
왼쪽 오른쪽 센서 데이터를 한쌍으로 묶어 pothole, manhole vs seam,bump 구분에는 성공했습니다.
얼마나 차체가 크게 움직이냐에 따라 분석해본 결과 이음새를 밟았을 경우 차체가 많이 움직임을 볼 수 있었습니다 다만 충격량의 경우 속력과 장애물의 형태에 영향을 크게 받아 애매한 분석 결과라 생각되었습니다.
맨홀의 경우 철로 구성되어 있기 때문에 지자기 센서에 영향을 줄 수도 있다는 가정에는 몇몇 데이터에서 유의미한 결과가 보여 맨홀은 어느정도 구분이 가능하겠다는 결과를 얻을 수 있었습니다.
스마트 휠 센서 프로그램 수정
Python 라이브러리 PyQt 기반으로 개발한 GUI 코드의 리팩토링을 담당하였습니다. 센서에서 들어오는 입력을 GUI 화면으로 그래프 형식으로 출력하고, 차량 노면의 이상 정보들을 출력하는 것이 목적이었습니다.
PyQt의 경우 웹 개발에 사용되는 CSS와 유사한 QML로 디자인을 담당하고(python 코드로도 작성 및 변환이 가능) 센서 데이터 클래스 형태로 전달하는 것을 Python에서 받아와 백엔드처럼 데이터를 처리하는 형태로 웹/앱 구성과 굉장히 유사했습니다.
다만 데이터 전송 과정에서 백에서 qml에 js 처럼 구성된 function들을 직접 호출하는 경우 시간적인 낭비가 심했기에 따로 GUI를 담당하는 클래스와 연산을 담당하는 클래스로 구분하여 두 클래스간의 통신을 구현하였습니다. 또한 PyQt에서 GUI 화면을 출력하고, 연산하는 경우 쓰레드 직접 선언해주지 않는다면 정상적으로 GUI가 동작하지 않았기에 쓰레드에 대해 공부 후 적용하였습니다.
그래프를 그리는 것은 센서 데이터 자체를 전송하면 되었기에 어렵지 않았지만, 노면 검증의 경우 연산처리가 굉장히 많았기에 GUI의 성능적인 문제를 해결하기 위해 고쳐야 할 부분이 많았습니다. 노면 검증의 종류로는 1. 노면 이상상태 정보로 맨홀,포트홀,방지턱에 대한 구분을 하는 연산과 2. 노면 포장상태 정보로 노면의 거칠기를 계산하여 포장도로 ,비포장도로를 구분하는 것이었습니다. 마지막으로 3. 노면 마찰력 정보로 노면의 Dry/Wet에 대해 구분하는 연산이 필요했습니다.
센서 데이터의 경우 초당 약 72000개의 데이터가 2개의 센서를 통해 들어왔고 위의 3가지 노면 정보를 연산에 그대로 적용하다보니 성능적, 메모리적 문제가 발생하였습니다. 그렇기에 불필요한 부분들을 제거하고, 최대한 사이즈를 가볍게 하기 위한 리팩토링 과정을 수행하였습니다.
MDPS
H사의 R-MDPS 작동음 감성 불만으로 인해 오/과정비가 발생하여 새로운 소음 진단 기능 개발을 통한 기준을 제시하고 싶었다고 합니다.
뉴로센스, H사, M사가 협력하여 장비별 계측 결과를 합쳐서 결과를 내는것이 목적으로 저의 담당업무는 회사들의 센서 데이터를 시각화하여 어느정도 차이가 발생하는지 확인하는 것이었습니다.
어려웠던 점은 데이터 모두 단위, 포맷등이 달랐기 때문에 음성 데이터에 대해 dB, pascal에 대한 변환공식을 적용하는 것, 진동,소리데이터에 대해 FFT와 같은 시간-주파수를 다루는 데이터를 주파수-dB로 변환하는 함수가 소리, 진동별로 다 다르며, 데이터 개수 자체도 달랐기에 윈도우 사이즈와 같은 변환을 위한 상수값도 크게 달랐던 점이 있습니다.
안티탬퍼링 자료 조사
무기관련 회사에 임베디드 보안 소프트웨어 계약을 따내기 위해 필요한 자료들에 대해 조사를 진행했었습니다. 클라이언트측에서 원하는 내용은 소프트웨어적인 안티탬퍼링 기술로 소프트웨어 역공학 분석으로 인한 위변조를 막는 방법이었습니다. 여러 논문들을 참고하여 안티 탬퍼링 기법에 대한 예방, 탐지, 대응, 억지에 대해 정리 후 진행 후 자체적으로 생각나는 아이디어 몇가지를 제시하였습니다.
그 예시 중 하나로 백도어에 대한 대비로 파일 변경 혹은 포트, 프로세스의 변경이 존재하거나 정상 프로세스를 벗어난 경우 소프트웨어를 강제 종료 후 디가우싱 기법으로 저장매체를 파괴하는 방법이었습니다. 또는 저희 회사가 센서를 다루기 때문에 물리적으로 메모리 혹은 디스크를 꺼내려는 시도를 센서로 감지하여 동일하게 저장매체들을 파괴하는 방식을 제안하였습니다.
인턴 후 느낀점
회사간의 커뮤니케이션의 중요성에 대해 이해하게 되었습니다. 같은 회사의 팀원이라면 자리로 찾아가 직접 질문하여 빠른 결과를 얻을 수 있지만 회사간의 메일 전송의 경우 답장이 늦어져 프로젝트가 지연되거나 할 수 있기에 미리미리 약속을 잡고, 그 이전까지 업무를 무사히 마치는 것이 중요함을 알게 되었습니다.
또한 요구사항 전달과정에서 확실한 의사 표현의 중요성에 대해 알게 되었습니다. 회사간의 요구사항의 경우 클라이언트 측이 원하는 내용이 무엇이고, 우리 회사가 제공할 수 있고 없는 내용에 대해 정확히 이야기해주지 않으면 공상과학과 같은 요구를 제안하는 것을 볼 수 있었습니다. (재료값만 100만원인데,100만원에 해달라고 요구한다던가) 그만큼 요구사항이 중요하며 되는것과 안되는 것을 쳐내는 과정이 필요함을 느꼈습니다.
취업 도메인에 대한 고민을 하게 되었습니다. 차량 관련하여 알고 있는 정보가 많지 않다보니 회사 초기 데이터 분석에 대한 주도적인 결과를 내놓지 못했습니다. 확실히 데이터 분석의 경우 관련 도메인 지식을 가진 사람이 분석툴인 파이썬이나 Ruby언어를 익혀 진행하는 쪽이 더 효율적이겠구나 라는 생각이 들었습니다. 취업에 도메인은 상관없다 생각해왔지만 제가 잘 알고 좋아하는 도메인 혹은 크게 상관없는 도메인 쪽으로 취업한다면 초반 회사 적응이 더 쉬울 수 있겠구나 하는 생각이 들었습니다. 물론 도메인은 크게 상관은 없다라는 생각이 바뀌지는 않았습니다!
질문하는 방법에 대해 배웠습니다. 아는척하는 것보다는 모르는 것은 질문하는 것이 더 좋은 방법이라 생각합니다. 그럼에도 최대한 시도해보고 질문을 하는 것이 중요하다는 것을 알게 되었습니다. 질문을 하더라도 제가 질문 내용에 대해 이것저것 시도해보지 않았다면 결국 다시 질문하러 가는 경우를 겪어봤습니다. 그렇기에 질문 전에 최대한 아는만큼 시도해보고, 질문 내용들을 미리 정리하고 가서 사수를 불편하지 않도록하는 과정이 필요함을 느꼈습니다.
좋은 코드에 대해 고민하게 되었습니다. 코드를 보기 좋게 만든다고 생각했지만 막상 제가 작성한 코드도 1주일 뒤에 확인하면 기억이 나지 않아 헤멨던 경험이 있습니다. 작성한 코드를 실제 현장에서 작동시킬 경우 발생하는 사소하지만 크리티컬한 문제들을 해결하면서, 변수명이 겹치거나 찾기 어려운 변수명을 사용하는 경우들이 종종 발견되었습니다. 확실한 저만의 룰을 만들거나 회사에서 제시하는 룰을 확실히 숙지하고 개발하는 습관을 길러야겠습니다.
데이터 분석은 제가 하고 싶은 일은 아니구나 라는 생각이 들었습니다. 데이터 분석은 회사와 관련된 도메인 지식이 있는 분들이 데이터 분석 툴인 파이썬과 시각화 라이브러리들을 익히고 접근하는 쪽이 더 좋은 분석 결과를 낼 수 있을 것이라는 생각을 가지게 되었습니다. 회사와 관련된 지식을 소프트웨어 학과 학생이 쌓는 것보다 코딩을 배우는 것이 시간적으로 더 효율적이라 느꼈기 때문입니다. 물론 프로젝트 진행에 있어 데이터 전처리와 데이터의 가치를 파악하기 위한 분석이 반드시 필요하지만 이걸 메인 업무로 일하는 데이터사이언티스트는 즐겁지 않겠다는 생각이 들었습니다.
결과적으로는 서버 관리자 혹은 백엔드 개발자가 되고 싶다는 생각은 바뀌지 않았습니다.
학교 프로젝트 단위에서 백엔드 역할을 담당이란 데이터 수집, 전처리, DB 설계 부터, DB에 적재한 데이터를 로직을 거쳐 json형태로 프론트나 Ios, Android 개발자 쪽으로 넘겨주는 역할로 생각하고 있습니다. 물론 클라이언트를 위한 트래픽 관리, 여러 보안 문제, 분산 서버 구축, 네트워크 관리등과 같은 여러 고려사항이 있지만 구현 단계는 위와 같았습니다. 그 중에서도 데이터를 불러와 저장하는 구간이 저에겐 특히 재밌게 느껴집니다! 나중에 경험이 쌓여 대용량 처리나 실제 배포를 위한 여러 고려사항들도 이 블로그에 적을 수 있다면 좋겠네요
'회고록' 카테고리의 다른 글
Neurosense 8개월간 회고록 (2) | 2024.09.06 |
---|---|
음성 데이터 처리 하며 느낀점 (0) | 2024.06.27 |
StandUpSeoul 프로젝트 (1) | 2023.07.04 |
국비지원 Playdata Encore후기 (0) | 2023.07.03 |
Django와 Spotify로 노래 추천 웹 개발 - 2 (0) | 2023.07.03 |