티스토리 뷰

Scripts/Python

python 입문기

엘키 2016. 11. 22. 21:00

여러 글에서 밝혀왔듯 나는 rubyist다. ruby를 사랑하는 이유는 내가 접했던 언어 중 가장 즐겁게 코딩이 가능했기 때문이다. rails는... 음 이제와 밝히자면, 사실 좀 어려웠다.

ruby가 어려웠다기보다는, 웹에 대한 이해도가 전무한 개발자가 쉽게 기능 개발을 해볼 순 있지만, production 과정까지 가는게 쉽지만은 않았다랄까?


ruby는 해외와는 달리 국내에서는 비주류라는 점이 고민의 포인트가 되긴했지만, 해외에서의 높은 인지도로 인한 풍부한 자료는 그 거부감을 상쇄 시켜줬다.


성능상의 이슈가 있다지만 어지간한 규모의 트래픽으론 성능 이슈를 제기할 정도로 열악한 것도 아니다.


오히려 가장 아쉬웠던 점은 rails가 갖는 장점인 학습 속도에 비해, 단점인 프로덕션 과정에서의 학습 비용이 큰 편이었던 점이라고 할 수 있다.


특히 DB관련한 연동은 추상화 레이어로 인한 개발 과정 이득은 있지만, 인덱스 개념이나 데이터 모델링 개념이 부족한 경우에 프로덕션 트러블의 요인이 되기 쉽상이다. 물론 이는 다른 언어들의 프레임워크들도 가진 문제지만, ruby on rails는 쉬운 학습 비용이 장점인 프레임워크이기 때문에, 이 부분이 조금 더 감점 요인이라고 생각한다.



물론 나는 위 모든 점을 감안해도 rails가 좋다. 여전히.

ruby도 물론이고.


몇번이나 이런 질문을 받은 적이 있다. 왜 rails를 썼냐고.

국내 기준으로 C++이 여전히 주류이고, 웹 기반 서버로 많이 넘어가던 시기에도 php, asp.net, node.js, jsp 등이 주류이던 시기에, 심지어 python도 아닌 ruby였냐고.


그 질문에 나는 항상 같은 대답을 했다.


"내가 그 당시 학습하려 시도한 모든 언어들 중에 ruby가 가장 즐거웠노라고."


업무는 내 삶에서 큰 부분을 차지한다.

그 과정이 즐겁지 않다면, 내 삶이 즐겁지 않을 수 도 있다.

그래서 나는 내가 업무를 즐겁게 하기 위한 선택을, 가능하다면 많이 하려고 하는데, 그 과정에서 ruby는 꽤나 높은 점수를 줄 수 있었다.


그렇다면 python도 즐거워서 골랐나?

그렇진 않았다.


내가 느낀 국내 인지도는


Java > C++ > C# > Python > Ruby > Golang = scala 였다.

사실 나는 ruby 다음 언어로 Golang이나 scala를 해보고 싶었음을 지난 글에서 밝힌 바 있다.


하지만 현재 시점에서 “웹 서버”를 구현해야 할 언어를 골라야 한다는 관점에서, Golang은 시기상조인 면이 많고, 특히 웹서버로 구동하기엔 여타 프레임워크보다 아쉬움을 갖고 있다.

scala로 Play! 프레임워크를 사용해보려 고민도 했으나, 그러기에는 내가 너무 java에 대한 이해도가 부족했다.


게다가 나는 C++ > C# > Java의 선호도를 갖고 있고.



그리하여, ruby와 비슷한 급(?)의 언어이면서, 국내에서의 인지도가 ruby보다 높은 python을 해보기로 했다.


rails를 다시 선택하는 방법도 있었지만, 웹 프레임워크로써 프로덕션 레벨에 올려본 것이 rails 하나이기 때문에 다른 웹 프레임워크의 장단점과 다른 언어 학습의 기회를 같이 맛보기 위한 선택을 하게 됐다.



그렇게 python을 입문하고 나니, 몇 가지 감상이 들어 3달여간 사용해본 경험을 정리해보고자 한다.



