· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
KLDP Interview/김기오

어셈블리 개발자 그룹, 어셈러브의 운영자 : 김기오


이 글은 리눅스 매거진 2004년 2월에 실렸던 기사입니다. 이미 KLDPconf에도 참가하셨을 만큼 KLDP에서도 활발한 활동을 하고 계시며 어셈러브를 운영하고 계신 김기오씨와의 인터뷰 기사입니다.

새해를 맞이해 유쾌한 만화 ‘User Friendly’의 작가 Illiad는 ‘GEEK and PROUD of IT!’이라는 메시지를 우리들 모두에게 전했다. ‘나는 Geek이다, 내가 Geek인 것이 너무나 자랑스럽다’는 그 당찬 포부 속에는 아무리 IT 경기가 불황이고 일이 고될지라도 이를 헤쳐나가고 말겠다는 강한 의지를 엿볼 수 있다.

pride.gif
[GIF image (35.86 KB)]

<그림 1> ‘Geek and proud of it’ by Illiad

Geek을 만나는 것은 즐겁다. 그들과의 만남을 통해 책, 문서를 통해서는 배우지 못하는 무언가를 얻을 수 있기 때문이기도 하지만 꼭 그런 교훈적인 목적이 아니더라도 대부분 그들 스스로가 유쾌하고 즐거운 삶을 추구하기 때문이라고 생각한다. ‘즐거운 Geek들’은 굳이 에릭 레이먼드가 소개한 위대한 해커문화에만 존재하는 것은 아니다. 우리 주변에도 리눅스를, 프로그래밍을, 애인만큼이나 사랑하고 즐기는 친구들을 만날 수 있다. 그런 의미에서 이번 달 펭귄 통신을 통해 만나게될 어셈블리 개발자 그룹, 어셈러브의 운영자 김기오씨 역시 유쾌하고 즐거운 Geek 중의 하나일 것이다.

gio.jpg
[JPG image (103.18 KB)]

<사진 1> 어셈러브의 운영자 김기오

Q : 소개 자기소개를 부탁합니다.

저는 현재 어셈러브의 운영을 맡고있고 성균관대학교 정보통신학부 4학년입니다.

현재 어떤 일을 하고 있습니까?

학생이라 크게 하는 일은 없구요 아르바이트로 우리 학교 영상통신연구실에서 프로그래밍 작업하고 리눅스 세팅하는 일을 잠깐하다가 지금은 졸업을 위해서 영어 공부도 하고 논문 준비도 하고 있습니다.

리눅스와 연관을 맺은 시기, 어떤 일로 리눅스와 친해지게 되었습니까?

대학에 들어와서는 선배들이 하는 것을 보고 그냥 뭔가 궁금해서 호기심에 설치를 해봤습니다. 하지만 필요성도 못 느끼고 어디에 써야할지도 잘 몰랐었습니다. 2001년 초에 제대하고 본격적으로 프로그래밍 공부를 하면서는 유닉스 프로그래밍을 익히기 위해서 관심을 가지게 됬구요 그러다가 운영체제에 대한 공부를 하면서는 아주 팬이 되버렸습니다. 사실 프로그래밍 외에 서버 설정이나 환경 설정하는 일을 몹시 귀찮아해서요 다른 유저분들처럼 자유자재로 사용할 줄을 모릅니다. 그래서 꼭 친하다고 할 수 있는지는 잘 모르겠습니다. 하지만 요즘 커널 소스를 조금씩 읽고 이해하게 되면서는 점점 더 가까워지는 것을 느낍니다. 제가 OS에 대한 연구로 제 꿈을 삼게 된것도 거의 리눅스 때문인 것 같습니다.

최근에 KLDP 세미나에 참가한 것으로 알고 있습니다. 어떻게 해서 발표를 하게 되었는지, 어떤 주제에 대해서 발표했는지, 앞으로도 이러한 세미나에 자주 참가할 계획인지 기타 세미나와 관련해서 간단히 얘기해 주십시오.

