강의영상

- (1/8) 파이썬이 어려웠던 이유

- (2/8) 1세대 프로그래머

- (3/8) 1세대 프로그래머의 삶 with python

- (4/8) 1세대 프로그래머의 삶 with ipython

- (5/8) 2세대 프로그래머, 3세대 프로그래머 (1)

- (6/8) 3세대 프로그래머(2), 4세대 프로그래머

- (7/8) 5세대 프로그래머

- (8/8) 다양한 개발환경 구축방법 다시 리뷰, 숙제설명

파이썬이 어려웠던 이유

- 파이썬 배우는 초보자에게 가장 어려운것!

  • 선생님마다 설치하는 방법이 모두 다름

- 왜 저렇게 설치방법이 다른가? 왜 다른 방법으로 각각 파이썬을 실행하는가? 이런것이 너무 어려움

  • 방법1: 파이썬프로그램 다운로드 -> 시작버튼 눌러서 설치
  • 방법2: 아나콘다 설치 (그럼 자동으로 파이썬이 설치됨)
  • 방법3: 아나콘다 설치 + 가상환경
  • ...

- 심지어 실행하는것도 다름

  • 방법1: 파이썬 프롬프트
  • 방법2: .py를 이용하여 실행?
  • 방법3: IDLE
  • 방법4: 파이참
  • 방법5: 스파이더
  • 방법6: Visual Studio Code
  • 방법7: 주피터노트북, 주피터랩
    • 가상환경을 만들어서 해라..
    • 아나콘다 네비게이터에 주피터가 있다..
  • ...

- 머리아프니까 collab을 쓰라는 사람도 있음. 아니면 도커이미지를 줄테니까 그걸 쓰라는 사람도 있음. AWS를 쓰라는 사람도 있음.. $\to$ 이게 더 머리아픔

- 핵심: 그냥 (1) 컴퓨터에 (2) 파이썬을 깔아서 (3) 실행하는 것임

- 의문: 그런데 방법이 왜이렇게 많은가? 엑셀처럼 프로그램 설치하고 아이콘 더블클릭하면 끝나는 식으로 만들어야 하는것 아닌가?

개발환경 구축방법이 많은 이유?

- 파이썬 개발환경 구축은 수많은 방법이 있다.

- 이는 마치 라면의 레시피를 검색하면 수많은 방법이 나오는것과 유사함.

  • 방법1: 스프를 먼저 넣고 끓인다음 라면을 넣어야 합니다.
  • 방법2: 양은냄비에 물넣고 물이 끊으면 라면과 스프를 같이 넣고 마지막에 계란을 넣는다.
  • 방법3: 먹다남은 삼겹살을 후라이팬에 볶은다음에 물을 붓고 라면을 넣는다.
  • 방법4: 용기에 라면+스프+뜨거운물 랩을 씌운뒤에 젓가락으로 구멍을 뚫고 전자렌지에 돌린다.
  • ...

- 우리는 모든 방법을 나열할 순 없지만 모든 방법을 이해할 수 있다. 왜냐하면 라면을 끓이는 공통적인 맥락을 우리는 알고 있으니까

- 파이썬을 설치하는 다양한 방법 역시 공통맥락을 파악하면 이해하기 쉽다.

- 제목적: 파이썬을 설치하고 실행하는 공통맥락을 설명하고 싶음

- 설치하는 방법이 다양한 이유? 파이썬이 인기있음 + 다양한 방법을 설치를 하면 각자의 장점이 뚜렷해서

1세대 프로그래머

python

- 윈도우에서 anaconda prompt 실행 -> python

(base) C:\Users\python>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> [1,2,3]+[4]
[1, 2, 3, 4]
>>> a=[1,2,3]+[4]
>>> a
[1, 2, 3, 4]

- 2개를 실행할 수도 있음. (두 환경은 각각 서로 독립적인 파이썬, 변수가 공유되지 않음) $\star$

