2. 인공지능 개발자가 되기 위한 위대한 첫 걸음

김건희·2022년 12월 13일
0

Fundamental

목록 보기
2/7

2-1. 위대한 첫 걸음

안녕하세요! 프로그래밍 첫 시간에 오신 것을 환영합니다. 🤗 오늘 우리는 앞으로 가장 많이 접하게 될 개발 환경에 대해 배워볼 예정입니다. 정말정말 중요한 날이라고 할 수 있죠! 가장 먼저, 우리가 다룰 개발 환경이 어떤 것인지 알고 가보겠습니다.

AIFFEL 온라인 LMS에서는 학생 여러분의 편의를 위해 클라우드 컨테이너 를 제공하고 있습니다. 여러분의 PC에 GPU가 장착이 되어있지 않더라도 클라우드를 통해 GPU등 가상의 컴퓨터 자원을 사용할 수 있습니다! 😆

LMS활용법에 대한 설명은 Ready to go? 의 LMS 200% 활용하기 스텝을 참고해 주세요!

💡 잠깐 컨테이너가 뭐지?
컨테이너는 가상머신과 비슷한 개념이지만 조금 다릅니다. 가상머신보다는 더 가볍고 효율적이죠. LMS에서 제공되는 클라우드 컨테이너는 학생 여러분이 사용하실 수 있는 "일회용 가상컴퓨터" 라고 말할 수 있습니다.

우리는 공부하거나 과제 실습을 진행할때 기본적으로 클라우드 환경을 사용할 것입니다. 사용할 클라우드 컨테이너에 설치된 개발 환경은 다음과 같습니다.

개인 PC에 GPU등 충분한 컴퓨팅 자원이 있다면 아래와 같이 개발 환경을 설정 해 주세요! 하지만 클라우드에서도 무리없이 실습을 진행할 수 있기 때문에 필수적인 사항은 아닙니다!

  • Ubuntu 20.04.3

  • Python 3.9.!

  • TensorFlow 2.6.0

제공되는 클라우드 환경에는 이미 위와 같은 환경이 모두 갖춰져 있습니다😀

음, 무슨 말인지 잘 모르겠다구요? 하나씩 차근차근 알아가보도록 해요.

(1) Ubuntu 20.04

첫 번째, 우분투(Ubuntu)는 리눅스 기반으로 만들어진 운영 체제를 뜻합니다. 리눅스, 운영 체제라.. 굉장히 컴퓨터 공학스러운 단어들이군요. 아쉽지만 오늘은 이 주제들에 대해 깊게 다루지는 않습니다. 대신 운영체제에 대해 재미있게 설명하는 다음 글을 읽으며 가볍게 알아보겠습니다. 한번 읽어볼까요?

운영체제(Operating System : OS)란 ? 운영체제 종류와 목적, OS 정복

네, 간단히 말하자면 운영 체제는 컴퓨터가 처리해야 하는 복잡하면서도 공통적인 기능들을 알아서 처리해주어 사용자가 신경쓰지 않아도 되도록 만들어주는 프로그램이라고 할 수 있습니다. 대표적인 예로, 우리는 컴퓨터를 켤 때마다 원래 저장되어 있던 파일이나 폴더 등을 하드디스크에서 꺼내서 쓸 수 있도록 준비하지 않아도 됩니다. 운영 체제 내의 부팅을 관리하는 프로그램이 알아서 바탕화면에서 바로 사용할 수 있도록 부팅을 할 때마다 준비해주기 때문이죠.

가장 많이 쓰이는 운영 체제로는 마이크로소프트에서 만든 Windows, 애플에서 만든 MacOS, 그리고 리눅스 토발즈가 만든 Linux 등이 있습니다. 우분투는 바로 이 Linux를 기반으로 만들어진 운영체제입니다. Linux를 기반으로 또다른 운영체제가 만들어질 수 있었던 이유는 바로 Linux가 자유롭게 수정 및 재배포가 될 수 있는 오픈소스기 때문입니다. 이와 달리 기업에서 만들어진 Windows와 MacOS는 자유롭게 수정 및 재배포 할 수 없습니다.

사실 오픈소스라는 특성 때문에 Linux로부터 파생된 운영체제는 우분투 외에도 Fedora, RedHat 등 무척 다양합니다. 이 중 우분투는 개인용, 또는 데스크탑 환경에 최적화 된 버전입니다. 그렇다면 우분투 뒤에 있는 20.04 라는 숫자는 무엇을 의미할까요?

우분투에 간단히 소개하는 다음 글을 하나 더 읽어보면서 답을 찾아보겠습니다.

Ubuntu(우분투)란? 무엇인가!

보통 많은 프로그램에서 뒤에 붙는 숫자는 버전을 나타냅니다. 버전을 나타내는 숫자가 꼭 배포된 날짜와 연관되어 있는 것은 아닙니다. 하지만 우분투는 특별히 날짜와 연관시켜 버전 번호를 매기며, 20.04는 2020년 4월에 나온 버전이라는 뜻을 갖고 있습니다.

운영체제, 리눅스, 우분투 등에 대해 자세하고 깊게 공부하려면 한 학기 분량이 나올 정도로 내용이 많습니다. 그만큼 잘 알고 있으면 개발 분야를 공부하는 데에 탄탄한 기초 지식이 되기도 하죠. 관심이 있다면 꼭 더 찾아보고, 조금 더 공부하는 것을 추천합니다!

(2) Python 3.9.7