참 부끄러운 이야기인데요 사실 전 제가 어셈블리를 잘하는 줄로만 알았었습니다. 그래서 예전에 kldp에서 세미나가 열리면 제가 어셈블리에 대한 주제로 발표를 할 수 있다고 자신있게 말했었지요. 그래서 그걸 기억하신 권순선님께서 연락을 주셨습니다. 그때 당시는 발표할 분도 별로 안계시고 세미나가 열릴지 불투명하다고 하셔서 어떻게든 첫 세미나가 열렸으면 좋겠다는 마음에서 발표하겠다고 했었는데요. 나중에 쟁쟁한 분들께서 발표하시는 것을 보고는 땅을 치면서 후회했었지요. 제가 발표한 주제는 NASM을 이용한 어셈블리 프로그래밍이었습니다. C 콜링 컨벤션에 대한 이야기를 하면서 C에서 어셈블리 함수를 호출하는 방법을 이야기했었습니다. 그리고 앞으로는 이런 대규모 세미나에는 발표하지 않으려고 합니다. 세미나 동영상을 봤더니 정말 가관이더라구요. 더듬거리면서 덜덜 떠는 모습이 부끄러워서 죽는줄 알았습니다. 하지만 지금도 학교에서는 어셈블리에 대한 주제로 세미나를 몇 번 했었고 앞으로도 계속 할 예정입니다. 제 후배들이 어셈블리에 대해서 관심을 가지고 공부를 했으면 하는 생각이기 때문에 졸업 전까지는 기회가 되는 대로 자주 공개 세미나를 열어서 어셈블리에 대한 주제로 이야기를 할 생각입니다.

IMG_0045.JPG
[JPG image (222.46 KB)]

<사진 2> 2003년 10월 11일 KLDPconf에서 NASM 강좌를 담당한 김기오씨

Q : 어셈블리에 대해 어떻게 해서 어셈블리에 관심을 가지게 되었습니까?

대학에 들어와서부터 어셈블리에 대해 흥미를 느꼈습니다. 컴퓨터 관련 학과를 들어왔지만 사실 컴맹이나 다름없었습니다. 여기저기서 컴퓨터가 전망이 있다고 허풍을 치는 바람에 속아서 들어온 것이었죠. 그래서 컴퓨터를 사용하는 것도 어려웠고 더욱이 조금씩 배우기 시작하는 프로그래밍은 정말 어려웠습니다. C에 관한 수업을 들어도 전혀 알아들을 수 없었고 왜 이렇게 되는 것인지 궁금한 것들만 더 늘었습니다. 그래서 생각한 것이 이왕 평생 할 프로그래밍이라면 근본적인 원리부터 차근차근 익히자는 것이었습니다. 컴퓨터가 처음 만들어진 때부터 어떻게 만들어졌는지 그때 사용된 기술들은 뭔지 고급 언어들은 어떤 원리로 만들어졌는지 어떻게 동작는지 알고 싶었습니다. 핵심이 되는 근본 원리들을 이해할 수만 있다면 그 원리에서 뻗어나온 개념들은 쉽게 이해할 수 있을 거라고 생각했었습니다. 그래서 찾아낸 방법이 어셈블리였습니다. 가장 직접적으로 컴퓨터를 손댈 수 있고 또 컴퓨터 초창기의 기술들도 접할 수 있었습니다.

무엇보다 어셈블리를 고집하는 이유는 무엇입니까?

