# 일반적인 파이썬 FAQ

## 일반적인 정보

### 파이썬이 무엇입니까?

파이썬은 인터프리터 방식의, 해석되고 상호작용이 가능한, 객체 지향적 프로그래밍 언어입니다. 모듈, 예외, 동적 타이핑, 굉장히 높은 수준의 동적 데이터 타입, 그리고 클래스를 내포하고 있습니다. 절차적이나 함수형 프로그래밍과 같은 객체 지향 프로그래밍 이외의 여러 프로그래밍 패러다임을 지원합니다. 파이썬은 굉장히 깔끔한 구문으로 놀랄만한 힘을 결합합니다. 이 언어는 다양한 시스템 호출과 라이브러리 뿐만 아니라 다양한 윈도우 시스템 관련 인터페이스를 갖고 있으며, C 언어와 C++ 언어로 확장이 가능합니다. 또한 프로그래밍 인터페이스가 필요한 애플리케이션의 확장 언어로도 사용할 수 있습니다. 마지막으로, 파이썬은 리눅스와 macOS를 포함하는 많은 유닉스 변종과 윈도우에서 돌아가는 포터블 언어입니다.

추가 정보는 파이썬 자습서에 있습니다. 파이썬 초보자 가이드에서 다른 기초 자습서와 파이썬을 배우기 위한 자료들을 볼 수 있습니다.

### 파이썬 소프트웨어 재단이 무엇입니까?

파이썬 소프트웨어 재단이란 파이썬 2.1과 그 윗 버전의 저작권을 소유하고 있는 독립적이고 비영리적인 단체입니다. 이 재단의 사명은 파이썬의 사용을 대중화 시키고 파이썬 관련 오픈소스 기술을 발전시키는 것입니다. 파이썬 소프트웨어 재단의 홈페이지: https://www.python.org/psf/.

파이썬 소프트웨어 재단으로의 기부는 미국에서 세액공제 적용 대상입니다. 파이썬을 사용하고 도움이 된다고 생각한다면 PSF 기부 페이지를 통해 기여해 주십시오.

### 파이썬을 사용할 때 저작권 관련 제한이 있습니까?

본인이 생성한 파이썬에 대해 저작권을 명시하고, 이와 관련된 정보를 어떠한 형태로든 설명서에 표시하면 본인의 소스로 무엇이든 할 수 있습니다. 저작권 관련 규칙을 따르면 파이썬을 상업 목적으로 사용해도 괜찮으며, 소스코드나 (수정된 또는 수정되지 않은) 이진형태의 파이썬을 팔거나, 파이썬을 내장하는 상품을 팔아도 괜찮습니다. 그럼에도 저희는 파이썬이 사용된 모든 상업 활동을 알고 싶습니다.

PSF 라이선스에 관한 구체적인 설명과 원본은 라이선스 페이지에서 확인할 수 있습니다.

파이썬 로고는 상표로 등록되어 있으며, 일부 경우에는 사용하기 위한 허가가 필요합니다. 더 많은 정보를 원하시면 상표 사용 정책을 참조하십시오.

### 파이썬은 애초에 왜 만들어졌습니까?

여기 Guido van Rossum 씨가 작성한 굉장히 요약된 파이썬의 탄생 계기입니다:

> 저는 CWI(Centrum Wiskunde & Informatica)의 ABC 그룹에서 인터프리터 언어를 도입하며 광범위한 경험을 해봤고, 그 그룹과 일하며 언어의 디자인에 대해 많은 것을 배웠습니다. 들여쓰기로 문단 묶기나 매우-상위-레벨 자료형을 포함한 것과 같은 파이썬의 다양한 기능들이 이 당시 경험을 바탕으로 만들어졌습니다.

> ABC 언어에 있어서 저는 불만도 있었지만, 마음에 드는 기능도 많았습니다. ABC 언어(그리고 언어의 이행과정)는 제 불만을 극복할 만큼 확장할 방법이 없었죠. –사실 확장성이 떨어지는 것이 이 언어의 가장 큰 문제점 중 하나였습니다. 저는 Modula-2+를 사용하는데 약간의 경험이 있었고 Modula-3의 디자이너 분들과 대화도 나눠보았으며 Modula-3 관련 레포트도 읽어본 상태였습니다. Modula-3은 예외에서 쓰인 문법과 의미론을 비롯한 일부 파이썬 기능들의 기원입니다.

