블로그 이미지
레인레테
연락처 : rainlethe@rainlethe.com 영혼을 잃어버리다.

calendar

      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      
2012/01/09 12:34 RL.P rogramming
1. 맨땅에 개발하던 시대.
아주아주아주아주 먼 옛날. 
소형 컴퓨터라는 것이 방 하나를 꽉 채울 만큼 큼직했던 시절.
디버깅이라는 것이 실제로 진공관 사이에 끼어 죽어있는 벌레를 처리하는 것이었던 때에 모든 개발자들은 컴퓨터 작동에 필요한 모든 논리를 처음부터 만들어내야 했어요. 

자동차를 만들 때마다 고무를 녹여 타이어를 만들고, 철을 녹여서 엔진을 만드는 격이었죠.


2. 라이브러리가 등장하다.
그러다가 누군가가 이런 생각을 했어요. 
그럼 미리 고무를 잔뜩 녹여서 타이어를 만들어놓으면, 자동차를 조립하기 편하겠네?
그래서 많은 개발자들은 일일이 고무를 녹이는 대신 타이어를 파는 가게에서 바퀴를 사다가 끼기만 하면 되었어요. 
자동차를 만드는 시간은  획기적으로 단축되었고, 모든 개발자들은 이것이 마법이라고 생각했어요. 

이런 타이어 같은 것을 '라이브러리' 라고 해요. 미리 만들어진 부품을 가져다가 쓰는거죠.


3. 프레임워크의 시대가 도래하다.
이렇게 타이어를 팔던 가게가 번성하던 어느 날, 새로운 자동차가 필요해진 A씨는  이런 생각을 했어요. 
'내가 왜 자동차를 만드는데 이 모든 부품을 다 알아야 하는 걸까? 그냥 조립이 다 되어 있으면 안되는걸까?'
그래서 A씨는 엔진, 타이어, 핸들 등이 다 붙어있는 자동차를 만들어 팔기로 했어요. 
이 자동차를 구매하는 사람들은 '색깔' 이나 '선루프'  등의 옵션만 선택하면 되게 된 거죠. 

이렇게 '자동차'를 만들기 위한 '꼭 필요한 부품들이 미리 조립되어 있는 것' 을 프레임워크라고 합니다.

이런 식으로 컴퓨터 프로그래밍은 발전되어 왔답니다.

더이상 사람들은 자동차에 대해서 정확히 어떤 구조로 굴러가는지 알 필요 없이 엑셀레이터를 밟으면 굴러가고 브레이크를 밟으면 멈추며, 핸들을 돌리면 방향이 바뀐다는 것만 알면 되는거죠.

참 아름다운 세상이에요.


4. 문제가 생겼을 때는 어떻게 하지?
끝!
.. 이라고 하면 참 아릅답고 행복했을 때지만, 현실은 그렇지 않아요. 
여느날처럼 자동차로 출근을 하던 B씨는 갑자기 달리던 자동차가 덜컥 멈추는 황당한 사태를 맞이하게 되었어요.
자동차에 대한 지식이라고는 운전하는 법과 라디오 켜는 법밖에 모르던 B씨에게 이건 낭패였죠.

그래서 B씨는 '인터넷'이라는 이름의 친구에게 다급하게 전화를 합니다. 
'인터넷'은 자기가 알고 있는 지식을 총 동원해서 B씨를 도와주려고 하지만
B씨는 도대체 왜 자동차가 멈추었는지 알 길이 없었기 때문에 설명하기가 너무 어려웠어요.

결국 B씨는 '인터넷'에게  '고렙 개발자' 라고 하는 이름의 자동차 수리가게를 소개받았죠.


5.  결국 구조를 다 알아야 하네?! 
'자동차 수리가게' 에서는 B씨에게 '엔진오일도 없고 미션 상태도 좋지 않네요.' 라고 말을 해 줬어요.
그렇지만 B씨는 자동차 안에 왜 엔진오일이 필요한 건지, 미션이라는건 도대체 무엇인지 알 수가 없었어요.
그냥 '고쳐주세요' 라고 말하는 수밖에 없었죠.

그리고 생각했어요. 
'아. 정상적인 상태일때는 미리 조립되어 있는 것이 참 편리하지만, 문제가 생기면 결국 기본 구조를 다 알아야 하는구나.'


6. 제조사에서는 어떻게?
이런 상황을 자동차 제조 회사에서도 모를리가 없죠. 
그래서 자동차 회사에서는 '최신 자동차 조립기술'에 맞는 '최신 전자제어장치'를 집어넣기로 했어요.
엔진오일이 없으면 계기판에서 경고등이 나오는 장치에요. 
이제 더이상 B씨는 엔진오일이 없어서 자동차가 달리다가 멈추는 일은 없을 꺼에요! 