- 아쉬운점: `?list'와 같이 도움말 기능이 동작하지 않음

> >> ?list
  File "<stdin>", line 1
    ?list
    ^
SyntaxError:invalid syntax>>>

ipython

- 윈도우에서 anaconda prompt 실행 -> ipython

(base) C:\Users\python>ipython
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.29.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: a=[1,2,3]

In [2]: a
Out[2]: [1, 2, 3]

In [3]: a+[4]
Out[3]: [1, 2, 3, 4]

- ?list가 가능

In [4]: ?list
Init signature: list(iterable=(), /)
Docstring:
Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
Type:           type
Subclasses:     _HashedSeq, StackSummary, DeferredConfigList, SList, _ImmutableLineList, FormattedText, NodeList, _ExplodedList, Stack, _Accumulator, ...

- 색깔이 알록달록해서 문법을 보기 편하다. (구문강조)

1세대 프로그래머의 삶 with python

- 1부터 10까지 합을 구하는 프로그램을 만들고 싶음

- 시도1: python을 키고 아래와 같이 실행

(base) C:\Users\python>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
> >> total = 0
>>> for i in range(10):...     total=total+i...
>>> total
45
>>>

- 반성: 정답은 55인데 45가 출력되었다! $\to$ range(10)을 range(1,11)으로 바꿔야겠다!

- 시도2: range(1,11)을 바꿔야겠다고 생각하고 다시 입력하다가 오타가 발생

> >> total =0
>>> for i in range(1,11):...     total = totla +i...
  • 앗 totla이라고 잘못쳤다.

- 반성: 다음에는 정신을 똑바로 차려야겠다.

- 불편한점: ... 다..

1세대 프로그래머의 삶 with ipython

- ipython을 사용한 프로그래머는 좀더 상황이 낫다

(base) C:\Users\python>ipython
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.29.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: total = 0

In [2]: for i in range(1,11):
   ...:     total = total + i
   ...:

In [3]: total
Out[3]: 55
  • 편한점1: 자동으로 들여쓰기가 되어서 편함
  • 편한점2: 화살표를 이용해서 for문을 쓰는 도중에 위아래로 이동가능
  • 불편한점1: 화살표로 이동할수는 있는데 마우스로는 이동할 수 없다.
  • 불편한점2: 내가 작성한 코드를 관리하기 어렵다.

2세대 프로그래머: 메모장 + anconda prompt를 이용 (.py를 이용한 python활용)

- 메모장을 키고 아래의 내용을 적는다.

total = 0 
for i in range(1,11): 
    total = total + i
print(total)

- 파일이름을 mysum.py로 저장한다.

- anaconda prompt에서 mysum.py파일이 저장된 폴더로 이동 -> 실행

(base) C:\Users\python>cd Desktop

(base) C:\Users\python\Desktop>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 9AFD-A05F

 C:\Users\python\Desktop 디렉터리

2022-03-27  오전 11:32    <DIR>          .
2022-03-27  오전 11:32    <DIR>          ..
2022-03-27  오전 12:01             2,306 Chrome.lnk
2022-03-26  오후 08:32             2,332 Microsoft Edge.lnk
2022-03-27  오전 11:33                71 mysum.py
               3개 파일               4,709 바이트
               2개 디렉터리  743,643,467,776 바이트 남음

(base) C:\Users\python\Desktop>python mysum.py
55

(base) C:\Users\python\Desktop>

- 소감

  • 편한점1: 마우스를 이용하여 이동가능
  • 편한점2: 내가 작업한 내용은 바탕화면의 메모장에 저장이 되어있음
  • 아쉬운점: ipython의 장점은 활용못함 (구문강조, 도움말기능)

3세대 프로그래머: 메모장 + ipython

- 전체적인 개발방식

  • 메모장: 코드를 편집, 저장
  • ipython: anaconda prompt처럼 메모장의 코드를 실행하고 결과를 확인 + 구문강조, 도움말확인기능 등을 이용하여 짧은 코드를 빠르게 작성

- 기능

  • ipython에서 !python mysum.py를 입력하면 anaconda prompt에서 python mysum.py를 입력한 것과 같은 효과
  • ipython에서 %run mysum을 입력하면 메모장에서 mysum.py에 입력된 내용을 복사해서 ipython에 붙여넣어 실행한것과 같은 효과

4세대 프로그래머: IDE(통합개발환경)를 사용

- 메모장과 ipython을 하나로 통합한 프로그램이 등장!

  • jupyter notebook, jupyter lab
  • spyder
  • idle
  • VScode
  • ...

- 주피터의 트릭 (실제로 주피터는 ipython에 기생할 뿐 아무런 역할도 안해요)

(1) 주피터를 실행

(2) 새노트북을 생성 (파이썬으로 선택)

  • 컴퓨터는 내부적으로 ipython을 실행하고 그 ipython이랑 여러분이 방금만든 그 노트북과 연결

(3) 처음보이는 cell에 1+1을 입력 -> 쉬프트엔터 -> 결과2가 출력

  • 처음보이는 cell하나 = 자동으로 열린 하나의 메모장
  • cell 1+1을 입력 = 메모장에 1+1을 적음
  • 쉬프트+엔터후 결과2를 출력 = cell의 내용을 복사 -> ipython에 붙여넣음 -> ipython 계산된 결과를 복사 -> cell로 돌아와 붙여넣기

(4) 새로운 cell을 추가하고 2+2을 입력 -> 쉬프트엔터 -> 결과4가 출력

  • 새로운 cell을 추가 = 새로운 메모장 추가
  • cell 2+2을 입력 = 새로운 메모장에 2+2를 적음
  • 쉬프트+엔터후 결과4를 출력 = cell의 내용을 복사 -> ipython에 붙여넣음 -> ipython 계산된 결과를 복사 -> cell로 돌아와 붙여넣기

- 중요한 사실들

  • IDE는 내부적으로 연산을 수행하는 능력이 없다. (생각해볼것: 왜 R을 꼭 설치하고 Rstudio를 설치해야 했을까?)
  • 주피터에서 커널을 재시작한다는 의미는 메모장이 열린채로 ipython을 껐다가 다시 실행한다는 의미
  • 주피터는 단순히 '메모장의 내용을 복사하여 붙여넣는 기계'라고 볼 수 있다. 이렇게 생각하면 주피터는 꼭 ipython에 연결할 이유는 없다. 실제로 주피터에 R을 연결해서 쓸 수 있다. 즉 하나의 IDE가 여러개의 언어와 연결될 수 있다.
  • Jupyterlab이라는 프로그램은 크롬에 있는 내용과 ipython간의 통신을 제어하는 프로그램일 뿐이다.

5세대 프로그래머: 가상컴퓨터(anaconda), 원격컴퓨터(server), 클라우드컴퓨터(colab)의 개념 등장

- 지금까지는 ipython이 실행되는 컴퓨터와 크롬이 실행되는 컴퓨터가 동일하다는 전제였음.

- 생각해보니까 어차피 ipython이 실행된 컴퓨터에서 내가 크롬에 입력한 명령 "전달"되기만 하면 되므로 꼭 같은 컴퓨터일 필요는 없다.

모델1: 원격컴퓨터

- 준비상태

  • 전북대컴퓨터: ipython을 실행 + 이 컴퓨터는 인터넷 연결이 되어있어야함
  • 우리집노트북: 크롬실행 + 이 컴퓨터도 인터넷이 연결되어 있어야함

- 명령입력

  • 우리집노트북 크롬에서 1+1을 입력하고 쉬프트 엔터를 누름

- 우리집노트북 -> 전북대컴퓨터

  • 우리집 노트북의 내부의 어떤프로그램은 1+1이라는 명령을 복사하여 카카오톡으로 전북대 컴퓨터에 전달
  • 전북대 컴퓨터의 내부의 어떤프로그램은 1+1이라는 명령을 카톡으로 받아서 그것을 ipython에게 전달

- 전북대컴퓨터 -> 우리집노트북

  • 전북대컴퓨터 내부의 ipython은 2라는 출력결과를 계산함
  • 전북대컴퓨터 내부의 어떤프로그램은 계산결과를 카톡으로 우리집 노트북에 알려줌
  • 나는 우리집 노트북에서 계산결과를 받아볼 수 있다.

모델2: 원격컴퓨터 + 가상컴퓨터

- 준비상태

  • 성능좋은 전북대 컴퓨터 1개
  • 내 노트북 1개 (그냥 싸고 가벼운거)
  • 대학원생 아이패드 1개 (그냥 싸고 가벼운거)

- 아이디어

  • 성능좋은 전북대 컴퓨터를 논리적으로 3개로 분리 $\to$ 이를 각각 (base) (py39jl17) (py38r40) 컴퓨터라고 하자.
  • 나는 (py39jl17)에 접속하여 파이썬 3.9와 줄리아 1.7을 설치한뒤 실습한다.
  • 대학원생은 (py38r40)에 접속하여 파이썬 3.8과 R 4.0을 설치하고 실습한다.
  • (base)는 예비용으로 아무것도 설치안한 깨끗한 상태 유지
  • 내가 뭘 실수해서 (py39jl17)컴퓨터가 망가졌으나 (py38r40)은 아무 타격없다.
  • 나는 (py39jl17)를 삭제하고 (base)로 부터 다시 새로운 컴퓨터를 복사하여 (py39jl17)을 다시 만든다.

모델3: 가상컴퓨터

- 여러분들 사례

  • 여러분들의 컴퓨터는 (base), (py39) 2개의 컴퓨터로 나누어져 있음
  • 여러분들이 (py39)에만 주피터랩을 설치
  • (py39)에 있는 ipython과 여러분의 크롬창이 서로 통신하면서 실습
  • 장점: 서로 다른 환경에 서로다른 파이썬과 R등을 설치할 수 있다. $\to$ 패키지간의 충돌이 최소화 (파이썬 입문 수업을 듣고, 이후에 파이썬을 이용하는 어떤수업을 들음)

모델4: 클라우드

- 사례1

  • 성능이 그저그런 컴퓨터 27개
  • 대학원생을 포함하여 쓸 사람은 5명
  • 한사람당 27/5(=5.4)대의 컴퓨터식 할당

- 사례2: 구글코랩

  • 구글에 여러가지 성능을 가진 컴퓨터가 $n$대 있음
  • $m$명의 사람이 $n$대의 컴퓨터에 접속
  • 적당히 컴퓨터 자언을 분배하여 사용

요약 및 정리

- 결국 (1) 컴퓨터에 (2) 파이썬을 설치하고 (3) 실행하는 과정은 생각보다 다양한 선택의 조합이 가능하다.

(1) 그냥 내 노트북에 파이썬을 설치할지? 내 노트북안에 가상컴퓨터를 만들고 거기에 파이썬을 설치할지? 학교의 데스크탑에 파이썬을 설치하고 쓸지? 설치를 안하고 구글컴퓨터에 설치된 파이썬을 난 쓰기만 할지?

(2) python설치할지? ipython를 설치할지? 어차피 가상환경을 쓸꺼니가 anaconda를 설치할지? 아니면 코랩쓸꺼니까 설치안할지?

(3) 어떤 IDE를 쓸지? IDE를 쓰지 않을지? 내가 IDE를 직접구성해서 만들지?

하지만 공통적으로 관통하는 원리가 있다

숙제

- 주피터랩에서 'myprod.py'파일을 만들고 1부터 5까지의 곱을 계산하는 코드를 작성후 %run myprod를 실행하여 출력결과를 확인