'빵집' 만드신 분이 쓴 글

대한민국 소프트웨어 개발자들께...

이메일상으로 하도 문의가 많아와서 도움말에 집어 넣습니다.

어떻게하면 잘 맹글수 있느냐.... 머 그런얘기 엄청 물어봅니다.

제 생각은 남들하고 조금 다를수도 있습니다.

가장 중요한건 실력이 좋아야한다는겁니다. (헉.... 옳소.... ^^ )

제가 후배들한테 많이 해주는 이야기 몇가지를 하겠습니다.


첫번째 이야기...

자.... 퀴즈....

작곡가가 되려고 합니다.

좋은 음악을 작곡하기 위한 첫번째 조건이 무엇일까요?

머.... 음악 이론을 잘 알아야한다.... 감각이 있어야한다....열정이 있어야한다.....

땡땡땡... 다 틀렸습니다.

좋은 음악을 만들기 위한 조건들중 가장 중요한것은 그것들이 아닙니다.

음악 이론 많이 몰라도 좋은 음악은 만들 수 있습니다.

감각이 없어서 이론적으로나마 좋은 음악은 만들 수 있습니다.

열정이 없어도 핑핑 놀아가며 하기 싫은거 억지로 해서라도 좋은 음악은 만들수 있습니다.

그런데 꼭 필요한게 있습니다.

그것은....

좋은 음악을 들었을때...... '아~ 좋다~' 라고 느낄수 있어야한다는 겁니다..

좋은 음악을 듣고 좋은지 모르는 사람은 절대로 좋은 음악을 만들 수는 없습니다.

좋은 소프트웨어를 만들려면 좋은 소프트웨어를 봤을때 '우와~ 좋다~'라고 느낄 수 있어야합니다.

좋은 음악과 좋은 소프트웨어를 보고 느낄수 있는것은 그냥 저절로 되지는 않습니다.

많이 경험해 봐야합니다.

 

두번째 이야기...

한강에 벽돌을 쌓습니다.

강변이 아니라 강 바닥에 벽돌을 쌓습니다.

아시다시피 한강물이 썩 깨끗하지는 않습니다.

강 바닥에 벽돌을 쌓는것은 생각보다 어렵습니다.(물론 전 안해봤습니다. ^^)

그냥 헤엄치는것도 어려운데 한손에 벽돌을 들고 가야합니다.

좌우지간 갔습니다.

강바닥으로 내려가서 벽돌을 놓고 나옵니다.

나와서 보니 어떤가요?

기껏 쒜빠지게 열심히 했는데.... 티도 안납니다.

다음날....

또 벽돌을 들고 헤엄쳐서 어제쌓은 벽돌 위에 한장 더 올려놉니다.

역시나 힘듭니다.

또 나와서 보니.... 이젠 허탈하기까지합니다...

두장이나 쌓았는데.... 역시나 티도 안납니다.

사흘...

나흘....

맨날 맨날 똑같은 짓을 해도.... 맨날 맨날 똑같습니다.

나는 정말 매일 매일 열심히 했는데... 아무리 쌓고 쌓아도 할때만 열심히 했지 나와서 보면 안보이기는 마찬가집니다.

이정도 되면 정신적으로 힘들어집니다.

이걸 계속 해야하나...하는 생각도듭니다.

그래서....

포기합니다............

에잉 확~ 쒜려 챠뿔쟈.... 하고 관둡니다.

그러면? 그걸로 끝이지요..... 머... 더 설명할것도 없습니다. 그냥 끝입니다.

그러나.....

포기하지 않고 계속 한다고 칩시다....

열흘, 한달, 일년, 이년.....

에잉 모르겠다.... 이거나 하나가 죽자....라고 생각을하고 맨날 맨날 똑같은 짓을 합니다....

그러면?

보이지 않는 벽돌이 쌓이고 쌓여서....

언젠가는 수면으로 떠오릅니다.

그때가 되면 벽돌을 한장 쌓으면 한장 쌓이는게 눈에 보입니다..

내 눈에만 보이는게 아니라 남들에게도 보입니다.

지금까지 힘들었던게 다 잊혀집니다.

그런데 사람들은 그걸 못참고 때려치웁니다.

열심히 쌓고 쌓으면 언젠가는 올라올텐데....

단지, 사람마다 수심이 조금씩 다를뿐인데.....

