튜토리얼을 끝마쳤습니다. 모든 코드를 직접 타이핑하고, 예제를 실행하며, 전부 제대로 작동하는 것을 확인했습니다. 하지만 나만의 무언가를 만들기 위해 빈 에디터를 여는 순간, 머릿속이 하얘집니다. 단 하나의 아이디어도 떠오르지 않죠.
거의 모든 초보자가 **튜토리얼 지옥(Tutorial Trap)**에 빠지곤 합니다. (보통 첫 Python 코스를 마친 직후에 말이죠.) 하루 종일 for 루프에 대해 읽을 수는 있지만, 무엇을 타이핑해야 할지 아무도 알려주지 않는 순간 뇌가 정지해 버립니다.
코드가 어떻게 생겼는지 아는 것과 코드를 직접 작성하는 것은 완전히 다른 영역의 기술입니다. 전자의 단계에서 후자의 단계로 넘어가는 유일한 방법은 직접 무언가를 만들어 보는 것입니다. 그것도 스스로 말이죠.
거창하거나 유용할 필요는 전혀 없습니다. 당장 앱을 출시하거나 오픈소스에 기여하려는 게 아니니까요. 그저 머리가 굳어버리는 현상이 사라질 때까지, 실제로 작동하는 작고 엉뚱한 프로그램들을 하나씩 계속해서 만들어보기만 하면 됩니다.
이 글을 쓴 이유가 바로 여기에 있습니다. 아래에 소개할 13가지 쉬운 파이썬 프로젝트는 각각 10분에서 1시간 내에 끝낼 수 있는 분량입니다. 각 프로젝트는 딱 한두 가지 개념만 확실하게 가르쳐 줍니다. 그리고 프로젝트가 끝날 때마다 여러분이 직접 작성하여 여러분의 컴퓨터에서 실행되는 멋진 파일 하나가 완성될 것입니다.
아직 직접 만들 준비가 안 되셨나요? 전혀 걱정하실 필요 없습니다! 모든 위대한 여정은 기본기에서 시작하니까요. 다음 단계로 나아가기 전에 컴퓨터 기초 지식을 배우고 탄탄한 기반을 다져보세요.
왜 튜토리얼을 보는 대신 직접 만들어야 할까요?
튜토리얼을 볼 때는 공부를 하고 있다는 느낌이 들지만, 사실은 튜토리얼이 여러분 대신 생각을 해주고 있기 때문입니다. 직접 무언가를 만들 때는 여러분이 모든 것을 결정해야 합니다. 변수 이름을 짓고, 알맞은 루프를 선택하고, 왜 코드가 원하는 숫자 대신 None을 출력하는지 스스로 원인을 찾아내야 하죠.
작은 프로젝트는 동기부여 측면에서도 아주 좋습니다. 2주짜리 프로젝트는 그럴싸해 보이지만, 중간에 막혀서 영영 포기하기 십상입니다. 반면 30분짜리 프로젝트는 오늘 끝납니다. 실제로 작동하는 파일과 함께 작은 성취감을 얻을 수 있고, 이 성취감 덕분에 내일 다시 에디터를 열게 되는 것입니다.