> 저는 CWI에서 Amoeba 분산 운영체제 그룹에 속해 일하고 있었습니다. Amoeba는 Bourne 셸로는 쉽게 접근하지 못하는 고유의 시스템 호출 인터페이스를 내장하고 있었기 때문에 저희는 C 프로그램이나 Bourne 셸 스크립트를 작성하는 것이 아닌 더 좋은 시스템 관리 방법이 필요했습니다. Amoeba에서 에러 처리를 해본 경험 덕분에 저는 프로그래밍 언어의 기능에 있어서 예외의 중요성을 인지하고 있었습니다.

> ABC의 문법을 지키면서 Amoeba 시스템 호출에 접근 가능한 스크립트 언어가 필요하다는 것을 깨달았죠. Amoeba 특유의 언어를 만드는 건 어리석은 행동이라고 느껴서 대체로 확장 가능한 언어가 필요한 상황이라고 판단했습니다.

> 1989년 크리스마스 연휴에 저는 많은 시간이 있었고, 그 참에 도전해보기로 했습니다. 다음 해에도 제 개인적인 시간을 투자하며 언어를 완성시켜 가는 와중에 Python은 Amoeba 프로젝트에서 날이 갈수록 성공적으로 사용되고 있었습니다. 그리고 제 동료들의 피드백을 통해 저는 초기 개선사항들을 추가할 수 있었죠.

> 1991년 2월, 1년이 조금 넘는 개발 기간 후, 저는 USENET에 올리기로 했습니다. 나머지는 `Misc/HSTORY` 파일에 있습니다.

### 파이썬의 강점은 무엇입니까?

파이썬은 다양한 상황에 적용 가능한, 범용성 있는 고급언어입니다.

언어와 함께 오는 표준 라이브러리는 문자열 처리 (정규 표현식, 유니코드, 파일 간의 차이 계산), 인터넷 프로토콜 (HTTP, FTP, SMTP, XML-RPC, POP, IMAP), 소프트웨어 공학 (유닛 테스트, 로깅, 프로파일링, 파이썬 코드 파싱), 그리고 운영체제 인터페이스 (시스템콜, 파일 시스템, TCP/IP 소켓) 등 넓은 영역을 아우릅니다. 구체적인 목차를 보고싶다면 파이썬 표준 라이브러리을 확인하십시오. 다양한 제삼자 확장도 가능합니다. 파이썬 패키지 인덱스에서 당신이 필요한 패키지를 찾을 수 있습니다.

### 파이썬 버전 관리 규칙은 무엇입니까?

Python versions are numbered “A.B.C” or “A.B”:

- A is the major version number – it is only incremented for really major changes in the language.

- B is the minor version number – it is incremented for less earth-shattering changes.

- C is the micro version number – it is incremented for each bugfix release.

모든 배포판이 버그 수정 배포판은 아닙니다. 새로운 기능 배포판을 만드는 과정에서 알파, 베타, 또는 배포판 후보라 불리는 개발 배포판이 만들어집니다. 알파버전은 이른 배포판으로, 인터페이스들이 확정되지 않은 배포이므로 두 알파버전 사이에 인터페이스의 변경이 생기곤 합니다. 베타버전은 더 안정적이며 기존의 인터페이스는 유지하지만 새로운 모듈을 추가할 수 있고, 배포판 후보들은 치명적인 버그 수정 외에는 변경사항을 포함하지 않습니다.

Alpha, beta and release candidate versions have an additional suffix:

- The suffix for an alpha version is “aN” for some small number N.

- The suffix for a beta version is “bN” for some small number N.

- The suffix for a release candidate version is “rcN” for some small number N.

In other words, all versions labeled 2.0aN precede the versions labeled 2.0bN, which precede versions labeled 2.0rcN, and those precede 2.0.

또한 “+” 접미사가 붙은 버전을 마주할 수도 있습니다. 예) “2.2+”. 이는 CPython 개발 저장소에서 바로 빌드된, 배포되지 않은 버전입니다. 실제는 이 버전의 최종 소규모 배포가 이루어질 때 다음 소규모 버전으로 증가하여 “a0” 버전이 됩니다. 예) “2.4a0”.

See the Developer’s Guide for more information about the development cycle, and PEP 387 to learn more about Python’s backward compatibility policy. See also the documentation for `sys.version`, `sys.hexversion`, and `sys.version_info`.

### 파이썬 소스를 어떻게 얻을 수 있습니까?

최신 파이썬 소스는 python.org 또는 https://www.python.org/downloads/ 에서 항상 구할 수 있고, 최신 개발 소스는 https://github.com/python/cpython/ 에서 구할 수 있습니다.

