Step 41. 파이썬 환경 세팅과 첫 코드 — 작업대를 세우는 날
Level 1 — 프로그래밍과 컴퓨터 내부 | 난이도 ★★☆☆☆ | 예상 소요 시간 3시간
전제: Level 0을 마쳤다. 터미널(파워쉘) 사용과 텍스트 에디터 사용법을 안다.
- 준비물: 인터넷 연결, 관리자 권한(설치 시에만 필요).
- 주의: 오늘 실습은 100% 안전합니다. 파이썬과 VSCode를 설치하고, 내 컴퓨터 안에서 파일을 만들어 실행하는 일이 전부입니다.
Level 0에서는 명령어 한 줄에 컴퓨터가 한 번 대답하는 대화를 배웠습니다. 그 방식의 한계는 명확합니다. "천 개의 파일 이름을 바꿔 줘" 같은 일을 명령어로 하려면 손가락이 남아나지 않습니다. 그래서 컴퓨터에게 일과표를 미리 적어 주는 언어가 필요합니다. 그 언어가 프로그래밍 언어이고, 보안 분야의 사실상 표준어가 파이썬(Python)입니다. 해킹 도구 상당수가 파이썬으로 쓰여 있고, CTF 문제 풀이도 파이썬 스크립트로 시작해서 파이썬 스크립트로 끝나는 경우가 많습니다. 오늘은 그 여정의 첫걸음, 작업대 세팅의 날입니다. Level 1부터는 코드가 주인공이고, 그 코드를 놓을 작업대를 오늘 만듭니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 파이썬을 설치하고
python --version으로 PATH 등록까지 확인한다 - 대화형 모드(
>>>)에 들어가 한 줄씩 시험하고exit()로 나온다 - VSCode에 Python 확장을 설치하고
.py파일을 만들어 실행한다 - 변수,
input(),print(), f-string으로 입출력이 있는 프로그램을 만든다 input()의 결과가 항상 문자열임을 설명하고,int()변환의 필요성을 안다- 오류 메시지(Traceback)를 "어디서 / 무엇이" 두 칸으로 나눠 읽는다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파이썬 3.12 이상(python.org에서 설치), 파워쉘, VSCode + Microsoft Python 확장 |
| 오늘의 명령어·문법 | python --version(설치 확인), python(대화형 모드), print(), input(), 변수 대입(=), f-string, int(), # 주석 |
| 필요한 개념 | 인터프리터 언어, PATH, IDE, 변수, 문자열과 숫자의 구분, 오류 메시지 읽기 |
2-1. 인터프리터 언어 — 통역사를 둔 언어
컴퓨터는 사실 0과 1의 기계어밖에 모릅니다. 사람이 쓴 코드를 기계어로 옮기는 방식에는 두 가지가 있습니다.
- 컴파일(compile) 방식: 코드 전체를 한꺼번에 번역해 실행 파일을 만든 뒤 실행합니다. 책 전체를 번역해 출판하는 방식이고, C 언어가 대표적입니다.
- 인터프리터(interpreter) 방식: 한 줄 읽고, 한 줄 통역하고, 바로 실행합니다. 동시통역사가 곁에 앉은 방식이고, 파이썬이 여기 속합니다.
파이썬이 입문에 좋은 이유가 여기 있습니다. 번역 출판 과정 없이 쓰자마자 결과를 볼 수 있으니 "쓰고 → 확인하고 → 고치고"의 회전이 빠릅니다. 공부는 회전이 빠를수록 잘됩니다.
2-2. PATH와 IDE — 전화번호부와 작업대
설치 과정에서 만날 PATH(패스)는 "터미널이 명령어를 찾아가는 폴더 목록"입니다. 파이썬을 PATH에 등록해 두면 어느 폴더에서든 python이라고 치기만 해도 실행됩니다. 전화번호부에 번호를 등록해 두면 이름만으로 전화가 걸리는 것과 같습니다.
코드는 메모장에도 쓸 수 있지만, 개발자는 IDE(통합 개발 환경)라는 작업대를 씁니다. 코드에 색을 입혀 주고, 틀린 곳에 밑줄을 그어 주고, 실행 버튼도 달려 있습니다. 이 책에서는 무료이면서 가장 널리 쓰이는 VSCode(Visual Studio Code)를 씁니다.
2-3. 변수와 입출력 — 이름표와 대화창
오늘 코드의 재료는 세 가지입니다.
- 변수(variable): 값에 붙이는 이름표.
name = "철수"는 값"철수"에name이라는 이름표를 붙인 것입니다. input(): 사용자에게 질문을 보여 주고 대답을 받아 오는 함수(미리 만들어진 기능 덩어리).print(): 화면에 값을 출력하는 함수.
이 셋만 있으면 프로그램이 "묻고, 기억하고, 대답하는" 대화를 시작합니다. 오늘의 최종 작품은 이름과 나이를 물어보고 인사를 돌려주는 프로그램입니다.
3. 따라 하기
3-1. 파이썬 설치 — 가장 중요한 체크박스 하나
브라우저에서 python.org에 접속해 Downloads 메뉴의 최신 버전 설치 파일을 받습니다. 설치 프로그램 첫 화면 맨 아래에 작은 체크박스가 하나 있습니다.
☑ Add python.exe to PATH
이것을 반드시 체크하고 Install Now를 누릅니다. 이 체크가 "터미널 어디서든 python이라 부르면 달려오게 하는" PATH 등록입니다. 오늘 벽의 대부분이 이 한 칸에서 옵니다.
설치가 끝나면 확인합니다. 파워쉘을 새로 열고(설치 전에 열어 둔 창은 PATH를 모릅니다):
python --version
Python 3.12.14
(2026-09-09 실측. 실측 환경은 Python 3.12.14였고, 여러분이 지금 설치하면 더 높은 버전(예: 3.13.x)일 수 있습니다. 이 책 Level 1의 코드는 3.8 이상이면 버전에 관계없이 똑같이 동작하니, 숫자가 달라도 정상입니다.)
버전 숫자가 나오면 성공입니다. "인식할 수 없다"는 오류가 나오면 체크박스를 빠뜨린 것이니 벽 1에서 해결합니다.
3-2. 대화형 모드 — 파이썬과 즉석 대화
파이썬에는 파일 없이 한 줄씩 시험해 보는 대화형 모드(인터랙티브 쉘)가 있습니다. 파워쉘에서:
python
Python 3.12.14 (main, Sep 1 2026, 14:17:39) [MSC v.1944 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
(2026-09-09 실측. 버전과 날짜는 여러분 환경에 따라 다릅니다.)
>>> 기호가 "말씀하세요"라는 표시입니다. 직접 쳐 봅니다.
>>> 1 + 2
3
>>> "안녕" + "하세요"
'안녕하세요'
>>> "10" + "5"
'105'
>>> exit()
(2026-09-09 실측.)
읽는 법: 계산도 하고, 글자도 붙입니다. exit()는 나가는 문입니다. 세 번째 줄이 중요합니다. 따옴표로 감싼 "10"은 숫자가 아니라 글자이므로, 더하기가 이어 붙이기가 되어 '105'가 나옵니다. 이 사실이 3-5의 함정에서 다시 나옵니다. 앞으로 "이게 될까?" 싶은 것은 전부 이 모드에서 먼저 시험하면 됩니다.
3-3. VSCode 설치와 첫 파일
code.visualstudio.com에서 설치 파일을 받아 설치합니다. 실행한 뒤 왼쪽의 확장 아이콘(Ctrl+Shift+X)에서 Python을 검색해 Microsoft의 Python 확장을 설치합니다. 이 확장이 색칠과 실행 버튼을 담당합니다.
작업 폴더를 만듭니다. 바탕화면에 py_practice 폴더를 만들고, VSCode의 파일 메뉴 → "Open Folder"로 그 폴더를 엽니다. 새 파일을 만들어 이름을 hello.py로 합니다. .py가 파이썬 파일의 꼬리표입니다.
print("안녕, 파이썬!")
파일을 저장(Ctrl+S)하고, 오른쪽 위의 ▶ 버튼을 누릅니다. 아래에 터미널이 열리며 나옵니다.
안녕, 파이썬!
(2026-09-09 실측. 같은 코드를 python 파일명.py로 터미널에서 실행해도 같은 결과입니다.)
읽는 법: 파일에 적은 한 줄이 실행되었습니다. VSCode 아래에 열린 터미널은 Level 0에서 쓰던 그 터미널과 같은 것입니다. VSCode는 터미널을 품은 작업대일 뿐입니다.
3-4. 변수와 입력 — 대화하는 프로그램
이제 오늘의 작품을 만듭니다. hello.py의 내용을 지우고 이렇게 씁니다.
name = input("이름이 뭐니? ")
age = input("나이는? ")
print(f"반가워, {name}! 너는 {age}살이구나.")
실행하고 질문에 대답해 봅니다.
이름이 뭐니? 민수
나이는? 17
반가워, 민수! 너는 17살이구나.
(2026-09-09 실측. 입력값 민수, 17로 실행한 결과입니다.)
읽는 법: 한 줄씩 뜯어봅니다.
input("이름이 뭐니? ")— 질문을 보여 주고 대답을 기다립니다. 대답이name이라는 이름표가 붙은 변수에 들어갑니다.- 나이도 마찬가지로
age에 들어갑니다. print(f"...{name}...")— 따옴표 앞의f는 "이 안의{중괄호}는 변수 값으로 바꿔치기하라"는 표시입니다. 이것을 f-문자열(f-string)이라고 부릅니다.
입력 → 저장 → 가공 → 출력. 이 네 단계는 거의 모든 프로그램의 뼈대입니다. 거대한 스캔 도구도 결국 이 뼈대 위에 살을 붙인 것입니다.
3-5. 숫자 함정 — input은 언제나 글자
중요한 함정을 하나 경험합니다. hello.py를 이렇게 바꿉니다.
age = input("나이는? ")
next_year = age + 1
print(f"내년에는 {next_year}살이네!")
실행하고 17을 입력하면 오류가 납니다 (2026-09-09 실측):
Traceback (most recent call last):
File "...\s41_typeerror.py", line 2, in <module>
next_year = age + 1
~~~~^~~
TypeError: can only concatenate str (not "int") to str
(파일 경로는 여러분의 것으로 나옵니다. 마지막 줄의 진단이 중요합니다.)
읽는 법: "글자(str)에는 숫자(int)를 못 더한다"는 뜻입니다. input()은 사용자가 17을 쳐도 그것을 숫자 17이 아니라 글자 "17"로 받습니다. 3-2에서 확인한 "10" + "5" = '105'를 기억하세요. 글자끼리의 더하기는 이어 붙이기입니다.
해결: 글자를 숫자로 변환하는 int()로 감싸 줍니다.
age = int(input("나이는? "))
next_year = age + 1
print(f"내년에는 {next_year}살이네!")
나이는? 17
내년에는 18살이네!
(2026-09-09 실측.)
이 함정은 파이썬 입문자의 통과의례입니다. 나중에 웹에서 받은 값, 파일에서 읽은 값을 계산할 때도 똑같이 따라다니므로 지금 확실히 익혀 두세요.
3-6. 오류 메시지 읽는 법 — 두 칸으로 나눠 읽기
프로그래밍 실력의 절반은 오류 메시지 읽기입니다. 일부러 오류를 내 봅니다. hello.py에:
print("안녕"
실행하면 (2026-09-09 실측):
File "...\s41_syntax.py", line 1
print("안녕"
^
SyntaxError: '(' was never closed
읽는 법: 위에서 아래로 두 칸만 보면 됩니다.
- 어디서:
File ..., line 1— 파일 이름과 줄 번호가 범행 현장입니다. 그 아래 문제의 줄과^표시가 파이썬이 발견한 지점입니다. - 무엇이: 마지막 줄
SyntaxError: '(' was never closed— "괄호가 안 닫혔다"는 진단입니다.
이 두 칸만 읽어도 답을 찾는 속도가 달라집니다. 이번에는 오타를 내 봅니다.
prnit("안녕")
Traceback (most recent call last):
File "...\s41_nameerror.py", line 1, in <module>
prnit("안녕")
^^^^^
NameError: name 'prnit' is not defined. Did you mean: 'print'?
(2026-09-09 실측.)
읽는 법: "prnit이라는 이름은 모른다"는 뜻입니다. 끝의 "Did you mean: ‘print’?"는 최근 파이썬(3.10 이후)이 오타의 정답까지 추천해 주는 기능입니다. 낮은 버전에서는 이 문구 없이 끝날 수 있습니다. print를 prnit로 쓰는 실수는 전 세계 입문자가 한 번씩은 저지릅니다.
3-7. 주석 — 미래의 나에게 남기는 쪽지
코드에는 컴퓨터가 무시하는 줄을 넣을 수 있습니다. #으로 시작하는 주석(comment)입니다.
# 이 프로그램은 이름을 묻고 인사한다
# 작성일: 오늘, 작성자: 나
name = input("이름이 뭐니? ") # input은 항상 글자를 돌려준다
print(f"반가워, {name}!")
읽는 법: # 뒤의 내용은 실행에 아무 영향이 없습니다. 사람만 읽는 쪽지이며, 줄 끝에도 붙일 수 있습니다. 오늘의 여러분은 3주 후의 여러분에게 친절해야 합니다. "이게 왜 이렇지?" 하는 순간을 대비해 이유를 적어 두는 습관은 코드가 커질수록 빛을 발합니다.
4. 미션과 연습문제
미션 — 미래의 나에게 보내는 편지
future.py 파일을 새로 만들고 다음 요구사항을 스스로 조립하세요.
- 이름을 입력받는다.
- 현재 나이를 입력받는다 (숫자로 변환할 것).
10년 뒤의 ○○님은 □□살이시군요. 지금의 매일이 그 열 살을 만듭니다.를 출력한다 (○○은 이름, □□은 10년 뒤 나이).- 마지막 줄에
— Level 1 첫날, 나로부터를 출력한다.
완성 후 스스로 채점합니다. 요구사항 네 개가 전부 나오는지, 나이 계산이 글자 이어 붙이기로 되지 않는지 확인하세요.
연습문제
문제 1. 설치 때 "Add python.exe to PATH"를 체크하지 않으면 어떤 일이 생기며, 그 이유는 무엇인가요?
문제 2. input()으로 20을 입력받아 변수 age에 넣었습니다. 이 age에 1을 더하려면 왜 오류가 나며, 어떻게 고쳐야 하나요?
문제 3. 아래 오류 메시지를 보고 "어디서"와 "무엇이"를 각각 답해 보세요.
Traceback (most recent call last):
File "score.py", line 3, in <module>
print(toltal)
NameError: name 'toltal' is not defined. Did you mean: 'total'?
문제 4. 대화형 모드에서 "7" + "3"의 결과와, int("7") + int("3")의 결과가 각각 어떻게 다른지, 그 이유와 함께 답해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
# 미래의 나에게 보내는 편지
name = input("이름: ")
age = int(input("현재 나이: ")) # input 결과는 글자이므로 int로 변환
future = age + 10
print(f"10년 뒤의 {name}님은 {future}살이시군요. 지금의 매일이 그 열 살을 만듭니다.")
print("— Level 1 첫날, 나로부터")
실행 예시:
이름: 민수
현재 나이: 17
10년 뒤의 민수님은 27살이시군요. 지금의 매일이 그 열 살을 만듭니다.
— Level 1 첫날, 나로부터
검증하는 법: ① 네 요구사항이 출력에 전부 있는지 확인합니다. ② 나이에 10이 더해진 숫자인지 확인합니다 — 1710처럼 이어 붙으면 int() 변환을 빠뜨린 것입니다. ③ 오류가 나면 마지막 줄(TypeError, SyntaxError 등)부터 읽고 3-6의 두 칸 읽기를 적용합니다.
연습문제 해답
문제 1 해답. 터미널이 python이라는 명령을 찾지 못해 "인식할 수 없다"는 오류가 납니다. PATH는 터미널이 명령어를 찾아가는 폴더 목록인데, 파이썬 설치 폴더가 그 목록에 없기 때문입니다. 설치 파일을 다시 실행해 Modify로 PATH 옵션을 켜거나, 재설치하면 해결됩니다.
문제 2 해답. input()의 반환값은 항상 문자열(str)이므로, age + 1은 "글자에 숫자 더하기"가 되어 TypeError: can only concatenate str (not "int") to str가 납니다 (2026-09-09 실측 메시지). age = int(input(...))처럼 int()로 감싸 숫자로 변환하면 됩니다.
문제 3 해답. "어디서": 파일 score.py의 3번째 줄, print(toltal). "무엇이": NameError — toltal이라는 이름은 정의된 적이 없다는 뜻으로, total의 오타입니다. 파이썬의 추천("Did you mean: ‘total’?")이 그대로 정답 힌트입니다.
문제 4 해답. "7" + "3"은 문자열 '73'이 되고, int("7") + int("3")은 숫자 10이 됩니다. 따옴표가 있으면 파이썬은 글자로 취급해 더하기가 "이어 붙이기"가 되고, int()로 숫자로 바꾼 뒤에는 산수의 더하기가 되기 때문입니다 (2026-09-09 대화형 모드 실측으로 같은 원리를 확인했습니다).
완료 기준 체크리스트
- [ ]
python --version으로 설치와 PATH 등록을 확인했다 - [ ] 대화형 모드(
>>>)에 들어가"10" + "5"를 직접 확인하고exit()로 나왔다 - [ ] VSCode에 Python 확장을 설치하고
.py파일을 ▶ 버튼으로 실행했다 - [ ] 변수,
input(),print(), f-string으로 대화형 프로그램을 만들었다 - [ ]
input()결과가 문자열이라는 것과int()변환의 필요성을 설명할 수 있다 - [ ] TypeError·SyntaxError·NameError 세 오류를 실제로 만나 보고 마지막 줄을 읽었다
- [ ] 미션(future.py)을 완성하고 네 요구사항을 검증했다
6. 흔한 실수와 해결
벽 1. python을 인식할 수 없다고 나온다
증상: 터미널에 python을 쳐도 "’python’ 용어가 … 인식할 수 없습니다" 류의 오류가 납니다 (파워쉘 버전과 언어 설정에 따라 문구가 다릅니다).
원인: 설치 시 "Add python.exe to PATH"를 체크하지 않았거나, 설치 후 터미널을 새로 열지 않은 것입니다. PATH는 터미널을 여는 순간 복사되므로, 설치 전에 열어 둔 터미널은 새 등록을 모릅니다.
해결: 터미널을 완전히 닫고 새로 열어 재시도합니다. 그래도 안 되면 py --version을 시도하고(윈도우의 대체 호출법), 그래도 안 되면 설치 파일을 다시 실행해 "Modify"로 PATH 옵션을 체크해 재설치합니다.
벽 2. VSCode에서 ▶를 눌렀는데 엉뚱하게 실행된다
증상: 출력이 안 보이거나, 다른 파이썬으로 실행됩니다.
원인: Python 확장이 설치되지 않았거나, VSCode가 어느 파이썬을 쓸지 몰라 하는 상태입니다.
해결: 확장(Ctrl+Shift+X)에서 Microsoft의 Python 확장 설치 여부를 확인하고, 오른쪽 아래 상태 표시줄의 파이썬 버전을 클릭해 방금 설치한 버전을 선택합니다.
벽 3. 괄호나 따옴표를 빠뜨려 SyntaxError가 난다
증상: 3-6에서 본 SyntaxError: '(' was never closed 류의 오류.
원인: 따옴표와 괄호는 짝꿍입니다. 하나가 열리면 반드시 닫혀야 합니다.
해결: VSCode가 밑줄을 그어 주는 위치부터 위로 거슬러 올라가며 짝을 찾습니다. 오류가 가리키는 줄이 아니라 바로 윗줄이 범인인 경우도 많습니다. 열린 괄호는 다음 줄에서 발견되기 때문입니다.
벽 4. 한글 출력이 깨진다
증상: 안녕이 안녕처럼 출력됩니다.
원인: 글자를 숫자로 바꾸는 코드표(인코딩)가 어긋난 것입니다. 윈도우 터미널의 기본 코드표와 파이썬의 코드표가 다를 때 생깁니다.
해결: 파워쉘에서 chcp 65001을 실행해 코드표를 UTF-8로 맞춘 뒤 다시 실행해 봅니다. VSCode 내장 터미널을 쓰면 대부분 처음부터 정상입니다. 인코딩은 Step 45에서 더 자세히 다룹니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 인터프리터 언어 | 한 줄씩 통역하며 실행하는 언어 — 파이썬이 대표 |
| PATH | 터미널이 명령어를 찾아가는 폴더 목록 |
| IDE | 색칠·실행·오류 표시를 해 주는 개발 작업대 (VSCode) |
| 변수 | 값에 붙이는 이름표 (name = "민수") |
| f-string | {중괄호} 안을 변수 값으로 바꿔치기하는 문자열 |
| Traceback | 파이썬의 오류 진단서 — "어디서 / 무엇이" 두 칸으로 읽는다 |
오늘의 문법·명령어
| 문법·명령 | 하는 일 |
|---|---|
python --version |
설치 확인 + PATH 검증 |
python / exit() |
대화형 모드 진입 / 탈출 |
print(값) |
화면에 출력 |
input("질문") |
입력받기 — 결과는 항상 문자열 |
int(값) |
문자열을 정수로 변환 |
f"...{변수}..." |
변수를 끼워 넣은 문자열 |
# |
주석 — 사람만 읽는 쪽지 |
문법보다 중요한 감각
오늘의 세 줄짜리 프로그램 안에는 입력·저장·가공·출력이라는 프로그래밍의 뼈대가 전부 들어 있습니다. 그리고 오류 메시지는 적이 아니라 진단서입니다. "어디서(파일, 줄) 무엇이(마지막 줄)" 두 칸으로 읽는 습관이 앞으로 수백 시간을 아껴 줍니다.
두 가지를 더 기억해 두세요. 첫째, 보안 업계가 파이썬을 쓰는 이유는 빨리 만들 수 있어서입니다. 취약점 개념 증명도, 침해 사고 로그 분석도 파이썬으로 시작합니다. 둘째, 오늘 설치한 파이썬에는 전 세계 부품(라이브러리)을 내려받는 pip가 함께 들어 있습니다 (실측 환경에서 pip --version으로 존재를 확인했습니다). 지금 쓸 일은 없지만, 나중에 pip install 부품이름 한 줄로 만날 도구입니다. 그리고 이 언어로 만들 모든 스크립트의 사용처는 언제나 같습니다. 모든 공격 실습은 내 랩·합법 플랫폼에서만. 실서비스 무단 공격은 범죄입니다.
전부 체크되면 Step 41 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.