1. 숫자 맞추기 게임 (Number Guessing Game)
가장 클래식한 프로젝트입니다. 컴퓨터가 1에서 100 사이의 숫자를 무작위로 고르면, 플레이어가 숫자를 맞출 때까지 컴퓨터가 "너무 높음" 또는 "너무 낮음"이라고 힌트를 줍니다. 많은 개발자가 처음으로 만드는 진짜 프로그램이며, 그럴 만한 가치가 충분합니다.
import random
secret = random.randint(1, 100)
guesses = 0
while True:
guess = int(input("Guess a number (1-100): "))
guesses += 1
if guess < secret:
print("Too low")
elif guess > secret:
print("Too high")
else:
print(f"Got it in {guesses} guesses")
break
배울 수 있는 개념: while 루프, 조건문, random 모듈, 입력값을 숫자로 변환하는 방법. 코드가 잘 작동한다면, 제한 시간 내에 맞추지 못하면 게임이 종료되도록 '최대 시도 횟수 제한' 기능을 추가해 보세요.
2. 엉뚱한 문장 만들기 (Mad Libs Generator)
사용자에게 명사, 동사, 형용사 같은 단어 몇 개를 입력받아 엉뚱하고 재미있는 문장 속에 넣고 결과를 출력하는 프로그램입니다. 시작부터 끝까지 10분이면 충분합니다.
noun = input("Noun: ")
verb = input("Verb: ")
adjective = input("Adjective: ")
place = input("A place: ")
story = f"Yesterday I went to the {place} and saw a {adjective} {noun} that started to {verb}."
print(story)
3. 주사위 굴리기 (Dice Roller)
주사위 한 개를 굴립니다. 두 개를 굴릴 수도 있죠. 보드게임 밤을 위해 20면체 주사위를 굴릴 수도 있습니다. 단 두 줄의 로직과 이를 감싸는 간단한 코드로 완성할 수 있습니다.
import random
def roll(sides=6, count=1):
return [random.randint(1, sides) for _ in range(count)]
print(roll(6, 2)) # rolls two six-sided dice
print(roll(20)) # rolls one d20
배울 수 있는 개념: 기본값이 있는 함수, 리스트 컴프리헨션, 동일한 함수를 다른 입력값으로 호출하기. 코드가 완성되면 사용자가 실행 시 주사위 면의 수와 개수를 직접 선택할 수 있는 간단한 메뉴를 추가해 보세요.
4. 간단한 계산기 (Simple Calculator)
더하기, 빼기, 곱하기, 나누기. 두 개의 숫자와 하나의 연산자. 네, 계산기는 이미 세상에 널려 있습니다. 하지만 그게 중요한 게 아닙니다. 중요한 것은 여러 요소를 스스로 연결해 보고, 처음 시도할 때 무엇을 놓쳤는지 직접 깨닫는 것입니다.
def calc(a, b, op):
if op == "+": return a + b
if op == "-": return a - b
if op == "*": return a * b
if op == "/":
if b == 0:
return "Can't divide by zero"
return a / b
a = float(input("First number: "))
op = input("Operator (+, -, *, /): ")
b = float(input("Second number: "))
print(calc(a, b, op))
배울 수 있는 개념: 함수 작성법, if를 사용한 조건 분기, 그리고 까다로운 예외 상황(0으로 나누기) 처리하기. 조금 더 도전해보고 싶다면 연쇄 연산 기능을 추가해 보세요.
5. 가위바위보 게임 (Rock, Paper, Scissors)
내가 하나를 내고, 컴퓨터가 하나를 내면, 규칙에 따라 승패를 결정합니다. 간단한 게임 루프를 연습하고, 딕셔너리를 조회 테이블(Lookup Table)로 활용하는 방법을 익히기에 아주 좋습니다.
import random
options = ["rock", "paper", "scissors"]
wins_against = {"rock": "scissors", "paper": "rock", "scissors": "paper"}
you = input("Pick rock, paper, or scissors: ").lower()
cpu = random.choice(options)
print(f"Computer picked {cpu}.")
if you == cpu:
print("Tie")
elif wins_against[you] == cpu:
print("You win")
else:
print("Computer wins")
배울 수 있는 개념: 빠른 조회를 위한 딕셔너리 활용, random.choice, 문자열 비교. 전체 코드를 while 루프로 감싸고 라운드별 점수를 기록하도록 만들면, 반나절 만에 멋진 미니 게임 하나를 완성할 수 있습니다.
6. 비밀번호 생성기 (Password Generator)
문자, 숫자, 기호를 섞어 N자리의 무작위 비밀번호를 생성합니다. 유용하고 쉬우며 15분이면 완성할 수 있습니다. 일상에서 실제로 유용하게 쓸 수 있는 도구입니다.
import random
import string
def make_password(length=12):
pool = string.ascii_letters + string.digits + string.punctuation
return "".join(random.choice(pool) for _ in range(length))
print(make_password(16))
배울 수 있는 개념: string 모듈, 문자들을 하나의 문자열로 합치기, 문자 풀(Pool)에서 무작위 문자 추출하기. 특수문자를 싫어하는 웹사이트들을 위해 특수문자를 제외할 수 있는 옵션 기능을 추가해 보세요. 생각보다 그런 사이트가 꽤 많답니다.
7. 터미널 할 일 목록 (To-Do List in the Terminal)
터미널에서 바로 실행되는 간단한 추가/목록 보기/삭제 메뉴입니다. 데이터베이스도, 복잡한 설정도 필요 없습니다. 프로그램을 종료하기 전까지만 유지되는 파이썬 리스트 하나면 충분히 많은 것을 배울 수 있습니다.
todos = []
while True:
cmd = input("Command (add/list/remove/quit): ")
if cmd == "add":
todos.append(input("Task: "))
elif cmd == "list":
for i, t in enumerate(todos, 1):
print(f"{i}. {t}")
elif cmd == "remove":
idx = int(input("Index to remove: ")) - 1
if 0 <= idx < len(todos):
todos.pop(idx)
elif cmd == "quit":
break
배울 수 있는 개념: 메뉴 기반 프로그램 구조, 리스트 수정하기, enumerate 함수, 그리고 번호를 1부터 시작하게 만드는 간단한 팁. 다음 버전에서는 할 일 목록을 텍스트 파일에 저장하여 프로그램을 껐다 켜도 유지되도록 만들어 보세요. 그때부터 진짜 앱처럼 느껴지기 시작할 것입니다.
Coddy는 게임 같은 연속 달성 기록(Streak), XP, 그리고 부담 없는 짧은 레슨을 통해 동기부여가 떨어질 때도 매일 파이썬을 연습하는 습관을 만들어 줍니다.
8. 단어 및 글자 수 세기 (Word and Character Counter)
텍스트를 붙여넣으면 단어 수, 글자 수, 그리고 가장 자주 등장하는 단어를 알려줍니다. 글자 수 제한이 엄격한 글을 쓸 때 아주 유용하며, 실제로 글을 쓰다 보면 이런 도구가 필요할 때가 정말 많습니다.
from collections import Counter
text = input("Paste your text: ")
words = text.split()
chars = len(text)
most_common = Counter(words).most_common(1)
print(f"Words: {len(words)}")
print(f"Characters: {chars}")
print(f"Most common word: {most_common[0][0]} ({most_common[0][1]} times)")
배울 수 있는 개념: collections 모듈, .split(), Counter가 반환하는 값 읽기. 더 정확한 결과를 위해 "the"나 "and" 같은 짧은 조사나 관사를 제외하는 기능을 추가해 보세요. 그렇지 않으면 가장 많이 나온 단어로 항상 "the"가 꼽혀 아무런 정보도 얻지 못할 테니까요.
9. 팁 계산기 (Tip Calculator)
총 청구 금액, 팁 비율, 인원수별 정산. 내가 이 코드를 작성했다는 사실조차 잊어버린 먼 훗날에도 실제로 유용하게 꺼내 쓸 수 있는 실용적인 도구입니다.
bill = float(input("Bill total: "))
tip_pct = float(input("Tip percentage (e.g., 18): "))
people = int(input("How many people: "))
tip = bill * (tip_pct / 100)
total = bill + tip
per_person = total / people
print(f"Tip: {tip:.2f}")
print(f"Total: {total:.2f}")
print(f"Per person: {per_person:.2f}")
배울 수 있는 개념: 산술 연산자, 입력값을 숫자로 변환하기, :.2f를 사용해 소수점 둘째 자리까지 반올림하기. 인당 지불 금액을 올림 처리하여 정산할 때 잔돈 때문에 곤란한 일이 없도록 기능을 업그레이드해 보세요.
10. 카운트다운 타이머 (Countdown Timer)
원하는 초를 입력하면 프로그램이 0이 될 때까지 카운트다운을 합니다. 작지만 만족스럽고, 완성하고 나면 휴식 타이머나 뽀모도로 타이머로 요긴하게 쓸 수 있습니다.
import time
seconds = int(input("Seconds: "))
while seconds >= 0:
mins, secs = divmod(seconds, 60)
print(f"{mins:02d}:{secs:02d}", end="\r")
time.sleep(1)
seconds -= 1
print("Time's up ")
배울 수 있는 개념: time 모듈, 숫자를 분과 초로 나누기 위한 divmod, 같은 줄에서 텍스트를 갱신하는 \r 트릭. end="\r"을 사용하면 터미널에 텍스트가 줄바꿈으로 도배되는 대신, 실제 타이머처럼 한자리에서 숫자가 바뀌는 효과를 낼 수 있습니다.
11. 명언 제조기 (Random Quote Generator)
동기부여, 유머, 프로그래밍 관련 등 원하는 명언 목록을 만들어 두고, 프로그램을 실행할 때마다 무작위로 하나를 출력합니다. 너무 쉬워 보이지만, 일단 만들어 보세요.
import random
quotes = [
"The only way to learn a new programming language is by writing programs in it.",
"Programs must be written for people to read, and only incidentally for machines to execute.",
"Premature optimization is the root of all evil.",
"Simplicity is the soul of efficiency.",
"Code is like humor. When you have to explain it, it's bad.",
]
print(random.choice(quotes))
배울 수 있는 개념: 리스트의 기본, random.choice, 파이썬에서 가장 짧으면서도 유용한 프로그램 작성법. 터미널이 시작될 때 이 프로그램이 실행되도록 설정해 두면, 셸을 열 때마다 새로운 명언을 만날 수 있습니다. 코딩을 소소하게 더 즐겁게 만들어주는 훌륭한 방법입니다.
12. 행맨 게임 (Hangman - 간이 버전)
비밀 단어를 지정하고 대시(_)로 표시한 뒤, 사용자가 글자를 맞추게 합니다. 틀릴 수 있는 기회는 6번입니다. 여기서 소개하는 다른 프로젝트들보다는 조금 무겁지만, 단순하게 구현한다면 1시간 내에 충분히 완성할 수 있습니다.
import random
words = ["python", "syntax", "variable", "function", "module"]
secret = random.choice(words)
guessed = set()
wrong = 0
while wrong < 6:
display = "".join(c if c in guessed else "_" for c in secret)
print(display)
if "_" not in display:
print("You won")
break
letter = input("Guess a letter: ").lower()
if letter in secret:
guessed.add(letter)
else:
wrong += 1
print(f"Wrong. {6 - wrong} tries left.")
else:
print(f"You lost. The word was {secret}.")
배울 수 있는 개념: 세트(set), 조건부 문자열 생성, 잘 알려지지 않은 while-else 문(루프가 break 없이 정상 종료되었을 때만 else 블록이 실행됨). 코드에 적어둔 몇 안 되는 단어들에 실증이 난다면, 텍스트 파일에서 단어 목록을 읽어오도록 업그레이드해 보세요. (생각보다 금방 질릴 테니까요.)
13. 단위 변환기 (Unit Converter)
섭씨를 화씨로, 킬로미터를 마일로, 킬로그램을 파운드로 바꾸는 등 자주 쓰이는 단위들을 변환합니다. 실용적이고 빠르게 완성할 수 있어 나중에 요긴하게 쓰게 될 도구입니다.
def c_to_f(c):
return c * 9/5 + 32
def km_to_mi(km):
return km * 0.621371
def kg_to_lb(kg):
return kg * 2.20462
print("1. Celsius to Fahrenheit")
print("2. Kilometers to miles")
print("3. Kilograms to pounds")
choice = input("Pick a converter: ")
value = float(input("Value: "))
if choice == "1":
print(c_to_f(value))
elif choice == "2":
print(km_to_mi(value))
elif choice == "3":
print(kg_to_lb(value))
배울 수 있는 개념: 한 파일에 여러 개의 작은 함수 작성하기, 기본 메뉴 구성, 사용자 입력에 따른 조건 분기. 기본 변환이 잘 작동한다면 역방향 변환(화씨를 섭씨로, 마일을 킬로미터로)도 추가해 보세요. 아이디어는 같지만 노력은 절반으로 줄고, 연습 효과는 두 배가 됩니다.
프로젝트를 온전히 내 것으로 만드는 방법
프로젝트 하나를 만드는 것은 일시적인 경험에 불과하지만, 2주 동안 매일 하나씩 만드는 것은 습관이 됩니다. 파이썬 초보 단계를 탈출하는 사람과 그렇지 못한 사람의 차이는 재능이나 시간의 유무가 아닙니다. 연습을 지속하느냐 마느냐의 차이입니다.
도움이 되는 몇 가지 팁을 순서대로 정리해 드립니다.
-
코드를 복사해서 붙여넣지 말고 직접 타이핑하세요! 지루하고 반복적으로 느껴질 수 있습니다. 하지만 눈이 아닌 손으로 코드 패턴을 익히는 유일한 방법입니다. 기억을 더듬어 처음으로
import random을 직접 타이핑하는 순간, 머릿속에서 무언가 깨달음이 올 것입니다. -
일부러 코드를 망가뜨려 보세요. 코드가 잘 작동한다면 한 줄을 지워보거나, 함수를 주석 처리하거나, 변수 이름을 바꿔보고 어떤 일이 일어나는지 관찰하세요. 망가진 코드를 고치는 과정은 처음부터 코드를 작성하는 것보다 훨씬 더 많은 것을 가르쳐 줍니다. (직접 해보기 전까지는 와닿지 않을 수 있습니다.)
-
같은 프로젝트를 두 번 만들어 보세요. 일주일 뒤에 숫자 맞추기 게임을 아무것도 보지 않고 처음부터 다시 만들어 보세요. 두 번째 시도를 해보면 내가 실제로 기억하고 있는 것이 무엇인지 알 수 있습니다. 생각보다 기억나는 게 적을 수도 있지만, 그것도 지극히 정상입니다!
-
기능을 딱 하나만 추가해 보세요. 위의 프로젝트 중 하나를 골라 아주 작은 기능을 덧붙여 보세요. 할 일 목록을 파일에 저장하거나, 주사위 굴리기 결과를 하나씩 출력하게 만드는 식입니다. 이 추가 기능을 구현하는 과정에서 진짜 배움이 일어납니다. 여러분만의 버전을 만드는 방법은 그 어디에도 적혀 있지 않기 때문입니다.
만약 매일 연습하는 습관을 들이는 것이 가장 어렵다면, 바로 그것이 Coddy가 존재하는 이유입니다. 짧은 5분 파이썬 레슨, 동기부여가 떨어질 때 잡아주는 연속 달성 기록(Streak) 시스템, 그리고 막혔을 때 레슨 안에서 바로 도움을 주는 AI 어시스턴트 Bugsy의 힌트까지 준비되어 있습니다.
파이썬을 포함한 모든 코스는 무료로 시작할 수 있습니다. 저희는 딱 여러분과 같은 상황에 처한 분들을 위해 이 서비스를 만들었습니다. 튜토리얼은 끝냈지만 아직 스스로 코드를 짜기엔 확신이 없고, 저녁 시간을 통째로 쓰지 않으면서도 가볍게 연습하고 싶은 분들 말이죠.
다음에는 무엇을 만들어야 할까요?
위의 프로젝트들이 너무 쉽게 느껴지기 시작했다면, 여러분은 이미 목표했던 선을 넘어선 것입니다. 정말 멋집니다! 다음 단계는 중급 프로젝트입니다. 외부 라이브러리를 한두 개 사용하고, 파일이나 네트워크 입출력을 다루는 프로젝트들이죠. 한 단계 더 도약할 수 있는 몇 가지 아이디어를 소개합니다.
requests라이브러리와 무료 날씨 API를 활용한 날씨 앱BeautifulSoup을 사용해 자주 방문하는 사이트에서 헤드라인을 긁어오는 웹 스크래퍼- 몇 개의 방과 인벤토리 기능이 있는 텍스트 기반 어드벤처 게임
- 집중 시간을 CSV 파일에 기록해 주는 뽀모도로 타이머
- 무작위 유머를 보여주는 단일 페이지 구성의 간단한 Flask 앱
이 중 아주 고난도의 프로젝트는 없습니다. 이미 알고 있는 두세 가지 개념에 새로운 모듈 하나를 얹었을 뿐입니다. 가장 재미있어 보이는 것을 고르세요. 그래야 끝까지 완성할 수 있으니까요.
튜토리얼은 여러분에게 바통을 넘겨주고 스스로 생각하라고 요구하는 순간 무너집니다. 반면 프로젝트는 아무리 사소한 것이라도 스스로 생각하게 만듭니다. 프로젝트를 충분히 경험하고 나면, 튜토리얼 지옥은 더 이상 지옥이 아닐 것입니다.
Coddy는 수동적인 시청에서 벗어나 직접 코딩을 할 수 있도록 돕습니다. 5분 파이썬 레슨, 일일 연속 기록, 그리고 정답을 스포일러하지 않고 힌트만 주는 AI 어시스턴트 Bugsy를 만나보세요.
Share this article
About the Author
Coddy Team
Editorial Team
Frequently Asked Questions
초보자에게 가장 쉬운 Python 프로젝트는 무엇인가요?
숫자 맞추기 게임이 가장 대표적인 답변입니다. 프로그램 하나에 입력, 루프, 조건문이 모두 들어가는 짧은 코드이면서, 실행했을 때 실제 게임처럼 느껴집니다. while 루프가 무엇인지 방금 배운 사람이라도 대부분 20분 안에 완성할 수 있습니다.
쉬운 Python 프로젝트는 시간이 얼마나 걸려야 하나요?
10분에서 1시간 정도 걸립니다. 만약 하나에 3시간 이상 쓰고 있다면, 현재 실력에 비해 너무 어렵거나 디버깅의 늪에 빠져 헤어 나오지 못하고 있는 것일 수 있습니다. 그럴 때는 더 작은 프로젝트를 선택해서 완성한 뒤에 다시 돌아오세요.
이 프로젝트들을 하려면 무언가를 설치해야 하나요?
로컬에서 실행하고 싶다면 설치해야 하고, 그렇지 않다면 설치하지 않아도 됩니다. python.org에서 Python을 설치하는 데는 5분 정도 걸립니다. 또는 설치 과정을 완전히 건너뛰고 Coddy 내부에 있는 것과 같은 브라우저 기반 플레이그라운드에서 실행할 수도 있습니다. 이 방법은 별도의 설정이 필요 없는 옵션입니다.
이 Python 프로젝트들이 이력서에 도움이 될까요?
프로젝트 자체만으로는 도움이 되지 않습니다. 이력서용 프로젝트는 보통 소규모 웹 앱, 직장에서 실제 업무를 자동화하는 데 사용한 스크립트, 오픈소스 프로젝트 기여와 같이 더 깊이 있는 내용이어야 합니다. 여기에 소개된 13가지 프로젝트는 포트폴리오용 작품이 아니라 자신감을 키우기 위한 디딤돌입니다. 나중에 이력서에 올릴 만한 수준의 프로젝트를 빌드할 수 있도록 준비하는 과정입니다.
이 프로젝트들을 통해 어떤 Python 개념들을 배우게 되나요?
13가지 프로젝트를 진행하면서 변수, 입력과 출력, 조건문, 루프, 함수, 리스트, 딕셔너리, 세트, random 모듈, time 모듈, f-string, 리스트 컴프리헨션(list comprehension), 그리고 collections와 string 같은 몇 가지 표준 라이브러리 모듈을 접하게 됩니다. 이는 이 언어에서 실무에 바로 쓸 수 있는 탄탄한 핵심 부분입니다.
제 코드가 작동하지 않으면 어떻게 해야 하나요?
에러 메시지를 읽어보세요. 초보자가 겪는 대부분의 에러는 보통 당황하기 시작한 바로 윗줄에서 무엇이 잘못되었는지 거의 정확하게 알려줍니다. 에러 메시지를 구글링하거나, Bugsy 같은 AI 어시스턴트에게 설명을 요청하거나, 포럼에 질문을 올려보세요. 디버깅은 코딩과 마찬가지로 반복적인 연습을 통해 키워나가는 기술입니다.
스마트폰으로도 이 프로젝트들을 할 수 있나요?
네, 가능합니다. Python은 코드 플레이그라운드가 내장된 Coddy 앱을 포함하여 모바일 코딩 환경에서도 실행됩니다. 손바닥만 한 화면에서 기업용 소프트웨어를 작성하지는 못하겠지만, 작은 연습용 프로젝트는 충분히 잘 작동합니다. 실제로 많은 사람들이 노트북보다 스마트폰을 통해 더 많은 연습을 하곤 합니다.
쉬운 Python 프로젝트 다음 단계는 무엇인가요?
더 많은 개념을 결합한 중간 난이도의 프로젝트입니다. 소규모 웹 스크래퍼, API 클라이언트, 페이지를 제공하는 Flask 또는 Django 앱, 폴더 내의 파일을 처리하는 스크립트 등이 있습니다. 새로운 라이브러리를 가져와 외부 요소와 연결하는 모든 작업이 유용한 다음 단계가 됩니다. 본인의 일상에서 작은 문제를 해결해 주는 프로젝트를 선택해 보세요. 그래야 끝까지 완성할 수 있습니다.



