프로 하스켈러 3일차 | Functor, and…

김대현
HappyProgrammer
Published in
6 min readMay 12, 2022

매일 아침, 업무를 시작하는 화상회의에서, 각자의 기분을 체크인하고 있습니다. 전 매일 높은 점수를 말하며, 기분 좋게 시작하고 있습니다. 새 업무 환경에 어지간히 신이 나나 봅니다.

오늘은, 오전 기획 회의가 연기되어, 온보딩 교육 전까지 여유시간이 생겼습니다. 무얼 할까 고민하다가, mongodb를 로컬에 설치하며 기웃거려보았습니다. 전 서비스용 메인 데이터베이스는 RDB만을 쓴 편이라, mongo를 써서 서비스를 오픈하는 것은 처음 경험이 될 것 같네요. 어차피 요즘 세상에는, RDB든 mongo든 또 다른 DB이든, 각자 완전히 관리되는 데이터베이스 서비스를 제공하기 때문에, 각자 애플리케이션에 맞는 선택을 하기에 부담이 크지 않은 것 같습니다.

회사에서 지급해 준 맥북프로가 너무도 고사양이기에, 여기에 부담 없이 로컬에 몽고DB를 설치했습니다. 평소 로컬에 덕지덕지 띄우는 것을 안 좋아합니다만, 새 고사양 장비 기준에서는 “덕지덕지”라는 기준치가 아주 높아진 것 같습니다. 몽고 용 GUI는 뭐가 있나 봤더니, 공식 프로젝트에서 제공하는 MongoDB Compass라는 걸 쓰는 것 같습니다. 마치 pgAdmin이나 MySQL Workbench 같은 역할을 하는 것인가 봅니다. MongoDB Compass가 아쉽게 M1프로세서용 프로세스는 따로 제공하지 않는 것 같아 살짝 아쉬웠습니다만, 크게 괘념치 말고 그냥 쓰기로 합니다. GUI로 처리할 일이 많지는 않을 거라 기대해 볼게요.

https://mongodb.com/products/compass

동적(dynamic) 타입 언어와 정적(static) 타입 언어의 갈림길에서, 저는 이제 정적 타입 언어를 선호하는 흐름을 탔기에, 스키마를 미리 지정하는 RDB와도 큰 거리감이 없습니다. 논란의 여지가 있겠지만, 아마도 동적 언어와 잘 어울릴 것 같은, 몽고와 하스켈이라는 강(strict) 정적 타입 언어와의 궁합이 어떨지 사뭇 궁금합니다.

그간 한결 성숙해진 몽고랑 오랜만에 반가운 인사를 나누고 나니 점심시간이 되었습니다.

맛점 후, 오후 시간에는 온보딩 교육을 또 받았습니다. 이걸 2주간이나 매일같이 교육을 해준다는 게, 대단한 정성입니다. 저라면 그렇게 못할 것 같습니다. 위키나 노션 페이지 하나 던져주고, “읽어보시고 궁금하신 거 물어보세요”하고 말 것 같은데 말이죠.

여담으로, 직전 회사 저희 팀에서, 저 혼자 1번 개발자로 일하고 있을 때, 2번 개발자로 입사하신 J님이 떠오르네요. 뭘 물어보고 싶은데, 프로젝트가 정신 없이 바쁠 때라서, 제가 하루 종일 제가 화장실도 못가고 연속 회의 불려다니고, 회의가 없는 밤 시간에 불꽃 코딩을 하고 있으니, 뭘 물어볼 짬이 없었다 합니다. 그 두어 달은, 시간 외 근무 수당까지 받아보니 평소 월급의 두 배 가까이 받았더라고요. 법정 근무 한계시간 다 채웠던 거 같습니다. 뭐 어쩌다 그러는 것은 견딜만 하지만, 그래도 저보고 선택하라면, 전 수당 일절 안 받고, 정시 출퇴근을 하겠습니다. 🙂 암튼, J님은 온보딩 교육은커녕, 아예 질문 할 기회조차 못 누리셨습니다. 혼자서 제가 휘갈겨 짜 놓은 코드를 보고, 모나드 트랜스포머의 활용법을 익히셨다는 놀라운 이야기.

암튼, 그런 죄(?)를 저지르고도, 전 친절한 온보딩 교육의 호사를 누리고 있습니다. 이곳에 입사하시면, 저도 친절한 온보딩 해드릴게요.

첫 주부터 Functor와 Monad라니…

