javascript로 세상을 지배하는 법

in #kr7 years ago

서론



javascript가 어떤 것인지 잘 모르시는 분들을 위해 간단하게 설명부터 먼저 진행하도록 하겠습니다.

자바스크립트(JavaScript)는 객체 기반의 스크립트 프로그래밍 언어이다. 이 언어는 웹브라우저 내에서 주로 사용하며, 다른 응용 프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. 또한 Node.js와 같은 런타임 환경과 같이 서버 사이드 네트워크 프로그래밍에도 사용되고 있다. 자바스크립트는 본래 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 에이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발하였으며, 최종적으로 자바스크립트가 되었다. 자바스크립트가 썬 마이크로시스템즈의 자바와 구문(syntax)이 유사한 점도 있지만, 이는 사실 두 언어 모두 C 언어의 기본 구문을 바탕했기 때문이고, 자바와 자바스크립트는 직접적인 관련성이 없다. 이름과 구문 외에는 자바보다 셀프와 유사성이 많다.

https://ko.wikipedia.org/wiki/자바스크립트

위키백과에서는 위와같이 설명하고 있습니다.

과거 2000년대 초반에 웹이라는 시장이 활성화되는 시기쯤에 javascript는 우리와 함께 있었습니다. 웹페이지에서 눈이 날라다닌다거나, 오른쪽 클릭 금지라던가 등등 (20대 후반이상의 나이를 가지고 계신다면 잘 아실 듯 합니다)
javascript가 웹페이지에서 간단하게 사용될 때에는 그렇게 유명하지 않았습니다. 또한 javascript언어를 사용할 줄 아는 사람들의 평가도 당연히 높지 않았습니다. 그러나 웹, 모바일 시장발전과 함께 보여지는 것이 점점 중요해지면서 javascript의 중요도가 폭발적으로 성장했습니다. javascript로 웹페이지에 화려한 애니메이션의 동작들을 표현할 수 있으며, 보안이 중요한 서버의 역할, 데이터저장의 방식까지 javascript의 영역이 계속 넓어져가고 있습니다.

개념없는 언어 자바스크립트



왜 과거에는 javascript가 지금처럼 대접받지 못했을까요? 지금은 스크립트형식의 언어라고 해서, 뭔가 엄청 유연한 방식의 언어들을 선호하고 있습니다. 하지만 과거에는 javascript같은 자유로운 언어는 전통이 없는 것처럼 분류되었고, C/C++, Java와 같은 언어들이 가지고 있는 딱딱함과 객체단위를 지향하는 언어들이 더 신사적인(?) 느낌이 있었던 것 같습니다.

이렇게 설명드렸듯이, javascript언어는 뭔가 정리되지 않은 느낌과 이렇게 작성해도 되나라고 할 정도로 엄청 유연하게 작성하고 동작합니다. (이로 인해 유지보수가 힘들고, 오류수정하기가 까다로운 단점도 있기는 있습니다.)

모바일이 발전하기 전. 즉, 스마트폰이라는 것이 등장하기 전까지는 사용자의 요구사항들이 어느정도 정리가 가능하고 설계대로 진행할 수 있었습니다. 객체지향으로 설계가 가능하다는 뜻이죠.
그런데 스마트폰등장과 함께 모바일시장이 성장하면서 기술발전과 요구사항을 바로 반영할 수 없는 상황에 다다르면서 객체지향설계의 한계점이 보이기 시작했습니다. 그러면서 python, ruby, javascript, scala, swift 등 이러한 언어들이 많이 등장했습니다. 이러한 언어들의 장점은 사용자, 기획자의 요구사항반영하고, 설계의 구조를 변경하는 것이 어느정도 유연하다는 것입니다. 그리고 javascript로 무언가를 개발함에 있어서 타 언어들의 비해 많이 제약이 없기 때문에 정말 많은 분야에서 사용될 수 있습니다.
이 포스팅을 읽고 계신 분들에게 javascript로 도대체 어떤 것들이 가능하며, 이 언어를 다루게 되면 정말 세상을 지배할 수 있을 것이라는 공감을 나눠보려 합니다.

