← → Flip · ESC Index
2026년 여름 · 현장실습 계획
Vol.01
RUNTIME 01

코드베이스 정리
개선 방향

긴 단일 코드에서 재현 가능한 프로젝트 구조로 전환한다.

Camera / Motor Control
Legacy
SDK 압축 해제본, 프린터 드라이버 중복본, 캡쳐, 코드 일지, 현장실습자료가 한 공간에 공존
Mixed
Runtime
문서, 원시 이미지 데이터, 로컬 wheel, 실행 프로젝트가 역할별 폴더로 분리
Scoped
Signal
설치 자료 보관소에서 재현 가능한 실험 제어 프로젝트로 중심이 이동
Shift
카메라, 모터 제어, GUI 등 다른 기능은 다른 모듈로 분리하여 유지보수성을 높인다
카메라-모터 제어 코드베이스
Internal · 2026
System Role · Hardware UI Algorithm
02 / 09
NOT A SCRIPT

기존 코드베이스의 역할

FLIR/Teledyne 카메라 2대, PySide6 GUI, Thorlabs Kinesis 모터, 중심점 계산과 자동 센터링이 한 흐름에서 함께 움직인다.

Camera
2
FLIR / Teledyne acquisition
GUI
Qt
PySide6 + pyqtgraph 표시
Motion
K
Thorlabs Kinesis 모터 제어
Process
XY
중심점 계산
Control
AUTO
자동 센터링 동작
Risk
HW
작은 수정도 장비 동작에 영향
단순 실행 파일이 아니라 결합 시스템
Eng Notes
Problem · Code Size
03 / 09
PROBLEM 01

한 흐름에 너무 많은 책임

R_TwoCam_TwoMotor.py
1.1K
기존 메인 실행 파일
definitions.py
500
공통 정의와 실행 보조 로직
integrated_version.py
7K+
통합 workflow가 커진 파일
GUI 생성, 카메라 획득, 중심점 계산, 로그 저장, 모터 이동이 같은 흐름에 있으면 어떤 수정이 어떤 기능을 깨뜨리는지 추적하기 어렵다. — maintenance risk
긴 파일 자체보다 책임 혼재가 문제
Problem 01
Problem · Runtime Reproducibility
04 / 09
PROBLEM 02

실행 환경 재현이 어려움

새 PC나 다른 Python 버전에서 실행하면 dependency mismatch가 발생하기 쉬움

재현성이 없으면 “코드 문제인지 환경 문제인지” 구분하는 데 시간이 많이 든다. — debugging cost
Python
3.10
Pinned
PySpin
Spinnaker / PySpin 4.2.0.88
Wheel
NumPy
2.2.6
Exact
pythonnet
3.0.5
Exact
PySide6
6.9.3
GUI
pyqtgraph
0.13.3
Plot
환경 고정 없이는 장애 원인 분리가 어렵다
Runtime
Shift · Boundary
05 / 09
THE SHIFT

지금 실행되는 코드와
실험용 코드 간 경계 불분명

실행 경로는 작고 명확해야 하고, 실험 workflow는 보존하되 메인 런타임과 분리되어야 한다.

운영 코드와 실험 코드의 경계
Question
Solution · File Boundary
06 / 09
SOLUTION 01

폴더는 역할의 경계를 보여줘야 한다

Before

한 폴더 안에 공존

  • 실행 코드
  • vendor 예제와 설치 파일
  • 실험용 통합 workflow
  • 현재 경로인지 참고용인지 불명확
After

역할별 디렉터리

  • src/ 현재 구현
  • tests/ 회귀 테스트
  • experiments/ 실험 workflow
  • legacy/root/ 이전 구현 snapshot
  • vendor/wheels/ 로컬 PySpin wheel
분리는 미화가 아니라 책임의 소유권 지정
Before / After
Solution · Runtime Pipeline
07 / 09
RUNTIME PIPELINE

가상환경 도입과 실행 명령 고정

Verification Flow
01
Pin
pyproject.toml로 Python과 dependency 고정
02
Sync
uv sync로 동일 환경 생성
03
Run
uv run python R_TwoCam_TwoMotor.py
04
Offline
장비 없이 GUI와 일부 로직 확인
05
Hardware
timing과 calibration은 마지막에 장비로 검증
목표는 “한 번 돌아간 환경”이 아니라 “다른 자리에서도 다시 만들 수 있는 환경”이다. — reproducible runtime
uv sync에서 hardware run까지
Pipeline
Solution · Module Boundary
08 / 09
MODULE MAP

알고리즘 / UI / 장비 초기화 분리

01
App Startup
src/app.py | src/startup.py
online / offline runtime 생성
02
Camera Lifecycle
src/pyspin_controller.py
카메라 연결, 획득, 종료 책임
03
Processing Rules
src/processing.py | src/motion_rules.py
중심점과 이동 판단
04
Motor Control
src/manual_controls.py | src/auto_controller.py
수동 / 자동 모터 제어
수정 단위를 작게 만들기 위한 모듈 경계
Module Map
Result · Problem to Solution
09 / 09
FINAL MAP

정리

목표는 코드를 예쁘게 나누는 것이 아니라, 장비 제어 프로그램을 다시 실행 가능하고 수정 가능한 상태로 만드는 것이다.

01
파일이 커져 수정 영향 범위가 보이지 않음
모듈 경계 분리
processing / motion / motor
02
SDK, 드라이버, 실험 자료, 실행 코드가 한 공간에 섞임
역할별 디렉터리
src / tests / vendor
03
같은 프로그램을 다른 환경에서 재현하기 어려울 수 있음
실행 환경 고정
pyproject.toml + uv sync
04
장비가 없으면 GUI와 일부 로직 검증이 멈춤
offline runtime
hardware run 전 사전 확인
기존 문제를 구조, 환경, 모듈 경계로 닫는다
Summary