indent 강제.

사실상 내가 python보다 ruby를 애호하게 된 이유다.


indent 에도 취향이 있는 것이고, 나는 프로그래밍이 재밌어야, 일이 재밌어야 한다고 주장하는 입장에서 자유도를 억제하는 느낌드는 파이썬의 indent강제는 거부감이 들었다랄까?


막상 사용해보니 코드 읽기에 큰 강점이 있더라.


실제 동작을 유추하기 쉽다보니, 여러모로 메리트가 있었다.


다만 다른 언어들과 조금 다른 것들이 많은데, 예를들어


조건문이나 함수 정의에 :이 마지막에 붙는 점이다.


# ruby
def test()
	statement
# python
def test(abc):
	statement
다음과 같아 진다.

조건문의 경우에도 마찬가지로,

# ruby
if aaa
	statement
end
# python
if aaa:
	statement
같은 형태가 된다.


다들 아시다시피, 들여쓰기가 depth에 따라 코드가 어떤 단락에 포함되는지를 결정짓는다.
# ruby
# 들여쓰기 1
if aaa
	statement
	statement2
end

# 들여쓰기 2
if aaa
	statement
statement2
end
# python
# 들여쓰기 1
if aaa:
	statement
	statement2

# 들여쓰기 2
if aaa:
	statement
statement2
루비는 두 결과가 같다.
하지만, 파이썬은 다르다. 들여쓰기 2에서, aaa 조건이 성립하지 않아도 statement2는 실행된다.


이런 제약이 거추장 스럽게 느껴진게 사실이다.
C++에 비해 상대적 자유도가 낮은 java를 선호하지 않았던 이유도 같은 이유였기 때문인데, 굳이 스크립트 언어에 제약이 있는 언어를 고르지 않겠단 생각이었다.

헌데 막상 파이썬을 사용해보니, 협업에 큰 장점이 있었다.
RSA 알고리즘을 한 줄에 짤 수 있네 마네 말도 많은 perl을 겪은 나로썬, 또 지나친 자유도로 소통 비용을 크게 요구하는 C++을 오래 사용해온 입장에서 크게 와닿으며, 인정하게 된 것은, indent강제가 코드 읽기 비용을 크게 낮춰준다는 것을 확실히 느낄 수 있었다.

이는 디버깅이나 오류 비용이 크게 낮아진다는 얘기기도 하다.

내가 크게 걱정했던 표현력이 막상 크게 제한되지도 않았다.
팀작업에서 큰 이득이 있었고, 오픈소스 코드 분석에서도 큰 장점이 됐다.

아니, 다른 언어들도 이래야 하는거 아닌가 싶을 정도로 마음에 들었다는게 맞겠다.

대다수의 팀에서 일하는 프로그래머들은 팀 코드만 보지 않는다.

오픈소스 진영에서의 개발은 특히나, 다른 사람의 코드를 봐야 할 일이 아주 많다.

그런 측면에서 아주 큰 강점이 있다는 생각이 들었다.



거기에 부가적으로, python도 말하면서 코딩하는 기분이 들었다.
if user is None:
	blah blah

이 얼마나 직관적인가?


django로 개발하면서 머릿속의 내용을 코드로 옮기는데에 멈칫하는 과정없이 술술 진행될 수 있었던 것은, python의 문법이 유연하진 못하지만, 대화하는 느낌이 드는 언어였기 때문이다.


이 점이 나에게 python에 대한 인상을 좋게 만들어주는 요인이 되었다.



나에게있어 python은 어려운 언어는 아니었다.

사실 쉽게 익숙해진 언어라 볼 수 있다고 본다.



ruby를 먼저 접했어서 인지, 아니면 python 자체가 쉬워서인지는 잘 모르겠지만, 여러모로 ruby와는 또 다른 즐거움을 가져다준 언어였다고 생각한다.



이어지는 django 사용기에 조금 더 디테일한 python 사용기를 담아볼 예정이다.

댓글