중급개발자… 개발자와 개발자 아닌 사람들이 보는 갭이 제일 큰듯…

취업시장에서 보면 중급 개발자를 찾는다는 이야기를 엄청 듣는다. 그리고 그거에 대해서 개발자로써 있던 사람들과 그렇지 않았던 학생, 비전공자들은 엄청난 갭으로 이해를 하는데….

“우리는 중급 개발자만 있어도 되는데 중급 개발자 찾기 엄청 힘들어요.”

이 말의 뜻을 제대로 아는 학생, 비전공자는 없다고 보면 된다. 신문 기자들도 그냥 뭣도 모르고 받아쓰기 하고는 개발자 없단다! 그러고는 개소리 떨어대는 수준이니…

일단 중급 개발자라는 걸 정의할 때에 맨날 튀어나오는 것이 바로 국가에서 떠드는 대표적인 개소리인 소프트웨어 기술자 신고제라는 걸 기준으로 하는 병신소리입니다. 공공기관 같은 곳들이 소프트웨어 개발자, 기술자들한테 단가를 산정할 때, 특정 기준이 되는 사람들이어야지 어느 수준의 기술자이고, 이걸 기본으로 급여 산정을 한다 뭐 그런 겁니다만…

기준이 되는 자격증은 정보처리기사입니다.

이거 아직도 유용하냐고 묻는데…. 국가 사업할 때에나 유용합니다.

자, 중급 기술자… 기사 자격 획득하고 3년간 소프트웨어 기술 분야의 엄무를 수행한 자.. 자, 그럼 그냥 hello world 수준의 코딩만 해도 3년이간 했으면 중급 기술자임?

진심 그런 식으로 생각하는 건 아니지..?

근데 이걸 학생들이, 아님 비전공자에 그냥 회사생활만 했던 인간들이 봐선 3년 버티면 그동안 뭐라도 배우겠지 하는데…. 천만에요.

실제로 IT 개발자 원하는 곳들에서의 중급 개발자는 어디 오픈소스로 올라온 프레임워크 까서 싹 다 이해하고, 내 맘대로 수정할 수 있는 수준의 기술을 가진 개발자를 중급 개발자라고 합니다. (코딩하고 각종 기술에 대한 이해같은 거야 당연한 거고요..)

그래서 어디 유명한 기업들 면접하고 나서 면접 어땠냐고 했을 때 설명한 내용이랑 대답한 내용을 듣고도 잘 모르는 교수님이나 이제 입사한 초급 선후배 레벨하고 진짜 중급, 고급 수준의 개발자들에서는 구분을 이미 다 한다. 거의 대부분의 신입 뽑는 레벨에서는 어디 네이버 글 외워서 가는 애들도 대충 그냥 받아주곤 했다. 근데 개발자들은 보면 안다. 전공적인 내용 하나도 없는 걸 갖다 외워서 와서 면접때 전공면접에서 그런 답 하는데 개발자로 쓰고 싶겠냐만…

이 감각적 차이가 중급 개발자라는 거에 대해서 엄청나게 차이가 난다. 왜냐면 경력직 모집인데도 불구하고 저런 대답 하는 개발자들이 실제로 존재한다. 진짜로 많이 존재한다. 구라같죠? 진짭니다.

면접관 입장…

그래서 어떤 플젝을 했냐, 어떤 걸 해봤냐 하고 묻고 하면서 중급 개발자를 찾아내려 하니 경력직 선호를 당연하게 하는 거고….

그게 심해지니 이런 기사까지 나오는 꼬락서니가 된 듯 합니다.

저 중급 개발자가 되는 건 어렵진 않습니다. 말로 설명하긴 힘든데… 개발하다보면 한번씩은 꼭 해야 하는 과정이라 어렵진 않다고만 말하겠습니다만… 저거 되기도 전에 떨어져 나가는 초급 개발자들도 엄청난 것이 현실이고….

으휴…

기사 보고는 어이가 없어서 글 좀 써봤습니다.

실제로 써보기 전엔 모릅니다. (간만의 잡소리)