두 번째, Python은 프로그래밍 언어를 뜻합니다. 개발 또는 프로그래밍을 처음 접할 때 가장 먼저 선택하게 되는 것은 주로 프로그래밍 언어일 것입니다. 어떤 언어로 개발을 시작하냐에 따라 나중에 깊게 들어갈 개발 분야가 크게 달라질 수도 있죠.

이번에는 프로그래밍 언어에 관한 흥미로운 영상 하나를 보겠습니다. 지금 당장 모든 언어들에 대해 자세히 알기보다는, 언어들의 생태계를 한번 이해해보면 좋을 것 같군요!




위 영상의 일부 내용에는 유튜버 개인의 주관이 포함되어 있기 때문에 모든 말이 정답이라고 할 수는 없습니다.

다만, 보다 범용적인 목적으로 만들어진 언어가 있는 반면, 특정한 문제를 풀기 위한 언어도 존재한다는 것은 분명한 것 같군요. 파이썬은 영상에서 설명했듯 범용적인 목적으로 만들어진 언어입니다. 비행기 진단이나, 병렬 처리 등을 위해 최적화된 것보다는 사용자가 원하는대로 아주 다양한 문제들을 풀 수 있도록 설계된, 자유도가 높은 언어이죠. 특히 AI 분야에서 파이썬은 매우 활발히 활용되고 있습니다. 머신러닝/딥러닝과 관련된 다양한 라이브러리들이 파이썬으로 개발되었고, 지금도 활발하게 성장하고 있기 때문입니다.

영상에서는 파이썬이 "오브젝트(object) 중심의 언어"라고 설명하는데, 이 내용이 지금은 이해가 되지 않더라도 괜찮습니다. 앞으로 파이썬을 활용하며 훨씬 깊게 배울 테니까요!

Python 뒤에 붙은 3.9는 버전을 나타냅니다. 소프트웨어 버전에서 소수점 이하 숫자가 바뀌는 것은 작은 변화를, 앞자리가 바뀌는 것은 큰 변화를 의미합니다. Python 2와 3은 꽤나 많은 차이를 가지는데, 2021년 현재 2.x 버전은 이제 거의 없어지고 있고, 대부분의 파이썬 코드가 3.x 버전으로 쓰이고 있습니다. Python 2와 3의 차이가 궁금하다면 꼭 찾아보는 것을 추천합니다!

(3) TensorFlow 2.6.0

마지막은 텐서플로우(TensorFlow)입니다! AI, 인공지능에 관심 있는 사람이라면 한 번쯤 들어봤을 것이라 예상합니다. 바로 머신러닝/딥러닝에 특화된 라이브러리이죠.

여기서 잠깐, 라이브러리(library) 란 무엇일까요? 라이브러리란, 특정 기능을 위한 여러 함수 또는 클래스를 담고 있는 보따리라고 설명할 수 있습니다. 즉, 특정 목적을 위해 필요한 비슷한 함수, 또는 클래스들을 편리하게 한 번에 꺼내어 쓸 수 있도록 한 곳에 모아둔 개념이죠. 라이브러리와 비슷한 개념의 단어로는 패키지(package), 모듈(module) 등이 있는데, 모듈은 조금 더 작은 개념으로 쓰이기도 합니다.

따라서, 다시 말하자면 텐서플로우는 머신러닝/딥러닝을 위해서 공통적으로 많이 쓰이는 함수 또는 클래스들을 한 곳에 모아놓은 보따리라고 볼 수 있겠습니다.

사실 머신러닝/딥러닝에 특화된 라이브러리는 텐서플로우 말고도 파이토치(PyTorch), 케라스(Keras) 등 여러가지가 있습니다. 각 라이브러리는 장단점이 있고, 분야에 따라 조금 더 선호되는 정도가 다릅니다. 인공지능을 공부하는 사람들 사이에서 라이브러리에 대한 선호가 다를 수 있으니, 다른 사람들과 라이브러리에 대한 생각을 나누어 이야기 해보는 것도 좋을 것 같습니다. 보통 많은 사람들이 특별히 좋아하는 라이브러리가 있어서, 각 라이브러리에 대한 장점을 마구 알려줄 수도 있으니까요!

텐서플로우의 버전은 2.6.0 을 사용할 예정입니다. 텐서플로우는 0.x 버전으로 시작해 2017년 1.0 알파 버전을 발표한 이후, 오랫동안 1.x 버전을 유지하다가 출시 2년이 넘은 지난 2019년 9월에 2.0 정식 버전을 내놓았습니다. 1.x 버전에서 2.x 버전으로 넘어오면서 몇 가지 큰 변화가 있었습니다.

(편집자 주: 본 노드 초안 작성 시점에 AIFFEL 콘텐츠는 텐서플로우 2.1.0 버전을 기준으로 작성되었습니다. 이후 텐서플로우 2.6.0 정식 버전이 출시되면서, 이후 AIFFEL의 콘텐츠 내 소스코드는 텐서플로우 2.6.0 버전을 기준으로 테스트되었습니다.)

다음의 공식 텐서플로우 문서를 한번 살펴보시죠!
Effective TensorFlow 2 | TensorFlow Core

가장 중요한 흐름은 훨씬 직관적이면서도 편리해졌다는 점입니다. 여러 가지로 분산되어 있던 API를 통합해 일관성을 키우고, 복잡한 코드가 필요했던 부분을 제거하여 깔끔하게 사용할 수 있게 하는 등 사용자를 위한 변화가 돋보입니다. 텐서플로우는 딥러닝을 배우면서 지속적으로 배우게 되니, 구체적인 내용에 대해서는 아직 조급해하지 않으셔도 됩니다.

