← 목록으로

100일 코딩 챌린지 완주! 삽질과 성장의 기록: 무엇을 만들고, 무엇을 깨달았나?

2026. 5. 16.

100일 코딩 챌린지 완주! 삽질과 성장의 기록: 무엇을 만들고, 무엇을 깨달았나?

<kbd>최종 업데이트</kbd> #100DaysOfCode 챌린지가 드디어 공식적으로 막을 내렸습니다!

물론 완벽하진 않습니다. 모든 기능이 쌩쌩 돌아가는 것도 아니고, 계획했던 모든 것을 끝마치지도 못했죠. 하지만 매일 꾸준히 책상에 앉아 코드를 쓰고, 디버깅하고, 일부는 세상에 내보내고, 그 모든 과정에서 끊임없이 배우는 것, 바로 그 100일간의 여정 자체는 성공적으로 마무리했습니다. 사실, 그게 가장 중요한 목표였거든요.


어떻게 시작했는지 궁금하시다면? 100일 코딩 챌린지 Day 1: React & Tailwind 시작 여기를 참고해 보세요.


왜 이 챌린지를 시작했나

챌린지를 시작하기 전, 저는 일종의 '정체기'에 빠져 있었습니다. 뭘 배워야 할지 몰라 헤매는 정체기가 아니었죠. 오히려 배우고 싶은 건 명확한데, 막상 의자에 앉아 실행에 옮기기가 너무 힘들었던 겁니다. 리액트를 오랫동안 붙잡고 있었지만, 사실상 '기분 내킬 때만' 코딩하는 식이었어요. 마음이 동하면 코드를 짰고, 그렇지 않으면 몇 주가 그냥 흘러가버렸습니다. 배우려는 의지는 변함없었지만, 실제 학습은 완전히 멈춰버린 상태였죠.

이런 문제를 해결하고자 스스로에게 강제한 시스템이 바로 100일 코딩 챌린지였습니다. 규칙은 간단했어요. 매일 코드를 쓰고, 매일 그날 배운 내용을 블로그 글로 정리하는 것. 단순히 코드를 짜는 것만큼이나 블로그 포스팅이 중요했죠. '오늘 뭐 했어요?'라는 질문에 '아무것도 안 했어요'라고 답할 수 없게 만드는 강력한 장치였거든요.

또 다른 목표는 '노출'이었습니다. 풀스택 개발에는 프론트엔드/백엔드 프레임워크, 데이터베이스, 인증, API, 배포 등 수많은 요소가 얽혀 있다는 막연한 생각은 있었지만, 실제로 대부분을 제대로 다뤄본 적이 없었거든요. 뭔가를 제대로 만들려면 몇 년은 더 배워야 할 거라는 잘못된 믿음이 있었습니다. 하지만 100일 챌린지는 그런 저의 생각이 완전히 틀렸음을 증명해 주었어요. 학습이 얕아서가 아니라, '만들면서 배우는(learning-by-building)' 방식의 학습 속도가 제가 예상했던 것보다 훨씬 빠르다는 걸 깨달았기 때문입니다. 제가 실무에서 새로운 기술 스택을 도입할 때마다 느끼는 거지만, 책이나 강의만 붙잡고 있는 것보다 일단 작은 프로젝트라도 직접 만들면서 부딪혀 보는 게 훨씬 빠르게 익숙해지고 문제를 해결하는 노하우도 얻게 되더라고요.


100일간의 여정 요약

1일~60일차: JavaScript 스택 집중

리액트로 시작해서 리액트 내에서 TypeScript를 사용해보고, 백엔드로는 Node.js와 Express, 데이터베이스로는 MongoDB와 Mongoose를 다뤘습니다. 그리고 Next.js로 마무리했죠. 60일 동안 JavaScript 풀스택 전반을 훑어본 셈입니다. 이 기간이 끝날 무렵에는 Next.js와 MongoDB로 할 일 관리 앱, React와 TypeScript로 여행 목록 앱, 그리고 React, Express, MongoDB를 활용한 완전한 인증 시스템(회원가입, 로그인, JWT 기반 세션, 등록된 사용자 목록을 보여주는 대시보드 포함)을 구축할 수 있게 되었습니다.

