리눅스 시스템프로그래머 지망생으로서 현업에 계신분들께 소소한 질문이 있습니다.
앞으로 KLDP에서 활동하고자는 신입으로서 첫 인사 겸 질문으로서 스레드를 세워봅니다.
현재 모 IT 특성화고에 재학중인 고등학교 2학년 학생입니다.
고등학교 입학때부터 시스템 보안쪽에 관심이 많아 공부해 왔고, 그러면서 리눅스 시스템 구조에 대한 관심이 커졌습니다.
현재는 리눅스 시스템 프로그래머로 진로를 확정하게 되었고요.
하지만, 막상 체계적으로 학습을 하자니 너무나도 막막하더군요.
스스로 커리큘럼과 학습 계획을 세워 자율학습시간을 쪼개며 공부하고 있지만, 학교 차원에서 해주는 지원이 아무것도 없고 오히려 학업에 소홀해진다면서 은근히 압력을 주고 있습니다.
(아실 분들은 아실 안산 소재 모 학업 특성화고등학교로, IT관련 교육은 커녕, 학생 스스로 결정한 해킹대회 출전조차 아니꼽게 생각하는 학교입니다.)
이렇게 정보도 인맥도 없던 와중에 우연히 시스템 보안 공부할 때 자주 들렀던 KLDP가 떠올랐고, 혹시나 해서 이렇게 가입하여 초면에 질문을 올리게 되었습니다.
본론으로 들어가서 지금 제가 짜고 있는 커리큘럼이 맞는지, 또 추가로 공부해야하는 분야라던가 마음가짐 등에 대한 조언을 듣고자 합니다.
버릇없이 초면에 질문글을 올려서 죄송합니다. 무례하지만 잘 부탁드립니다.
일단 진로는 상기했듯이 리눅스 시스템 프로그래머로 확정이 난 상태고요, 그 중에서도 특히 Low-Level 네트워킹 라이브러리나, 네트워킹 커널 모듈쪽에 관심이 많습니다.
기반 지식은 기존에 시스템 보안쪽으로 공부한 것이 있어서 ELF파일 구조나 Syscall, 동적 라이브러리 로딩, 메모리 구조나 시스템 시그널, IPC, GDB 등에 대한 기본 개념은 잡혀있는 편이고, 개발 쪽 또한 x86어셈블리와 C, C++을 짤막하게나마 건드려본 적 있습니다.
지금으로서는 확실히 어떤식으로 공부해야할지 잘 모르겠어서 무작정 O'reilly에서 나온 '리눅스 시스템 프로그래밍', '리눅스 커널의 이해', '리눅스 디바이스 드라이버' 번역본을 읽고 있습니다.
계획상으로는 올 가을(10월)까지 위 세 책을 모두 완독하고, EXT2기반의 간단한 파일 시스템 모듈을 짜면서 리눅스 커널구조와 커널 모듈의 작성법에 대한 지식을 다지고자 합니다. 그리고 겨울방학(2월)중까지 오픈소스로 풀려있는 네트워크 디바이스 드라이버 소스들을 통해 해당 지식을 학습하고, 간단한 가상 네트워크 인터페이스를 구현한 뒤에, 최종적으로 내년 10월중까지 NIC 디바이스 드라이버와 C++기반 컨트롤러를 이용한 간단한 Low-Level 방화벽을 구현해보고자 합니다. 제가 확실히 부족하다고 느끼고 있는 알고리즘과 자료구조 또한 위 프로젝트를 진행하면서 동시에 공부하려고 합니다.
하루에 개발 및 학습에 투자할 수 있는 시간은 평일 3시간, 주말 10시간 정도 될 듯 하고, 방학 기간에는 약 3주동안 하루에 13시간 정도 투자할 수 있을 것 같습니다. 이 정도면 충분히 위 계획에 따라서 프로젝트를 진행 할 수 있지 않을까하고 생각하고 있는데 혹시라도 이미 해당 분야에 대해서 공부해 본, 이미 실무를 하고 계시는 분들의 의견을 들어보고 싶습니다. 위 프로젝트를 과연 계획대로 끝낼 수 있을지 부터, 혹시라도 선행되어야 할 지식중에서 제가 빼놓은게 없는지, 아니면 경험상으로 이런 지식을 가지고 있으면 네트워크 모듈 개발에 도움이 되더라 하는 부분에 대해서 말입니다.
또, 혹시라도 위 분야에 대해서 체계적으로 배울 수 있는 사이트 등이 있다면 추천해주셨으면 하고 부탁드리겠습니다. 지금 책에서 배우기 어려운 지식이라던가 책에 나오지 않은 응용은 tldp나 스택오버플로우, 구글링을 통해 배우고 있습니다만, 매번 검색하기도 어렵고, 설사 정보를 찾아내더라도 제한된 상황에서만 활용 가능한, 단편적인 정보들 밖에 없더라고요. 특히 디바이스 드라이버 튜토리얼등은 많이 보았지만 해당 내용들의 대부분이 '리눅스 디바이스 드라이버'에서 개인별로 소스코드를 조금 뜯어고친 정도에 불과해 실망한 적이 많습니다. 또, 안 그래도 부족한 관련 게시글 중에서도 하위 커널을 이용해 현재 개발 환경하고는 전혀 동떨어진 내용도 많았습니다(예제코드에서는 file_oper에서 ioctl을 사용하던데 계속 제 소스코드에서는 오류가 떠서 결국 레퍼런스를 참고하는 삽질 끝에 ioctl이 삭제되고 unlocked_ioctl로 바뀌었다는걸 알게된 적도 있었습니다). 만약 폐가 되지 않는다면 찬찬히 기초를 다져나가기 좋고, 체계적으로 배울 수 있는 사이트, 그런 곳이 없다면 적어도 최신 커널 환경에서 서술되어있는 포럼이라도 소개해주셨으면 합니다.
혹시라도 시간이 되신다면, 리눅스 시스템 프로그래머로서 일하면서 자주 겪는 해프닝이라던가, 어떤 마음가짐을 가져야 하는지, 그게 아니더라도 어떠한 코딩습관이 도움이 되는지, 실무 개발과 개인 프로젝트 진행은 어떻게 다른 느낌인지 선배님들께 조언 부탁드리겠습니다.
다들 바쁘신 와중에 너무 죄송하고, 초면에 무리한 부탁인지 알지만 조금이나마 선배님들께 배워보자 합니다.
이미 현업에 계시는 분들, 다른 여러 선배님들, 앞으로 KLDP에서 많은 활동 해보겠습니다.
모두들 잘 부탁드립니다.
저도 커널공부하고있는대
2.4 와 2.6 제외학고는 커널관련자료를 구하기 어렵고, 그 이상 버전은 (지금 4.5.2 까지 나왔는데) ctags같은걸로 일일히 커널을 분석하면서 공부하는수밖에 없습니다. 2.6과 4.5.2의 커널소스양은 엄청난 차이가 있더군요.
확실히요...
2.4나 2.6버전은 각종 책이라던가 아니면 왠만한 사이트에서 다루고 있더라고요... 아마 '리눅스 커널의 이해' 책이 2.6버전 기준 집필이어서가 아닐까 싶네요.
이런 현상을 볼 때마다 역시 '리눅스 커널의 이해'같은 내용을 연구하는 1차 저자분들이 존경스럽더군요...
저도 상위 커널 연구할 때는 2.6버전 책 펼치고 2.6버전 리눅스 코드를 받아서 /usr/src폴더 안에 있는 제 커널 헤더 소스랑 Diff툴로 비교해가면서 연구하고 있는데 역시나 대부분의 분들이 비슷한 상황인가 보네요... 정말 상위 버전으로 갈수록 정보는 없고 지원은 열악해지나봅니다...
아무튼 간에 반갑습니다. 앞으로 잘 부탁드립니다!
저도 전문가는 아니지만...
우선 여러 지역의 오픈소스 업계 지인들과 교류 관계를 가지는 것도 좋겠네요
막히는게 있으면 현재로선 국제적 포럼 검색이 가장 빠릅니다.
만일 우분투를 이용한 가상머신에서의 전체 시스템 빌드를 할 경우가 생긴다면 어렵게 할 필요 없이 간편한 ubuntu distroshare를 추천 합니다.
https://github.com/Distroshare/distroshare-ubuntu-imager
스크립트 형태고 자유롭게 변형해 입맛에 맞춰 쓰면 됩니다.
양질 높은 시스템 네트워크 이야기!
오픈소스 업계 지인이라...
아무래도 학생이다 보니 인맥이라던가 기타 여러 부분에서 뒤쳐질 수 밖에 없었는데, 우분투 포럼이라던가 기타 리눅스 컨퍼런스들을 다니면서 지금이라도 여러 지인층을 쌓아나가야겠네요.
Ubuntu Distroshare라... 한번 찾아보겠습니다 정말 감사합니다!
앞으로도 잘 부탁드립니다!
아직 어리시니, 가장 좋은건, 열심히 공부해서 좋은
아직 어리시니, 가장 좋은건, 열심히 공부해서 좋은 대학교의 좋은 랩실에 들어가는 것입니다.
지금 당장은 컴퓨터 공부를 할 수 없는것이 스트레스겠지만, 좋은 랩실에서 4년간 연구할 수 있는 실력이 다지는 시간이라 생각하시고, 내신과 수능에 전념하십시오.
인문학과 기초과학 공부를 열심히
인문학과 기초과학 공부를 열심히 하세요.
배움이라는것은 항상 타이밍이 중요합니다. 지금은 인문학과 기초과학을 열심히 공부할때입니다.
리눅스 시스템프로그래밍과 커널공부는 나중에 해도 늦지 않습니다.
오히려, 지금 공부해도 당장 효용성이 크지 않을것 입니다.
하지만, 기초과학 공부는 시간이 지날수록 배울 기회가 적어질것이고,
지금 현재직업(학생)에서의 효용성이 아주 큽니다.
기술의 발전속도는 너무 빠르기에 지금 시스템프로그래밍 공부를 많이 해봤자, Revimal님이 대학도가고, 군대도 가고, 인생공부도 하고, 취업했을때면
많은 부분들이 더이상 의미가 없어져버릴수도 있습니다.
하지만, 인문학과 기초과학의 변화속도는 IT기술의 변화속도만큼 빠르지는 않습니다.
나중에 취업하고 현업에 뛰어들면 인문학과 기초과학 공부할시간이 턱없이 부족합니다.
새로 도입되는 기술트렌드 따라가는것도 공부하며 따라가기 쉽지 않습니다.
연애도 하고, 여행도 하고, 결혼해서 자식도 낳고, 일에 치이며 *야근*도 하다보면, 새로 도입되는 기술트렌드 따라가기 위한
기술공부할 시간내는것도 쉽지 않습니다. 그 결과, 개인역량의 발전이 회사에서 하는 프로젝트에 의해 크게 좌지우지 되어버립니다.
신입일때는 회사에서 시키는 일만 해도 실력이 늘지만, 어느정도 경력이 쌓이면 개인공부없이 실력이 성장하기 쉽지 않습니다.
그래서, 경력 5년차나 20년차 개발자사이에 약간의 노련미정도 차이만 있을뿐, 기술적 수준의 차이는 크게 나지않는 경우들이 발생합니다.
쓰다보니 너무 주절주절 길어졌네요. 짧게 말하자면, 지금은 학과공부에 최선을 다 할때 입니다. 컴퓨터 공부는 나중에 해도 늦지않고,
정말 하고 싶다면, 인문학과 기초과학에 대부분의 시간을 투자한후, 정말 남는 짜투리 시간을 이용해 잠깐씩만 맛보기정도만 하세요.
본인이 원하는것 보다, 본인에게 가장 중요한것을 하세요. 중요한것들을 꾸준히 하다보면, 언젠가는 본인이 원하는것을 하고있는 자신을 발견할것입니다.