무엇을 만들 수 있는가?


- 프로그래밍 공부



모든 프로그래밍 공부와 비슷하기 때문에 시작하는 것은 어렵지 않습니다. if, switch, for, while/do~while, function들의 대해서 사용방법을 알고, 기본적으로 간단하게 코드를 작성할 수 있으면 어떤것이든지 시작해볼 수 있습니다.

혹시 이 글을 보시면서 javascript라는 언어에 흥미가 생길 것 같으신 분들은 이고잉님이 운영하고 계신 아래 링크를 통해 기본적인 홈페이지 개발까지 어렵지않게 배우실 수 있습니다.

- 웹개발: Front-end Applicatioon



위에서 잠깐 설명했듯이 생활코딩에서 학습한 뒤에는 HTML, CSS, JavaScript를 이용하여 간단한 웹페이지를 만드실 수 있습니다.

과거에는 웹개발중 Front-end분야는 단순히 보여주는 페이지, 정적페이지로의 역할만 했다면 지금의 Front-end는 웹페이지에서 게임까지 제작가능할 정도로 현란한 UI도 가능해졌습니다. (그만큼 몸값도 상승중(?))

또한 요즘은 Front-end관련 라이브러리, 프레임워크들이 오픈소스로 많이 공개되어 있어서, 어느정도 지식과 학습만 한다면 Facebook같은 서비스도 만들 수 있을 겁니다! (열심히 한다면요!)

Front-end를 유용하게 개발하기 위해서 좋은 오픈소스 몇개를 추천해드리겠습니다 : )

  • jQuery(제이쿼리) : 웹 초기부터 지금까지 꾸준히 인기를 유지하고 있는 라이브러리입니다. 각 HTML, CSS, Animation등을 쉽게 다룰 수 있으며, network관련 유틸리티까지 포함되어 있어서 데이터들을 실시간으로 변경할 때도 유용하게 사용됩니다.
  • underscore(언더스코어): 데이터가공의 모든 것이 모아져있는 라이브러리입니다. 따로 알고리즘을 구현하지 않아도 기본적으로 많이 사용되는 탐색관련 알고리즘들이 함축되어 있습니다.
  • momentjs(모멘트제이에스): 어떤 언어든지 시간을 가지고놀기가 참 어렵습니다. javascript에는 momentjs라는 것이 존재하고, 누구라도 시간을 아주 편리하게 다룰 수 있게 됩니다.
  • Angularjs(앵귤러제이에스): 원하는 자료를 보여주기 위해 페이지를 매 번 새로고침 한다면 힘들겠죠? Google에서 시작한 오픈소스로 화면을 새로고침하지않고 데이터, UI를 실시간으로 빠른속도로 교체할 수 있습니다.
  • Reactjs(리액트제이에스): Angularjs는 뭔가 정리되지 않은 느낌의 프레임워크라면, Reactjs는 페이스북화면에도 적용되어 있는 View(보여지는 부분)를 전문적으로 담당하고, 각 데이터의 흐름을 깔끔하게 정리해준 프레임워크입니다.
  • Vuejs(뷰제이에스): 떠오르는 샛별로 Angularjs, Reactjs의 단점들을 보완하기 위해 나온 라이브러리로 각 상황에 따라, 환경에 따라 적절하게 사용하기 좋습니다. 뒤에서 중국 최대기업 알리바바의 지원을 받고 있기도 하죠.

- 웹개발: Back-end Application



기존 ASP, PHP, Java등의 언어로 웹개발의 뒷부분을 담당했다면, 이제는 javasciprt로도 저 언어들을 교체할 수 있습니다. node.js라는 플랫폼이 등장하면서 javascript로 모든게 가능해졌습니다. node.js뒤에는 c언어로 작성된 core들이 있기 때문에 처리속도도 어느정도 보장해주고 있습니다. 다만 싱글스레드로 처리되기때문에 자주 문제언급이 되기도 하지만 개발방법에 따라 이를 극복하며 나아가고 있습니다.

