Hello, Golang!

in Earl , by Earl

TL;DR

Golang할고랭

시작하기 전에

시작하기 전에 진부하지만 내가 이 블로그에 글을 쓰는 이유를 간단히 적어보려고 한다. 물론 가장 주된 이유는 내가 좀 더 재밌게 개발하기 위해서다. 이 방식이 얼마나 효과가 있을지는 아직 모르겠다. 하지만 본래 목적에 실패하더라도 적어도 두 가지는 얻을 수 있을 것 같다. 글이라는 것을 규칙적으로 쓸 기회(요즘 쓰는 거라고는 코드 밖에 없어서..), 내가 공부한 것에 대한 기록. 어쩌면 지금 나는 글을 쓰고 싶다는 욕구가 개발을 잘하고 싶다는 욕구보다 클지도 모르겠다. 그래서 길고 진부한, 읽혀지기 위한 글보다 쓰여지기 위한 글을 종종 쓰게될 것 같다. 이런 이야기로 시작하는 것은 첫 글이 아무래도 그런 방향으로 흘러갈 것 같아서 미리 고백하는 것이다.

그럼 본론으로

내가 블로그에서 하고 싶은 것 중에 하나가 회사에서 쓰이지 않는 것하면서 놀기 였다. 근데 그걸 찾는게 참 힘들더라. 일과 관련된 것 중에도 공부할 게 많고 그냥 해야할 일도 많아서 아예 다른 걸 생각하기가 쉽지는 않았다. 그러다가 문득 생각난게 새로운 언어를 배우는 것이다. 매년 새로운 언어 하나씩은 공부하고 싶다는 욕심이 있는데 작년에는 아무것도 못했다. 그래서 올해는 해보기로! 세상에 수많은 언어가 있지만 그 중에 Golang을 택했다. 생각보다 굉장히 메이저해서 과연 노는 것인가? 하는 의구심이 들기도 하지만…왜 하필 새로운 언어를 배우는 건지, 왜 하필 고랭인지는 아래 더 자세하게 이야기하려고 한다.

이렇게 포부와 다짐으로 가득한 글로 시작하는 건 사실 어느정도 시간을 끌기 위함이다. 글을 쓰려면 글감이 있어야 하는데 지금 나는 고랭에 대해서 아는 것이 거의 없다. 일단 Go in Action, The Go Programming Language 책 두 권을 사뒀다. A Tour of Go라는 교육용 사이트(?)가 있다는 것을 발견했다. 책도 몇 페이지 읽다 말았고 고 투어도 몇 발짝 못갔다. 그러니 나는 고랭에 대해서 쓸 수 있는게 아무 것도 없다. 그래서 지금 내가 이야기할 수 있는 건 왜? 정도 밖에 없다. 그럼 진짜 시이이이작!

왜 새로운 언어인가

지금 쓰고 있는 언어에 대해서 얼마나 완벽하게 알고 있고 더 공부할게 없으면 다른 곳으로 시선을 돌리냐고 할지도 모르겠다. 사실 그런 이야기를 할 사람이 있을까 하는 의구심도 있음. 그도 그럴 것이 이미 내 주변의 많은 개발자들이 새로운 기술, 새로운 패러다임, 새로운 언어에 관심을 가지고 있다.
왜 새로운 것에 자꾸 관심을 갖게 되는가? 왜 가져야하는가? 꼭 가져야할까? 하는 생각이 들 때가 있다. 내 대답은 ‘그렇다’이다. 나는 개발자란 문제를 해결하는 사람이라고 생각한다. 어쩌면 문제를 해결하는데 중독된 사람들일지도 모른다. 그런데 개별 개발자가 처한 현실적인 제약사항에 따라 문제를 바라보는 관점이 달라진다. 또 사람 자체가 다르기 때문에 같은 문제에도 다양한 해결 방법이 나올 수 있다. 모든 기술, 언어, 패러다임은 누군가 어떤 문제를 해결하기 위해 엄청나게 고민한 것이 일련의 패턴이 되고 구체화 되어 만들어진 것이다. 때문에 새로운, 즉 내가 지금껏 잘 알지 못했던 것에 대해서 학습하면서 현재 겪고 있는 문제 혹은 겪게될 문제에 대해서 새로운 관점에서 바라보고 해결책을 찾기 위한 통찰력을 얻는데 도움이 된다. 마치 책을 읽음으로써 내가 살아볼 수 없는 다른 사람의 삶에 대해 간접체험할 수 있고 세상을 바라보는 폭이 넓어질 수 있다고 이야기하는 것과 비슷하다고 할까!

