Talk with Hani

로망은, 실현되리라!

[아두이노 프로젝트#3] 아두이노에 웹 브라우저로 명령하기

January 9th, 2012

지난 주까지 작업해서, 아두이노에 모터를 달아 주었다. 원래 이번 주 계획은 아두이노에게 초음파 눈을 2개 붙여 줄려고 했는데, 이 일은 잠시 미루기로 했다. 그래서 이번 주에는 아두이노에 달아 놓은 와이파이를 사용해서 PC나 아이폰에서 동작 명령을 내리는 기능을 추가하기로 했다.

모터 달린 아두이노
모터를 달고 나서 하드웨어 추가는 잠시 쉬고 있는 아두이노

명령을 내리는 클라이언트는 브라우저를 사용해서 PC나 아이폰과 같은 플랫폼에 상관없이 구동되게 했다. 클라이언트는 HTML과 jQuery를 사용해서 초간단으로 구성했다. 로딩을 없애기 위해서 Ajax를 사용했다. 서버는 아파치와 php를 사용해서 만들었다. 클라이언트와 통신하는 Ajax page와 클라이언트에서 수신한 데이터를 아두이노에서 접속해서 정보를 가져가는 페이지로 구성했다. 초간단으로 구현하기 위해서 http 기반 통신으로 아두이노와 서버가 통신하게 구성했다. 아두이노는 http로 서버에 접속해서 클라이언트에서 입력한 데이터를 받아와서 모터를 구동하게 했다.

통신 구성
통신 구성도

아두이노에서 모터 구동 코멘드는 100ms 인터럽트로 돌렸고 서버와 통신하는 것은 loop 함수에 두었다. http가 무거운 관계로 클라이언트에서 전달한 명령를 수신하는 데 약 1초 정도 지연이 생기는 것 같았다(이것은 정확하게 측정하지 않은 데이터다. 대략 느낌이 ㅎ). 이 지연을 없애려면 별도 프로토콜을 만들어야 하는데, 이건 차후 반복주기(iteration)에 수행하는 것으로 하고 넘기겠다. 어쨌든 현재는 아이폰과 PC로 전후진, 좌우회전 명령을 줄 수 있고 이 명령을 받아서 아두이노가 움직인다. 정말로 이제는 초음파 눈을 달아야겠다.

브라우저 기반의 컨트롤러
브라우저 기반의 컨트롤러(이것도 고칠 게 많다)

대한민국 소프트웨어는 위기다?!

이 위기를 도약의 발판으로 삼고 싶으신가요? 그렇다면 ‘대한민국 소프트웨어, 리스타트’, 이 책을 한 번 읽어 보세요.
대한민국 소프트웨어, 리스타트

Yes24 교보문고 알라딘 리브로 인터파크

좋은 아키텍처, 나쁜 아키텍처, 이상한 아키텍처

January 6th, 2012

스페인에 가면 당연히 봐야 하는 건축물들이 있다. 그중에서 반드시 봐야 하는 건축물을 꼽으라고 한다면, 아마도 ‘사그라다 파밀리아 성당’일 것이다. 이 성당은 건축가 안토니 가우디가 설계한 것으로, ‘가우디 성당’이라고 더 잘 알려졌다. 가우디가 이 성당의 건축을 맡은 것은 1883년이었다. 그는 죽기 직전까지 이 성당의 건축에 매달렸지만, 아쉽게도 완공이 되는 것을 보지 못하고 죽었다. 그렇다면 이 성당은 언제 완공이 되었을까? 아니다. 이 성당은 지금도 건축중이란다. 관광수입으로 조금씩 짓고 있다고 한다.
 
가우디 성당
 
미국의 산호세에 가면 기괴한 건물이 하나 있다. ‘윈체스터 맨션’이라는 건물인데, 총기를 제조하는 원체스터社의 상속녀인 사라 윈체스터가 지은 건물이다. 이 건물이 이상한 이유는, 건축이유에서 찾을 수 있다. 사라는 그녀의 남편이 죽자 남편 회사의 일부 지분과 남편의 재산을 상속받는다. 어느날 남편의 혼과 이야기를 나눈 주술사에게 충격적인 이야기를 든는다. 남편은 주술사를 통해서 부인에게 이런 이야기를 전했다고 한다.
 
“부인, 우리가 만든 총에 죽은 원주민들과 동물들 그리고 당신이 살 집을 지으시오. 단, 공사를 멈추지 마오. 공사를 멈추면 당신은 죽음을 맞이하게 될 것이오.”
 
이 이야기를 듣고 기절초풍한 사라는 어떻게 했을까? 산호세로 이사해서 지금의 윈체스터 맨션에 자리를 잡았다고 한다. 처음에 이 집은 방 몇만 있었다. 하지만 그녀는 이사하고 나서 공사를 시작했다. 그리고 그녀가 죽을 때까지 약 38년간 공사를 쉬지 않고 했다. 그 동안 수 백 채의 방을 지었고 그만큼의 방을 부수기도 했다. 무계획적인 공사 덕분에 맨션에는 엄청난 규모의 계단이 생겼고 어떤 방에는 사람이 살 수 없게 만들어지기도 했다고 한다.
 
윈체스터 맨션
 
전함 바사에 관한 이야기다. 전함 바사는 예전 포스트에서도 소개한 적이 있다. 1620년 대 스웨덴은 폴란드와 전쟁중이었다. 스웨덴 임금은 해상권을 장악하기 위해서 화력이 강력한 전함을 만들 것을 지시했다. 이 프로젝트의 책임은 ‘헨릭 허비슨’이 맡았다. 서로 모순되는 요구사항이 너무 많은 탓에 전함을 건조하는 일은 쉽지 않았다. 그 중에서 가장 어려운 것은 많은 수의 대포를 장착하는 것이었다. 어찌어찌하여 전함은 건조되었고 드디어 출항하는 날이 밝았다. 첫 출항을 자축하는 축포를 발사하다가 웃지 못할 사건이 벌어졌다. 대포가 너무 강력하다 보니 축포의 반동으로 배가 기울고 말았다.
 
전함 바사
 
앞에서 설명한 가우디 성당, 윈체스터 맨션, 전함 바사의 공통점은 무엇일까? 여러가지가 있겠지만, 난 ‘아키텍처’라고 본다. 가우디가 죽고 나서 수십 년이 지났음에도 원래 계획대로 공사가 진행될 수 있었던 이유는 무엇일까? 가우디가 성당의 전체적인 청사진인 ‘아키텍처’를 잘 잡았기 때문이다. 유령 들린 집의 대명사가 된 윈체스터 맨셔의 경우는 어떤가? 아키텍처라고 부를만한 것이 없다. 그 집의 공사를 총괄한 사라 윈체스터의 목적은 공사의 진행이었다. 결국 아키텍처의 부재는 사람이 살지 못하는 기괴한 집이 만들어지게 했다.
 
전함 바사의 경우는 어떨까? 통일성이 있고 그 규모의 배를 만드는 일이었기 때문에, 아키텍처는 분명히 있었다. 하지만 아키텍처를 설계하면서 요구사항이 제대로 반영될지 요구사항 간 모순이 없는지 검토하지 않았기 때문에 출항하자마자 침몰하는 운명을 맞게 되었다.
 
결론적으로 보자면 아키텍처가 좋거나 이상하거나 나쁘면, 그 결과물도 좋거나 이상하거나 나쁘다. 앞의 예들은, 분야는 다르지만 아키텍처가 얼마나 중요한지를 보여주는 좋은 사례라고 생각한다. 그렇다면 소프트웨어에서 좋은 아키텍처란 어떤 특징을 가져야 할까? 최신 UML 도구를 사용해서 그리고 UML을 실행해서 아키텍처의 성능 평가를 할 수 있어야 좋은 아키텍처를 그리는 것일까? 이것도 중요한 조건이겠지만, 난 아키텍처를 그리는 표기법이나 도구는 정말 부차적인 요소라고 생각한다. 즉 아키텍처를 그리는 목적에 부합하지 않는다면, 아무리 좋은 표기법이나 도구를 써도 소용없다.
 
최근에 내가 쓴 ‘대한민국 소프트웨어 리스타트’에서도 아키텍처와 아키텍트에 대해서 몇 개 chapter를 할애했다. 그 가운데 좋은 아키텍처가 가져야 할 조건으로 두 가지를 이야기했다. 요구사항은 기능 요구사항과 비기능 요구사항으로 나눈다. 요구사항 측면에서 보자면 아키텍처는 기능 요구사항을 잘개 쪼개서 개발자가 단위 설계에 집중해서 자신이 맡은 모듈을 만들 수 있는 수준으로 나눌 수 있어야 한다. 흔히 말하는 분해(decomposition) 작업을 하면서 응집성이 높고 결합성이 낮은 구조가 되도록 아키텍처를 구성해야 한다.
 
다음으로 비기능 요구사항을 아키텍처가 담아낼 수 있을지 검증해야 한다. 예를 들어서 고객이 비기능 요구사항의 하나로 가용성을 요구했다. 가용성의 수준이 99.99%라고 한다면, 과연 우리가 만드는 소프트웨어 시스템이 이런 가용성을 달성할 수 있을지 어떻게 알 수 있을까? 만약에 아키텍처에서 이런 것들을 고민하지 않는다면 개발자들의 단위를 완성하고 나서 각 단위를 모두 합치고 통합테스트를 해보기 전까지 이런 가용성을 만족할 수 있을지 알 수 없다. 물론 이런 통합테스트도 해야 한다.
 
하지만 통합테스트에서 가용성을 만족하지 못했을 때 어떻게 해야 할까? 부분 최적화라는 피말리는 작업을 해야 한다. 밤을 새고 휴일을 반납한 채 부분최적화를 해도, 아키텍처의 구조적인 문제 때문에 해결이 안된다면? 그렇기 때문에 비기능 요구사항을 만족할 수 있을지 아키텍처를 설계하면서 관련자들이 상세하게 살피고 검토해야 한다.
 
아키텍처와 아키텍트가 중요하다고 말한다. 그런데 왜 중요하죠?라고 물으면 제대로 답을 하는 사람이 그다지 많지 않다. 소프트웨어를 만드는 조직이라고 한다면, 그 규모의 크기와 관계 없이 어떤 시스템을 만들든 반드시 아키텍처를 설계하고 검증해야 한다. 이 작업을 제대로 하지 않고 생기는 문제를 처리하기 위해 삽질을 하는 것은, 그 누구의 잘못도 아니다. 바쁘니 아키텍처 같은 건 고민하지 말고 일하라고 지시한 경영층의 과실과 이에 동조한 엔지니어의 작품이다. 그래서 새해엔 우리 모두 아키텍처에 조금 더 관심을 갖는 시간이 되었으면 좋겠다.
 

대한민국 소프트웨어는 위기다?!

이 위기를 도약의 발판으로 삼고 싶으신가요? 그렇다면 ‘대한민국 소프트웨어, 리스타트’, 이 책을 한 번 읽어 보세요.
대한민국 소프트웨어, 리스타트

Yes24 교보문고 알라딘 리브로 인터파크

이게 없다면, 1만 시간의 법칙은 헛소리다!

January 5th, 2012

아웃라이어에서 언급한 1만 시간의 법칙 때문에, 어떤 분야에 능통하려면 적어도 10년은 그 분야에서 노력해야 한다는 인식이 널리 퍼졌다. 즉 그만큼 달인이 된다는 건 쉽지 않은 일임을, 아웃라이어의 1만 시간 법칙 때문에 온 국민이 깨닫게 되었다. 여기까지는 1만 시간의 법칙이 주는 순기능인데, 역기능도 있다. 누구나 1만 시간만 노력하면, 예를 들어 1만 시간 동안 바이올린을 연습하면 사라 장이 되고 1만 시간 동안 피켜 스케이팅을 연습하면 김연아가 될 수 있을까? 당연히 이 질문에 대해서 ‘그렇다’고 대답할 사람은 없다.
 
이 점에서 모순적인 상황이 발생한다. 1만 시간의 법칙을 통해서 누구나 노력하면 달인이 될 수 있다는 데 공감하지만, 반대로 1만 시간을 투자한다고 해서 누구나 최고의 경지에 이르는 건 아니다,란 사실에도 공감한다. 그렇다면 1만 시간을 투자해서 누구는 달인이 되고 누구는 달인이 되지 않는 이유는 무엇일까? 1만 시간의 법칙을 직장생활에 적용하면 보직을 바꾸지 않고 같은 분야에서 10년 동안 일한 직장인은 모두 달인이 되어 있어야 한다. 하지만 우리의 주위를 둘러보면 그다지 달인들이 많지 않다. 바로 이 부분이 1만 시간이 주는 맹점이다.
 
내가 배움을 시작해서 망한 분야가 있고 망하지 않은 분야가 있다. 대표적으로 망한 분야는 당구와 수영이다. 그리고 망하지 않은 분야는 피아노다. 망했다는 뜻은 제대로 실력이 붙지 않았거나 실력이 붙었더라도 교정할 게 많다는 뜻이다. 그렇다면 당구와 수영은 왜 망했으며 시작한지 얼마 안 되는 피아노는 왜 망하지 않았을까? 당구, 수영은 레슨을 제대로 받지 않았고 피아노는 꾸준히 레슨을 받았기 때문이다. 레슨을 받는다는 것은 무슨 의미일까? 바로 전문가에게 내가 못하고 있는 부분을 꾸준히 피드백받고, 지적받은 부분을 내가 개선하려고 의식적으로 노력한다는 뜻이다.
 
자유형을 3개월 정도 배우고 나서 레슨을 끊었다. 평소 배우고 싶은 수준까지 배웠다는 판단을 했다. 그리고 혼자서 연습해도 3개월 배운 기술로도 충분하리란 생각을 했다. 그렇게 몇 달을 혼자서 했는데 실력이 잘 늘지 않았다. 인터넷에서 수영하는 것을 동영상으로 찍어서 보면 문제점을 객관적으로 볼 수 있다는 글을 읽었다. 그래서 실제로 자유형하는 모습을 찍어서 봤다. 객관적으로 내가 수영하는 모습을 본 게 처음이었는데, 충격 그 자체였다. 자유형에서 해서는 안 되는 나쁜 습관을 모두 가지고 있었다. 연습하는 동안 유명 선수들의 영법을 줄 곧 봤기 때문에, 눈이 높아졌던 셈이다. 그 눈으로 내 실제 영법을 보니, 할 말이 없었다. 결국 나쁜 수영 자세를 고치려고 다시 수영 레슨을 받기 시작했다. 하지만 한 번 들인 습관은 쉽게 고쳐지지 않았다.
 
1년 전쯤부터 피아노를 배우기 시작했다. 지금은 체르니 100을 연습하고 있다. 매일 같이 연습하려고 하는데 여러 가지 일로 쉽지 않다. 하지만 그래도 체르니 100을 칠 수 있는 건 열정적인 피아노 선생님 덕분이다. 레슨을 받을 때마다 정확하게 내가 무슨 문제를 가지고 있는지 놓치지 않고 알려 주신다. 박자를 쪼개는 게 이상하면 어떤 점이 문제인지 알려주고 그 문제를 해결할 방법을 제시해 준다. 반주음이 너무 크다는 것을 지적해 주고 왼손 반주음을 줄이고 멜로디 라인을 크게 하는 방법을 알려 주신다. 손목에 힘이 들어가면 바로 손목에 힘이 들어갔다는 사실을 알려 주신다. 말하자면 수영처럼 혼자서 연습했다면 몸에 체득했을 나쁜 습관을 들일 가능성이, 피아노 연습에서 원천적으로 차단된다.
 
1만 시간을 투자했을 때 어떤 사람은 달인이 되고 어떤 사람은 평범한 사람이 되는 이유는 무엇일까? 달인이 되고자 하는 동기 부여도 중요하지만 더 중요한 것은, 무엇을 못하고 있는지 지속적인 피드백을 받고, 그 문제를 개선하려는 의식적인 노력을 했느냐에 달려 있다. 이 점이 빠진다면, 1만 시간의 법칙은 무의미한 삽질의 시간이다. 옛말을 빌리자면 그냥 가방만 들고 학교 간다고 해서 공부를 잘하는 게 아니다. 공부하고 어떤 점이 부족하지 시험을 보고 시험 결과에 따라서 부족한 부분을 채워야 우등생이 되고 명문대에 진학하는 것이다.
 
새해가 됐다. 자신의 분야에서 달인이 되고자 계획을 세운 사람도 있을 것이다. 그리고 하루 일과 중 많은 시간을 그 분야에 할당했다면, 절대 혼자서 그 시간을 채울 생각을 하지 마라. 어떤 분야가 되었든 자신을 객관적으로 피드백할 시간을 갖지 못한다면, 소중한 시간을 들여서 연습한다고 해도 달인이 되지 못할 수도 있다.
 

대한민국 소프트웨어는 위기다?!

이 위기를 도약의 발판으로 삼고 싶으신가요? 그렇다면 ‘대한민국 소프트웨어, 리스타트’, 이 책을 한 번 읽어 보세요.
대한민국 소프트웨어, 리스타트

Yes24 교보문고 알라딘 리브로 인터파크

되는 일이 없다고? 왜 그럴까. 그렇다면 해법은?

January 3rd, 2012

처음부터 잘 되지 않는 일은 끝까지 잘 안 된다. 왜 그럴까? 최근에 내가 경험한 사례다. 워크샵에 참석하려고 회사에 품의를 올렸더니, 경비를 담당하는 부서에서 사전 등록을 하면 경비가 대폭 줄어든다고 사전 등록을 해달라는 요청했다. 문제는 워크샵을 주최하는 쪽에서 사전등록은 무조건 현금으로만 가능하다고 하다는 데서 생겼다. 결국 내 돈을 내고 사전등록을 하고 워크샵을 등록했다. 비용처리에서 먹구름이 몰려오기 시작했다. 비용을 처리하려면 주최측에서 세금계산서를 발행해야 하는데, 워크샵 당일 기준으로만 세금계산서를 발행해 준다고 했다. 회사에서는 세금계산서가 없으면 비용 처리가 안 된다는 입장이었다. 결국 사전 경비를 지불한 달에 돈을 못받았다.

워크샵을 참석하고 세금계산서를 처리하려고 하니 이번에는 예산이 없었다. 내가 잡아 놓은 예산을 이미 누군가가 다 써버렸다. 결국 예산을 확보하는 일부터 시작해야 했다. 그냥 여기서 끝나면 좋았을까? ㅎ 다른 사소한 문제가 있었고, 다행히도 해가 바뀌기 전에 관련 경비 처리를 할 수 있었다. 워크샵은 몇 달 전에 다녀왔지만 돈은 새해가 되어서나 받을 수 있게 되었다.

처음 질문으로 돌아가보자. 처음부터 잘 되지 않는 일은 끝까지 잘 안 된다. 왜 그럴까? 당연히 시작할 때부터 문제가 있는 일은 그 일을 성사시키려면 그 일보다 주위의 일을 정지작업하는 게 손이 많이 간다. 그래서 안 되는 일을 하다보면 일이 잘 안되는 것처럼 보일 수밖에 없다. 그 일을 하기보다 가욋일을 많이 해야 하기 때문이다. 결국 첫단추가 잘못 채운 일은 끝까지 안 되는 것처럼 보이고 다시는 그 따위 일을 하지 않겠다는 다짐을 하지만, 안 되는 일을 끝까지 해내면 술술 풀리는 일을 할 때보다 보람이 더 많다는 면도 있다.

주역은 8개의 괘를 두번 겹쳐서 총 64괘를 만들고, 그 괘를 풀이해서 일을 도모할 때 지혜를 얻는다. 8개의 괘를 두번 겹치기 때문에 마침 점을 치는 것 같지만, 주역은 점을 치는 점술서와는 다르다. 엄연한 동양의 경전으로서 그 안에는 주옥같은 지혜들이 숨겨져 있다. 64괘 가운데 가장 나쁜 괘로 불리는 괘가 있다. 바로 천지비다. 하늘을 뜻하는 건이 위에 올라가고 땅을 뜻하는 곤이 아래에 있는 괘다. 겉으로 보면 하늘이 올라가고 땅이 아래에 있기 때문에 정상적으로 보이나, ‘변화’를 이야기하는 주역에서는 가장 나쁜 게 본다. 왜냐면 하늘이 위에 있고 땅이 아래에 있으니 더 이상 변화가 생길 수 없기 때문이다.

즉 고매한 임금은 하늘로 올라가서 백성들의 말을 듣지 않고 신하는 땅에 해당하는 백성을 살피기보다 임금의 비위를 맞추기에 바쁘다. 그러니 소통이 일어나지 않고 사회 전반적으로 기운이 딱 맞혀서 백성들이 힘들다는 뜻이다. 현재의 대한민국이 천지비의 상황이 아닐까,한다.

천지비가 상황만 놓고 보면 나쁘지만, 변화를 이야기하는 주역에서 보자면 천지비는 하나의 과정인 셈이다. 현재 상황은 최악이지만 이제 바닥을 다지고 변화의 에너지를 만들 수 있는 형국이다. 그런데 이런 천지비 상황에서 그냥 시간만 지난다면 상황이 개선될까? 천만의 말씀이다. 막힌 운을 뚫을려고 백방으로 노력해야 한다. 당연히 사방이 꽉 막혔으니 일이 될 턱이 없다. 즉 하는 일마다 되지 않는 것처럼 보인다. 설사 그렇다 하더라도 주역의 지혜를 따른다면 일을 도모하고 추진해야 한다.

화살을 두 번 맞지 말라는 말이 있다. 이 말이 뜻하는 바는 무슨 뜻일까? 첫 번째 화살은 자신의 의지와 관계 없이 맞을 수 밖에 없다. 하지만 두 번째 화살은 자신의 의지에 의해서 충분히 피할 수 있다. 직장에서 상사한테 일 때문에 대박 깨졌다. 이것이 첫 번째 맞은 화살이다. 그런데 기분이 나빠서 집에 가서 아내나 애꿎은 애들에게 화풀이를 해서 가족 간의 관계를 악화시킨 게 바로 두 번째 화살을 맞은 셈이다. 첫 번째 화살은 상사가 쏜 것이기 때문에 어쩔 수 없지만, 두 번째 화살은 자신이 화통에서 화살을 뽑아 자신에게 쏜 셈이다.

경비를 처리하는 과정에서 고생 아닌 고생을 했다. 그런데 쉽게 갔으면 알지 못했을 회사의 경비처리 지식을 배울 수 있었다. 그리고 앞으로 그런 상황에서 어떻게 일을 처리해야 할지 배웠다. 물론 그 과정에서 스트레스를 받기도 하고 답답하기도 했지만, 좋은 쪽으로 생각하니 나름 지식을 얻었다는 긍정의 답을 얻었다.

새해부터 안 되는 이야기를 썼다. 잘 되는 일은 기분이 좋지만 우리가 배울 게 없다. 안 되는 과정에서 되게 하는 쪽으로 노력하다면 경험도 쌓이고 실력도 붙는다. 그런데 안 되는 일이 운이 꽉 막힌 일이어서, 아니면 자신의 에너지 파장이 천지비의 상황이어서 일이 안 될 수도 있다. 그렇다 하더라도 포기하지말고 막힌 운을 뚫기 위해 노력하는 게 좋다. 인생이라 그렇게 해도 지나가고 저렇게 해도 지나간다. 하지만 늙어서 왜 살았을까,란 답을 찾았을 때 어떤 쪽이 의미 있는 답을 얻을까?

대한민국 소프트웨어는 위기다?!

이 위기를 도약의 발판으로 삼고 싶으신가요? 그렇다면 ‘대한민국 소프트웨어, 리스타트’, 이 책을 한 번 읽어 보세요.
대한민국 소프트웨어, 리스타트

Yes24 교보문고 알라딘 리브로 인터파크