brunch

You can make anything
by writing

C.S.Lewis

by Younggi Seo Feb 12. 2020

해커에게 필요한 웹 구조 해부하기 3

도산서원과 HTTP 웹 구조 유추하기

이제 다시 개발 공부하고 싶어서 손이 근질근질한 타이밍이다. 정확한 동기를 밝히면, 본인 커리어의 끝점인 보안 아키텍트가 되기 위해서는 개발자와 의사소통을 원활히 할 수 있어야 하는데 프런트 단이든 백엔드 단이든(둘이 합쳐 풀 스택) 도메인(분야) 단위로 제품 관리에 대한 방향성(앞으로 AI 중심의 운영모델이 구축되는 개발과정에서는 기존의 프로세스를 가져다가 소프트웨어로 전환하는 것이기 때문에)이 있어야 하기 때문에 해당 제목의 사이드 프로젝트를 재계한다. 이 플젝 이론 부분에 해당하는 1, 2편에서 도산서원의 전체 구조(Top-Down View)를 마치 웹 구조와 같이 나타낼 수 있을 것 같다는 개똥 영감을 얘기했었다. 소기의 목적을 다시 환기하면,



"웹 해커의 능력은 웹 프락시(중간에 거쳐가는 중계 혹은 대리의 가상 서버)를 통해 웹 서버의 서비스 구조를 이해하는 데 있다고 할 수 있다."(양대일, 2013)



나는 데스크톱 사양이 286 XT 시절부터 해킹을 시도한 적이 있었다. 1990년 당시 집에서 생일선물로 받은 대우통신의 퍼스널 컴퓨터인 AT도 아닌 XT를 한 대 가지고 CGA 비디오 카드 환경에서만 실행 가능한 아케이드 게임만을 한 게 아니었었다 말이다(도대체 이것이 언제적 얘기인가? 필자 소싯적 얘기임).



아직 학교에 입학도 하기 전인 일곱 살에, MS-DOS의 프롬프트단에서 열나게 키보드를 두드려서 커맨드 라인에서 이상한 반응을 예상했었었다(그리고 어떠한 메시지가 화면에 출력된 것이 어렴풋이 기억난다). 그때 대우 통신사로부터 받은 MS-DOS 정품 서비스 책자 매뉴얼이 있었긴 있었지만, 거기엔 가장 기초적인 명령어만 나열되어 있었다. 이를테면, 파일 리스팅을 하는 'dir' 명령(리눅스의 'ls'에 해당하고 필자가 가장 많이 두드린 명령은 'cls'였다;)이나 config.sys 설정 등 파일을 가지고 놀 수 있는 설명 말이다. 하지만 그 당시 본인이 컴퓨터 학원을 통해서 배운 최대한의 운영체제 응용 경험은 'autoexec.bat'라는 컴퓨터가 부팅과 동시에 자동 실행할 수 있게끔 하는 배치파일을 편집하는 거였다.



그래서 매번 알아서 실행하면 편한, 게임에 필요했던 몇 가지 환경설정(이를테면 경로를 미리 입력해서 어디서나 게임 실행이 가능하게끔 하거나 그래픽 최적화를 위한 설정 파일 실행 등) 그 배치파일에 입력해서 아케이드 게임의 시작을 단박에 했었다. 이것을 리눅스에서 '쉘 스크립팅'라고 한다. 아직까지 뇌리에 뚜렷이 남아있는 해킹 시도는 처음에 말했듯이 명령어 프롬프트 단에 아무 알파벳이나 입력했을 때, 예상치 못한 결과를 기대했던 것이다. 이것이 어쩌면 나의 소프트웨어 해킹 시도에 대한 첫 시작점일 수도 있겠다. 그리고 기억은 안 나지만 어떠한 정형적인 결과가 아닌 것을 보았던 거다. 그것은 아마도 OS 버퍼단에 빠진 거였을 것이다...



어이됐든 필자가 초등학교 고학년이 되었을 때도 MS-DOS는 버전이 5.0 이상으로 계속 갱신(revision)하고 있었다. 또한 윈도 95(Windows 95)가 출시되기 전에 동네 구멍 서점에서 산 'MS-DOS 5.0'이라는 책(이게 왜 500페이지 가까이나 되었을까...)을 보면서 지금으로 말할 것 같으면, Linux 단에서 깔짝 두드릴 수 있는 수준의 기량을 갈고닦았었다. 하지만 곧 도래할 GUI 환경에서의 OS(윈도 95는 사실 DOS 시스템이 기반인 그래픽 유저 인터페이스 운영체제다)로 인해, MS-DOS나 유닉스(이 당시 리눅스나 맥을 사용하는 친구가 단 한 명도 없었던 게 아쉽다.)의 CUI(Command User Interface) 혹은 CLI(Command Line Interface)에서의 명령 조작은 본인에게서 사라졌고, 당시 가까스로 컴퓨터 프로그래밍의 끈을 놓지 않았던 게 Visual Basic 6.0을 통해 삼목(tic-toc) 게임을 만든 거였다. 정말 쉬웠다. 이것도 뭐, 윈도 GUI 환경을 토대로 코딩 몇 라인만 보고 타이핑하여 바탕화면에 윈도 지뢰 게임과 같이 실행되기까지 디버깅하면 되는 것이기 때문에 지금의 Python 언어처럼 그다지 진입장벽이 높은 언어가 아니었다.



