regx64
트랜지스터부터
컴파일러까지.
컴퓨터가 실제로 어떻게 돌아가는지,
아래층부터 하나씩 직접 만들어 보며 배우고 있습니다.
컴퓨팅 스택
다섯 개의 층.
열세 개의 프로젝트.
서로 다른 프로젝트처럼 보이지만, 모두 한 대의 컴퓨터를 위아래로 가로지릅니다. 위 모형의 층과 같은 색입니다.
- L5 응용 Percentagemusic.playerMUXIC.jsKSCAliner-notes기지국chespediaboj-cli
- L4 언어 Cotton
- L3 운영체제 Hobby OSSqimp
- L2 보안 KDAA
- L1 컴퓨터 구조 시스톨릭 배열
L1 · 컴퓨터 구조
폰 노이만 병목과 시스톨릭 배열
아두이노 네 대로
만든 행렬 곱셈기.
아두이노 나노 4대로 2×2 시스톨릭 배열을 만들고, 폰 노이만식 순차 처리와 같은 행렬곱을 돌려 비교했습니다. PE끼리는 비트뱅잉으로 통신하고, 처리 시간과 데이터 이동 횟수를 쟀습니다.
- 프로세서
- ATmega328P × 5
- 클럭
- 16 MHz
- 배열
- 2 × 2, 출력 고정형(OS)
- 연결
- GPIO 비트뱅잉
- 클럭 반주기
- 50 µs
- 스큐
- 4,000 µs
- 게시
- Zenodo, 2026
- 행렬 A · B2×K · K×2
- PE(0,0) 주입마스터
- 가로 · 세로 전달단계당 6회 이동
- 스큐 대기4,000 µs
- MAC부분합 누산
- C2×2
실험 결과 · 5회 반복 측정
이동은 25% 줄었습니다.
그런데 300배 느려졌습니다.
- 25%
- 더 적은 데이터 이동. 격자 6K회, 단일 보드 8K회.
- 295–326×
- 격자가 단일 보드보다 느렸던 정도.
- 417×
- 이동 한 번의 비용 차이. 3.23 µs 대 1,346.9 µs.
- 1.0%
- 처리 시간 중 실제 계산에 쓰인 비율.
- 보드 간 통신4,000 µs · 49.5%
- 스큐 대기4,000 µs · 49.5%
- 연산 등81 µs · 1.0%
데이터 재사용은 이론대로 일어났지만, PE 사이 전달이 칩 내부 배선이 아니라 보드 사이 핀 통신이 되자 이동 한 번이 약 417배 비싸졌습니다. PE를 왜 한 칩 안에 모아야 하는지를 거꾸로 보여 준 결과입니다.
L2 · 보안
KDAA
타건음만 듣고
한글을 읽을 수 있을까.
키보드 소리로 입력을 알아내는 음향 사이드채널 공격을 한글 두벌식 자판에 적용하는 팀 연구입니다. 영문과 달리 한글은 초성·중성·종성이 음절로 합쳐지는 규칙이 있어서, 분류기가 틀린 자모도 오토마타가 걸러 낼 수 있습니다. 저는 타건음 하나를 38개 기호로 분류하는 음향 프런트엔드(CNN)를 맡았습니다.
- 대상
- 두벌식
- 녹음
- 48 kHz · mono
- 입력
- log-mel 64 × 48
- 분류
- 38개 (자모 33 + 특수키 5)
- 시나리오
- 근접 · 원거리 · 소음
- 배포 목표
- ESP32-S3, int8
- 타건음 녹음48 kHz · 키로거 라벨
- 세그멘테이션onset · 100 ms
- log-mel64 × 48
- CNNtop-N · 38개 기호
- 오토마타 빔두벌식 조합
- 한글복원 문장
L3 · 운영체제
Hobby OS
부트섹터부터
VGA 드라이버까지.
x86-64 어셈블리로 만드는 운영체제입니다. 커널 로드, 32비트 보호 모드, 페이징, 64비트 롱 모드를 지나 지금은 freestanding C 커널에서 VGA 드라이버가 돌아갑니다. 테스트는 QEMU로 합니다.
- 부트섹터
- 512 B
- 페이지
- 2 MB, 항등 매핑
- EFER
- 0x500
- VGA 버퍼
- 0xB8000, 80×25
- 에뮬레이터
- QEMU
- 부트섹터16-bit 리얼 모드
- 보호 모드32-bit
- 페이징2 MB 페이지
- 롱 모드64-bit
- C 커널kmain()
- VGA텍스트 모드
L4 · 언어
Cotton
마음에 드는 것만
골라 만드는 언어.
Rust, JavaScript, Python에서 좋았던 부분을 섞은 식 중심 언어입니다. 설계한 문법 전체를 실행하는 레퍼런스 인터프리터를 C++17로 만들었고, 다음은 바이트코드와 LLVM입니다.
- 구현
- C++17, 4,134줄
- 외부 의존성
- 0개
- 구성
- 렉서 · 파서 · 인터프리터
- 예제
- 5개
- 다음
- 바이트코드 · LLVM
- 소스.cot
- 렉서토큰
- 파서AST
- 인터프리터트리 워킹
- 실행값
L5 · 응용
Percentage
쌓으면,
보입니다.
- 코드
- TypeScript 7,471줄
- PerMark
- 1,980줄
- 테스트
- Vitest 약 200개
- 마이그레이션
- 7개
- 스택
- Next.js · Supabase
- PerMark위키 문법
- 렉서토큰
- 파서트리
- 렌더러화면
- 문서Supabase
L5 · 응용
music.player
제가 들으려고
만드는 플레이어.
곡을 검색하면 YouTube에서 음원을 찾아 재생하는 개인용 뮤직 플레이어입니다. 인프라를 네 번 옮긴 끝에 지금은 Oracle Cloud 무료 VM 두 대에서 돌아갑니다.
- 커밋
- 18일간 49개
- 서버
- VM 2대
- 상시 비용
- $0
- 배포 구조 변경
- 4번
- 스택
- Next.js 14 · Docker
- 검색iTunes Search API
- 매칭YouTube Data API
- 추출확장 → Companion
- 재생Range · IndexedDB
L5 · 응용
MUXIC.js
mp3를 받아 오는
라이브러리.
URL을 넣으면 이미 열린 mp3 오디오 스트림을 돌려주는 라이브러리입니다. music.player의 오디오 추출 계층으로 쓰려고, URL 해석과 실제 추출을 두 층으로 나눠 다시 설계했습니다.
- 소스
- TypeScript 514줄
- 테스트
- bun test 14개
- 추출 엔진
- 2개
- 빌드
- 0단계
- 라이선스
- MIT
- URLyoutube.com/…
- resolver순수 함수
- { site, id }식별자
- engineytdlp-ffmpeg
- streamaudio/mpeg
L5 · 응용
KSCA
학생 논문에도
영구 주소를.
전국 청소년 컴퓨터 사이언스 학회용 웹 서비스입니다. Zenodo 같은 논문 아카이브에 영구 식별자, APA·BibTeX 인용, 버전 관리를 넣고, 게시판을 붙입니다. 지금 구현을 시작했습니다.
- 식별자
- KSCA-YYYY-NNNNNN
- 인용
- APA · BibTeX
- 자동 비공개
- 신고 3건
- 스택
- Next.js · Supabase
- 상태
- 구현 중
- 업로드PDF · 초록
- 식별자 발급원자적 카운터
- 새 버전concept_id 유지
- 인용APA · BibTeX
더 만든 것들
작게 시작한 것들도
전부 스택 위에 있습니다.
-
L5 · 응용
liner-notes
인디 밴드 가사의 한 구절과 그 해석을 나누는 커뮤니티. 앨범 → 트랙 → 구절 순으로 데이터를 묶고, 가사 전문 검색을 붙였습니다.
- 스택
- Next.js · Supabase
- 검색
- Postgres tsvector
- 데이터
- iTunes · lrclib
-
L5 · 응용
기지국
수능·평가원 국어 기출 지문을 원문 단위로 모아 연도·출처·분야로 찾아보는 아카이브. 지문마다 7자리 ID를 붙이는 체계를 따로 설계했습니다.
- 수록
- 평가원 지문 239개
- 범위
- 2011–2026
- ID
- 26K1111 형식
-
L5 · 응용
boj-cli
백준 온라인 저지를 터미널에서 쓰는 도구. 문제를 받아 폴더와 템플릿을 만들고, 예제 입력으로 채점까지 돌립니다.
- 구현
- Rust 1,016줄
- 명령
- init · login · add · run · submit
- 템플릿
- C · C++ · Java · JS · Python · Rust
-
L3 · 운영체제
Sqimp
QEMU를 명령줄 대신 창에서 다루는 GUI. 여러 시스템 에뮬레이션과 디스크 이미지 생성을 목표로 두 명이 함께 만들고 있고, 아직 릴리스 전입니다.
- 스택
- Tauri · Next.js · Rust
- 개발
- 2인, 2024–2025
- 상태
- UI 단계
-
L5 · 응용
chespedia
체스 규칙과 지식을 MDX 문서로 쌓는 사이트. 프런트는 Next.js, 서버 함수는 Vercel 위의 Rust로 시작했습니다.
- 스택
- Next.js · MDX · Rust
- 배포
- Vercel
- 상태
- 초기 단계
소개
아래층부터
직접 만들어 봅니다.
방정훈입니다. 컴퓨터공학을 공부하는 학생이고, 컴퓨터가 실제로 어떻게 돌아가는지 아래층부터 하나씩 만들어 보며 배우고 있습니다. CPU 구조, x86-64, 컴파일러, 하드웨어 보안에 관심이 있고, 회로이론과 미적분은 기초부터 따로 공부하는 중입니다.
- 이메일redbean.of@gmail.com
- 코드github.com/regx64
- ORCID0009-0009-0896-3833
- 이력한 장으로 보기 · PDF
- EnglishSummary in English
- 한국코드페어 해커톤 부문 본선 진출
- 임베디드SW 경진대회 세종대학교 총장상
- 부산광역시교육청 정보영재교육원 3년 과정
- 같은 교육원 학업 우수상
x86-64 ASMCC++17RustTypeScriptNext.jsSupabaseArduinoKiCadQEMUDockerOracle Cloud