벽돌이 수면위로 올라오면 그때부터는 물속의 별돌을 다시 한번 살펴볼 필요가 있습니다.

남들에게는 안보이는 자신만이 아는 자신.....

기초를 든든히 해야 더 높이 올라갈수 있습니다.

개발을 하는 일도 .... 모든 학습을 하는 일도 다 똑같다고 봅니다.

포기하지 않고 열심히 하다보면 언젠가는 되기 시작합니다.

그때까지만 참고 열심히 합시다....

아... 이 얘기는 제 얘기가 아니라 고등학교때 읽은 허영만作 만화책에서 본 내용입니다. ( 참 유익한 만화져? ^^ )

 

세번째 이야기...

이 이야기는 저에게 '프로그래먼데 너무 힘들다. 실력도 없고...다른 직업을 알아봐야하냐' 라는 그런 내용의 메일을 보내온 분들께 공통적으로 해드린 이야기입니다.

제가 프로그래머가 된 과정을 그린 이야기인데... 머... 솔직히 쪽팔립니다만...이젠 하도 많이해서 ^^;;

자 그럼 이메일의 일부분 나갑니다.

시~ 작~

 

제가 29살 때의 이야기를 해보겠습니다.

 
전 29살 3월에 결혼했습니다.
 
그전에는 인켈에 7년간 오디오엔지니어로 다니다가 그만두고 인켈의 하청업체에 1~2년 다니다가 다시 유사한 전자쪽의 작은 업체를 다니다가 ... 머 그럴때였습니다.
 
전자쪽 직업을 가지고 있으면서 한가지 불만이 있었는데 임근이 너무 박하는거 였습니다.
 
당시의 "내"가 임근이 짠건 견딜만 했는데 그 바닥에서 정말 열심히 일했던 선배들이 임금이 박한건 정말 견디기 힘들었습니다.
 
왜냐면 그 사람들이 내 인생의 모델인데... 그 사람들이 어렵게 산다는것은 곧 나의 미래가 어렵다는것과 같기때문입니다.
 
그래서 언젠가는 직업을 바꿔야겠다고 생각하고 있었는데..
 
그러다가 29살에 결혼을 해버렸습니다.
 
결혼을하면 직업을 바꾸기가 더 힘들어지지요... 게다가 아내는 임신을하고....
 
해서리.... 애가 태어나기전에 바꾸자...... 라고 마음을 먹고....
 
그때부터 회사를 과감히 그만두고 델파이만 붙잡고 씨름을 했습니다.
 
당시에는 비디오 대여점이 뜰때였는데..... 그래서 비디오 대여점 관리 프로그램을 만들자라고 마음을 먹고 열심히 했습니다.
 
거짓말 안하고 정말로 10개월동안을 아무것도 안하고 코딩만 했습니다.
 
거의 책에만 의존하면서 했지요...
 
물론 벌이가 없으니 집안 꼬라지는 말이 아니고 그 와중에 애도 태어났는데.....
 
애 분유값을 대기도 정말 힘들었습니다.
 
한번은 한겨울이었는데 석유살 돈이 없어서 전기장판을 사서 애를 가운데 놓고 잤습니다.
 
그렇게 전기장판 생활을 하던중 어느날...
 
잠을 자다가 문득 깨보니 중간에 애가 없는거 였습니다.
 
벌떡 일어나서 보니 애가 저 위에 머리맡에 방바닥에서 자고 있었습니다.
 
물론 냉골이지요.... 애를 전기장판으로 옮기려고 보니 열이 나더군요....
 
애가 거의 실신 상태였습니다.
 
급히 119를 불러서 응급실로 실려가던.... 그런일도 있었습니다.
 
병원에 다녀와서는 어케든 보일러를 가동해볼려고 했는데 .....
 
돈도 없고 한밤중에 석유파는데도 없고 ....
 
간신히 간장파는 가게에서 간장통을 얻어다가 주유소에 가사 사정사정해서 석유를 얻어왔습니다...
 
그 석유가 일주일이 가더군요 ^^;;;;
 
암튼 당시에는 그랬습니다.
 
다행히도 장인어른께서 농사를 지으셔서 쌀은 있었습니다.
 
밥하고 김치만 먹고 살았지요... --;;
 
그러던중 이제는 더 이상 견디기 힘들어서 부랴부랴 비디오 대여점 프로젝트를 마무리하고 통신망에 올렸습니다.
 
