Dev/System Engineering

리눅스 시스템 및 커널 전문가 스터디 시작

HJChung 2023. 10. 29. 18:39

10월 12일자로 프로그래머스에서 약 5개월간 진행하는 <리눅스 시스템 및 커널 전문가 과정> 에 참여하게 되었다.

 

목적

본 과정의 목적은

새로운 하드웨어에 리눅스 운영체제 기반 시스템을 설치하고, 서버를 작동시키고, 리눅스 운영체제 커널을 수정하여 새로운 기능을 추가하고, 성능을 최적화하고, 리눅스 기반 시스템의 오류를 찾고 디버깅할 수 있는 기술을 실습과 함께 5개월동안 학습하는 것이다.

목적이 거의 커리큘럼의 굵직한 주제들이 거의 나열해둔 것과 같아서, 내가 이해한 목적을 한 줄로 정리하자면,

리눅스 운영체제를 이해하고, 운영체제 커널의 기능 개발 및 성능 최적화, 트러블 슈팅을 실습을 통해 앞서 개념 이해 한 것을 적용할 수 있는 과정 이라고 생각한다.

 

커리큘럼

1. C/C++ 알고리즘 해결

2. 리눅스 시스템 설정 및 리눅스 명령어 사용법

3. 라즈베리 파이 기반 리눅스 구축

    - 라즈베리 파이 하드웨어 구조의 이해

    - 라즈베리 파이 상에 리눅스 시스템 설치, 작동, 설정 실습

    - 임베디드 시스템 설계와 개발에 있어서의 최적화 기법 학습

4. 리눅스 네트워크 및 보안 설정

    - 리눅스 네트워크 설정 방법

    - 리눅스 보안 설정 방법

    - 클라우드 컴퓨팅 인프라 기초 학습

5. 리눅스 시스템 프로그래밍

    - 시스템콜의 역할 및 동작 원리 학습

    - 시스템 프로그래밍 디버깅 기법 습득

    - 과제를 통한 시스템 프로그래밍 실습

6. 리눅스 네트워크 프로그래밍

    - 리눅스 네트워크 동작 원리

    - 소켓 프로그래밍 실무

7. 운영체제 개념과 리눅스 커널

    - 운영체제의 핵심 구성 요소 개념

    - 리눅스 커널과 운영체제 핵심 요소의 관계, 커널 소스코드 구조

8. ARM 프로세서

    - CPU 구조의 기본 개념 및 ARM 코어의 특징

    - 프로그램 실행 모델과 APCS

    - ARM 코어와 ARM Linux 커널의 관계

9. 프로세스, 메모리, 파일 시스템

프로세스

    - 리눅스 프로세스 관리 구조

    - 리눅스 프로세스 스케쥴러 동작 원리 및 활용 기술

메모리

    - 리눅스 메모리 관리 동작 원리

    - 가상 메모리 핵심 개념 학습

    - 리눅스 메모리 관리 모니터링 기술

파일 시스템

    - 리눅스 파일 관리 개념 및 파일 시스템 동작 원리

    - 최신 저장장치 기술과 파일 시스템 구현 기술

10. 디바이스 드라이버

    - 디바이스 드라이버의 구조 및 동작 원리

    - 문자 디바이스 드라이버 구현 실무

11. 리눅스 컨테이너와 Docker 기술

    - 리눅스 컨테이너 개념과 Docker 기술의 이해, 실무

    - Docker 활용 기술 동향 및 관리 기술

12. AI 반도체, 최신 시스템 반도체와 리눅스 기술,

14. 리눅스 커널 프로그래밍

15. 리눅스 커널 덤프 분석

16. 리눅스 시스템 Troubleshooting

가 있다.

 

수업 방식

수업 방식은

  • 동영상 수업
  • 라이브 온라인 수업
  • 실습
  • 프로젝트 수행
  • 특강, 세미나, 멘토링.. 등이 있다.

특히 강의, 특강, 세미나, 멘토링 등을 담당해주시는 강사분이나 참여 기업이 인상적이었다.

 


본 과정에 관심을 가지게 된 계기는 취업이나 시스템 엔지니어로의 커리어 변경 같은 거창한 것은 아니었고, 개인적인 흥미와 업무상에서 느낀 답답함이었다.

나의 이력서에서 확인할 수 있듯이, 회사에서 입사 초에는

