프로그래밍의 예술을 되새기게 하는 프로젝트 아이디어들
(codecrafters.io)- 73개의 프로그래밍 프로젝트 아이디어를 통해 개발자들이 학습과 창의적 도전을 동시에 경험할 수 있도록 구성
- 각 프로젝트는 네트워킹, 시스템, AI, 그래픽스, 보안, 데이터베이스 등 다양한 영역을 포괄
- 대부분의 아이디어가 핵심 기술 원리를 직접 구현하도록 설계되어, 이론과 실무를 함께 익힐 수 있음
- 각 항목에는 관련 논문, 공식 문서, 튜토리얼 링크가 포함되어 있어 학습 경로를 명확히 제시
- 프로그래밍을 단순한 코딩이 아닌 탐구와 창조의 예술로 인식하게 하는 계기 제공
개요
- 많은 개발자들이 무엇을 만들지 모르는 상태에서 사이드 프로젝트를 시작하고 싶어함
- 인터넷에는 흔하고 지루한 아이디어가 많음
- 이 글은 학습 가치가 높고 재미있는 73개의 프로젝트를 제시
- 각 프로젝트는 특정 기술 개념을 직접 구현하며 배울 수 있도록 구성
네트워킹 및 시스템 프로젝트
- BitTorrent 클라이언트: P2P 네트워킹의 작동 원리를 배우기 위한 파일 다운로드 클라이언트 구현
- DNS 서버: 쿼리 수신, 패킷 파싱, 도메인 해석, 캐싱 기능을 포함한 서버 구축
- 컨테이너 런타임: Docker 없이 커널 네임스페이스, chroot, 프로세스 격리를 학습
- TCP/IP 스택: 리눅스 사용자 공간에서 TCP/IP 프로토콜을 직접 구현
- 로드 밸런서: 백엔드 서버 간 요청 분산, 상태 점검, 세션 유지 기능 구현
데이터 및 분산 시스템
- RAFT 프로토콜: 분산 합의와 장애 복구를 지원하는 시스템 구현
- Redis 클론: 기본 명령, RDB 지속성, 복제, 트랜잭션을 포함한 인메모리 데이터베이스 구축
- Kafka 브로커: 토픽 생성, 메시지 생산·소비 요청을 처리하는 분산 로그 시스템 구현
- SQL 엔진 및 옵티마이저: SQLite 구조를 모방해 쿼리 실행과 최적화 과정을 학습
- CI 시스템: Git 저장소 감시, 테스트 실행, 결과 보고를 자동화하는 통합 시스템 구축
인공지능 및 알고리듬
- Wordle 솔버: 정보이론과 엔트로피 개념을 활용한 단어 추론 프로그램
- 딥페이크 생성기: Optimal Transport를 이용해 얼굴 변환 구현
- 랜덤 포레스트: 의사결정나무와 랜덤 포레스트를 직접 구현해 분류 문제 해결
- 신경망 프레임워크: 텐서, 오토그래드, 옵티마이저를 포함한 딥러닝 프레임워크 구축
- 진화적 설계: 유전 알고리듬을 이용해 기계 구조를 자동 진화시키는 시뮬레이션
그래픽스 및 게임 개발
- Ray Tracer: 구, 평면, 조명으로 구성된 3D 장면을 렌더링
- OpenGL 렌더러: 그래픽스 프로그래밍의 기본기를 익히는 미니 렌더러 구현
- Dangerous Dave 리메이크: SDL을 이용한 고전 게임 재현
- 체스 엔진: UCI 엔진을 포함한 체스 게임 구현
- Procedural Crossword: 제약 전파를 이용한 자동 크로스워드 생성
보안 및 암호화
- 인증 서버 (JWT/Sessions) : 암호화, 토큰 만료, 세션 관리 구현
- 익명 투표 시스템: 제로지식증명(ZKP)을 이용한 암호화 투표 설계
- VPN: 중앙 서버 없이 트래픽을 중계하는 메쉬 VPN 구축
- 멀웨어 실험: 가상머신 환경에서 방화벽 대응 테스트
- Zip 아카이버: 압축, 암호화, 번들링 기능을 직접 구현
웹 및 애플리케이션 개발
- 웹 서버: HTTP 요청 처리, 정적 파일 제공, 라우팅, 리버스 프록시 지원
- 협업 편집기: CRDT 기반의 분산 텍스트 편집기 구현
- 브라우저 엔진: HTML/CSS 파싱과 렌더링을 수행하는 간단한 엔진 구축
- 비디오 에디터: 브라우저 내에서 실행되는 클라이언트 사이드 편집기
- 브라우저 확장 프로그램: 비밀번호, 폼, 클립보드 상태를 저장하고 자동 입력
데이터 시각화 및 검색
- Googlebot: 웹 크롤러를 만들어 검색 시스템의 기본 구조 학습
- Wikipedia 검색 엔진: 인덱싱, 토큰화, 랭킹 알고리듬 구현
- 지식 그래프: 엔티티 간 관계를 시각화하고 웹에서 자동 업데이트
- Google Maps 엔진: 도로, 지형, 장소 데이터를 인덱싱하는 지도 시스템
- CDN 캐싱 시스템: 정적 자산의 중복 요청을 방지하는 캐시 구조 설계
하드웨어 및 임베디드
- 레이저 태그 시스템: IR 인코딩과 MQTT 통신을 활용한 실시간 감지 시스템
- 스마트 홈 앱: IR 기기 제어, 스케줄링, 자동화를 지원하는 IoT 프로젝트
- Game Boy Advance 에뮬레이터: CPU, 메모리, 그래픽, 입력 구조를 재현
블록체인 및 금융
- 비트코인 노드: 블록 다운로드 및 검증 기능 구현
- 주식 거래 봇: 이벤트 기반 시스템으로 자동 매매 수행
- 익명 투표 및 스마트 계약: 블록체인 기반의 신뢰성 있는 투표 시스템
마무리
- 73개의 프로젝트는 핵심 기술을 직접 구현하며 학습하는 실험적 접근을 강조
- 각 아이디어는 공식 문서, 논문, 튜토리얼 링크로 이어져 실습 중심 학습을 유도
- 프로그래밍을 탐구와 창조의 예술로 재발견하게 하는 실천적 제안
Hacker News 의견들
-
어떤 이들은 이 목록이 AI가 생성한 것 같다고 하지만, 나는 오히려 ‘처음부터 직접 만드는 것’이 AI 의존을 줄이는 최고의 방법이라 생각함
일본에서는 이런 과정을 ‘수행(修行, Shugyo) ’이라 부름. 장인은 효율성 때문이 아니라 강철의 본질을 이해하기 위해 오랜 시간 도구를 갈음
Redis나 Git을 직접 만드는 건 결과물이 아니라 그 과정의 마찰을 통해 사고 모델을 쌓는 일임. 이게 바로 AI가 대신할 수 없는 부분임- 일본의 세밀함에 대한 집중은 늘 감탄스러움. 나도 그런 태도를 내 삶에 적용하려고 노력 중임
- 반복이 포함된다는 뜻인가 궁금함. Redis를 20번쯤 다시 만들어보는 건가 하는 생각이 듦
- 약간의 마케팅 요소는 있지만, 그래도 자사 유료 튜토리얼 대신 Redis 공식 문서를 참고하라고 권하는 점은 괜찮다고 봄
- 댓글마다 일본에서 쓴다고 언급하는 게 조금 과한 듯함. 계정 연식으로 보면 봇 느낌도 살짝 있음
- 최고의 촬영감독들이 조명팀 출신이었던 경우가 많았음. 같은 원리라고 생각함
-
내가 만든 프로젝트 아이디어 모음인 Challenging programming projects every programmer should try을 소개함
- 이 리스트는 간결하고 각 프로젝트에서 무엇을 배우는지 명확히 설명되어 있어서 훨씬 좋음. 반면 원글은 ‘읽어야 할 100권의 책’ 같은 느낌으로 실천보다는 나열에 가까움
- 학부 시절 Zync FPGA로 Space Invaders를 구현했는데, 하드웨어와 소프트웨어를 나눠 설계하는 게 정말 재미있었음. 어떤 친구는 마이크 주파수 분석 블록을 만들어 리코더로 조작했음
- 이 리스트가 더 마음에 듦. 스프레드시트 구현은 아직 안 해봤지만, 그건 굳이 하고 싶진 않음
- 예전에 북마크해뒀던 글이라 반가움
-
codecrafters.io에서 나온 목록임. 이 플랫폼은 프로젝트를 단계별로 구현하게 하면서 통합 테스트와 커뮤니티를 제공함
나도 ‘Build your own Redis’ 프로젝트를 진행 중인데 꽤 재미있음. AI가 만든 건 아니고, 커뮤니티에서 받은 아이디어를 모은 것 같음 -
BitTorrent 클라이언트를 직접 만들어보길 강력히 추천함. 명세가 단순하고, 세부 문제들이 흥미로움. 완성 후 Debian 커널을 직접 다운로드할 때의 보람이 큼
Magnet 링크나 시딩 기능을 추가로 구현하면 더 깊게 배울 수 있음. 이 경험 덕분에 P2P 시스템과 DHT(Chord 등)에 관심이 생김- 대학 시절 ‘P2P 클라이언트’를 만드는 프로젝트를 했는데, 핸드셰이킹이나 청크 크기 설계 등 직접 구현하는 과정이 정말 즐거웠음
-
이 목록은 좀 이상함. 예를 들어 #58은 malloc 구현이라 초보자에게는 꽤 어려운 주제인데, 바로 다음 #59는 스트리밍 프로토콜을 처음부터 만들라고 함. 난이도 편차가 너무 큼
- 중간쯤 읽다 보면 AI가 쓴 듯한 문체가 느껴짐. 자연스럽지 않음
-
4chan의 /g/ 프로그래밍 챌린지에 대한 의견이 궁금함. 난이도 구분이 다소 임의적이라 느낌. 예를 들어 부트로더가 C 컴파일러보다 어렵다고 하는 건 좀 이상함
참고 이미지 링크- 링크가 이미지로 바로 열리지 않음.
.md파일로 연결하는 게 좋을 듯함
- 링크가 이미지로 바로 열리지 않음.
-
작고 완결된 도구나 프로토콜을 직접 만들어보는 게 좋음. 규모보다 명확함과 완성감에서 오는 만족이 큼
-
혹시 이게 ‘astroturfing’(조작된 홍보)인가 하는 의문이 듦
- CodeCrafters에서는 이런 일이 처음은 아님. 이전 사례 참고
-
어떤 프로젝트는 하루면 끝나지만, 어떤 건 학부 졸업작품이나 석사 논문급 규모임
-
이 목록을 보니 내가 좋은 프로그래머가 아닌 것 같다는 생각이 듦
- 대부분의 프로젝트는 처음엔 버겁게 느껴지지만, 작은 단위로 쪼개면 충분히 해볼 만함
- 사실 숙련된 개발자에게도 어려운 과제들이 많음. 하지만 그게 도전의 이유임. 남과 비교하지 말고 배우는 과정에 집중해야 함
시작하려면 관심 있는 분야의 선행 연구를 살펴보는 게 좋음. 예를 들어 Adam Dunkels의 작업을 참고하면 좋음. 임베디드용이라 작고 이해하기 쉬움
필요하다면 AI 도구를 활용해 코드 이해나 생성에 도움을 받는 것도 추천함