61일~72일차: Python 기초 다지기

이 시기에는 좀 과신했던 것 같습니다. 대학 때 파이썬을 다뤄봤으니 가볍게 복습하면 될 거라 생각했죠. 그런데 막상 클래스 하나를 짜려니 손이 굳어버리더군요. 결국 장고는커녕, 파이썬 함수, 객체 지향 프로그래밍(OOP), 모듈, 예외 처리 등 기초를 제대로 다시 공부하는 데만 꼬박 사흘을 보냈습니다. 정말 필요한 '겸손 학습'의 시간이었죠.

73일~85일차: Django와 Flask로 백엔드 깊이 파기

장고 학습 단계에서 프로젝트를 만들며 Django 기반의 구인 게시판인 DevBoard를 구축했습니다. 이어서 8일 동안 Flask, 라우트, 템플릿, SQLAlchemy, WTForms, 그리고 Flask-Login을 활용한 인증 등을 배우고, Flask 스택의 최종 프로젝트로 작은 가계부 앱을 만들었습니다.

86일~100일차: 대망의 캡스톤 프로젝트: DevCollab

100일 챌린지의 최종 프로젝트입니다. 14일 동안 Django REST Framework 백엔드, Next.js 프론트엔드, PostgreSQL 데이터베이스를 활용하여 풀스택 개발자 협업 플랫폼을 밑바닥부터 구축했습니다. 배포는 Railway와 Vercel을 이용했습니다.


완성된 프로젝트들

솔직히 말씀드리자면, 이 모든 프로젝트가 완벽하게 완성된 것은 아닙니다. 또, 모든 기능이 흠잡을 데 없이 작동하는 것도 아니고요. 이 점은 숨김없이 말씀드립니다.

할 일 관리 앱 (Task Management App) — (링크) Next.js와 MongoDB로 개발했습니다. 사용자가 할 일을 생성, 업데이트, 삭제할 수 있는 기본적인 CRUD 앱입니다. 별도의 인증 기능은 없지만, Next.js와 MongoDB 스택이 유기적으로 잘 작동한다는 것을 보여주는 깔끔한 예시라고 할 수 있죠.

여행 목록 앱 (Tour Listing App) React와 TypeScript로 만든 여행 목록 앱입니다. 여행 정보와 세부 사항을 보여주는 작은 프로젝트이지만, 저의 첫 본격적인 TypeScript 프로젝트였습니다. 타입 안정성 덕분에 일반 JavaScript였다면 미처 발견하지 못했을 버그들을 개발 단계에서 여러 번 잡아낼 수 있었죠.

인증 시스템 (Authentication System) — (링크) React, Express.js, MongoDB를 사용해 구축했습니다. 사용자가 회원가입 및 로그인을 할 수 있고, 대시보드에서는 등록된 사용자 목록을 보여줍니다. JWT 기반의 인증 시스템이 적용되었죠. 이 프로젝트는 제가 처음으로 '진짜 백엔드'와 '진짜 프론트엔드'를 연결해본 경험으로, 단순한 프론트엔드 개발이 아닌 '풀스택 개발'의 맛을 보게 해준 순간이었습니다.

Flask 가계부 (Flask Expense Tracker) — (링크) Flask, Flask-SQLAlchemy, Flask-WTForms, Flask-Login을 활용하여 만들었습니다. 사용자가 지출 금액, 카테고리, 상세 설명, 날짜 등을 기록할 수 있으며, 필터링된 목록과 총계를 확인할 수 있습니다. 작지만 Flask 스택 전반을 다룬 완전한 애플리케이션입니다.

DevBoard: Django 구인 게시판 장고 학습 섹션에서 프로젝트를 만들던 중 구축한 장고 기반 구인 게시판입니다. 고용주는 회원가입 후 채용 공고를 올릴 수 있고, 구직자는 지원할 수 있습니다. 컨셉은 명확하고 고용주 측 기능은 잘 작동하지만, 구직자 측의 지원 과정, 채용 공고 목록 페이지, 그리고 일부 라우팅 로직에 문제가 있어 현재 활발히 디버깅하고 수정 중입니다. 아직 배포되지 않았으며, 배포된 척하지도 않겠습니다.

