Computer >> 컴퓨터 >  >> 네트워킹 >> 인터넷

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

현대의 웹은 동적 콘텐츠가 전부인 듯합니다. 하지만 대부분의 경우 이는 일종의 기술적 착시에 불과합니다. 수많은 웹사이트가 동적으로 생성된 페이지를 사용합니다. 즉, 요청이 들어올 때마다 데이터베이스에서 내용을 읽어 화면에 렌더링하는 방식인데, 상호작용이 전혀 필요 없는 콘텐츠조차 예외가 아닙니다. 이 방식은 시스템 자원을 소모할 뿐만 아니라, 잘못되거나 비정상적인 명령이 의도치 않은 결과를 낳을 수 있어 보안 측면에서도 덜 안전하다고 볼 수 있습니다.

구세대의 웹은 정적 콘텐츠가 고작이었습니다. 링크와 이미지를 담은 HTML 페이지 정도였죠. 나쁘지 않은 방식이었습니다. 리소스 부담이 적고, 웹 서버만큼은 확실히 안전했습니다. 다만 상호작용이 거의 불가능하고 콘텐츠 업데이트도 번거롭다는 게 흠이었습니다. 그렇다면 이 두 세계의 중간쯤에 있는 무언가가 있다면 어떨까요? 그것이 바로 정적 사이트 생성기(static site generator), 니콜라(Nikola)입니다.

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

탐색, 설치, 테스트

핵심 아이디어는 간단합니다. 정적 웹사이트를 '동적으로' 만드는 것입니다. 여러 Python 스크립트가 페이지 작성과 편집을 도와주고, 수정할 때마다 링크 등을 일일이 손볼 필요 없이 백그라운드에서 알아서 처리해 줍니다. 플러그인과 테마를 활용하면 작업이 더욱 수월해집니다. 기존 CMS와의 차이점은 데이터베이스가 없다는 것, 그리고 모든 것을 로컬에서 빌드한 뒤 사이트가 호스팅될 곳에 업로드한다는 점입니다. 결국 서버에는 HTML과 이미지만 남게 됩니다.

요즘 오프라인에서 콘텐츠를 제작하기란 쉽지 않다는 점에서 저는 이 도구에 흥미를 느꼈습니다. 2018년에 관련 주제로 글을 쓴 적이 있는데, GUI의 편리함과 코드 직접 편집의 유연성을 모두 갖춘 도구로는 고전적인 KompoZer가 가장 적합하다는 결론에 도달했었습니다. 반면 Nikola는 하이브리드 접근 방식을 취합니다. 대부분 명령줄 기반이지만, 시각 편집기와 브라우저 실시간 미리보기도 함께 제공됩니다.

저는 일반적인 설치 지침(pip와 virtualenv 명령)을 따라 진행했고, 문제없이 완료되었습니다. 물론 이 과정은 스크립트로 묶어 자동화할 수도 있습니다. 설치가 끝난 후에는 공식 튜토리얼을 따라 첫 번째(데모) 웹사이트를 만들어 보았습니다.

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

nikola init --demo test-site
Creating Nikola Site
====================

This is Nikola v8.0.2.  We will now ask you a few easy questions about your new site. If you do not want to answer and want to go with the defaults instead, simply restart with the `-q` parameter.
--- Questions about the site ---
Site title [My Nikola Site]:

기본 정보를 입력하고(홈페이지로 사용될 도메인도 등록된 상태로 준비해야 합니다) 첫 번째 포스트 작성에 들어갔습니다. 안내 문서대로 진행했는데, 그런데 바로 문제에 부딪혔습니다.

(nikola) roger@tester:~/nikola/test-site$ nikola new_post -e
Creating New Post
-----------------

Title: Why Badgers Shouldn't Be Allowed to Drive
Scanning posts........done!
[2019-04-07T18:05:25Z] INFO: new_post: Your post's text is at: posts/why-badgers-shouldnt-be-allowed-to-drive.rst
[2019-04-07T18:05:25Z] ERROR: new_post: The $EDITOR environment variable is not set, cannot edit the post with '-e'.  Please edit the post manually.