AWS 인프라를 구축하고, 배포를 담당하는 등의 업무를 맡았고, 현재는 주로 AI 서비스를 안정적이고 효율적으로 제공하기 위한 백엔드 서비스 개발을 하고 있다. 그리고 서비스 안정성에 대해서는 개발 측면 뿐만 아니라 운영 측면, 즉 모니터링과 로깅으로 업무 확장이 되었고 (아직은 검토 단계이긴 하지만) 더 나아가 팀 리더 분과 MLOps까지 진행할 계획을 과 얘기를 나누었다.

 

 

이 모든 업무에서 

  • 리눅스
  • Docker
  • 서버, 네트워크, 운영체제, 메모리 등의 컴퓨터 리소스 관리 등을 해야하는 일이 많다.

왜 기초가 중요한지, 학생때는 그렇게도 뜬 구름 잡기처럼 보이던 컴퓨터공학 과목들이 실무자가 되어서야 왜 그런 개념들이 필요한 건지, 왜 잘 배워둬야 했었는지 뼈져리게 느꼈다.

한정된 리소스 자원을 활용해야 하거나 성능 최적화를 위해 좀 깊이 이해하고 개발해야하는 업무를 맡거나, 깊이 이해하지 못하면 도대체 어디서부터 시작해야할 지 막막했던 디버깅을 하면서 항상 나를 턱턱 막히게 했던건 '컴퓨터 구조, 운영체제, 네트워크, 자료구조' 가장 기저에 깔린 '기본'이었다. 

그래서 컴퓨터 구조와 운영체제, 네트워크 에 대해서 개인적으로 책으로 독학을 했는데, 하면서도 어플리케이션 개발자라서 그런지(그렇다는 핑계인지), 그 커널이 동작하는 방식이라는 것이, 컴퓨터 구조라는 것이, 프로세스 스케줄링 방식 구현이라는 것이,.... 많은 것들이! 눈으로 보이지 않고, 어떻게 구현되어있는지 코드나 동작을 확인하지 못하니까 답답함이 싸여져 갔다. 배운 내용과 활용에 자꾸만 괴리가 발생하고, 아직 학습이 덜 되었다는 증거일 수도 있겠지만 배운 내용이 실제 업무에 적용이 잘 되지 않았다.

 

그러던 중에 프로그래머스에서 <리눅스 시스템 및 커널 전문가> 과정을 진행한다는 배너를 보게 되었고,

상세 커리큘럼과 OT를 듣고나서, 위 커리큘럼에 빨간 색 글씨로 표시해 둔 것 처럼, 실습을 통해 직접 ‘구현’, ‘디버깅’, ‘분석’ 을 해보면서 이런 답답함을 조금이나마 해결해 줄 수 있거라는 생각이 들었다.

 

아직 2주차라 C/C++ 알고리즘 해결, 리눅스 시스템 설정 및 리눅스 명령어 사용법 에 대해서 배우고 있으며

앞으로 커리큘럼에 있는 많은 단계들이 남아있다.

 

이 과정들을 진행하면서의 과정과 개인 노션에만 적고 있었던

  • 컴퓨터 구조
  • 운영체제
  • 네트워크
  • (생긴다면) 현업에서 이런 것들을 고려한 소프트웨어 개발 경험
  • 실습 내용
  • 프로젝트 내용

등을 블로그에 정리해보려고 한다.

 


시스템 엔지니어뿐만 아니라 애플리케이션을 개발하는 소프트웨어 엔지니어에게도 컴퓨터 구조와 운영체제의 학습은 문제 해결 능력을 강화하는 필수적인 요소라고 생각한다. 프로그램은 하드웨어에서 실행되며, 운영체제는 이를 조작하고 모니터링한다. 이를 통해 운영체제를 이해하면 문제 발생 시 실마리를 찾을 수 있다.

 

이를 학습하고 이해한다면,

  1. 운영체제가 제공하는 정보를 해석할 수 있고,
  2. 운영체제에게 필요한 정보를 요청할 수 있으며,
  3. 하드웨어 - 운영체제 - 응용 프로그램 간의 상호작용을 깊이 파악할 수 있다.

5개월 동안, 그리고 그 5개월 이후에는 이러한 역량이 확장 되어 있고, 보다 깊은 이해와 통찰력을 가지고 업무에 임하는 개발자가 되어있길 희망한다.

 

그리고 기회와 역량이 된다면 리더분(나의 팀 리더님은 Google, Microsoft, Qualcomm 본사에서 리눅스 및 커널 개발자셨다..)께서 추천해주신 https://www.outreachy.org/ 에도 참여해볼까 한다.