node.js위에서 javascript로 서버개발을 하면서, 같이 사용되는 라이브러리도 셀 수 없을 정도로 많이 때문에, 이제는 javascript언어로 서버개발을 안할 이유가 없어졌습니다.

  • node.js: 이 곳에서 node.js를 각 OS별로 설치할 수 있으며, 예제코드를 통해 따라만 하면 5분안에 웹서버를 만들고, 실행할 수 있습니다.

- 모바일 애플리케이션 (iOS, Android)



하이브리드라는 단어가 요즘 많이 듣고 계실겁니다. IT쪽 모바일에서 하이브리드앱이라는 말이 있고, 이는 웹과 네이티브앱을 적절하게 섞어서 빠른속도로 비슷하게 모든 모바일플랫폼의 결과물을 말하고 있습니다.
iOS는 Objective-c, swift언어를 이용하여 개발하고, Android는 Java, Scala, Kotlin언어를 이용해서 개발하고 있습니다. 하지만 javascript를 이용하여 iOS, Android, 그 외의 모바일플랫폼개발이 가능하다면?. 네 맞습니다. 안할 이유가 없습니다. core가 따로 있고, 그 위에 javascript로 작성하여 여러가지 모바일플랫폼으로 앱들을 제작할 수 있습니다.

하이브리드앱을 개발할 수 있는 서비스들이 많이 존재하고 있고, 여러가지 중에서 마음에 드는 것을 선택하여 시작하시면 됩니다. 대표적인 서비스들 몇개를 알려드리도록 하겠습니다.

  • appcelerator: 과거에는 titanium studio라고 불렸던 것 같은데, 지금은 서비스명이 변경된 것 같습니다. 하이브리드앱 개발관련 서비스들 중에서 제가 알기론 가장 오래된 서비스로 알고 있으니, 안정성은 어느정도 보장되어 있는 것 같습니다.
  • phonegap: 기존에 하이브리드앱들을 사용하고 계신다면, phonegap으로 만든 앱일 확률이 가장 높을 것 같습니다. 그만큼 대중화 되어 있는 서비스입니다.
  • ionic: phonegap이후로 갑자기 뜨고 있는 서비스로 요즘은 ionic으로 많은 앱들을 개발하는 것으로 주변을 통해 많이 듣고 있습니다.
  • react-native: front-end에서 react가 많이 유명한데, react기반으로 하이브리드앱을 개발할 수 있습니다. react의 기본스타일을 적용하고 있기 때문에, 기존 react로 개발을 해보셨던 분이라면 쉽게 적응할 수 있을 것이고, 결과물도 만족스러울 것이라고 생각됩니다.

- PC Program (Windows, MacOS, Linux)



각 PC OS들의 특성이 너무나도 다르기 때문에 이부분은 각각 맞는 언어로 개발할 수 밖에 없었습니다. 그러나 이제는 이 부분도 javascript를 통해 3개의 PC플랫폼을 개발할 수 있습니다. 과거 조용하게 시작했던 node-webkit이 있었는데, 어느순간엔가 electron으로 옮겨갔고, 지금은 많은 PC서비스들이 electron으로 개발되고 있습니다. 국내 스타트업들의 PC서비스도 electron으로 개발되어져서 배포되는 서비스들이 많이 있습니다.

electron의 장점이 PC버전 스타일대로 개발도 가능하며, 이 것도 귀찮다면 기존에 만들었던 웹서비스를 통째로 얹을 수도 있습니다.

  • electron: 오픈소스로 운영되고 있으며, 개발에 참여하기 위해 코드추가요청을 하면 답변/처리가 바로 진행되서, electron메인개발자가 잠을 안잔다는 소문도 있을 정도로 업데이트가 활발하게 진행되고 있습니다.

- DataBase (MongoDB, Realm)



IT쪽 개발관련업무를 하고 계신다면 JSON이라는 단어는 많이 들어보셨을 겁니다. JSONJava Script Object Notation의 약자로 자바스크립의 데이터형태를 그대로 사용하고 있습니다.

    var jsonObject = {
        name : 'jin',
        hello : 'world'
    }

바로 이러한 형태로 말이죠.

