웹으로 서비스를 제공하려는 당신이 알아야할 배경지식들.
웹으로 서비스를 제공하고자 하는가? 그냥 웹페이지가 아닌 특별한 기능이 들어간 웹페이지인가? 외주를 맡기더라도 나중에 확장을 위해 어떤 도구로 제작할지 미리 정해야 한다. 이 글에서는 웹 개발에 대해 이야기해보고자 한다.
웹 개발을 배우려는 사람들이 가장 처음 접하는, 가장 많이 접하는 곳은 오픈튜토리얼스 생활코딩으로 알고 있다. 그곳에서 웹 개발을 시작할 때는 HTML, CSS, Javascript를 다룬다. 이 세 가지가 웹 개발의 기초이다. 초중고 과정에서도 배운 사람들도 있을 것이다. 어떤 도구를 사용하던지 저 세 가지는 알고 가야한다. 그럼 앞서 말한 어떤 도구로 제작할지의 도구는 무엇을 의미하는 것일까? 바로 서버사이드 코드이다. 생활코딩에서는 저 세 가지를 배운 뒤에 PHP를 교육한다. PHP가 많은 웹호스팅에서 제공하는 서버사이드 코드이기 때문이다. 웹호스팅이란 서버 컴퓨터를 유지 보수하기 힘든 사람들을 위해 큰 서버 컴퓨터의 자원을 고객들에게 일정량 금액을 받고 나눠서 사용하게 하는 서비스이다. 웹 개발을 하려고 했는데 서버를 다루어야 한다는 부담을 줄여준 서비스인 것이다. 많은 웹사이트들이 웹호스팅을 이용하고 있으며 PHP로도 훌륭한 웹사이트를 제작할 수 있다. 그렇다면 PHP 외에 선택사항은 무엇이 있을까?
노드라고 주로 말한다. 노드는 Javascript기반 언어이며 인기가 매우 많다. 그 이유 중 하나는 바로 NPM이다. NPM이란 노드 패키지 매니저의 약어인데, 노드로 미리 작성된 코드들의 뭉치라고 생각하면 된다. 웹서버를 노드로 구축하고 싶다고 가정하겠다. 웹서버 관련 코드를 작성하는 데는 많은 시간이 걸릴 것이고 어려울 것이다. 하지만 Express라는 묶음이 이런 코드들을 미리 작성해놓았다. 만약 사진을 이리저리 자르고 다른 곳에 저장하고 싶다고 할 때도 미리 작성해놓은 묶음을 다운로드하여서 사용하면 되니 매우 편리하다. 하지만 이 노드를 제공하는 웹호스팅 서비스를 찾기는 쉽지 않다. 대부분 PHP를 사용하고 있기 때문이다. 다행히 Cafe24에서 Node.js 호스팅을 제공하고 있다. 물론 구글에 검색하면 쉽게 찾을 수 있다.
파이썬이라고 말한다. 많은 사람들이 들어봤을 것이고, 그만큼 많이 쓰이고 있다. 파이썬도 노드와 마찬가지로 pip이라는 패키지 묶음들이 있다. 누군가 미리 작성해놓은 코드를 가져다가 사용할 수 있다. 웹서버를 위한 패키지는 Flask와 Django가 있다. 이 둘의 차이는 뒤에서 언급하도록 하겠다. pip안에도 이미지를 위한 패키지, 문자열을 위한 패키지 등 다양한 패키지들이 작성되어 있다. 파이썬을 호스팅 해주는 서비스는 구글에 검색하면 다양한 정보가 있다.
php는 미리 작성된 패키지가 없을까? CodeIgniter와 Laravel이 있다. 이 둘과 그냥 php의 차이점을 알기 위해서는 MVC패턴을 알아야 한다. MVC가 아니라는 이런 글도 있긴 하지만 우리는 그냥 넘어가도 되겠다. MVC패턴을 쉽게 말하자면 모델, 뷰, 컨트롤러를 나누어 짜임새 있는 웹페이지를 만들어주는 패턴이다. 게시판을 예로 들면 페이지별로 게시글들을 나타내 주는 부분은 뷰, 몇 번째 페이지를 보여줘야 하는지는 컨트롤러, 글 자체를 모델로 볼 수 있습니다. 이 모델인 글에는 제목, 내용 등이 있지 않은가? 그 글들의 틀자체를 모델이라고 한다. 컨트롤러에는 유저가 몇 번째 페이지를 보고 싶어 하는지, 어떤 글을 보고 싶어 하는지 지시해준다. 뷰는 컨트롤러의 지시에 맞추어 해당 모델(글)을 가져와 보여주는 역할을 한다. 이 틀을 짜 놓으면 틀 없이 작성하는 것보다 견고하고 안정적인 웹페이지를 작성할 수 있다. 물론 코딩 괴물이 나타났다면 이야기는 달라진다. 이전에 파이썬에서 말한 Flask와 Django의 차이점도 여기에 있다. Django를 사용하면 MVC패턴을 이용하기 좋다. Flask도 MVC패턴을 사용할 수 있지만 Django보다는 자유도가 높기에 작성해야 할 것이 많다.
특별한 기능을 하는 웹페이지라면 PHP가 아닌 다른 도구를 사용하는 것을 추천한다.
지금까지 웹서버 측면을 말했다. 서버사이드를 바로 백앤드라고 하고, HTML, CSS, Javasciprt는 프런트엔드라고 한다. 파이썬을 사용한다고 HTML을 사용하지 않는 것이 아니다. 설명드린 도구 모두 HTML, CSS, Javasciprt를 기반으로 하기 때문에 꼭 알아야 하는 지식이다. 웹 개발을 한다면 절대로 떼놓을 수 없는 부분이다.
지금까지 웹 개발에 대해 이야기했다. 나는 전문가가 아니고 이것저것 건드려본 비전문가이다. 반드시 필터를 켜고 읽었길 바라며 틀린 점이 있다면 지적해주길 바란다.