본문으로 건너뛰기
취준생을 위한 AI 포트폴리오 가이드 · 4/4시리즈 보기 →

취준생 포트폴리오, Colab 200% 사용하기

· 약 26분
Datapopcorn CEO / AI automation educator

면접관이 포트폴리오 GitHub 링크를 열면 하는 일은 하나입니다. 30초 안에 코드가 도는지 확인하고 창을 닫는 것입니다. 그래서 "코드를 잘 썼는가"보다 "면접관이 30초 안에 재현할 수 있는가"를 먼저 설계해야 합니다. Colab은 그 재현 링크를 무료로 만들어 주는 도구입니다. 이 글은 Step 1~7로 그 링크를 만드는 법과, 마지막에 커뮤니티에서 모은 꿀팁 100개를 정리했습니다.

이 글은 이런 분께 필요합니다​

  • 코딩을 배우는 중이라 노트북으로 만든 분석 결과를 포트폴리오에 올리고 싶은 분
  • GitHub에 코드를 올렸지만 면접관이 실행하지 않는 이유가 궁금한 분
  • GPU를 사지 않고도 모델을 한 번 돌려 보고 싶은 분

준비물은 Google 계정 하나와 브라우저면 됩니다. 이 글의 모든 화면과 숫자는 Colab Pro 플랜 계정으로 직접 실행한 결과이며, 2026년 10월 3일 기준입니다. 무료 플랜에서도 같은 절차를 밟되, GPU가 항상 붙지는 않습니다(뒤에서 따로 설명합니다).

먼저 정리: Colab이 포트폴리오에서 하는 일​

Colab은 그냥 코드를 실행하는 도구입니다. 포트폴리오에서 쓰는 이유는 딱 네 가지입니다.

  1. 설치 없이 실행된다. 파이썬 패키지 설치와 런타임 준비가 셀 몇 줄로 끝납니다. 면접관이 내 컴퓨터에서 같은 환경을 만들 필요가 없습니다.
  2. GitHub 주소를 Colab 주소로 바꿀 수 있다. 공개 저장소의 .ipynb는 Colab에서 바로 열리고, 그 자리에서 실행됩니다.
  3. 실행 환경이 증거로 남는다. GPU 모델 이름, 메모리, 디스크가 노트북 출력에 그대로 찍힙니다. "어떤 환경에서 돌렸나요"라는 질문이 사라집니다.
  4. 결과물을 웹 링크로 공개할 수 있다. Gradio로 띄운 데모는 면접관이 클릭해서 써 볼 수 있는 링크가 됩니다.

이제 이 네 가지 각각을 Step으로 나눠 실습합니다.

Step 1. 노트북 구조를 그렇게 짜야 면접관이 멈추지 않습니다​

면접관은 코드의 줄 수를 세지 않습니다. 질문이 나열된 순서로 읽습니다. 그래서 셀 하나에 질문 하나를 넣습니다.

셀제목(예시)하는 일
1데이터가 뭔지원본 주소와 컬럼 소개
2먼저 확인할 것결측치·중복 등 데이터 상태 점검
3질문분석하려는 문제를 한 문장으로
4방법고른 방법과 그 이유
5결과숫자와 그래프
6한계어디까지 신뢰할 수 있는지

셀 위에는 실행 순서 [1] [2]…와 실행 시간이 붙습니다. Colab은 이 정보를 출력에 그대로 남깁니다. 지금 실행 중인 노트북에서도 각 셀 왼쪽에 [2] 1초처럼 표시됩니다. 실행 순서와 소요 시간이 보이는 노트북은, 같은 코드를 얼핏 봤을 때보다 훨씬 신뢰가 갑니다.

데이터를 URL로 불러온 뒤 head(3)를 출력한 노트북 화면

Step 2. 런타임 유형을 바꾸고, 어떤 기계에서 돌렸는지 노트북에 남기기​

런타임 > 런타임 유형 변경을 누르면 하드웨어 가속기를 고를 수 있습니다. 화면에 보이는 항목은 다음과 같습니다.

런타임 유형 변경 대화상자에서 T4 GPU와 고용량 RAM이 선택된 상태

  • 선택 가능했던 항목(Pro 계정 화면 기준): T4 GPU, L4 GPU, A100 GPU, v6e-1 TPU, v5e-1 TPU
  • 불가능했던 항목: H100 GPU는 선택 자체가 회색 처리돼 있었고, G4 GPU(NVIDIA RTX Pro 6000 Blackwell)에는 Pro+ 업그레이드 안내가 붙어 있었습니다. 무료 계정에서는 선택지가 이보다 좁습니다.

여기에 고용량 RAM 스위치가 있습니다. 켜고 나면 세션이 재시작되며, 그 다음 셀에서 실제로 붙은 자원을 볼 수 있습니다.

import subprocess, sys, platform

print("Python:", sys.version.split()[0], "|", platform.platform())
print(
subprocess.run(
"nproc; free -g | head -2; df -h / | tail -1; "
"nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader",
shell=True,
capture_output=True,
text=True,
).stdout
)

이 노트북에서 실제로 나온 출력은 이렇습니다.

Python: 3.13.15 | Linux-6.6.122+-x86_64-with-glibc2.39
8
total used free shared buff/cache available
Mem: 50 1 46 0 3 49
overlay 236G 43G 194G 18% /
Tesla T4, 15360 MiB, 580.82.07

여기서 읽어낼 세 가지가 있습니다.

  • 8 vCPU, 50 GB 메모리, 236 GB 디스크. 고용량 RAM을 켠 T4 세션의 실제 값입니다.
  • Tesla T4, 15360 MiB. GPU 이름과 VRAM(15 GB)이 그대로 찍힙니다. 모델을 왜 GPU로 돌렸는지 설명할 때 이 한 줄이 증거가 됩니다.
  • Python 3.13.15, 드라이버 580.82.07. 라이브러리 버전 문제가 생겼을 때 "그때 어떤 버전이었나"를 대답할 수 있습니다.