원인은 EDITOR 환경 변수를 직접 설정해야 한다는 것이었습니다. KDE 환경에서 Kate로 지정해 두었는데, Notepad++를 포함해 어떤 편집기든 사용할 수 있습니다. 이렇게 설정해 두면 해당 오류는 다시 발생하지 않습니다.

편집 과정은 다소 낯설게 느껴졌습니다. Nikola는 기본적으로 .rst 확장자, 즉 reStructuredText 형식의 파일을 사용하지만, Markdown 같은 다른 형식으로 수동 변경하는 것도 가능합니다. 개인적으로 이 점이 조금 이상하게 느껴졌습니다. 사람들에게 또 하나의 생소한 문법을 익히라고 강요하는 셈이니까요. 스타일과 콘텐츠가 분리되지 않는다는 점도 아쉬웠습니다.

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

즉, 그냥 바로 작업에 들어갈 수 없고 새로운 언어를 배워야 하며, 그것이 HTML로 렌더링되는 구조입니다. 하지만 CSS 클래스는 어떻게 다루고, 스타일은 어떻게 적용하며, 실제 HTML 요소는 어떻게 제어할 수 있을까요? 어차피 웹사이트를 만드는 사람이라면 실제 문법까지 통제할 수 있어야 하는 것 아닌가요? 그래도 결국 첫 포스트를 마무리하고 Nikola에게 빌드를 맡겼습니다.

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

빌드가 완료되면 브라우저에서 변경 사항을 바로 미리 확인할 수 있습니다. 직접 뭔가를 만들고 싶지 않다면 추가 테마와 플러그인도 활용할 수 있습니다. 여기까지는 나쁘지 않았지만, 몇 가지 궁금증이 남았습니다. 가장 큰 질문은 "그다음은?"이었습니다. 웹사이트가 마음에 들면 FTP로 서버에 통째로 올리면 되는 걸까요? 그리고 업데이트는 어떻게 처리해야 할까요?

니콜라(Nikola) – 웹을 위한 정적 사이트 생성기

사진 속 인물은 저가 아니라, 훨씬 더 멋진 분입니다.

그 밖에도 흥미로운 기능들이 많았습니다. 다양한 배포 시스템으로의 배포 기능, gist 가져오기, 차트와 썸네일 생성, 코드 블록 사용 등이 그 예입니다. 하지만 최종 단계, 즉 사용자가 콘텐츠 제작을 마친 뒤 로컬 빌드 환경에서 온라인 배포까지 얼마나 매끄럽게 이어질 수 있는가에 대한 안내는 부족하다고 느꼈습니다.

결론

정말 중요한 질문은 이것입니다. 만약 니콜라 테슬라가 오늘날 웹사이트를 만든다면 어떤 기술을 선택할까요? 마이크로소프트 프론트페이지? GeoCities? 아니면 Nikola? 저는 이 개념이 마음에 듭니다. 불필요한 웹사이트 골격 업데이트로 사용자의 귀중한 시간을 아껴준다는 발상도 훌륭합니다. 다만 접근 방식이 너무 개발자 중심이라는 점은 아쉬웠습니다. 웹사이트 제작이 놀이가 아니라는 건 알지만, 해커 전용 도구일 필요도 없잖아요.

제 생각에 Nikola는 더 간결한 설정 과정, HTML 직접 사용 또는 최소한 코드 블록 삽입 기능, 그리고 더 직관적인 미리보기와 배포 경험을 갖추면 좋겠습니다. 답은 분명 어딘가에 있겠지만, 진정한 아름다움은 스스로 설명이 되는 간단한 도구, 요구하는 것보다 더 많은 것을 주는 도구에 있다고 믿습니다. 첫 페이지 하나를 배포하기 위해 엄청난 수고를 들여야 한다면, 시간을 절약해 주려던 그 도구가 오히려 문제 그 자체가 되어버리는 셈입니다. 그럼에도 저는 Nikola가 마음에 듭니다. 참 멋진 접근 방식이고 앞으로도 계속 지켜볼 생각입니다. 어차피 웹 4.0이든 뭐든 어떤 변화를 가져올지 아무도 모르니까요.

그럼, 즐거운 웹 되세요.