Rain Lag

작은 제약의 힘: 스스로 규칙을 거는 개발자가 더 빨리 성장하는 이유

작고 스스로 정한 제약들이 어떻게 집중력을 높이고, 이해를 깊게 만들고, 더 빠르게 ‘잘’ 배포하는 개발자로 성장하게 돕는지에 대해 다룹니다.

소개

대부분의 개발자는 실력을 키우기 위해 뭔가를 추가하려 합니다. 더 많은 튜토리얼, 더 많은 강의, 더 많은 도구, 더 많은 프레임워크들.

하지만 더 조용하고, 더 강력하게 성장 속도를 끌어올리는 방식이 하나 있습니다.

더 추가하지 말자. 더 제약하자.

작은 제약(Little Constraints) 메서드는 무언가를 만들 때 의도적으로 자신의 선택지를 줄이는 연습입니다. 시간은 짧게, 도구는 적게, 범위는 작게, 규칙은 더 엄격하게. 언뜻 보기엔 비효율적이지만, 이런 자기 주도의 제한은 학습 속도를 엄청나게 끌어올리고, 특정 도구에 덜 의존하는 유연한 개발자로 만들어 줍니다.

이건 자기벌칙이나 인위적인 난이도 올리기가 아닙니다. 명확한 제약을 둔, 집중된 의도적 연습으로 훈련하는 엘리트 운동선수들의 방식과 가깝습니다.

이 글에서는 왜 작은 제약이 통하는지, 어떻게 사고방식을 바꾸는지, 그리고 일상적인 코딩에 바로 적용할 수 있는 실전 방법들을 살펴봅니다.


왜 제약이 창의성을 줄이기는커녕 더 키우는가

무엇이든 가능할 때, 무엇도 분명하지 않습니다. 선택지가 무한하면 결정 피로가 쌓이고, 미루게 되고, 얕은 수준의 해결책에 머무르기 쉽습니다.

스스로 제약을 걸면 상황이 뒤집힙니다.

  • 집중 범위가 좁아집니다. “아무거나 아무 도구로 만들기” 대신, “Z시간 안에 Y만 사용해서 X를 만들기”가 됩니다.
  • 일이 게임처럼 바뀝니다. 규칙이 생기면 일이 숙제가 아니라 퍼즐에 가까워지고, 뇌가 자연스럽게 더 적극적으로 개입합니다.
  • 자동반사적인 선택을 막습니다. 항상 쓰던 프레임워크나 라이브러리를 바로 쓸 수 없으니, 한 번 더 생각하게 됩니다.

예를 들어 이런 제약들입니다.

  • “표준 라이브러리만 사용해서 노트 앱을 만들어 보기.”
  • “이 기능을 150라인 이하의 코드로 구현하기.”
  • “공개 API를 바꾸지 않고 이 함수를 리팩터링하기.”

이런 제한은 자동조종 모드에서 벗어나 능동적인 문제 해결 모드로 들어가게 만듭니다. 평소에는 지나치던 패턴을 발견하고, 잘 안 쓰던 언어 기능을 써 보게 되고, 트레이드오프에 대한 감각도 깊어집니다.


제약은 ‘진짜 이해’를 강요한다

아무 제약이 없으면 튜토리얼을 줄줄이 따라 하면서도 마치 배우고 있는 것처럼 느끼기 쉽습니다. 사실은 레시피를 외우는 데 그치는 경우가 많죠.

도구를 제한하면, 여러 곳에서 본 지식을 스스로 연결해서 진짜로 이해해야만 앞으로 나아갈 수 있습니다.

예를 들어 이런 제약을 보죠.

“어떤 인증 라이브러리도 쓰지 않고 기본적인 인증 시스템을 만들어라.”

이렇게 되면 다음과 같은 것들을 직접 파고들 수밖에 없습니다.

  • 비밀번호 해싱이 어떻게 동작하는지
  • 세션, 쿠키, 토큰의 개념과 차이
  • CSRF와 기본적인 웹 보안 관행
  • 공식 문서, 블로그, Stack Overflow 예제를 이어붙이는 법

더 이상 auth.install() 같은 한 줄로 끝낼 수 없습니다. 보안, HTTP, 데이터베이스 설계 개념을 통합해서 머릿속에 하나의 그림으로 만들어야 합니다.

이게 진짜 학습의 핵심입니다. 코드 조각을 외우는 게 아니라, 불완전한 정보와 실제 제약 속에서 길을 찾으면서, 머릿속에 동작하는 모델을 세우는 것.

자기 제약은 이런 학습을 강제로 일으킵니다. 가장 쉬운 길(라이브러리 붙여넣기)을 애초에 막아 버리기 때문입니다.


의도적 연습으로서의 작은 제약 메서드

일상적인 코딩 대부분은 의도적 연습이 아니라, 그냥 일을 끝내는 행위에 가깝습니다.