확인 결과를 노트북 첫 셀에 그대로 남겨두면, 면접관이 "이거 실제로 돌아봤구나"라고 판단하는 근거가 됩니다. 그리고 화면 오른쪽 위에는 RAM과 디스크 사용량이 계속 표시되므로, 나중에 메모리가 모자라면 실행하기 전에 알 수 있습니다.

Step 3. 데이터를 URL로 불러와서 노트북을 '어디서든 실행되는' 상태로 만들기​

면접관이 가장 빨리 포기하는 순간은 "먼저 파일을 내려받고 경로를 고쳐주세요"입니다. 이걸 없애는 방법이 하나뿐입니다. 데이터를 URL로 읽는 것입니다.

import pandas as pd

url = (
"https://raw.githubusercontent.com/inyounglee-datapopcorn/"
"popcar-rentals-gx-data/main/popcar_rentals_2026-09-21_27.csv"
)
df = pd.read_csv(url)

print(df.shape)
print(list(df.columns))
display(df.head(3))

실행하면 이렇게 나옵니다.

(917, 9)
['rental_id', 'member_id', 'region', 'car_model', 'status',
'started_at_utc', 'returned_at_utc', 'distance_km', 'fare_krw']

데이터는 제가 공개해 둔 합성 데이터(917건의 카셰어 대여 기록)입니다. 여기서 중요한 건 숫자가 아니라 구조입니다.

  • 첫 줄 df.shape — 전체 규모를 한 줄로 보여줍니다.
  • list(df.columns) — 분석에 쓸 수 있는 항목이 무엇인지 알립니다.
  • display(df.head(3)) — 셀 마지막 줄이 표일 때는 display()를 붙여야 표 형태로 나옵니다.

Google 드라이브 마운트를 쓰는 방법도 있지만, 취준생 프로젝트에서는 권하지 않습니다. 드라이브 마운트는 계정 권한을 넓게 요구하고, 면접관이 내 계정으로 따라와야 합니다. 공개 데이터는 URL, 민감한 데이터는 애초에 노트북에 싣지 않는 편이 안전합니다.

Step 4. GitHub에 올리고, Colab 공개 주소로 배포하기​

Colab 노트북은 기본적으로 Google 드라이브에 저장됩니다(드라이브/<아이디> 형태의 주소). 드라이브에 있는 노트북은 내 계정으로 로그인한 사람만 열 수 있습니다. 회사 PC가 막혀 있거나 Google 계정이 없는 면접관은 열지 못합니다. 그래서 드라이브 링크가 아니라 GitHub 주소가 필요합니다.

4-1. 노트북을 GitHub에 올리기​

파일 > 노트북 다운로드로 .ipynb를 받아 GitHub 저장소에 올립니다. 저장소 구조는 이렇게 두면 됩니다.

내-포트폴리오/
├── README.md
├── notebooks/
│ └── 01-카셰어-요금-분석.ipynb
└── data/ (데이터를 직접 올리지 않을 거면 비워 둬도 됩니다)

4-2. Colab 공개 주소 만들기​

저장소가 공개되어 있다면, .ipynb 파일은 아래 주소를 Colab에서 바로 엽니다. 로그인 연동도 필요 없습니다.

https://colab.research.google.com/github/<계정>/<저장소>/blob/<브랜치>/<파일경로>.ipynb

실제로 공개 저장소의 노트북을 이 주소로 열면 아래처럼 열리고, 상단에 Drive로 복사 버튼이 붙습니다. 면접관은 이 버튼을 눌러 자기 드라이브로 가져가 자유롭게 다시 실행할 수 있습니다.

Colab에서 GitHub 공개 노트북을 직접 연 화면

4-3. README에 실행 버튼 붙이기​

README 맨 위에 Colab 배지를 넣으면 노트북 목록에서 바로 실행 화면으로 넘어갑니다.

[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/<계정>/<저장소>/blob/main/notebooks/01-카셰어-요금-분석.ipynb)

배지 이미지 주소(colab-badge.svg)와 같은 경로의 .png 모두 정상 응답합니다. GIF 배지도 있습니다. README에는 노트북 하나당 한 줄짜리 설명과 결론 숫자를 적어두세요. 그래프를 다시 그릴 질문까지 노트북에 던져두면 면접이 대화형이 됩니다.

Step 5. 결과물을 링크 하나로: Gradio 라이브 데모​

노트북에 그림이 몇 개 있는 것보다, 면접관이 직접 값을 넣어 보고 결과가 바뀌는 것이 훨씬 강합니다. Gradio를 쓰면 노트북 안에서 웹 데모가 열리고, 공유 가능한 주소가 하나 나옵니다.

!pip -q install gradio
import gradio as gr

price = lambda km, base: round(km * 175 + base)

demo = gr.Interface(
fn=price,
inputs=[gr.Number(label="km"), gr.Number(label="base")],
outputs=gr.Number(label="fare"),
)
demo.launch(share=True)

실행하면 셀 아래에 이런 문구가 뜹니다.

Running on public URL: https://5e9a0f48e03134fca7.gradio.live
This share link is temporary and will last for up to 1 week (best effort).

Gradio 공유 링크가 출력된 셀과 다음 단계 안내 문구

주소 하나만 누구에게 보내면 브라우저에서 바로 값 하나 넣어 볼 수 있습니다.

gradio.live로 공개된 데모 화면

확인해야 할 점 두 가지가 있습니다.

  • 공유 링크는 최대 1주(최선 기준)입니다. README에 라이브 데모 링크를 고정해 두지 말고, "Colab에서 직접 실행" 링크를 기본으로 두고 데모는 병기하세요.
  • 같은 출력 영역 아래에 Cloud Run에 배포 버튼이 뜹니다. 영구 주소가 필요하면 Colab이 제공하는 Cloud Run 배포 경로를 검토할 수 있습니다. 과금은 발생하는 선택이라, 계정과 비용을 확인한 뒤 결정하세요.

