읽기 설정
방송 중에 맨날 물어보시는데, 아시죠? 만약 제가 다시 처음부터 시작해서 제가 아는 모든 걸 다시 배워야 한다면, 지금 당장 어떻게 하면 가장 기초적인 내용을 배울 수 있을까요? 혹시 저를 모르시는 분들을 위해 말씀드리자면, 제 이름은 LLM 러닝입니다.00:00
직업은 보안 연구원인데, 인터넷에서는 C 같은 프로그래밍 언어로 코딩하는 법이나 어셈블리 같은 언어를 통해 컴퓨터 작동 원리를 가르쳐요. 처음 오신 분들은 환영합니다!00:11
구독 버튼 누르고 같이 초보 티 내는 법 배워봐요! 그럼 어떻게 하면 제일 빠르게 0에서 초보 딱지를 얻을 수 있을까요?00:22
이 질문을 정말 깊이 고민해 봤고, 그래서 제가 오늘 당장 실력 향상을 위해 할 수 있는 세 가지를 떠올랐어요. 첫 번째는, 저레벨 언어로 코딩하는 겁니다.00:29
이건 아마 말할 필요가 없을 테지만, 혹시 지금 코딩을 할 줄 안다면, 파이썬이나 루비, 심지어는 죄송하지만 자바스크립트 같은 언어를 알고 있다면, 그 프로그래밍 지식을 활용해서 메모리에 대한 완전하고 제약 없는 접근을 제공하는 언어를 배워보는 게 좋을 것 같아요.00:42
그리고 그 프로세스 공간에 가장 적합한 언어는 C 프로그래밍 언어라고 추천합니다.00:57
C가 시스템 프로그래밍의 미래에 적합한 언어라는 이야기가 많고, 저도 제 유튜브 채널에서 이 주제에 대해 자주 이야기하죠. Rust가 결국 C를 대체할 거라고 생각해요. 하지만 오늘 이 이야기는 하지 않을 겁니다. 이 비디오에서는 C가 학습하기에 가장 좋은 언어인 이유에 대해 이야기하고 싶습니다.01:01
그리고 C가 고급 언어인지 저급 언어인지에 대한 종교전 같은 논쟁은 피하겠습니다.01:16
이 영상의 설명을 위해 C는 저수준 언어입니다. 댓글에서 자유롭게 논의해주세요. C로 효과적으로 코딩하는 것은 효과적인 메모리 관리를 배우게 만듭니다. 만약 그렇지 않으면 코드가 안전하지 않기 때문에, 버그 없이 안정적인 코드를 작성하는 방법을 배우도록 강제합니다.01:21
씨에서 메모리 누수 없이, 해커에게 코드 접근 권한을 넘기지 않고, 코드가 그냥 멈추지 않도록 해야 할 것들이 정말 많아요.01:39
코딩을 배우려고 할 때, 언어는 어느 정도 알지만 뭘 만들어볼지 막막한 분들에게 제가 가장 추천하는 프로젝트는 HTTP 서버를 만드는 거예요.01:48
처음 언어를 배우시는 분들에게는 조금 어려워 보일 수도 있지만, HTTP RFC의 세세한 부분까지 익히게 해줄 뿐만 아니라 프로그래밍에 대해 정말 중요한 여러 가지를 배우게 될 거예요.01:57
예를 들어 HTTP 파서를 작성할 때, RFC 규격을 준수하는 코드뿐만 아니라 방어적으로 코드를 작성하는 것도 고려해야 합니다.02:08
인터넷상의 누구나 작성한 코드, 심지어 처리하고 읽는 코드까지 다루게 될 겁니다. 여러분의 코드를 공격받고 있다고 생각하고 다뤄야 합니다.02:16
방어적으로 코딩해야 합니다. HTTP 서버를 만들면 언어의 문서 읽는 방법을 정말 익숙하게 될 수 있습니다. 네트워크 스택을 머릿속으로 바로 알게 되는 것이 아니죠. man 페이지를 읽고, 문서를 읽고, 선택한 언어에서 반환값이 어떻게 작동하는지 읽는 방법을 배워야 합니다.02:23
C를 배우면 컴퓨터가 어느 정도 어떻게 작동하는지 알 수 있다고 생각해요. 그래서 프로그래밍 지식을 활용해서 C 같은 언어를 먼저 배우세요. 두 번째 단계로 어셈블리 언어를 배우는 거죠.02:40
제가 무슨 조립 코드만 쳐다보면 바로 척척 알아내는 마법사처럼 돼야 한다고 말하는 건 아니에요.02:52
어셈블리 변형을 알고, 명령어 수준에서 CPU가 어떻게 작동하는지 이해하면, 코드가 어떻게 동작할지 정말, 정말 정확하게 파악할 수 있다는 뜻이에요.02:59
그리고, C 코드 덩어리를 보고 그 안에서 CPU 아키텍처가 어떻게 작동하는지 대략적으로 파악할 수 있다면, 코드를 만들 때 어떤 것을 선택할지, 어떻게 코드를 설계해서 더 나은 성능을 낼지를 결정하는 초능력을 얻게 되는 거죠.03:09
지금 어셈블리를 배우는 가장 좋은 방법은 이 C 코드 조각을 가져와서 설명란에 넣어두고 컴파일해보고, 이 코드의 객체 덤프를 해볼 수 있는지 확인하는 거예요.03:22
리버스 엔지니어링을 통해 작동 방식을 분석하는 핵심은 그 CPU 아키텍처의 기초를 이해하는 것입니다. 이를 통해 시스템이 어떻게 돌아가는지에 대한 상당한 이점을 얻을 수 있습니다.03:34
세 번째 팁은, 저수준 언어로 코딩하는 법을 익히고, 코드를 작성할 때 컴파일러가 어떤 아키텍처 코드를 생성하는지, 그리고 일반적으로 그 아키텍처가 어떻게 작동하는지 이해하게 되면, 리버스 엔지니어링의 기초를 배우는 것을 추천합니다.03:43
자, 이게 여러모로 도움이 됩니다. 하나는, 혹시 당신이 멀웨어 리버스 엔지니어일 수도 있고, 버그를 찾아내고 바이너리를 분해하는 버그 바운터일 수도 있고, 아니면 그냥 코드를 보고 왜 제대로 작동하지 않는지 이해할 수 없는 사람일 수도 있다는 거죠.03:59
리버스 엔지니어링의 기초를 배우면, 단순하게 작동 원리를 이해하는 것뿐만 아니라, 어떻게 설계되었는지, 그리고 컴파일러가 최종적으로 어떤 결과물을 내놓게 되는지 근본적으로 알 수 있게 됩니다.04:13
역공학 문제들을 풀 때, 보통 특정 지식이나 사실에 기반을 두고 진행되는 경우가 많습니다. 예를 들어 인텔 CPU의 트랩 플래그와 관련된 내용이거나, 글로벌 오프셋 테이블과 관련된 내용일 수도 있죠.04:24
이런 어려움들을 겪으면서 배우는 작은 것들이 지식 도구 상자에 하나씩 쌓이게 되고, 시간이 지나면 Linux 운영체제에서 이진 파일들이 어떻게 구성되는지 전체적인 그림을 갖게 될 거예요. 그리고 crackmes.one 웹사이트 방문을 강력 추천합니다.04:38
이건 광고 아니에요. 협찬도 아니고요. 그냥 제가 좋아하는 웹사이트인데, 리버스 엔지니어링 챌린지들을 만들어서 올리는 사람들이 있는 곳이에요. 다운로드 받아서 컴퓨터에 실행하거나, 혹시 모를 경우 악성코드일 수도 있으니 가상 머신에서 돌릴 수도 있어요.04:56
저는 이런 어려움들이 정말 멋지고, 역공학 기술과 궁극적으로는 가장 기본적인 수준의 기술을 배우는 쉽고 빠른 방법이라고 생각해요.05:08
그리고 마지막으로, 사실 네 번째 비밀 보너스인데요. 음, 그 레벨에 대한 걸 정말 잘하게 되려면 보드를 하나 잡아서 그 보드에 C를 쓰면서 배우는 방법도 있습니다. 예를 들어, 이건 STM32입니다. ARM 기반 보드죠.05:17
이것은 STM32 F7 Nucleo입니다. C 언어를 배우고, 이어서 어셈블리 아키텍처를 익히고, 그런 다음 C 코드를 특정 마이크로컨트롤러 아키텍에서 실행할 수 있게 된다면, 다시 말해 STM과 같이, 혹은 아두이노나 RISC-V 보드, ESP32 같은 것에서 코드를 실행할 수 있게 된다면, 이는 굉장한 능력을 갖게 해 줄 겁니다.05:32
데이터 시트를 읽고, 그 데이터를 어떻게 해석해야 하는지, 그리고 코드를 다른 곳에서 실행 가능한 보드로 어떻게 이식해야 하는지를 이해해야 합니다.05:51
계산 능력이 점점 발전하고, 컴퓨터가 점점 더 오래되고, 기술적으로도 계속해서 발전함에 따라, CPU가 기본적인 수준에서 어떻게 작동하는지 점점 잊혀지는 것 같아요.06:00
제 아이폰을 꺼내서 전 세계 어디든 필요한 정보에 바로 접근할 수 있어요.06:12
진짜 놀라운 일이 벌어지는 모든 과정에서, 우리가 돌멩이한테 생각하게 속였다는 건, 솔직히 우리한테는 좀 와닿지 않는 것 같아요.06:17
제가 이 유튜브 채널을 만든 이유 중 하나는 사람들에게 컴퓨터가 어떻게 작동하는지 가르쳐주고 상기시켜주는 것입니다. 그리고 앞으로 나아갈 사람들을 양성하는 거죠. 결국 세계적인 '고참'들, 예를 들어 이 시스템들을 개발한 리누스 토발즈 같은 분들이 은퇴하시거나, 어쩌면 세상을 떠나시면…06:23
우리는 CPU 작동 방식을 이해하는 2세대 저급 아키텍트들을 보유하고 있습니다.06:42
만약 이 영상이 좋았거나 재밌었다면, 또는 함께 하고 싶다면 구독 버튼을 눌러주시면 정말 감사하겠습니다. 음, 다음에 또 만나요! 제가 받은 인터뷰 질문에 대한 다른 영상도 있는데, 정말 재밌고 CPU 작동 원리에 대해서도 많이 알게 됐어요. 바로 거기서 확인해 보세요. 다음에 또 봐요!06:47
AI Summary
LLM 러닝에서 초보 프로그래머를 위해 C 언어 학습의 중요성과 방법을 알려줘요. C 언어는 메모리 관리, 안정적인 코드 작성, 컴퓨터 작동 원리 이해에 도움을 주며, HTTP 서버 제작 프로젝트를 통해 언어 문서 활용 및 방어적 코딩을 연습할 수 있어요. 어셈블리 언어 학습, 리버스 엔지니어링, 보드 활용 등의 추가 팁도 제공하며, 궁극적으로는 시스템 개발자와 같은 핵심 인재를 양성하는 것을 목표로 하고 있답니다.
Key Highlights
- •C 언어 학습을 통해 프로그래밍 기초를 다지면 메모리 관리 능력이 향상돼요.
- •HTTP 서버 제작 프로젝트를 통해 방어적 코딩 연습을 할 수 있어요.
- •어셈블리 언어 학습은 CPU 작동 방식 이해 및 코드 성능 최적화에 도움이 돼요.
- •리버스 엔지니어링을 통해 디버깅 능력을 향상시킬 수 있어요.
- •STM32, 아두이노, RISC-V 보드 등을 활용하면 실질적인 하드웨어 제어 능력을 키울 수 있어요.


![#1: Getting Started with C Programming [2025] | C Programming for Beginners](https://i.ytimg.com/vi/KnvbUiSxvbM/mqdefault.jpg)