의도적 연습에는 몇 가지 요소가 있습니다.

  1. 아주 좁게 정의된 과제
  2. 명확한 규칙 또는 제약
  3. 특정 약점을 겨냥한 연습
  4. 즉각적인 피드백
  5. 반복과 개선

작은 제약 메서드는 이 요소들을 한 번에 제공합니다.

예를 들어 이런 의도적 연습 제약이 있습니다.

“이 알고리즘을 O(1) 추가 공간만 사용해서 구현하고, 그 이유를 문서로 남겨라.”

여기서 타겟으로 삼는 약점은 시간/공간 트레이드오프에 대한 이해입니다. O(1) 공간 제약이 걸려 있으니, 단순히 정답을 맞히는 수준을 넘어서 자료구조와 메모리 사용을 진지하게 생각해야 합니다.

또 다른 예입니다.

“이 기능을 함수형 스타일로만 다시 구현하라 (공유되는 가변 상태 금지).”

이제 완전히 다른 패러다임을 연습하게 됩니다. 곳곳에서 막히고, 검색해 보고, 새로운 패턴을 체득하게 됩니다. 제약이 그것을 강제하기 때문입니다.

작은 제약을 걸면, 사소한 토이 프로젝트 하나도 그대로 정밀 훈련 세션이 됩니다.


타임박싱과 범위 제한: 완벽주의의 해독제

완벽주의 때문에 사이드 프로젝트를 반쯤 만들다 버리는 개발자가 정말 많습니다.

**타임박싱(time-boxing)**과 범위 제한(scope limiting) 같은 제약은 이런 완벽주의에 대한 강력한 해독제입니다.

타임박싱: “X를 2시간 안에 만든다”

타이머를 맞추고, 목표를 완벽이 아니라 완료에 두는 겁니다.

예시:

  • “90분 안에 CLI 투두 앱을 만든다.”
  • “2시간 안에 가짜 데이터로 이 기능의 UI 프로토타입을 만든다.”

장점:

  • 핵심에만 집중하게 해 줍니다.
  • 우선순위 정하기와 범위 줄이기를 몸으로 익히게 합니다.
  • 자연스러운 마감 시점이 생겨, 실제로 뭔가를 배포하게 됩니다.

범위 제한: “표준 라이브러리만 사용”, “프레임워크 금지”

예시:

  • “표준 라이브러리의 HTTP 도구만으로 REST API 만들기.”
  • “CSS 프레임워크 금지 — 순수 CSS와 브라우저 개발자 도구만 사용.”

장점:

  • 프레임워크가 평소에 가려주는 부분이 드러납니다.
  • 라이브러리가 바뀌거나 깨졌을 때 덜 흔들립니다.
  • HTTP, CSS, SQL 같은 기초 체력이 강해집니다.

타임박싱과 범위 제한은 같이 쓰면 특히 효과가 좋습니다.

“표준 라이브러리만 사용해서 1시간 안에 JSON 기반 설정 로더 만들기.”

제약을 명확히 걸어두면, 생각보다 많은 걸 꽤 짧은 시간에 만들어 낼 수 있습니다.


빨리 배포하고, 더 빨리 배운다: 이론보다 피드백

“베스트 프랙티스”에 대한 글을 아무리 많이 읽어도, 실제 사용자 피드백만큼 판단력을 날카롭게 만들어 주는 건 없습니다.

제약은 이 피드백을 받을 만큼 빨리 배포하게 도와줍니다.

2~3시간만 쓸 수 있다고 알면:

  • 과한 설계를 피하게 됩니다.
  • 쓸데없는 추상화를 건너뜁니다.
  • 지금 당장 동작하는 단순한 구현을 택하게 됩니다.

일단 배포하고 나면, 아주 작은 것이라도:

  • 실제로 사람들이 어떻게 쓰는지 볼 수 있고
  • 어디서 깨지는지 확인할 수 있으며
  • 예상 못 했던 성능 문제를 발견하고
  • 뭐가 진짜 중요하고 뭐가 별로 안 중요한지 감을 잡게 됩니다.

이 촘촘한 빌드 → 배포 → 관찰 → 조정 루프는, 따로 떨어진 이론 공부보다 제품 감각과 기술적 판단력을 훨씬 더 잘 키워 줍니다.

작은 제약 메서드는 “작고, 제약 아래에서, 배포 가능한 것들”을 사이드 프로젝트의 기본 단위로 삼게 함으로써, 이 루프를 일상에 녹여 넣습니다.


기본기를 쌓고, 툴에 덜 묶인 개발자가 되기

프레임워크는 계속 바뀌고 사라집니다. 하지만 기본기는 남습니다.

제약은 이런 기본기를 집중해서 연습하게 해 줍니다.

  • 문제 해결력: “외부 라이브러리 없이 이 문제를 풀어라.”
  • 성능: “이 함수가 10배 더 큰 데이터를 처리하도록 최적화해라.”
  • 보안: “이 엔드포인트를 상위 3개 OWASP 리스크에 대비해 강화해라.”

