------ 목차 ------
1. Python
1.1 주요 특징
1.2 해석 프로그램 종류
1.3 역사
1.4 기능과 철학
2. 편집기
2.1 Jupyter
2.2 Visual Studio Code
2.3 Spyder
2.4 PyCharm
3. 패키지 관리 프로그램
3.1 Anaconda
3.2 Docker
1. Python
1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫 폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어입니다.
파이썬은 초보자부터 전문가까지 사용자층을 보유하고 있습니다. 동적 타이핑(dynamic typing) 범용 프로그래밍 언어로, 펄 및 루비와 자주 비교됩니다. 다양한 프랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하며, 대학을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있습니다. 또 파이썬은 순수한 프로그램 언어로서의 기능 외에도 다른 언어로 쓰인 모듈들을 연결하는 풀언어(glue language)로써 자주 이용 됩니다. 실제 파이썬은 많은 상용 응용 프로그램에서 스크립트 언어로 채용되고 있다. 도움말 문서도 정리가 잘 되어 있으며, 유니코드 문자열을 지원해서 다양한 언어의 문자 처리에도 능합니다.
1.1 주요 특징
- 동적 타이핑(dynamic typing)
- 객체의 멤버를 무제한으로 접근할 수 있다. (속성이나 전용의 메서드 훅을 만들어 제한할 수는 있다.)
- 모듈, 크래스, 객체와 같은 언어의 요소가 내부에서 접근할 수 있고, 리플렉션을 이용한 기술을 쓸 수 있다.
1.2 해석 프로그램의 종류
- Cython : C로 작성된 인터프리터
- 스택리스 파이썬 : C 스택을 사용하지 않는 인터프리터
- 자이썬 : 자바 가상 머신 용 인터프리터. 과거에는 제이파이썬(JPython)이라고 불렸다.
- IronPython : .NET 플랫폼 용 인터프리터.
- PyPy : 파이썬으로 작성된 파이썬 인터프리터
1.3 역사
파이썬 : 1980년대 말 고안되어 1989년 12월 구현되기 시작하였습니다. SETL에서 영감을 받은 ABC 언어의 후계로서, 예외 처리가 가능하고, 아메바 OS와 연동이 가능하였습니다.
파이썬 2.0 : 2000년 10월 16일 배포되었고 그 중 전면적인 쓰레기 수집기(GC, Garbage Collector) 탑재와 유니코드 지우너이 특징적입니다. 그러나 가장 중요한 변화는 개발 절차 그 자체로, 더 투명하고 공동체 지원을 받는 형태가 되었습니다.
파이썬 3.0 : 2008년 12월 3일자로 발표되었습니다. 2.x대 버전의 파이썬과 하위호완성이 없다는 것이 가장 큰 특징입니다.
2.x 버전 과의 차이를 간략히 요약하면 다음과 같습니다.
- 사전형과 문자열형과 같은 내장자료형의 내부적인 변화 및 일부 구형의 구성 요소 제거
- 표준 라이브러리 재배치
- 향상된 유니코드 지원. (2.x 에서는 유니코드를 표현하기 위해 u"문자열" 처럼 유니코드 리터럴을 사용했지만 3.0 부터는 모든 문자열이 유니코드이기 때문에 "문자열" 처럼 표현하면 된다.)
- 한글 변수 사용 가능
- print 명령문이 print() 함수로 바뀌게 되었다.
1.4 기능과 철학
파이썬은 다양한 프로그래밍 패러다임을 지원하는 언어이다. 객체 지향 프로그래밍과 구조적 프로그래밍을 완벽하게 지원하여 함수형 프로그래밍, 관점 지향 프로그래밍 등도 주요 기능에서 지원 된다.
핵심 철학
- "아름다운게 추한 것보다 낫다." (Beautiful is better than ugly)
- "명시적인 것이 암시적인 것 보다 낫다." (Explicit is better than implicit)
- "단순함이 복잡함보다 낫다." (Simple is better than complex)
- "복잡함이 난해한 것보다 낫다." (Complex is better than complicated)
- "가독성은 중요하다." (Readability counts)
2. 편집기
2.1 Juyter notebook
Jupyter 는 Python 내에서 아래 코드를 입력하여 설치할 수 있습니다.
#윈도우
pip install jupyter notebook
#리눅스/우분투
sudo apt-get install jupyter notebook
Jupyter가 지원하는 3가지 핵심 프로그래밍 언어는 Julia, Python, R 입니다. 웹사이트에 따르면 Jupyter는 항상 100% 오픈 소스 소프트웨어이며, 수정된 BSD 라이센스의 자유 조건에 따라 모든 사람이 무료로 사용할 수 있다고 합니다.
그리고 Jupyter notebook은 클라우드 컴퓨팅에 널리 사용되는 인터페이스가 되었으며 주요 클라우드 제공 업체는 Jupyter Notebook 또는 파생 도구를 클라우드 사용자를 위한 프론트 엔드 인터페이스로 채택했습니다.
예로 Amazon's SageMaker Notebooks, Google's Colaboratory, Microsoft's Azure Notebook 등이 있습니다.
- 40개 이상의 다양한 프로그래밍 언어를 지원하고 있습니다.
- email, dropbox, github에 공유 가능합니다.
- code를 image, video, latex, javascript로 생성이 가능합니다.
- interactive widgets은 실시간으로 조정이 가능합니다.
- Big data를 처리하는 Apache Spark와 함께 사용이 가능합니다.
2.2 Visual Studio Code
https://code.visualstudio.com/
Visual Studio Code는 마이크로소프트가 Microsoft Window, macOS, Linux 용으로 개바한 소스 코드 편집기입니다. 디버깅 지원과 Git 제어, 구문 강조 기능등이 포함되어 있으며, 사용자가 편집기의 테마와 단축기, 설정 등을 수정 할 수 있습니다.
깃허브가 개발한 일렉트론 프레임워크를 기반으로 구동됩니다. 그러나 같은 일렉트론 기반의 편집기 아톰을 포크한 것은 아니며, Visual Studio Online Editer(코드명 "모나코")를 기반으로 개발 되었습니다.
- 비주얼 스튜디오 코드는 소스 코드 편집기로, 다양한 프로그래밍 언어를 지원하며 각 언어와 함께 사용할 수 있는 편리한 기능들을 제공한다.
- 비주얼 스튜디오 코드의 다양한 기능 중 상당수는 메뉴를 통해 접근할 수 없기 때문에, 명령 팔레트와 .json 파일(eg. 사용자 설정)을 통해 사용해야 한다.
- 작성 중인 문서의 코드 페이지를 바꾸거나 줄바꿈 문자(LF 또는 CRLF)를 선택할 수 있고, 편집중인 소스 코드가 어떤 프로그래밍 언어를 사용하는지 설정할 수 있다.
- 플러그인을 통해 편집 기능 추가 및 프로그래밍 언어 지원 등 새로운 확장 기능을 추가할 수 있다.
2.3 Spyder
Spyder 는 Python 언어의 과학적 프로그래밍을 위한 오픈 소스 크로스 플랫폼 통합 개발 환경 (IDE)이니다.
Numpy, Scipy, Matplotlib, pandas, IPython, SymPy 및 Cython 및 기타 오픈 소스 소프트웨어를 포함하여 과학적 Python 스택의 여러 주요 패키지와 통합되고 MIT 라이센스에 따라 배포됩니다.
Anaconda , Windows, macOS , MacPorts 및 Arch Linux , Debian , Fedora , Gentoo Linux , openSUSE 및 Ubuntu 와 같은 주요 Linux 배포판을 통해 크로스 플랫폼에서 사용할 수 있습니다 .
Spyder는 GUI에 Qt 를 사용하며 PyQt 또는 PySide Python 바인딩 중 하나를 사용하도록 설계되었습니다 . Spyder 프로젝트에서 개발하고 나중에 여러 다른 패키지에서 채택한 얇은 추상화 계층 인 QtPy는 백엔드를 사용할 수있는 유연성을 제공합니다.
- 구문 강조 , 내부 검사 , 코드 완성 기능이 있는 편집기
- 여러 IPython 콘솔 지원
- GUI 에서 변수 를 탐색하고 편집하는 기능
- 함수, 클래스 및 메소드에 대한 서식있는 텍스트 문서 를 자동으로 또는 필요에 따라 검색하고 렌더링 할 수있는 도움말 창
- Pylint에 의해 구동되는 정적 코드 분석
- 코드를 벤치마킹하기 위한 런타임 프로파일러
- 여러 개발 노력을 동시에 수행 할 수있는 프로젝트 지원
- 파일 시스템과 상호 작용하고 프로젝트를 관리하기위한 내장 파일 탐색기
- "파일에서 찾기"기능 으로 지정된 범위에서 정규 표현식을 완전하게 검색 할 수 있습니다.
- 사용자가 IDE 내에서 Python 및 패키지 문서를 검색하고 볼 수있는 온라인 도움말 브라우저
- 각 콘솔에 입력 된 모든 사용자 명령을 기록 하는 기록 로그
- 내부 콘솔로 스파이더 자신의 작업을 조사하고 제어 할 수 있습니다.
2.4 PyCharm
https://www.jetbrains.com/ko-kr/pycharm/
PyCharm 은 컴퓨터 프로그래밍 , 특히 Python 언어에 사용되는 통합 개발 환경 (IDE) 입니다. 체코 회사 JetBrains에 의해 개발되었습니다 . 코드 분석, 그래픽 디버거, 통합 단위 테스터, 버전 제어 시스템 (VCSe) 과의 통합 , Django 를 통한 웹 개발 및 Anaconda를 사용한 데이터 과학 을 지원합니다 .
PyCharm는 크로스 플랫폼 으로, Window , macOS, Linux 버전. 커뮤니티 에디션은로 배포되는 아파치 라이센스 , 과 프로페셔널 에디션은 추가 기능도 있습니다.
- 코드 완성 , 구문 및 오류 강조, 린터 통합 및 빠른 수정과 함께 코딩 지원 및 분석
- 프로젝트 및 코드 탐색 : 특수 프로젝트보기, 파일 구조보기 및 파일, 클래스, 메소드 및 사용법 간 빠른 점프
- 파이썬 리팩토링 : 이름 바꾸기, 메소드 추출, 변수 소개, 상수 소개, 끌어 오기, 푸시 다운 및 기타 포함
- 웹 프레임 워크 지원 : Django , web2py 및 Flask [프로페셔널 에디션 전용]
- 통합 파이썬 디버거
- 라인 단위 코드 적용 범위를 갖춘 통합 단위 테스트
- Google App Engine Python 개발 [프로페셔널 에디션 만]
- 버전 제어 통합 : 변경 목록 및 병합 기능을 갖춘 Mercurial, Git, Subversion, Perforce, CVS 를 위한 통합 사용자 인터페이스
- matplotlib, numpy 및 scipy와 같은 과학적 도구 지원 [프로페셔널 에디션 만 해당]
3. 패키지 관리 프로그램
3.1 Anaconda
Anaconda는 패키지 관리와 디플로이를 단순케 할 목적으로 과학 계산(데이터 과학, 기계 학습 애플리케이션, 대규모 데이터 처리, 예측 분석 등)을 위해 파이썬과 R 프로그래밍 언어의 자유 오픈 소스 배포판입니다.
패
키지 버전들은 패키지 관리 시스템 conda를 통해 관리 됩니다. Window, macOS, Linux에 적합한 1,400개 이상의 유명 데이터 과학 패키지가 포합되어 있습니다.
3.2 Docker
도커(Docker)는 Linux의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트입니다. 도커 웹 페이지의 기능을 인용하면 다음과 같습니다:
도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.
도커는 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공합니다. 도커는 cgroups와 커널 이름공간과 같은 리눅스 커널, 또 aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용하며, 이를 통해 독립적인 "컨테이너"가 하나의 리눅스 인스턴스 안에서 실행할 수 있게 함으로써 가상 머신을 시작하여 유지보수해야 하는 부담을 없애줍니다.
리눅스 커널의 이름공간 지원은 대체적으로 프로세스 트리, 네트워크 사용자 ID, 마운트된 파일 시스템을 포함한 운영 환경에 대한 응용 프로그램의 관점을 격리시키지만, 커널의 cgroup들은 CPU, 메모리, 블록 입출력, 네트워크를 포함한 리소스 제한을 제공합니다. 버전 0.9부터 도커는 libvirt, LXC (리눅스 컨테이너), systemd-nspawn을 통한 추상화된 가상화 인터페이스를 사용하는 것 뿐 아니라 리눅스 커널이 제공하는 가상화 기능을 직접 사용하기 위한 유일한 수단으로 libcontainer 라이브러리를 포함하고 있습니다