면접 대비 기술 정리
포트폴리오 기준 면접 대비용 정리 문서
각 항목: ① 정의 → ② 특징/종류(하위 개념 포함) → ③ 프로젝트 연결 → ④ 꼬리질문 대비
⚠️ 표시 = 실제로 깊게 다루지 않은 것
작성 범위
- ROS2 핵심
- 자율주행 · SLAM · 경로 · 측위
- 컴퓨터비전 · 딥러닝
- 임베디드 · 하드웨어 · 통신
- 언어 · CS 개념
- ML · 데이터 · NLP
- 웹 · DB · GUI · 수집 · 환경
1. ROS2 핵심
개념 뼈대
ROS2 (Humble Hawksbill)
- 정의: 로봇 SW 제작용 프레임워크(미들웨어). OS라는 이름과 달리 실제 OS 아님. 우분투 등 OS 위에서 도는 도구 모음.
- 특징: 기능별로 잘게 쪼갠 '노드'들이 메시지로 협력하는 구조. Humble은 우분투 22.04용 LTS(장기지원) 버전명.
- 프로젝트: 공기청정 로봇 · YOLOv8 비상정지 · PACK 모두 Humble.
- 꼬리질문: "왜 ROS를 쓰나요?" → 통신·센서·구동 코드 재작성 불필요, 표준 노드·토픽 구조와 검증된 패키지(Nav2 등) 재사용 가능.
rclpy
- 정의: ROS2의 파이썬용 API 라이브러리.
- 특징: 노드 생성·토픽 발행/구독을 전부 파이썬으로. C++용은
rclcpp. 둘 다 내부적으로rcl(C 라이브러리) 공유(그래서 rcl+py, rcl+cpp). - 프로젝트: ROS2 노드 전부 rclpy 작성.
rclpy.init()→Node상속 →create_publisher/create_subscription→rclpy.spin()패턴.
노드 (Node)
- 정의: ROS2의 독립 실행 단위(프로그램 하나).
- 특징: 기능별 분리로 하나가 죽어도 전체 정지 방지. 노드 간 직접 함수 호출 아닌 메시지 소통.
- 비유: 회사의 부서 하나. 각자 일하고 서류(메시지)로 소통.
- 프로젝트: 공기청정 로봇 노드 14개 분리(경로탐색·FSM·MQTT 브리지·센서 수신 등).
- 꼬리질문: "왜 14개나?" → 기능 분리로 디버깅·재사용 용이, 한 노드 오류의 전체 전파 방지.
Topic / Service / Action (노드 간 통신 3방식)
가장 자주 나오는 질문. 셋의 명확한 구분이 핵심.
- Topic: 단방향 지속 발행, 응답 안 기다림(예: 센서값·위치·속도 명령).
- 발행자(Publisher)·구독자(Subscriber) 구성. 1:N, N:N 가능.
- 비유: 라디오 방송(송출, 듣든 말든).
- Service: 요청 → 응답 1회, 짧게 종료(예: "지금 위치 알려줘").
- 클라이언트(요청)·서버(응답) 구성. 1:1.
- 비유: 전화 문의(묻고 바로 답).
- Action: 장시간 작업 + 중간 피드백 + 취소 가능(예: "저기까지 이동해").
- Goal(목표)/Feedback(진행률)/Result(최종결과) 3부분.
- 비유: 택배 배송(주문 → 추적 → 도착).
- 프로젝트: PM 값·로봇 위치는 Topic 지속 발행, Nav2 목표 이동은 Action 처리.
DDS (Data Distribution Service)
- 정의: ROS2가 노드 간 데이터를 실제로 주고받는 통신 표준(배관).
- 특징: ROS1/ROS2 최대 차이. ROS1은 중앙 마스터(roscore) 필수 → 마스터 사망 시 전체 마비. ROS2는 DDS 기반 마스터 없는 노드 직접 통신(분산 구조).
- 하위 개념:
- RMW (ROS Middleware): ROS2와 DDS 사이 중간 계층. 코드 변경 없이 DDS 구현체 교체용 어댑터.
- DDS 구현체 종류: Fast DDS(Humble 기본값), Cyclone DDS(가볍고 안정적), Connext(상용). 환경변수
RMW_IMPLEMENTATION으로 변경. - 자동 탐색(Discovery): 같은 네트워크 노드끼리 자동 발견 → IP 일일이 지정 불필요.
- 프로젝트: DDS 직접 조작 경험 없음. "ROS2 사용 = DDS 기반" 개념만 인지, ROS1/ROS2 차이 설명용.
- 꼬리질문: "DDS 구현체 바꿔봤나요?" → 기본값(Fast DDS)만 사용, 개념만 설명.
QoS (Quality of Service)
- 정의: 토픽 통신의 '품질 정책'. 메시지 도착 보장 수준·저장 방식 설정.
- 종류(하위 개념):
- Reliability:
RELIABLE(도착 보장, 유실 시 재전송) vsBEST_EFFORT(빠르지만 유실 허용 — 카메라·라이다 등 최신값 우선 데이터에 적합). - Durability:
VOLATILE(현재 이후 메시지만) vsTRANSIENT_LOCAL(늦게 접속한 구독자에게도 마지막 메시지 전달 — 맵 데이터에 적합). - History:
KEEP_LAST(최근 N개) vsKEEP_ALL(전부). - Depth: KEEP_LAST 시 보관 개수(큐 크기).
- Reliability:
- 비유: 택배의 "안심배송(도착 보장) vs 일반배송(빠름)" 선택.
- ⚠️ 프로젝트: QoS 깊은 튜닝 경험 없음. 개념만 인지, "센서 데이터는 BEST_EFFORT가 적합" 정도만 답변.
표준 메시지 타입 (std_msgs / geometry_msgs)
- 정의: ROS2 사전 정의 메시지 형식. 노드 간 동일 형식 사용 필수.
- 종류:
- std_msgs: 기본형(Bool·String·Int32·Float64 등). 예) 비상정지 신호 =
Bool. - geometry_msgs/Twist: 로봇 속도 명령 전용.
linear.x(전진),angular.z(회전). - (참고) sensor_msgs/Image: 카메라 이미지, nav_msgs/OccupancyGrid: 맵 데이터.
- std_msgs: 기본형(Bool·String·Int32·Float64 등). 예) 비상정지 신호 =
- 프로젝트: 비상정지 신호 =
std_msgs/Bool, 로봇 주행 =Twist를/cmd_vel로 발행.
빌드 · 실행 도구
colcon
- 정의: ROS2 패키지 빌드 도구(코드를 실행 가능 상태로 변환).
- 핵심 명령:
colcon build --packages-select <패키지명> --symlink-install - 하위 개념:
--packages-select: 특정 패키지만 빌드(전체 빌드는 느림).--symlink-install: 파이썬 파일 수정 즉시 반영(재빌드 불필요).
- 프로젝트: 매번
colcon build후source install/setup.bash. - 꼬리질문: "빌드 후 왜 source?" → 빌드 결과 경로를 현재 셸에 등록해야
ros2 run이 패키지 인식.
launch 파일
- 정의: 여러 노드 일괄 실행용 실행 대본(파이썬,
.launch.py). - 특징: 노드 다수를 명령 하나로 기동. 파라미터·리매핑도 지정.
- 프로젝트: 공기청정 로봇 14노드+6브리지 단일 launch 통합 기동. 강점 어필 소재.
TimerAction
- 정의: launch에서 "몇 초 뒤 실행"으로 노드 지연 기동시키는 기능.
- 필요 이유: 노드별 준비 시간 차이로 순서 어긋나면 뒤 노드가 앞 노드 못 찾고 사망.
- 프로젝트: YOLOv8 비상정지에서 Gazebo → 웹캠 → YOLO → 주행 순차 기동 보장("초기화 순서 보장").
토픽 리매핑 (remapping)
- 정의: 노드 코드 수정 없이 실행 시점에 토픽 이름 교체.
- 비유: 코드 유지, 배관 연결만 변경.
- 프로젝트: 비상정지에서 기존 주행 노드 무수정,
/cmd_vel→/cmd_vel_raw→ (필터 노드) →/cmd_vel리매핑으로 중간에 정지 필터 삽입. "기존 코드 무수정 기능 추가" = 실무 감각 어필 최고 소재.
ROS2 CLI
- 정의: 터미널에서 ROS2를 다루는 명령어들.
- 자주 쓰는 것:
ros2 run <패키지> <노드>: 노드 1개 실행.ros2 launch <패키지> <런치>: 런치 실행.ros2 topic list(목록),echo <토픽>(값 확인),hz <토픽>(발행 주파수).ros2 node list: 노드 목록.
- 프로젝트: 디버깅 시
echo로 값 확인,hz로 발행 주파수 확인.
RQt
- 정의: ROS2 상태 시각화 GUI 도구 모음.
- 특징:
rqt_graph로 노드·토픽 연결 관계 시각화. 통신 오류 진단용. - 프로젝트: 노드 다수 시 연결 구조 확인용.
turtlesim
- 정의: ROS2 학습용 거북이 시뮬레이터(연습용 장난감).
- 특징: 실물 없이 토픽 발행 연습. ROS2 입문 필수 코스.
- 프로젝트: 웹-ROS 연동 실습에서 roslibjs로 브라우저에서
/turtle1/cmd_vel발행, 거북이 조종.
연동 라이브러리
cv_bridge
- 정의: OpenCV 이미지 ↔ ROS2 이미지 메시지 변환 다리.
- 필요 이유: OpenCV 형식(numpy 배열)과 ROS2 형식(sensor_msgs/Image) 상이.
- 프로젝트: 웹캠 영상 → ROS2 토픽 발행, YOLO 입력 전 변환(비상정지).
camera_ros
- 정의: 카메라 영상 → ROS2 토픽 발행 노드 패키지.
- 프로젝트: PACK 로봇팔에서 Pi Camera 영상 ROS2 수신.
rosbridge_server
- 정의: ROS2 ↔ 웹 브라우저(JavaScript)를 WebSocket으로 연결하는 서버.
- 필요 이유: 브라우저는 ROS2 직접 불가 → rosbridge가 통역사(기본 9090 포트).
- 프로젝트: 웹 대시보드(roslibjs/ros2djs)에서 로봇 제어·맵 시각화. "PyQt 의존 없는 브라우저 제어"의 핵심.
비교용
ROS1 vs ROS2
- 정의: ROS1은 ROS2의 이전 세대.
- 차이 요약:
- ROS1: 중앙 마스터(roscore) 필수 → 마스터 사망 시 전체 마비.
- ROS2: DDS 기반 분산 → 마스터 불필요, 안정적. 실시간성·보안 강화, 멀티 로봇 유리.
- 프로젝트: 초기 TurtleBot3 관제 GUI 실습에서 ROS(1) 접함. "ROS1 개념 인지, 실무는 ROS2 중심"으로 답변.
2. 자율주행 · SLAM · 경로 · 측위
내비게이션 프레임워크
Nav2 (Navigation2)
- 정의: ROS2 표준 자율주행 패키지 모음. "출발지→목적지 자율 주행" 담당.
- 하위 구성(Nav2 내부 요소):
- Planner(경로계획기): 목적지까지 전체 경로 생성(기본 A* 계열).
- Controller(추종기): 경로 추종용 바퀴 속도 명령 생성(DWB 등).
- Costmap(비용지도): 맵에 장애물 위험도를 점수화. 벽 근처 비용↑.
- BT Navigator(행동트리): 전체 주행 흐름 트리 관리(막힘 시 복구 등).
- Recovery(복구행동): 막힘 시 제자리 회전·후진 등 탈출 시도.
- 프로젝트: 공기청정 로봇에서 웹 명령 기반 이동은 Nav2 Action 처리. 단, 자동 출동 주행은 A*+Pure Pursuit 직접 구현으로 Nav2 의존 최소화(차별점).
- 꼬리질문: "Nav2 두고 왜 A* 직접?" → 경로계획 로직 직접 이해·제어 목적, FSM과 긴밀 연동 필요.
AMCL (Adaptive Monte Carlo Localization)
- 정의: 기존 맵 위에서 "로봇의 현재 위치" 추정 알고리즘.
- 원리(하위 개념):
- 파티클 필터(MCL): 위치 후보(파티클) 수백 개를 맵에 뿌리고, 라이다값과 맵이 맞는 파티클에 높은 점수 → 실제 위치로 수렴.
- Adaptive: 확신 높으면 파티클 축소, 헷갈리면 증가 → 효율↑.
- 비유: 낯선 건물에서 창밖 풍경(라이다)과 지도(맵) 대조로 위치 좁혀가기.
- 프로젝트: 공기청정 로봇 SLAM 맵 위 위치추정. 초기 위치는
auto_initial_pose노드로 자동 발행.
Cartographer (SLAM)
- 정의: 구글 SLAM 라이브러리. 로봇 주행하며 맵 최초 생성 도구.
- SLAM이란: Simultaneous Localization And Mapping. "지도 생성 + 동시에 위치 파악". 지도·GPS 없는 실내 필수.
- AMCL과 차이(중요): Cartographer/SLAM = 맵 생성 단계, AMCL = 기존 맵 위 위치 파악 단계. 순서: SLAM 맵 생성 → 저장 → 이후 AMCL 주행.
- 프로젝트: 최초 1회 Cartographer로 맵 생성,
map_saver_cli로 저장, 이후 AMCL 주행.
map_saver_cli
- 정의: SLAM 생성 맵을 이미지(.pgm)+설정(.yaml)으로 저장하는 명령.
- 프로젝트:
ros2 run nav2_map_server map_saver_cli -f ~/map으로 맵 저장.
Navigation Stack / MoveBase
- 정의: ROS1 시절 자율주행 패키지(Nav2의 전신). MoveBase가 핵심 노드.
- ⚠️ 프로젝트: 커리큘럼 개념 학습만, 실제는 Nav2(ROS2). "MoveBase = Nav2의 ROS1 버전" 수준만 인지.
경로계획 · 추종
A* 알고리즘
- 정의: 출발점→목적지 최단 경로 탐색 대표 알고리즘.
- 원리(하위 개념 — 면접 단골):
- 지점별 비용 = g + h.
g=출발점부터 실제 비용,h=목적지까지 예상 비용(휴리스틱). - f = g + h 최소 지점 우선 탐색(우선순위 큐).
- 휴리스틱(h) 종류: 맨해튼 거리(격자 4방향), 유클리드 거리(직선), 대각선 거리(8방향).
- 다익스트라 + "목적지 방향 힌트(h)" = A*. 그래서 더 빠름.
- 지점별 비용 = g + h.
- 비유: 미로에서 전체 탐색(다익스트라)이 아닌 "출구가 저쪽" 감을 더한 탐색(A*).
- 프로젝트: 공기청정 로봇에서 SLAM 맵 기반 최단 경로 A* 직접 계산. 장애물 팽창(inflation)으로 벽 밀착 방지.
- 꼬리질문: "시간복잡도?" → 휴리스틱에 따라 상이, 최악은 다익스트라 유사. "휴리스틱 뭐 썼나요?" 답변 준비(격자 기반이면 맨해튼/유클리드).
Pure Pursuit
- 정의: 정해진 경로를 부드럽게 추종하는 제어 기법.
- 원리(하위 개념):
- 경로 위 로봇 앞쪽 일정 거리의 점(lookahead point)을 목표로 곡선 추종.
- lookahead distance(전방 주시 거리): 짧으면 밀착하되 흔들림↑, 길면 부드럽되 코너 안쪽 잘림. 튜닝이 핵심.
- 비유: 운전 시 바로 앞 범퍼 아닌 저 앞을 보고 핸들 부드럽게 조작.
- A*와 역할 분담(중요): A* = "경로 생성", Pure Pursuit = "그 경로 추종용 핸들·속도 생성". 상호보완.
- 프로젝트: A* 생성 경로를 Pure Pursuit 추종. lookahead distance(0.30m)·최대 회전속도 튜닝에 시간 소요(아쉬운 점).
Safety Cost Map (안전 비용지도)
- 정의: 장애물 근접도에 따라 '비용'을 높게 매긴 지도. 경로계획 시 위험 구역 회피용.
- 프로젝트: A*가 이 비용 반영 → 장애물 근접 시 비용↑ → 안전 경로 생성.
장애물 팽창 (inflation)
- 정의: 맵의 장애물을 로봇 반경만큼 부풀려 표시.
- 이유: 로봇을 점으로 계산하되 장애물을 키우면, 벽 충돌 없는 경로 자동 생성.
- 프로젝트:
inflation_radius파라미터 조정. 좁은 통로에서 이 값·로봇 크기 균형 조정 난항(아쉬운 점).
웨이포인트 주행
- 정의: 여러 목표점(waypoint)을 순서대로 경유하는 주행.
- 프로젝트: 순찰 모드 node1 → node2 → node3 → home 순환. PACK 추종 차량 웨이포인트 복구 탐색.
측위 · 마커
ArUco 마커
- 정의: 흑백 사각형 패턴 인식용 마커(QR코드 단순 버전). 카메라로 위치·방향·ID 판독.
- 하위 개념:
- 딕셔너리: 마커 규격. 예)
DICT_4X4_50= 4x4 격자, 50개 ID. 격자 클수록 ID 많고 인식 까다로움. - 각 마커는 고유 ID 보유. 검출 시 ID + 4모서리 좌표 반환.
- 딕셔너리: 마커 규격. 예)
- 프로젝트(두 곳):
- 공기청정 로봇: 홈 복귀 시
DICT_4X4_50, ID 0마커로 정밀 도킹. - PACK: 벽면 50여 개 마커 맵으로 추종 차량 위치추정, 앞차 후면 마커(ID 98/97) 추적.
- 공기청정 로봇: 홈 복귀 시
solvePnP (멀티마커 측위)
- 정의: 카메라에 보이는 점들의 2D 위치로 카메라(로봇)의 3D 공간 위치 역산하는 OpenCV 함수.
- PnP란: Perspective-n-Point. "n개 점으로 관점(카메라 위치) 풀기".
- 결과물: 회전 벡터(rvec)+이동 벡터(tvec) = 카메라 자세·위치.
- 프로젝트: PACK 추종 차량에서 다수 ArUco를 solvePnP로 풀어 절대 위치 획득. 재투영오차 기반 이상치 제거로 튀는 값 필터링.
엔코더 오도메트리
- 정의: 바퀴 회전수(엔코더 틱)로 로봇 이동/회전량 추정.
- 한계: 바퀴 미끄러짐 누적 시 오차 지속 증가(마커·라이다 보정 필요).
- 프로젝트: PACK에서 마커 미검출 시 엔코더 추측항법(dead reckoning). 마커 재검출 시 위치 보정.
차동구동 적분 (differential drive)
- 정의: 좌/우 바퀴 속도차로 로봇 이동·회전 계산(2바퀴 로봇 기본 운동학).
- 원리: 양 바퀴 동속=직진, 속도차=회전. 시간 적분 시 위치 산출.
- 프로젝트: PACK 4WD 차량에서 바퀴 둘레 0.21m, 트랙 0.23m, 3600 cnt/rev 기준 위치 적분.
센서 퓨전 (마커 + 엔코더)
- 정의: 2개 이상 센서 정보 결합으로 정확도 향상.
- 이유: 마커는 정확하나 간헐적 미검출, 엔코더는 상시 가능하나 오차 누적. 결합 시 상호 보완.
- 프로젝트: PACK에서 마커 검출 시 마커 우선, 미검출 시 엔코더 보완. 마커 개수별 신뢰도 가중.
EMA 필터링 (지수이동평균)
- 정의: 값 튐을 부드럽게 다듬는 필터. 새 값과 이전 평균의 가중 평균.
- 공식:
평균 = α × 새값 + (1-α) × 이전평균. α 크면 민감, 작으면 부드러움. - 비유: 온도계 순간 튐도 "대충 이 정도"로 완만 반영.
- 프로젝트: 공기청정 로봇 ArUco 도킹에서 프레임별 마커 위치 튐을 EMA로 안정화, 도킹 정밀도 확보.
FSM (유한상태기계, Finite State Machine)
- 정의: 시스템을 몇 개 '상태'로 나누고, 조건 충족 시 다음 상태로 전이하는 설계.
- 구성 요소: 상태(State)·전이(Transition)·이벤트/조건.
- if문과 차이: if문 수십 개는 흐름 꼬임·디버깅 난항. FSM은 "현재 상태" 명확 → 흐름 파악·확장 용이.
- 프로젝트: 공기청정 로봇 자동 출동 로직을 FSM 설계 —
IDLE → GO_TO_ZONE → CLEANING → RETURN. PACK 추종 제어도 FSM. - 꼬리질문: "상태 꼬임 처리?" → 타임아웃/안전정지 상태로 예외 시 안전 정지(실제 구현).
재투영오차 기반 이상치 제거
- 정의: 추정 3D 위치를 다시 2D 이미지로 되돌렸을 때 원 관측점과의 오차(재투영오차)로 잘못된 마커 필터링.
- 프로젝트: PACK에서 다수 마커 동시 처리 시 오차 큰 마커 제거로 위치 튐 방지.
3. 컴퓨터비전 · 딥러닝
딥러닝 프레임워크 · 백본
PyTorch
- 정의: 딥러닝 모델 제작·학습용 대표 프레임워크(메타 제작).
- 특징: 파이썬 친화적·직관적. 연구·실무 표준급. 텐서(다차원 배열) 연산 + 자동미분이 핵심.
- 프로젝트: 졸업논문 이미지 모델(EfficientNet-B2) 학습.
timm (PyTorch Image Models)
- 정의: 유명 이미지 모델 수백 개 사전 구현 라이브러리. 한 줄 호출 사용.
- 프로젝트: EfficientNet-B2 백본을 timm으로 호출.
EfficientNet-B2
- 정의: 적은 연산으로 높은 정확도 목표의 이미지 분류 모델(구글).
- 하위 개념:
- Compound Scaling: 깊이·너비·해상도를 균형 있게 동시 확장(EfficientNet 핵심 아이디어).
- B0~B7: 크기 등급. 숫자 클수록 정확하나 무거움. B2는 중간급.
- 백본(backbone): 이미지 특징 추출 몸통. 뒤에 분류기 부착해 용도별 사용.
- 프로젝트: 졸업논문 가짜뉴스 이미지 판별 백본. 입력 300x300, Fine-tuning.
- 꼬리질문: "왜 B2?" → Colab T4 GPU(16GB) 환경에서 정확도·학습속도 균형. 더 큰 모델은 메모리·시간 부담.
객체 탐지 (YOLO 계열)
YOLO 기본 개념 (v3, v8 공통)
- 정의: You Only Look Once. 이미지 1회 관찰로 객체 위치(박스)+종류 동시 탐지하는 실시간 모델.
- 하위 개념(면접 핵심):
- One-stage vs Two-stage: YOLO는 원스테이지(위치+분류 동시) → 빠름. Faster R-CNN 등은 투스테이지(후보 추출 → 분류) → 느리나 정밀.
- Bounding Box: 객체 감싸는 사각형. (x1,y1,x2,y2) 또는 (중심+너비높이).
- Confidence(신뢰도): 박스 내 객체 존재 확률. 임계값(0.5) 미만 제거.
- NMS (Non-Maximum Suppression): 한 객체에 박스 다수 겹칠 때 최고 신뢰도만 남기고 제거.
- IoU (Intersection over Union): 두 박스 겹침 정도(교집합/합집합). NMS 중복 판정 기준(0.4 등).
- 프로젝트: 여러 프로젝트 사용(버전별 하기).
YOLOv3
- 특징: OpenCV
cv2.dnn모듈로 직접 로드. 가중치(.weights)+설정(.cfg)+클래스명(.names) 필요. - 핵심 코드:
cv2.dnn.readNet→blobFromImage(전처리) →forward(추론) →NMSBoxes(중복 제거). - 프로젝트: COCO 80클래스 사전학습 모델로 이미지·웹캠 객체 검출 실습.
YOLOv8 (n/s/m)
- 특징: ultralytics 라이브러리로 간편.
YOLO("yolov8n.pt")한 줄. 뒤 글자는 크기(n=nano 초경량, s=small, m=medium). - 프로젝트:
- 비상정지: YOLOv8n(경량)으로 스마트폰(cell phone) 실시간 검출 → 검출 시 로봇 정지.
- 커스텀: Roboflow 라벨링 동물 6종 데이터셋을 YOLOv8s로 직접 학습.
- ⚠️ 주의: 비상정지·동물 프로젝트는 사전학습 추론 또는 간단한 커스텀 학습 수준. "YOLO 밑바닥 설계·개선" X. "사전학습 모델 활용 + 커스텀 데이터 학습 경험"이 정확한 표현.
ultralytics
- 정의: YOLOv8 제공 회사/라이브러리. 학습·추론·검증을 명령 한 줄로.
- 프로젝트:
yolo detect train ...으로 커스텀 동물 모델 학습.
Roboflow
- 정의: 이미지 라벨링(박스 그리기)·데이터셋 관리 온라인 툴.
- 프로젝트: 동물 6종 데이터셋 직접 라벨링 후 YOLOv8 학습.
OpenCV · 영상처리
OpenCV (cv2)
- 정의: 이미지·영상 처리 표준 라이브러리. 읽기·변환·검출 등 대부분 지원.
- 프로젝트: HSV 색검출·ArUco 인식·카메라 캘리브레이션·영상 전처리 등 광범위 사용.
cv2.dnn (readNet / blobFromImage / forward)
- 정의: OpenCV 내 딥러닝 실행 모듈. 학습 모델 로드 후 추론만 가능(학습 불가).
- 하위 함수:
readNet(모델 로드)·blobFromImage(입력 규격 전처리·정규화)·forward(추론 실행). - 프로젝트: YOLOv3 구동.
NMS (NMSBoxes)
- 정의: 상기 YOLO 개념 참고. 겹친 박스 중복 제거.
cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4). - 프로젝트: YOLOv3 결과에서 신뢰도 0.5 미만 + 겹침 0.4 이상 박스 제거.
HSV 색검출
- 정의: 색을 색상(Hue)·채도(Saturation)·명도(Value)로 표현해 특정 색만 추출.
- RGB 대신 HSV 이유: RGB는 조명 변화에 값 크게 흔들림, HSV는 색상(H)이 조명 변화에 상대적 강함 → 색 검출 유리.
- 프로젝트: PACK 로봇팔에서 주황 물건 HSV 검출, 16Hz 안정 동작. 색 블롭 중심(cx) 추출 후 파지.
비주얼 서보잉 (eye-in-hand)
- 정의: 카메라 영상 정보로 로봇 실시간 제어. eye-in-hand = 카메라를 로봇 손(집게)에 장착.
- 프로젝트: PACK 로봇팔에서 집게 안쪽 카메라로 물건 중심 추출, 베이스 회전 정렬 후 파지(전환 시도 중, 진척도 50%).
- ⚠️ 주의: "시도 중/미완성"으로 완성이란 말은 자제.
카메라 캘리브레이션
- 정의: 카메라 렌즈 왜곡·초점 특성(내부 파라미터) 측정·보정 과정.
- 필요 이유: 렌즈는 이미지를 미세 왜곡. solvePnP 등 정밀 측위에 보정 필수.
- 프로젝트: PACK에서 타 팀원이 주 담당. 나는 결과(camera_calibration.yaml) 측위 활용. "팀원이 캘리브레이션, 나는 활용"으로 구분.
학습 기법 · 보정 (졸업논문 이미지 모델)
TTA (Test-Time Augmentation)
- 정의: 추론 시 이미지를 여러 방식 변형(예: 좌우반전) 후 예측 평균. 정확도 소폭 향상.
- 프로젝트: 이미지 모델 추론 시 수평 반전(hflip) 평균 적용.
Temperature Scaling
- 정의: 모델의 과도한 확신 경향을 완화해 확률을 실제 정확도에 맞게 보정.
- 이유: 딥러닝 모델은 "99% 확신" 후 오답 빈번. 이를 현실적으로 완화.
- 프로젝트: 이미지 모델 확률 출력 보정(Abstain 판정 신뢰도 목적).
데이터 증강 (Data Augmentation)
- 정의: 학습 데이터 인위 변형으로 양·다양성 확보. 과적합 방지.
- 종류(사용분): Random Flip(반전)·Color Jitter(색 변화)·Cutout(일부 가림)·JPEG 압축(화질 저하 흉내).
- 프로젝트: 졸업논문 이미지 모델 학습 시 적용, 일반화 성능↑.
CLAHE
- 정의: 이미지 대비를 국소 향상시키는 기법(어두운 부분 부분적 밝힘).
- 프로젝트: PACK 마커 검출에서 마커 흐릴 때 다단계 검출(NORMAL → CLAHE → SHARP)의 한 단계로 사용.
3D 센서 (참고)
LiDAR
- 정의: 레이저 발사로 거리 측정하는 센서. 주변을 점으로 스캔해 장애물·벽 파악.
- ⚠️ 프로젝트: TurtleBot3에 LDS-03 라이다 장착됨, SLAM·AMCL이 활용. 단, 라이다 데이터 직접 가공 코드는 미작성. "SLAM/Nav이 라이다 사용" 개념 수준.
PCL (Point Cloud Library)
- 정의: 3D 점 데이터(포인트 클라우드) 처리 라이브러리.
- ⚠️ 프로젝트: 커리큘럼(AI 센서퓨전) 개념 학습만, 프로젝트 직접 사용 없음.
(4~7묶음 + 부록은 다음 단계에서 이어서 명사구로 추가됩니다.)
4. 임베디드 · 하드웨어 · 통신
통신 프로토콜 기본기 (하드웨어 간 대화 3대 방식)
I2C/SPI/UART는 목록엔 없으나, PCA9685(I2C)·시리얼(UART) 사용으로 통신 질문시 등장 가능
UART (시리얼 통신)
- 정의: 두 장치가 선 2개(TX 송신·RX 수신)로 1:1 데이터 교환하는 가장 기본 통신.
- 특징: 간단·범용. 통신 속도(baudrate, 예 9600·115200)를 양쪽 일치 필요.
- 비유: 두 사람의 무전기 1:1 대화. 말 속도(baudrate) 일치 필요.
- 프로젝트: 라즈베리파이 ↔ 아두이노(PACK 로봇팔), PMS7003 ↔ 아두이노 모두 USB 시리얼(UART).
pyserial로 파이썬 제어.
I2C
- 정의: 선 2개(SDA 데이터·SCL 클럭)로 여러 장치를 하나의 버스에 연결하는 통신. 장치별 고유 주소 보유.
- 특징: 선 2개로 다수 장치 연결(주소로 구분). 속도는 UART보다 빠르고 SPI보다 느림.
- 비유: 한 회의실(버스)에 여러 명, 이름(주소) 호출로 특정인과 대화.
- 프로젝트: PCA9685(서보 드라이버)·LCD를 I2C로 아두이노 연결.
SPI
- 정의: 선 4개로 고속 통신. 마스터-슬레이브 구조.
- 특징: 셋 중 최고속. 대신 선 다수 필요.
- ⚠️ 프로젝트: 직접 사용 기억 불명확. "I2C보다 빠르나 선 많은 방식" 개념만.
MCU · 보드
Arduino Uno R3
- 정의: 대표 MCU(마이크로컨트롤러) 보드. 센서·모터 등 하드웨어 직접 제어하는 초소형 제어기.
- 특징: OS 없이 코드(펌웨어) 직접 실행. 정해진 작업 실시간 반복에 특화.
- 프로젝트: PACK 로봇팔 서보 제어, 보조안전모듈 Board1, 장애물 회피 로봇 모두 아두이노 우노.
ESP8266 (ESP-01)
- 정의: WiFi 내장 초소형 MCU 모듈. IoT에 다수 사용.
- 하위 개념 — AT 명령:
- AT 명령: 모듈에 문자로 명령하는 방식(예:
AT+CWJAP=WiFi 접속,AT+CIPSTART=연결 시작). 원래 모뎀 제어용 명령 체계. - 통상 외부 WiFi 라이브러리 사용, 본인은 AT 명령 직접 구현으로 WiFi 통신 구성.
- AT 명령: 모듈에 문자로 명령하는 방식(예:
- 프로젝트: 보조안전모듈에서 ESP-01로 센서 데이터 UDP 전송. 외부 라이브러리 없이 AT 명령 시퀀스 직접 구현 = 저수준 이해 어필 소재. 공기청정 로봇은 ESP01+PMS7003으로 MQTT 발행.
- 꼬리질문: "왜 라이브러리 없이 AT 직접?" → 통신 흐름 정확 제어·디버깅 목적.
Raspberry Pi
- 정의: 리눅스 OS 구동 소형 컴퓨터(SBC, 싱글보드컴퓨터). 아두이노보다 강력.
- MCU와 차이(중요): 아두이노는 OS 없는 '제어기'(실시간 단순 반복), 라즈베리파이는 OS 있는 '컴퓨터'(무거운 연산·카메라·네트워크).
- 프로젝트: PACK 로봇팔에서 라즈베리파이가 카메라 영상 처리·MQTT 명령 수신 → 시리얼로 아두이노 전달하는 상위 두뇌. "판단은 라즈베리파이, 구동은 아두이노" 역할 분담이 핵심 설명 포인트.
구동 · 액추에이터
PWM 제어
- 정의: 전원 On/Off 비율(듀티 사이클)로 출력 세기 조절하는 방식.
- 하위 개념 — 듀티 사이클: 한 주기 중 켜진 비율. 50%면 절반 출력. LED 밝기·모터 속도·서보 각도 조절.
- 비유: 전등 스위치를 초고속 On/Off 시 켠 시간 비율만큼 밝기 조절.
- 프로젝트: RGB LED 밝기(거리 비례)·서보 각도 제어 모두 PWM.
PCA9685
- 정의: I2C 제어 16채널 PWM 드라이버 칩. 서보 다수 동시 정밀 제어.
- 필요 이유: 아두이노 자체 PWM 핀은 수 적고 정밀도 낮음. PCA9685로 채널 16개 안정 제어.
- 프로젝트: PACK 로봇팔 6채널 서보를 PCA9685(50Hz) 제어. 각도 → 펄스(us) → 틱 변환.
서보모터 (FT330M 35kg / MG996R)
- 정의: 지정 각도로 회전·유지하는 모터. PWM 신호로 각도 지정.
- 하위 개념:
- 각도-펄스 매핑: 서보는 펄스 폭(예 1000~2000us)으로 각도 수신. "각도 → 펄스 폭" 변환식을 펌웨어 내장.
- 오픈루프 한계: 이 서보들은 "현재 각도" 피드백 없는 오픈루프. 부하 크면 지정 각도 미달.
- 프로젝트: 로봇팔 6DOF를 FT330M 35kg 3개 + MG996R 3개 구성. 토크 다른 서보 2종 혼용으로 채널별 속도·범위 튜닝에 시간 소요(아쉬운 점). 안전 각도 범위 클램프 제한.
- ⚠️ 정직 포인트: 산업용 정밀 서보 아닌 취미용 PWM 서보. "정밀 위치제어" 과장 금지. "오픈루프 한계를 소프트웨어(안전범위 클램프·대기시간 확보)로 보완"이 정확한 서술.
DC모터 / AF Motor Shield (AFMotor)
- 정의: DC모터는 전원 방향·세기로 회전하는 기본 모터. AF Motor Shield는 아두이노 장착 모터 확장 보드.
- 하위 개념 — 차동 구동: 좌우 바퀴 속도차로 방향 전환(2묶음 차동구동 참고).
- 프로젝트: 장애물 회피 로봇, PACK 4WD 추종 차량 바퀴 구동.
쿼드러처 엔코더 + 핀체인지 인터럽트
- 정의:
- 쿼드러처 엔코더: 바퀴 회전량 + 방향까지 판독(A·B 두 신호 순서로 방향 판별).
- 핀체인지 인터럽트: 핀 신호 변화 시 즉시 함수 실행하는 기능.
- 하위 개념 — 폴링 vs 인터럽트(면접 단골):
- 폴링: "바뀌었나?" 지속 확인 → 놓칠 수 있고 비효율.
- 인터럽트: 변화 순간 하드웨어가 통지 → 빠른 엔코더 신호 미유실.
- 프로젝트: PACK 4WD 차량에서 엔코더 틱을 핀체인지 인터럽트로 카운트, 오도메트리 계산.
순운동학(FK) 충돌가드
- 정의: 관절 각도로부터 로봇팔 끝(집게) 공간 위치 계산 = 순운동학(FK). 위험 구역 진입 시 차단 = 충돌가드.
- FK vs IK(하위 개념):
- FK(순운동학): 관절 각도 → 끝 위치 계산(쉬움, 해 하나).
- IK(역운동학): 원하는 끝 위치 → 필요 관절 각도 역산(어려움, 해 다수 가능).
- 프로젝트: 펌웨어에 FK 충돌가드 내장 — 집게 끝이 베이스 반경 진입 시 자동 정지.
- ⚠️ 정직 포인트: README 기준 구현분은 FK 기반 충돌가드. "IK로 팔을 풀었다"는 확실한 근거 있을 때만(auto_pick은 측정 각도 기반). 질문 시 "충돌 방지는 FK, 피킹은 물건별 각도 세팅"으로 구분.
센서
HC-SR04 (초음파 거리센서)
- 정의: 초음파 발사 후 반사 시간으로 거리 측정하는 센서.
- 원리: 소리 속도 × 왕복 시간 ÷ 2 = 거리.
- 프로젝트: 보조안전모듈 Board1에 4방향(전후좌우) 배치, 100ms마다 측정 후 4단계 위험등급(SAFE/MID/CLOSE/DANGER) 분류. 장애물 회피 로봇 전방 탐색.
DHT11 / LDR / 사운드 센서
- 정의: DHT11=온습도, LDR(광저항)=조도(밝기), 사운드 센서=소음.
- 프로젝트: 보조안전모듈 Board2에서 복합 환경 이상 감지. 이 보드는 팀원 담당 = "팀 시스템 구성 요소"로만 언급.
PMS7003 (미세먼지 센서)
- 정의: 공기 중 미세먼지 농도(PM1.0/2.5/10) 측정 센서.
- 프로젝트: 공기청정 로봇에서 ESP01 연결, MQTT로 PM 데이터 발행 → 자동 출동 트리거. 워밍업 약 30초 필요.
LDS-03 LiDAR / Intel RealSense / Pi Camera v2 (imx219)
- 정의: LDS-03=TurtleBot3 기본 2D 라이다, RealSense=깊이(depth) 카메라, Pi Camera=라즈베리파이용 카메라 모듈.
- ⚠️ 프로젝트: 라이다·RealSense는 TurtleBot3 장착 장비로 SLAM/Nav이 활용. 센서 드라이버 직접 작성 아님. Pi Camera는 PACK에서 OpenCV로 영상 수신·색검출·마커 인식에 사용(직접 다룸).
LCD I2C / RGB LED / 부저
- 정의: 출력 장치. LCD=글자 표시, RGB LED=색·밝기, 부저=소리 경보.
- 프로젝트: 보조안전모듈 물리 경보 출력. RGB LED는 거리 비례 밝기 + DANGER 시 논블로킹 점멸.
논블로킹 점멸 (non-blocking)
- 정의:
delay()로 프로그램 정지 없이 시간 측정하며 다른 작업 동시 수행하는 방식. - 중요 이유:
delay(500)사용 시 0.5초간 센서 측정·통신 전면 정지. 논블로킹(millis() 비교)은 무정지. - 프로젝트: DANGER 등급 LED 점멸을 delay 없이 구현, 점멸 중에도 거리 측정·UDP 전송 지속. 실시간 제어 이해 어필 소재.
pyserial
- 정의: 파이썬의 시리얼(USB) 통신 라이브러리.
- 프로젝트: PC/라즈베리파이 ↔ 아두이노 시리얼로 명령·센서값 교환.
통신 / 네트워크 프로토콜
TCP vs UDP (면접 최다 단골 — 반드시 숙지)
- TCP: 연결 수립 후 순서 보장 + 도착 보장(유실 시 재전송)하는 신뢰성 통신. 대신 느림.
- UDP: 연결 없이 전송. 빠르나 유실·순서 역전 가능.
- 비유: TCP=등기우편(수령 확인·느림), UDP=전단지 뿌리기(빠름·일부 유실 무관).
- 선택 기준: 파일·메시지=TCP, 실시간 센서·영상=UDP(최신값 우선, 소량 유실 무방).
- 프로젝트: 보조안전모듈 센서 데이터는 UDP 전송. "왜 UDP?" → 실시간 거리·환경 데이터는 최신값 우선, 100~500ms 지속 전송으로 소량 유실 무방. 마피아 게임은 TCP 소켓(게임 상태 유실 불가).
TCP 소켓 / Python socket · threading
- 정의: 소켓=네트워크 통신 양 끝단 창구. TCP 소켓=신뢰성 연결 창구.
- 하위 개념 — 멀티스레딩: 다수 클라이언트 동시 처리를 위해 각 접속을 스레드 분리 병렬 처리.
- 프로젝트: 마피아 게임 서버/클라이언트 구조 + 다중 클라이언트 접속을 Python socket·threading 처리. 게임 상태 관리·페이즈 전환 로직 주도 구현.
UDP
- 상기 TCP vs UDP 참고. 프로젝트: 보조안전모듈 센서 데이터 전송.
HTTP (GET / REST)
- 정의: 웹 데이터 교환 규약. GET(조회)·POST(생성)·PUT(수정)·DELETE(삭제) 메서드로 요청.
- REST란: 자원(데이터)을 URL로 표현, HTTP 메서드로 조작하는 설계 방식(예:
GET /api/robot/status). - 프로젝트: 공기청정 로봇 웹 대시보드 REST API(로봇 상태·경로·명령), 비상정지에서 Windows→WSL 영상 HTTP 스트림.
WebSocket (rosbridge)
- 정의: 브라우저-서버 간 양방향 실시간 연결. HTTP와 달리 연결 유지하며 지속 교환.
- HTTP와 차이: HTTP는 요청 시에만 응답(단발). WebSocket은 연결 유지, 서버가 먼저 데이터 푸시 가능(실시간 적합).
- 프로젝트: 웹 대시보드에서 rosbridge_server(WebSocket)로 로봇 상태·맵 실시간 수신. roslibjs 연결.
MQTT (Mosquitto 브로커 / paho-mqtt)
- 정의: IoT용 경량 메시지 통신. 발행/구독(pub/sub) 구조.
- 하위 개념:
- 브로커(Broker): 중간 우체국. 발행자가 브로커로 전송 → 해당 토픽 구독자 전원에게 전달(Mosquitto가 브로커 프로그램).
- 토픽(Topic): 메시지 주소(예:
robot/1/dust). 계층 구조. - paho-mqtt: 파이썬용 MQTT 클라이언트 라이브러리.
- ROS2 토픽과 구분: 이름은 같은 '토픽'이나 별개 시스템. MQTT는 브로커 필수, ROS2는 DDS라 브로커 없음.
- 비유: 브로커=우체국, 토픽=주소. 구독자는 "이 주소로 오는 것 전부 전달" 등록.
- 프로젝트: 공기청정 로봇에서 센서(ESP01) ↔ ROS2 ↔ 웹서버를 Mosquitto MQTT 중계. PACK 로봇팔도 MQTT(
pack/arm/cmd) 무선 명령. - 꼬리질문: "MQTT vs ROS2 토픽?" → MQTT는 브로커 경유 pub/sub(IoT·인터넷 통과), ROS2는 DDS 기반 브로커리스(로봇 내부 실시간). 로봇 내부는 ROS2, 외부 기기·웹 연동은 MQTT로 역할 분담.
WiFi (ESP8266)
- 상기 ESP8266 참고. AT 명령으로 WiFi 접속 후 UDP/MQTT 전송.
MJPEG 스트리밍
- 정의: JPEG 이미지 다수를 연속 전송해 동영상처럼 표시하는 방식.
- 프로젝트: 비상정지에서 Windows 웹캠 영상을 Flask MJPEG HTTP 스트림 → WSL ROS2 구독. (WSL의 USB 웹캠 직접 접근 불가 문제 우회)
Cloudflare Tunnel
- 정의: 로컬 서버를 외부 인터넷 접속 가능하게 여는 터널 서비스(공유기 설정 불필요).
- 프로젝트: 공기청정 로봇 웹 대시보드 외부 브라우저 접속 연결.
시리얼 (ENC/CMD 프로토콜)
- 정의: 자체 정의 시리얼 메시지 규격.
ENC,...=엔코더 값 송신,CMD,...=명령 수신 약속. - 프로젝트: PACK 4WD 차량 ↔ ROS2 시리얼 통신에서 자체 프로토콜로 엔코더·명령 구분.
5. 언어 · CS 개념
프로그래밍 언어
Python
- 정의: 문법 간결·학습 용이한 인터프리터 언어. AI·데이터·로봇 상위 로직 사실상 표준.
- 특징: 동적 타입(타입 사전 선언 불요), 메모리 자동 관리(가비지 컬렉터), 방대한 라이브러리.
- 버전 차이: 프로젝트별 3.9~3.14 혼용. 큰 문법 차이 없음, 라이브러리 호환성으로 버전 분기.
- 프로젝트: ROS2 노드·데이터 분석·PyQt5 GUI·딥러닝 학습 등 거의 모든 상위 로직.
C / C++
- 정의: 하드웨어 근접 저수준 제어 가능한 컴파일 언어. 빠르고 메모리 직접 관리.
- Python과 차이: 컴파일 방식으로 빠름, 정적 타입, 포인터로 메모리 직접 접근, 개발 까다로움(상세는 하단 "Python vs C++" 항목).
- ⚠️ 프로젝트: 실제 작성 C/C++ 코드는 Arduino 임베디드 펌웨어(.ino) 한정(로봇팔·차량·센서 제어). 커리큘럼에서 C++ 알고리즘·포인터·클래스·템플릿 학습했으나, 스킬 표기는 "Arduino(C/C++) 임베디드 펌웨어" 수준으로 한정. "C++로 알고리즘 설계" 표현 금지.
Java
- 정의: 객체지향 기반 컴파일+가상머신(JVM) 언어. 기업 서버·안드로이드 다수 사용.
- ⚠️ 프로젝트: 공기청정 로봇 웹 대시보드(Spring Boot)는 팀원 담당, 본인은 로봇 제어 파트. Java는 본인 핵심 스킬 아님. 질문 시 "웹은 팀원 담당"로 명확히 구분.
JavaScript / HTML5 / CSS3
- 정의: 웹 프론트엔드 3대 요소. HTML=구조(뼈대), CSS=디자인(꾸밈), JavaScript=동작(움직임).
- 프로젝트: 웹 학습 실습(디지털 시계·TODO), ROS 웹 컨트롤러(roslibjs). 로봇 직무에선 보조 역량.
SQL
- 정의: 데이터베이스 데이터 조회·추가·수정·삭제 언어.
- 핵심 문법:
SELECT(조회)·INSERT(추가)·UPDATE(수정)·DELETE(삭제)·WHERE(조건)·JOIN(테이블 결합). - 프로젝트: 재고관리(MySQL), 공기청정 로봇 웹서버 DB.
CS 핵심 개념
Python vs C++ (차이 상세)
- 정의: 두 언어의 최대 차이 = 실행 방식 + 메모리 관리.
- 핵심 대본: "C++은 컴파일 언어로 사전에 기계어 번역 → 실행 빠름, 개발자가 메모리 직접 관리. Python은 인터프리터 언어로 한 줄씩 해석 실행 → 느리나 메모리 자동 관리로 개발 빠름. 그래서 빠른 반응 필요한 임베디드 제어는 C/C++, 로직 빠른 구현이 필요한 ROS2 노드는 Python 사용."
- 비유: Python=자동변속기(편하나 세밀 제어 양보), C++=수동변속기(직접 제어·빠르나 손 많이 감).
- 하위 차이 정리:
- 속도: C++ 빠름(사전 기계어 번역, 실행 시 해석 과정 없음) vs Python 느림(실행 중 해석).
- 타입: C++ 정적 타입(선언 시 타입 고정) vs Python 동적 타입(실행 중 결정).
- 메모리: C++ 수동 관리(포인터·직접 해제) vs Python 자동(가비지 컬렉터).
- 프로젝트: 임베디드 제어(아두이노 펌웨어)는 C/C++, 상위 로직·ROS2 노드는 Python으로 역할 분담.
포인터
- 정의: 데이터가 저장된 메모리 주소를 담는 변수. 값 자체가 아닌 "값의 위치"를 가리킴.
- 핵심 대본: "값을 직접 들고 다니지 않고 주소만 가리킴. 큰 데이터를 함수에 넘길 때 통째 복사는 비효율 → 주소만 넘기면 빠르고 메모리 절약. 특히 임베디드에선 하드웨어 레지스터 등 특정 메모리 주소 직접 접근이 필요해 포인터 필수."
- 비유: 집 주소. 집(데이터) 통째 이동 대신 "주소는 여기"만 알려주면 찾아가서 확인 가능.
- 장점(꼬리질문 — "왜 쓰나?"): ① 큰 데이터 복사 없이 주소 전달(효율), ② 동적 메모리 할당(
malloc/new), ③ 임베디드 하드웨어 직접 제어. - 위험(꼬리질문 — "위험한 점?"): 잘못된 주소 접근 시 프로그램 사망(segfault), 메모리 누수 가능성.
- 프로젝트: 아두이노/임베디드 펌웨어에서 사용. "실제로 어떤 상황에 다뤘는지" 본인 사례 1개 준비 시 강력.
스택(stack) vs 힙(heap)
- 정의: 둘 다 메모리 영역, 관리 방식 상이.
- 스택: 함수의 지역 변수 등 자동 할당·해제. 빠르나 크기 작음.
- 힙: 개발자가 직접 할당·해제. 크고 유연하나 관리 안 하면 메모리 누수.
- 비유: 스택=책상 위(일 끝나면 자동 정리), 힙=창고(직접 넣고 직접 빼기, 안 빼면 쓰레기 포화 = 메모리 누수).
- 꼬리질문:
- "스택 오버플로?" → 재귀 함수 과다 등으로 스택 공간 초과.
- "Python도 해당?" → Python은 힙 관리 자동(가비지 컬렉터)이라 개발자 직접 신경 쓸 일 적음.
컴파일 언어 vs 인터프리터 언어
- 정의: 코드를 기계어로 변환하는 시점 차이.
- 컴파일 언어: 실행 전 코드 전체를 한 번에 기계어 번역 → 실행 빠름(C++).
- 인터프리터 언어: 실행하며 한 줄씩 해석 → 느리나 즉시 실행·수정 가능(Python).
- 비유: 컴파일=책 전체 사전 번역본(읽기 빠름), 인터프리터=실시간 통역사(한 문장씩 통역, 느리나 유연).
- 꼬리질문: "Python은 컴파일 아예 안 하나?" → 엄밀히는 바이트코드로 한 번 변환 후 인터프리터 실행. 신입 면접에선 "한 줄씩 해석" 수준으로 충분.
MCU (Micro Controller Unit)
- 정의: CPU(연산)+메모리(RAM/ROM)+입출력 핀(I/O)을 칩 하나에 통합한 초소형 컴퓨터. 아두이노·ESP8266이 대표.
- 비유: 일반 PC=아파트 단지(CPU동·메모리동 따로, 도로로 연결), MCU=원룸(침대·주방·화장실 한 방). 작고 저렴·저전력이나 성능 낮음. "센서 읽어 모터 구동" 등 정해진 단순 작업 반복에 적합.
- 핵심 구성(칩 하나 안): CPU(두뇌)·메모리(Flash/ROM+RAM)·I/O 핀(센서·모터 연결)·주변장치(타이머·ADC·통신 UART/I2C/SPI).
- 비교(면접 핵심):
- MCU vs CPU(일반 컴퓨터): CPU는 고성능·OS 위 복잡 작업이나 주변 부품 별도 필요. MCU는 저성능이나 부품 한 칩 통합, 저전력·저비용으로 특정 제어 실시간 반복 특화.
- MCU vs SBC(라즈베리파이): 라즈베리파이는 리눅스 OS 구동 '컴퓨터'(영상 처리·ROS2 등 무거운 연산). 아두이노 등 MCU는 OS 없이 코드 직접 실행하는 '제어기'(센서·모터 실시간). 프로젝트: 로봇팔에서 라즈베리파이가 판단, 시리얼로 아두이노(MCU)에 명령 전달해 서보 구동하는 역할 분담.
- 꼬리질문:
- "MCU에 왜 OS 없나?" → 자원(메모리·성능) 작고 정해진 작업만 빠르게 반복하면 되니 OS 오버헤드가 방해(단, RTOS라는 경량 실시간 OS 탑재 경우도 있음).
- "펌웨어란?" → MCU에 올라가는 프로그램. 하드웨어에 밀착 동작해 '펌(firm)웨어'.
- "실시간(real-time) 중요 이유?" → 모터 제어·안전 장치는 "정해진 시간 내 반드시" 반응 필요, MCU가 타이밍 보장에 유리.
OOP (객체지향 4대 특징)
- 정의: 데이터와 기능을 '객체'로 묶어 설계하는 방식.
- 4대 특징(하위 개념 — 단골 질문):
- 캡슐화: 데이터·기능을 하나로 묶고 내부 은닉(외부 임의 접근 차단). 비유: 리모컨(내부 회로 은닉, 버튼만 노출).
- 상속: 부모 클래스 기능을 자식이 물려받아 재사용. 비유: 부모 재산 상속.
- 다형성: 같은 명령이 객체별 다른 동작(예:
draw()가 원·사각형마다 상이). 비유: "울어봐"에 개는 멍멍, 고양이는 야옹. - 추상화: 복잡함 은닉·핵심만 노출(공통 틀 정의). 비유: 자동차 운전에 엔진 원리 불요.
- 프로젝트: ROS2 노드를
Node클래스 상속 작성(상속). 미로게임 MVC의 Player 클래스 캡슐화. FSM 상태 클래스 설계.
call by value vs call by reference
- 정의: 함수 인자 전달 시 복사본 전달(value)이냐 원본 주소 전달(reference)이냐.
- 차이: value는 함수 내 변경해도 원본 유지. reference는 함수 내 변경 시 원본 변경.
- 비유: value=문서 복사본 전달(원본 안전), reference=원본 문서 전달(수정 시 원본 변경).
- 꼬리질문: "Python은?" → 엄밀히 "call by object reference"(객체 참조를 값으로 전달). 리스트 등 가변 객체는 함수 내 수정이 원본 반영, 숫자·문자열 등 불변 객체는 미반영.
프로세스 vs 스레드
- 정의: 프로세스=실행 중 프로그램 하나(독립 메모리). 스레드=한 프로세스 내 여러 작업 흐름(메모리 공유).
- 비유: 프로세스=독립 사무실(각자 자원), 스레드=한 사무실 내 여러 직원(자원 공유).
- 프로젝트: PyQt5 GUI에서 데이터 수신을 별도 스레드 처리, 화면 멈춤 방지(Signal/Slot). 마피아 게임 다중 접속 처리.
Python GIL (Global Interpreter Lock)
- 정의: 파이썬에서 한 번에 스레드 하나만 실행되게 막는 잠금장치.
- 존재 이유: 메모리 관리 안전 목적. 대신 CPU 계산 위주 작업은 멀티스레드로 미가속(한 번에 하나만 실행).
- 해결: 계산 병렬화 필요 시 스레드 대신 멀티프로세싱 사용.
- ⚠️ 프로젝트: 깊은 경험 없음. "GIL 때문에 CPU 병렬은 멀티프로세싱 필요" 개념만 답변.
메모리 누수 (memory leak)
- 정의: 사용 완료 메모리 미반환으로 미사용 메모리 지속 누적하는 현상.
- 비유: 창고에서 물건 사용 후 미반출로 창고 점진 포화.
- 언어별: C/C++은 직접 해제(free/delete) 누락 시 발생. Python·Java는 가비지 컬렉터 자동 회수(순환 참조 등으로 발생 가능).
템플릿 (C++)
- 정의: 타입 무관 동작 코드를 한 번만 작성하는 기능(제네릭). 예: 정수용·실수용 함수 개별 작성 불요.
- ⚠️ 프로젝트: 커리큘럼 학습만, 실제 프로젝트 사용 근거 약함. 개념만.
아키텍처 · 패턴
MVC 패턴
- 정의: 프로그램을 Model(데이터)·View(화면)·Controller(제어)로 분리하는 설계.
- 이유: 역할 분리로 유지보수·협업 용이(화면 변경 시 데이터 로직 유지).
- 프로젝트: 미로 탈출 게임 MVC 설계, Player 클래스(View 파트) 담당.
서버/클라이언트 구조
- 정의: 서비스 제공 측(서버)과 요청 측(클라이언트) 분리 구조.
- 프로젝트: 마피아 게임(TCP 서버-클라이언트), Flask REST API 서버.
Signal/Slot 패턴
- 정의: 이벤트 발생(Signal) 시 연결 함수 실행(Slot)하는 Qt 이벤트 처리 방식.
- 이유: GUI 버튼 클릭·데이터 도착 등 이벤트 처리 정돈. 스레드 간 안전 통신에도.
- 프로젝트: 보조안전모듈·재고관리 PyQt5 GUI에서 실시간 데이터 수신 → 화면 갱신에 사용.
모듈화 / 멀티스레딩
- 모듈화: 기능을 독립 조각으로 분리해 재사용·관리 용이(ROS2 노드 분리가 대표).
- 멀티스레딩: 상기 프로세스 vs 스레드 참고.
6. ML · 데이터 · NLP (졸업논문 방어용)
졸업논문(멀티모달 가짜뉴스 탐지) 관련 기술. 논문 언급 시 반드시 설명 가능해야 함.
라이브러리 · 기본 도구
scikit-learn
- 정의: 파이썬 대표 머신러닝 라이브러리. 분류·회귀·전처리 등 전통 ML 총집합(딥러닝 아님).
- 프로젝트: 졸업논문 텍스트 모델(TF-IDF + LinearSVC + 확률보정) 전 과정.
pandas / numpy / groupby
- pandas: 표(엑셀 유사) 데이터 처리 라이브러리. 필터·정렬·집계.
- numpy: 숫자 배열·행렬 고속 연산. 딥러닝·영상처리 기반.
- groupby: 같은 항목끼리 묶어 집계(예: 단어별 빈도 합산).
- 프로젝트: 교통사고 분석·서울 쏠림 분석·단어 빈도 집계 등.
텍스트 분석 (졸업논문 텍스트 모델)
TF-IDF
- 정의: 문서 내 단어 중요도 수치화 기법. "이 문서에 자주(TF), 타 문서엔 드문(IDF)" 단어에 높은 점수.
- 하위 개념:
- TF(단어 빈도): 이 문서 내 해당 단어 출현 빈도.
- IDF(역문서 빈도): 전체 문서 중 희소성. "그·은·는" 등 흔한 말은 점수↓.
- Word n-gram vs Char n-gram: 단어 단위(1-2gram)·글자 단위(3-5gram) 분할. 글자 단위는 오타·변형에 강함.
- 비유: 흔한 단어 무시, "이 문서만의 특징 단어" 추출.
- 프로젝트: 뉴스 본문을 Word TF-IDF(1-2gram) + Char TF-IDF(3-5gram) 하이브리드 벡터화.
LinearSVC
- 정의: 선형 SVM(서포트 벡터 머신) 분류기. 데이터를 두 그룹으로 나누는 최적 경계선 탐색.
- SVM이란: 두 부류 사이 최대 여백(margin) 경계를 긋는 알고리즘.
- 프로젝트: TF-IDF 벡터 입력으로 진짜/가짜 뉴스 분류. Test 정확도 0.9841(텍스트 모델).
CalibratedClassifierCV (Platt Scaling)
- 정의: 분류기 결과를 "확률"로 변환·보정하는 도구.
- 이유: LinearSVC는 원래 "이쪽/저쪽" 점수만 제공, "몇 % 확신" 미제공. 확률 변환해야 임계값·Abstain 판정 가능.
- Platt Scaling: 점수를 확률로 변환하는 대표 방법(로지스틱 함수 사용).
- 프로젝트: 텍스트 모델 점수를 확률 보정 → 임계값(0.54) 판정 사용.
멀티모달 결합 (졸업논문 핵심)
엔트로피 기반 가중 결합 (Soft Voting)
- 정의: 텍스트·이미지 두 모델 확률 결합 시 더 확신하는(엔트로피 낮은) 모델에 큰 가중치 부여하는 방식.
- 하위 개념:
- 엔트로피: 불확실성 척도. 확률 0.5 근처면 엔트로피↑(헷갈림), 0.9면 엔트로피↓(확신).
- Soft Voting: 각 모델 확률 평균 결합(단순 다수결인 Hard Voting과 대비).
- 단순 평균과 차이(중요): 5:5 평균 시 헷갈리는 모델이 결과 훼손. 엔트로피 가중은 "확신하는 쪽 우대"라 더 우수.
- 비유: 두 전문가 의견 결합 시 자신 없는 사람보다 확신하는 사람 말에 무게.
- 프로젝트: 텍스트:이미지 기본 0.7:0.3에서 각 모달 엔트로피 따라 가중치 조정 → Fusion Score 산출.
- 꼬리질문: "왜 텍스트 가중 높게?" → 텍스트 모델 정확도(0.98)가 이미지(0.84)보다 월등.
Abstain (판정 보류)
- 정의: 확률 애매 구간(예: 0.42~0.48)이면 강제 판정 없이 "보류".
- 이유: 확신 없는 강제 판정은 오답 증가. 애매분 제외 시 잔여 판정 신뢰도↑.
- Coverage vs Accuracy 트레이드오프(핵심):
- Coverage: 전체 중 판정 비율. Abstain 증가 시 Coverage↓.
- 애매분 제외 만큼 판정분 Accuracy↑.
- 프로젝트: Abstain 도입으로 Coverage 96.4% 유지하며 불확실 샘플 3.66% 보류 → 판정 신뢰도 향상.
- 꼬리질문: "실서비스라면?" → 애매한 뉴스는 "판단 보류"로 사람 확인 유도가 안전. 1차 필터 역할.
ECE 보정
- 정의: Expected Calibration Error. 모델이 말한 확률과 실제 정확도의 일치도 측정 지표.
- ⚠️ 프로젝트: 결합 과정 보정 지표로 참고. 깊은 질문 시 "확률 신뢰도 측정 지표" 수준.
기타 ML/NLP
Word2Vec
- 정의: 단어를 숫자 벡터로 변환, 의미 유사 단어를 가까운 위치에 배치하는 기법.
- 비유: "왕-남자+여자=여왕" 등 단어 의미 연산 가능.
- ⚠️ 프로젝트: 고립청년 멘토매칭(ABC 부트캠프)에서 ML 설계 기획만 담당, 직접 구현 없음. PPT 제작도 담당. 질문 시 "모델 설계 방향 기획 참여, 구현은 미참여".
KoNLPy (Okt) / 형태소 분석 / 불용어
- KoNLPy: 한국어 자연어 처리 라이브러리. Okt는 내부 형태소 분석기.
- 형태소 분석: 문장을 의미 단위(명사·동사 등) 분할. 한국어는 조사 결합으로 영어보다 난도↑.
- 불용어(stopword): "그·은·는·이" 등 분석 무의미 단어. 제거로 정확도↑.
- 프로젝트: 서울 쏠림 분석에서 댓글·기사 명사 추출, 불용어 제거 후 빈도 분석.
감정분석 (NLP)
- 정의: 텍스트에서 긍정·부정·감정 분류.
- 프로젝트: 멜론차트 가사 감정분석(학교 수업 과제), HARU FILM 감정 데이터 라벨링(11개 감정).
NVIDIA 딥러닝 기초
- ⚠️ 프로젝트: ABC 부트캠프 이수 교육. 기술보다 학습 이력. 질문 시 "딥러닝 기초 교육 이수" 수준.
7. 웹 · DB · GUI · 수집 · 환경
로봇 SW 직무에선 보조 역량이나 "이것도 경험" 폭 제시.
웹 백엔드
Spring Boot
- 정의: Java로 웹 서버를 빠르게 구축하는 프레임워크. 기업 백엔드 표준.
- 하위 개념:
- JPA(엔티티/리포지토리): 자바 객체와 DB 테이블 자동 연결 기술(SQL 직접 작성 불요). 엔티티=테이블 대응 객체, 리포지토리=DB 접근 담당.
- Thymeleaf: 서버에서 HTML 생성·전송하는 템플릿 엔진.
- Gradle: 빌드·의존성 관리 도구(build.gradle에 필요 라이브러리 명시).
- ⚠️ 프로젝트: 공기청정 로봇 대시보드의 Spring Boot·JPA·Thymeleaf는 팀원 담당, 본인은 로봇 제어 파트. 로봇 직무 면접에선 "웹 연동은 팀원 담당" 수준으로만 언급.
Flask
- 정의: Python으로 가볍게 웹 서버·API 구축하는 프레임워크(Spring Boot보다 간단).
- 하위 개념:
- Flask-SQLAlchemy: Flask에서 DB를 객체로 다루는 ORM.
- Flask-CORS: 브라우저의 타 주소 API 호출 허용(보안 정책 우회).
- REST API: HTTP 메서드로 데이터 CRUD(4묶음 HTTP 참고).
- 프로젝트: 비상정지 웹캠 스트림 서버, 관제 GUI REST 서버, 웹 실습 TODO API(POST/GET/PUT/DELETE). Flask는 본인 직접 구현.
SQLAlchemy ORM
- 정의: ORM(Object-Relational Mapping) = 파이썬 객체와 DB 테이블 자동 연결. SQL 직접 작성 없이 객체로 DB 조작.
- 프로젝트: Flask TODO API에서 MySQL 연동, 테이블 자동 생성.
데이터베이스
MySQL / PyMySQL / MySQL Workbench
- MySQL: 대표 관계형 DB(표 형태 저장).
- PyMySQL: 파이썬의 MySQL 접속 라이브러리.
- MySQL Workbench: MySQL GUI 도구(테이블 생성·쿼리 실행).
- 하위 개념 — 관계형 DB: 데이터를 표(테이블) 저장, 표 간 관계(외래키) 연결. SQL 조작.
- 프로젝트: 재고관리(PyQt5+PyMySQL), 공기청정 로봇 웹서버, 관제 GUI 경로 저장.
GUI (데스크탑)
PyQt5
- 정의: 파이썬으로 데스크탑 GUI(창·버튼·표) 구축하는 라이브러리.
- 하위 개념 — Signal/Slot + 멀티스레드: 버튼 클릭·데이터 도착 이벤트 처리(5묶음 참고). 데이터 수신을 별도 스레드로 처리, 화면 멈춤 방지.
- 프로젝트: 보조안전모듈 실시간 모니터링 GUI, 재고관리 CRUD, 교통사고 분석 GUI, 관제 GUI.
Tkinter
- 정의: 파이썬 기본 내장 GUI 라이브러리(PyQt5보다 간단·경량).
- 프로젝트: 공기청정 로봇 제어 GUI, 먼지 히트맵 시각화.
웹 프론트엔드
Vanilla JavaScript / DOM API
- Vanilla JS: 라이브러리 없이 순수 자바스크립트만 사용.
- DOM API: 웹 페이지 요소(버튼·글자) 코드 조작(
addEventListener=이벤트 처리,setInterval=주기 실행). - 프로젝트: 디지털 시계(setInterval), TODO 리스트(DOM 조작).
AJAX
- 정의: 페이지 새로고침 없이 서버와 데이터 교환. 화면 일부만 갱신.
- 프로젝트: 공기청정 로봇 대시보드에서 로봇 상태 실시간 갱신.
ROS 웹 연동 라이브러리 (roslibjs / ros2djs / ROS3D.js / Three.js)
- roslibjs: 브라우저에서 ROS 토픽 발행/구독(rosbridge 경유).
- ros2djs: ROS 맵(OccupancyGrid) 2D 렌더링 라이브러리.
- ROS3D.js / Three.js: 3D 시각화(Three.js는 범용 3D 엔진, ROS3D는 그 위 ROS용).
- EaselJS / EventEmitter2 / OccupancyGridClient: 캔버스 그리기·이벤트·맵 구독 보조 라이브러리.
- 프로젝트: 웹 대시보드에서 브라우저로 로봇 제어(roslibjs)·실시간 맵(ros2djs)·3D 시각화(ROS3D). "PyQt 없는 브라우저 제어"의 핵심.
CSS3 (Flexbox / Grid)
- Flexbox / Grid: 화면 요소 정렬·배치 CSS 기술(Flexbox=1차원 정렬, Grid=2차원 격자).
- 프로젝트: 카카오톡 클론 UI, 웹 컨트롤러 레이아웃.
데이터 수집 · 파싱
requests / BeautifulSoup
- requests: 파이썬으로 웹 페이지 가져오는 라이브러리(HTTP 요청).
- BeautifulSoup: 수집 HTML에서 원하는 데이터 추출하는 파싱 라이브러리.
- 프로젝트: 졸업논문 뉴스 본문 수집, 서울 쏠림 분석 크롤링.
trafilatura / readability-lxml / JSON-LD·메타 태그 파싱
- 정의: 웹 페이지에서 광고·메뉴 제거 후 본문만 추출하는 도구들. JSON-LD·메타 태그는 페이지 내 숨겨진 구조화 정보.
- 프로젝트: 졸업논문에서 뉴스 본문·대표 이미지를 우선순위(JSON-LD→trafilatura→readability→메타태그) 추출.
Selenium
- 정의: 브라우저를 코드로 자동 조작(클릭·스크롤)해 데이터 수집. 동적 페이지에 필요.
- 프로젝트: 서울 쏠림 분석에서 유튜브 댓글 무한스크롤 크롤링.
시각화 · 데모 UI
matplotlib / seaborn / Plotly / WordCloud
- matplotlib: 파이썬 기본 그래프 라이브러리. seaborn: matplotlib 미화 래퍼. Plotly: 마우스 조작 가능한 인터랙티브 그래프. WordCloud: 단어 빈도를 구름 모양 표현.
- 프로젝트: 교통사고·인구·서울 쏠림 데이터 시각화, 워드클라우드.
Pillow
- 정의: 파이썬 이미지 처리 라이브러리(열기·자르기·변환).
- 프로젝트: 이미지 전처리 보조.
Gradio
- 정의: 머신러닝 모델을 웹 데모로 빠르게 구축하는 도구(입력창·결과창을 몇 줄로).
- 프로젝트: 졸업논문에서 URL 입력 → 판정 결과 표시하는 데모 UI.
개발 환경 · OS · 도구
Ubuntu 22.04 / Linux
- 정의: 리눅스 계열 OS. ROS2·로봇 개발 표준 환경.
- 프로젝트: 모든 ROS2 작업 기반 OS.
WSL2 + Windows 11
- 정의: 윈도우 내 리눅스 구동 기능(Windows Subsystem for Linux).
- ⚠️ 하위 개념 — 한계: WSL에서 USB 장치(웹캠) 직접 접근 까다로움.
- 프로젝트: 비상정지에서 WSL 웹캠 접근 불가 → Windows Flask 스트림 서버 우회. 문제 해결 스토리 소재.
Gazebo Classic 11.10 / Rviz
- Gazebo: 로봇 물리 시뮬레이터(실물 없이 로봇·환경 가상 구현).
- Rviz: ROS 데이터(맵·센서·로봇 상태) 시각화 도구.
- 프로젝트: 비상정지에서 Gazebo 커스텀 월드로 TurtleBot3 시뮬레이션. Rviz로 맵·센서 확인.
Google Colab Pro (NVIDIA T4 GPU)
- 정의: 구글 클라우드 주피터 환경. GPU 대여로 딥러닝 학습.
- 프로젝트: 졸업논문 이미지 모델을 Colab T4 GPU(16GB) 학습.
Jupyter Notebook / VS Code / Chrome DevTools
- Jupyter: 코드·결과·설명을 한 화면 실행(데이터 분석 최적).
- VS Code: 대표 코드 에디터.
- Chrome DevTools: 브라우저 개발자 도구(웹 디버깅).
- 프로젝트: 데이터 분석은 Jupyter, 개발은 VS Code. 부트캠프 현장실습(트위니, STEP 7) 중 VS Code로 칠랑 JSON 정의 파일을 직접 편집해 블록 기반 GUI 제약을 우회한 경험 보유(차별화 스토리).
Git
- 정의: 코드 버전 관리 도구. 변경 이력 추적·협업 필수.
- 하위 개념: 커밋(변경 저장 단위)·브랜치(작업 분기)·merge/rebase(합치기).
- 프로젝트: 비상정지에서 커밋 6개를 논리 단위(패키지/월드/주행/비상정지/런치/문서) 분리 — 의미 있는 커밋 습관 어필 소재.
POSTMAN / venv / Google Drive
- POSTMAN: API 테스트 도구(엔드포인트에 요청 전송·응답 확인).
- venv: 파이썬 가상환경(프로젝트별 라이브러리 격리).
- Google Drive: 모델 가중치 등 파일 저장.
- 프로젝트: TODO API를 POSTMAN 검증, 프로젝트별 venv 사용, Colab 모델을 Drive 저장.
부록. 데이터셋 (참고)
- WELFake: 가짜뉴스 텍스트 데이터셋(71,537건). 졸업논문 텍스트 모델 학습.
- Fakeddit: 가짜뉴스 이미지 데이터셋. 졸업논문 이미지 모델 학습.
- COCO: 80종 객체 이미지 데이터셋. YOLO 사전학습 기반.
- KOSIS: 국가통계포털. 서울 쏠림 분석 인구 이동 데이터.
'로보테크AI' 카테고리의 다른 글
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/07/07 (1) | 2026.07.07 |
|---|---|
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/07/06 (0) | 2026.07.06 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/07/01 (0) | 2026.07.01 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/06/30 (0) | 2026.06.30 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/06/29[멘토링] (0) | 2026.06.29 |