어려운 내용을 갑자기 많이 접한 것 같습니다. 핵심만 정리하면 우리는 지금까지 많이 접했을 Windows 나 MacOS 가 아닌, 우분투라는 새로운 운영체제를 사용한다는 것입니다. 우분투 운영체제로 구성된 컴퓨터는 이전에 익숙하던 형태와는 다르기 때문에 간단한 것을 다루는 것부터 어색할 수 있습니다. 하지만 우분투는 사용자의 편의에 초점을 맞춰 개발된 운영체제로 편리한 사용이 특징인만큼, 익숙해지는 데에 오래 걸리지 않을 겁니다! 물론, 오늘 과정을 통해서도 많은 것을 배울 예정이죠!

즉, 우리는 우분투라는 운영체제 안에서 파이썬이라는 프로그래밍 언어로, 텐서플로우라는 딥러닝 프레임워크를 써서 여러가지를 배워나갈 예정입니다. 그러면 이제, 본격적으로 시작해보겠습니다!

2-2. 까만 화면에 흰 글씨, 해커만 쓰는 거 아니냐고? 나도 쓸 수 있다!

프로그래밍 또는 해커! 하면 뭐가 떠오르시나요? 보편적으로 까만 화면에 흰 글씨가 막 빠르게 적혀내려가는 그런 이미지를 많이 떠올립니다. 뭔가 대단한 것 같지만, 사실 생각보다 간단할 수도 있습니다. 이번 스텝에서는 이러한 것들을 처음 접해보고, 여러 가지로 다루는 법을 배워볼 것입니다. 먼저 그 까만 화면이 무엇인지 알아보겠습니다. 바로 다음과 같은 화면이죠.

저 화면의 공식 이름은 바로 터미널(Terminal) 입니다.

기본 값으로 배경화면이 까만색으로 설정되어 있기는 하지만, 사실 원하는대로 바꿀 수 있는 커스터마이징 기능을 지원하는 터미널도 많습니다.

개인 PC에 우분투 운영체제를 설치했다면 Ctrl+Alt+T로 간단하게 터미널을 실행시킬 수 있습니다. 하지만 우리는 클라우드 컨테이너를 주로 사용할 것입니다. 그렇다면 컨테이너를 제어할 터미널은 어떻게 실행 할 수 있을까요?

화면 오른쪽에 있는 토글 버튼을 눌러 클라우드 커널에 연결했다면! 위 사진의 초록색 박스 안에 있는 Cloud Shell 열기 버튼을 눌러서 터미널을 실행 할 수 있습니다. 이 터미널을 통해 클라우드에서 제공받은 가상 컴퓨터인 컨테이너를 제어할 수 있게 됩니다.

위와 같은 터미널 환경을 우리는 CLI(Command Line Interface) 라고 합니다. 직역하면 "명령 줄 장치"라고 할 수 있겠네요.

이 화면이 대체 어떤 것을 위한 프로그램인지 쉽게 감이 오지 않을 수 있지만, 사실 CLI는 간단히 말하자면 Windows의 탐색기, 또는 Mac의 파인더(Finder)와 비슷한 역할을 하는 친구입니다. 즉, 폴더나 파일을 관리하거나 실행하고, 또는 조금 더 나아가 여러 명령을 통해 복잡한 작업들을 수행할 수 있도록 하죠.

다만 Windows의 탐색기나 Mac의 파인더는 눈으로 폴더를 볼 수 있으며 마우스 클릭을 통해 원하는 동작들을 수행하는 반면, CLI 환경에서는 키보드로 작성하는 명령어를 통해 원하는 동작을 수행합니다. 그렇기 때문에 이름도 "Command-Line Interface"라고 하게 된거죠. 조금 감이 오시나요? 반대로, 전자처럼 사용자가 눈으로 확인하며 작업할 수 있는 환경은 GUI(Graphical User Interface)라고 합니다. 그래픽으로 표현된다는 뜻을 담고 있죠. 그렇다면 CLI 환경인 터미널을 바로 한번 사용해 봅시다! 우리는 앞으로 마우스 대신 키보드 명령어를 많이 사용하게 될 것이라는 점, 기억해 주세요!

먼저 우리가 앞으로 주로 사용할 프로그래밍 언어를 실행시켜보겠습니다. 우리가 사용할 프로그래밍 언어, 무엇이었죠? 🤔 네, 바로 파이썬이었습니다. 기억나시나요?

그렇다면 파이썬을 바로 사용해보지 않을 수 없겠습니다. 파이썬은 이미 설치가 되어 있을테니, 바로 터미널에 python3 이라는 명령어로 파이썬을 실행시켜봅시다. 파이썬 명령어는 학습 시스템에 입력하면 작동하지 않으니, 알려드린대로 CLI를 켜서 터미널에서 실행해 주시기 바랍니다.

$ python3

아래와 같은 결과가 나왔다면 성공입니다!

Python 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:20:46) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

결과로 나온 처음 세 줄은 파이썬이 실행되면서 나온 안내문입니다. 앞서 알아봤던 대로 3.9.7 버전을 사용하는군요. 맨 마지막에 나온 >>> 기호는 명령을 기다리고 있다는 표시입니다. 파이썬 쉘(shell)이 열려 여러분들의 명령을 기다리고 있습니다. 이제부터는 파이썬 문법에 맞는 명령어를 써야하죠!

파이썬 하면 어느 누구나 가장 먼저 한다는 Hello World, 우리도 한번 해볼까요?

>>> print("Hello World!")
Hello World