왜 Golang인가.

  1. 힙해보여서
    이게 무슨 말인가 싶겠지만 사실이다. 새로운 기술을 좇는 것에 대해 비판적인 사람들도 있다. 물론 나도 일을 할 때는 단순히 새롭고 힙해보인다는 이유만으로 신기술을 도입하는 건 싫다. 그렇지만 지금은 일하는 거 아니니까! 그래서 왜 해야하는지 다른 사람을 설득시킬 필요도 없고 내가 하고 싶은 것을 마음대로 할 수 있으니 단순히 새롭고 힙해보인다는 이유만으로 새로운 것을 배워보려고 한다. 새로운 기술에 관심을 가지고 가지고 노는 건 개발자로서 굉장히 즐거운 일 아닌가. :-) 이미 힙할대로 힙했던 언어라 Innovator에게는 더 이상 힙하지는 않은 것 같기도 하지만…Late Majority에게는 힙하다는 자부심!

  2. 쓰는 사람이 많아서(1번과 완전 반대되는 이유인가?)
    예전에 함수형 프로그래밍에 관심이 생겨 C모 언어를 잠깐 본 적이 있다. 그때 가장 힘들었던 점 중에 하나는 잘 짜여진 함수형 프로그램은 어떤 형태인가? 그와 비교해서 내 코드는 어느 점이 부족한가? 를 알 수 없다는 점이었다. 내가 엯촋이라서 척보면 착하고 알아차리면 좋겠지만 그렇지 못했고…누군가와 같이 코드를 보고 좀 더 나아지기 위해서 논의하는게 쉽지 않았던 것 같다. 회사에서도 주변에 C모 언어로 개발하는 사람도 없었고 ㅠ,ㅠ 해당 언어의 사용자 그룹이 있지만 아주 활성되어 있지는 않았다. Golang의 경우 주변에 Golang에 대해 관심을 가지고 있는 사람들이 있고 또 Golang 유저 그룹이 비교적 활발하게 동작하는것 같아 보인다.

  3. 내가 관심있는 서비스가 Golang 기반이어서
    아주 잠깐 동안 Infrastructure as a Code 라는 개념에 관심을 가졌던 적이 있다. 참 많은 것에 참 짧게도 관심을 가지는 듯 하지만…그 때 보았던 몇몇 서비스가 Go 기반으로 만들어져 있었다. Terraform나 Kubernetes을 회사 업무에 적용시키면 어떨까 같은 생각을 했다. 물론 그 서비스가 만들어진 언어를 알지 못해도 간단하게 논리 흐름을 읽는 것은 가능할지도 모르겠다. 하지만 지금까지 몇몇 오픈 소스를 써오면서 이슈가 있어 수정해서 써야하거나 PR을 올려야하는 경우가 종종 있었다. 그럴 때 언어가 가지고 있는 미묘한 특성을 파악해서 봐야하는 경우가 있고…는 약간 포장이고…내가 그 수준까지 쓰게 될지도 모르는데..그냥 내가 현시점에 관심있고 궁금한 솔루션에서 쓰인 언어라고 하니 한 번 배워보고 싶었다. 훨씬 담백한 걸!

  4. 회사에서 안써서
    위에서도 말했던 것처럼 회사에서 쓰지 않는 것을 하고 싶었다. 나는 아주 평범한 자바 개발자라서 Golang으로 뭔가 만들어서 밥벌이를 할 수 있는 날이 올지는 모르겠음 ㅎㅎㅎ 솔직히 자바만 하기도 벅참 ㅎㅎㅎ 그래서 더 끌렸다.

  5. 그럼에도 불구하고…먹고 사는데도 나름 도움이 될 것 같아서
    이제는 요즘 핫한 키워드라고 할 수도 없이 아주 기본적인 요소가 되어버린 것 중에 하나가 동시성/병렬 처리다. (아직 자세히 안해봐서 모르지만 주워 듣기로는) Golang은 이 문제에 대해 Golang 나름의 솔루션을 내놓았고 꽤 괜찮다는 평을 듣고 있다.
    지금까지 일하면서 동시성/병렬 처리까지 고려해본 적이 딱히 없는 것 같다. 그래서 깊게 고민해볼 기회도 없었다. 내가 생각을 안하고 관심을 안두고 있었던 것인지도 모르겠다는 반성도 들지만…늘 어떻게하면 보다 효율적이고 안정적으로 밀려오는 트래픽을 처리할 수 있을 것인가? 혹은 대용량의 데이터에 대해 복잡한 처리를 거쳐 내가 원하는 데이터를 얻을 수 있을 것인가? 에 대한 고민을 좀 해보고 싶다는 생각이 있었다. 아무래도 당장 해결해야하는 문제가 아니니 와 닿지는 않겠지만 언젠가 써먹을 수 있지 않을까 하는 기대로~

  6. C 언어에 진 마음의 빚을 좀 갚을까 싶어서
    이 블로그의 멤버(?)들이 모두 그러하듯이..문돌이 출신, 회사에 들어와서 처음 개발 시작, 자바 개발 n년차라서 나는 C와 C+, C++, C#이 뭔지 뭐가 다른지도 잘 모른다. C는 프로그래밍 언어의 아주 기본이라서 개발자라면 한 번쯤 배워야 할 것 같았다. 자바에서 Stack Trace 따라가다보면 한번쯤은 만나는 Native code를 보면서 도대체 어떤 일이 벌어지고 있는건지 궁금하기도 했고. 공부를 안해본 건 아닌데 책을 몇 페이지 읽고 덮어버렸다. 괜히 어렵다는 이미지가 있어서인가? (이것도 주워들은 거라 정확하지 않지만) Golang이 C와 문법적으로 비슷한 부분도 많아서 세련되게 잘 정리된 C같다고 했다. Golang을 쓸 줄 알게되면 적당히 C를 아는 척도 할 수 있지 않을까…대화에는 낄 수 있지 않을까…하고오오 해보련다.

