이 레슨과 관련된 학습 키워드
인공지능(AI) — 기계가 생각하는 법 → AI 로보틱스 & Embodied AI — 몸을 가진 지능 → AI 로보틱스 & Embodied AI — 물리 세계의 지능 → 기초
ROS 2 서비스(동기 요청-응답)와 액션(비동기 피드백+취소) 통신 패턴을 학습합니다.
오늘은 로스투의 세 가지 통신 방법을 비교해볼게요.
그림 왼쪽을 보세요. 토픽은 단방향 스트리밍이에요.
퍼블리셔가 메시지를 보내면 서브스크라이버가 받아요.
센서 데이터처럼 계속 흐르는 정보에 적합해요.
하지만 "배터리 얼마야?"라고 한 번 묻고 답을 받으려면 토픽은 비효율적이에요.
그림 가운데를 보세요. 서비스는 동기 요청-리스폰스 패턴이에요.
클라이언트가 리퀘스트를 보내면 서버가 처리하고 리스폰스를 돌려줘요.
배터리 잔량 조회나 파라미터 설정 같은 짧은 작업에 딱이에요.
그런데 서비스는 응답 올 때까지 기다려야 해서, 오래 걸리면 전체 시스템이 멈춰요.
그림 오른쪽 액션을 보세요. 골을 보내고 피드백을 계속 받아요.
네비게이션처럼 몇 초에서 몇 분 걸리는 작업에 필수예요.
중간에 "지금 몇 퍼센트 진행됐어?"라는 피드백이 스트리밍돼요.
게다가 프리엠트, 즉 중간 취소도 가능해요.
아래쪽 요약을 보면, 단순 스트리밍은 토픽, 짧은 질의는 서비스예요.
장기 작업에 진행 상황과 취소가 필요하면 반드시 액션을 써야 해요.
이제 각 통신 방법을 하나씩 깊이 파볼게요.
먼저 서비스부터 시작해서 액션까지 완전히 마스터하는 게 오늘 목표예요.
그림에서 화살표 방향이 데이터 흐름이니까 잘 기억해두세요.
토픽은 단방향, 서비스는 양방향, 액션은 양방향에 피드백까지 있어요.
이 세 가지를 상황에 맞게 조합하는 게 로스투 설계의 핵심이에요.
선생님: 센서 데이터를 계속 보내는 건 토픽이고, 한 번 물어보는 건 서비스라고 했는데, 서비스를 토픽 두 개로 대체할 수는 없나요?
학생: 리퀘스트 토픽이랑 리스폰스 토픽을 따로 만들면 가능하지 않나요?
선생님: 기술적으로는 되지만, 리퀘스트와 리스폰스 매칭을 직접 관리해야 해서 복잡해져요.
선생님: 서비스는 이 매칭을 프레임워크가 자동으로 해줘요. 코드가 훨씬 간결하죠.
학생: 그러면 액션도 서비스로 대체할 수 있나요? 서비스를 여러 번 호출하면요.
선생님: 오래 걸리는 작업은 서비스가 블로킹되니까, 폴링으로 구현하면 네트워크 낭비가 심해요. 액션은 피드백이 자동으로 스트리밍돼서 효율적이에요.