본 리뷰는 리얼리눅스로부터 어떠한 지원도 받지 않았으며, 제 사비로 수강한 경험에 대한 리뷰입니다.
리뷰 요약
- 추천 대상
- 시스템 분야에 대한 이해가 필요한 초급~중급 수준의 개발자
- 장점
- 시스템 & OS 분야를 다루는 강의
- 이론 이해 & 실습 적용이 적절히 어우러진 밸런스 있는 강의
- 지식 전달만이 아닌 해결법도 같이 가르치는 강의
- 수강 이후에도 질문 가능한 Q&A
- 단점
- 강의 주제가 한정적 & 매번 강의가 열리지 않는다는 점
- 저렴한 것은 아닌 수강비용
- 실습이 완벽하게 진행되지 않을 수도 있음
수강 계기
나는 원래 페스타, 온오프믹스 등 모임 주관 사이트같은 곳에서 강의 등을 찾아보고 괜찮은 강의나 행사에 참여하는 편이다. 내가 모르는 개발 트렌드나 새로운 지식의 범위를 넓히는 방법 중 하나다.
원래 2019년에 iamroot 커널 스터디에 참여할 예정이었는데, 스터디 시작 일정과 전문연구요원 훈련소 일정이 겹치는 바람에 해당 스터디에는 참여할 수 없었다. 대신 2020년에 스터디 진행하기 전에 커널이나 C언어 심화 공부나 리눅스 커널 관련 책을 독학할 예정이었는데, 이때 페스타에서 리얼리눅스 강의를 발견했다.
위 사진에서 볼 수 있듯, 나는 5번이나 리얼리눅스 강의를 수강하였으며, 당연히 강의가 만족스러웠기 때문에 여러 번에 걸쳐 다양한 강의를 수강했다. 본 리뷰에서는 Try 오픈소스 컨트리뷰션을 제외한 나머지 리눅스 커널에 관련된 강의들만 리뷰하도록 하겠다. (Try 오픈소스 컨트리뷰션은 따로 글을 할당하여 리뷰할 예정.)
좋은 점
나는 현재 임베디드 FW 개발 업무를 하고 있는데, 내 업무와 관련된 강의는 정말 찾기 힘든 편이다. 시스템 & OS 관련 강의는 정말 찾기 힘들고, 가끔 있는 강의는 각 회사별 제품 사용에 관련된 강의로 개념적인 부분을 중점적으로 보는 강의는 거의 못 본 것 같다.
실습 위주의 강의
내가 이전까지 시스템 & OS 공부 할 때 느꼈던 문제는 이런 것들이 있다.
- 내용 자체가 너무 넓고, 복잡하고, 서로 관계가 깊이 얽혀 있고 어렵다.
(책을 읽어도 머리속에 하나도 들어오지 않는다.) - 각 기능이 유기적으로 연결되어있어 적당한 시작점이 존재하지 않는다.
(공부할 때 임시로 배제하면서 진행하는 수 밖에 없다.) - 해당 상황을 겪어 보기 전 까지는 각 기법이 사용되는 이유를 이해하기 힘들다.
(머리로는 이해한다고 하지만 딱히 문제의 심각성 등을 이해하지 못한다.) - 직접 디버깅을 해 보면서 단계적으로 코드 흐름을 따라가기 어렵다.
(코드가 너무 복잡하거나, 내가 찍을 수 있는 시간 간격보다 너무 짧거나)
각 문제들의 내용을 종합하자면 시스템 & OS 공부는 직접 상황을 맞닥드리지 않는 이상은 Bottom-up 방식으로 공부하게 되는 것이고, 어디부터 건드려야할지 감이 안 온다는 것이다.
보통 여기서 열리는 강의는 특정 주제에 대한 특강 식으로 진행된다. 각 특강에서는 단계적으로 어떤 기능 하나에 대해서만 직접 확인하는 것을 목적으로 하기 때문에 공부 범위가 발산하는 것을 어느정도 방지할 수 있고, Trace라는 방식으로 실제 커널의 동작 과정을 확인해 볼 수 있기 때문에 위의 문제점을 많이 해결해 주는 편이다.
uftrace, ftrace, sysfs 등을 통해 이론을 증명하는 실습
실습에는 uftrace, ftrace, sysfs를 사용한다.
- 개념적인 설명이 진행된다.
- 기능 확인을 위해 작성된 C 프로그램 코드에 대해 간략히 설명한다.
- 해당 프로그램을 uftrace로 실행하면서 각 함수 실행 흐름을 기록한다.
- Trace된 함수 흐름을 따라 리눅스 커널의 코드를 읽으면서 예상 흐름을 확인한다.
직접 작성한 코드로 재현하기 힘들거나, 실시간으로 일어나는 현상을 확인할 때는 ftrace나 sysfs 설정을 통해 확인한다.
ftrace는 실제 커널 디버깅 과정에서도 사용하는 것으로 알고 있다. 이런 도구 사용법을 같이 설명하므로 추후 개별적인 문제 해결에서도 도움이 될 수 있다.
아쉬운 점
물론 아쉬운 점이 없는 것은 아니다. 솔직히 값어치는 하지만 쉽게 수강할 만큼 싼 비용은 아니다. (굳이 비교하자면 다른 현장 강의 가격대와 비교했을 때 비싼 건 아니다.)
완벽하게 진행되지는 않는 실습
실습을 통해 이론을 실제로 증명하는 것이 이 강의의 핵심인데, 실습이 완벽하게 매번 똑같이 잘 이루어 지는 것은 아니다.
첫번째 원인은 각 실습 환경이 완전히 동일하지 않기 때문이다. 강의에서는 최대한 동일한 환경을 제공하기 위해 VirtualBox 이미지로 제공하는데, 아무리 가상머신으로 표준화 해도 Host OS에서 문제를 일으키면 답이 안나온다. 최악의 경우 모든 실습이 잘 진행되지 않아 강의 내내 구경만 하는 경우가 생길 수도 있다.
두번째 원인은 원하는 대로 Trace하는 것이 생각만큼 쉽지 않다는 것이다. Trace 중간에 스케쥴링이 일어나서 생기는 함수도 같이 추적되는 것은 물론이며, 일부 기능을 제대로 확인하려면 매번 cache를 비워줘야 하는 등 원하는 대로 쉽게 Trace되지 않는다.
이 외에도 사소한 오류로 인해 강의가 잘 진행되지 않는 문제가 가끔 있는데, 이건 강의 횟수가 더 늘어남에 따라 점점 보완될 것이라 생각한다. 강의나 실습 조교 등을 해 본 사람이라면 공감할텐데, 수강생이 일으키는 예외의 범위는 강사의 예상 범위를 뛰어넘는다. 가르치는 입장에서는 당연하다고 생각되는 부분에서도 오류가 발생하기 때문이다.
수강 대상
강의 정보에 수강대상, 강의 수준이 나와있다. 본인 실력에 대하여 너무 과대평가하거나 과소평가하지 말고 냉정하게 생각해보면 자신이 초급인지, 초급과 중급 사이인지, 중급인지 알 수 있을 것이다. 만약 본인이 해당 강의를 수강하기에 적합할지 잘 모르겠다면 상담을 요청해 보는 것도 괜찮다.
나는 실제로 초급과 중급 사이라고 생각하고 리눅스 SW 기본반을 들었었는데, 배운게 없는 것은 아니지만 이미 아는 내용을 중복으로 듣는 것 같은 느낌이 있었다. (물론 기본반을 들으면서 OS 중급반을 같이 듣는 것도 원인 중 하나라고 생각한다.)
위에서 설명한 uftrace, ftrace, sysfs를 통한 디버깅 등을 직접 수행할 수 있는 사람이라면 중급 이상은 된다고 생각하면 될 것 같다. 현재까진 고급 주제를 다루는 완전 심화반은 열리지 않은 것으로 알고있다.
리뷰 하는 이유
초반에 말했듯 시스템 & OS 관련 강의는 정말 찾아보기 힘들다. 대학교 강의를 제외하고는 기업 내부 초청 강연, 제품 홍보나 관련 협회의 교육이 거의 전부다. (물론 다른 IT관련 학원에도 그나마 관련된 강좌가 있겠지만, 입학생들에게 일단 전화걸고 보는 악명높은 학원은 당연히 고려대상에서 제외했다.) 웹, 모바일 어플리케이션 개발, 요새 뜨는 트렌드 관련 교육은 생활코딩, 인프런 등 무료나 저렴한 가격으로도 수강할 수 있다. 이런 시스템 & OS 관련 분야 강의가 더 많아져서 전체적인 파이가 커 지길 바라는 마음에 리뷰를 작성했다.