마무리하며

생각보다 많은 이유가 있다는데 놀랐을지도 모르겠다. 이 글을 시작하고 마무리하는데까지 꽤 오랜 시간이 걸렸음에도 여전히 Golang의 g도 못 봤다. 그 동안 좀 공부했어야 했는데…다음 글 써야하니 급하게 공부해야할 것 같다. 아이고!
이 글을 시작으로 한 언어에 관심을 갖게 되고 공부를 하게 되고 지금까지 알았던 다른 언어들과 어떻게 다른지 비교도 해보고 실제 무언가를 만들어 보기도 하는 과정을 기록으로 남겨보려고 한다. 이제 겨우 힌 언어에 관심을 갖게 되고 까지 간 것 같다. 한 단계씩 천천히 재밌게 즐기면서 계속해 이어져서 내년에 또 다른 새로운 언어 배우기로 다시 찾아오길…부디…..

Comment and share

20180422 offline 사진일기

in Team ITsooda , by fallingg

본격적으로 함께 시작하기로 하기에 앞서, 왠지 모르게 다가오는, 온라인에서 서로 주절주절 하기만 하면 아무도 진행하지 않을 것 같다는 불길한 예감이 있었다. 그래서 2주에 한 번은 시간 되는 사람들끼리 만나기로 했고, 어제가 그 첫 날이었다.

2018-04-22-01

모두가 사는 곳이 비슷하지만 조금씩 달라 항상 어디서 만날 지 정하는 데 시간을 쏟곤 하는데, 항상 집과 가까워서 참석률 100%를 이어나가고 있다(개꿀). 만나서 뭐 딱히 거창한 걸 하지는 않고, 그냥 각자 일을 한다. 무언가를 할 때 아무래도 내가 주도적인 액션을 취하다보니 같이 시작하기로 한 그들은 어느 순간 나를 편집장이나 팀장, 심지어는 클라이언트 급으로 생각하고 있는 듯 했다.

2018-04-22-01

대략 오후 6시 30분부터 블로그 개발에 있어 발견한 이슈들을 공유(라고 쓰고 일방적으로 던진다고 읽는다)하고, 고쳐 나가고, 각자 할 일을 하고, 수다도 조금 떨고, 하다보면 어느샌가 불특정한 한 주제에 모두가 과몰입하게 된다. 이런 점이 직접 오프라인에서 만나 무언가를 하는 것의 장점인 것 같다.

2018-04-22-01

쓰잘 데 없이 과몰입에 빠지다 보면 밥 때도 놓치고 후회하기 마련이다. 나는 점심도 먹지 않은 상태로 나왔기에 도착해서 샌드위치를 사 먹어서 딱 좋은 타이밍에 식사하러 출발. 이 모임은 참 신기한 것이, 뭘 먹어야만 해산한다.

2018-04-22-01

