교재 홈: 바이브 코더를 위한 코딩 기초 학습

실행 구조는 코드가 어디서 시작해 어떤 작업을 거쳐 끝나는지를 뜻합니다. 함수의 내용을 적는 정의와 그 함수를 실제로 사용하게 하는 호출을 구분하면, 파일에 적힌 순서와 실제 실행 순서가 왜 다른지 이해할 수 있습니다. 함수는 이름이 붙은 작업 묶음이며 4장에서 배운 내용을 여기서 연결합니다.

정의와 호출

double은 받은 수를 두 배로 만드는 함수 이름입니다. value는 받은 값, result는 계산 결과입니다. main은 주요 실행 절차를 모아 둔 함수에 흔히 붙이는 이름입니다. __name__과 "__main__"은 Python이 특별한 의미로 사용하는 표기이며, 맨 아래 조건은 ‘이 파일을 직접 실행한 경우에만 시작하라’고 읽으면 됩니다.

execution.py에 저장합니다.

def double(value):
    print("함수 안:", value)
    return value * 2

def main():
    print("시작")
    result = double(3)
    print("결과:", result)

if __name__ == "__main__":
    main()

출력은 시작, 함수 안: 3, 결과: 6입니다. Python은 먼저 함수 정의를 만나 이름과 함수 객체를 연결합니다. 함수 본문은 호출될 때 실행합니다. main()이 double(3)을 호출하면 잠시 그 함수 안으로 들어갔다가, 반환값 6을 받아 다음 줄을 진행합니다.

if __name__ == "__main__": 아래는 이 파일을 직접 실행했을 때만 실행됩니다. 다른 파일에서 import execution으로 기능을 가져오면 함수들을 사용할 수 있지만 main()은 자동 호출되지 않습니다. 이렇게 주 실행을 시작하는 곳을 **진입점(entry point)**이라고 부릅니다. 함수를 가져오기만 해도 파일 저장이나 외부 요청이 실행되면 예상하지 못한 변경이 생길 수 있어 구분합니다. 가져오기와 모듈은 04. 함수와 모듈 — 입력·처리·반환을 나누기의 「모듈과 패키지」절에서 다시 볼 수 있습니다.

입력·상태·출력

**입력(input)**은 파일 내용이나 키보드로 적은 글처럼 프로그램이 받아들이는 값입니다. **상태(state)**는 실행하는 동안 유지되는 현재 값입니다. **출력(output)**은 화면에 보여 주기, 파일 저장, 자료 변경, 외부 전송처럼 밖으로 내보내는 결과입니다. 나중에는 다른 프로그램의 기능을 요청하는 통로인 API를 통해 받은 답도 입력이 됩니다. API의 요청과 응답은 10. 웹과 API — 요청·응답과 화면 표시를 연결하기의 「클라이언트와 서버, URL」절에서 다룹니다.

balance = 0
for value in [10, -3, 5]:
    balance += value
print(balance)

balance는 지금까지의 합계를 담는 이름입니다. balance += value는 balance = balance + value를 짧게 쓴 것으로, 현재 합계에 새 값을 더합니다. 0에 10을 더하면 10, 여기에 -3을 더하면 3을 빼는 것과 같아 7, 다시 5를 더하면 12가 됩니다. 상태는 0 → 10 → 7 → 12로 변합니다. 중간 값을 적으면 어느 단계에서 예상과 달라졌는지 찾을 수 있습니다.

아래 그림은 표 형태의 글자 파일인 CSV를 처리하는 흐름입니다. CSV 파일은 06. 파일과 데이터 — 읽기·정제·저장을 구분하기의 「CSV와 JSON」절에서 직접 만듭니다. 화살표는 다음에 처리할 방향이고 마름모는 조건에 따라 길이 갈라지는 곳입니다. 검증은 정한 규칙에 맞는지 확인하는 일, 유효는 그 규칙에 맞아 사용할 수 있다는 뜻입니다. 집계는 기록을 세거나 더해 요약하는 일입니다.

flowchart TD
    A["CSV 읽기"] --> B{"형식과 값 검증"}
    B -->|유효| C["집계할 기록"]
    B -->|오류| D["오류 사유 기록"]
    C --> E["요약 계산"]
    D --> F["검토 결과 저장"]
    E --> F

오류 행을 제외하고 계산하는 정책과 오류 하나라도 있으면 전체 실행을 멈추는 정책은 서로 다릅니다. 이 교재의 종합 실습은 행 단위 오류를 별도 보고하고 유효 행을 집계하지만, 필수 열이 틀렸거나 파일을 열 수 없으면 전체 작업을 멈춥니다. 업무의 성격에 따라 더 엄격한 중단 규칙이 필요할 수 있습니다.

동기 처리

동기 처리(synchronous processing)에서는 일반적으로 현재 작업의 결과를 받은 다음 다음 줄로 진행합니다. read_text()가 파일을 읽는 동안 그 다음 계산은 기다립니다. 느린 작업이 있는지, 반복문 안에서 같은 파일을 불필요하게 다시 읽는지 살펴보면 성능 문제도 일부 설명할 수 있습니다.

CPU는 컴퓨터에서 명령과 계산을 처리하는 주요 장치입니다. CPU 사용량이 낮거나 화면 변화가 없다고 해서 무조건 끝나지 않는 반복에 빠진 것은 아닙니다. 파일 접근, 사용자 입력, 네트워크를 통한 응답을 기다릴 수 있습니다. 네트워크는 컴퓨터나 기기들이 자료를 주고받도록 연결된 체계이며 인터넷은 그 예입니다. **제한시간(timeout)**은 정한 시간 안에 끝나지 않으면 기다림을 중단하도록 둔 기준입니다.

실행 환경과 환경변수