다시 온보딩 교육 얘기로 돌아와서, 오늘은 펑터와 모나드에 대해 배웠습니다. 저는 아직 누군가에게 모나드를 설명할만한 용기가 없는 상태입니다. 뭐 어떻게 쓰라는 건지는 어렴풋이 알 것도 같은데, 아직 설명할 수 있을 만큼의 수준이 못 되는 거죠.

토드(닉네임)가 펑터와 모나드에 대해 친절한 설명해주는 걸 듣자 하니 이런 생각이 들었습니다. 모나드가 어려운 점은, 사람마다 이해하기 좋은 접근법이 다르기 때문일 수도 있겠다는 생각도 들었습니다. 꽤 이해하기 어려운 주제이다 보니, 이렇게 저렇게 공부해 보다가, 본인에게 유효했던 접근 법으로 다른 사람들에게 설명해주게 되는 것인데, 다른 사람은 또 그 방법이 그렇게 유효하지 않을 수도 있다는 겁니다. 산 정상에 오르는 길이, 잘 보이지 않고 가려져 있는데, 이 수풀을 헤쳐서 이렇게 저렇게 가다 보면, 정상에 오를 수 있는 거죠. 그런데, 어떤 사람은 가파른 오르막을 가더라도 빨리 올라가는 것을 선호하고, 어떤 사람은 돌고 돌더라도 원만한 길을 선호하고, 또 다른 사람은 막 냇가에서 쉬며 오르는 것을 좋아하는 게 아닐까 합니다.

그러면, 모나드를 배우는 입장에서는, 이런 접근법이 좋을 것 같습니다. 한두 가지 모나드 교육자료를 보고 잘 모르겠다고 쉽게 포기할 게 아니라, 어차피 배우기 어려운 주제임을 인정한 다음, 온라인에 널려 있는, 다양한 자료들을 다양하고 빠르게 마구 흡수해 보는 겁니다. 그중에 어떤 자료는 본인의 접근 성향에 잘 맞는 자료가 분명히 있을 겁니다. 암튼, 오늘 또 다른 접근 법의 교육을 잘 들었습니다. 과연 나라면 어떻게 설명할 수 있을까 고심하게 되는 오후였습니다.

알려주는 입장에서도, 다른 사람에게, 한 가지 설명을 하고 잘 전달이 안되었을 때 실망할 게 아니라, 제2 접근, 제3 접근법으로 설명해주는 시도가 유효할 것 같다는 생각이 듭니다.

아무튼, 첫 주부터 펑터와 모나드를 친절히 알려주더니, 다음 시간에는 모나드 트랜스포머를 알려준다 합니다. ㅋ. 온보딩 교육은 참 친절한데, 주제가 참 불친절하지 않습니까? ㅎㅎㅎ

하스켈 학습 자료

하스켈 종이책이 이미 집에 많이 있습니다만, 온라인에 공개된 자료는 어떤 게 있나 한 번 검색해봤습니다. 하스켈 공홈 (https://www.haskell.org/documentation/) Courses 섹션을 보니, 몇몇 대학에서 진행한 수업 자료가 공개돼 있는 것 같습니다. 첫 줄에 있는 U Penn 수업 자료를 스윽 살펴봤습니다. 학교 수업으로 하스켈을 공부할 수 있다니, 참 좋을 수도 있는 한편 괴로울 수도 있겠다 생각이 듭니다.

대학에서 하는 하스켈 수업 자료를 보고 있노라니, 저 대학 시절에 커먼 리스프 수업을 들었던 게 생각나네요. 듣는 당시에는 도무지 이해할 수도 없고, 괴로웠던 기억이 있습니다. 지난 지금에는 결과적으로 아주 감사하고 재밌는 수업이었지만, 당시에는 도무지 프로그램을 왜 이렇게 짜야하는 건지 이해할 수 없어 괴로웠죠. 아니 왜 코드에 반복문을 쓰지 말라는 건지, 반복문 없이 어떻게 유의미한 코딩이 가능한지 불평했던 기억이 납니다. 그때 과제 제출하기 위해 들이마신 카페인과 밤공기가 어마어마했을 겁니다.

https://www.seas.upenn.edu/~cis194/fall16/

오늘 적으려 했던 한가지 주제가 더 있었는데, 오늘 분량(?)은 잘 나왔으니, 다음 기회로 미루고 마무리해보겠습니다.

남의 일기, 시간들여 읽어주셔서 감사합니다. ;)

--

--

김대현
HappyProgrammer

시니어 백엔드 개발자. 함수형 프로그래밍을 선망하며 클로저, 스칼라, 하스켈로 도전하며 만족 중. 마이너리티 언어만 쫓아다니면서도 다행히 잘 먹고 산다. 최근엔 러스트로 프로그래머 인생 확장.