모두가 함께 졸업한 학교 후문에 꼭 이런 느낌의 고깃집이 있었다. 거긴 삼겹살이랍시고 사실은 구이용으로 퍽퍽해서 잘 먹지 않는 전지살을 떼다가 팔았지만, 가격만큼은 매우 저렴하여 배 터지게 먹을 수 있었던 좋은 곳이었다. 대통주라는 요상한 술도 함께 먹었던 기억이 새록새록 하여 신나게 떠들며 먹었다.

2018-04-22-01

2018-04-22-01

2018-04-22-01

이 모임이 또 신기한 것이, 비슷하지만 완전히 다른(혹은 완전히 다르지만 조금은 비슷한) 일을 하는 사람들끼리 모이다보니, 동네 친구도 아니거니와 직장동료도 아니다보니 일 이야기를 하는 것이 (다른 곳에서보다는) 재밌다. 이 분들을 자주 뵙고 싶은 수많은 이유 중 하나. 그런 의미에서 자리가 파할 때 쯤 나왔던 이야기가 있었는데, 꼭 그렇게 되었으면 좋겠다. 자세한 내용은 생략.

end.

Comment and share

시작이 반이다.

  • 나는 컴퓨터속을 벗어난 적이 없는, 뭔가 현실세계에는 나가지못한 그런것을 개발한다. 그래서 뭔가 하드웨어를 만져서 현실세계의 것을 다루고 싶었다.
  • 일단은 조금은 편하고 익숙한 것에서 부터 출발하기로 하였다.
    • ‘라즈베리파이’라는 마치 장난감 같은? 아주조그마한 컴퓨터와 그것과 세트로움직이는 ‘라즈베리파이 카메라 v2’ 일단은 이거 두개로 무언가를 해보기로 하였다.
    • 당연히, 그 무언가는 이 카메라로 데이터를 취득하고 라즈베리파이 안에서 뭔가 데이터처리를 하는 것이다. (일단은 이것부터… 다음에는 이 데이터를 기반으로 뭔가 반응을 보이는 것을 하고자한다.) 또한, 딥러닝은 쓰지않을 생각이다. 기존의 많은 영상처리, 신호처리 방법을 적용시킬 생각이다. 당연히 이걸 잘모르니까 공부하면서 한다.

환경 세팅

  • 큰제목이 시작이 반인 이유는 고작 라즈베리파이 카메라를 붙이고, 거기서 영상을 받는 것조차 쉽지않았기때문이다. (젠장. 역시 현실세계는)
  • 여기서는 3가지 세팅에 대해서 설명을 하도록 한다.
    • (1) 라즈베리 파이에 원격접속하기. 매번 라즈베리파이를 쓰겟다고, hdmi뽑아서 붙이고 키보드랑 마우스를 연결하는 것보다는 원격접속하는 편이 낫다.
    • (2) openCV 설치하기. 윈도우 말고 다른 우분투같은 os에서 python opencv를 설치하는 것은 정말쉬운일이 아니다.
    • (3) 카메라를 라즈베리파이에 끼우고, 데이터를 받아보자.
    • (기타) 사람들은 vi로 python 코드를 짜던데..이건 아닌거같다. 넘나어렵다. 편한 atom을 깔려고했는데 실패 (아놔). nano를 이용해서 코드를 짜보기로
  • 이게되면 정말 시작할 수 있는 위치에 선 것.

(1) 원격접속하기.

  • 원격접속은 가장 기본이되는 ssh가 있다. 그리고 영상을 봐야하니까 화면도 받을 수 있는 VNCserver라는 방식도 있다. 뭐 그렇게 어려운방식은 아니다.

    일단. VNC vncserver

  • 라즈베리파이에 vnc 서버를 설치해서 화면으로 직접 원격접속하는 것
  • 설치
1
2
3
sudo apt-get update

sudo apt-get install tightvncserver
  • 설치가 완료되면 vncserver :1 를 terminal에 입력해서 서버를 열어준다.
  • 접속하고싶은 피씨에 vnc viewer를 깔고 IP주소:1 로 접속하면 끝

  • 추가

    • 설치할 때, setting에서 vncserver 접속 가능? 뭐이런거 설정해준거같은데 잘 기억이안난다. 안되면 거기들어가서 찾아보는 것을 추천.

