Service 실습 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. Service가 Topic보다 적합한 요구사항 세 가지를 쓰세요.
정답과 해설
요청한 결과를 확인해야 하고, 필요할 때 단발성으로 호출하며, 정상 상황에서 빠르게 끝나는 작업입니다. Mode 전환, 짧은 계산, 상태 Reset처럼 Request와 직접 대응하는 Response가 필요할 때 적합합니다.
2. 같은 Service 이름에 Server를 두 개 두면 안 되는 이유는 무엇인가요?
정답과 해설
ROS 2에서 같은 Service 이름에 여러 Server가 있으면 어느 Server가 Request를 받을지 정의되지 않습니다. 상태 소유권과 응답이 비결정적이 되므로 하나의 이름에는 Server Owner를 하나만 둬야 합니다.
3. Transport 성공과 업무 성공의 차이를 SetMode 예로 설명하세요.
정답과 해설
Response를 받았다면 Request·Response 통신은 성공했습니다. 그러나 Server가 speed_limit 범위나 Robot 사전 조건 때문에 accepted=False를 반환하면 Mode 전환 업무는 실패한 것입니다.
4. ros2 service list, type, find, interface show, call의 역할을 각각 설명하세요.
정답과 해설
list는 발견된 Service 이름, type은 특정 이름의 Type, find는 특정 Type을 쓰는 이름들을 찾습니다. interface show는 Request·Response 구조를 표시하고 call은 YAML Request로 직접 호출합니다.
5. .srv의 --- 위와 아래에는 무엇이 정의되나요?
정답과 해설
구분선 위에는 Client가 보내는 Request Message Field와 상수, 아래에는 Server가 돌려주는 Response Message Field와 상수가 정의됩니다.
6. call_async()가 반환하는 Future에서 done, exception, result를 구분해야 하는 이유는 무엇인가요?
정답과 해설
done()은 완료 여부만 나타냅니다. 완료가 성공을 뜻하지 않으므로 exception()으로 호출 오류를 확인하고, 오류가 없을 때 result()에서 Response를 읽어야 합니다.
7. Discovery Timeout과 Response Timeout의 차이를 설명하세요.
정답과 해설
Discovery Timeout은 일치하는 이름·Type의 Server가 Graph에 나타나기를 기다리는 제한시간입니다. Response Timeout은 Server를 발견하고 Request를 보낸 뒤 처리 결과가 오기를 기다리는 제한시간입니다.
8. Callback 안에서 동기 call()을 사용할 때 Deadlock이 생기는 과정을 설명하세요.
정답과 해설
현재 Callback이 동기 Response를 기다리며 Executor Thread를 막습니다. 그런데 Response 완료 처리도 같은 Executor가 실행해야 하고 Executor는 현재 Callback 종료를 기다려 서로 진행할 수 없게 됩니다.
9. MultiThreadedExecutor를 사용해도 Callback이 병렬로 실행되지 않을 수 있는 이유는 무엇인가요?
정답과 해설
기본 Callback Group은 Mutually Exclusive입니다. 모든 Entity가 같은 기본 Group에 있으면 Thread가 여러 개여도 같은 Group의 Callback은 동시에 실행되지 않습니다. 별도 Group 구성과 Thread-safe 공유 상태 설계가 필요합니다.
10. Server가 speed_limit에서 범위뿐 아니라 NaN·Infinity도 검사해야 하는 이유는 무엇인가요?
정답과 해설
NaN은 일반적인 대소 비교가 모두 False가 될 수 있어 단순 범위 검사만 통과할 가능성이 있습니다. Infinity도 Hardware 명령으로 사용할 수 없으므로 math.isfinite()로 먼저 유한값인지 확인해야 합니다.
11. Mode 변경 Service와 Mode 상태 Topic을 함께 사용해야 하는 이유는 무엇인가요?
정답과 해설
Service Response는 특정 Client의 한 번의 전환 요청 결과입니다. 다른 Node와 나중에 참가한 Consumer도 현재 Mode를 알아야 하므로 Mode Manager가 지속적인 상태를 Topic으로 발행해야 합니다.
12. Response Timeout 후 같은 Request를 즉시 재시도할 때 중복 실행이 가능한 이유는 무엇인가요?
정답과 해설
Timeout은 Server가 Request를 실행하지 않았다는 증거가 아닙니다. Server는 이미 작업을 끝냈지만 Response만 늦거나 유실됐을 수 있어 재시도가 두 번째 작업을 만들 수 있습니다.
13. 멱등적인 Service와 멱등적이지 않은 Service의 예를 하나씩 쓰세요.
정답과 해설
set_mode(auto)처럼 같은 목표 상태를 반복 적용해도 최종 상태가 같으면 멱등적입니다. increment_counter()나 새 파일을 매번 추가하는 호출은 반복할 때 결과가 누적되므로 멱등적이지 않습니다.
14. IMU Calibration을 Service 대신 Action으로 만들어야 하는 조건은 무엇인가요?
정답과 해설
여러 초 이상 Sample을 모으고 진행률을 보여줘야 하거나, 움직임 감지 시 취소·재시작이 필요하고 작업 중단을 Client가 요청해야 한다면 Action이 적합합니다.
15. 실제 Robot에서 /set_mode가 응답하지 않을 때 이름·Type부터 Callback까지 진단하는 순서를 설명하세요.
정답과 해설
Server Node와 Log를 확인하고 service list -t로 최종 이름·Type을 봅니다. Interface 구조와 Overlay Source를 맞춘 뒤 CLI로 직접 호출합니다. 이어 Domain·Network Discovery를 확인하고 Server에 Request Log가 찍히면 Callback의 긴 I/O, Nested Call, Exception과 Deadlock을 조사합니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.