어셈블리를 고집하지는 않습니다. 오히려 어셈블리를 공부한 것에 대해 과연 잘 한 것인가 하는 생각도 자주 합니다. 그 시간과 노력을 자바나 C++같은 고급 언어에 들였으면 어떻게 됬을까 하는 생각도 합니다. 하지만 지금 제가 그나마 이정도 할 수 있는 것이 거의 어셈블리를 익힌 덕분이라는 것을 생각하면 애착이 갑니다. 어셈블리를 좋아하는 이유는 제가 어셈블리를 시작한 이유와 같습니다. 컴퓨터의 근본 원리를 이해하는데 도움을 주고 고급 언어들을 깊게 이해하는데도 도움이 되고 또 다른 이유는 뭐든지 제 손으로 직접 만들어야 한다는 것입니다. 라이브러리도 없고 아무것도 없는 맨땅에서 작업을 시작해야 하는게 고생스럽기도 하지만 재미가 쏠쏠합니다. 또 직접 만들어봐야 이해가 되는 제 둔한 머리 탓이기도 합니다.

최근에 어셈블리와 관련해 진행하고 있는 프로젝트가 있다면?

프로젝트라고 할만한 것은 없습니다. 이제는 어셈블리로 프로젝트를 할 수 있는 시대도 아니고 하라고 해도 싫습니다. 편하고 좋은 언어들과 툴들이 있는데 굳이 고생스럽게 어셈블리로 프로젝트를 진행할 이유가 없지요. 어셈러브 초창기에는 송민호님께 VxD에 대해서 배웠는데요 그게 어셈블리로 진행한 유일한 프로젝트였던 것 같습니다. 그 외에는 주로 어셈블리로 작은 모듈을 만들어서 C에서 호출해서 사용합니다. MMX나 하드웨어 제어 루틴들이지요. 결국 고급 언어로 프로젝트를 진행하고 불가피한 경우에만 어셈블리를 사용한다는
것이 제 생각이고 또 많은 분들께서 같은 생각을 하시는 것 같습니다.

사실 어셈블리를 시작하기가 쉽지 않은 것이 사실입니다. 어떻게 하면 어셈블리를 쉽게 배울 수 있습니까?

어셈블리만을 배우는 것은 정말 쉽습니다. 제가 학교에서 공개 세미나를 열어서 두시간 정도 어셈블리에 대한 설명을 하면 거의 대부분 별로 어려운 언어는 아니라고들 말씀하십니다. 어셈블리의 문법 자체는 단 한 줄로 말할 수 있습니다. 명령어하고 오퍼랜드 두 개 뿐이지요. 또 사용하는 명령어들도 고급 언어에서 라이브러리 함수 이름을 외우는 것에 비하면 양도 적고 외우기도 쉽습니다. 하지만 어셈블리를 배우는 목적은 단순히 언어를 배우는 것이 아닙니다. 사람마다 그 목적이 다르겠지만 결국 시스템에 대해 깊이 있게 공부하는 것이지요. 따라서 시스템의 동작 원리를 이해하면서 같이 공부해야 합니다. 예를 들어서 말씀드리면 리눅스 커널에 switch_to 라는 매크로가 있지요. 스케줄링에 사용되는 이 매크로는 어셈블리로 만들어져 있습니다. 이 코드를 이해하기 위해서는 단순히 어셈블리 문법만 알아서는 소용이 없습니다. context switching 에 대한 이해가 먼저 필요하고 그 다음에 직접적으로 어떻게 구현해야 할지 구상하면서 같이 어셈블리 코드를 읽어야 합니다. 따라서 어셈블리를 어려워하시는 이유가 어셈블리의 문법이 어려운 것이 아니라 어셈블리를 공부하시면서 반드시 같이 이해해야하는 CPU의 동작과 메모리에 대한 이해가 쉽지 않다는 것이지요. 고급 언어를 처음 배울때는 단순히 언어에 대한 이해만 하면 됩니다. 깊이 들어가면 시스템에 대해 이해해야 하지만 그 전까지는 언어를 배우는 것이지요. 그래서 C를 배우실 때 포인터 부분부터는 어려워하시는 것이구요. 어셈블리는 처음부터 포인터를 배우면서 시작합니다. 그래서 어렵다고 생각하시는 것 같습니다. 포인터를 이해하기 위해서는 메모리가 동작하는 원리를 알아야 합니다. 결국은 시스템에 대해 이해하도록 노력하시는 것이 어셈블리를 쉽게 배우시는 것입니다. 시스템을 이해하는 것은 금방 되는 일이 아니겠지요. 따라서 어셈블리도 금방 익혀지지 않는 것 같습니다. 그러니까 어셈블리 자체를 이해하시려고 하지 마시고 시스템의 동작을 생각하시면서 그 원리를 직접 구현한다고 생각하시면서 공부하시면 좋을 것 같습니다. 어셈블리를 공부하려고 하는 목적이 바로 그거니까요. 다시 말씀드리면 어셈블리는 프로그래머가 컴퓨터에게 직접적으로 명령을 내리는 것입니다. 고급 언어처럼 컴파일러에게 명령을 하고 컴파일러가 컴퓨터에게 전달하는 것이 아니지요. 그래서 프로그래머가 컴퓨터를 직접적으로 이해해야만 프로그래밍을 할 수가 있는 것입니다.