SSH 이용하기

  • vnc server를 이용하는 경우 일단 라즈베리파이에 들어가서 서버를 열어주어야함. 결국 한번은 키보드꼽고, 모니터꼽고 막 그래야 한다는 것 (오쒯..)
    • 하지만 ssh로 터미널켜서 server를 열어준다면? (ㅋㅋ이거뭔가 지저분한 방법인데ㅋㅋ)
  • 우선 option을 ssh 가 가능하도록 바꿔주자

    • sudo raspi-config 로 접속
      • 일반적으로 8. advanced option에 ssh가 있다고한다 (내라즈베리파이는 그게없다. 너무구버전?혹은신버전?)
      • 대신 4. Interfacing Options에 들어가있음
        • SSH 활성화시켜줌
  • 원격접속

    • ssh (접속할 ID)@(IP주소)로 접속 가능
    • 일반적으로 라즈베리파이의 ID는 pi password는 raspberry 이다.

(2) openCV 설치하기.

  • Opencv 설치하기 참고사이트 혹은 참고사이트2

    • 여기서 아주기이이일게 설치를 하는 것이 나온다. 이 글에서 사용한 방법은 이게 아니지만 복잡하고 긴만큼 이렇게 까는것이 좋은거 같다. 아마도 정석인듯 밀고다시깔땐 이걸로해야지.
    • 둘 다 같은 사람이 쓴거같은데
  • 현실은 누군가가 미리 쎄팅해놓은걸 따운받음. 개꿀

    • 여기여기
    • 다 좋은데 이러면 가상환경에 어뜨케 opencv넣는지 모르겠음. 대체 opencv는 어디에 깔려있는걸까

(3) 카메라 연결

  • 라즈베리파이와 라즈베리파이카메라는 csi포트라는 것을 통해서 연결이 된다.

    • 이것도 ssh와 마찬가지로 sudo raspi-config 여기로 들어가서 카메라부분을 9잘찾은 다음) enable만들어주면 라즈베리파이 카메라와 연결이 됨.
  • 사진 테스트

    • 일단 제대로 끼워졌나 확인을 시작해보자
    • 터미널로 가서 아래명령어를 치면 test_pic.jpg라는 이미지가 찍힌다.
    1
    raspistill -o test_pic.jpg
  • 이제는 Opencv로 영상을 받아보자. 그래야 python으로 뭔가 영상을 만지작만지작하지.

  • Opencv로 영상에 접근하기위해서는 V4L2드라이버를 로드해줄 필요가 있음.
    • sudo modprobe bcm2835-v4l2를 터미널에서 실행한다.
    • 그러면 드라이버가 로드됨
    • 드라이버가 로드되면 ls /dev/video*했을떄 video0가 추가되었을 것이다.
  • 부팅 시점에 드라이버로드 해주기.
    • /etc/modules 수정해주기. nano를 쓰자.
      • 터미널에서 nano /etc/modules 실행
      • 제일 아래줄에 bcm2835-v4l2추가해주기.
  • 아직 잘 모르지만. 예제코드를 돌려보자.

    import cv2
    cap = cv2.VideoCapture(0)
    
    while cap.isOpened():
      ret, img = cap.read()
      if ret:
        cv2.imshow('test', img)
        if cv2.waitkey(1) & 0xFF == 27: # esc
          break
    

깔았다

  • 고작 영상한번 띄우자고 너무나고생했다. 하 일단은 좋은컴퓨터에서 영상로드해서 할까봐…
    • 다음번엔 신호처리 기법을 적용시켜본다!
    • 일단 1차 목표는 딥러닝을 쓰지않고, 사물이나 사람을 인식해서 그 위치를 추척하는걸 구현하는 것.
    • 2차목표는 지난번에 삿던 CCTV 라즈베리파이에 연결하기… 그래야 그 찾은 위치 따라다니지 히익(망한듯 CCTV망가짐)

Comment and share

최근 ssh로 서버에 붙어 작업할 일이 많아지면서 자연스레 맥 터미널에서 ssh를 사용하는 빈도가 함께 증가하였는데, centos에 접속할 때는 별다른 에러가 발생하지 않지만, 우분투에 접속할 때는 항상 뜨는 에러가 있었다(이게 OS를 가리는 문제인지는 모르겠지만, 경험과 지식이 짧은 내 입장에선 그렇게 받아들여졌다).

1
Unable to negotiate with ***.***.***.*** port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

아무런 지식이 없는 상태에서 해석을 해보자면, 서버에서 요구하는 어떤 key exchange method들을 내 맥OS에서 지원하지 않는다는 이야기로 받아들였다. 역시나 구글링이 필요한 시점. 처음 찾았던 해결책은 ssh command에서 옵션으로 key exchange algorithm을 지정해서 접속하는 방법이었다.

  • 기존 접속 command : ssh id@***.***.***.***
  • 해결 접속 command : ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -caes128-cbc id@***.***.***.***

