♣ 이번 Episode는 이번 주 평일 이내에 아직 진행하지 않은 노드의 일부분을 다룹니다.
♣ Python Master 내용과 겹치는 부분은 최대한 편집하고 새로운 내용 위주로 다루었습니다.
<4.16~4.21 - 파이썬의 다양한 자료형>
- NoneType : 이 자료형에 속한 값은 None이 유일하다.
- 0과 None은 서로 다른 개념을 갖는다. 0은 휴지심은 있고 휴지만 없는 상태라면, None은 휴지심조차 없는 상태를 말한다.
- NoneType는 함수의 반환값으로 아무것도 정의하지 않을 경우에 나오는 오류이다.
- NoneType는 프로그램 런타임 안에 그 어떤 것으로도 정의되지 않는 유형을 정의하는 데 필요하다.
- Boolean : 이 자료형에 속한 값은 True, False 단 2개이다.
- (심화) print(not not True) = True이다. 'not not ~' 자체에 오류는 없다.
- 0, None은 Boolean에서는 False, 그 외에는 대부분 True
- append(), remove(), pop() 구문의 사용 방법 및 용도

- 딕셔너리가 주어졌을 때, 일반적으로 값만 단독으로 뽑아낼 수는 없다. 단, 키만 단독으로 뽑아낼 수는 있다. 혹은 items() 구문을 이용하여 키와 값을 모두 출력할 수 있다.

10. (★★★) 총정리


<4.22~4.24 - 심화문제 풀이>
- 4.22~4.23 재귀함수와 치킨, 피보나치 : 피보나치 함수에 대한 값을 출력하는 방법이다. 여기서 프로그램 개발자는 임의의 정수 하나를 입력 받아서 주어진 코드를 거쳐 피보나치 함숫값을 출력해낸다.

- 4.24 더 빠르게!
- 스코프(Scope) : 특정 위치에서 어떤 변수에 접근할 수 있는지, 한 곳에서 정의된 변수가 어디까지 유효한지 정의된 범위
- 메모이제이션(memoization) : 프로그래밍에서 중간 계산값을 기억해 두었다가, 계산 과정에서 기억해둔 값을 그대로 읽어쓰며 계산에 걸리는 시간을 최소화하는 기법
<3.9~3.10절 - 리눅스 터미널, 프로세스 관리, 시스템 콜>
- 터미널 에뮬레이터 : 그래픽 환경에서 터미널을 모사하는 소프트웨어
- 터미널 : 컴퓨터에 정보를 입출력하는 소프트웨어 및 하드웨어로서의 역할을 하는 장치
- (참고) 우분투 18.04 이상에서는 로그인한 사용자의 그래픽 환경을 터미널에 2번 붙여둔다.
- 리눅스 프로세스 관련 명령어 : grep, sudo, kill
- grep : 입력으로 전달된 내용에서 특정 문자열을 포함한 줄만 선택해서 출력하는 명령어
- (참고) '|' 를 통해 다른 명령문 실행결과와 결합해서 사용
- sudo : 후위 명령을 최고 관리자 권한으로 실행
- 유닉스 계열 운영체제에서 주로 사용
- 일반 사용자가 잠시 최고 관리자 권한으로 작동할 수 있게 도와준다.
- 매번 확인해야 하는 단점이 있으나 이를 통해 실수를 면하기 위한 기회를 준다.
- 일부 권한만 허용할 수도 있어 보안상으로 좋다.
- sudo 명령을 실행하기 위해, sudo라는 동일한 이름의 그룹에 속해있어야 한다.
- kill : PID에 해당하는 프로세스에 신호를 보내는 데 사용
- (참고) PID : Process ID 번호
- 시스템 콜 : 프로세스가 커널에게 요청을 전달하는 기능
<3.11~3.12절 - 리눅스 프로그램과 환경변수, 패키지 관리자>
- which 명령어 : 명령어의 전체 경로를 출력
- 환경변수 : 운영체제가 프로세스 단위로 사용하는 변수
- (명령어 해석) echo $PATH : PATH라는 이름의 환경변수의 값을 출력(echo)하라.
- export 명령어 : 셸의 변수나 함수를 현재 환경으로 내보낸다.
- env 명령어
- 명령어 제공 : 해당 명령어를 새로운 환경에서 실행
- 명령어 미제공 : 현재 환경의 정보를 출력
- 패키지 관리자 : 공인 저장소에 있는 프로그램과 라이브러리를 패키지단위로 설치, 관리할 수 있도록 하는 프로그램
- apt-get 명령어 : APT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거할 수 있다.
<3.13절 - 리눅스 사용자와 권한>
- cat 명령어 : 하나 이상의 텍스트 파일을 순서대로 출력
- chown 명령어 : 대상 파일의 소유 사용자와 그룹 변경
- d, r, w, x?