소스 배포판은 모든 C 언어 코드, 스핑크스 형식의 문서, 파이썬 라이브러리 모듈, 예제 프로그램들, 그리고 일부 유용한 무료 배포 소프트웨어를 포함합니다. 소스는 대부분의 유닉스 플랫폼에서 추가 설정 없이 컴파일되고 실행 가능합니다.

소스 코드를 받고 컴파일하는 부분에서 추가 정보를 원하시면 파이썬 개발자 가이드의 개요를 참고하십시오.

### 파이썬 설명 문서는 어떻게 구합니까?

현재 파이썬의 안정화 버전에 관련된 표준 문서는 https://docs.python.org/3/에서 확인할 수 있습니다. PDF, 텍스트 문서, 그리고 다운로드 가능한 HTML 버전들은 https://docs.python.org/3/download.html 에서 구할 수 있습니다.

문서는 reStructuredText로 쓰여졌으며 스핑크스 문서화 툴로 프로세스되어 있습니다. 문서의 reStructuredText 소스는파이썬 배포 소스의 일부입니다.

### 저는 프로그래밍을 해본 적이 없습니다. 파이썬 튜토리얼이 있습니까?

다양한 튜토리얼과 책이 존재합니다. 표준 문서로는 파이썬 자습서가 있습니다.

초보자 가이드에서 튜토리얼 목록과 같은 초보 파이썬 개발자를 위한 정보를 확인하십시오.

### 파이썬에 특화된 뉴스 그룹이나 메일링 리스트가 있습니까?

뉴스 그룹은 comp.lang.python, 그리고 메일링 리스트는 python-list에서 확인 할 수 있습니다. 뉴스 그룹과 메일링 리스트는 서로 연동되어 있어서 뉴스를 읽는다면 메일을 구독할 필요가 없습니다. comp.lang.python은 활발하고 하루에도 수백 개의 포스팅이 올라오기 때문에 Usenet 독자들은 이 매체를 통해 더 원활하게 소통할 수 있을 것입니다.

새로운 소프트웨어의 배포와 이벤트에 관련된 공지는 하루 다섯 개 정도의 포스팅이 올라오는 comp.lang.python.announce 에서 확인할 수 있습니다. 이는 the python-announce mailing list라는 메일링 리스트에서도 얻을 수 있습니다.

https://www.python.org/community/lists/ 에서 다른 메일링 리스트와 뉴스 그룹에 대한 정보를 확인할 수 있습니다.

### 파이썬 베타 테스트 버전은 어떻게 구합니까?

알파와 베타 배포판은 https://www.python.org/downloads/ 에서 확인할 수 있습니다. 모든 배포는 comp.lang.python 과 comp.lang.python.announce 뉴스그룹, 그리고 파이썬 홈페이지 https://www.python.org/ 에서 공지됩니다. 뉴스의 RSS 피드가 제공됩니다.

Git을 통해 파이썬의 개발 버전을 사용할 수 있습니다. 파이썬 개발자 가이드를 확인하십시오.

### 파이썬 버그 리포트나 패치는 어떻게 제출합니까?

버그 리포트나 패치 제출은 https://github.com/python/cpython/issues 의 문제 추적기를 사용하십시오.

파이썬이 어떻게 개발되는지 더 알고 싶으시다면 파이썬 개발자 가이드를 참조하십시오.

### 제가 참고할만한 파이썬 관련 기사가 있습니까?

당신이 가장 좋아하는 파이썬 책을 인용하는 것이 제일 좋을 것 같습니다.

파이썬에 관련된 최초의 기사는 1991년에 작성되어서 이제는 구식입니다.

> Guido van Rossum and Jelke de Boer, “Interactively Testing Remote Servers Using the Python Programming Language”, CWI Quearterly, Volume 4, Issue 4 (December 1991), Amsterdam, pp 283–303.

### 파이썬 관련 책이 있습니까?

예, 많이 있고 현재 출판되는 책들도 있습니다. 리스트를 원한다면 https://wiki.python.org/moin/PythonBooks 에서 파이썬 위키를 확인하십시오.

아니면 온라인 서점에서 “파이썬”을 검색하고 몬티 파이썬 관련 항목을 필터링해도 괜찮습니다; 검색할 때 “파이썬”과 “언어”를 검색해도 좋습니다.

### 도대체 www.python.org는 어디에 있는 겁니까?

파이썬 프로젝트의 기반 시설은 전 세계 각지에 존재하며 Python Infrastructure Team에 의해 관리되고 있습니다. 추가 정보는 여기있습니다.