Step 6. API 키는 노트북에 적지 말고 '보안 비밀'에 넣기​

면접용 프로젝트는 종종 LLM API를 호출합니다. 이때 가장 큰 실수는 API 키를 셀에 그대로 쓰는 것입니다. GitHub에 공개 저장소로 올라간 키는 1분 만에 남용되고, 면접에서는 "키를 왜 노출했나"가 역량 문제가 됩니다.

왼쪽 사이드바의 보안 비밀 패널에 키를 등록하면 코드에는 이름만 남습니다.

from google.colab import userdata
from openai import OpenAI

client = OpenAI(api_key=userdata.get("OPENAI_API_KEY"))

핵심은 OPENAI_API_KEY라는 이름만 코드에 남는다는 점입니다. 등록하지 않은 이름을 읽으면 SecretNotFoundError가 나므로, 아무 값도 조용히 통과하지 않습니다.

공유 직전에는 이 네 가지를 확인합니다.

  • 셀에 키, 토큰, 비밀번호가 그대로 쓰여 있지 않은가
  • 결과 출력에 키 앞뒤 문자열이 찍히지 않았는가
  • 드라이브 공유 권한이 "내 계정"으로 제한되어 있는가
  • README에 올린 Colab 주소가 공개 저장소 주소인가(비공개라면 아무도 못 엽니다)

Step 7. 면접 전에 5분으로 확인하는 체크리스트​

노트북을 그대로 제출하기 전에 이 순서로 한 번만 훑습니다.

  1. 런타임 > 세션 다시 시작 및 모두 실행으로 빈 상태에서 처음부터 끝까지 한 번 돌립니다. 이게 안 되면 면접관은 실패합니다.
  2. 첫 화면에 결론이 있는지 확인합니다. 그래프를 스크롤해서 보기 전에 읽히는 한 줄이 있어야 합니다.
  3. 시간 오래 걸리는 셀이 있으면 실행 시간을 확인합니다. [n] 옆에 찍히는 숫자가 면접관에게 다 보여립니다.
  4. 링크를 클릭해 봅니다. Colab 공개 주소, README 링크, GitHub 저장소 주소 각각을 새 탭에서 직접 열어 봅니다.
  5. 마지막에 한계를 씁니다. "이 방법으로는 ~까지는 설명할 수 있지만, ~는 못 한다"를 적어두면 질문이 이어져도 답할 수 있습니다.

자주 막히는 지점 정리​

증상실제로 벌어진 이유해결
GPU로 바꾼 뒤 코드 결과가 그대로 CPU로 돌아간다세션이 재시작되기 전입니다런타임 > 세션 다시 시작 후 다시 실행
노트북을 열었는데 빈 화면드라이브 공유 권한이 없거나 로그인 안 됨GitHub 공개 주소(4-2)로 교체
공개 저장소인데 Colab 주소가 404저장소가 비공개이거나 브랜치/경로가 틀림Colab 주소는 공개 저장소에서만 동작
마지막 줄 표가 그냥 텍스트로 출력됨노트북이 마지막 줄 값을 자동 표시display(df.head(3))처럼 display() 사용
공유 링크가 며칠 뒤 죽었다Gradio 공유 링크는 최대 1주(최선)README는 Colab 실행 링크를 기본으로 두고 데모는 병기
API 키가 필요한 코드가 면접에서 실패노트북을 연 사람이 키를 등록하지 않음키가 필요 없는 로컬 대체 경로(샘플 데이터)도 준비
런타임이 도중에 끊겼다무료 플랜은 세션이 유휴 상태로 오래 idle 하면 종료세션 관리에서 남은 시간 확인, 저장해 둔 체크포인트에서 재개
데이터가 404저장소 파일명 또는 대소문자가 다름주소를 브라우저로 직접 열어 확인

무료로 가능한 범위와 유료 플랜 차이​

공식 Colab FAQ 기준으로 무료 노트북은 최대 12시간까지만 실행되며, GPU를 반드시 제공하지도 특정 GPU를 보장하지도 않습니다. Google Colab 가격 페이지는 2026년 10월 기준 Pay As You Go $9.99/100 compute unit, Colab Pro+ $49.99/월로 안내합니다. compute unit은 컴퓨트 단위로, GPU를 빌리는 크레딧입니다. 요금은 언제든 바뀌므로 제출 전에 가격 페이지를 다시 확인하세요.

그래서 설계 방향은 이렇게 잡는 편이 안전합니다.

  • 기반 프로젝트는 CPU로 충분합니다. pandas 집계와 시각화는 CPU 런타임에서 1초 안에 끝납니다.
  • GPU는 "왜 필요한지 설명할 수 있을 때만" 씁니다. 대규모 모델 학습이나 영상 처리처럼 몇 시간 걸리는 작업에 씁니다. 15 GB VRAM의 T4로는 Latest 대형 모델이 메모리에 안 들어가는 경우를 미리 확인하고, 안 들어간다는 사실 자체를 본문에 적는 편이 정직합니다.
  • 구현은 로컬에서, 증명은 Colab에서. VS Code Colab 확장이나 터미널 Colab CLI를 쓰면 로컬 편집과 원격 GPU 실행을 분리할 수 있습니다.

꿀팁 100개​