매번 하다보니 너무 귀찮기도 했고, 어느 정도(?) ssh나 리눅스를 건드려보면서 직접 접속할 때 config 파일을 수정하여 저 과정을 줄일 수 있지 않을까 생각했고, 맥os상의 /etc/ssh/ssh_config 파일을 수정하여 답을 찾았다. 주석 처리가 되어 있는 Ciphers 및 MACs의 주석을 제거하고, 맨 아래 HostkeyAlgorithms과 KexAlgorithms 관련 내용을 추가해주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Host *
# ForwardAgent no
# ForwardX11 no
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
# Protocol 2
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
MACs hmac-md5,hmac-sha1,umac-64@openssh.com
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h

Host *
SendEnv LANG LC_*

HostkeyAlgorithms ssh-dss,ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1

뭔지 제대로 모르고 config 파일을 건드는 건 상당히 위험한 듯 하지만, 당장 눈 앞의 문제를 해결하는 것이 우선인 우리네 세상에 그런 거 기다릴 시간이 어디 있는가. 공부할 내용이 하나 늘었다.

끝.

Comment and share

이야기의 시작, 케밥

이 이야기의 시작은 2012년 3월 말로 거슬러 올라간다. 왜인지는 아직도 알 수 없지만 그 당시 배움에 대한 갈망이 넘쳤던 다섯 명의 경영대 문돌이 2학년 학생들이 이를 해소하기 위해 모여 ‘케밥’이라는 이름의 스터디 모임을 진행하기에 이른다.

케밥은 범(가칭)이라는 인물에 의해 지어진 이름으로 기억하는데, 각자의 관심 분야 내의 사례를 통해 시사점을 도출하자는 목적에 맞게 케이스 바이 케이스(case by case)를 어떻게 줄이고 줄여 만들어졌던 것 같다. 돌아보니 정말 어이없기 그지없다. 이외에도 다양한 생각을 가진 사람들이 모이다 보니 총 5명이 함께 참여하였고, 매주 수요일 수업을 마치는 시각에 학교 세미나실에 모여 각자 다른 관심분야의 주제를 가져와 발표하고, 함께 이야기하는 시간을 가졌다.

배움에 대한 갈망은 생각보다 오래 지속되었다. 비공개적인 활동을 했기 때문에 큰 규모의 인원 추가는 없었지만, 배움에 대한 갈망에 각자의 관심분야에 대한 흥미까지 더해져서 한 번의 펑크 없이, 그 해 12월 31일까지 모임을 이어나갔다. 하지만, 꽤나 오래된 일이라 기억이 잘 나지 않아 그 당시 모아두었던 자료들을 기반으로 날짜를 추정해본 결과, 2012년 12월 31일 그 날을 이후로 그 어떠한 기록도 찾아볼 수 없었다. 그렇게 거짓말처럼 케밥은 공중분해되었다.

이유는 간단했다. 입대. 요즘은 군대를 가고 싶어도 가지 못하는 상황들이 속출한다고 들었던 것 같은데, 그 당시에는 나라에서 못 데려가서 안달이었다. 나의 경우 1학년 1학기를 마치고 바로 입대하여 군복무를 일찍이 마친 상태에서 나머지 구성원들을 만난 상황이었고, 준몬은 이런저런 사정 탓에 입대를 느지막히 할 생각이었다. 하지만 나머지 구성원들은 자유로울 수 없었고, 그렇게 그들은 나라의 부름을 받고 떠났다.

근데 케밥이 왜?

당시 함께 모였던 다른 인원들은 케밥을 어떻게 기억할 지 모르겠지만, 적어도 나와 준몬은 그 때를 가장 열정넘쳤던 시기로 추억해왔다. 그 이유는 우선 강압적이지 않았고, 자율성이 보장되었던 탓이 가장 큰 것 같다. 이제와 그 시절 자료들을 보니 조금 부끄러운 감도 없진 않지만, 그 당시 케밥이 추구하던 목표는 크게 세 가지였다.

  • 다양성 확보 (다양한 배경을 가진 구성원들의 다양한 관심분야를 바탕으로 다양한 지식을 공유)
  • 느린 사고(slow thinking)
  • 자율적, 창의적 학습

이는 뒤에 세워질 학과 내 동아리의 모티브로 이어졌고, 케밥과는 다르게 공개적으로 회원을 모집하면서 현재 학과 내에서 가장 영향력 있는 동아리가 되었다(는 건 나만의 생각이지만). 물론 나와 준몬 역시 설립에 함께 참여하였고, 활동도 지속하다가 이제는 원로(?)가 되어 조용히 깨톡방만 눈팅중이다. 나이 먹는 게 벌써부터 이렇게 서럽다.