DevCollab: 개발자 협업 플랫폼 (링크) 이번 챌린지의 대미를 장식한 캡스톤 프로젝트입니다. 자세한 내용은 아래에서 다루겠습니다.


DevCollab: 캡스톤 프로젝트 심층 분석

[클릭] 전체 기술 스택 보기

  • 프론트엔드: Next.js, Tailwind CSS
  • 백엔드: Django REST Framework (DRF)
  • 데이터베이스: PostgreSQL
  • 인증: JWT (SimpleJWT)

DevCollab은 프로젝트 아이디어가 있는 개발자가 협업할 사람을 찾고, 흥미로운 프로젝트에 참여하고 싶은 개발자가 그 프로젝트를 찾을 수 있는 플랫폼입니다. 프로젝트 소유자는 프로젝트 설명, 기술 스택, 필요한 역할 등을 게시하고, 다른 개발자들은 이를 둘러보고 마음에 드는 프로젝트를 발견하면 메시지와 함께 협업 요청을 보냅니다. 프로젝트 소유자는 이 요청들을 검토하고 수락하거나 거절할 수 있죠. 모든 사용자는 자신의 기술, 자기소개, 현재 참여 중인 프로젝트 등을 보여주는 공개 프로필을 가집니다.

아키텍처

이 프로젝트는 완전히 분리된 두 개의 애플리케이션으로 구성됩니다.

  • 백엔드: Django + Django REST Framework, PostgreSQL 데이터베이스를 사용하며 Railway에 배포.
  • 프론트엔드: Next.js (App Router), Tailwind CSS로 구축하여 Vercel에 배포.

이 둘은 HTTP를 통해서만 통신하죠. Next.js 프론트엔드는 Axios와 JWT 인터셉터를 활용하여 Django 백엔드 API를 호출합니다. 이 인터셉터는 모든 인증된 요청에 액세스 토큰을 자동으로 첨부하고, 토큰이 만료되면 리프레시 토큰으로 자동으로 갱신한 후 원래 요청을 재시도하는 방식으로 작동합니다.

인증djangorestframework-simplejwt를 활용한 JWT 기반입니다. 액세스 토큰은 30분, 리프레시 토큰은 7일 후에 만료됩니다. 토큰 로테이션이 적용되어 있어, 토큰을 갱신할 때마다 새로운 리프레시 토큰이 발급되고 이전 토큰은 블랙리스트 처리됩니다.

Django 백엔드는 다음 주요 리소스 그룹의 REST API를 제공합니다. 인증(회원가입, 로그인, 로그아웃, 토큰 갱신), 사용자 프로필(본인 프로필 조회 및 업데이트, 사용자명으로 다른 공개 프로필 조회), 프로젝트(기술 스택 및 역할별 검색 및 필터링을 포함한 완전한 CRUD), 그리고 협업 요청(보내기, 목록 조회, 수락/거절, 본인이 보낸 요청 조회) 엔드포인트입니다. 사용자 지정 권한(Custom permission classes)을 통해 소유권이 엄격하게 적용됩니다. 프로젝트 소유자만이 프로젝트를 수정하거나 삭제할 수 있고, 요청을 수락하거나 거절할 수 있으며, 요청을 보낸 당사자만이 본인의 보낸 요청을 조회할 수 있도록 설계했습니다.

Next.js 프론트엔드는 크게 아홉 가지 주요 페이지로 구성되어 있습니다. 랜딩 페이지, 검색 및 필터 기능이 있는 프로젝트 둘러보기 페이지, 네 가지 상태를 가진 액션 버튼이 있는 프로젝트 상세 페이지(방문객을 위한 로그인 프롬프트, 소유자를 위한 편집/삭제, 기존 요청자를 위한 상태 배지, 신규 요청자를 위한 지원 버튼), 프로젝트 생성, 프로젝트 편집, 프로젝트 지원, 본인 프로젝트와 수신 요청을 관리하는 대시보드, 공개 프로필 페이지, 그리고 프로필 편집 페이지가 그것입니다.