잘 출력되는군요. 그렇다면 이번에는 우리가 사용하는 딥러닝 프레임워크, 텐서플로우를 한번 불러와 보시죠.

>>> import tensorflow as tf

첫 줄의 import tensorflow as tf 는 앞으로 굉장히 많이 쓸 코드입니다. tensorflow라는 라이브러리를 tf 라는 이름으로 가져와줘! 라는 뜻이죠. 어떤 라이브러리를 가져오더라도 as 를 사용하면 tensorflow처럼 코드로 작성하기 어려운 긴 이름 대신 간단하면서도 짧은 이름으로 사용할 수 있습니다.

문제 없이 가져와 졌다면, 한번 버전을 출력해봅시다. tf.__version__을 출력하면 현재 사용하는 텐서플로우의 버전을 확인할 수 있습니다. 2.6.0 이 출력되셨나요?!

>>> print(tf.__version__)
2.6.0

이렇게 터미널 상에서 파이썬을 바로 실행해서 사용할 수 있습니다. 명령을 기다리고 있는 쉘을 종료하고 싶다면, exit() 또는 quit() 을 입력하면 됩니다.

>>> exit()

하지만 여기서 문제가 있습니다. 터미널 상에서 파이썬을 사용하면 코드가 한 줄 단위로 실행되기 때문에, 더욱 복잡한 코드를 다루기에는 분명한 한계가 있습니다. 이러한 한계를 극복하기 위해, 세상에는 다양한 IDE(Integrated Development Environment) 이 존재합니다. IDE란 통합 개발 환경의 줄임말 로, 다양한 코드 편집 기능이 있어서 코드 작성을 편리하게 해주고, 완성된 코드들을 자동으로 빌드해주며, 문제가 있을 경우 디버깅 또한 편리하게 할 수 있도록 도와주는 프로그램입니다.

IDE는 목적에 따라 성격이 조금씩 다른 여러 종류가 있습니다. 그렇다면 가장 많이 쓰이는 파이썬 IDE는 무엇이 있을까요? 다음 글에서 확인해봅시다.

12 Best Python IDEs and Code Editors in 2022

아주 다양한 IDE가 존재한다는 것을 알 수 있습니다. 이미지도 유심히 보셨다면, 그 화면들이 코딩을 하기에 최적화된 화면인 것을 확인하실 수 있죠. 아마 앞으로 실습 과제는 터미널에서 바로 파이썬을 실행시켜 작성하기보다 IDE를 통해서 많이 작성하게 되실 것입니다.

가장 많이 쓰이는 IDE는 위와 같지만, 개인의 취향에 따라 각각 선호하는 IDE가 서로 다른 경우도 많습니다. 무엇보다, 다양한 것들을 경험해보고 나에게 맞는 것을 찾는 것이 좋습니다. 과연 내가 좋아하게 될 IDE는 무엇일까요? 궁금하다면 먼저 검색해 보는 것은 어떨까요?! 😆

지금까지 터미널에서 파이썬을 간단하게 다뤄 보고, 더 편리하게 코딩을 할 수 있도록 도와주는 IDE라는 개념도 알아 보았습니다. 그렇다면 이제 터미널을 조금 더 다뤄보는 다음 단계로 넘어갈 텐데요, CLI를 처음 다루는 분들을 위해 간단한 튜토리얼을 먼저 읽어 보겠습니다.

직접 따라하기 전에 한번 훑어본 후, 다음 스텝들에서 직접 따라하시다보면 어느새 터미널을 자유자재로 다루고 있는 자신을 발견할 수 있을 겁니다!

2-3. 터미널을 자유자재로, 내 친구 삼기

글을 모두 잘 읽어보셨나요? CLI 환경인 터미널에 대해 설명한 내용과, 기본적인 명령어에 대해 알아보았습니다. 그렇다면 글에서 나온 순서대로 우리도 함께 따라가 보겠습니다. 가장 먼저, 터미널을 어떻게 실행시켰었죠?

화면 우측 하단의 맨 위 Cloud Shell 열기 버튼을 눌러 주세요!

💡 터미널(terminal), 쉘(shell)? 무슨 차이지?

클라우드 터미널이라고 하다가 클라우드 쉘이라고 하니 헷갈리셨나요? 어렵게 생각하실 필요는 없어요! 터미널 위에 쉘이 실행되는 것입니다. 터미널은 명령을 입력하는 쉘을 실행하기 위한 토대입니다. 터미널이 TV라면 쉘은 방송입니다. TV가 켜짐과 동시에 방송이 나오는 것처럼 터미널이 실행됨과 동시에 쉘이 실행되는 것이죠!.😀

터미널과 쉘에 대해서 더 궁금하시다면 해당 링크를 참고해 주세요! 터미널, 콘솔, 쉘의 차이점

(1) 가장 첫번째 명령, 내 이름을 보여줘!

파이썬 쉘은 아직 여실 필요 없어요.

$ whoami

whoami 명령어를 치면 현재 컴퓨터의 유저 이름이 출력됩니다. 여러분은 어떤 이름이 나오셨나요?

💡 잠깐! 명령어를 치려고 하는데 커서 앞에 $은 뭐지?

이는 사용자의 명령을 받아들일 준비가 되었음을 나타내는 표시입니다. 이는 현재 로그인한 유저 정보를 나타냅니다.

(2) 내 현재 위치는 어디야? 경로를 출력해줘!

$ pwd
/aiffel