뭐 아무튼간에, 모두가 그 시절을 그리워했다 뿐이지 지금껏 같이 이렇다할 활동을 하진 않았다. 그냥 각자 눈 앞에 닥친 일들을 해결하면서 살았고, 그냥 가끔 만나 맥주나 한 잔 기울이면서 아이디어나 교환하던 정도였다. 그리고 약 2년 전, 추억팔이를 하던 둘 사이의 공통된 목표와 방향성이 잡혔고, 그게 바로 ‘케밥 때 처럼 꾸준히 목표를 향해 가자’는 내용이었다.

각자의 3년 반, 결국 방향은 비슷했다

2년 전 어느 날, 2012년 12월 31일 이후로 약 3년 반이 지난 시점에서 각자 해왔던 일들에 대해 돌아봤다. 나의 경우 동일 전공으로 대학원 진학을 선택해서 석사과정을 마쳤다. 대학원 생활 중 코딩에 대한 열망이 생겨 얕은 수준의 컴퓨터 언어를 익혔고, 이를 데이터 분석에 접목해서 무언가 성과를 내보고 싶어 학과 내 다른 후배 수달과 공모전에 나가 2등 정도로 추정되는 상을 받는 기염을 토하기도 했다. 물론 나는 하찮은 실력을 가지고 있었기에 그나마 경험이 많았던 수달이 거의 전담하다시피 했고, 버스를 열심히 흔들었던 나는 무임승차를 하면서도 뭘 알아야 할 수 있겠구나 하는 생각이 들었다.

준몬은 자칭 돈자생(돈없는 자취생)으로서 생계를 유지하기 위해 각종 웹언어를 짤막하게 습득하여 주변 지인들의 홈페이지 관리를 도맡아 했다. 더불어 stackoverflow에서 배운 실용적이며 얕은 언어를 발전시켜 무언가 유형의 product를 만들고자 하는 목표 아닌 욕심을 가지게 되었고, 본인의 애매한 포지션에 대한 회의감과 함께 언어에 대한 본격적인 공부를 시작하려고 마음만 먹고 있었다(고 나는 이해했다).

그렇게 서로가 가진 생각들을 공유하다 보니, 언어의 기본부터 쌓아가자는 공동의 목표가 잡혔다. 또한 케밥 시절에 대한 좋은 추억들을 바탕으로 다시 한 번 똑같이 해보자는 방향성 역시 생겼다. 평소 IT분야에 대한 지대한 관심을 가지고 있었으며 둘 다 말 많기로는 둘째가라면 서러웠기에 팀 이름은 예전에 지어두었던 ITsooda를 가져다 쓰기로 했고, 그 상태로 또 약 2년을 보내게 된다. 둘로는 부족했던걸까? 하며 아무 것도 하지 않으면서 인원을 두 명이나 더욱 추가하게 된다.

사공이 많으면 배가 산으로 간다

옛 말에 “사공이 많으면 배가 산으로 간다”는 말이 있는 것처럼, 각자 제 멋대로 노를 저어서는 배가 제자리에서 뱅글뱅글 맴돌기 마련이다. 원래 준몬과 나 둘 뿐이던 시절에는 조그맣다고 생각했지만 공부할수록 조그마한 것이 아닌 것을 알게 된 한 가지의 프로젝트를 가지고 시작하려고 했었다. 우리같이 문돌이로 태어나 어깨너머로 배운 지식을 가진 사람들이 멀디 먼 길을 가기 위해서는 일종의 목적지가 필요했고, 흥미를 최우선으로 두기에 우선 도달할 수 있는 곳이어야 했으며, 우리의 체력으로 쉽지도 어렵지도 않게, 적당히 힘 빠질때 쯤 닿을 수 있는 곳이어야 했다. 이런저런 목적지들을 후보에 두고, 최종적으로 한 가지를 고른 것이 ‘프로젝트 외심’이었다.

프로젝트 외심은 내가 수능 끝난 망나니 고3때 실제로 있었던 일을 바탕으로 만들어졌다. 세 명의 망나니가 치킨을 먹기로 하고선 서로 본인 집에 가까운 곳으로 장소를 정하려고 발악하여 약속 장소가 정해질 기미가 보이지 않았다. 이때 한 명의 아이디어로 지도상에 각자의 집 위치를 찍고, 삼각형과 그 삼각형의 외접원을 그려 외심지점에서 만나기로 했던 것에 착안하여 웹 혹은 앱으로 해당 기능을 구현하는 것 정도로 프로젝트 외심을 정의할 수 있겠다. 물론 이와 비슷한 기능을 제공하는 서비스들이 꽤나 존재했었지만, 그냥 우리 힘으로 해본다는 것에 의미를 둔 프로젝트였다.

