취준생 포트폴리오, Colab 200% 사용하기
면접관이 포트폴리오 GitHub 링크를 열면 하는 일은 하나입니다. 30초 안에 코드가 도는지 확인하고 창을 닫는 것입니다. 그래서 "코드를 잘 썼는가"보다 "면접관이 30초 안에 재현할 수 있는가"를 먼저 설계해야 합니다. Colab은 그 재현 링크를 무료로 만들어 주는 도구입니다. 이 글은 Step 1~7로 그 링크를 만드는 법과, 마지막에 커뮤니티에서 모은 꿀팁 100개를 정리했습니다.
이 글은 이런 분께 필요합니다
- 코딩을 배우는 중이라 노트북으로 만든 분석 결과를 포트폴리오에 올리고 싶은 분
- GitHub에 코드를 올렸지만 면접관이 실행하지 않는 이유가 궁금한 분
- GPU를 사지 않고도 모델을 한 번 돌려 보고 싶은 분
준비물은 Google 계정 하나와 브라우저면 됩니다. 이 글의 모든 화면과 숫자는 Colab Pro 플랜 계정으로 직접 실행한 결과이며, 2026년 10월 3일 기준입니다. 무료 플랜에서도 같은 절차를 밟되, GPU가 항상 붙지는 않습니다(뒤에서 따로 설명합니다).
먼저 정리: Colab이 포트폴리오에서 하는 일
Colab은 그냥 코드를 실행하는 도구입니다. 포트폴리오에서 쓰는 이유는 딱 네 가지입니다.
- 설치 없이 실행된다. 파이썬 패키지 설치와 런타임 준비가 셀 몇 줄로 끝납니다. 면접관이 내 컴퓨터에서 같은 환경을 만들 필요가 없습니다.
- GitHub 주소를 Colab 주소로 바꿀 수 있다. 공개 저장소의
.ipynb는 Colab에서 바로 열리고, 그 자리에서 실행됩니다. - 실행 환경이 증거로 남는다. GPU 모델 이름, 메모리, 디스크가 노트북 출력에 그대로 찍힙니다. "어떤 환경에서 돌렸나요"라는 질문이 사라집니다.
- 결과물을 웹 링크로 공개할 수 있다. Gradio로 띄운 데모는 면접관이 클릭해서 써 볼 수 있는 링크가 됩니다.
이제 이 네 가지 각각을 Step으로 나눠 실습합니다.
Step 1. 노트북 구조를 그렇게 짜야 면접관이 멈추지 않습니다
면접관은 코드의 줄 수를 세지 않습니다. 질문이 나열된 순서로 읽습니다. 그래서 셀 하나에 질문 하나를 넣습니다.
| 셀 | 제목(예시) | 하는 일 |
|---|---|---|
| 1 | 데이터가 뭔지 | 원본 주소와 컬럼 소개 |
| 2 | 먼저 확인할 것 | 결측치·중복 등 데이터 상태 점검 |
| 3 | 질문 | 분석하려는 문제를 한 문장으로 |
| 4 | 방법 | 고른 방법과 그 이유 |
| 5 | 결과 | 숫자와 그래프 |
| 6 | 한계 | 어디까지 신뢰할 수 있는지 |
셀 위에는 실행 순서 [1] [2]…와 실행 시간이 붙습니다. Colab은 이 정보를 출력에 그대로 남깁니다. 지금 실행 중인 노트북에서도 각 셀 왼쪽에 [2] 1초처럼 표시됩니다. 실행 순서와 소요 시간이 보이는 노트북은, 같은 코드를 얼핏 봤을 때보다 훨씬 신뢰가 갑니다.

Step 2. 런타임 유형을 바꾸고, 어떤 기계에서 돌렸는지 노트북에 남기기
런타임 > 런타임 유형 변경을 누르면 하드웨어 가속기를 고를 수 있습니다. 화면에 보이는 항목은 다음과 같습니다.

- 선택 가능했던 항목(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로 복사 버튼이 붙습니다. 면접관은 이 버튼을 눌러 자기 드라이브로 가져가 자유롭게 다시 실행할 수 있습니다.

4-3. README에 실행 버튼 붙이기
README 맨 위에 Colab 배지를 넣으면 노트북 목록에서 바로 실행 화면으로 넘어갑니다.
[](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).

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

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