Q: 어셈러브에 대해 어떻게 어셈러브를 운영하게 되었습니까?

원래는 제가 운영자가 아니고 처음에 어셈러브를 만든 사람도 제가 아니었습니다. 하이텔 게임제작 동호회에서 활동하셨던 송민호님과 이순용님께서 어셈블리 스터디를 시작하시면서 사람이 모여 생겨난 것이 어셈러브였습니다. 그 당시에는 이순용님의 회사 서버에 게시판을 몇 개 만들어서 사용했었는데요 스터디가 계속 되면서 사이트의 필요성이 생겨나게되고 그래서 학생이라 시간이 많은 제가 운영을 맡게 된 것 이지요. 지금도 어셈러브의 방향에 대해서는 초창기 스터디 멤버들과 의논해서 결정하고 있구요 그렇게 본다면 저는 운영진의 한 사람이지요. 결국 저 혼자서 운영하는 것은 아닙니다. 또 질답 게시판에 거의 답변을 안하면서 나몰라라 하고 있으니 오히려 운영자는 지금 질답 게시판에서 답변을 해주시는 회원 분들이 되는 것 같습니다.

http://www.asmlove.co.kr/ 본인에게 딱히 수익이 생기는 것도 아님에도 불구하고 어셈러브를 운영하고 있는 이유는 무엇입니까?

전 어셈러브를 제 홈페이지라고 생각하고 있습니다. 다른 정보 사이트처럼 전문적으로 지식 공유를 위해 있다기 보다는 제가 어셈블리를 공부하면서 익힌 것들과 참고 문서들을 저장해놓고 제가 필요할 때 찾아보기 쉽게 만들어 놓은 것들이지요. 그래서 수익이 생길 필요도 없고 많은 분들께서 찾아오지 않아도 전 별로 상관하지 않습니다. 또 무슨 이익을 보려는 생각도 없구요. 저는 제가 어셈블리를 익히면서 삽질하고 고생했던 것들을 다른 분들께서는 하지 않으셨으면 하는 생각입니다. 참고 자료를 찾고 어셈블러 사용법을 익히는 것은 크게 중요하지도 않으면서 시간과 열정이 많이 소모되는 일이니까요 그런 소모적인 일들을 다른 분들께서 줄이실 수 있는 방법을 생각했었습니다. 그래서 제가 공부한 것들과 참고 문서들 중에 다른 어셈블리를 공부하시는 분들께도 유용할만한 것들을 모아서 메뉴를 만들어 놓은게 지금 어셈러브에 오시면 보실 수 있는 메뉴들입니다. 결국 제가 어셈블리를 공부하면서 어려웠던 점들과 유용했던 정보들을 모아서 다른 분들과 공유하고 싶었던 것이 어셈러브를 운영하고 있는 이유인 것 같습니다. 이런 공유 정신은 역시 리눅서들에게 영향을 받은 것이지요.