구현된 주요 기능과 그 이유

협업 요청의 전체 라이프사이클(보내기, 수락, 거절, 상태 추적)은 이 앱의 핵심이며, 이는 잘 작동합니다. 프로젝트 CRUD 기능은 완성되었고, 인증 시스템 또한 견고합니다. 공개 프로필도 잘 구현되었으며, 프로젝트 둘러보기 페이지의 검색 및 필터 기능도 문제없이 작동합니다.

현재 상태: 라이브 중이지만, 작업 진행 중

DevCollab은 현재 배포되어 접속 가능합니다. 핵심 기능들은 잘 작동하고요. 하지만 버그가 여럿 존재합니다. 프론트엔드는 아직 다듬어야 할 부분이 많고, 일부 로딩 상태는 미완성이며, 몇몇 에러 메시지는 배포 전에 교체되지 못한 날것 그대로의 API 텍스트입니다. 협업 요청 플로우에도 예상치 못한 엣지 케이스들이 남아있죠. 백엔드 API는 안정적이지만, 아직 부하 테스트를 완벽하게 거치지 않았고, 권한 로직에도 미처 발견하지 못한 엣지 케이스가 있을 수 있습니다.

이것이 바로 DevCollab의 솔직한 현재 상태입니다. 개념과 아키텍처를 보여주기에는 충분히 잘 작동하지만, 실제 사용자에게 '짠!'하고 내보일 만큼 매끄럽게 다듬어지지는 않았습니다. 그 작업은 계속 진행 중입니다.


솔직한 깨달음

'만드는' 일은 언제나 예상보다 오래 걸린다.

저는 이 챌린지를 시작할 때, 빌딩 작업은 쉬운 부분이라고 생각했습니다. 도구를 배우고, 아이디어를 얻고, 뭘 만들지 알면 그냥 만들면 되는 거라고요. 하지만 제가 발견한 것은 이 모델이 특정하고도 겸손하게 만드는 방식으로 틀렸다는 점입니다. 코드를 쓰는 것은 빠릅니다. 하지만 코드를 '작동하게 만드는' 것은 느리죠. '코드를 다 썼다'와 '이 코드가 모든 경우에 의도한 대로 작동한다' 사이의 간극에서 실제 시간이 소요됩니다. 제가 실무에서 아무리 간단해 보이는 기능을 개발하더라도, 늘 예상보다 시간이 더 걸리는 이유가 여기에 있었던 겁니다. 초기 기획 단계에서 아무리 완벽하게 설계를 해놔도, 실제 코딩과 테스트 단계에서 수많은 변수를 만나게 되죠.

DevBoard가 아직 배포되지 못한 이유는 예상치 못한 라우팅 로직 문제 때문이고, DevCollab에 버그가 남아있는 건 행복 경로(happy path)만 테스트하고 엣지 케이스를 간과했기 때문입니다. 이 둘 모두 기술 부족이라기보다는 디버깅과 테스트에 현실적인 시간을 배정하지 못한 결과입니다. AI가 코드를 줄 수는 있지만, 그것을 작동하게 만들고, 디버깅하고, 제대로 테스트하는 일은 AI 유무와 관계없이 단축될 수 없는 작업입니다.

과신은 학습의 적이다.

62일차 파이썬 복습 상황이 가장 명확한 예시입니다. 저는 파이썬을 안다고 생각했습니다. 하지만 제대로 아는 것이 아니었죠. 스스로 인정하고 제대로 다시 시작하기 전까지 이틀을 낭비했습니다. 장고의 URL 라우팅이나 마이그레이션 시스템에서도 비슷한 일이 일어났습니다. 제가 이해했다고 섣불리 단정했고, 그 결과 잘못된 부분들을 고치느라 세 배나 더 많은 디버깅 시간을 허비했죠. 이 패턴은 항상 동일합니다. 자신의 이해도를 과대평가하고, 기초를 건너뛰다가, 그 결과로 발생하는 문제들을 해결하는 데 세 배의 시간을 쓰는 겁니다.