개발자로 있다 보면 가끔 자기네 솔루션 써봐달라고 영업오는 사람들이 좀 있습니다. 작게는 네트워크 장비부터 해서 크게는 뭐 임베디드 장비, DBMS, 자체 클라우드 솔루션 등등…

진심으로 이렇게 진지하게 봐야지 될 정도로 많다. 우리가 실제로 쓸 일 없거나 해서 모를 뿐…

그리고 이게 일반인들을 위한 제품으로 있는 것이 국내 중소기업들 제품이 되기도 하고… 이게 좀 더 미~~친듯이 큰 형태가 되는 것이 바로 대기업들 제품 발표 현장이 될 것입니다.

어떠한 형태든 이제 신제품이 나와서 홍보를 한다. 그러면 이제 이녀석을 가지고 얼마나 믿고 써봐야 할 지를 모르는 것이 흔하다. 특히 기술이 완전 편한 기술을 제공하거나(각종 솔루션들), 기술의 패러다임이 크게 바뀐 제품이라던가(애플 M1), 세대가 바뀐 녀석들이라던가(플스5..?), 아니면 내가 찾던 게 이런거야! 같은데 뭔가 좀 생소한 회사에서 만들어져서 이름도 안날려진 기술들이라던가…

이렇게 설명하니 아마 좀 알 겁니다.

근데 이런 제품들에 대해서는 요즘 리뷰를 하는 여러 분들이 계십니다. 나 대신 써보고 의견을 남겨줘요. 그러니 제품 구매할 때 좀 편한 선택을 할 수 있게 해줍니다. 의견땜에 편한 선택을 할 수 있을 뿐, 선택하는 건 본인이라는 것에 대해서는 뭐 달라지는 건 없습니다만… 요즘은 이걸 일반인들끼리도 하다보니 여러모로 vs 논쟁 같은 걸로 이어놓고 하시는 분들도 많은데….

솔직히 답답합니다. 그냥 써보고 판단하면 되잖아…

그냥 발표만 하고 아직 제품도 나오지 않은 경우던, 홍보만 보고 제품 사양 좋아보이는 것만 보고 좋은 제품이라고 하는 경우던, 실제로 써봐야 압니다. 그러기도 전에 여러모로 의견 난립을 엄청 하는데… 그 의견들조차도 결국은 나와봐야 안다는 결론으로 이어집니다. 당연한 거고요. 그리고 그걸로 인해서 기능이 된다 안된다도 나와봐야 되고, 나중에 업데이트 되는 거 보고 해야 합니다.

근데 뭘 알고 실망이고 호구고 그런 소리 붙여가면서 서로 뜯고 쌈질하게 만들고 하는 걸까요… 그냥 일반인들끼리 대화하는데도 뭐가 더 좋은지 아닌지도 제대로 써보지도 못한 상태로 호갱이니 뭐니 그런 소리들 하고 하는지….

요즘 이런 위험한 논리들을 대놓고 쓰시는 분들이 너무 많다. 일반인이던 인플루엔서던…

경험해 보지도 못한 것들이다보니 궁금하긴 할껍니다.

근데 결론은 나와봐야 압니다.

실제로 써보기 전에는 모릅니다.

멋대로 판단하지 마세요.

이런 걸로 이야기 막 하면서 서로 이게 맞니 아니니 하다가 쳐발리는 꼬락서니 경험시키고 나니 “ㅅㅂ놈아, 니가 그렇게 잘났어? 어??” 그러던데 “ㅇㅇ. 넌 왜 그따위 내용도 몰라?” 이러고 오니 스트레스 받아서 쓰는 잡소리입니다만… (진심으로 거의 컴맹레벨의 개소리 하던…)

“유명 유튜버도 나랑 같이 말한다고!” 라고 하니 더더욱 뭔가 어이가 털려서….

흐유….

그냥 잡소리입니다.

운영체제 개발 – GRUB 부팅과정