현재 터미널에서 위치해있는 경로를 알고 싶을 때에는 pwd 명령어를 입력하면 됩니다. 클라우드 터미널을 켠 직후 현재 위치를 출력하면, 위와 같이 /aiffel이라는 디렉토리에 위치해 있을 것입니다. 이곳이 바로 클라우드 컨테이너의 Home 디렉토리이며 ~ 라는 약어로 나타내기도 합니다. 참고로, 디렉토리(Directory) 는 일반적으로 이야기하는 폴더와 같은 단어입니다.

다시 한번 이 글을 보고, 질문에 답해보세요.

  • Command Line 시작하기

    네, pwd 는 Print Working Directory, 즉 "현재 디렉토리(폴더)를 출력하라"라는 뜻의 줄임말입니다. 꽤나 직관적이죠? 앞으로 수많은 명령어를 익히고 사용하실 텐데요, 이렇게 각 명령어가 어떤 말의 줄임말인지를 아는 것은 더 많은 명령어를 쉽게 외우는 것에 도움이 될 겁니다.

(3) 현재 디렉토리 내에 있는 모든 파일 목록을 보여줘!

$ ls
aiffel  data

ls 는 List의 줄임말로, 현재 디렉토리 내의 모든 파일 또는 하위 디렉토리의 목록을 모두 출력합니다. GUI 환경에서는 특정 폴더를 더블클릭해서 폴더에 진입하게 되면 그 폴더 안에 어떤 것들이 있는지 그래픽으로 바로 볼 수 있지만, CLI 환경에서는 그렇지 않죠. 그래서 현재 폴더에 어떤 파일 또는 다른 폴더가 있는지 보기 위해서는 ls 명령어를 통해 확인해야 합니다.

각 파일 또는 폴더에 대한 좀 더 자세한 목록을 보고싶다면 약간의 옵션을 추가해주면 됩니다. 다음 명령어를 입력해보세요.

$ ls -al
total 32
drwxr-xr-x 1 root root 4096 Jun  9 02:38 .
drwxr-xr-x 1 root root 4096 Jun  9 02:38 ..
drwxrwxrwx 2 root root    0 Jun  1 07:53 aiffel
drwxr-xr-x 1 root root 4096 Apr 19 09:30 .cache
drwxrwsr-x 2 root root 4096 Apr 19 09:30 .conda
drwxr-xr-x 6 root root 4096 May 24 09:42 data
drwx------ 1 root root 4096 Apr 19 09:23 .jupyter
drwxr-xr-x 3 root root 4096 Jun  9 02:38 .local
-rw-r--r-- 1 root root  170 Apr 19 09:28 .wget-hsts

위와 같이 조금 더 복잡하고 이전에는 나오지 않았던 목록들이 출력되었나요? 기본 명령어 뒤에 - (dash) 하나를 입력 후 추가 명령어를 입력하면 세부 옵션을 설정할 수 있습니다. - 뒤의 a 는 숨김 파일까지 모두 출력하라는 옵션이고, | 은 자세히(long format) 정보를 출력하라는 의미를 가지고 있죠. 터미널에서 숨김파일은 파일/폴더명 앞에 . 이 붙게 되므로, 이전에는 나오지 않았던 여러 목록들까지 출력이 된 것을 확인할 수 있습니다. 각 줄에 길고 복잡하게 출력된 정보는 어떤 의미를 가질까요? 다음 글에서 확인해 봅시다.

(4) 원하는 디렉토리로 이동해보자! 더블클릭!

$ cd aiffel
$ pwd

/aiffel/aiffel

GUI 환경에서 원하는 디렉토리로 이동하고 싶을 때는 어떻게 했었죠? 눈에 보이는 폴더를 더블클릭해서 들어갔을 겁니다. 하지만 앞서 말씀드렸듯 CLI 환경에서는 더블클릭을 할 수 없기 때문에 폴더를 이동하는 것 또한 명령어로 진행해야 합니다. 그걸 하게 해주는 명령어가 바로 cd 입니다. cd 는 Change Directory, 즉 디렉토리 변경의 줄임말이죠. cd 명령어 뒤에 이동하기를 원하는 디렉토리 이름을 입력하면 그 디렉토리로 이동합니다. 앗 그렇다면, 방금 들어온 폴더에서 상위 폴더로 이동하고 싶다면 어떻게 할까요?

$ cd ..
$ pwd

/aiffel

cd 뒤에 원하는 디렉토리의 이름 대신, .. 을 입력하면 상위 폴더로 나가게 됩니다.

잠깐, 저 위에서 aiffel 디렉토리가 보이시나요? 이 위치를 Home 디렉토리라고 하며, ~ 라는 약어로 이 위치를 나타내기도 한다고 했었죠. 다음 명령어를 한번 실행해봅시다.

(5) 새 폴더 만들기, 또는 폴더 삭제하기

폴더를 이동하는 것뿐만 아니라, 원하는 폴더를 만들거나 삭제할 수도 있어야겠죠. 다음 명령어를 실행해봅시다.

$ mkdir new_folder
$ ls

aiffel  data  new_folder

mkdir 은 직관적으로 봐도 Make Directory로 보이는군요. new_folder라는 이름의 폴더를 생성한 후 ls 명령어로 목록을 다시 출력하면 new_folder 라는 디렉토리가 새로 생긴 것을 확인할 수 있습니다.

그렇다면 폴더 삭제는 어떻게 할까요?

$ rm -r new_folder
$ ls

aiffel  data