데이터형식이 단순하면서도 직관적이기 때문에 데이터전달용으로 많이 쓰이는데, 큰데이터를 저장하기위한 DataBase용도로도 사용되고 있습니다.
대표적으로 DocumentDB라고 불리는 MongoDB가 있는데, 정보를 전달받기 위해 질의를 요청하면 응답형태가 JSON형태로 옵니다. 질의 조차도 javascript문법을 이용하고 있습니다. 기존 타 DB를 이용하게 되면 질의를 요청하기 위해 SQL문법을 새로 학습을 해야하는데, 이러한 부분에서 javascript는 장점을 가지고 있습니다.
최근 node.js에서 Realm을 사용하는 방법의 대해서 몇몇 포스팅을 볼 수 있는데요. Realm은 모바일데이터베이스로 각 데이터들을 오브젝트 단위로 관리하는 플랫폼입니다.
node.js에서 Realm을 활용하여 데이터들을 관리할 수 있는데, 다른 언어를 학습할 필요없이 javasciprt를 이용하여 쉽게 사용이 가능합니다. (Realm core에서는 많은 일을 하겠지만요)
SQL을 당장 배우는데 고민하고 계시다면 javascript로 먼저 쉽게 배울 수 있는 DB들을 활용하는 것은 어떨까요?

  • MongoDB: javascript언어의 인기가 오르면서 같이 유명해진 케이스인 것 같습니다. 초기에 운영하기 쉬워서 어렵지않게 시작할 수 있는 DB입니다.
  • Realm: 모바일쪽은 이미 Realm을 다 사용한다고 해도 될 정도로 많은 곳에서 사용하고 있습니다. 모바일개발을 이미하고 계시면서 간단하게 서버쪽을 진행하거나 node.js를 활용하여 데이터를 조작하고 저장해야한다면 Realm을 사용해보는 것도 하나의 방법이라고 생각합니다.

- IoT (사물인터넷)



초소형 컴퓨터라고 불리는 라즈베리파이라고 뉴스에서 가끔씩 보셨을 것 같습니다. 라즈베리파이에 리눅스OS, node.js를 설치하고 나면 사물통신이 가능해집니다. 예를 들어 집에 전등을 킨다거나, 보일러를 작동한다거나 등등 라즈베리파이에 각 센서들을 연결하고 동작할 수 있는 javascript코드만 작성한다면 쉽게 재미있는 것들을 만들어볼 수 있습니다.

  • 라즈베리파이: 손바닥보다도 작은 PC라고 생각하시면 될 것 같고, 이 속에서 많은 것들을 구현하고, 수행할 수 있습니다.

- VR/AR



저 위에 설명했던 수많은 것들을 javascript언어를 통해 다룰 수 있는데, 그 것도 모잘라서 이제는 VR까지 개발할 수 있다고 합니다.
이미 웹페이지를 통해 VR을 개발하는 오픈소스들은 여러 곳에서 활발하게 활동중이며, 각 VR/AR기기들이 활성화된다면 모바일쪽 하이브리드앱개발처럼 core위에 javascript가 동작하는 형식으로 VR/AR도 쉽게 개발할 수 있는 시대가 머지않아 올 것 같습니다.

무언가를 만들어보고 싶다면 javascript로!



javascript로 IT관련하여 정말 불가능한 것이 없을 정도로 너무나도 많은 것들을 만들어내고, 수행할 수 있습니다. javascript를 처음에 시작하는 것도 결코 어렵지 않습니다. 아주 작은 흥미만 있으면 됩니다. 꼭 개발자가 아니더라도 취미로 시작해보는건 어떨까요? 내가 무언가를 증명하기 위해, 나의 생각에 있는 것을 눈으로 보기위해서라면 javascript는 꽤나 재미있는 언어인 것 같습니다.

Sort:  

글 감사합니다. 개발자 태그로 #kr-dev 태그를 추가해주시면 더 많은 분들이 보실 수 있을것 같습니다.

아하! 그렇군요! 테스겸 제가 운영즁인 블로그 포스트를 옮겨와봤는데 여기도 활발하게 활동하나보네요! 감사합니다 : )