커뮤니티(Reddit r/Colab·r/LocalLLaMA, Hugging Face 포럼, Kaggle 토론, GitHub 이슈, Colab 공식 문서)에서 실제로 자주 쓰는 팁을 모았습니다. 100개를 전부 직접 Colab에서 돌려볼 수는 없으므로, 각 팁 앞에 표시를 붙였습니다.

  • ✅ 직접 실측 — 이 글 쓰는 중 Colab에서 실제로 실행해 확인한 것
  • 📄 공식 확인 — Colab 문서·릴리스 노트·라이브러리 공식 문서에서 확인
  • 🧑‍🤝‍🧑 커뮤니티 — Reddit·포럼·이슈에서 보고된 것. 환경에 따라 다를 수 있습니다
  • ⚠️ 쓰지 마세요 — 검색 상위에도 남아 있는 옛 정보나 위험한 우회책

그룹 1. GPU·런타임·세션 (TIP 1~20)​

TIP 1. 첫 셀에서 !nvidia-smi로 실제 GPU를 확인한다 ✅ Pro를 결제해도 A100이 보장되지 않습니다. 고른 이름과 실제 배정 모델이 다를 수 있습니다. !nvidia-smi --query-gpu=name,memory.total --format=csv,noheader

TIP 2. CPU·메모리·디스크를 노트북에 남긴다 ✅ nproc, free -g, df -h /를 출력해 두면 "어떤 환경에서 돌렸나"가 증거가 됩니다. 이 글에서 실측값은 8 vCPU / 50 GB / 236 GB였습니다. !nproc; !free -g | head -2; !df -h / | tail -1

TIP 3. 셀 앞의 실행 번호와 시간을 결과의 일부로 쓴다 ✅ Colab은 셀 왼쪽에 [2] 1초처럼 찍습니다. 실행 순서와 소요 시간이 그대로 증빙이 됩니다.

TIP 4. 상단 RAM·디스크 게이지를 눈으로 확인한다 ✅ 오른쪽 위 게이지로 메모리가 모자라고 struggling하는 걸 실행 전에 알 수 있습니다.

TIP 5. 런타임 유형 목록을 알고 시작한다 ✅ 2026년 10월 기준 대시보드에서 보인 선택지는 CPU, G4 GPU, A100 GPU, L4 GPU, T4 GPU, H100 GPU, v6e-1 TPU, v5e-1 TPU입니다. H100은 선택 자체가 막혀 있고 G4에는 Pro+ 업그레이드 안내가 붙습니다.

TIP 6. 고용량 RAM 스위치를 키면 시스템 메모리가 크게 늘어난다 ✅ T4 + 고용량 RAM에서 이 글의 실측값은 50 GB였습니다. 표준 런타임은 훨씬 작습니다. 데이터가 클 때 가장 먼저 켜볼 만한 스위치입니다.

TIP 7. GPU 안 쓰는 구간은 CPU 런타임으로 되돌린다 📄 GPU 런타임에 붙어 있어도 GPU를 안 쓰면 한도를 계속 태웁니다. 전처리·EDA 구간은 CPU로 내려가는 습관이 비용을 줄입니다. (FAQ)

TIP 8. TPU 런타임에서는 nvidia-smi가 안 나온다 🧑‍🤝‍🧑 TPU는 NVIDIA 카드가 아닙니다. import jax; print(jax.devices())로 확인합니다.

TIP 9. 드라이버가 지원하는 CUDA와 설치된 툴체인은 다르다 🧑‍🤝‍🧑 nvidia-smi가 CUDA 13을 표시해도 nvcc --version은 12.x일 수 있습니다. "최신 CUDA"라고 쓰지 말고 두 값을 모두 남기세요. (사례)

TIP 10. 다 쓴 런타임은 "런타임 연결 해제 및 삭제"로 반납한다 📄 중단 버튼(■)만 눌러도 VM이 남아 자원을 먹습니다. 런타임 메뉴의 런타임 연결 해제 및 삭제가 실제 반납입니다.

TIP 11. 커널만 재시작하면 VM은 살아남는다 🧑‍🤝‍🧑 OOM 이후 완전 초기화 전에 런타임 > 세션 다시 시작을 먼저 시도합니다. 드라이브와 설치 상태가 유지됩니다.

TIP 12. "무료 티어 T4 30시간/월" 같은 확정 수치를 쓰지 않는다 ⚠️ Colab은 사용 한도·유휴 타임아웃·GPU 종류를 공개하지 않습니다. 공식적으로는 최대 12시간이며 유휴 시 회수된다고만 되어 있습니다. (FAQ)

TIP 13. CU가 바닥나면 플랜이 아니라 무료 티어 규칙으로 돌아간다 📄 유료 구독 중이어도 잔액이 떨어지면 그 순간부터 무료 티어 제약이 적용됩니다.

TIP 14. Pro+는 탭을 닫아도 실행을 계속한다 📄 브라우저를 닫아도 되지만 CU 잔액이 있고 코드가 실제로 돌고 있을 때만 유효합니다.

TIP 15. 구독 없이 CU만 필요할 때가 있다 📄 런타임 유형 변경 화면의 "컴퓨트 유닛 추가 구매"로 일회성 결제가 가능합니다.

TIP 16. Colab 홈에서 노트북을 프로젝트 단위로 묶는다 📄 2026년 8월 새 홈 화면에서 여러 노트북을 한 프로젝트로 정리할 수 있습니다. (릴리스 노트)

TIP 17. Colab CLI로 터미널에서 GPU를 빌린다 📄 uv tool install google-colab-cli → colab new -s train --gpu T4. "수동으로 Colab을 썼다"가 명령 한 줄로 재현됩니다. (GitHub)

TIP 18. colab run은 자동으로 회수하는 임시 러너다 📄 colab run --gpu T4 train.py 한 줄로 VM을 띄우고 실행하고 회수한 뒤 자동으로 정리합니다. GPU를 놓고 잠깐 하는 실수가 구조적으로 사라집니다.

TIP 19. colab log로 실험 기록을 파일로 남긴다 📄 colab log -s analysis -o execution_log.md — 화면 캡처 대신 재현 가능한 로그를 README에 올릴 수 있습니다.