당시에는 인터넷이 거의 안쓰일때였고 하이텔, 천리안, 나우누리에 올렸습니다.
 
그리고서는 아내에게 "자기야 조금만 기다려... 이거 팔아서 우리 나래 분유값이라도 벌어볼께..." 하며 ...... (에혀....... --; )
 
암튼...
 
그랬는데 어케된일인지 한달이 지나도 전화 한 통 안옵니다. 정말 막막하더군요....
 
아내도 나도 이것만 믿고 견뎌왔는데....
 
하이텔로 메일이 하나왔습니다.
 
"당신이 만든 프로그램 잘 봤다... 그런데 당신은 프로그램은 잘 만드는데 비디오 대여점에 한번 앉아보지도 않고 만들었다" 라고 하더군요....
 
맞습니다.. 그냥 테이프 빌려주고 돈받고 돌려받고 그러면 되는 줄 알았지요....
 
정말 절망적이더군요....
 
다시 예전의 직업으로 돌아가야하나...
 
난 프로그래밍을 할 수 없다는 말인가...
 
정말 많은 생각을 했습니다.
 
해서 생각한것이.... 포기하고 그것을 디스켓에 넣어서 이력서를 써서 돌아다녔습니다.
 
팔아먹지는 못해도 프로그램을 만들수 있다는 증거는 될수 있으니깐요.....
 
그렇게 한달동안 매일 몇군데씩 다녔는데....
 
나이도 30인데다가 결혼에 애도 있고... 경력은 하나도 없고... 전공한것도 아니고.....
 
에혀.... 나라도 나같은 사람을 써줄리 없었습니다.
 
그러던중 여의도에 있는 한 업체에서 "당신의 그 무모한 용기가 가상하다"라는 이유로 --; 취업이 됐습니다.
 
첫월급 70만원.....
 
마누라랑 그 봉투 붙잡고.... 엉엉.....
 
에혀.....
 
그렇게 저의 본격적인 프로그래머 인생이 시작되었습니다.............
 
그러다가 하이텔 동호회였던 델마당에서 활동도하고.....
 
정말 열심히 했습니다...... 머... 다른 사람보다 한참 늦었으니 열심히 하는수 밖에 없었지요.....
 
그러다가 몇몇 기업에서 스카웃도 되가고.....
 
지금은.....
 
먹고 살만한 정도 프리랜서로 활동하고 있습니다.
 
이제부터....
 
제가 견딜수 있었고 이만큼 성잘할수 있었던 나름대로의 비결을 이야기해 보겠습니다.
 
 
첫째......
 
프로그래머는 자기만의 꿈이 있어야합니다.
 
큰 꿈을 항상 간직하고 있어야합니다. 지금 직장 생활을하고 고생을하는것은 그 꿈을 이루기 위해서 필요한 지식과 경험을 만들어 가는 과정입니다.
 
게임프로그래머라면 리니지나 스타크래프트 이상으로 히트할 수 있을만한 게임을 기획하세요....
 
지금부터요.... 물론 1~2년안에 완성할만한 간단한거 말구 정말 물건같은 물건을 기획해보세요.....
 
지금은 못만들더라도 지금부터 그것을 완성시킬수 있을만한 지식과 경험을 쌓아가세요...
 
그러다보면 언젠간 머릿속에서 이제 시간과 돈과 사람만 있으면 할수 있겠다...라는 판단이 들때 그때 실천에 옮기세여....
 
암튼.... 꿈이 있어야합니다.
 
첨부한 그림을 한번 보세요... 제 노트북 바탕화면입니다.

 
 
예전에 TV에서 방영하던 전격z작전에 나오는 자동차 "키트"입니다.
 
전 오래전부터 바로 저 차에 들어가는 소프트웨어를 만드는게 꿈을 갖고 있습니다.
 
물론 자동차용이아니라 일반 생활용이지요.... 말을하고 판단을 하고 알아서 처리해주는...... 인공지능 + 자연언어처리 + 학습 ... 머 그런겁니다.
 
이 꿈을 가지면서부터 지금까지도 모든 프로젝트를 할 때에 나의 꿈을 이루기 위해서 필요한 지식과 경험을 쌓는다라고 생각하며 일하고 있습니다. 물론 그 꿈은 진짜 꿈이고 언젠가는 코딩을 시작할겁니다.
 