블로그 포스팅은 코드 작성만큼이나 값진 일이었다.

장기적인 학습 효과를 위해서는 코드를 짜는 것만큼이나 블로그 포스팅이 중요하다는 것을 깨달았습니다.

매일 제가 만든 것에 대해 글로 쓰는 행위는 단순히 코드를 베끼는 것을 넘어, 제가 무엇을 하고 있는지 실제로 이해하도록 강제했습니다. 이해 없이도 코드를 복사할 수는 있지만, 이해 없이는 코드에 대한 일관성 있는 설명을 쓸 수 없으니까요. 블로그 포스팅은 저에게 책임감을 부여하는 동시에 학습 내용을 제대로 이해했는지 확인하는 검증 장치 역할도 했습니다.

도구를 '아는 것'과 '제대로 사용하는 것'은 다르다.

100일차가 끝날 무렵, 저는 React, TypeScript, Next.js, Express, MongoDB, Django, Flask, PostgreSQL, DRF, JWT 인증, 그리고 Railway와 Vercel을 통한 배포까지 여러 기술을 접했습니다. 이 모든 것들이 무엇인지, 어떻게 서로 연결되는지, 어떤 문제를 해결하는지, 그리고 기본적인 수준에서 중간 수준까지 어떻게 활용하여 구축하는지는 이제 압니다. 하지만 이 모든 것이 세련되고 프로덕션 품질의 애플리케이션을 만들 수 있다는 의미는 아닙니다. 그것은 더 많은 프로젝트, 더 많은 디버깅, 더 많은 엣지 케이스 경험, 그리고 더 많은 시간 투자에서 비롯된다는 것을 의미합니다.


다음 스텝은?

몇 달 전만 해도 뭘 만들어야 할지 몰랐습니다. 아이디어는 있었지만, 어떻게 만들어야 할지, 필요한 도구들을 어떻게 활용해야 할지 몰랐죠. 늘 지식 부족과 도구 활용법에 대한 이해 부족이 저를 가로막는다고 생각했습니다. 이제 도구들은 손에 쥐었습니다. 예전 문제가 사라진 자리에 남은 것은, 바로 '미완성된 숙제'들입니다.

DevBoard는 수정하고 배포해야 합니다. DevCollab은 아직 다듬어야 할 부분을 매끄럽게 만들고, 버그를 해결하며, 부족한 기능을 완성해야 합니다. 이들은 새로운 프로젝트가 아니라, 이 챌린지 동안 제가 스스로에게 했던 약속들, 아직 완전히 지켜지지 않은 약속들입니다.

이것이 당면한 최우선 과제입니다. 시작한 것을 끝내는 것. 두 애플리케이션 모두 현재 라이브 상태이며 작동하고, 보여줄 수 있는 수준입니다.

그다음 계획은 구직 활동, 프리랜서 서비스 제공, 그리고 계속해서 새로운 것을 만드는 일입니다. 100일 챌린지가 저를 곧바로 시니어 개발자로 만들어주진 않았습니다. 하지만 이제 저는 '위험할 만큼 충분히 아는' 개발자, 즉 어떤 태스크든 맡아서 필요한 것을 파악하고, 대부분 작동하는 결과물을 만들어내며, 문제가 생기면 디버깅해서 세상에 내보낼 수 있는 사람이 되었습니다. 시작하기에는 이 정도면 충분하죠.

100일은 끝났습니다. 하지만 제 '일'은 아직 한참 멀었죠. 이제부터가 진짜 시작입니다.


이 글이 즐거우셨다면, 저의 Dev.to 프로필을 팔로우해주세요. 주로 #100DaysOfCode 와 #WebDev 태그로 글을 올리고 있습니다. LinkedIn에서도 저와 연결될 수 있습니다. 이곳에서 가장 활발하게 활동하고 있어요.

긴 글 읽어주셔서 감사합니다. 저의 여정에 함께 해주신 모든 분께 진심으로 감사드립니다!


원문: https://dev.to/m_saad_ahmad/day-100-of-100daysofcode-what-i-built-what-i-learned-and-whats-next-2007 수집일: 2026-05-16 01:46:22