그럼 실제로 어떻게 되는지를 보여주기 전에, GRUB이 운영체제 커널을 어떻게 부팅하는 지 좀 정리해서 적어보려고 한다. 일단 아주 간단한 과정에 대해서 정리를 해보면 다음과 같다.

  1. 바이오스가 부팅 장치를 찾고 MBR(Master Boot Record)를 읽어온다.
  2. MBR에 GRUB 스테이지 1이 있으며, GRUB 스테이지 1은 스테이지 1.5나 2를 불러온다.
  3. 스테이지 1.5는 MBR 직후 30킬로바이트 영역에 저장되며 이는 스테이지 2를 불러온다.
  4. GRUB 스테이지 2는 부트 메뉴나 명령 프롬프트를 실행하고 보여준다.
  5. 기본 값으로 지정된 커널이나 사용자가 선택한 커널을 메모리에 적재시켜서 커널 엔트리를 실행한다.

이 정보가 GRUB에 대한 위키피디아 내용을 정리한 것이다. MBR에 대한 설명을 간단하게 적으며, MBR은 저장매체의 첫 번째 섹터를 바이오스가 메모리로 읽어들인다. 그 후에 읽어들인 부트 코드로 제어권이 이양되어 코드가 실행되도록 해주는 녀석이다. 자세한 건 운영체제 이론쪽을 보면 될 것이고, 저는 일단 이렇게 간단하게 요약해서 설명합니다.

하드 디스크에는 논리적으로 여러 개의 하드 디스크(파티션이라고 한다)로 나눠서 쓸 수 있다. 최초 컴퓨터가 부팅된 후 MBR에서 부팅 가능한 논리 하드 디스크를 조회하고 부팅 가능한 논리 하드 디스크가 있을 경우에는 해당 논리 디스크의 부트 섹터를 찾아서 메모리로 읽어오고 그 부트섹터의 코드를 실행하게 된다.

이게 윈도우 운영체제인 경우에는 부트섹터는 Ntldr이라는 커널 로더를 메모리에 적재시키며 제어권을 Ntldr에 이양한다. Ntldr은 커널의 코어와 파일시스템 관련 시스템 파일을 로드해서 운영체제를 가동시키며 커널 코어와 파일 시스템은 시스템 자원을 활용하기 위해 여러 커널 모듈을 동적 또는 정적으로 로드시켜 운영체제를 실행하면서 유저 어플리케이션의 요청에 대응하게된다. (이 내용은 윈도우 시스템 관련 내용에 나와있습니다.)

Windows NT 계열의 운영체제 부트 과정을 그림으로 정리…. 이러면 쉬운데…;ㅅ;

부트로더의 존재를 통해서 커널에 어떻게 보여주는지를 정리하기 위해 윈도우를 기준으로 설명을 먼저 해봤습니다.

GRUB을 통한 리눅스를 어떻게 이용한 방식으로 이야기를 하면, GRUB은 부팅 후 Ntldr 까지의 역할을 GRUB이 실행한다고 보면 된다. 운영체제가 설치된 환경이 하드 이스크던, 시디던, USB던 상관 없다. 한편 우리가 제작할 운영체제의 커널은 GRUB 덕분에 Ntoskrnl.exe 같은 커널 프로세스에만 집중하면 된다. 즉, 커널을 메모리에 적재하는 과정을 구현하지 않아도 된단 것이다!!!! 이건 이전 글에도 작성했지만 운영체제 개발에 있어서 큰 부분을 덜어주는 것이다.

중요한 거니 두번 적습니다. \ㅇㅅㅇ/

그럼 GRUB은 어떻게 되는지를 또 그려서 보여줍니다.

바이오스는 부트 섹터에 기록된 boot.img 512바이트를 메모리에 적재한 뒤 제어권을 넘긴다. (이 과정이 스테이지 1) boot.img 파일은 스테이지 2에 해당하는 core.img를 메모리에 적재 해서 해당 코드를 실행하는데 여기서 menu.lst 파일이나 grub.cfg 설정 파일을 참고해서 커널 리스트를 가져온다. 그리고 커널을 선택해서 실행하면 GRUB은 커널을 메모리에 적재시킨 뒤 커널 엔트리 포인트에 제어권을 넘기고 자신의 일부를 종료해서 일을 끝낸다.