rm -r 명령어 뒤에 삭제하길 원하는 디렉토리 명을 입력하면 삭제가 되죠. rm은 Remove의 줄임말입니다. -r 옵션은 디렉토리를 삭제할 때 필요한데요, 하위 디렉토리와 파일까지 모두 삭제하라는 것을 의미합니다. 디렉토리가 아닌 일반 파일을 삭제할 때에는 rm 명령어만 입력하면 됩니다.

참고로 -r 옵션은 Recursive라는 의미로, 디렉토리 내부의 모든 파일 및 폴더에 대해 재귀적(반복적)으로 명령을 수행하라는 의미를 가집니다. 그렇기 때문에 디렉토리에게는 -r 옵션이 필요하고, 개별 파일에게는 -r 옵션이 필요 없는 것이죠!

(6) 파일을 원하는 곳으로 옮기거나, 복사하기

우리가 마우스로 파일을 원하는 곳으로 옮길 때는 어떻게 하죠? 간단히 드래그-앤-드롭을 하면 됩니다. 그렇다면 CLI 환경에서는 어떻게 파일이나 디렉토리를 옮길 수 있을까요? 새로운 폴더를 만든 후, 원하는 곳으로 옮겨봅시다.

$ cd ~
$ mkdir new_folder
$ mv new_folder aiffel

무슨 일이 벌어진걸까요? new_folder 디렉토리를 새로 만들어준 후, 우리는 mv 명령어를 이용해서 new_folder 디렉토리를 aiffel 안으로 옮겼습니다.

mv 명령어는 영어 단어 Move를 줄여서 만든 것임을 어렵지 않게 추측할 수 있죠. 파일이나 디렉토리를 옮기고 싶을 때에는 mv 명령어 뒤에 이동하고 싶은 파일, 이동할 목적지 디렉토리를 순서대로 입력해주면 됩니다. 잘 옮겨졌는지 aiffel로 가서 확인해볼까요?

$ cd aiffel
$ ls

new_folder

ls 를 입력해서 new_folder 가 목록에 나온다면 성공한 겁니다. 어때요, 간단하죠? 같은 원리로 파일 또는 디렉토리를 복사하는 것도 매우 간단합니다. 다음 명령어를 이용하면 되죠.

$ cp -r new_folder ..
$ cd ..
ls

aiffel  data  new_folder

첫번째 명령어에서 우리는 new_folder.. 의 위치, 즉 상위 폴더에 복사했습니다. 물론 cp 는 Copy의 줄임말이죠.

다만, 여기서 한 가지 주의할 점은 cp 명령어는 rm(삭제) 명령어와 같이 디렉토리를 복사할 때 -r 옵션을 추가해주어야 복사하려는 디렉토리의 하위디렉토리까지 함께 복사한다는 점입니다. 개별 파일을 복사하고 싶을 때에는 -r 이 필요없죠.

여기까지 우리는 기본적인 터미널의 명령어, Shell Command에 대해 익혀 보았습니다. 정말 간단하죠? 다음 실습 문제를 한 번 스스로 해보며 복습을 해보면, 터미널에서 원하는 동작은 거의 다 할 수 있게 됩니다.



2-4. Terminal, 또 무엇을 할 수 있을까?

지금까지 간단하게 터미널을 다뤄보았습니다. 이번 단계에서는 터미널에서 할 수 있는 좀 더 심화된 동작을 알아보겠습니다.

터미널에서 할 수 있는 중요한 한 가지는 패키지 설치 및 관리입니다.

💡 우리 LMS를 쓸 때도 매번 패키지를 관리해줘야 하나요?

로컬 환경에서 실행한다면 실습에 필요한 패키지를 직접 설치하고 관리해야합니다. 하지만 클라우드 환경에서 실습을 진행한다면 이미 필요한 패키지들이 설치되어 있습니다. 😊

실습을 진행하다가 추가적으로 필요한 패키지가 있다면 클라우드 터미널을 통해서 직접 설치하시면 되지만 커널 초기화시 설치한 패키지는 유지되지 않습니다. 그 점 유의해 주세요!

패키지(Package) 란, 간단히 말해서 특정 기능을 하는 작은 프로그램 단위입니다. 위에서 설명한 라이브러리와도 일맥상통하는 개념이죠. 패키지가 조금 더 큰 범위를 포괄한다고 볼 수도 있지만, 두 용어를 같은 의미로 쓰기도 합니다.

개발을 하다보면 다양한 패키지들이 필요합니다. 패키지는 우리가 다운 받아 사용할 수 있는 다양한 툴을 제공하기 때문에, 효율적인 개발 작업을 위해서는 많은 패키지들을 설치하거나 삭제하는 등 자유자재로 관리할 수 있어야 합니다.

우분투에서 패키지를 관리하기 위해 주로 쓰이는 명령어는 apt-get 입니다. 다음 글을 통해 명령어를 확인해보시죠.

Ubuntu apt-get 명령어 사용법


퀴즈의 답을 찾는 과정에서 apt-get 명령어에 대해 조금 더 자세히 알게 되었을 것이라 기대합니다.

그렇다면 직접 패키지를 설치해서 사용해보지 않을 수 없겠죠! 바로 실습을 진행해 봅시다.

먼저 지금까지 설치된 패키지의 리스트를 한 번 확인해 봅시다.

$ sudo apt list --installed

Listing...
acl/xenial,now 2.2.52-3 amd64 [installed]
adduser/xenial,xenial,now 3.113+nmu3ubuntu4 all [installed]
...

sudo apt list --installed 명령어를 입력하면 설치된 패키지의 목록이 차례로 출력됩니다.

여기서 추가 팁 하나!

$ sudo apt list --installed | grep acl