TIP 20. Colab MCP 서버로 로컬 에이전트를 Colab에 붙인다 📄 Claude Code·Gemini CLI 같은 로컬 에이전트가 Colab 세션을 도구로 쓸 수 있습니다. (GitHub)

그룹 2. 데이터·파일·I/O (TIP 21~40)​

TIP 21. CSV/JSON은 URL을 pandas에 그대로 넘긴다 ✅ 이 글의 예제가 그렇습니다. 로컬 저장 단계를 없애면 면접관이 재실행할 때 막히는 지점이 사라집니다. pd.read_csv("https://raw.githubusercontent.com/...")

TIP 22. 원격 CSV를 DuckDB로 바로 SQL 질의한다 📄 duckdb.sql("INSTALL httpfs; SELECT * FROM 'https://.../data.csv'") — 메모리에 올리지 않고 집계하므로 대용량 처리가 가능합니다. (DuckDB)

TIP 23. Polars scan_csv는 필요한 컬럼만 읽는다 📄 pl.scan_csv(url).filter(...).select(...).collect(engine="streaming") — 읽기량 자체를 줄입니다. (Polars)

TIP 24. Hugging Face 데이터셋은 streaming=True로 순회한다 📄 load_dataset("org/name", split="train", streaming=True) — 전체를 RAM에 올리지 않습니다. (HF)

TIP 25. datasets 5.0은 shuffle() 전에 reshard()가 필요하다 📄 버전 5.0부터 스트리밍 데이터셋에 shuffle()을 걸면 shard가 하나로 뭉개져 멀티워커가 무력화됩니다. (논쟁 기록)

TIP 26. 단일 parquet는 streaming을 써도 통째로 로드될 수 있다 📄 큰 파일은 shard로 쪼개서 data_files="shard-*.parquet"로 넘깁니다. (이슈)

TIP 27. hffs.open()으로 청크 단위로 읽는다 📄 hffs.open("datasets/org/name/data.csv")를 pd.read_csv(f, chunksize=10000)에 넘기면 로컬 저장 없이 처리됩니다.

TIP 28. 단일 파일은 hf_hub_download로 받아 재사용한다 📄 노트북에는 repo_id와 filename만 남고 실제 경로 하드코딩이 사라집니다.

TIP 29. snapshot_download는 max_workers를 낮춘다 🧑‍🤝‍🧑 병렬 다운로드가 Colab 런타임을 멈추게 만들었다는 보고가 있습니다. max_workers=1이 안정적이지만 느립니다. (이슈)

TIP 30. Google Sheets는 "웹에 게시 → CSV" 링크로 읽는다 📄 시트 → 파일 → 웹에 게시 → CSV 형식. 인증 없이 pd.read_csv로 바로 읽힙니다. (방법)

TIP 31. Sheets 쓰기는 gspread + google-auth로 한다 📄 oauth2client 기반 옛 코드는 Google이 deprecated 처리했습니다. auth.authenticate_user() → gspread.authorize(default()[0])이 현재 표준입니다. (이슈)

TIP 32. Drive 마운트보다 URL·버킷에서 직접 읽는다 📄 마운트된 Drive의 랜덤 읽기는 로컬보다 훨씬 느릴 수 있습니다. 포트폴리오 노트북은 URL 로딩이 기본값입니다. (경험담)

TIP 33. Drive 데이터는 세션 시작 시 로컬로 복사한다 🧑‍🤝‍🧑 !cp -r "/content/drive/My Drive/dataset" /content — 마운트를 그대로 읽는 것보다 체감이 확실히 빠릅니다.

TIP 34. Drive 루트 항목이 1만 개를 넘으면 마운트가 실패한다 📄 하위 폴더당 1만 개 제한도 있습니다. 폴더 분리로 미리 설계해 두면 원천 제거됩니다. (FAQ)

TIP 35. Drive 캐시는 언마운트 후 지운다 📄 drive.flush_and_unmount() → !rm -rf /root/.config/Google/DriveFS. 파일을 지워도 캐시가 용량을 잡아먹는 경우가 있습니다. (이슈)

TIP 36. Drive 아카이브를 풀 때는 용량 2배를 가정한다 📄 읽은 tar가 캐시에 한 벌, 풀린 결과가 디스크에 한 벌입니다. 여유 공간을 2배로 잡으세요. (이슈)

TIP 37. 설치는 pip install --no-cache-dir -q로 돌린다 📄 대용량 패키지 캐시가 수 GB를 차지하므로, 이미지·데이터셋 공간을 남겨야 합니다.

TIP 38. 원격 CSV는 nrows로 먼저 훑는다 📄 pd.read_csv(url, nrows=1000)로 헤더·타입·인코딩을 먼저 확인하고 전체를 받는 순서가 안전합니다.

TIP 39. 한국어 CSV는 encoding="utf-8-sig"로 읽고 쓴다 🧑‍🤝‍🧑 엑셀 저장은 cp949가 아니라 UTF-8 BOM인 경우가 많습니다. 저장할 때도 같은 인코딩을 써야 다음 사람이 그대로 읽힙니다.

TIP 40. 결과 파일은 Drive 폴더에 저장한다 🧑‍🤝‍🧑 files.download()는 불안정한 연결에서 건너뛸 수 있습니다. Drive에 저장하면 재시도·재열람이 가능합니다. (이슈)

그룹 3. 시크릿·권한·재현성 (TIP 41~56)​

TIP 41. API 키는 코드에 쓰지 말고 보안 비밀로 읽는다 ✅ 왼쪽 자물쇠 아이콘에 등록하고 userdata.get("OPENAI_API_KEY")로 읽습니다. GitHub 공개 저장소의 기본 요건입니다.