직장생활을 하면서도 일처리.. 그리고 사람들과의 관계... 그 모든것들도 다 나의 꿈을 이루기위해 필요한 단체경영 방법을 배운다라고 생각하고 있습니다.
 
둘째......
 
프로그래머는 물건을 만드는 사람입니다......
 
건물을 만드는 사람이지 벽돌을 나르는 사람이 아닙니다.
 
어떻게 만들지도 중요하지만 뭘 만들지가 더 중요합니다.
 
프로그래머는 항상 머리속에 "방법"보다는 "대상"이 그려져 있어야합니다.
 
다시말해서 어떤 기능을 수행할수 있는 기술을 배우는데 모든 정력을 투자하지 말아야합니다.
 
물론 기술은 당연히 가지고 있어야합니다. 하지만 기술 자체가 목적이 되어서는 안됩니다.
 
기술이 아니라 물건에 항상 관심을 가지고 그 물건을 만들어 내기 위해 필요로 하는 기술을 배워야합니다.
 
프로그래머는 소프트웨어를 만드는 사람이기때문에 모든 소프트웨어를 평가할수 있는 자질이 있어야합니다...
 
제가 자주하는 이야기인데 좋은 음악을 만들기 위해서 필요로하는 첫번째 조건은 좋은 음악을 들었으때...  "아~~ 좋다"라고 느낄수 있어야합니다... 그래야 자기도 좋은 음악을 만들수 있습니다.
 
창의력을 요하는 모든분야의 일이 다 그렇습니다.
 
프로그래머도 마찬가지지요 모든 프로그램을 비평할수 있어야.. .좋은 물건을 만들수 있습니다.
 
그럴려면 소프트웨어, PDA, 핸드폰등 최첨단 IT기기에 민감하게 반을할 필요가있고 세상 돌아가는 일에도 관심을 가져야합니다.
 
 
세째.....
 
아이디어는 자기가 구현 할수 있는 기술의 범위 안에서 나옵니다.
 
둘째 이야기하고는 상반되는 말인데..... 둘째 이야기가 프로그래머로써 소프트웨어 프로젝트의 기획능력을 말한다면 세째는 기술에 관한 이야기입니다...
 
자기만의 좋은 물건을 만들려면 아이디어가 상당히 중요한데 아이러니컬하게도 엔지니어의 머리에서 나오는 아이디어는 그 엔지니어가 스스로 구현할수 있는 기술의 범위내에서만 나옵니다. 그러므로 프로그래머가 많은 아이디어를 배출해 낼려면 많은 분야의 기술을 습득하고 구현할 수 있어야합니다.


여기까지...끝...


정리....

자... 잔소리는 그만합시다... ^^;;

머... 결론은 목표를 가지고 열심히 하자는겁니다. ^^;;

현대의 프로그래밍은 OOP가 필수적입니다.

그냥 객체가 아니라 살아있는 객체를 디자인하고 구현할수 있는 사람이 제대로 된 물건을 만들고 그렇게 될때 자기가 목표로하는 꿈을 이룰수 있을겁니다.

음....

대한민국에 소프트웨어 업계는 아직도 희망이 있습니다.

왜나면....

불법 사용률이 짱 높기 때문이죠....

정품 사용률이 높음에도 불구하고 지금처럼 힘들었으면 그건 정말로 어려운겁니다.

그러나....

아직 사람들은 소프트웨어를 위해서 돈을 꺼내지 않고 있습니다.

정부와 기업과 사용자들간에 좋은 방안은 연구해보고 서로 서로 노력하여 정품 사용률이 높아질때....

그때는 지금보다는 훨씬 좋아질겁니다.

자...

대한민국 만세~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

by 타이거 | 2007/09/02 14:00 | 잡다 | 트랙백 | 덧글(0)

펀드 종류


알아야 돈번다 ‘헷갈리는 펀드 유형’ 완전정복 성장형? 안정형? 안정성장형? 사방에서 “펀드 펀드” 하는데 도대체 얼마나 알고 투자하십니까?

