아주 오래전부터 있던 개념이지만 클라우드와 함께 MSA 가 뜨거워지자 그 다음 단계로 Serverless 가 등장했다. Rest API 처리나 어차피 평소에 할일없이 빈둥거리는 서버를 없애고 인스턴스 내부에서 소소한 역할을 수행하던 것들을 함수처럼 클라우드에 등록해놓고 필요할 때 적절한 이벤트 트리거를 걸어 사용하는 방식이 람다에 대한 짧지 않은 소개가 되겠다. AWS lambda 는 GCP 에서는 Cloud Function 이라는 이름으로 존재하는 기능이다. 아무튼 여기서 람다에 대해 살펴보고 작은 모듈을 등록해서 사용까지 해보도록 하자. 우선 AWS console 에 접속해서 lambda 서비스를 검색하도록 하자. 검색후 서비스에 진입하게 되면 EC2 나 다른 서비스와 다르게 다소 심플한 메뉴로 구성..
지난번에 npm 과 pm2 에 대해서 살펴봤는데 이번에는 nvm 에 대해서 알아보도록 하자. 우리가 오픈소스를 개발한다면 readme 에 당연히 노드의 버전을 명시한다. 그리고 해당 오픈소스를 사용하려는 사용자는 (가급적) 명시된 노드 버전에 맞춰서 프로젝트를 돌려볼텐데 내가 설치한 버전과 상이한 버전의 노드를 실행시키기 위해서는 어떻게 해야 할까? 노드를 지우고 새로 설치? 혹은 파이썬의 virtualenv 와 같은 가상 환경이 존재할까? 아니, 그럴필요가 없다. 여기 노드 버전을 매니징 할 수 있는 nvm ( Node Version Manager )이 있다. ( 노드 공식 프로그램은 아니고 개인이 만든 프로그램인데 사실상 공식처럼 사용한다 )nvm 을 통해 우리는 다양한 노드 버전을 한 개의 시스템에..
노드의 강점은 그 홈페이지에서 찾아볼 수 있는데 아래와 같이 정의되어 있다.Node.js 는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다.하지만 이 강력함으로 인해 개발자는 곤욕을 치루게 되는데 그 중 하나가 콜백지옥이다. 콜백지옥이 발생하는 근본적인 이유는 노드의 비동기를 해결하고자 할 때 중첩 콜백이 이어지기 때문인데 왜 콜백을 중첩해서 사용해야 할까? 이 문제에 대해 나는 "우리 개발자 뇌가 아직 동기적으로 코드를 이해하려고 하기 때문" 이라고 이야기한다. 노드를 더 깊게 잘 이해하려면 비동기에 대한 이해를 높이고 중첩 콜백을 풀어야겠다. 각설하고 노드는 비동기에 특화되어 있는 플랫폼이다보니 무조건 동기적으로 처리해야만 하는 코드를 풀어내야 할 때 난항을 겪게 된다. 예를들어 ..
Google Kubernetes Engine (GKE) 관련해서 앞서 2개의 글을 통해 대략적인 이해를 할 수 있었을 것으로 예상된다. 이번 포스팅에서는 더 깊은 이해를 위해 터미널을 통해 실제 앱을 kubernetes 로 배포하고 업데이트를 진행 해보자. 이 예제의 내용은 qwiklabs - Hello Node Kubernetes 를 통해서도 확인할 수 있다. 아래 예제는 모두 클라우드 셸에서 진행한 것이지만 구글 클라우드 SDK 가 설치된 다른 환경에서 진행하더라도 무리는 없다.Node.js 애플리케이션 생성우선 실습에서 사용하는 간단한 Node.js 앱을 작성해보자. 코드는 아래와 같다. // server.js var http = require('http'); var handleRequest = f..
Qwiklabs 플랫폼을 통해 이수받은 과정의 징표(배지)를 링크드인에 등록하는 방법에 대해서 알아보도록 한다. 우선 한 개 코스를 모두 완주하게 되면 My Learning 에 이수한 항목을 확인할 수 있게 된다. 여기에서는 GCP Essentials 코스를 예로 들어볼텐데 좌측 메뉴중 두번째 항목인 My Learning 으로 들어가서 우측 상단에 보이는 View Public Profile 을 클릭하도록 한다. - 우선 내가 취득한 정보를 외부에서 열람할 수 있도록 공개 프로필을 설정하는 과정이다. 이 과정이 선행되어야 링크드인에서 자격정보를 확인할 수 있다.View Public Profile 을 클릭하면 아래와 같은 확인 팝업창이 노출된다. 나중에 필요 없어지면 이 페이지에서 삭제할 수 있으니 과감하게..
firebase 는 우리의 애플리케이션에 다양한 로그인 방식을 간편하게 붙일 수 있도록 돕는다. 보편적으로 많이 사용하는 이메일 주소를 통한 로그인이나 제휴 ID 제공업체를 통해 로그인하는 방법을 예로 들 수 있는데 아래 화면처럼 다양한 방식을 제공한다. 애플리케이션에 로그인을 붙이기 위해서는 이중에서 사용하고자 하는 제공업체를 선택해서 사용 설정만 ON 해주면 끝이다. 여기 예제에서는 Google 로그인을 사용해보도록 한다. 사용 설정을 활성화 했으면 이제 코드로 구현을 해야 할 텐데 그 예제 샘플은 아래 링크에서 모두 확인이 가능하다. 거의 복사&붙여넣기만 하면 바로 사용할 수 있는 수준이다. https://firebase.google.com/docs/auth/?hl=ko firebase 의 모든 기..
firebase 는 실시간 데이터베이스와 Cloud Firestore 두 가지 타입의 저장소를 제공한다. 현재 (18.04.14) 기준으로 firestore 는 베타 기간이고 공식 문서에 따르면 아직 안정성은 실시간 데이터베이스에 비해 떨어질 수 있다고 하니 상용으로 운영할 생각이라면 여러가지 상황을 고려해야겠다. 하지만 그 강력함을 보면 사용하지 않을 이유가 있을까 싶다.일단 두 종류의 데이터베이스에 대한 비교는 아래 페이지를 통해 확실하게 알 수 있다. https://firebase.google.com/docs/firestore/rtdb-vs-firestore?hl=ko여기서 우리는 node.js 기반으로 firestore 를 사용해 보도록 한다. 우선 firebase 에서 제공되는 데이터베이스는 모..
앱/웹 애플리케이션을 만들 때 우리가 애플리케이션 기능 개발에만 집중할 수 있도록 인증/저장소/분석 등 백엔드의 부가적인 것들을 몽땅 처리해주는 파이어베이스 (Firebase) 서비스를 시작해보자. 파이어베이스는 클라우드 데이터베이스로 시작해서 2014년 구글에 인수되었다. 단순히 구글의 인수 사실만 보더라도 얼마나 대단한 플랫폼인지 가늠할 수 있다. 더욱이 우리가 한참 공부하고 있는 Google Cloud Platform (GCP) 위에서 돌고 있는 서비스인만큼 연동도 손쉽기 때문에 여러가지 다양한 용도로 사용이 기대된다.바로 firebase.google.com 로 접속해서 내용을 살펴보면 되겠다. 주소로 접속하면 아래와 같은 화면을 볼 수 있다. 시작하기 버튼을 통해 접근해보자.구글 계정으로 로그인해..
Vue.js 로 웹 개발을 시작한지 한달 남짓. 뷰스러운 것 보다는 오히려 html, css, javascript 가 발목을 잡는다. 이래서 어느 분야던지 기초가 중요하다고 하는거다. 애초에 웹 개발쪽은 쳐다본 적도 없으니 그럴 수 밖에 없지. 아무튼 고작 한달 했다고 쓸데없이 자신감만 생겨서는 우연히 알게된 좋은 플랫폼을 개인 프로젝트로 흉내내고 싶은 욕심이 생겼다. (사내 세미나를 통해 알게 됨)플랫폼은 비교적 간단하다. 용도는 콘퍼런스장에서 Q&A 시간에 질문을 받고 Timeline 을 보여준다. 좋은 질문이라고 생각되면 누구나 해당 질문에 upvote 를 할 수 있다. 익명으로 질문을 포스팅 하거나 닉네임을 적을 수도 있다. 그리고 타임라인을 여러가지 방식으로 정렬할 수 있다. 예를들면 시간, u..
화면에서 select box 가 선택될 때 클릭 이벤트를 받고 이때 v-model 값을 통해 무언가를 해야하는 경우가 생겼다. 심플하게는 아래와 같은 코드 모양새가 되겠다. {{ type }} Changed 함수를 살펴보면 다음과 같다. Changed() { if ( this.selected == "pig" ) this.type = "animal"; if ( this.selectd == "apple" ) this.type = "fruit"; }코드상으로 의도는 select box 에서 pig 를 선택하는 경우 화면에 pig 는 animal 이라고 표현하려고 한다. 혹은 apple 를 선택하면 fruit 로 표기한다. 하지만 놀랍게도(!) 코드는 의도와 반대로 동작한다. 왜냐하면 click 이벤트는 v-m..
Node.js 를 시작하면서 제일 먼저, 혹은 많이 듣게 되는 이야기가 콜백지옥이다. 그런 상태로 노드를 접하고 사용하기 시작하니 혼란을 부르는 부분이 있는데 이번에 콜백(callback)을 대해 정리를 하는 시간을 갖도록 해본다. 언어든 기술이든 기초가 중요하고 기초를 탄탄히 하면 콜백지옥에서 어느순간 자연스럽게 벗어날 수 있지 않을까? 노드(정확히는 자바스크립트)에서 함수는 일급 객체로 취급된다. 위키백과를 참고하면 일급 객체가 되기 위해서는 아래 조건이 충족되어야 한다.변수나 데이터 구조안에 담을 수 있다.파라미터로 전달 할 수 있다.반환값(return value)으로 사용할 수 있다.할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.동적으로 프로퍼티 할당이 가능하다.이 말을 이해하기 위해서 아..
pm2 에서 관리되는 모듈은 대부분이 데몬 형태이고 각각은 메모리에 항상 상주해야 하는 서비스일 것이다. 운영중에 죽는 모듈은 pm2 에 의해서 자동으로 재시작되겠지만 시스템이 재부팅된다면 어떨까? 당연히 답은 No 다. 아직 우리는 pm2 에게 그런 일을 시키지 않았으니까.리눅스의 부팅 시스템 init.d 같은 곳에 스크립트를 만들어 넣는 등의 방법으로 부팅시에 우리 모듈을 시작시킬 수 있다. 하지만 이런 귀찮은 절차를 이미 pm2 에서는 자동으로 제공해주고 있다. 옵션 하나만 입력하면 된다. 바로 아래서 살펴보도록 하자. 시스템에는 우리의 모듈 server 가 돌고 있는 상황이다.현재 돌고 있는 서비스에 대해서 부팅 시스템에 등록하는 방법은 매우 간단하다. pm2 에 startup 옵션을 넘겨주면 된..
Google Cloud Platform (GCP) 를 현업에서 이용하는 케이스가 아니면 대부분 퍼블릭 클라우드를 공부하는 목적으로 이용하는 경우가 많을 것이다. 이 경우에는 1년동안 사용할 수 있는 $300 크레딧으로 클라우드를 충분히 즐길 수 있다. 1년이 지난다고 계정이 (유료로) 자동 전환되지 않기 때문에 필요 시에 유료 계정으로 전환해줘야 한다. 그대로 방치하는 경우에는 사용하던 모든 기능이 잠기기 때문에 아차하는 순간 소중한 데이터를 놓칠 수 있게 된다. 또한 1년이 지날 때 공식적으로는 유로로 자동 전환이 되지 않는다고 되어 있지만 아주 간혹 청구되는 경우가 있을 수 있다고 한다. - 고객센터에 연결해서 이런저런 과정을 거치면 환급받을 수 있겠지만 여간 귀찮은 일이 아닐 수 없겠다.아무튼 이런..
노드를 더 우아하게 해주는 주변 프로그램인 npm 을 이해하도록 해보자. npm 은 Node.js Package Manager 로 단어 그대로 패키지 관리를 돕는다. 언뜻보면 python 의 pip 와 그 형상이 비슷해보이기도 한다. 하지만 npm 은 pip 처럼 패키지를 설치하는 기능을 포함하는 것으로 이해하는게 맞다. 이 장황한 이야기를 풀어내기 위해 API 서버를 노드 프로그램으로 만들어가며 이야기 하도록 하자. 우선 노드 프로젝트를 시작할 때 server.js 부터 만드는게 아니라 npm 을 이용해서 프로젝트를 생성한다. $ npm init 이렇게하면 몇가지 문답을 거친후 디렉터리에 package.json 파일이 생성된다. 대략 가볍게 훑어보고 적당한 값을 입력하자. 빈 값으로 엔터를 입력하게되면..
이번에는 노드를 더 우아하게 사용할 수 있도록 돕는 PM2 에 대해 이야기를 해본다. PM2 는 Process Manager 의 약자로 이미 단어에서 모든게 설명 되는데 노드 프로세스를 관리해주는 역할을 한다. 아래에서 간단한 노드 프로그램을 기반으로 PM2 를 차근차근 이해하도록 하자. 보통 서버에 데몬 형태의 application 을 개발하게 되면 여러가지 것들을 신경써야 했다. 이를테면 application 에서 남기는 로그에 대한 처리( filesystem 을 이용해서 남기는 방법, 날짜 포함, rotate, etc ), 프로세스가 죽었을 때에 대한 처리( restart ), 부팅시에 자동 실행 등 무수히 많은 것들이 있다. 이런 귀찮은 것들을 몽땅 관리해주는 프로세스가 있다면 얼마나 편할까? (..
crontab 은 어떤 주기적인 처리를 꽤 영리하게 도와주는 Linux 시스템에 없어서는 안될 스케줄러이다. 특정시간에 파일시스템을 정리한다던가 주기적으로 알람을 발송한다던가 또는 시스템 자원을 모니터링한다던가 등등 많은 활용분야가 있겠다.이렇게 편한 크론탭을 사용할 때 잊어서는 안되는 중요한 사실이 있다. 바로 스케줄러에 의해 실행되는 job 은 [cron] 권한으로 실행된다는 점인데 그렇기 때문에 우리는 아래 두가지 사항을 항상 체크해야 한다.스케줄링 하려는 명령어의 PATH (환경변수)가 cron 에게 있는지.스케줄링 하려는 명령어를 cron 이 실행시킬 수 있는지 ( = 권한이 있는지 )첫번째 내용의 경우에는 그냥 습관처럼 명령어의 절대경로를 써주면 해결된다. 극단적인 예를들어 리눅스의 date ..
Redis 데이터 타입에 대한 글은 인터넷에 널리고 널렸다. 당장 그 이론을 한번 더 언급하는 것은 괜한 비용 낭비로 생각되니 실전 운영에 필요한 기초 예제 몇 가지를 공유해본다. 이번 글에서는 List 와 Hash 에 대해 집중적으로 다룬다.List리스트 형태로 데이터를 관리할 때 용이하게 사용되는 데이터 타입이다. 데이터는 LPUSH, RPUSH 로 적재하고 LPOP, RPOP 으로 꺼낼 수 있다. 한편 조회는 LRANGE, LLEN 을 사용한다. 아래에서 데이터를 확인하며 구체적으로 알아보자.이러한 리스트가 있을 때 LPUSH, LPOP 은 배열의 좌측에 있는 데이터를 제어할 수 있다. 즉, LPUSH 로 새로운 데이터 8을 넣게 되면 아래와 같이 데이터가 들어간다. 이때 LPOP 도 마찬가지로 좌..
@아래 내용은 TPU quota 가 신청되어 있어야 사용 가능한 부분입니다. 참고 하시기 바랍니다.TPU 가 일반에 공개된 것과 비슷한 시기에 Google Compute Engine (GCE) 에도 TPU 메뉴가 생성되었다. 와우, 이제 우리의 인스턴스 내에서 TensorFlow 를 통해 기계학습을 진행할 때 TPU 를 지정해서 사용할 수 있게 된 것이다. 이 부분은 CloudML 과는 전혀 상관이 없으므로 오해하지 않도록 한다. Google Cloud Platform (GCP) 의 모든 기능이 그러하듯이 Cloud TPU 도 API 사용 설정을 통해 기능을 활성화시켜야 사용할 수 있다. 기능을 활성화하면 잠시 후 아래와 같은 메뉴를 볼 수 있다. 일단 TPU 노드를 생성해보자. (빠른 시작 사용을 통해..
구글클라우드 안에서 우리는 CPU, GPU, TPU를 사용할 수 있다는 이야기를 항상 들어왔다. 이세돌 9단과 알파고의 경기때부터 TPU는 놀라운 성능을 보여줬지만 정작 일반에 공개되어 있지 않았기 때문에 기계학습을 다루는 분들께는 사실 그림의 떡이나 마찬가지였다.- 일부 기업은 별도의 신청 프로세스를 통해 이미 사용할 수 있었다. 아무튼, 그러던 TPU가 드디어 일반에 공개되었다. AutoML과 마찬가지로 다소 까다로울 수 있는 심사 과정이 있지만 사용해볼 수 있다는 사실에 많은 엔지니어가 벅차오를 것으로 기대된다. 자세한 설명은 아래 링크로 대체한다. https://cloud.google.com/tpu/ 제일 해보고 싶은 것이 TF 예제를 TPU로 돌렸을 때 K80, P100 대비 얼마나 차이나는지 ..
윈도우에 질려 리눅스로 넘어온 대부분의 사용자들이 가장 불편하게 느끼는 부분이 바로 터미널에 대한 높은 의존도일 것이다. 리눅스의 높은 진입장벽은 그렇게 만들어진다. 사실 요즘 세상이 좋아져서 리눅스도 윈도우 뺨치는 GUI 가 많이 등장했지만 우리가 리눅스를 사용하는 근본적인 이유는 시스템의 모든 것을 스마트하게 제어할 수 있는 터미널의 존재 때문이니 GUI 는 중요하지 않다. (윈도우에는 command 가 터미널의 역할을 수행한다고 할 수 있다.) 어느정도 터미널을 익숙하게 사용할 수 있게되면 그때부터는 그 매력에서 빠져나오지 못할 것이다. 터미널을 사용한다는 것은 다양한 shell 을 통해 시스템의 환경을 설정하고 조작하는 것을 의미하겠다. shell 은 시스템 제어와 모니터링을 위한 다양한 명령어를..
- Total
- Today
- Yesterday