.. 물론 여전히 미션의 상태는 확인할 수 없겠지만요. 

또 시대가 바뀌면서 자동차가 그냥 운송수단에서 레져로 바뀐다는것을 자동차 회사는 간파했어요.
그래서 자동차의 시트를 푹신하게 바꾸고, 크루즈 기능을 넣어서 자동 운전이 가능하게 만들었죠. 
즉, 이 회사는 '자동차'라는 프레임워크와 그걸 만드는 기본 재료인 '시트'를 통채로 다 맞춰서 바꾸는 거에요. 

이런걸 제일 잘하는 회사 이름은 마이크로소프트에요.

웹 여행을 할 때 쓰는 자동차 "ASP.NET" 을 시대에 맞춰서 "ASP.NET MVC 나 ASP.NET AJAX" 로 변신시키고, 
데스크탑에 코어가 여러개 달린 컴퓨터 시대가 도래하자 "패러럴" 기능을 아얘 언어에 통합시켜 버렸답니다. 

덕분에 운전자들은 '크루즈' 기능을 어떻게 쓰는건지 배워야 했지만
대신 일정한 속도로 달릴 특정 상황에는 엑셀레이터를 안밟아도 되는 편안함을 얻게 된 거에요. 


7. 튜닝 한번 해볼까?

멋쟁이 C씨는 자신의 자동차가 다른 자동차들과 똑같아 보이는게 싫었어요. 
그래서 자동차 문이 옆으로 열리는 대신 위로 열리게 개조를 한 거에요.

그런데 자동차 문을 바꿔놓고 보니 멋지기는 한데, 자동차가 달릴때 자꾸 바람소리가 들려와요.
알고보니 자동차회사가 이 자동차를 설계할 때 초정밀 계산기로 계산해 둔 자동차가 달릴때  외부 바람에 대한 마찰역학계수를 C씨는 몰랐기 때문이었어요. 

결국 C씨는 위로 열리는 문을 뜯어내고 다시 옆으로 열리게 개조하는 수밖에 없었습니다. 

이렇게 프레임워크는 '구조상 하위호환성을 유지하면서 업그레이드하는 것'은 멋쟁이 C씨가 할 수 있는 일이 아니었네요. 자동차 회사만 가능하군요. 


8. 낡았어. 바꿔야겠어. 
오랫동안 차를 잘 타고 다니던 'D' 씨는 이 차가 시대의 흐름에 맞지 않는다고 느꼈어요. 
주위 친구들은 다들 최신 기종인 'Ruby on rails" 를 타고 다니는데 자신만 'Structs' 를 타고 다니는건 촌스러워 보였거든요. 
그래서 이 차가 자신에게 맞나 한번 타보기로 했어요.
아니 그런데 이게 뭐에요.
핸들은 오른쪽에 있는 데다가 기어가 핸들 옆에 붙어있고, 심지어는 크루즈 모드도 없어요. 게다가 더욱 더 이해할 수 없게  여기는 뭐에 쓰는지 모를 '에어 브레이크'라는 기능도 있다는 거에요. 
D씨는 도대체 이걸 어떻게 운전하는지조차 알 수 없어서 친구들에게 물어봤지만, 친구들은 '우왕 이게 킹왕짱 익숙해지면 완전 편해' 라고만 할 뿐이었어요.
물론 몇몇 친구들은 적극적으로 나서서 'Ruby on Rails' 에 익숙해지는데 도움을 줬지만, 이미 'Structs'에 익숙해신 D씨는 도저히 이해할 수가 없는 것들 투성이었죠.
결국 D씨는  '옛것이 좋은 것이여' 라는 말을 남긴 채   'RoR'을 사용하는 것을 포기했답니다.

이렇게 프레임워크는 한번 익숙해지면, 다른걸로 갈아타기가 너무 힘든 경우가 많아요. 각 프레임워크는 각 프레임워크를 관통하는 철학이 있거든요. 




조금은 프레임워크에 대해서 이해가 가시나요? 


2012.01.09. By RL.P
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2011/02/27 09:00 RL.T hink.
구차니님의 기억의 근원 / 기억의 시작 이라는 글을 보고 생각나는게 있어서 기록해 둡니다.

사람이 무언가를 기억하는데는 한계가 있습니다. 그저 실험으로 연역법으로 추정할 수밖에 없는 분야라서 진짜인지 어쩐지는 모르겠으나, 인간이 하나의 항목에 대해서 기억할 수 있는 최대 갯수는 약 7개 정도밖에 안된다는 군요.

