많은 사람들이 C언어는 프로그래밍의 기초가 되는 언어라고 합니다. 그리고 실제로도 플랫폼의 특성을 잘 활용한 좋은 성능의 시스템을 구현할 때도 C언어를 많이 합니다. 하지만 이렇게 중요한 프로그래밍 언어를 안전하게 프로그래밍 하는 방법에 대한 책이 국내에 많이 소개되지는 않았습니다. 비슷한 책으로 오래 전인 2004년에 『C 함정과 실수(원서명 C Traps and Pitfalls)』라는 책이 출간된 적이 있는데, 이 책은 그보다 더 실무적인 차원에서 접근하고 있습니다.
이 책은 제목 그대로 버그 없이, 신뢰도와 보안성이 높은 소프트웨어 개발을 위해 좀 더 안전하게 C 프로그래밍을 할 수 있도록 도와주는 책입니다. 프로그래밍 언어 자체를 소개하는 일반 학습서에는 기술되지 않지만 실무에 적용할 때 반드시 부딪히게 되는 어려운 부분들이나 그 동안 살 떨리는 경험을 통해서만 알 수 있었던 고급 개발자들의 안전한 코딩에 대한 노하우가 이 책에 체계적으로 정리되어 있습니다. 따라서 고급 프로그래머의 코딩 노하우를 알고 싶거나, 안전한 C 코드를 짜고 싶다면 이 책을 당장 읽으시라고 추천합니다. 이 책이 정말 그러한 노하우를 제공해 줄 것인지는 당장 이 책의 2장~14장 중 아무 곳이나 펴보시면 금세 느끼실 것입니다.
다만 이 책에서 공개한 노하우들은 그냥 술술 읽기 쉽게 기술되어 있지는 않습니다. 저자는 이 책의 내용이 일종의 표준으로 사용될 수 있도록 의도했고, 때문에 안전한 코딩에 대한 모든 항목을 규칙과 제안으로 정리했으며, 각 규칙이나 제안에는 이를 지키지 않을 경우 얼마나 위험한지에 대한 평가도 제시해줍니다. 경우에 따라서는 이 책의 내용을 기준으로 코드의 안전성을 테스트하는 도구도 개발할 수 있도록 구성했습니다.
따라서 원문에서조차 '이런 식으로 코딩하면 해킹 당하기 쉽다'라고 하면 될 것을 '이 규칙을 위반할 경우 의도하지 않은 권한을 사용해 악의적인 사용자가 임의의 코드를 수행할 가능성이 존재한다'와 같이 다소 딱딱한 표현을 사용해 아주 구체적으로 기술하고 있습니다. 따라서 저 역시 이 책을 조직에서 개발 표준이나 규칙으로 사용할 가능성을 고려해 원문의 의도를 살려 번역했음을 미리 일러둡니다.
초급 프로그래머라면 각 제안과 규칙에 등장하는 용어들에 익숙하지 않을 수도 있습니다. 이러한 경우라면 책 뒤쪽의 용어해설 부분을 먼저 읽으시는 편이 좋습니다. 예를 들어 원문의 Implementation이 플랫폼 혹은 구현된 대상이라는 의미로 사용되는 경우가 있음을 용어해설 절에서 먼저 숙지하면 해당 용어를 사용한 부분을 이해하기 쉬울 것입니다. 그 외의 용어들은 필요에 따라 각주를 통해 설명했습니다.
일반적으로 보안이라고 하면 관공서나 금융 기관에서 사용하는 매우 높은 신뢰도를 요구하는 프로그램만을 생각할 수 있는데, 이 책의 코딩 규칙이나 제안들은 그러한 소프트웨어 보안 영역뿐만 아니라 일반적인 경우에도 필요합니다. 보안이 필요 없다고 해서 안전하지 않은 방식으로 프로그램을 작성한다면 버그 등 여러 문제를 지닌 소프트웨어를 만들 수 있는데, 아무도 자신이 개발한 소프트웨어가 문제와 버그로 가득 차기를 바라지는 않으니까요. 이 책은 두 가지 경우를 모두 염두에 두고 있으니 잘 읽어보시고 책의 내용을 통해 익힌 안전한 프로그래밍 방식으로 소프트웨어의 신뢰도와 보안성을 높여보시기 바랍니다.
HTML5가 한참 화젯거리입니다. 하지만 막상 서점에 가보면 이와 관련된 국내 서적은 많지 않습니다. 이런 상황에 오라일리 출판사의 『구글 개발자가 들려주는 HTML5 활용』 한국어판 작업을 진행하게 돼 뿌듯하기 그지 없습니다. 저자가 설명하듯 HTML5는 기존 HTML에 새로 추가된 기능의 집합이기 때문에 잘 정리된 정보를 얻기 위해 웹을 찾아봐도 엘리먼트 사용법이나 특정 기능에 국한된 스크립트 소개 정도가 전부입니다. 관련 기술 종사자가 아닌 이상 어떻게 보면 뜬구름 잡는 것 같은 HTML5의 개념을 캔버스 같은 몇 가지 기능만 봐서는 도저히 감이 잡히지 않아 답답한 마음에 서점에서 이 책을 들었다면 한번 읽어보시길 추천합니다.
숲 속에서 나무만 보고 길을 찾는 사람에게 지도를 넌지시 건네주듯이 이 책은 HTML5로 불리는 여러 기능을 소개하는 동시에 웹이 어떠한 길을 걸어왔으며 어떻게 발전했는지 알려주고, 그렇게 발전된 기능 중 어떤 부분이 모여 HTML5를 이루는지 이해하기 쉽게 설명합니다. 단순히 서버로부터 데이터를 받아 문서로 보여주던 웹은 스크립트 언어를 통해 사용자의 행동에 반응하게 됐고 Ajax를 통해 애플리케이션으로의 발전 가능성을 보여줬습니다. 이제 그 가능성은 HTML5 같은 추가된 기능을 통해 한 걸음씩 우리 앞에 현실로 펼쳐지고 있습니다. 많은 사람들이 이미 브라우저 안에서 워드프로세서나 스프레드시트 작업을 하기 시작했고, 모든 것을 브라우저로 처리하려는 다양한 시도가 여러 분야에서 이뤄지고 있습니다. 이런 흐름을 가속할 HTML5에 대한 좋은 서적이 한국어로 출간돼 참 다행이라 생각합니다.
이번 번역은 얇은 두께에도 불구하고 강유훈님과 공동으로 진행했습니다. 조금이라도 빨리 많은 독자들이 읽을 수 있기를 바라는 마음이었습니다. 다행히 이 책의 원서인 『HTML5 Up and Runing』의 내용은 http://diveintohtml5.org 사이트를 통해 이미 온라인으로 공개된 상태였고 덕분에 원서가 출간되기 전부터 일부 내용을 파악할 수 있었습니다. 원문의 용어나 표현은 나름의 고민과 논의를 거쳐 선택했고, 내용 역시 여러 번의 리뷰를 거처 수정했습니다만 부적절한 부분이 있다면 조언 주시길 부탁합니다.
프로그래밍을 해볼까 하는 마음으로 이 책을 열어 서문을 읽는 독자라면 매우 환영합니다. 운전을 배워보려는 사람이 처음부터 레이싱 트랙에서 드리프트를 연습하지 않듯이 프로그래밍을 시작하는 사람이 처음부터 어려운 개념과 예제를 학습하지는 않습니다. 그럼에도 불구하고 초보자를 위한 프로그래밍 서적들을 보면 이러한 부분을 고려하지 않고 변수 선언부터 시작해서 클래스 정의로 내용을 끝내고 무신경하게 라이브러리 함수들을 부록으로 나열한 경우가 너무 많습니다.
걸음마를 뗀 아이가 비로소 달리는 연습을 시작할 수 있듯이 배우는 일에도 순서가 있지요. 이 책은 파이썬을 배워보려 하거나 프로그래밍을 시작하려는 분들에게 친절한 설명으로 기초를 다져줍니다.
이 책을 통해 프로그래밍을 배우고자 하는 분들에게 한 가지 조언을 드린다면, 책을 읽으면서 반드시 책에 나온 예제나 연습 프로그램을 따라 해보라는 것입니다. 프로그래밍 경력이 30년이 다 되어 가는 저도 새로운 프로그래밍을 배울 때는 항상 옆에 터미널을 띄워 놓고 하나씩 실행해보며 학습합니다. 웹 페이지에서 파이썬 코드를 짜서 바로 실행할 수 있는 서비스도 있고 QPython처럼 안드로이드 폰에서 파이썬 코드를 작성할 수 있는 앱도 있으니 이동 중이더라도 꼭 연습해보면서 읽어보기를 바랍니다.
프로그래밍은 이제 몇몇 전공자만 다루는 도구가 아닙니다. 개발 환경은 매우 편리해졌고 점점 더 많은 분야의 사람들이 프로그래밍을 통해 실생활의 문제를 해결해 가고 있습니다. 이러한 시대의 흐름에 맞춰 파이썬 프로그래밍을 시작한 여러분의 시도에 뿌듯한 결과가 있기를 희망합니다.