TIP 42. userdata.get()은 항상 문자열을 준다 📄 숫자 ID나 타임스탬프는 int()로 변환해야 합니다. 값이 없으면 SecretNotFoundError가 나므로 조용히 통과하지 않습니다.

TIP 43. 시크릿은 공유 노트북을 따라오지 않는다 📄 링크로 넘겨도 시크릿 값은 전달되지 않습니다. 노트북 상단에 필요한 시크릿 이름을 적고, 없으면 돌아가는 대체 경로를 두세요. (아질)

TIP 44. HF_TOKEN 시크릿만 등록하면 허깅페이스가 자동 인증된다 📄 notebook_login()을 먼저 실행하면 면접관이 재실행할 때 불필요한 로그인 화면이 뜹니다. 시크릿만 두고 생략하세요. (HF)

TIP 45. 셸 명령에는 시크릿이 넘어가지 않는다 📄 !hf download ... --token ...처럼 쓰면 결국 하드코딩으로 돌아갑니다. 파이썬 안에서만 인증하세요. (이슈)

TIP 46. GCP는 서비스 계정 키 파일 대신 authenticate_user로 붙인다 📄 Colab 공식 블로그가 키 파일을 내려받는 관행을 "키가 리포에 올라갈 수 있는 심각한 문제"로 지적합니다. from google.colab import auth; auth.authenticate_user(project_id="my-proj") (Colab 블로그)

TIP 47. Drive 권한은 좁게만 요청한다 📄 drive.file 스코프는 앱이 만들거나 명시적으로 연 파일만 접근합니다. 교육용·공유 계정에서 전량 권한은 위험합니다. (Google 문서)

TIP 48. 읽기 전용 프로젝트는 readonly=True로 마운트한다 📄 drive.mount("/content/drive", readonly=True, force_remount=True) — 원본 실수를 막고, 마운트가 꼬였을 때 강제 재시도도 됩니다.

TIP 49. git push 토큰은 URL에 박지 말고 주입한다 🧑‍🤝‍🧑 git -c http.extraheader="Authorization: Bearer $TOKEN" push origin main — 셸 히스토리와 노트북 출력에 키가 남지 않습니다.

TIP 50. 공유 권한은 뷰어로, 상대는 사본을 저장해 실행한다 🧑‍🤝‍🧑 편집 권한을 주면 원본이 수정됩니다. 뷰어 권한 + "사본 저장 후 실행"이 깔끔합니다. (Reddit)

TIP 51. 저장할 때 코드 출력을 제외한다 📄 수정 > 노트북 설정 > 코드 셀 출력 제외 — 공유하면 코드·출력·댓글이 함께 전달됩니다. 토큰이 출력에 남아 있는 경우가 있습니다.

TIP 52. requirements는 pip freeze 전체가 아니라 diff로 만든다 📄 pip freeze > v0.txt (설치 전) → 설치 → pip freeze > v1.txt → 차이만 추출. Colab 기본 이미지 패키지 때문에 전체를 그대로 쓰면 의미가 없습니다. (방법)

TIP 53. 공유 전에 빈 런타임에서 전체 실행을 한 번 한다 📄 런타임 > 세션 다시 시작 및 모두 실행이 이 글의 체크리스트 1번입니다. 남은 세션은 재현성 검사를 통과한 것처럼 보이게 만듭니다.

TIP 54. pip freeze 결과를 노트북 옆에 저장한다 🧑‍🤝‍🧑 !pip freeze > /content/requirements.txt — 나중에 -r로 복원할 수 있습니다. 무작정 -U를 남발하면 의존 충돌이 납니다.

TIP 55. transformers v5는 hub 1.0 이상을 요구한다 📄 예전 노트북을 베끼면 import 단계에서 깨집니다. 첫 셀에 !pip install -q -U "transformers>=5" "huggingface_hub>=1.0.0"를 명시하세요. (릴리스)

TIP 56. 첫 셀에 환경 자기점검을 넣는다 ✅ 이 글의 Step 2 셀이 그 예입니다. GPU 이름·버전·메모리를 한 셀에 몰아 출력하면 재실행 실패를 면접관이 즉시 알 수 있습니다.

그룹 4. 모델 학습·추론 (TIP 57~80)​

TIP 57. T4는 sm_75다 — bf16과 FlashAttention-2가 없다 📄 T4(compute capability 7.5)는 Ampere(sm_80) 미만입니다. bf16=True나 FA2 설정을 넣으면 깨집니다. fp16 + PyTorch 내장 SDPA가 안전합니다. (FA2 README)

TIP 58. T4에서 pip install flash-attn을 시도하지 않는다 ⚠️ 커널 런칭에 실패합니다. SDPA가 이미 효율 백엔드를 자동 선택합니다.

TIP 59. xformers도 T4에서 자주 실패한다 📄 flshattF 연산자가 compute capability 7.5 초과를 요구합니다. (이슈)

TIP 60. SDPA 백엔드를 명시적으로 고정한다 📄 from torch.nn.attention import SDPBackend, sdpa_kernel — 나중에 GPU가 바뀌어도 결과가 흔들리지 않습니다. (PyTorch)

TIP 61. QLoRA는 NF4 + double quant + compute fp16 📄 bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.float16 — T4 16 GB에서 7B급을 학습하는 표준 조합입니다. (HF 블로그)

TIP 62. transformers v5에서 load_in_4bit 인자는 사라졌다 📄 quantization_config=BitsAndBytesConfig(...) 단일 경로로 통합됐습니다. 2023~2024년 노트북을 그대로 베끼면 TypeError가 납니다. (v5 마이그레이션)

TIP 63. prepare_model_for_kbit_training을 빼먹지 않는다 📄 4비트 모델은 layer norm·캐시 처리가 달라집니다. 이 셀을 빼면 "loss가 안 내려간다"는 가장 흔한 원인이 됩니다. (PEFT)