acl/bionic,now 2.2.52-3build1 amd64 [installed]
...

sudo apt list --installed 명령어 뒤에 | grep (패키지명) 을 입력해주면 검색하는 단어를 포함하는 패키지만 출력됩니다. 보통 아주 많은 패키지가 설치되어 있기 때문에 원하는 패키지의 설치 여부를 확인하려면 눈이 빠지게 리스트를 조사해야 하죠. 이럴 때 grep 옵션을 사용하면 편리하게 원하는 패키지만 검색해 볼 수 있답니다!

컴퓨터에 설치된 패키지 인덱스 정보를 업데이트 하려면 다음 명령어를 실행합니다. 아래 명령어는 주기적으로 실행시키는 습관을 가지는 것이 좋습니다.

$ sudo apt-get update

다음 명령은 모든 패키지에 대해, 새롭게 업데이트 된 버전이 있다면 전부 업그레이드를 하는 명령어입니다. 하지만 패키지를 최신 버전으로 업그레이드 하는 것은 언제나 기존에 함께 사용되던 패키지들과의 충돌을 야기할 수 있기 때문에, 주의해야 합니다.

$ sudo apt-get upgrade

그러면 이제 진짜 패키지를 한번 설치해볼까요? 첫 번째로 cmatrix 라는 패키지를 설치해 보겠습니다. 다음 명령어를 실행시켜주세요!

$ sudo apt-get install -y cmatrix

-y 라는 옵션은 설치 중간중간 나오는 질문들에 대해 모두 yes 로 답하겠다는 옵션입니다. -y 를 빼고 입력해서 중간 중간 직접 yes 를 입력해줘도 됩니다.

모두 설치가 되셨나요? 그렇다면 바로 실행해보죠! 과연 무슨 일이 일어날까요?

$ cmatrix


[cmatrix 실행화면 - 코드 비가 내린다. . .]

멋있는 해커들이나 다룰법한 화면이군요.. 😉

프로그램을 종료하고 싶다면 ctrl + c 를 누르면 됩니다.

지금까지 우리는 Ubuntu의 명령어로 패키지 리스트를 확인하고, 설치도 해보았습니다. 만약 패키지를 삭제하고 싶다면 어떻게 해야할까요?

$ sudo apt-get remove cmatrix

간단하게 remove 명령어로 삭제할 수 있답니다! 이제 앞으로 우리는 원하는 패키지를 설치하거나, 삭제하고, 또 목록을 뽑아 확인할 수 있게 되었습니다.

2-5. 가상환경으로 패키지를 조금 더 유연하게 관리해보자

오늘 마지막으로 배워볼 개념은 바로 가상환경입니다! 우리가 바로 직전에 사용해봤던 패키지를 조금 더 유연하게 관리할 수 있는 환경이죠. 가상환경이 무엇인지, 그리고 파이썬에서 가상환경을 다루는 방법이 무엇인지 다음 글을 통해 살펴보겠습니다.

파이썬 코딩 도장

가상환경은 프로젝트마다 특정 패키지의 서로 다른 버전이 필요하거나 패키지 간 충돌이 생길 위험이 있을 때, 각 프로젝트를 독립된 공간에서 사용할 수 있도록 하기 위한 기능입니다. 충돌이 생기기 전에, 애초에 프로젝트 간 공간을 나누어 놓겠다는 의도를 담고 있죠.

여기서 잠깐, 앞으로 명확하게 이해해야 할 용어들을 정리하고 넘어가 보겠습니다.

  • 패키지(package) 특정 기능을 위한 여러 함수 또는 클래스를 담고 있는 보따리로서, 라이브러리(library), 모듈(module)과 비슷한 개념 (다만 모듈은 조금 더 작은 개념으로 쓰이기도 함)

  • 가상환경(virtual environment) 컴퓨터에 설치된 패키지 간의 충돌 또는 패키지 버전에 의한 이슈 등을 방지하기 위해 가상으로 나누어서 사용하는 환경 즉, 특정 프로그램을 돌리기 위해 필요한 패키지들을 모아 만든 각각의 독립된 방과 같은 개념

파이썬 가상환경을 관리하는 툴은 pyenv, pip, anaconda 등 다양합니다. 우리는 이 중 아나콘다(Anaconda) 가상환경 관리자를 사용해 볼 예정입니다. 아나콘다는 데이터 사이언스와 관련된 여러 라이브러리를 포함하여 사용하기 편리합니다. 아나콘다를 설치하는 것부터, 가상환경을 생성 및 사용해보는 법을 천천히 따라해 봅시다.

(1) 아나콘다 설치

클라우드 환경에서는 아나콘다와 실습에 필요한 모든 패키지가 설치되어있는 상태입니다. 그렇지만 설치하는 방법을 익혀두시는 것을 추천드립니다!

Ubuntu 20.04 - Anaconda 설치 및 가상환경 구축

블로그 글을 한번 읽어 보시고 클라우드 터미널에서는 이미 설치된 conda의 버전을 확인해 봅시다!

$ which conda /opt/conda/bin/conda

여기서 which 명령어는 프로그램 설치 경로를 확인하는 것입니다. 윈도우즈에서는 where를 사용합니다. 프로그램 설치 여부와 경로를 확인하는데 유용하니 알아두세요.

아래 명령어로 설치된 아나콘다 버젼을 확인할 수 있습니다.

$ conda --version
conda 4.10.3

(2) 가상환경 생성 및 실행

이제 가상환경을 직접 만들어 봅시다. 명령어는 모두 간단하니, 다음 글을 통해 확인해보세요.

