상세 컨텐츠

본문 제목

[한화비전 VEDA 4기] 9주차 리뷰

VEDA

by 전산거북이 2026. 5. 24. 21:44

본문

한화비전 본사 교육

9주차의 수요일, 목요일은 한화비전 본사에서 교육을 받았습니다. 판교에 있는 한화비전 본사에서 직무특강을 진행하였습니다.

시간(1일차) 내용
09:00-10:00 IP카메라의 영상 스트리밍 가이드
10:00-11:00 ONVIP와 SUNAPI
13:00-15:00 한화비전 카메라 코덱 개발이란?
15:00-17:00 한화비전 카메라 프론트엔드 개발이란?

 

시간(2일차) 내용
09:00-11:00 한화비전 Device PM과 개발자의 일하는 방식
13:00-15:00 한화비전 Web 개발이란?
15:00-17:00 한화비전 AI연구소에 대해서

한화비전에는 어떤 직무가 있는지, 어떤 일을 하는지 알아볼 수 있는 귀한 시간이었습니다.
특별히 기억에 남는 것은 역시 RTSP에 관한 내용과, 한화비전의 프론트/백엔드에 관한 이야기였던 것 같네요.

간단히 설명을 해보자면, RTSP는 영상을 스트리밍하기 위한 프로토콜 중 하나입니다. 이 프로토콜은 일종의 "리모콘" 같은 역할을 합니다. 영상 스트리밍을 실질적으로 담당하는 프로토콜은 RTP이고, 이 RTP를 제어하기 위해, 즉 재생/일시정지/종료 등을 제어하는 프로토콜이 바로 RTSP입니다.

한화비전의 프론트엔드는 일반적으로 생각하는 프론트엔드와는 조금 다릅니다. 흔히 프론트엔드라고 하면 특히 웹페이지에서 유저들이 보는 환경을 생각합니다만, 한화비전의 프론트엔드는 카메라 부분에서 이야기가 됩니다. 카메라가 직접 영상을 찍는 환경 등이 프론트엔드이며, 전송받은 영상을 처리하는 것이 백엔드라고 합니다.

교육 내용

9주차에는 프로세스에 관련된 내용을 공부하였습니다.
리눅스 프로그램은 기본적으로 프로세스로 이루어져 있습니다. 프로세스란, "현재 실행 중인 프로그램" 정도로 생각하시면 될 듯 합니다. 이 프로세스들은 모두 부모-자식 관계에 있습니다. 가장 상위 프로세스가 하나 있고, 모든 프로세스는 그 상위 프로세스로부터 시작된다고 볼 수 있습니다. 가장 상위 프로세스는 systemd입니다.

fork()

사용자가 자식 프로세스를 생성할 수도 있습니다. 바로 fork() 라는 명령어를 이용하면 가능합니다.
포크를 하면 현재 프로세스의 모든 내용을 복사하여 새 프로세스를 만들어줍니다. 물론, 코드 세그먼트 등은 복사하지 않고, 공유합니다. 리눅스는 공유할 수 있는 자원은 최대한 공유하여 최적화를 진행하기 때문입니다.

pid = fork();

switch(pid)
{
	case -1:
		perror("fork");
		exit(1);
		break;
	case 0: // 자식 프로세스
		/*do_something()*/
		break;
	default: // 부모 프로세스
		/*do_something()*/
		break;
}

위와 같은 방식으로 진행됩니다. fork() 함수는 자식 프로세스에서는 0을 반환하며 부모 프로세스에서는 자식 프로세스의 pid 값을 반환합니다.

exec()

프로세스를 생성하는 것은 방금 알아봤습니다. 이번에는 프로세스를 교체하는 것에 대해 알아보도록 합시다.
프로세스를 교체한다고 하면 모든 것을 새로 덮어씌운다고 생각할 수 있는데, 실제로는 그런 것은 아니고 세그먼트 부분만 덮었습니다. 즉 파일 디스크립터 등은 바뀌지 않습니다.
아무튼 exec() 계열의 함수들을 이용한다면 손쉽게 프로세스를 교체할 수 있습니다.
이들은 인자를 받는 방식에 따라 리스트 방식(l)과 벡터 방식(v)로 나뉩니다. 또 그 안에서도 일반 실행, PATH 기반 실행, 환경 변수 전달 방식으로도 나뉩니다.
그렇게 하면 총 6가지의 함수가 만들어집니다.

프로세스 간 통신

프로세스끼리 통신을 하게 만들 수 있습니다. IPC(Inter Process Communication)라고 부르며, 파이프, 메시지 큐, 공유 메모리, 세마포어가 있습니다.

파이프

아마 많은 분들이 사용해본 방법일 것입니다. | 를 통해 앞 프로세스와 뒤 프로세스를 파이프로 연결하는 방식입니다.
이 파이프는 file discriptor를 뚫어서 사용하는 방식도 존재합니다.
파이프는 기본적으로 단방향 통신을 지원하며, 2개의 프로세스 간 통신입니다. 파이프는 작기 때문에 파이프로 통신을 할 때에는 이를 고려해 주어야 합니다.

메시지 큐

Message Queue라는 이름에서 볼 수 있듯, Queue 형식입니다.
메시지 큐도 파이프보다는 크지만 역시 짧은 메시지 교환에 적절합니다. 메시지 큐는 2개 이상의 프로세스 간 통신에 사용할 수 있습니다. 메시지 타입이라는 부분에 값을 지정하면 마치 주소처럼 사용하여 메시지를 주고받을 수 있습니다.

공유 메모리

긴 메시지를 교환하기에 적절한 방식입니다. 역시 2개 이상의 프로세스 간 통신에 이용합니다. 메모리 하나를 공유하는 방식입니다.
파이프나 메시지 큐에 비해 큰 데이터를 전송할 수 있다는 장점이 존재하나, 동기화를 해주지 않는다면 race condition이 발생할 수 있습니다.

세마포어

세마포어는 정확히는 연산을 하는 방식이라고 합니다. 주로 IPC의 동기화를 위해 사용됩니다. 공유 메모리에 접근할 수 있는 프로세스의 수를 정해줍니다.
간단하게 생각해 보면, 프로세스 1번에서 a=3 이라고 공유 메모리를 write한 뒤, 프로세스 2번에서 a=5 라고 write 하고 프로세스1에서 저장을 하면 프로세스 1에서 적은 a=3 은 유실될 수 있습니다. 이런 것을 critical section 이라고 부르는데, 이 critical section에 접근하기 전에 세마포어의 수를 줄여 접근을 막은 뒤, 빠져나오면서 세마포어를 다시 늘려주면 프로세스 1과 2에서 모두 문제 없이 a에 접근할 수 있게 됩니다.

관련글 더보기

댓글 영역