brunch

둘째의 도자기 유약 레시피, 엑셀 말고 파이썬으로!

by 박정수

두 딸들아, 너희가 코딩 배우는 걸 싫어하는 건 아빠(엄마)도 잘 알고 있어. "코딩은 복잡하고, 어렵고, 재미없어!"라고 생각하는 것도 이해해.

그런데 오늘은 아빠(엄마)가 너희가 정말 좋아하는 '도자기' 이야기로 코딩을 다시 한번 설득해 보려고 해.

째가 유약 레시피를 노트나 엑셀 파일에 열심히 적고, 비율을 계산하는 걸 본 적이 있어. 정말 멋지고 중요한 작업이지! 그 작은 비율 차이로 유약의 색과 질감이 완전히 달라지니까 말이야.

paint3.png

엑셀로 관리하는 법 (지금까지의 방식)

아마 지금은 엑셀을 쓴다면 이렇게 하고 있을 거야.

100g 만들 때는 이 표만 보면 되니까 편해.

하지만 "아! 이 투명유 레시피로 오늘은 750g을 만들어야지!" 하는 순간, 어떻게 해야 할까?

아마 계산기를 꺼내거나, 엑셀의 새 셀에

=B2 * 7.5,

=C2 * 7.5,

=D2 * 7.5

... 이렇게 모든 재료 칸에 일일이 수식을 입력하고 있을 거야. 레시피가 10가지 재료로 되어 있다면? 10번의 '복사-붙여 넣기' 혹은 수식 입력을 해야 해. 여기서 실수라도 하면... 유약 전체를 망칠 수도 있지.

또 "1250도에서 굽고, '산화동'이 들어간 레시피만 찾아줘"라고 하려면 엑셀의 필터 기능을 써야 하는데, 레시피가 50개, 100개가 넘어가면 이것도 점점 귀찮고 복잡한 일이 될 거야.


파이썬으로 관리하는 법 (더 스마트한 방식)

여기서 아빠가 제안하는 '파이썬(Python)'이 등장해. 파이썬은 무섭고 복잡한 프로그램이 아니야. 그냥 너희만의 '똑똑한 유약 레시피 비서'를 만들 수 있는 도구라고 생각해 봐.

엑셀처럼 데이터를 저장하지만, 훨씬 강력한 '자동화'가 가능해.


예를 들어,

scale_recipe(레시피, 총량)

(레시피_용량_계산해)라는 '도구(함수)'를 딱 한 번만 만들어 두는 거야.

그리고 이 도구한테 이렇게 '말만 하면' 돼.

scale_recipe(째의_투명유, 750)

끝!


파이썬 비서가 순식간에 750g에 필요한 장석 300g, 실리카 225g, 석회석 150g... 모든 재료의 양을 0.01g 단위까지 정확하게 계산해서 보여줘.

120g이 필요하면?

scale_recipe(째의_투명유, 120)

라고만 하면 돼. 엑셀처럼 매번 수식을 복사하고, 고치고, 검토할 필요가 전혀 없어.


이게 다가 아니야.

find_recipes_with_ingredient('산화동')

(산화동_포함_레시피_찾아줘) 같은 도구도 만들 수 있어. 그럼 수백 개의 레시피 중에서도 '산화동'이 포함된 레시피만 싹 찾아서 "둘째의 그린유, 쨉의 터키블루유에 포함되어 있어요!"라고 알려줄 수 있지. 엑셀 필터보다 훨씬 빠르고 강력하게 말이야.


왜 엑셀보다 좋을까?

엑셀은 훌륭한 도구지만, '데이터를 표에 저장'하는 게 중심이야. 계산은 각 셀에 수식을 넣는 '덤'에 가깝지. 그래서 레시피가 많아지거나 계산법이 복잡해지면(예: '재료 A와 B의 비율은 항상 2:1로 유지'), 엑셀 시트는 금방 복잡해지고 실수하기 쉬워져. 수식 하나 잘못 건드리면 전체 계산이 엉망이 될 수도 있잖아.

하지만 파이썬은 '반복 작업을 자동화'하고 '복잡한 논리를 처리'하는 게 중심이야. 레시피를 저장하는 건 기본이고, 그 레시피를 '요리조리 활용하는' 너만의 도구를 만드는 데 특화되어 있어.

scale_recipe 같은 도구는 한 번만 잘 만들어두면, 1000개의 레시피에도 똑같이 완벽하게 작동해. 이게 바로 '확장성'과 '안정성'이야. 엑셀은 '수동' 작업이 많다면, 파이썬은 '자동' 작업이 훨씬 많아.