### 왜 이 언어는 파이썬이라 불립니까?

Guido van Rossum 씨가 파이썬을 구현할 당시 그는 1970년대에 BBC에서 방영된 코미디 시리즈인 “몬티 파이튼의 플라잉 서커스”대본을 읽고 있었습니다. 판 로쉼은 자신이 만든 언어가 짧고 독창적이면서도 약간 신비한 느낌의 이름이 필요하다고 생각했기에 언어를 파이썬이라고 부르기로 결정했습니다.

### “몬티 파이튼의 플라잉 서커스”를 좋아해야합니까?

아니요, 하지만 도움은 됩니다. :)

## 현실 속의 파이썬

### 파이썬은 어느 정도 안정화 되어있습니까?

굉장히 안정적입니다. 새롭고 안정적인 배포판을 1991년부터 대략 6개월에서 18개월 사이에 계속해서 출시하고 있고, 이는 앞으로도 계속될 것 같습니다. 버전 3.9부터, 파이썬은 12개월마다 새로운 기능 배포판을 제공합니다 (PEP 602).

개발자분들이 옛 버전의 버그 수정 배포판들을 공개하기 때문에 기존에 배포된 버전의 안정성은 서서히 증가합니다. 버그 수정 배포판은 버전의 세 번쨰숫자로 표시하며 (예: 3.5.3, 3.6.2), 안정성을 위해 관리됩니다. 버그 수정 배포판은 현재까지 알려진 버그만을 수정하며, 인터페이스는 절대 변하지 않습니다.

The latest stable releases can always be found on the Python download page. There are two production-ready versions of Python: 2.x and 3.x. The recommended version is 3.x, which is supported by most widely used libraries. Although 2.x is still widely used, it is not maintained anymore.

### 얼마나 많은 사람이 파이썬을 씁니까?

아마 수백만의 사용자가 있을 텐데, 정확한 수를 얻기는 힘듭니다.

파이썬은 무료로 다운로드받을 수 있기 때문에 판매액이 없습니다. 그리고 파이썬은 다양한 사이트에서, 다양한 리눅스 배포판과 패키지로 제공되므로 다운로드 통계치 역시 모든 것을 알려주지 못합니다.

활발하게 활동하는 comp.lang.python이라는 뉴스그룹이 있지만 모든 파이썬 유저들이 그곳에 글을 올리지 않으며 심지어 읽는 것도 아닙니다.

### 파이썬으로 진행된 중요한 프로젝트가 존재합니까?

https://www.python.org/about/success 에서 파이썬을 사용한 프로젝트를 확인할 수 있습니다. 과거 파이썬 회의들을 통해 파이썬의 성장에 기여한 다양한 기업들과 단체들을 확인할 수 있습니다.

세간의 이목을 끈 프로젝트로는 Mailman 메일링 리스트 매니저와 Zope 애플리케이션 서버가 있습니다. 레드햇으로 대표되는 리눅스 배포판들은 시스템 관리 소프트웨어와 설치 프로그램의 일부 또는 전부를 파이썬으로 만들었습니다. 구글, 야휴, 그리고 루카스필름과 같은 회사들이 사내 개발 환경에서 파이썬을 사용합니다.

### 파이썬에 어떤 새로운 개발요소들이 예정되어 있습니까?

https://peps.python.org/ 에서 Python Enhancement Proposals (PEPs) 를 확인하십시오. PEPs 는 파이썬의 새로운 기능을 제안하는 디자인 문서로, 간결한 기술 사양과 제안 이유를 적는 곳입니다. “Python X.Y Release Schedule”이라고 적힌 PEP를 확인하시면 됩니다. X.Y 는 아직 배포되지 않은 버전을 의미합니다.

신규 개발요소들은 python-dev 메일링 리스트에서 논의되고 있습니다.

### 기존의 파이썬과 호환 가능하지 않은 변경안을 제시해도 괜찮습니까?

일반적으로, 아니요. 현재 전 세계에 수 없이 많은 파이썬 코드들이 작성되어 있으며, 이미 존재하는 프로그램의 아주 작은 부분이라도 무효화한다면 그 변경안은 눈살을 찌푸리고 봐야합니다. 당신이 변환 프로그램을 제공한다고 해도 설명서를 전부 업데이트 해야하는 문제가 남아있습니다. 뿐만 아니라 수 많은 책들이 파이썬에 관련해서 쓰여져 있는데, 저희는 한 순간에 그 모든 책들을 무효화 시키고 싶지 않습니다.