필자가 개발에 대한 기회를 가질 수 있었던 중학교 2학년 무렵, 이때 새로운 인텔 셀러론 CPU(칩셋이 아닌 버스형 CPU)가 등장하면서 686(AMD 계열 CPU도 아닌 Cyrix라는 생소한 아키텍처였는데, 인텔과 달리 오버클럭 튜닝이 위로 3단계까지 가능했었다)이라는 CPU를 탑재한 조립 컴퓨터(말도 안되지만, 용산 전자상가 단지의 축소판과 같은 부산의 한 컴퓨터 대형 마트에서 샀는데 200만 원이나 지불했다...?)를 장만하는 바람에 대다수의 청소년이 그랬듯이 게임의 길로 빠졌었다. 하지만, 개발자를 위한 잡지로 꽤나 유명한 '마이크로소프트웨어'(줄여서 마소)의 과년호만을 보고 여기에 나온 시세가를 기준으로 해당 조립컴퓨터 상가에서 일일이 하드웨어 기종을 초이스 해서 알고 보니 엄청난 바가지를 뒤집어썼었던 거였다. 이것을 알고, 1년 뒤에 그 상가에 다시 찾아가서(다행히 지금처럼 불경기가 아니어서 생존하고 있었다) CPU와 메인보드를 인텔 기종으로 교체했었다(이건 당시 삼보 컴퓨터의 마케팅 문구인 박찬호의 '체인지 업'과 같이 1년 뒤에 한 사양 위의 CPU와 메인보드로 교체해주는 서비스와 같은 거였다!).



중학교 1학년(1997년도) 때 샀었던 그 마소 잡지의 별책 부록만이 아직 본가에 있는데, 여기서 다루는 언어가 이 당시에 현업에서 많이 사용하기 시작한 객체지향 언어의 초기작 ‘C++’이었다. '메시지(파라미터, 정확하게는 argument) 패싱(호출, 정확하게는 return)'이라는 용어를 성인이 되어 자바를 배우면서 이해하게 되었는데, 이 당시에 핵 어렵기로 유명한 C++의 객체지향(object oriented)을 중학생 까까머리가 이해를 했다면 나는 지금도 어렵다고 하는 이 C++를 쉽게 만든 격인 Java와 같은 언어를 개발할 수 있었을까(Java는 제임스 고슬링이 만들었고, 천재 개발자로 한국의 개발자 구루들에게도 존경받는 빌 조이는 빌 게이츠보다 더한 Nerd(찐따)였다. 차이라면 빌 게이츠는 그 당시 미국 소프트웨어 업계의 내로라하는 경영진(엔지니어)의 이름을 다 꿰고 있었고, 사람 간의 관계에 대한 관심은 거의 없었다.)?



이 당시 이미 개발되었던 언어들이 이제는 시스템 사양이 좋아져서 다시 유행한 케이스가 Python(파이썬은 자바보다 더 오래전에 이미 개발되었었다.)이 아닌가 싶다. 왜냐면 인터프리터 형식으로 자바보다도 배우기 쉽기 때문이다. 물론 함수형 같은 구조로 자바처럼 모듈의 재활용(상속과 다형성)이 가능하다. 어쨌든 지금 풀 스택 개발자가 미국에서 가장 연봉이 높은 IT 직종 중에 하나이기도 하다. 그리고 앞으로 개발은 누구나 할 수 있고, 할 수 있어야 하는 시대에서는 웹단이든, 사용자에게는 보이지 않는 서버 단이든 어떻게 데이터가 입력 및 연산 그리고 출력되는지 정도는 알고 있어야 한다. 결국에 입력 전의 데이터가 컴퓨터의 소프트웨어를 통해 가공되어 어떠한 형태로 출력되는지가 가장 중요하고 이것을 고객이 원하는 대로 뿌려주면 상업적 가치를 지니게 된다.



대다수 평범한 개발자의 처우에 대한 한국에서의 이미지는 개떡 같지만, 개발이라는 4차 산업 혁명시대에서 가장 평범한 기술을 가지고 있다면 본인의 개인정보(이 데이터가 모이면 돈이고, 해커가 노리는 것이 곧 돈이다.)가 어디에 저장되는지를 알 수도 있다. 더 나아가 이 정보가 유출이 될 확률이 있는지 없는지도 판단할 수 있을 것이다. 그래서 지금 보고 있는 웹상에서 필자의 글이 독자의 눈에 어떻게 인코딩(독자 나름의 배경지식으로 부호화)되어 당신의 두뇌에서 다시 가공 및 필터링한 어떠한 결과로 디코딩(독자만의 언어) 될는지는 앞으로 다룰 웹 구조 절단내기 섹션을 계속 보시면 알 수 있다.


  

대부분의 웹사이트에 방문할때 브라우저의 내비게이션바 왼쪽 끝부분에 나타나는 조그만 아이콘인 '파비콘'을 생성하였다. 이게 없으면 화면(구글 크롬)의 오른쪽 개발자 도구에서 에러뜸.



Visual Studio Code라는 가벼운 텍스트 에디터(대부분 언어 지원)로 코딩 및 상단 사진의 웹페이지 소스를 browser-sync라는 툴을 통해 브라우저로 실행가능함.


 




참조

1) 양대일. (2013). 정보 보안 개론: 한 권으로 배우는 핵심 보안 이론, 서울: 한빛 아카데미.

2) 크리스 아키노. (2017).  FRONT-END WEB DEVELOPMENT: The big NERD ranch guide. (2016). 한국 번역판 역자 이지은(2017). 제대로 배우는 프런트엔드 웹 개발. 서울 : BJ(비제이 퍼블릭).

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari