조약돌은 간단히 말해서 학교 생활을 편하게 해주는 것을 목표로 하는 서비스이다. 26기가 2학년이던 시절 (2015년~2016년)쯤부터 개발이 시작되었다고 들었다.

26기 선배가 졸업하고 나서 이때까지 큰 진척은 없었으나, 이제 내가 3학년이 되고 시간이 좀 나기 시작한 관계로 다시 시작하려고 한다.


개요

우선 조약돌은 웹 서비스부터 시작한다. 앱은 Android와 iPhone을 동시에 만들어줘야 맞기도 하고, 애초에 스마트폰을 안쓰는 학생들도 있기 때문에 누구든지 접근할 수 있는 웹을 만들어야 된다. 그리고 앱을 만들고 웹을 만드는 것보다는, 웹을 만들고 그 정보를 API를 통해 앱에서 사용하는 형태가 좀 더 자연스럽다. 그러니 웹 서비스부터 개발하도록 한다.

웹 애플리케이션을 만드려면 기본적으로 DB, 백엔드, 프런트엔드에 대한 지식이 필요하다.

DB는 데이터베이스, 즉 웹앱에서 필요한 정보들을 저장하는 부분이다. 예를 들어 학생의 시간표에 대한 정보는 DB에 들어가게 될 것이다. DB에 대해서 알아야 될 내용은 어떻게 자료를 관리하는지에 대한 것이 되겠다. (자료 추가, 편집, 삭제, 탐색 등등)

백엔드는 서버 사이드라고도 한다. 백엔드에서는 기본적으로 ‘로직’을 담당한다. 어떤 상황에서 어떠한 작업을 할 것인지를 결정하는 것이 백엔드, 즉 서버에서 할 일이다. 백엔드를 잘 개발하려면 자신이 사용하는 프레임워크에 대해서 잘 알고 있으면 될 듯 하다. 프레임워크마다 백엔드의 구조, 작동 방식이 판이하므로, 일반적인 충고는 어렵다. (내가 잘 모르기도 해서 섣불리 설명할 자신이 없다)

프런트 엔드는 사용자와 어떻게 상호작용하는지를 정하는 것이다. 단순히 웹 페이지가 어떻게 생겼는지부터 시작해서, 사용자가 어떠한 입력을 주었는지, 그리고 서버에서 전달되어 온 정보를 어떻게 보여줄 것인지를 구현하는 것이 프런트엔드 개발이다. HTML과 CSS에 대한 기본적인 지식이 필요하며, 어느 정도의 디자인 감각이 필요하다.

추가적으로 HTTP 관련 지식이나 TLS 세팅, 서버 환경 세팅 등에 대한 여러 잡지식들도 필요하지만, 우선 웹앱 개발에 가장 핵심만 담자면 위에 3개를 얘기할 수 있겠다.

DB는 웹 개발자 입장에서 알아야 할 내용이 그다지 많지는 않다. 그리고 백엔드와 프런트엔드는 모두 어렵다. 각각의 분야에서 신경써야 할 부분이 다르기 때문에, 숙련되는 것은 상당한 시간이 걸릴 듯 하다.


프레임워크 / 스택

(2) 프레임워크는 개발자가 개발을 편리하게, 그리고 더 추상적으로 할 수 있도록 도와주는 도구이다. 다만 그 자체로서 제약이 되기도 한다. 프레임워크에서 제공하지 않는 기능이나 구조는 사용하기 힘들게 되는 것이다. 예를 들어 PHP라는 프레임워크를 사용한다면 (백엔드에서는)배우기 쉽고 비교적 빠른 성능의 애플리케이션을 구현할 수 있을 테지만, 동적인 페이지(페이스북처럼) 를 구현하고자 한다면 머리가 아파올 것 같다.

이렇게 개발자가 알아야 할 구조과 기능은 다양하다. 그리고 DB, 백엔드, 프런트 모두 프레임워크는 매우 다양하다. 개발하는 목적에 맞춰서 프레임워크를 적당히 선택해 사용하면 된다. 그렇게 고른 소프트웨어들을 나열해서  ****스택이라고 부른다. (원래 다른 분야에서도 사용하는 듯 한데, 여기서는 이렇게 쓰려고 한다.)

예를 들어, MongoDB, expressJS, Angular, Node.js를 사용한 MEAN 스택, 아니면 Linux, Apache, MySQL, PHP로 이루어진 고대의 LAMP스택 등이 있겠다.


조약돌은?

조약돌 프로젝트는 개발자가 길어도 3년정도밖에 일을 하지 않는다. 그것도 고등학생이고, 전업 개발자도 아니니 시간도 거의 없다. 따라서 배우는 것이 쉽고 빠르게 하는 것, 그리고 실제 코드도 읽는데 부담이 없어야 하는 것이 최우선 고려사항이다.

그래서 Meteor를 사용하기로 했다. Meteor는 엄밀하게 따지자면 백엔드 프레임워크이지만, DB와 프런트엔드 모두 크게 신경써주지 않아도 잘 연동되게 되어 있다. 애초에 Meteor 프로젝트 자체가 모든 개발을 연동시키겠다는, 풀스택을 지향하는 느낌이 강하다. (그래서 호스팅도 Galaxy라는 것을 지원한다.)

특히 설치나 환경 설정 등에서 meteor 하나만 깔면 된다는 점이 굉장한 이점이다. 튜토리얼도 상당히 달 되어 있어 배우는 데 오래 걸리지 않을것으로 생각했다. (이것보다 쉬우면 써먹을 프레임워크가 거의 없다.) 언어도 JavaScript 문법 하나만 알면 어느정도 개발 가능하다.

또다른 특징으로는 프런트엔드로 React, Angular, Blaze를 추천한다는 점이 있다. (3개 프레임워크 모두 각각의 튜토리얼이 있다.) 3개 모두 연동은 거의 즉시 가능하다. 참고로 Blaze는 메테오가 처음 공개되었을 때 같이 나온 프런트엔드 프레임워크로, 기본적인 HTML과 크게 다르지 않다. 그래서 셋 중 가장 배우기 쉽고, 가장 성능이 안좋다.

여기서 프런트엔드로 무엇을 선택하든 셋 중 다른 것으로 변환하는 과정은 큰 걸림돌이 없을 것으로 보이기도 했고, 나에게 남은 시간도 별로 없으니 그냥 셋 중 가장 쉬운 Blaze를 사용하기로 헀다.

DB는 물론 Meteor에서 기본적으로 추천하는 MongoDB를 사용한다.

아직 호스팅을 할 단계는 아니지만, 호스팅을 한다면 Heroku에서 할 계획이다. 학교 카드를 이미 등록해 놓아 바꾸기 귀찮다는 점도 있지만, 아무튼 Galaxy는 너무 비싸다.

요약하자면:

  • 조약돌은 쉬워야 한다.
  • 그래서 Meteor / Blaze를 사용하기로 했다.
  • 호스팅은 Heroku에서.