현재 어셈러브는 어떻게 운영되고 있으며 그 규모는 어느정도입니까?

호스팅 회사에 200M 정도 계정을 사서 운영하고 있구요 웹 페이지는 이순용님과 제가 메모장으로 html 태그를 써서 만들었습니다. 메뉴들이나 구성이 정말 단순한 이유가 제가 웹을 거의 모르기 때문이지요. 그래서 그림이나 다른 효과가 하나도 없는 것이지요. 하루 페이지 접속 수는 2만에서 3만 사이입니다. 대학에서 레포트를 내줄 시험때에는 많이 늘어났다가 방학때는 좀 줄었다가 합니다. 회원수는 1400분 정도 되구요 현재 운영에 필요한 비용이나 작업은 제가 담당하고 있습니다. 부끄럽지만 보통 개인 홈페이지 정도의 규모이지요.

어셈러브 운영의 애로점은?

사소한 것이 몇 가지 있는데요 레포트 철이 되면 레포트를 해달라는 문의가 많이 들어와서 골치입니다. 어떨때는 제 메신저나 메일 주소를 알아내셔서 레포트를 해달라는 분도 계시고 돈으로 레포트를 사시려는 분도 계시더라구요. 일일이 상대하기 싫어서 그냥 신경 안쓰려고 했는데 게시판이 너무 지저분해져서 요즘은 레포트 문의는 삭제하고 있습니다. 그리고 원래 비인기 분야라 게시판들이 너무 썰렁하고 심심하다는 것도 애로 사항이라면 이겠지요. 같은 전공을 가진 분들에게도 제가 어셈블리 사이트라고 말씀드리면 어떤 것인지 잘 모르십니다. 그래서 그냥 홈페이지를 하나 가지고 있다고 말하는 게 편할 때가 많습니다.

앞으로 어셈러브가 나아가야 할 방향은?

앞으로 지금의 컨셉을 계속 유지할 것입니다. 하지만 지금은 너무 컨텐츠가 빈약하다고 생각하고 있습니다. 지금은 X86에 관한 자료뿐이지만요 앞으로는 ARM등 다른 시피유와 마이크로 컨트롤러에 대한 내용들을 추가할 계획이구요 또 제가 지금 공부하고 있는 리눅스 커널에 관한 자료중에서 어셈블리와 연관된 것들을 모아서 추가하려고 합니다. 지금처럼 어셈블리를 주제로 하되 다양한 분야에서 사용되는 어셈블리에 대한 자료를 모을 생각입니다. 또 지금은 오프라인 모임을 못한지가 일년정도 되었는데요 이제 제 학교에서부터 오프라인 모임을 시작해서 점차 확장할 생각입니다. 역시 어셈블리와 시스템을 이해하는 데는 책으로만 해서는 부족한 점들이 많거든요.

Q : 어셈블리를 처음 시작해보려는 Newbie를 위한 조언을 부탁합니다.