주가가 한 치 앞을 모를 정도로 출렁대고 있지만, 주식형 펀드로 들어오는 자금은 지칠 줄 모르고 있다. 투자자들이 주식시장에 대해 갖는 믿음이 그만큼 강하다는 뜻이다. 그런데 펀드 투자자들은 자신이 가입한 펀드가 어떤 종류인지 제대로 알고 있을까? 펀드의 유형은 대체로 ‘주식 투자 비중’, ‘투자 철학’, ‘펀드 매니저의 개입 정도’, ‘자금을 넣는 방식’ 등에 따라 달라진다. 시장 상황과 투자자의 성향에 따라 ‘궁합이 잘 맞는 펀드’가 있기 마련이므로 유형을 제대로 파악하고 있는 것이, 펀드 고를 때 유리할 수 있다.



◆주식 투자 비중에 따라

보통 ‘성장형 펀드’, ‘주식형 펀드’라고 부르는 이름은 구분이 반드시 정확하지 않다. 자산운용협회 기준에 따르면 전체 자산의 60% 이상을 주식에 투자하는 펀드는 ‘주식형’, 주식에는 투자 않고 채권에만 60% 이상 투자하면 ‘채권형’, 나머지는 ‘혼합형’이라고 구별한다. 그러나 이런 분류는 각 펀드 평가기관마다 다소 차이가 있다.〈표 참조〉

펀드 수익률은 유형에 따라 천차만별이다. 올 들어 24일까지 수익률을 뽑아 보니, 주식형 펀드 중 상위 펀드의 수익률은 50%에 육박하고, 혼합형은 20%대, 채권형은 3~4%에 그친다. 만약 투자자가 위험을 기꺼이 감내하는 도전적인 성향이라면 주식형 펀드에 가입하는 것이 좋고, 원금 손실만큼은 절대 싫다면 수익은 낮지만 안정적인 채권펀드에 가입하면 된다. 펀드 이름으로는 정확하게 어떤 유형인지 파악하기 힘들다. 펀드 이름에 ‘주식형’ ‘혼합형’ ‘채권형’ 식으로 표시가 되는 펀드도 있지만, 대부분은 그렇지 않기 때문에 가입 시 유형을 확인해 볼 필요가 있다.




◆투자 철학에 따라

‘성장주 펀드’와 ‘가치주 펀드’는 투자 철학에 따라 나뉘는 유형이다. 성장주란 신기술을 확보했다든지 업종 자체가 미래에 크게 떠오를 것으로 예상되는 등 성장 잠재력이 뚜렷한 주식들을 말한다. 성장주 펀드는 앞으로 이런 주식들이 좋은 수익률을 낼 것이라는 믿음 아래, 성장주에 투자하는 전략을 취한다. 굿모닝신한증권 펀드리서치팀 이계웅 연구원은 “성장주 펀드는 시장보다 높은 수익률을 추구하므로 공격적인 투자자들에게 알맞다”며 “다만, 기업의 성장성이 꺾이면 펀드 수익률이 빠르게 하락할 수 있다는 점을 유념해야 한다”고 말했다. 성장주에 해당하는 대표적인 펀드는 ‘우리코리아블루오션주식’, ‘한국네비게이터주식’ 펀드 등이 있다. 성장주 펀드 반대편에 있는 것이 가치주 펀드로, 기업 실적에 비해 주가가 싼 주식들을 집중적으로 편입한다. 가치주의 특성이 주가가 떨어질 때 덜 떨어지는 것이므로 요즘처럼 조정장에서 빛을 발한다.



◆매니저 개입 정도에 따라

펀드 매니저가 적극적으로 종목을 골라서 운용하는 펀드를 ‘액티브(active) 펀드’라고 한다. 보통 우리가 가입하는 주식형 펀드는 대부분 이 유형에 속한다고 보면 된다. 반대로 펀드 매니저가 거의 개입하지 않는 펀드도 있다. 일명 ‘패시브(passive)’형으로, 코스피 200 같은 특정 지수를 그대로 따라가는 ‘인덱스형 펀드’가 대표적이다. 액티브 펀드는 펀드 매니저의 노력이 요구되므로, 당연히 수수료가 인덱스보다 비쌀 수밖에 없다. 액티브 펀드의 특징이 펀드 매니저의 능력에 따라 수익률이 천차만별이라는 것이고, 인덱스 펀드는 목표로 삼는 지수가 똑같다면 수익률이 대부분 비슷하다는 것이다. 메리츠증권의 박현철 연구원은 “수익률 1등 펀드도 액티브 펀드이고, 꼴찌 펀드도 액티브 펀드인 만큼 ‘잘 고르는 것’이 중요하다”고 말했다.



◆투자금 넣는 방식에 따라

