2. 암호 해독의 세계 (1)

최재영·2022년 3월 14일
0

아는 것이 힘이다.
- 프랜시스 베이컨 (Francis Bacon)


"셜록 홈즈 (Sherlock Holmes)"를 좋아하는 사람들이라면
"춤추는 사람 인형 (The Adventure of the Dancing Men)"
한번 쯤은 읽어봤을 것이다.

아무것도 모르는 사람들의 눈에는 저것이
그저 춤추는 사람 인형으로밖에 보이지 않을 것이다.
하지만 약간의 시간과 노력을 기울인다면
저것이 단순한 그림이 아니라 암호라는 것을 알 것이다.
(재미를 위해 자세한 것은 책을 직접 읽기를 추천!)

코딩도 마찬가지다.
프로그래밍 지식이 없는 사람들의 눈에는
제 아무리 코드를 보아도
저것이 무슨 소리인 지 알 길이 없다.

예를 들어 이걸 보자.

import sys, re
from pyspark import SparkConf, SparkContext

conf = SparkConf().setAppName('Word Count')
sc = SparkContext(conf=conf)

if (len(sys.argv) != 3):
    print("wordcount.py input_file output_dir 형태로 실행해 주세요")
    sys.exit(0)
else:
    inputfile = sys.argv[1]
    outputdir = sys.argv[2]

wordcount = sc.textFile(inputfile)\
           .repartition(10)\
           .filter(lambda x: len(x) > 0)\
            .flatMap(lambda x: re.split('\W+', x))\
             .filter(lambda x: len(x) > 0)\
              .map(lambda x:(x.lower(), 1))\
              .reduceByKey(lambda x, y: x + y)\
              .map(lambda x:(x[1], x[0]))\
              .sortByKey(ascending=False)\
              .persist()

wordcount.saveAsTextFile(outputdir)
top10 = wordcount.take(5)
result = []
for counts in top10:
    result.append(counts[1])
print(result)

이걸 보고도 무슨 말인지 모르겠다면 지극히 정상입니다.
심지어 배우고 있는 저도 저게 무슨 말을 하는 건지 모릅니다.
대부분의 사람들의 눈에는 이것이 그저 암호처럼
알 수 없는 글자들이라고 생각할 겁니다.

하지만! 모든 암호들이 그렇듯
배경지식과 풀이방법만 알고 있으면
그 수수께끼를 풀 수 있습니다.

1단계.

처음부터 풀이해봅시다.
처음은 매우 쉽습니다.

import sys, re
from pyspark import SparkConf, SparkContext

이 말은 영어를 알고 있는 사람은 단박에 이해가 갈 겁니다.
'수입 (import)'은 주로 자신에게 없는 것을
다른 곳에서부터 가지고 오는 것이므로
import는 자기 컴퓨터에 없는 기능을
다른 곳에서 불러오는 단어라 생각하면 됩니다.

이를 대입하면
"sys와 re 라는 기능을 수입해오고
SparkConf와 SparkContext라는 기능을 pyspark에서 수입한다."
라고 해석할 수 있습니다.

# 그럼 sys는 뭐고 pyspark는 뭐냐라는 질문에는
그것들의 정의를 쓰는 것 말고는 방법이 없네요.
이것들도 코딩을 어느정도 알아야 알아든는 것들이 있어서
아무것도 모르시는 분들에겐 정말 죄송합니다...

- sys : 파이썬 인터프리터가 제공하는 변수와 함수를
       직접 제어할 수 있게 해주는 모듈.

- re : 정규표현 처리(regular expression) 모듈.
       특정한 패턴과 일치하는 문자열을 '검색', '치환', '제거'
       하는 기능을 지원.
       
- pyspark : '스파크(Spark) 용 '파이썬(Python)' API.

- SparkContext : 리소스를 할당 받고 관리하기 위해서
                '클러스트 매니저(Cluster Manager)'와 연결되어
                통신하면서 자원을 관리하고
                '라이프 싸이클(Life Cycle)' 을 관리.

- SparkConf : '스파크 컨텍스트 (Spark Context)' 객체의 
			  설정값을 생성하고 초기화하하는 객체.

2단계.

그럼 다음 문장으로 넘어가자.

conf = SparkConf().setAppName('Word Count')
sc = SparkContext(conf=conf)

파이썬에서는 '변수 (variable)'란 개념이 있는데
변수란 '자료 (data)'를 집어넣을 수 있는 상자입니다.
그리고 그 상자에 이름을 붙이면 변수명이 됩니다.

한마디로 상자 안에 무슨 물건이 넣을 지 정해줍니다.

그래서 기초적인 변수는

변수명 = 자료

로 풀이 됩니다.
참고로 등호(=)는 자료가 변수에 들어있다는 의미이지
자료가 변수와 같다라는 의미가 절대로 아닙니다!
이 개념을 지금 명확히 세워야 나중에 고생을 안 합니다.
(필자의 겅험담...)

즉 그 말을 대입하면

conf = SparkConf().setAppName('Word Count')

'conf'라는 이름의 변수는
SparkConf의 기능(함수) 중
setAppName()이란 기능을 쓴다는 말입니다.
setAppName이란 이름에서 알 수 있듯 앱의 이름을 정해주는 기능인데
괄호 안에 있는 'Word Count'를 앱의 이름으로 정해다는 뜻입니다.

그 다음으로

sc = SparkContext(conf=conf)

'sc'라는 변수는
SparkContext는 conf 변수를 쓰겠다는 뜻입니다.
아예 conf를 환경 설정으로 세웠다는 뜻이죠.

그렇게 sc도 무엇인지 해석을 하게 되었습니다.

보아하니 겨우 2단계까지만 왔는데도
글이 너무 많은 관계로 지금은 여기까지만 하고
다음 것들은 다음 글에서 쓰기로 하겠다.

여러분!
다시 한번 말하지만
이 글을 읽고도 이해가 안 가시면
100% 정상입니다! 걱정마세요!

profile
갬성 있는 프로그래머

0개의 댓글

관련 채용 정보