이러한 목적지는 사람이 늘면서, 각자가 할 수 있는 일이 다르기에, 더욱 수월할 것으로 보였으나, 사공이 많아지면서 앞서 이야기했던 것과 같이 제자리에서 맴돌기 시작했다. 우리는 더이상 학교에서 밤을 새며 시간을 보낼 수 있는 청춘 대학생이 아니었고, 오늘 무리하면 내일 망하는 삶을 살게 되면서 자연스레 각자가 맡은 “업무의 연장선”에서 문제를 바라보아야만 했다. 물론 업무를 더 잘 하거나 더 편하게 하고 싶은 욕구가 있다보니 자연스레 그러한 분야에 더 몰두하게 되는 것도 있을 듯 하다. 이러한 이유로 만나거나, 혹은 온라인에서 무언가를 해보자는 이야기를 할 때마다 “공감은 하지만 무언가 새로운 걸 하는 것은 잘 모르겠다”는 식의 결론이 나오는 경우가 많았다. 큰 틀에서는 각자가 비슷한 방향성을 가지고 있다고 아직도 생각하나, 만나서 이야기를 해보면 분명히 각자의 느낌이 살짝살짝 다르다. 이는 현재 각자가 처한 환경과도 분명히 밀접한 관련이 있을 것이다.

우선 각 사공들은 모두 경영학부를 졸업했다. 졸업 후 두 명은 여러 인고의 과정을 거쳐 현업 개발자가 되었고, 한 명은 공학석사가 되어 문돌이 세탁에 성공했다. 나는 경영학 석사를 취득하고 이제서야 늦은 문돌이 세탁에 도전하는 중이다. 어떻게 보면 모두가 업으로 개발(?)을 하고 있지만, 느낌이나 목적이 조금씩 다른 것은 분명하다. 그러다보니, 모여서 뭘 할 수 있을지에 대해서는 아직도 결론이 나오지 않았다. 하지만, 각자가 서로 다른 부분에서 좀 더 크게 노를 젓는다면, 맴돌게 되는 원의 크기가 커질 수 있지 않을까 하는 문돌이스러운 생각이 들었다. 서로가 서로의 분야에 대해 소개하고, 나머지가 그에 대해 간략히만 이해하더라도 더욱 넓은 식견과 사고방식을 가지게 될 수 있을 것 같았다. 그래서 그렇게 각자의 방향으로 나아가기로 했다.

어떻게 할 것인가?

개발의 ㄱ도 제대로 모름에도 어쩌다 우연히 주워듣게 된 Agile 소프트웨어 개발 선언을 보며 우리는 우리의 방향성을 잡았고, 아래와 같다.

우리는 어줍짢은 코딩을 공부하고, 블로그에 글을 쓰면서 문돌이 탈출의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다.

  • 최적화와 효율성보다 삽질과 노가다를
  • 창의적인 개발보다 쓸모없는 즐거움을
  • 화려한 계획보다 우발적인 행동을
  • 생산적인 결과물보다 덕질에 가까운 과정을

가치 있게 여긴다. 이 말은, ‘보다’의 왼쪽에 있는 것들도 가치가 있지만, 평균 이하의 우리는 ‘보다’의 오른쪽에 있는 일들도 해내기 벅차다는 것이다.

얼마나 할 것인가?

우선은 2주에 하나씩 각자의 이야기를 쓰기로 했다. 그리고 2주마다 오프라인에서 만나 각자의 내용에 대한 세미나도 하기로 했다. 늦거나 지키지 못하면 밥을 사기로도 했다, 모두가 동의했는지는 모르겠지만. 쓰잘 데 없이 프롤로그에 힘을 너무 많이 쏟아서 나는 아마 다음 주에 밥을 사고 있을 지도 모르겠다… 우선은 본인들이 하고 싶은 내용들로 채워가겠지만, 중간중간 서로 함께 만들어낼 수 있는 다양한 것들이 생긴다면 그때그때 무언가를 할 지도 모르겠다. 길다면 긴 글은 여기서 마무리하고, 2주라는 시간이 늘 지켜지는 아름다운 세상이 오기를!

Comment and share

  • page 1 of 1

Team ITsooda

author.bio


author.job