펀드에 돈을 넣는 방식에 따라 ‘적립식’ ‘거치식’ 등으로 나뉠 수도 있다. 은행 적금처럼 매달 일정한 금액을 투자하면 적립식이고, 처음 넣을 때 목돈을 한꺼번에 납입하면 거치식이다. 중간 단계로 ‘임의식’이 있는데, 최초 투자금을 넣고 이후 자금이 생길 때 아무 때나 추가로 넣는 방식이다.

이 밖에 국내법에 따라 원화로 투자금을 넣는 펀드를 ‘역내 펀드’라고 하고, 외국법에 따라 외국 통화로 설정된 펀드를 ‘역외 펀드’라고 한다. 최근 해외투자 펀드 중 역내 펀드의 경우, 차익에 대해 세금을 한시적으로 면제해 주는 법이 생겼기 때문에 ‘역내 펀드’인지를 확인할 필요가 있다.


[신지은 기자 ifyouare@chosun.com]

by 타이거 | 2007/08/31 07:27 | 잡다 | 트랙백(12) | 덧글(0)

error LNK2001: unresolved external symbol........

헤더에 함수 또는 변수 등을 선언만 해놓고 정의를 하지 않은 경우 발생

특히 전역변수의 초기화를 생성자에서 하는 실수를 자주한다.

by 타이거 | 2007/08/14 19:05 | MFC | 트랙백 | 덧글(1)

fatal error C1010: unexpected end of file while looking for precompiled header directive

 

from :http://blog.paran.com/hcjung/3569667

 

fatal error C1010: unexpected end of file while looking for precompiled header directive

 

이 에러는 문법오류에 의한 에러가 아니다.

헤더 파일이나 프로젝트 설정으로 해결가능하다.

 

원인

1. 프로젝트 생성시 .c나 .cpp파일에는 기본적으로 stdafx.h파일이 포함된다.

   프로젝트 생성후 새로운 .c나 .cpp파일을 포함할 경우 stdafx.h가 자동적으 포함되지 않는다.

 

해결방법

1. 해당 소스파일에 stdafx.h를 포함하고 재컴파일한다..

   #include "stdafx.h"

   #include "헤더1.h"

             :

   #include "헤더N.h"

 

2. 방법1을 사용하지 않을 경우.

Project->Settings->C/C++탭->Category의 Precompiled Headers

Automatic use of precompiled headers선택후 재컴파일한다.

 

 

by 타이거 | 2007/08/14 18:55 | 트랙백 | 덧글(0)

리눅스 파일 시스템과 디렉토리 구조의 이해

http://www.Linuxnewbie.org

 

서론

1. 파일시스템과 디렉토리 구조

2. 하드웨어 장치의 연결

3. 파일

 

서론

리눅스는 경험해 볼만 하지만, 때로는 복잡할 수도 있다. 윈도우와 같은 OS를 떠나 리눅스의 세계로 와보라. 리눅스를 사용하기 위해서는 조작하는 방법뿐만 아니라 컴퓨터 안에서 작동하는 원리까지도 이해해야 한다. DOS 에서 윈도우 95,98이나 윈도우 NT로 변화는 디렉토리의 하부 구조와 작동하는 원리가 비슷하기 때문에 상대적으로 쉽게 느껴진다. 하지만, 리눅스는 많은 사용자들에게 다소 낯선 부분들이 있다.

이 글의 목적은 사용자들에게 그 낯선 부분들을 이해하도록 돕는데 있다. 일단, 파일들이 어떻게 조작되고 저장되는지, 하드웨어 장치는 어떻게 사용되는지 하는 등등의 방법에 대한 기본 지식을 이해하게 되면, 리눅스에서의 작업이 훨씬 더 간단하다는 것을 알게 될 것이다. 그러나 이 글은 파일 시스템과 디렉토리, 하드웨어 장치에 관한 기본적인 내용을 다루는 것이지 기술적으로 자세한 내용을 다루는 것은 아님을 미리 말해두고 싶다

 

1. 파일 시스템과 디렉토리 구조

이 글의 목적을 위해서, 파일 시스템(filesystem)이라는 용어는 저장 매체 상의 파일들과 디렉토리들의 구조를 가리키는 것으로 하자. 우선 첫번째로 살펴보아야 할 것은 이러한 파일들의 구조이다.

