프로그래밍 일기 — Python

배우는 자(Learner Of Life)
15 min readJul 6, 2023

--

백엔드의 마법 주문을 배워보자

#Python, #CLI, #객체지향언어, #백엔드, #풀스택, #데이터분석, #Terminal

1975년에 “Monty Python”이라는 코미디팀이 내놓은 영화 <Monty Python and the Holy Grail>(10

1975년에 “Monty Python”이라는 영국 코미디팀이 내놓은 영화 <Monty Python and the Holy Grail>은 성배(Holy Grail)을 찾아떠나는 아더왕과 원탁의 기사 스토리를 익살스럽게 풀어놓은 명작이다. 이 코미디팀을 매우 좋아했던 개발자 Guido Van Rossum는, 그 Python이라는 이름이 그에게 매우 간결하면서도 쉽게 잊혀지지 않았는지 그가 새롭게 개발한 언어의 이름을 Python이라 지었다(2).

Python은 이렇게해서 탄생했다. 오늘날 이 Python이라는 언어는 특히 데이터 사이언스 혹은 AI로 대표되는 분야가 핫해지면서 그 위상이 매우 크게 올라간 언어 중 하나이다. 또한 현존하는 언어 중 가장 인간의 언어(비록 영어이기는 하지만)와 가까워 비교적 진입장벽이 높지 않은 언어이기도하다.

또한 우리가 지금 배우고 있는 웹프로그래밍 세계에서도 파이썬은 매우 널리 쓰이고 있다. 데이터를 처리하는데 매우 유용하게 활용되어서인지, 마찬가지로 백엔드에서 데이터를 처리하여 프론트엔드로 보내주는데 적합한 언어로 판단되어 풀스택을 구성하는데 있어 JavaScript와 함께 많이 쓰이는 언어가 되었다.

저번에 레스토랑에 비교하여 프론트엔드와 백엔드를 구분하는 예를 든 적이 있다. 프론트엔드가 손님에게 음식을 서빙하는 홀과 같고, JavaScript는 그 홀에서 종업원들과 매니저가 쓰는 언어라고 볼 수 있다. 반대로 백엔드는 레스토랑의 주방, 즉 손님이 원하는 음식을 처리해 만들어 내는 공간이며, 여기서 주방장 및 요리사들이 쓰는 언어가 Python이라 볼 수 있다. 즉, JavaScript는 프론트엔드의 마법이며 Python은 백엔드의 마법이라 할 수 있다.

프론트엔드에서 모든 연산을 다 처리하는 것은 불가능하다. 특히, 처리할 규모의 데이터가 커지면 커질수록 이에 대한 데이터베이스(Database)와 데이터를 처리할 수 있는 메모리 지정등의 추가적인 작업이 필요할 수 있다. 이런 것들을 할 목적으로 존재하는 것이 백엔드이며, 여기서 쓰이는 대표적인 언어중 하나가 Python이다. 이번 글에서는 Python 마법을 활용하기 위한 도구에 대해 알아보고, 본격적으로 백엔드의 마법주문들을 배워보려한다.

Python은 JavaScript와는 다르게 웹에서만 활용되는 언어가 아니다. 물론 둘다 객체지향언어(Object-oriented Language)이면서, 웹에서 널리 활용되는 언어는 맞지만, Python은 Java처럼 인터넷 연결이 없어도 활용할 수 있다. 그러나 오늘날 Git과 같이 협업 도구를 활용하여 규모가 큰 프로젝트를 하는 경우가 많기 때문에, 사실상 인터넷 없이 일하는 개발자는 없다고 할 수 있다. 그러므로 두 언어를 웹 상에서 각각 프론트엔드와 백엔드 개발을 위해 많이 쓰이는 언어로 봐도 무방하다.

Python마법에 필요한 도구

Python은 현재 핫한 데이터 분석 분야에서 널리쓰이는 마법인 만큼, 업데이트되는 주기가 매우 잦은 편이다. 하루가 다르게 새로운 데이터 분석 및 자동화 목적의 라이브러리가 계속 생겨나기 때문이다. 그러므로 이 마법의 커뮤니티는 매우 크고 넓은 편이다.

그래서 그런지 업데이트가 너무 잦아 Dependency상에서 호환성 문제가 생기기도한다. 예를 들어서 한 자동차회사가 새로운 차를 개발하는데 엔진 디자인을 바꾸었다고 가정하면, 이전에 엔진과 관련된 많은 부품들의 규격이나 스펙도 다 바뀌어야한다. 마찬가지로 Python 마법 주문이 업데이트 될 때도 비슷한 문제가 발생하기도한다. 기존 Python을 구성하던 라이브러리들이 바뀌면서 업데이트된 버전에서는 이전까지 사용했던 라이브러리들이 호환되지 않기도한다. 그렇다고 모든 라이브러리를 매번 바꾼다면, 라이브러리의 사용이 너무 복잡해지므로 개발자들에게는 매우 큰 혼란만 야기할 것이며, 그것들을 다 파악하느라 본인의 업무를 수행하기 힘들어질 수 있다.

따라서 현업 개발자들은 큰 보안 문제나 기술적인 문제가 생기지 않는 범위 내에서 특정 언어의 버전을 고정해놓고 업데이트 기간을 길게 가져가 호환성문제에 구애받지 않고 최대한 오래 일할 수 있도록 약속하는 경우가 많다. 지금 현 시점에서 가장 널리쓰이는 파이썬 버전중 하나는 3.8버전이다. 3.9버전이 있기는 하지만 바뀐 부분들이 많아 라이브러리 호환성 문제가 나타나는 경우가 있기 때문이다.

Python 설치

Java를 설치했던 것처럼, Python 사이트에 들어가 3.8.6 버전을 다운 받는다. 이를 설치한다(주의할 것은 Windows에서 설치시 화면에서 “Add Python 3.8 to PATH”에 체크하여 Python 언어의 경로가 자동적으로 지정되도록한다. 이렇게 하지 않을 경우 수동으로 언어가 설치된 경로를 지정해 주어야하는데, 특별한 이유가 아니라면 그 경로를 직접 찾아서 입력하는 것보다 Default 경로에 지정하는 것이 시간을 절약할 수 있을 것이다.). Mac에서는 기본적으로 Python 2.x 버전이 설치되어 있으나, 너무 오래되었으므로 버전 3.x이상으로 업데이트하는 것이 바람직하다.

“Python을 설치한다는 것”의 의미는, Python은 어디까지나 영어를 기반으로한 인간 친화적인 문자어이기 때문에, 컴퓨터가 이 언어를 그대로 이해할 수 없다. 컴퓨터는 오직 0과 1로 된 숫자밖에 해석할 수 없기 때문이다. 바로 이 Python 패키지의 설치로 인간친화적인 언어인 Python을 컴퓨터가 이해할 수 있는 이진수로 번역할 수 있는 도구가 생긴 것이다. 이제 인간이 영어로 Python을 작성해도 컴퓨터가 컴파일링을 통해 이 언어를 번역해 활용할 수 있게 된 것이다.

Terminal(CLI)

터미널이란 텍스트 명령어를 입력하면 결과를 텍스트로 출력해 주는 도구라고 볼 수 있다. 자신이 입력한 명령에 대해 바로 응답을 보고 싶은 경우에 널리 활용된다. 여기서 사용되는 명령어는 Python/JavaScript같은 프로그래밍 언어와는 조금 다르다. Python으로 코드를 짜면, 그 코드파일을 어디에 복사해야하는지, 또 그 파일의 실행 등은 Python 코드 내에서 트리거할 수 없을 것이다. 마치 자동차를 만들었다고해서 그 자동차가 저절로 시동걸고 끄는 것까지는 자동차내에서 불가능 하듯이, 자동차의 시동을 켜고 운전을 시작하는 행위는 반드시 외부 주체의 행동이 있어야한다. 이를 UI상에서 실행파일을 만들어 클릭할 수도 있지만, 어떠한 텍스트 명령어로 수행할 수 있다면 훨씬 편할 것이다. 바로 이런 이유 때문에 “명령어”라는 것이 존재하며, 이러한 명령어를 입력할 수 있는 터미널같은 것을 명령어 입력 인터페이스(Command Line Interface)라 한다.

이러한 터미널에서 바로 라이브러리를 설치하고(우리가 직접 UI로 다운 받아 설치할 수도 있지만 여기서 명령어 하나로 설치가 가능하기도하다.), Python 프로그램을 설치한다.

일반적으로 Python을 설치하는 MacOS 터미널 명령어는 brew install python3 이며, 라이브러리를 설치하는 명령어는 python3 -m pip install “프로젝트 이름” 으로 외부 라이브러리를 설치할 수 있다.

Python을 설치하는 명령어를 입력한 모습
Pandas라는 Python 라이브러리를 설치한 모습

Python을 실행해보자. 아주 간단히 “Hello World!”를 출력해 볼 것이다. VSCode 상에서 Python 파일을 하나 만든다. 여기에 print("Hellow World") 를 입력하고 저장한다. 다음으로 python3 {python 파일 이름}.py 을 입력하면 바로 해당 Python 파일을 실행한다. 단, 지금 실행하려는 파일의 경로에 있어야한다. cd {경로} 를 입력하여 원하는 경로로 갈 수 있다. 아래와 같이 Python 파일이 있는 경로로 들어간다. 만약 지금 자신의 경로를 모른다면 ls 명령어를 통해 경로에 어떤 폴더가 있는지 확인할 수 있다. 또한 cd ~ 를 입력하면 처음 Default 경로, cd .. 를 누르면 한 단계 위 경로로 올라간다.

실행하려는 Python 파일이 있는 경로로 들어간다.

이제 들어왔으면 여기서 python3 {python 파일 이름}.py 를 입력한다. 파일이 실행되는 것을 볼 수 있다.

Hello World! 가 출력된 것을 볼 수 있다.

주의: 만약 위 명령어가 [Errno 1] Operation not permitted 라는 에러메시지와 함께 수행되지 않는다면 지금 MacOS의 보안 설정에 문제가 있을 수 있다. Preference(System Settings) -> Privacy and Security로 들어가 Full Disk Access 를 클릭한다. 여기서 “+” 버튼을 눌러 Application -> Utility 폴더로 들어간다. 여기서 터미널을 선택한다. 이렇게하면 Terminal이 디스크의 모든 곳에 접근이 가능하다.

MacOS 상에서 Terminal이 Full Disk Access를 할 수 있도록 설정을 변경한다.

VSCode 상에서는 ctrl + `(backtick) 단축키를 활용하여 터미널을 열 수 있다.

Python의 강점

Python언어의 장점은 JavaScript나 Java에 비해서 문법이 간결하여, 더 직관적이라는 것이다. Python이 현존 언어중 가장 인간의 언어와 가깝다는 것이 바로 이 이유에 있다.

아래 JavaScript/Java의 문법과 비교해보자. 한눈에 봐도 Python의 문법이 제일 간단한 것을 알 수 있다. 따라서 입문자에게는 가장 배우기 쉬운 언어이기도하다(영어를 잘하면 더 쉽게 느껴질 수 있다!).

  • Python: print(“Hello World!”)
  • JavaScript: console.log(“Hello World!”)
  • Java: System.out.printIn(“Hello World!”)

Python은 Java/JavaScript 못지 않게 매우 커뮤니티가 방대하다. 따라서 필요한 모든 것을 잘 검색만 한다면 찾을 수 있다. 개발자도 모든 문법을 외울 수 없고, 그렇게 하는 것은 계속 변화하는 프로그래밍 환경에서 비효율적이다. 개발에 있어서 가장 중요한 능력은 “내가 원하는 정보를 얼마나 빨리 효율적으로 찾아내는가"이다. 구글링, 즉 검색을 잘하는 개발자가 능력있는 개발자라는 것은 괜히 나온 이야기가 아니다.

Python에 대해서는 내가 데이터 사이언스를 공부할 당시, 이전글에서 많이 언급을 한 내용들이라 이 글에서 Python의 기초를 JavaScript나 Java에 대해 글을 쓸때처럼 일일히 설명하지는 않을 것이다. Python언어에 대한 기본 문법이나 기초 자료형을 알고싶다면, W3School에서 제공하는 자료를 참조하면 좋을 것이다(3).

가상환경(Virtual Environment)

Python을 활용하는데 있어 추가적으로 필요한 도구가 있다. 바로 가상환경(Virtual Environment)를 구성하는 것이다. 가상환경이란 Python을 활용하기 위한 도구들을 담아두는 도구함이라 볼 수 있다. 이 환경에서는 별도로 Python관련 라이브러리를 설치할 필요없이 바로 참조하여 사용할 수 있는 것이다.

예를 들어 가상환경에서 망치라는 도구를 쓰고 싶은데, 내 개인 작업 도구로는 이 망치의 A타입을 사용한다. 그러나 내가 고용된 조각장에서는 망치의 B타입을 쓰기를 원한다. 만약 내가 만들어야하는 조각상이 매우 정교한 기술을 요하며, 두 타입의 망치가 그립감부터해서 면적등 괘 많은 차이가 난다면 곤란한 상황이 펼쳐질 수도 있다. 갑자기 A타입의 망치를 쓰다가 B타입의 망치를 쓰면 같은 솜씨가 나오기 어려울 것이기 때문이다. 그런데 작업장에서는 B라는 망치의 장점 때문에 반드시 이 망치를 써야한다고하면 나는 어쩔 수 없이 망치 B를 써야할 것이다.

마찬가지로 내 로컬 랩탑에서 Pandas라는 라이브러리의 A버전을 쓰는데, 회사의 PC에서는 B버전을 쓴다고 가정하자. 집에 들어가서 일을 하거나 원격으로 일을 하고 싶다면 이 경우 내 로컬 랩탑의 Pandas 버전을 반드시 B버전으로 바꾸어야할 것이다.

그렇기에 두개의 도구함을 만들어놓고 한 곳에는 Pandas의 A버전을 보관하고, 다른 한 곳에서는 B버전을 담아놓으면 필요에따라 둘 중 하나를 꺼내 쓸 수 있을 것이다. 즉, A를 쓰는 프로젝트에 대한 도구함, B를 쓰는 프로젝트에 대한 도구함으로 나눌 수 있다는 것이다. 이 프로젝트별 도구함을 가상환경이라고 볼 수 있다.

좀 더 정확히 말하자면, 같은 시스템에서 실행되는 다른 버전의 Python라이브러리를 활용해 구성한 프로그램들의 동작을 방해하지 않으면서, 내가 개발하고자하는 어플리케이션에 활용할 Python 패키지를 업데이트 및 설치하여 활용할 수 있게하는 독립적인 실행 환경이라 볼 수 있다(4).

가상환경을 사용하는 방법은 아래와 같다.

  1. 먼저 실행하려는 Python이 있는 경로로 들어간다.
  2. 이후에 여기서 python3 -m venv venv 명령어를 입력하여 가상환경을 생성한다. 현 경로 내 venv 폴더가 생성된 것을 알 수 있다.
  3. 다음으로 가상환경을 활성화 시켜주어야한다. 현재 경로가 Default 프로젝트 폴더가 되도록 현 폴더에서 source venv/bin/activate 를 입력한다. 그러면 터미널 입력 인터페이스 앞에 (venv) 라는 표시가 뜨며, 가상환경에 들어왔다는 뜻이 된다.
(venv)는 가상환경에 들어왔다는 의미다.

필요한 Python 패키지 설치

Python에서도 JavaScript처럼 외부의 유용한 라이브러리(예: JQuery)를 불러와서 활용할 수 있다. 내가 원하는 라이브러리를 import해 쓰려면 가상환경 상에서 그 라이브러리를 설치해야한다. 이에 가장 널리 쓰이는 명령어가 pip (python install package)라는 것이다. 기본적인 문법은 아래와 같다.

pip install {설치할 라이브러리 이름}

아래는requests 라는 이름의 라이브러리를 설치하는 예제이다. 가상환경에 들어온 상태에서 pip install requests 로 라이브러리를 설치한다.

명령어를 통해 requests 라이브러리를 설치한 모습

패키지를 코드상에서 활용해보자. 서울시 미세먼지정보 OpenAPI를 여기서 다시 활용할 것이다. Java와 비슷하게 import 키워드를 활용한다. requests 라이브러리는 HTTP GET/POST 요청을 Python상에서 할 수 있게해주는 유용한 패키지다(5). API를 이용해 원하는 데이터를 가져와 반복문을 활용해 지역이름과 미세먼지 정보를 출력하도록 한다. requests.get() 내 들어간 URL을 열어보면 데이터의 구조를 파악할 수 있다. 이 데이터에서 원하는 정보만 가져와 출력한다. Python에서의 코멘트 방법은 # 부호를 활용하는 것이다.

# Python 예제

import requests # 필요한 라이브러리는 반드시 설치한 후에 활용할 수 있다.

# requests 라이브러리로 HTTP GET 요청하여 원하는 데이터를 가져온다.
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')

# 데이터를 JSON로 parsing한다.
rjson = r.json()

# 원하는 데이터의 키에 접근한다.
rows = rjson["RealtimeCityAir"]["row"]

# 반복문을 활용해 원하는 정보를 출력한다.
for i in rows:
area = i["MSRSTE_NM"] # 지역정보 가져오기
value = i["IDEX_MVL"] # 미세먼지값 가져오기
# 처리된 데이터를 출력한다.
print(area, value)

>>

중구 31
종로구 39
용산구 -99
은평구 42
서대문구 37
마포구 36
광진구 31
성동구 33
중랑구 34
동대문구 34
성북구 37
도봉구 41
강북구 39
노원구 36
강서구 42
구로구 37
영등포구 41
동작구 41
관악구 37
금천구 43
양천구 -99
강남구 39
서초구 41
송파구 42
강동구 39

터미널 상에서 현재 Python파일의 경로에 다시 python3 {파일 이름}.py 를 입력하면 터미널에서 실행 결과를 볼 수 있다.

터미널 상에서 실행 결과를 볼 수 있다.

참조:

(1) https://www.imdb.com/title/tt0071853/

(2) https://docs.python.org/3/faq/general.html#:~:text=Details%20here.-,Why%20is%20it%20called%20Python%3F,to%20call%20the%20language%20Python.

(3) https://www.w3schools.com/python/python_intro.asp

(4) https://docs.python.org/ko/3/glossary.html#term-virtual-environment

(5) https://pypi.org/project/requests/

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet