2019년 1월 21일부터 티스토리에 HTTPS 가 일괄 강제적용 된다는 소식을 들었는데 뒤늦게 관리하는 블로그의 설정을 바꾸게 됐다. ( 관련공지 : 더 안전한 티스토리를 위해 - SSL 적용 완료 ) 그리고 블로그에 별로 신경을 못쓰고 있었는데 어느날 예전글을 검색해야 할 일이 있어서 카테고리 버튼을 누르는순간 해당 메뉴가 먹통이라는 것을 깨달았다. 그 외에 관리자 페이지도 먹통. 혹시나해서 개발자 도구를 열어보니 아래와 같은 에러가 잔뜩 확인되었다.해당 내용은 블로그 도메인은 HTTPS 를 사용하고 있는데 내부적으로 HTTP 를 사용하는 곳이 있고, 보안상 취약하여 해당 메뉴가 블럭되고 있다는 것. 해결 방법은 어렵지 않다. 스킨의 HTML 에서 사용하는 HTTP -> HTTPS 로만 변경해주면 된..
slack 에는 다양한 투표 기능이 있는데 대표적으로 simple-poll, polly 등이 있다. 하지만 이런 투표기능이 있는 명령어가 무조건적으로 무료는 아니다. polly 같은 경우에는 한달간 베타 버전처럼 사용할 수 있고 그 이후에는 비용을 지불해야 하며, simple-poll 은 일정 횟수 이상을 초과해서 사용하게 되면 비지니스로 업그레이드 해서 사용할 것을 권고한다.아래는 simple-poll 로부터 발생되는 비지니스 업그레이드 권고 메시지.warning: Remember to upgrade to Simple Poll Business before December 11thAs one of Simple Poll's most active workspaces, we were delighted to g..
개인 프로젝트를 고민하다가 예전부터 미루어 왔던 AI 스피커 만들기를 시작합니다. 프로젝트의 요구사항은 간단합니다. 사용자의 음성을 인식하고 의도를 파악한 후에 상황에 맞는 답변을 스피커로 출력합니다. 가벼운 요구사항이지만 내부적으로는 아래와 같은 기술을 필요로 합니다.- 사용자의 음성을 인식 ( Speech to Text ) - 변환된 Text 를 구문 분석 ( Natural Language Processing ) - 분석된 내용을 토대로 답변을 음성 출력 ( Text to Speech )일단 당장은 머신러닝에 대한 배경지식이 부족하기 때문에 세 가지 모두 쉬운 과제는 아닙니다. 그래서 고민끝에 우선 Speech to Text( STT), Text to Speech( TTS) 는 Google Cloud..
리액트와 함께 인기를 더해가는 vue.js 사용을 위한 기본 설치 과정을 설명하도록 한다. 우선 기본이 되는 vue 설치를 위해서는 아래와 같이 npm 명령어를 사용하도록 한다. $ npm install vue npm WARN saveError ENOENT: no such file or directory, open '/Users/caley/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/Users/caley/package.json' npm WARN caley No descriptio..
남들 다 사용하는 CI/CD 대세 jenkins 를 docker 버전으로 설치해보자. docker 버전으로 설치하는 것에 별 다른건 없다. 서버에서 docker 를 사용할 수 있다는 가정하에 아래 명령어 두 줄이면 끝이다. $ docker pull jenkins/jenkins $ docker run -p 8080:8080 jenkins/jenkins:ltsjenkins 가 최초에 올라오면서 여러가지를 초기화 하고 아래처럼 초기 비밀번호를 콘솔에 출력해준다. 이 비밀번호를 복사하고 GUI 를 실행하도록 하자. ( localhost:8080 ) 아래와 같은 화면에서 비밀번호를 입력할 수 있다. 혹시 콘솔로그를 확인하지 못했다면 /var/jenkins_home/secrets/initialAdminPasswor..
logrotate 는 특정 파일을 일정 시점, 크기 등 지정된 조건에 따라서 백업해주는 명령어이다. 주로 시간이 지남에 따라 한 없이 커질 수 있는 로그파일을 logrotate 를 통해 주기적으로 백업하는데 이용된다. 예를들어 system.log 라는 파일이 매일 1 GB 씩 내용이 누적된다고 하면 한달이면 벌써 30 GB 가 되버리고 그 파일 자체를 핸들링하는게 매우 어렵게 된다 ( 파일 안에서 특정 단어를 검색한다던지 ). 이럴 때 logrotate 를 통해 매일 지정된 시간에 system.log.1.gz, system.log.2.gz, system.log.3.gz... 으로 자동 백업하거나 파일 크기가 일정 사이즈 이상 되었을 때 분할 할 수 있다.우선 logrotate 는 심플한 소개가 달려있다...
쿼리를 날리고 설정된 타임아웃에 의해 Lost connection to MySQL server during query 에러가 출력되는 경우 워크벤치에 아래 설정을 통해 쉽게 해결 할 수 있다. Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 600 괜히 DB 타임아웃 설정 값을 바꾸려고 애쓰지 말자. 사실 어차피 내부적으로는 로컬 타임아웃을 건드리고 있겠지만. :-)
vim 에서 개발을 하다보면 여러줄에 걸쳐 동일한 메시지를 입력해야 하는 경우가 한번씩 있다. 그게 주석처리 문자( // )일 수도 있고, 혹은 메시지 추가일 수도 있는에 아래에서 그 방법을 살펴보도록 하자.우선 기본적으로 블럭 지정을 할 수 있어야 한다. 멀티라인에 커맨드를 날리기 위해서는 Ctrl + v 로 멀티라인 커맨드를 적용할 블럭을 지정하고, Shift + i 로 vim 을 편집모드로 만든다. 그리고 수정 하려는 문구를 추가하고 ESC 를 두 번 눌러주시면 된다. 필요하면 아래 영상도 참고해보도록 하자. 참 쉽다. :-) 멀티라인에 탭 같은 공백을 넣을 때는 아래 방법이 더 편하다.- { ... } 블록 시작이나 끝에서 >% - 숫자 + '>>'
지난번 글( 서버리스 Cloud Functions 사용하기 ) 에서 Cloud Functions 의 전반적인 내용에 대해서 훑어보았다. 작은 모듈 단위의 프로그램을 서버 구동 없이( 엄밀하게는 사용자가 신경 쓸 필요 없는 / 신경 쓸 수 없는 ) 사용할 수 있는 서버리스의 장점에 대해서 이야기를 했었는데 이번에는 그 한계에 대해 잠시 살펴보고 비판해보도록 하자. 이렇게 비판하는 정보를 공유하는 이유는 한계를 모르는 상태로 Serverless 서비스를 운영하는 것은 매우 위험하다고 생각하고 있기 때문이다.Google Cloud Functions 은 Serverless 의 역할을 충실히 수행하며 작은 모듈 단위를 클라우드 위에서 동작 시키는데, 타사의 FaaS 대비해서 무엇이 좀 많이 부족하다. 그렇기 때문..
이번에는 Cloud Functions 에 대해서 살펴보는 시간을 갖도록 한다. 기능은 단어 그대로 클라우드 위에 함수를 등록하고 트리거 ( Trigger )를 걸고 사용하는 개념이 되겠다. 쉽게 이야기해서 이벤트가 발생되면 등록해놓은 함수가 동작하는 방식이겠다. 이제 더 이상 작은 모듈을 위해 GCE 를 운영할 필요가 없겠다. Cloud Functions 은 서버리스로 동작하니까. AWS 에서는 Lambda 가 같은 개념이 되겠다. 아무튼, 서비스목록에서 Cloud Functions 를 선택해서 기능을 직접 사용해보도록 하자. 한국어로 봤을 때는 "Cloud 기능" 을 확인하면 된다. ( 근데 왜 아직도 베타인지? 는 아래쪽에서 추측해보도록 하자. )Cloud Functions 메뉴에 최초 진입시에는 A..
개인적인 업무 자동화를 위해 GCE 위에 python crawler 를 하나 개발하고 있는데 이게 영 잘 안되는거다. 처음에는 selenium 을 잘못 사용했나 싶기도하고 HTML 을 잘못 파싱했나 싶은 의심도 들었지만 해당 코드가 Local PC 에서는 정상적으로 동작 하는 것이 확인되었다. 무엇이 문제였을까? 문제를 확인하기 위해 에러 포인트 위치에서 아래와 같이 selenium 의 스냅샷 함수를 이용해서 페이지의 실제 화면을 확인해보았다.browser.get_screenshot_as_file('error.png') 확인결과 놀랍게도 아래와 같은 내용이 확인되었다. 왜 계정이 이렇게 되었는지는 알 수 없다. 아니면 Gmail 자체적으로 클라우드에서의 접근을 막고 있는지도 모른다. 일단 로컬에서 htt..
람다, 서버리스의 첫걸음을 통해 AWS 의 Lambda 서비스에 대해 간략하게 소개를 했다. 이번에는 조금은 더 심도 있는 이야기를 할 텐데 람다의 구조와 원리를 파악하고 자연스럽게 그 한계를 깨우치도록 하자. 내부 로직을 어느정도 이해하고 있어야 어떤 상황에 서버리스( Serverless ) 람다가 독이 되는지 알 수 있게된다. 어설프게 이해하고 사용 하다가는 독이 된다는 사실로 시작해보자.서버리스는 없다람다는 AWS 에서 서버리스를 대표하는 서비스 중 하나다. 앞선 글에서도 그렇게 밝혔고. 근데 이제와서 서버리스는 없다니 이게 무슨 소리지? 이건 클라우드로 넘어오면서 생긴 개념인데 EC2 와 같은 IaaS 는 이미 사용자에게 서버를 클라우드 상에서 제공하며 IDC 상황에서 겪었어야 했던 수 많은 작업..
아주 오래전부터 있던 개념이지만 클라우드와 함께 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 로 접속해서 내용을 살펴보면 되겠다. 주소로 접속하면 아래와 같은 화면을 볼 수 있다. 시작하기 버튼을 통해 접근해보자.구글 계정으로 로그인해..
- Total
- Today
- Yesterday