Create virtual environments for python with conda

그렇다면 우리의 가상환경을 한번 만들어볼까요?

$ conda create -n my_env_name python=3.9.7

-n 뒤에 my_env_name 과 같이 원하는 가상환경의 이름을 입력하면 됩니다. python=3.9.7 은 이 가상환경에서는 3.9.7 버전의 python을 사용하겠다는 의미입니다. 가상환경이 잘 만들어졌는지 가상환경 리스트를 확인해봅시다.

$ conda env list

# conda environments:
#
base                  *  /opt/conda
my_env_name              /opt/conda/envs/my_env_name

가상환경 리스트에 방금 만든 환경이 나타났다면 성공입니다! * 는 현재 가상환경으로 어떤 환경을 사용하고 있는지 나타냅니다.

가상환경을 사용하려면 만든 후에 activate 을 해줘야 합니다. 가상환경을 설명할 때 "독립된 공간"이라고 설명했던 내용 기억나시나요? activate 은 문을 열고 그 공간에 들어가는 개념으로 생각하면 됩니다.

$ conda activate my_env_name

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

$ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.

클라우드에서는 위와같은 에러가 뜰 테지만 당황하지 마시고 conda init 명령어를 실행후 터미널을 재실행 합니다!

$ conda init

이제 터미널을 재실행 해주세요!

$ conda activate my_env_name

(my_env_name) root@wobqrt210kek94cki3g4i8hr5-6bfb9c97d9-6zfxd:~# 

$ conda env list

# conda environments:
#
base                     /opt/conda
my_env_name           *  /opt/conda/envs/my_env_name

다시 리스트를 확인해보면 우리의 가상환경이 활성화 된 것을 확인할 수 있습니다. 이제 새로운 가상환경에 필요한 라이브러리들을 이것저것 설치해서 이 공간을 꾸밀 수 있습니다!

먼저 이 가상환경 내에 기존에 설치되어 있는 라이브러리 리스트를 확인해볼까요?

$ pip list
Package    Version
---------- -------------------
pip              21.3.1
setuptools 58.4.0
wheel         0.37.0

여러 가지 라이브러리가 이미 설치되어 있네요. 이 가상환경 내에 텐서플로우(TensorFlow)도 설치되어 있을까요? 검색해봅시다.

$ pip list | grep tensorflow

위에서 사용해봤던 것처럼, grep 명령어를 사용하면 원하는 키워드를 검색할 수 있습니다.

그렇다면 새로운 가상환경에 텐서플로우를 설치해봅시다. 텐서플로우를 원하는 버전으로 설치하고 싶다면 다음과 같이 버전을 지정해 입력해주면 됩니다.

$ pip install tensorflow==2.6.0

(참고) GPU 버전의 텐서플로우를 설치하려면 pip install tensorflow-gpu로 지정해 주어야 합니다.

모두 설치한 후 다시 리스트를 확인해봅시다.

$ pip list | grep tensorflow

tensorflow           2.6.0

리스트에서 tensorflow가 나타난다면 정상 설치 된 것입니다. 이렇게 각각의 가상환경을 만들어서 패키지의 종류와 버전을 관리할 수 있죠! 예를 들어 여러분들이 AIFFEL에서는 텐서플로우2를, 개인 프로젝트에서는 텐서플로우1을 사용하고 싶으시다면, 서로 다른 가상환경을 만들어 관리하면 됩니다.

하나의 가상환경을 종료하고 싶다면, deactivate 명령어를 사용하면 됩니다. 문을 닫고 바깥 공간으로 나오는 것이라고 생각하시면 됩니다.

$ conda deactivate

가상환경을 잘못 만들었다면 다음 명령어로 삭제할 수 있습니다.

$ conda env remove -n my_env_name

이 외에도 아나콘다를 다루는 다양한 명령어는 다음과 같은 cheatsheet에서 확인할 수 있습니다.

Conda Cheat Sheet

개인 공간에 저장해두고 필요할 때 사용하는 것도 좋은 방법입니다!

2-6. 마무리

오늘의 학습은 여기까지입니다. 오늘 진행했던 Step 1 부터 Step5 까지 어떤 것들을 새로 배웠는지 정리해볼까요?

Step 1. 인공지능 개발자가 되기 위한 위대한 첫 걸음 에서는 운영 체제와 개발 환경에 대한 개념을 익히고, Ubuntu, Python, Tensorflow 등에 대해 알아보았습니다.

Step 2. 까만 화면에 흰 글씨, 해커만 쓰는 거 아니냐고? 나도 쓸 수 있다! 에서는 CLI의 개념을 배우고, 터미널에서 Python을 실행해보았죠. IDE도 배웠습니다!

Step 3. 터미널을 자유자재로, 내 친구 삼기 에서는 Linux 터미널에서 사용하는 명령어를 익히고 CLI 환경에 조금 더 익숙해졌습니다.

Step 4. Terminal, 또 무엇을 할 수 있을까? 에서는 명령어를 이용해 패키지를 설치하고 실행하는 법을 배웠습니다.

Step 5. 가상환경으로 패키지를 조금 더 유연하게 관리해보자 에서는 가상환경의 개념과 필요성을 알아보고, 설치해서 가상환경을 만들어보았습니다.

다양한 것들을 많이 배웠군요.

다음 시간에는 또 어떤 유용한 것들을 배우게 될까요? 그럼, 열심히 복습해서 다음 시간에 다시 만나겠습니다! 😉

profile
게임광 AI 그루~~

0개의 댓글