'코딩'이 바로 이거야

이렇게 '내가 필요한 도구'를, '내 문제를 해결해 줄 비서'를 직접 만드는 게 바로 '코딩'이야.

어려운 수학 문제가 아니라, '내 삶의(혹은 취미의) 문제를 해결하는 논리적인 글쓰기' 같은 거지.

너희가 좋아하는 도자기를 더 멋지게, 더 편하게 만들기 위해 코딩을 배운다고 생각해 봐. 유약 레시피뿐만 아니라, 나중에는 가마 소성 스케줄을 관리하거나, 재료비를 자동으로 계산하는 너희만의 앱을 만들 수도 있어. 엑셀로는 상상하기 힘든 일이지.

어때, 코딩이 조금은 다르게 보이지 않아? 다음은 코드로 만들 결과물이야. 원하는 내용들이 잘 정리되어 있어.


***** 쨉의 디지털 유약 레시피 북 *****

--- 둘째의 투명유 (Jeniffer's Clear Glaze) 레시피 (750g 스케일)---

장석 (Feldspar): 300.00g

실리카 (Silica): 225.00g

석회석 (Whiting): 150.00g

카올린 (Kaolin): 75.00g

소성 온도 (Firing Temp): 1250°C

--------------------------------------------------

--- 둘째의 그린유 (Jeniffer's Green Glaze) 레시피 (120g 스케일) ---

장석 (Feldspar): 53.73g

실리카 (Silica): 29.85g

석회석 (Whiting): 23.88g

카올린 (Kaolin): 11.94g

산화동 (Copper Oxide): 0.60g

소성 온도 (Firing Temp): 1240°C

--------------------------------------------------

--- '산화동 (Copper Oxide)'이(가) 포함된 레시피 검색 ---

발견: 둘째의 그린유 (Jeniffer's Green Glaze) (포함량: 0.5%)

--------------------------------------------------

--- '카올린 (Kaolin)'이(가) 포함된 레시피 검색 ---

발견: 둘째의 투명유 (Jeniffer's Clear Glaze) (포함량: 10%)

발견: 둘째의 그린유 (Jeniffer's Green Glaze) (포함량: 10%)



실습은 다음 코드를 복사해서 Colab에 paste를 하면 돼. 그런데 코드가 100줄 이상이나 길어서 "아이고 폭망이다"라고 생각하지는 마. 이것은 EXCEL보다 PYTHON Coding이 더 편하다는 것을 보여 주려는 의도이지 여러분이 이해하기에는 이직 너무 어려요. 거꾸로 나도 언젠가는 저 정도의 코드를 짤 수 있겠지 하는 자신감을 가지라고. 코딩은 포기하지 않으면 성공할 수 있어. 그리고 제일 하단에 파일도 첨부해 두었으니 다운로드하여서 사용해도 돼.


# glaze_calculator.py

# 둘째의 도자기 유약 레시피를 위한 간단한 파이썬 계산기

# This is a simple Python calculator for Jjae's pottery glaze recipes.

# --- 1. 레시피 정의하기 (Defining Recipes) ---

# 엑셀 시트 대신, '딕셔너리(dictionary)'라는 것을 사용해 레시피를 저장해요.

# '이름: 값' 형태로 재료와 비율을 짝지어 줍니다.

# Instead of an Excel sheet, we use a 'dictionary' to store recipes.

# We pair ingredients and percentages in 'name: value' format.


jeniffer_clear_glaze = {

"name": "둘째의 투명유 (Jeniffer's Clear Glaze)",

"temp": 1250, # 소성 온도 (Firing Temp °C)

"ingredients": {

"장석 (Feldspar)": 40,

"실리카 (Silica)": 30,

"석회석 (Whiting)": 20,

"카올린 (Kaolin)": 10

# 합계 (Total) = 100

}

}


jeniffer_green_glaze = {

"name": "둘째의 그린유 (Jeniffer's Green Glaze)",

"temp": 1240, # 소성 온도 (Firing Temp °C)

"ingredients": {

"장석 (Feldspar)": 45,

"실리카 (Silica)": 25,

"석회석 (Whiting)": 20,

"카올린 (Kaolin)": 10,

"산화동 (Copper Oxide)": 0.5 # 0.5%만으로도 색이 나옴

# 합계 (Total) = 100.5 (앗 100을 넘네... 이런 것도 쉽게 관리!)

}

}


# 모든 레시피를 한 리스트에 보관

# Store all recipes in one list

all_my_recipes = [jeniffer_clear_glaze, jeniffer_green_glaze]

# --- 2. 레시피 스케일링 함수 (Recipe Scaling Function) ---

# 엑셀에서는 새 열을 만들고 수식을 복사해야 하지만,

# 파이썬에서는 '함수(function)'를 한 번만 만들면 됩니다.

# In Excel, you'd make new columns and copy formulas.

# In Python, we just make one 'function'.


def scale_recipe(recipe, total_grams):

"""

지정한 레시피를 원하는 총량(그램)에 맞게 계산합니다.

Calculates the recipe for the desired total grams.

"""

print(f"\n--- {recipe ['name']} 레시피 ({total_grams} g 스케일) ---")


# 100% (또는 100.5% 등) 기준의 총 비율 계산

# Calculate the total percentage from the base recipe


base_total = sum(recipe ["ingredients"]. values())

for ingredient, percentage in recipe ["ingredients"]. items():

# (원하는 총량 / 기본 비율 합계) * 재료 비율

# (Desired Total Grams / Base Total %) * Ingredient %

grams_needed = (total_grams / base_total) * percentage

# 소수점 둘째 자리까지 깔끔하게 출력

# Print neatly, rounded to two decimal places

print(f" {ingredient}: {grams_needed:. 2f} g")

print(f" 소성 온도 (Firing Temp): {recipe ['temp']}°C")

print("--------------------------------------------------")

# --- 3. 특정 재료가 포함된 레시피 찾기 (Find Recipes with Ingredient) ---

def find_recipes_with_ingredient(recipes_list, ingredient_name):

"""

레시피 목록에서 특정 재료를 포함하는 레시피를 찾습니다.

Finds recipes in a list that contain a specific ingredient.

"""

print(f"\n--- '{ingredient_name}'이(가) 포함된 레시피 검색 ---")

found_count = 0

for recipe in recipes_list:

# 레시피의 'ingredients' 딕셔너리에 해당 재료 이름이 있는지 확인

if ingredient_name in recipe ["ingredients"]:

print(f" 발견: {recipe ['name']} (포함량: {recipe ['ingredients'][ingredient_name]}%)")

found_count += 1

if found_count == 0:

print(" 해당 재료를 포함하는 레시피를 찾지 못했습니다.")

print("--------------------------------------------------")


# --- 4. 파이썬 코드 실행하기 (Running the Python Code) ---

# 엑셀을 여는 대신, 이 파일을 '실행'하면 됩니다.

# Instead of opening Excel, you just 'run' this file.

print("***** 둘째의 디지털 유약 레시피 북 *****")

# 사용법 1: '둘째의 투명유' 레시피를 750g 만들고 싶을 때

# Usage 1: I want to make 750g of 'Jjae's Clear Glaze'


scale_recipe(jeniffer_clear_glaze, 750)


# 사용법 2: '둘째의 그린유' 레시피를 120g 만들고 싶을 때

# Usage 2: I want to make 120g of 'Jjae's Green Glaze'

scale_recipe(jeniffer_green_glaze, 120)



# 사용법 3: '산화동 (Copper Oxide)'이 들어간 레시피 찾기

# Usage 3: Find recipes containing 'Copper Oxide'

find_recipes_with_ingredient(all_my_recipes, "산화동 (Copper Oxide)")


# 사용법 4: '카올린 (Kaolin)'이 들어간 레시피 찾기

# Usage 4: Find recipes containing 'Kaolin'

find_recipes_with_ingredient(all_my_recipes, "카올린 (Kaolin)")





https://colab.research.google.com/ 에 가서 좌측하단에 있는 파란색 +New notebook 버튼을 누르고, colab이 나오면 비쎌에 paste 해서 좌측 검은색 동그라미 속 삼각형을 누르면 실행이 돼.



그리고 파일을 저장하고 싶으면

paint1.png
paint2.png

우측 상단에 RAM이 있는 부분 (빨간색 원)의 화살표를 누르면 지금 보는 화면으로 바뀌는데, 좌상단의 빨강색선 부분에 가령 도자기. ipynb라고 파일 이름을 생성한 후, 좌측 상단의 File==> Save a copy in Drive를 하거나 하단의 Download 버튼을 눌러서 Download.ipynb를 선택해서 다운을 받으면 돼. 저장은 어차피 Excel의 경우에도 File에 가서 저장을 하니까 동일한 내용이고.


혹 불편할까 봐 파일을 첨부했어요.




keyword
이전 10화아빠랑 For Loop으로 장보기