리눅스는 파일들과 디렉토리들을 계층적인 시스템으로 구성하는데 이는 윈도우, DOS와 유사하다. 이렇게 함으로써, 루트 디렉토리가 있고 그로부터 다른 디렉토리가 뻗어 나와서 디렉토리 트리를 이룬다. 하지만 유사한 점은 여기서 끝난다.

DOS 시스템에서 루트 디렉토리는 c:\ 라는 것을 알고 있는가? 그리고 OS와 관련된 중요한 파일들이 c:\dos나 c:\windows에 저장된다는 것을 알고 있는가? 아래에 일반적인 리눅스 시스템 디렉토리와 파일 시스템에서 그 디렉토리들의 역할을 정리하였다:

/ - 루트 디렉토리. "cd /" 명령으로 루트 디렉토리로 갈 수 있다.

/home – 사용자 디렉토리가 이 곳에 위치한다. 만일 설치할 소프트웨어가 있다면, 시스템의 상태나 프로시저에 영향을 줄 걱정 없이 소프트웨어를 이 곳에 안전하게 설치할 수 있다.

/etc – 시스템 전체에 영향을 끼칠 수 있는 모든 설정 파일이 이 곳에 있다. 여기서 설정되는 환경은 특정 사용자에게만 영향을 주는 것이 아니라 모두에게 적용된다.

/bin – 디렉토리 이름이 말해주듯이, 시스템의 바이너리(Binary;이진) 파일들이 여기에 저장된다. 쉘(Shell)과 명령어가 포함되며 이들 바이너리 파일들은 모두 실행 가능하다.

/tmp – 시스템의 임시 디렉토리이다. 이 디렉토리는 임시 저장을 위해 사용된다.

/usr – 시스템에 영향을 주지 않는 다른 모든 프로그램들, 사용자가 필요로 하는 소프트웨어 도구들이 여기에 저장된다. /usr/bin같은 이 디렉토리의 서브 디렉토리들은 루트 디렉토리의 같은 이름을 지닌 서브 디렉토리들과 비슷한 기능을 한다.

/var – 메일, 에러 메시지, 시스템 로그 같은 모든 변수(variable) 파일이 이 디렉토리에 위치한다.

/boot – 컴퓨터(또는 리눅스)의 부팅과 관련된 파일들이 이 곳에 위치한다.

 

2. 하드웨어 장치(device)의 연결

리눅스나 유닉스(Unix)에서는 하드웨어 장치와 파일 시스템의 관계가 DOS나 윈도우와 다르다. 하드웨어 장치는 여러 개의 파일 시스템들을 갖고 있을 수 있고, 리눅스에서 마운트 포인트(mount point)를 통해서 이러한 파일 시스템들에 접근할 수 있다.

개별적인 하드웨어 장치에 자체의 디렉토리를 할당해서 그 곳에 장착(mount;이런 장착을 위한 리눅스 명령어가 mount이다 - 역자주)한다는 아이디어다. 예를 들면, 리눅스에서 플로피 장치를 사용하기 위해 /floppy라는 디렉토리에 마운트해야만 한다. 이렇게 되면 플로피 장치 안에 있는 파일 시스템은 의도한 대로 리눅스 파일 시스템의 일부가 된다.

하드웨어 장치를 마운트할 때, 디바이스를 마운트 포인트에 할당하기 위해 장치 자체의 이름이 필요하다. 일단 마운트된 다음에는, 사용하고 있는 장치가 어떤 것인지 더 이상 걱정하지 않고 사용하면 된다.

아래에는 리눅스 하에서 하드웨어 장치 이름들의 예가 제시되어 있다. 여기에 있는 것들은 리눅스에서 하드웨어 장치의 이름을 짓는 것이 어떤 것인지 설명하기 위해 제시되었고, 또한 당신이 필요로 하게 될 정보에 대한 공통적인 예제를 주고 있다. 모든 하드웨어 장치들은 /dev를 통해서 이름 지워지고 장치의 타입에 따라 자세한 이름이 결정된다.

/dev/hda – 컴퓨터 primary IDE controller의 첫번째 장치를 가리킨다. 이 드라이브의 파티션을 구분하기 위해 숫자가 할당될 수 있다. 예를 들면, /dev/hda2는 primary IDE 드라이브의 두 번째 파티션이다.

/dev/hdb2 – 위에 설명한 논리에 따라, secondary IDE 드라이브의 두 번째 파티션이다.