TIP 64. LoRA target_modules는 attention + MLP 7개 📄 ["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"] — q/k/v/o만 잡으면 품질이 떨어집니다. (Unsloth Colab 가이드)

TIP 65. LoRA는 r=16, alpha=16, dropout=0에서 시작한다 📄 소규모 데이터셋에서 dropout은 과적합만 키웁니다. (Unsloth)

TIP 66. gradient checkpointing은 use_cache=False와 항상 같이 쓴다 📄 v5부터 Trainer가 use_cache=False를 기본 적용합니다. 반대로 cache만 켜면 VRAM이 다시 터집니다. (마이그레이션)

TIP 67. 8비트 옵티마이저로 메모리를 줄인다 📄 optim="adamw_8bit" — full fine-tuning이나 큰 rank에서 optimizer state가 지배적일 때 실질적 레버입니다. (bitsandbytes)

TIP 68. optimizer를 명시적으로 고정한다 📄 torch 2.8+에서는 기본 optimizer가 adamw_torch_fused로 바뀝니다. 재현을 설명하려면 직접 박아두세요. (training_args)

TIP 69. OOM 진단은 memory_allocated 세 값으로 한다 📄 torch.cuda.memory_allocated(), memory_reserved(), max_memory_allocated()를 비교하면 실제 누수가 보입니다. (PyTorch)

TIP 70. empty_cache()는 사용 중인 메모리를 못 푼다 📄 캐시된 미사용 블록만 반환합니다. OOM 때는 이걸 믿지 말고 위 세 값을 보세요.

TIP 71. OOM 해결 순서: max_length → 실제 배치 → 누적 📄 per_device_train_batch_size=1, gradient_accumulation_steps=16, max_seq_length=512 — 유효 배치는 유지하면서 VRAM만 줄입니다. (HF 블로그)

TIP 72. bitsandbytes 재설치를 첫 셀에 넣는다 🧑‍🤝‍🧑 이미지가 바뀌면 "최신 bitsandbytes 필요" 오류가 납니다. !pip install -q -U bitsandbytes accelerate를 노트북 첫 셀에 두면 재실행이 됩니다. (Reddit)

TIP 73. 8비트 양자화는 추론에서 오히려 느릴 수 있다 🧑‍🤝‍🧑 T4 Whisper 벤치마크에서 int8이 FP16보다 느리면서 오류율은 같았습니다. 양자화는 메모리를 살릴 때만 씁니다.

TIP 74. 체크포인트는 Drive에 두고 재개한다 📄 save_strategy="steps", save_steps=200, save_total_limit=2 후 trainer.train(resume_from_checkpoint=True). 로컬 /content는 세션과 함께 사라집니다.

TIP 75. Whisper는 faster-whisper + int8이 유리하다 📄 WhisperModel("large-v3", device="cuda", compute_type="int8") + batch_size=8 — 오픈AI 원본 대비 빠르고 메모리가 적습니다. (faster-whisper)

TIP 76. PEFT로 Whisper를 학습할 때 remove_unused_columns=False 📄 PeftModel의 forward가 원본 시그니처를 상속하지 않아 Trainer가 컬럼을 지우면 실패합니다.

TIP 77. Stable Diffusion은 fp16 + attention slicing + vae slicing 📄 T4에서 fp16만으로 이미 큰 속도 이득이 있고, vae slicing은 배치 생성 시 VRAM을 눌러줍니다. (diffusers)

TIP 78. 임베딩은 batch_size를 키운다 🧑‍🤝‍🧑 sentence-transformers 기본값 32는 Colab에서 아깝습니다. 128~256을 시도하고, normalize_embeddings=True로 코사인 유사도를 내적과 일치시키세요. (이슈)

TIP 79. Ragas는 현재 ragas.metrics.collections + ascore를 쓴다 📄 옛 ragas.evaluate() 튜토리얼은 버전 불일치로 깨집니다. (문서)

TIP 80. T4에서 vLLM은 V1 엔진이 아니라 V0로 폴백한다 📄 로그에 "Compute Capability < 8.0 is not supported by the V1 Engine"이 뜹니다. attention 백엔드를 명시하는 편이 안전합니다. (이슈)

그룹 5. 공유·배포·노트북 완성도 (TIP 81~100)​

TIP 81. 셀 하나만 전체화면 링크로 공유한다 📄 2026년 6월 출시된 전체 화면 출력 공유 기능입니다. 코드 없이 출력만 따로 보여주는 URL이 생깁니다. (발표)

TIP 82. Visualization Mode로 대시보드를 자연어로 만든다 📄 "이 데이터로 지역별 차트를 만들어줘"처럼 요청하면 코드가 생성·실행되고 인터랙티브 대시보드가 나옵니다. (발표)

TIP 83. Gradio 출력의 "Cloud Run에 배포" 버튼을 쓴다 ✅ 이 글 Step 5에서 실제로 확인했습니다. 세션이 끝나도 살아 있는 URL을 얻는 가장 짧은 길입니다.

TIP 84. 다만 Cloud Run은 빌링 활성화가 전제다 📄 GCP 프로젝트 선택 → 결제 연결 → Cloud Run 권한이 필요합니다. 방치하면 요금이 쌓일 수 있습니다. (Cloud Run)

TIP 85. Gradio 공유 링크는 최대 1주, best-effort다 ✅ 실행 화면에 "up to 1 week (best effort)"가 그대로 찍혔습니다. 구버전 문서의 72시간은 낡았습니다. (Gradio)

TIP 86. Colab에서 share=False는 사실상 불가능하다 📄 Colab에서는 기본값이 자동으로 share 쪽으로 바뀝니다. (문서)

TIP 87. 공유 서버 상태는 미리 확인한다 📄 status.gradio.app — 내 코드가 죽은 것인지 공유 서버 문제인지 구분할 수 있습니다.