도구를 반복해서 걷어내다 보면:

  • 뭐가 본질이고 뭐가 단순한 편의 기능인지 구분하게 됩니다.
  • 내부에서 어떻게 돌아가는지 이해하게 됩니다.
  • 스택, 언어, 프레임워크를 바꿔도 편안해집니다.

이렇게 툴에 덜 묶인(tool-agnostic) 상태가 되면, 새로운 기술이 완전히 낯선 세계가 아니라 익숙한 개념 위에 씌운 새로운 스킨처럼 느껴집니다. 긴 커리어 동안 훨씬 유연하게 움직일 수 있게 됩니다.


지속 가능한 루프: 호기심 + 작은 제약

제약을 둔다고 해서 새로운 도구를 무시하라는 뜻은 아닙니다. 오히려 제약을 활용하면 새로운 도구 탐색이 더 지속 가능해질 수 있습니다.

아주 단순한 루프를 써 보세요.

  1. 호기심을 유지한다. 써 보고 싶은 도구, 라이브러리, 아이디어 리스트를 만들어 둡니다.
  2. 아주 작은 프로젝트 하나를 고른다. 1~3시간 안에 시도해 볼 만한 것.
  3. 제약을 추가한다. 예를 들면:
    • “이 새 데이터베이스는 딱 한 기능에만 사용한다.”
    • “이 UI 라이브러리로 프로토타입을 만들되, 커스텀 스타일링은 하지 않는다.”
    • “이 새 프레임워크로 엔드포인트 하나만 구현하되, 2시간 타임박스를 건다.”
  4. 어쨌든 배포한다. 거칠어도 상관없습니다.
  5. 짧게 돌아본다. 뭐가 좋았는지, 뭐가 힘들었는지, 뭘 배웠는지 적어 봅니다.

각 실험이 작고 범위가 명확하니, 번아웃도 줄고 “새 도구 한 번 만져보다가 주말을 다 날려버리는” 상황도 피할 수 있습니다.

시간이 지나면 이 루프 덕분에 다음과 같은 것들을 얻게 됩니다.

  • 도구와 접근법에 대한 넓은 정신 지도
  • 다른 제약 연습에서 쌓인 깊은 기본기
  • 보여 줄 수도 있고 재사용도 가능한, 작지만 꾸준한 산출물들

작은 제약 메서드를 시작하는 방법

거창한 계획이 필요 없습니다. 오늘 당장 작은 제약 하나만 걸어 보면 됩니다.

간단한 시작 방법은 이렇습니다.

  1. 아주 작은 프로젝트를 고른다.
    • 예: URL 단축기, 마크다운 뷰어, 간단한 채팅 UI, 로그 파서 등.
  2. 제약 1~2개를 고른다.
    • 시간: “최대 2시간.”
    • 도구: “표준 라이브러리만 사용”, “JavaScript 금지”, “ORM 금지” 등.
    • 스타일: “함수형 스타일만 사용”, “중첩은 2단계까지만 허용” 등.
  3. 시작 전에 제약을 글로 적어 둔다.
  4. 시간이 끝날 때까지 만든 뒤, 있는 그대로 배포한다.
  5. 5~10분 정도 리뷰한다.
    • 어디에서 막혔는가?
    • 무엇을 새로 찾아보았는가?
    • 다음에는 어떻게 다르게 할 것인가?

이걸 일주일에 한두 번만 반복해도, 한 달쯤 지나면 체감될 정도로 차이가 납니다.


마무리

작은 제약 메서드는 구조는 단순합니다.

  • 시간, 도구, 스타일에 작고 명확한 제한을 건다.
  • 그 제한을 이용해 집중된 의도적 연습을 만든다.
  • 빠르게 배포하고, 피드백을 배우는 재료로 삼아 반복한다.

제약은 당신을 약하게 만들지 않습니다. 오히려 더 예리하게 만듭니다. 제약은 당신을 다음과 같이 밀어붙입니다.

  • “마법 같은 도구”에 기대지 않고 더 깊이 이해하게 만들고
  • 실제 피드백을 통해 판단력을 키우게 하고
  • 어떤 프레임워크가 오가도 남는 기본기를 단단하게 다지게 합니다.

더 많은 강의나 더 많은 도구가 있어야 더 나은 개발자가 되는 게 아닙니다. 더 잘 연습해야 합니다. 그리고 작고, 스스로 거는 제약은 그걸 가능하게 만드는 가장 효과적인 방법 중 하나입니다.

오늘, 제약 하나를 정하고, 타이머를 맞추고, 작은 걸 하나 만들어 보세요.

작은 제약의 힘: 스스로 규칙을 거는 개발자가 더 빨리 성장하는 이유 | Rain Lag