Stripe가 개발자 경험에 성공한 비밀과 Kinde가 바꾸는 미래
Stripe의 혁신적인 개발자 경험과 Kinde가 이끄는 인증 시스템의 미래를 살펴보고, 개발자 친화적 솔루션 도입 인사이트를 제공합니다.
Shelled AI (한국)
© 2025 Shelled Nuts Blog. All rights reserved.
Capture your moments quietly and securely
Stripe의 혁신적인 개발자 경험과 Kinde가 이끄는 인증 시스템의 미래를 살펴보고, 개발자 친화적 솔루션 도입 인사이트를 제공합니다.
Shelled AI (한국)
복잡한 환경에서 에이전트 협업 시뮬레이션 실습을 통해 멀티 에이전트 시스템의 실제 적용과 사례를 단계별로 체험해보세요.
Shelled AI (한국)
한 번의 API 호출로 인증과 결제를 동시에 처리하는 비밀 패턴을 소개합니다. 개발 효율과 보안을 동시에 향상시키는 최신 웹 개발 팁!
Shelled AI (한국)
어, 또 만났네요! 지난번 "Linux 6.16 업데이트 완벽 가이드" 글, 잘 보셨나요? 댓글로 “커널 소스코드 빌드랑 모듈 실습, 진짜 손에 잡히게 알려주세요!”라는 요청이 많아서, 오늘은 그 부분만 쏙쏙 뽑아 제대로 파헤쳐볼게요.
솔직히 말씀드리면, 저도 커널 빌드 처음 시도할 땐 “이거 하다가 컴퓨터 벽돌 되는 거 아냐?” 싶어서 진땀 좀 뺐습니다. 에러 메시지에 멘붕 오고, config 파일 건드리다 부팅 안 되고… 3시간 날린 적도 있어요. 근데 한 번만 제대로 해보면, “어라? 생각보다 논리적이네?”라는 깨달음이 옵니다. 여러분도 저처럼 삽질(?)하면서 배우면 금방 익숙해질 거예요.
오늘은 커널 소스코드 빌드부터, 나만의 모듈 작성, 실전 명령어, 그리고 중간에 삐끗할 때 대처법까지, 초보자 눈높이에 맞춰 하나씩 풀어드릴게요. 실패담, 교훈, 그리고 “여러분도 이런 생각 들죠?” 같은 공감 포인트까지 듬뿍 담았습니다. 너무 긴장하지 마시고, 저랑 같이 천천히 따라와 주세요!
리눅스 커널 구조, 듣기만 해도 머리 아프죠? 저도 처음엔 “이걸 내가 이해할 수 있을까?” 싶었어요. 근데 하나씩 뜯어보면, 생각보다 논리적이고 잘 짜인 시스템이더라고요.
리눅스 커널은 ‘모놀리식 커널’이에요. 즉, 커널이 한 덩어리로 빌드된다는 뜻이죠. 여기서 “그럼 기능 하나 바꿀 때마다 커널을 통째로 다시 빌드해야 해?”라는 의문이 생길 수 있는데, 바로 그 지점에서 **모듈화(Modularization)**가 등장합니다.
커널 config 파일(보통 .config
)에서 각 기능을 Built-in(=y) 또는 Module(=m), 혹은 **비활성화(=n)**로 선택할 수 있습니다.
예를 들어, USB 무선랜 드라이버를 모듈(m)로 빌드하면, 커널 재부팅 없이도 드라이버를 올렸다 내렸다 할 수 있어요. 저도 예전에 드라이버 실험하다가, 매번 커널 빌드하고 재부팅하느라 반나절 날린 적 있는데, 모듈로 바꾼 뒤로는 “이게 진짜 신세계구나!” 싶었습니다.
커널 빌드 시스템인 kbuild는 Makefile과 Kconfig 파일을 기반으로 동작합니다.
처음엔 Makefile 구조가 너무 복잡해 보여서 머리가 아팠는데, 핵심만 알면 오히려 편해요.
덕분에 ARM, x86, MIPS 등 아키텍처별로 옵션을 자동 처리하고, 필요한 모듈만 골라서 빌드할 수 있죠.
config 파일에서 “이건 모듈, 저건 빌트인”으로 고르면, 내 시스템에 딱 맞는 커널 이미지를 만들 수 있습니다.
커널 내부 API도 잘 정비되어 있어요. 예를 들어, 메모리 할당은 kmalloc, 동기화는 spinlock, 프로세스 정보 조회 등등…
근데 저도 처음엔 “이 함수 써도 되나?” 하다가 symbol not found 에러에 당황한 적이 많아요. 알고 보니 MODULE_LICENSE("GPL") 선언을 안 해서 그랬더라고요.
커널은 GPL(GNU General Public License)로 배포되기 때문에, 일부 심볼은 GPL 호환 모듈에서만 접근 허용입니다. 저처럼 MODULE_LICENSE 빼먹고 삽질하지 마세요!
저도 아직 실수 많이 하지만, 직접 만져보고 삽질해보는 게 제일 빠르더라고요. 여러분도 겁먹지 말고 도전해보세요!
이제 본격적으로 커널 소스코드 다운로드와 빌드 환경 설정을 해볼까요?
처음엔 “이거 어디서부터 시작해야 하지?” 싶을 수 있는데, 차근차근 따라오시면 됩니다.
공식 저장소 kernel.org에서 git으로 클론하는 게 제일 편합니다.
저도 예전엔 tar.gz로 받았다가, 버전 바꿀 때마다 압축 풀고 지우고… 시간 엄청 날렸어요. git 쓰면 롤백도 한방!
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
--depth=1
: 최신 커밋만 받아서 저장공간/속도 절약!특정 버전으로 작업하고 싶다면?
cd linux
git checkout v5.15
커널 빌드는 gcc, make, binutils 등 필수 도구가 필요합니다.
특히 gcc 버전! 최신 커널은 gcc 10 이상 권장.
gcc --version
make --version
# Ubuntu/Debian 계열
sudo apt update
sudo apt install build-essential gcc libncurses-dev bison flex libssl-dev libelf-dev
libncurses-devel
, Ubuntu에선 libncurses5-dev
… 이거 몰라서 한참 헤맸어요.)커널 빌드엔 의존성 패키지가 은근 많아요. 에러 메시지 잘 읽고, 필요할 때마다 추가 설치!
크로스 컴파일할 땐 환경변수 꼭 지정:
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
처음엔 헷갈릴 수 있지만, 실수하면서 배우면 금방 익숙해져요. 저도 아직 배우는 중이니, 같이 천천히 해봐요!
make menuconfig
실행 시 TERM 환경변수(xterm-256color 등) 설정 확인!이제 진짜 커널 컴파일 실습!
처음엔 “이거 진짜 내 손으로 가능할까?” 싶은데, 한 번만 제대로 해보면 논리적인 흐름이 보입니다.
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.3.tar.xz
tar -xf linux-6.9.3.tar.xz
cd linux-6.9.3
make menuconfig
.config
파일 생성!make -j$(nproc)
-j$(nproc)
: CPU 코어 수만큼 병렬 빌드!sudo make modules_install
sudo make install
/boot
에 vmlinuz-버전
, initrd.img-버전
생성.sudo update-grub
/boot/grub/grub.cfg
직접 확인.uname -r
.config
로 두면 기본값 유지하며 수정 가능.-j
옵션으로 빌드 속도 UP! (예: make -j4)이제 커널 모듈 개발의 기초와 샘플 모듈 작성, 실전으로 들어갑니다!
커널 모듈은 커널의 기능을 동적으로 확장해주는 작은 프로그램이에요.
네트워크 카드, USB, 파일 시스템 등도 모듈로 추가 가능!
저도 처음엔 “이게 왜 필요하지?” 싶었는데, 커널 다시 빌드하지 않고 기능을 추가/삭제할 수 있다는 점이 진짜 매력적이더라고요.
커널 빌드, 재부팅… 시간 엄청 걸리잖아요. 모듈은 실험할 때 필수!
커널 모듈은 반드시 init 함수(삽입 시 실행)와 exit 함수(제거 시 실행)가 필요합니다.
모듈 정보 매크로도 꼭 챙기세요!
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
static int __init hello_init(void)
{
printk(KERN_INFO "Hello, Kernel World!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "Goodbye, Kernel World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("홍길동");
MODULE_DESCRIPTION("간단한 Hello World 커널 모듈 예제");
printk
: 커널 로그 출력 (printf랑 비슷)module_init
, module_exit
: 로드/언로드 시 실행 함수MODULE_LICENSE
등: 정보 매크로, GPL 선언 안 하면 경고 뜹니다!저도 처음엔 “이거 꼭 써야 하나?” 했다가, 실제로 안 쓰면 모듈 로딩할 때 ‘taint’ 경고 뜨고, symbol 접근 안 돼서 고생했어요.
Makefile 작성이 제일 헷갈릴 수 있어요.
저는 obj-m := hello.o
빼먹고 빌드하다가 에러만 한참 봤습니다.
obj-m := hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
make
sudo insmod hello.ko
sudo rmmod hello
dmesg | tail
모듈 삽입하면 dmesg에 "Hello, Kernel World!"
삭제하면 "Goodbye, Kernel World!"
직접 해보면 감동이 옵니다.
커널 모듈은 확장성 최고, 기본 구조만 알면 진입장벽 낮아요.
저도 실수하면서 익혔으니, 여러분도 직접 코드 짜보고 dmesg로 결과 확인해보세요!
이제 모듈을 실제로 빌드하고, 시스템에 로드/언로드하는 방법!
저도 처음엔 “이거 잘못하면 시스템 망가지는 거 아냐?” 걱정했는데, 해보면 의외로 쉽습니다.
중간에 에러 나면 dmesg 로그 확인 습관, 꼭 들이세요!
Makefile은 “내가 뭘 컴파일할 건지 kbuild에게 알려주는 설명서”입니다.
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
make
hello.ko
생성!sudo insmod hello.ko
lsmod | grep hello
dmesg | tail
sudo rmmod hello
dmesg | tail
실수 많이 했지만, 반복하다 보면 금방 익숙해집니다.
에러 나면 dmesg 꼭 확인! 저도 아직 배우는 중이니, 같이 해봐요!
용어 | 설명 |
---|---|
kbuild | 커널 및 모듈 빌드 시스템. Makefile/Kconfig 기반으로 동작, 아키텍처별 빌드 자동화 지원. |
insmod | 커널 모듈(.ko 파일)을 커널에 직접 삽입하는 명령어. 의존성 자동 해결 X. |
modprobe | insmod와 달리, 의존성 모듈까지 자동으로 로드/언로드. 실무에서 더 많이 사용. |
lsmod | 현재 커널에 로드된 모듈 목록을 보여줌. |
rmmod | 커널에서 모듈을 제거. 파일명(.ko) 아닌 모듈명만 입력해야 함. |
printk | 커널 공간에서 로그 메시지 출력. dmesg로 확인 가능. |
menuconfig | 커널 옵션을 메뉴 형태로 설정하는 도구. .config 파일 생성. |
MODULE_LICENSE | 모듈의 라이선스 정보 선언. GPL 미선언 시 symbol 접근 제한. |
이번 실습을 통해 Linux 커널 구조와 모듈화 원리, 그리고 실제 커널 소스 다운로드부터 빌드, 모듈 작성과 로드/언로드까지 전 과정을 직접 경험하셨습니다.
저도 처음엔 “이거 하다가 시스템 망가지는 거 아냐?” 걱정했지만, 한 번 해보니 생각보다 논리적이고 재밌더라고요.
실습 중 만난 이슈, 삽질, 그리고 그 과정에서 얻은 깨달음이 진짜 내공이 됩니다.
최신 Linux 6.16의 빠른 파일 시스템, Rust 지원처럼, 여러분도 커널 내부 API를 적극 활용하며 모듈 기능을 확장할 수 있습니다.
이제 자신만의 커널 모듈을 만들어 보고, 실습 중 만난 이슈 해결 방법도 직접 적용해보세요.
한 걸음씩 도전하다 보면, 여러분도 곧 커널 개발의 전문가가 될 수 있습니다!
휴, 내용이 좀 많았죠?
그래도 한 번 차근차근 따라가면, “나도 커널 개발 할 수 있겠네!”라는 자신감이 생길 거예요.
실패해도 괜찮으니, 두려워하지 말고 한 번 도전해보세요.
저도 계속 배우는 중이니, 여러분의 삽질담과 성공담도 꼭 들려주세요! 🚀