GRUB 같은 경우에는 버전이 1.0과 2.0이 있는데, 1.0대 버전에는 위의 설명과 같이 menu.lst 파일을 사용한다. 근데 2.0에서는 그냥 grub.cfg에서 다 처리한다. 근데 일단 그런 버전 차이에 상관없이 적고 싶어서 하다보니 위에처럼 정리가 되더라….

어려워…ㅠㅠ

이렇게 해서 GRUB을 통한 부팅 과정에 대한 설명을 정리했다. 커널 부팅에 대해서 오래된 자료들에 메모리의 어디 주소 영역을 찍어서 부팅하고 뭐하고 하는 그런 거 없어서 편하게 설명할 수 있었지만 이것도 제대로 다 보면 진짜 산더미만한 내용을 보게 될 것이다. 근데 규링이 만들 운영체제에서는 범용으로 부팅되는 과정에 대한 이해만 하고 제대로 넘기면 되니….ㅇㅂㅇ

이제 자세한 걸 만들어가면서 보여주려고 하는데…. 만들어봐야 할 것들이 있어서 그러니 좀 걸릴 것이다. ;ㅅ;

운영체제 개발 – GRUB

GRUB은 GNU 프로젝트의 부트로더이다. 대부분의 운영체제 커널을 불러올 수 있으며 우리가 제작한 커널 또한 호환되게 개발만 하면 호출할 수 있다. 뭐 이름과 유래에 대해서 내용이 있긴 한데 간단하게 그냥 GRUB도 우리가 운영체제를 부팅할 때 하드 디스크, 플로피, USB 등에 구애받지 않고 부팅 가능하도록 도와준다는 것이 제일 중요한 것이다.

GRUB 화면

이걸 제일 많이 볼 때가 있다면… 윈도우랑 리눅스 멀티부팅 해서 쓰는 분들이 제일 많이 볼 듯 하다. 아니면 여러 운영체제를 선택적으로 설치하거나 부팅해서 쓰기 위해서 자작으로 제작할 때에도 이용하기도 한다.

GRUB은 상용적으로 사용되는 운영ㅇ체제를 로드할 수 있을 뿐 아니라 개인이 자체 제작한 운영체제 커널도 규격에 맞추면 로드할 수 있는 능력을 가지고 있다. 그 능력에 대해서 살펴보면

  • 파일 시스템 직접 접근 기능
  • 다양한 실행 파일 형식 지원 기능
  • 비 멀티부팅 운영체제에 대한 지원
  • 메뉴 인터페이스 지원(부팅 화면)
    • 그래픽 메뉴 및 배경 그림도 사용 가능
    • 콘솔 인터페이스 지원
  • 다양한 파일 시스템 지원

이 정도가 된다. 우리가 순간적으로 그냥 보는 기능 안에 이렇게 많은 기능들이 들어있는 것이다. ㅇㅂㅇ

고마운 녀석입니다. ㅇㅅㅇ

직접 자작한 운영체제를 GRUB이랑 연동하였다면, GRUB은 직접 제작한 커널 파일이 유효한 커널인지 확인한 후 커널을 메모리로 적재한다. 또한 하드웨어 제반사항을 초기화한 후 커널 엔트리를 호출해서 제어권을 커널 코드로 이양할 것이다. 이 과정에서 GRUB은 커널에 하드웨어 초기화 정보를 넘겨준다. 이 과정을 아래와 같이 보면 이해가 쉬울 것이다. 조직도와 화살표 방향에 주목해서 글을 읽어보면 된다.

자바 가상 머신과 유사한 느낌으로 그려봤다. 근데 이렇게 보면 관계도 이해가 좀 더 쉽게 될 것이다.

그리고 당연한 이야기지만 GRUB을 통해서 커널을 메모리에 적재시켜서 실행시키고 싶다면 GRUB에서 요구하는 규격대로 만들어 줘야 한다. 이 내용을 작성하기 전에 GRUB 부팅에 대한 자세한 내용을 다음 글에서 작성하도록 하겠다.