가장 먼저 생각하실 것은 정말 어셈블리가 본인에게 필요한지입니다. 하고싶은 분야에 어셈블리가 정말 필요한지를 알아보시고 꼭 필요하지 않다면 애써 익히실 필요가 없다고 생각되고요 꼭 필요하시다면 급하게 생각하지 마시고 어셈블리 문법과 함께 시스템의 동작 원리도 익히시라는 말씀들 드리고 싶습니다. 어셈블리를 공부하면서 그때그때 진도에 맞게 CPU의 구성과 동작을 이해하시고 점차 OS의 원리와 고급 언어의 원리들을 이해하시는 데까지 진도를 나가시면 좋을 것 같습니다. 절대 어셈블리를 익힌다는 것이 어셈블리의 문법을 익히고 프로그래밍하는 것이 전부가 아니라는 것을 알아두시면 좋겠습니다. 꼭 주의하실 것을 말씀드리면요 어셈블리에 대해 잘못 이해하시는 것들이 많다는 것입니다. 어셈블리는 절대 어렵거나 대단한 것이 아닙니다. 가끔 어셈블리를 할 줄 안다고 말하면 뭔가 대단한 것을 한다고 생각하시는 분이 계신데 그냥 하나의 언어를 배우는 것과 같구요 시스템에 대한 공부는 다른 언어로도 충분히 하실 수 있습니다. 또 어셈블리로 만든게 작고 빠르다고 생각하시거나 그렇게 써있는 책들이 몇 개 있는 것 같은데요. 절대 아니거든요. 실행화일의 크기를 봐도 그렇게 제가 실험해본 결과도 또 요즘 자료들을 찾아봐도 일반적인 경우에는 어셈블리로 만든게 크게 빠르지 않고 작은 것도 아닙니다. MMX나 SSE같은 특정 명령어나 커널에서 꼭 필요한 경우에 사용하는게 바른 사용이고요 요즘에는 컴파일러가 강력하니까 빠르고 작은 프로그램을 만들기 위해서 사용하는 경우는 전혀 없다고 보셔도 좋을 것 같습니다. 효울성을 따지면 절대적으로 고급 언어가 좋지요. 그래서 고급 언어라고 하는 것이구요. 단 임베디드 보드에서는 PC와는 좀 다른 환경이므로 보드에 따라서 다르겠지만요. 그런 오해는 없었으면 하구요 그래서 불필요하게 어셈블리를 공부하시려고 시간을 낭비하시는 일이 없었으면 합니다. 어셈블리가 정확하게 자신이 원하는 분야에 필요한지 알아보신 후에 시작하시는게 제일 좋을 것 같습니다. 다시 말씀드리지만 어셈블리로 프로젝트를 진행하는 일도 거의 없고 특정 분야가 아닌 이상 필요한 경우도 거의 없거든요. 저도 어셈블리의 장단점을 잘 알기까지 시간이 좀 걸렸습니다. 어러분께서는 어셈블리라는 툴에 환상도 가지지 마시고 오해도 하지 않으시길 바랍니다.

Q : 어셈블리 개발자 그룹의 리더로서 리눅스 매거진 독자들에게 한 말씀 및 앞으로의 포부

이렇게 어셈러브에 관심을 가져주셔서 정말 감사합니다. 요즘에 리눅스 커널에 대해 본격적으로 공부하고 있는데요 역시 OS의 핵심 부분을 구현하기 위해서는 하드웨어를 잘 이해해야 한다는 것을 새삼 느끼고 있습니다. 꼭 어셈블리를 배우시지 않으셔도 좋으니까요 하드웨어의 원리에 관심을 조금만 기울이시면 커널을 공부하실 때도 큰 도움이 될 것 같습니다. 또 요즘에 과연 우리나라도 세계적인 배포판을 만들 수 있을까 아님 독자적인 OS를 개발할 수 있을까 하는 상상을 합니다. 데비안같이 뛰어난 배포판을 직접 만들고 그만큼 뛰어난 RTOS와 그에 따른 디버깅 툴이나 개발 툴을 같이 생산하는 리눅스 기업이 생겼으면 얼마나 좋을까 상상하고 있습니다. 우리도 충분히 할 수 있는 일이라는 생각이 듭니다. 현실의 위에 서서 현실을 자기 손으로 만들어가는 열정있는 리눅서분들께서 많이 이끌어 주실 것이라 믿습니다. 우리 학교에 LUG를 만들었습니다. 이름은 성균관대학교 리눅스 유저 그룹으로 정했구요 이제 막 활동을 시작하고 있습니다. 앞으로 많은 활약 기대해주세요. 감사합니다.


ID
Password
Join
Your mode of life will be changed for the better because of good news soon.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-12-30 18:15:49
Processing time 0.0057 sec