우리는 이러한 기억의 손실을 막기 위해서 여러가지 방법을 씁니다.
그중 하나가 추상화이고 다른 하나는 반복,  나머지 하나는 이야기입니다.



추상화

추상화는 단순합니다. 뭉뚱그리는거죠.
예를 들어서 '곤충'이라고 한다면 다리가 여섯개여야 하고 절지동물이어야 하고 머리 가슴 배로 나누어져야 한다. 라는 정보만 기억하는 겁니다. (사실은 기준이 몇개 더 있지만 패스. 더 알고 싶으신 분은 위키피디아 곤충 항목 참조하세요)
그래서 새로운 벌레를 발견했을때 저 기준만 가지고 곤충이라는 것을 판단합니다. 그래서 잠자리는 곤충인데  거미는 곤충이 아니구나..라고 구분지을 수 있는거죠.
여기까진 문제가 없습니다. 그런데, 생각해보면 잠자리하고 일개미는 같은 곤충일 뿐 완전히 생긴것도 다르고, 하는일도 다르고, 사실상 그닥 비슷한 면도 없습니다. 단적으로 잠자리는 날아다니는데 일개미는 못날잖아요 ^^;;
이런 차이점에 대해서는 일일이 '개미'와 '잠자리'의 특성에 대해서도 기억을 해야 하기 때문에 다 기억을 못하기 십상입니다. 게다가 개미는 여왕개미와 수캐미와 일개미는 생긴모양 자체가 다르기 때문에 더 헷깔리기도 하죠. 오히려 수캐미는 일개미보다는 벌에 더 가깝게 생겼거든요.
이렇게 뭉뚱그려버리면 기억하기는 쉽지만 세부적인 것은 구분 할 수 없는 '추상화의 함정'이 생겨버립니다.
한번 사이즈를 줄여버린 픽셀 방식의 그림은 다시는 크게 만들 수 없듯이요.



반복

반복이라는 건 말 그대로 한번에 기억하지 못하는 것을 여러번 보면서 기억하는걸 말합니다. 중고등학교 시절에 단어장 외우던 기억 있으시죠? 자동차를 'Car' 라고 부르는 것은 아무리 생각해도 추상화 시킬 수 있는 부분이 없습니다. 왜 이렇게 불러야 하는지 모르는거에요. 추상화로 할 수 있는 것은 기껏해야 Car의 Type은 Truck, SUV .. 등이 있다.. 정도죠. 이렇게 하나의 개체에 대해서 추상화를 시킬 수 있는 부분은 한계가 있기 때문에 끊임없는 반복으로 이것을 뇌리에 박아둡니다. 우리의 뇌는 대뇌피질에 뉴런의 결합작용으로 기억을 하는데, 반복할수록 뉴런의 결합작용이 강해져서 더 오래 기억하거든요. 반면 뉴런은 자극이 없으면 서서히 그 연결고리가 느슨해집니다. 다시 말하면 끊임없이 자극을 새로 해 주지 않으면 잊어버린다는 소리죠.



이야기.

그래서 우리는 이야기라고 불리는 '흐름'에 의존해서 기억을 되살립니다. 즉 각 기억사이에 연관관계를 가져가는 겁니다. 고등학교 역사 수업이 지리 수업보다 기억하기 쉬운 이유는 흐름이 있기 때문입니다. 예컨데 고구려와 백제가 신라에게 멸망되었기 때문에 통일신라가 되었다. 라는 식으로요. 반면 지리는 그런 연관관계가 전혀 없습니다. 코스타리카 공화국 옆에 '니카라과'와  '파나마' 가 있다는 건 어떤 연관관계도 없죠. 그냥 우연히 옆에 있는 나라 이름인 겁니다. 이런건 기억을 이어붙이기 힘들어요. 우리나라 옆에 일본하고 중국이 있다는건 오랜 반복학습의 결과이기도 하지만, 한국 일본 중국은 예로부터 서로 관련되어 왔었고 영향을 주고받았기에 서로간에 이야기가 생겼고, 그 결과 기억하기 쉬워졌죠.
이야기의 단점은  흐름은 오래 기억되는 반면 이야기에서 부각되지 않은 곁가지 기억들은 모두 소멸한다는 겁니다. 혹시 백설공주에 나오는 난장이 이름 아시나요? 난장이의 이름 따위는 공주가 왕자님 만나는 흐름하고는 아무 관계도 없기 때문에 아무도 기억 못합니다.



그래서 어쩌라고?

저도 모르겠습니다(...) 그냥 기억에 대해서 적어보고 싶었어요.


2011.02.27. By RL.T
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
prev 1 next