/dev/fd0 – 플로피 드라이브

/dev/ttyS1 – 컴퓨터의 두 번째 시리얼 포트. DOS에서는 COM2로 불리운다. 여기서 보듯이, 하드 디스크, 플로피 드라이브뿐만 아니라 다른 많은 주변 장치들도 이런 방식으로 이름 지워진다.

/dev/hdc – 컴퓨터 secondary IDE controller의 첫번째 디바이스. 이것은 보통CD-ROM 드라이브의 위치이다. 컴퓨터의 여러 장치가 어떤 위치에 있는지 알아두는 것은 좋은 생각이다.

/dev/sda - SCSI controller의 첫번째 장치.

일반적인 마이크로소프트의 운영 체제와 비교한다면 무척이나 당황스럽게 느껴질 수도 있지만, a:\나 d:\로 이름 짓는 것과 다를 바가 없다. 하드웨어 장치 명칭을 정하는 원리라는 것으로는 둘 다 같다. 리눅스가 제공하는 유연성은 부분적으로는 이렇게 하드웨어 장치 명칭을 정하는 방식에 기인한다.

 

3. 파일

리눅스에서의 파일은 매우 유연하다. 파일 확장자와 이름에 관해 제한이 거의 없으며, 다른 운영 체제의 파일 조작 방법과 유사한 방식이 사용된다. 예를 들면, DOS에서 디렉토리를 변경할 때 쓰는 "cd" 를 리눅스에서도 사용하며, 파일을 한 디렉토리에서 다른 디렉토리로 복사할 때 "cp"가 사용된다.

하지만, 리눅스에서는 파일 속성이 보다 중요한 문제이다. 리눅스에서는 사용자, (사용자)그룹, 그리고 수퍼 유저(루트)의 보안 정도를 하나의 파일에 대해 모두 다르게 정할 수 있어서, 시스템 관리와 보안 문제가 보다 쉬운 작업이 된다. 각 파일은 읽기, 쓰기, 실행을 누구에게 허용할 것인가와 관련된 정보를 담고 있다.

'읽기(Read)' 가능이 뜻하는 것은 파일의 내용을 볼 수 있다는 것이고, '쓰기(Write)' 가능은 파일을 편집하거나 삭제할 수 있다는 것이다. 그리고 '실행(Execute)' 가능은 파일을 프로그램으로서 수행시킬 수 있다는 것이다. 이것은 보안 시스템을 위한 좋은 기본이 된다.

이제 좀더 복잡해 보이는 것을 다루기로 하자….

리눅스(그리고 UNIX)는 모든 것을 파일의 한 종류로 간주한다. 물론 디바이스도 여기에 포함된다. 리눅스는 리눅스가 이름지은 실재물과 파일 타입을 관련지음으로써만 파일과 디바이스를 구별한다. 그래서 디렉토리는 파일의 한 종류이고, 하드웨어 장치(device)는 또 다른 종류의 파일이다.

파일에 대한 위의 정의에 따르면 다른 종류의 파일엔 다음의 것들이 포함된다:

심볼릭 링크(Symbolic Links) – 이 파일에 접근하면, 이것과 연결되어진 파일의 정보를 제공한다. Windows의 바로 가기와 매우 유사하다. 심볼릭 링크에 접근해서 다른 위치에 있는 정보를 가져 온다.

파이프(Pipes) – 임시 저장소로 볼 수 있다. 파이프를 만들어서 데이터를 읽어 들이면, 정확하게 똑같은 정보를 파이프로부터 가져올 수 있다. 파이프란 이름은 뭔가를 한 쪽 끝에 넣으면, 그것이 다른 쪽 끝에서 정확하게 나온다고 해서 붙여졌다.

앞서 본 것처럼, 특히 어떤 다른 종류의 운영 체제와 비교해 볼 때, 리눅스의 파일 시스템과 구조는 많은 가능성을 제공하고 있다. 만일 당신이 파일 시스템의 잠재성을 이용하고자 한다면, 파일 시스템의 운용법을 이해하는 것이 중요하다.

결론

이 글에서 논의된 것이 약간은 생소해 보일지 모른다. 하지만, 리눅스의 원리와 작동 방식을 이해하는 데 시간을 투자하는 것은 이미 리눅스를 사용하고 있는 사람에게도 유익하다.

by 타이거 | 2007/08/07 22:49 | Run to the Linux | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