- chmod 명령어 : 대상 파일의 권한을 변경
<3.14~3.16절 - 간단한 하드웨어>
- (참고) CPU 칩이 만들어지는 과정
[https://www.youtube.com/watch?v=6-tKOHICqrI]
- 기계어 : CPU 칩이 처리할 수 있는 명령어
- 기계어로 직접 프로그램을 짜는 것은 꽤 복잡하여 비효율적이다.
- 컴파일(Compile) : Python 등과 같이 인간이 이해할 수 있는 언어로 짠 프로그램을 CPU에서 실행할 수 있는 기계어로 번역하고 최적화하는 과정
- 명령어 집합 : 지원하는 연산 set, 데스크탑 CPU에서 호환성이 높다.
- 클럭(clock) : 초당 처리속도의 기준으로 CPU 성능을 판단하는 척도에 속한다.
- GPU(Graphical Processing Unit) : CPU에 비해 이해할 수 있는 명령어는 적지만 코어의 수를 늘리는 방법으로 다차원의 행렬 연산에 특화
- (★★★) 딥러닝에서는 그래픽 연산과 유사하게 다차원 행렬 계산이 필요한 부분이 있어서 GPU를 많이 사용하지만, 구글의 딥러닝 전용으로 개발된 TPU(Tensor Processing Unit)와 같은 전용 칩이 개발되고 있다.
- RAM : 컴퓨터의 주 저장장치. 비싼데다 용량 늘리기도 어렵고 휘발성이다.
- HDD, SSD(Solid State Drive) : 컴퓨터의 보조 저장장치. 비교적 저렴하고 비휘발성으로 데이터가 보존된다.
- (참고) 딥러닝에서 데이터를 읽어오는 데 시간이 많이 걸린다면?
- 저장장치를 SSD로 변경
- 여러 개의 스레드를 사용하여 RAM 메모리에 올려두기
- 클라우드 컴퓨팅 : 인터넷상의 서버를 통하여 데이터 저장, 네트워크, 콘텐츠 사용 등 IT 관련 서비스를 한 번에 사용할 수 있는 컴퓨팅 환경 (출처 : 네이버 사전)
- 관련 참고 및 검색해보기 : Amazon Web Services
- 가상화(Virtualization) : 하나의 컴퓨터를 쪼개 여러 대의 컴퓨터가 있는 것처럼 사용하는 기술
- 호스트(Host) : 실제 물리적 서버
- 게스트(Guest) : 호스트 내부 가상 서버
- 가상화의 종류 : 가상머신 가상화, 컨테이너 가상화
- 가상머신 가상화 : 게스트 자체에 운영체제가 돌아감
- 컨테이너 가상화 : 호스트의 운영체제 커널만을 공유, 프로세스나 자원 등은 서로 격리되어 서로 간섭할 수 없도록 하는 것
<3.17~3.18절 - 셸 심화 I : 편리한 기능 및 셸 스크립트>

- sort 명령어 : 입력된 텍스트를 줄 단위로 정렬
- 셸 텍스트 처리 관련 필수 명령어들
- echo : 뒤이어 입력한 내용을 출력
- cat : 하나 이상의 텍스트 파일을 순서대로 출력
- 셸 파일 제어 및 이동 관련 필수 명령어들
- ls : 현재 디렉토리 내의 파일 및 폴더들을 출력
- cd : change directory, 뒤따라오는 폴더로 현재 있는 셸의 위치를 이동
- cp : 파일 복사
- mv : 파일 이동
- rm : 파일 삭제 (폴더 삭제 시 rm -r / 내부까지 모두 삭제 rm -f)
- 셸 시스템 및 프로세스 제어 관련 필수 명령어들
- sudo : 이어지는 명령을 최고 관리자 권한으로 실행
- apt-get : APT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거
- 셸 기타 필수 명령어들
- ssh : 원격으로 셸에 접속
- watch : 이어지는 명령을 주기적으로 실행하고 표시