TIP 88. 영구 링크가 필요하면 gradio deploy를 쓴다 📄 앱 폴더에서 실행하면 Hugging Face Spaces로 푸시되어 고정 URL이 생깁니다.

TIP 89. Streamlit은 GitHub → Community Cloud로 배포한다 📄 share.streamlit.io에서 공개 저장소를 연결하면 상시 접근 가능한 URL을 얻습니다. 무방문 시 절전되지만 Colab 세션과 무관하게 살아 있습니다. (문서)

TIP 90. ngrok 대안은 Cloudflare Quick Tunnel 📄 cloudflared tunnel --url http://localhost:8501 한 줄이고 계정이 필요 없습니다. (문서)

TIP 91. localtunnel은 Colab에서 쓰지 않는다 ⚠️ 504 타임아웃이 반복되고 IP를 직접 넣어야 하며 IP가 바뀌면 다시 넣어야 합니다. (이슈)

TIP 92. ngrok 무료 티어는 계정 단위 한도가 있다 📄 동시 에이전트 3개, 엔드포인트 3개 한도라 데모를 여러 개 동시에 띄우면 바로 걸립니다. (요금)

TIP 93. colab-ssh 계열은 정책 위반 위험이 있다 ⚠️ 저장소 README가 Colab SSH 사용 제한을 경고합니다. 포트폴리오 노트북에는 넣지 마세요. (GitHub)

TIP 94. 커널 포트를 iframe으로 띄운다 📄 output.serve_kernel_port_as_iframe(8501) — 터널 없이 "앱이 실제로 뜨는 모습"을 노트북 안에 남깁니다. (스니펫)

TIP 95. serve_kernel_port_as_window는 폐기됐고, iframe이 정답이다 ⚠️ 브라우저 보안 정책으로 깨졌습니다. 새 탭 튜토리얼이 검색에 많이 남아 있습니다. (소스)

TIP 96. 큰 출력의 이중 스크롤바를 없앤다 📄 output.no_vertical_scroll() — 차트·테이블 캡처가 훨씬 깔끔해집니다.

TIP 97. Colab 배지와 GitHub Actions로 링크를 자동 관리한다 ✅ 배지 이미지 주소는 200으로 응답했고, README 마크다운은 이 글 Step 4에 그대로 들어 있습니다. 파일명이 바뀌면 링크가 깨지므로 actions/colab-badge-action을 씁니다. (마켓플레이스)

TIP 98. Colab 노트북을 웹사이트 iframe에 넣는 건 여전히 안 된다 ⚠️ X-Frame-Options: deny 이슈가 2020년 등록된 뒤 아직 열려 있습니다. 대신 정적 HTML이나 이미지 링크를 씁니다. (이슈)

TIP 99. nbconvert로 HTML·슬라이드를 내보낸다 📄 jupyter nbconvert --to slides result.ipynb — 실행 결과가 담긴 정적 파일이라 링크가 영구적이고, 환경 없이도 결과물이 보입니다. (nbconvert)

TIP 100. VS Code·PyCharm 확장으로 편집과 실행을 분리한다 📄 VS Code 확장에는 RAM·디스크 모니터링과 컴퓨트 소비량 표시가 있고, Colab Home·터미널·Custom Instructions 같은 새 기능도 계속 추가되고 있습니다. 로컬에서 코드를 다듬고 GPU는 Colab에 맡기면 됩니다. (릴리스 노트)

이 100개를 어떻게 골랐나​

팁마다 출처가 다르기 때문에, 이 중 무엇을 글의 사실로 가정할지는 표시를 보고 판단하면 됩니다. 제가 직접 실행해 확인한 것은 ✅ 항목뿐이고, 📄 항목은 문서에서 확인했고, 🧑‍🤝‍🧑 항목은 다른 사용자 경험이라 환경에 따라 다릅니다. 특히 ⚠️ 항목은 검색 결과 상위에 아직 남아 있는 옛 정보라, 그대로 따라 하면 노트북이 안 돌아갑니다.

한 가지 더 말씀드리면, 이 목록의 값은 "그대로 따라 하면 되는가"입니다. 포트폴리오에서 중요한 건 팁의 개수가 아니라, 몇 개를 골라 왜 골랐는지 설명할 수 있느냐입니다. T4의 compute capability가 7.5라서 FlashAttention-2를 못 쓴다는 걸 알고 fp16으로 바꿨다면, 그 한 줄이 100개 팁보다 값어치가 큽니다.

마무리​

Colab의 정체는 코드를 쓰게 해 주는 도구가 아니라, 내 프로젝트를 링크 하나로 검증 가능하게 만들어 주는 도구입니다. 그래서 포트폴리오 전략이 달라집니다. 코드의 양이 아니라, 면접관이 30초 안에 열어 보고 "아, 이 사람이 이걸 직접 돌려 봤구나"라고 하느냐가 중요해집니다.

Step 4까지 하면 내 노트북이 면접 링크가 되고, Step 5까지 하면 결과물이 데모가 됩니다. 둘 다 오늘 안에 할 수 있는 일입니다.

참고​

  • 이 글의 화면·출력·수치는 2026년 10월 3일 Colab Pro 계정에서 직접 실행해 확인한 값입니다. Colab은 이미지를 자주 바꿔서, 화면 항목이 조금 다를 수 있습니다.
  • 참고한 Colab 자체 출시 노트: 2026년 6월 18일 시각화 모드·전체 화면 출력 공유, 2026년 3월 25일 G4 GPU(RTX Pro 6000 Blackwell)·Colab MCP 서버, 2026년 5월 6일 Custom Instructions·Learn Mode. 즉 이 글의 Step은 앞으로 더 늘어납니다.
  • 예시로 쓴 데이터셋은 공개 저장소 inyounglee-datapopcorn/popcar-rentals-gx-data에 있습니다.