만약 기능이 바뀌어야 한다면 점차적인 업그레이드 방안의 제시를 필요로 합니다. PEP 5에서 하위호환 불가능한 변경을 도입할 때 사용자의 불편함을 최소화 하는 절차를 확인할 수 있습니다.

### 파이썬이 초보 프로그래머들에게 좋은 언어입니까?

예.

파스칼, C, 또는 C++나 Java의 일부처럼 절차적이고 정적인 언어를 학생들의 첫 언어로 가르치는 것은 아직 흔한 교육 방식입니다. 하지만 그들이 파이썬을 첫 언어로 배우는 것이 더 이로울 수도 있습니다. 파이썬은 굉장히 간단하면서도 일관된 문법과 방대한 표준 라이브러리를 가지고 있으며, 무엇보다 초기 프로그래밍 교육에서 파이썬을 이용하면 학생들이 자료형 디자인, 그리고 문제 분석과 같은 중요한 프로그래밍 능력에 집중할 수 있도록 해줍니다. 학생들은 파이썬을 통해 반복문과 절차 같은 기초적인 콘셉트를 빠르게 접할 수 있습니다. 더 나아가 그들은 첫 강의에서 사용자 정의 객체를 활용하여 작업을 할 수도 있을 것입니다.

프로그래밍을 한 번도 해본 적이 없는 학생이라면 정적인 프로그래밍 언어를 사용하는 것은 자연스럽게 느껴지지 않을 것입니다. 그 과정을 해결하기 위해서는 부가적인 요소를 익혀야하며, 이는 강의 속도를 낮춥니다. 학생들은 컴퓨터처럼 사고하는 방식, 문제를 분석하는 방법, 일정한 인터페이스를 디자인하는 방법, 그리고 정보를 캡슐화하는 것을 배우려 합니다. 장기적으로 본다면 정적인 언어를 배우는 것이 중요할 수도 있지만, 학생들의 첫 프로그래밍 언어로 보았을 때는 좋다고 볼 수 없습니다.

파이썬이 첫 개발 언어로 좋은 이유로 다양한 요소들을 뽑습니다. 파이썬은 자바처럼 방대한 표준 라이브러리를 가지고 있어서 학생들이 수업의 극 초반에 뭔가 진짜 하는 프로그래밍 프로젝트를 경험할 수 있습니다. 네 개의 함수로 만들어보는 계산기나 가계부 프로그램이 과제의 전부가 아닙니다. 표준 라이브러리를 사용하므로써 학생들은 프로그래밍의 기본을 배우며 그럴싸한 애플리케이션을 만들어 볼 수 있습니다. 표준 라이브러리를 사용하면서 학생들에게 코드의 재활용 역시 가르쳐 줄 수 있습니다. 뿐만 아니라 PyGame 같은 제삼자 모듈 역시 학생들의 시야를 넓히는데 도움이 됩니다.

파이썬의 상호작용 가능한 인터프리터는 학생들이 코딩하며 언어의 기능을 테스트해 볼 수 있게 해줍니다. 학생들은 하나의 창에서 코드를 수정하며 다른 창에서 인터프리터를 돌려볼 수 있습니다. 만약 그들이 리스트에 대한 메서드가 기억나지 않는다면, 이와 같은 시도를 해볼 수 있습니다:

    >>> L = []
    >>> dir(L)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
    '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
    '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
    '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
    '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
    '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
    '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
    'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
    'reverse', 'sort']
    >>> [d for d in dir(L) if '__' not in d]
    ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    >>> help(L.append)
    Help on built-in function append:

    append(...)
        L.append(object) -> None -- append object to end

    >>> L.append(1)
    >>> L
    [1]

인터프리터가 있다면, 학생들이 코딩하면서 설명서를 열람하기 쉽습니다.

파이썬을 위한 좋은 IDE들이 있습니다. IDLE은 Tkinter를 사용하여 파이썬으로 만들어진, 파이썬을 위한 크로스-플랫폼 IDE입니다. Emacs 유저들은 Emacs에 굉장히 좋은 파이썬 모드가 있다는 사실을 알게 되면 기뻐할 것입니다. 이 모든 개발 환경이 구문 강조, 자동 들여쓰기, 그리고 코딩하면서 상호작용이 가능한 인터프리터를 지원합니다. 파이썬 개발 환경의 전체 리스트는 파이썬 위키를 참조하십시오.

만약 파이썬이 교육 분야에서 어떻게 사용되는지에 대해 논의하고 싶으시면 the edu-sig mailing list에 들어와 주십시오.