OpenShift Online이라는 서비스입니다. 레드햇 리눅스로 유명한 레드햇이 만든 서비스입니다. 레드햇 하니까 믿음이 가네요.


https://www.openshift.com/


- OpenShift란?

오픈쉬프트는 PaaS입니다. 뭐 IaaS, PaaS, SaaS 이런거 겁나 많이 나오는 단어이긴 한데, 쉽게 말하면 전부 클라우드 서비스 같은거라고 보면 돼요. 

IaaS는 인프라를 서비스처럼 쓰는거라 클라우드서버 임대를 말하구요(최근 디지털 오션이나 아마존 EC2 같은 서비스죠), 

PaaS는 Heroku나 Google AppEngine같은 서비스를 말해요. 서버 셋팅이나 하드웨어 없이 플랫폼만 제공받는 것이지요. php, ruby, nodejs로 개발한 것, 설치형 블로그 워드프레스 같은 것도 그대로 올려서 서비스 할 수 있습니다.

SaaS는 서비스를 임대해서 쓰는 것이죠. 구글 앱스같은 것을 얘기하죠. 기업들이 이메일이나 오피스 같은 것을 직접 구축하고 구매하려면 돈이 많이 드는데, 구글앱스를 이용하면 일정 금액을 지불하고 사용할 수 있는 것이지요.

뭐 위에서 얘기하는 것은 그냥 개념적인 얘기긴 하죠. 그래서 사실 몰라도 됨-_- 암튼 서론이 너무 길었는데, OpenShift는 원하는 언어로 개발한 애플리케이션 서버를 그대로 올려서(일단 개발한 것만 올리긴 할겁니다만, 워드프레스 같은 서비스도 올릴 수 있어요), 웹서비스를 할 수 있는 호스팅 서비스입니다.


- OpenShift 종류

아 종류가 있는데, 사실 오픈쉬프트는 오픈 소스이기 때문에 서버 장비가 있다면 설치해서 사용할 수 있습니다. 그래서 회사에서 사용할 Enterprise버전과 Origin버전이 있는데 차이는 잘 모르겠...

그리고 이제 제가 리뷰해볼 Online버전이 있는데, 이건 설치를 해서 쓰는 게 아니라 말그대로 Online입니다. 레드햇에서 제공하는 서비스입니다. 일단 무료로 3개 애플리케이션을 만들 수 있으며, 장비 용량이나 사용량에 따라 과금을 부과하는 등 유료화 모델을 사용하고 있습니다.


- OpenShift 간단하게 맛보기

1. OpenShift Online 회원가입

가입은 사이트 상단에 SIGN UP으로 하면 됩니다. 이메일 입력하고, 비밀번호 입력하고, 스팸봇방지 문자입력하면 가입 끗. 후에 이메일로 인증메일이 오는데, 클릭해서 인증완료 하면 완전 끗.

2. 애플리케이션 생성

로그인 하고 들어가면 뭐 하나 만들라고 나옵니다. 

"지금 너의 첫번째 애플리케이션을 생성하라"를 선택하면요. 정말 다양한 애플리케이션을 생성할 수 있습니다. Node.js, Ruby, PHP, Java 등을 지원하고, 워드프레스 같은 블로그툴도 CI툴인 젠킨스도 서버 설치 없이 바로 생성이 가능하게 해줍니다. 

일단 가장 쉬운 Node.js로 선택해서 해볼게요. 최초에 sshkey를 등록하지 않았다면 Yes, help me get started를 선택하면 sshkey 등록을 도와줍니다. 근데, 사실 rhc라는 gem을 설치하면 더 쉽게 sshkey를 등록할 수 있습니다. 이건 나중에...

sshkey는 ~/.ssh/id_rsa.pub파일의 내용을 그대로 붙이면 끗!

3. 소스 클론 받기

전부 ssh기반으로 하기 때문에, 소스도 git기반으로 ssh를 통해서 풀 받고 푸쉬하고 있습니다. 아래처럼 소스를 클론받고 수정하고 푸쉬하면 자동으로 웹서버에 배포 및 재시작을 해줍니다. 참 편하죠!

4. 소스 수정해서 올려보기

기본적으로 코드가 조금 있는데, 그냥 html파일만 수정해서 올려봅시다. 타이틀만 바꿔볼까요!

index.html
<title>헬로우 월드</title>

로 수정하고 커밋하고 푸쉬를 하면...!

5. 사이트 확인하기

잘 변경이 되었네요.

- 그 외에 기능

1. rhc라는 command line tool을 제공. 

osx유저라면 ruby가 기본적으로 설치가 되어있는데, 아래 gem을 설치하면 그냥 사용할 수 있습니다. 윈도우는 모름-_-

gem install rhc

이 툴을 통해서 자동으로 로컬에 있는 ssh-key를 업로드해줍니다. 최초 setup만 해주면 됩니다.

rhc setup

2. 제한적인 ssh 기능

ssh를 제공하긴 합니다. 근데 들어가서 뭐 할 수 있는 건 프로세스 킬하거나 mysql 콘솔을 접속할 수 있게 하거나, 로그를 볼 수 있는 간단한 툴을 제공합니다.

3. cron제공

오! 이거 하나만으로 heroku보다 훨씬 좋네요(사실 heroku도 크론이 있는데 플러그인 방식이라...). 이건 소스에 포함시켜서 사용할 수 있습니다.

https://developers.openshift.com/en/managing-background-jobs.html

크론은 UI에서 추가하는 방법이 없는 듯. 콘솔에서 해야합니다.

rhc cartridge add cron -a nodejs

그러면 추가가 됩니다.

보면 소스에 추가하면 됩니다. 

.openshift/cron/(minutely|hourly|daily|monthly)/awesome_job 요렇게 실행할 스크립트파일(.bash분법인듯요)을 넣으면 minutely면 매분 실행하는거고, hourly면 매시간 실행하는거고 그런식으로 되어있어요.

그래서 특정 시간에만 실행하길 원하면 bash에서 짜야한다고 문서에 나와있네요. 불편하지만, 제공하는 게 어디인지!


- 끗으로!

확실히 앱엔진이나 Heroku보다 더 많은 기능을 제공해서 편하긴 합니다만, 역시나 더욱 커스터마이징해야하는 애플리케이션이라면 이걸 쓰면 안되겠죠. 그냥 서버구축해서 하는 게 속이 더 편할 듯요.

하지만, 간단한 서비스를 하려고 하면 꽤나 좋은 서비스일 듯합니다. 제가 만드려는 서비스에는 오픈쉬프트만 써도 적당할 것 같아요. 이제 언넝 모바일앱을 만들러....

 
Posted by 머드초보
,
 

저는 Mac OSX유저입니다. 그래서 결제를 하려고 하면 맥에서 지원되지 않은 사이트들이 너무 많아서 맥에 따로 설치해놓은 Windows를 구동시킵니다. Windows는 VMWARE로 설치했는데, 무언가 결제할 때 밖에 안썼던 것 같습니다.

그런데 최근에는 스마트폰이 발전하면서 대부분 쇼핑몰이 모바일웹, 모바일앱에서 결제를 쉽게 지원하고 있습니다. 그래서 최근에는 Windows를 구동할 일이 별로 없었죠. 연말정산 때문에 켠 것 빼고는 없었네요...망할 연말정산....ㅠㅠ

그리고 저는 주로 사용하는 카드가 롯데카드와 신한카드인데요. 롯데카드와 신한카드는 앱카드라는 것이 있어서 스마트폰에 앱카드 앱을 설치한 뒤 카드등록을 하고 결제 비밀번호를 지정하면 이를 지원하는 쇼핑몰에서 결제를 클릭하면 앱카드를 실행하여 결제 비밀번호만 입력하면 결제가 되는 것입니다. 

이런 앱카드도 편하다고 생각했는데, 카드를 여러 개 쓰게 되면 앱을 여러 개 설치해야 합니다. 그리고 카드 관리가 분산되는 단점이 있으며 앱카드 별로 비밀번호를 따로 가져가야하는 점도 있습니다.

이런 단점을 해결한 것이 카카오페이입니다.

내가 써보니 이거슨 완전 장점 리스트!

1. 별도의 앱을 설치하지 않아도 된다!

사실 앱을 하나 설치해야 하긴 해야합니다. 그거슨 바로 카카오톡!-_- 국민앱이기 때문에! 모든 스마트폰에 설치가 되어있기 때문에! 그냥 별도 앱을 설치하지 않아도 얘기합니다. 보시다시피 더보기에 카카오페이가 대놓고 나와있습니다. 

아이콘 겁나 잘만든 것 같음 ㅇㅇ


2. 가입이 간편하다!

카카오페이 눌러서 가입하기 누르면 신상정보입력하고 휴대폰번호 인증만 하면 가입 끗! 그리고 자신의 이름으로 된 카드만 등록이 가능하기 때문에 본인인증은 필수로 하는 것 같아요. 하긴 안하면 엄청 위험한 앱이겠죠...-_-

3. 각각 다른 회사 카드를 한 곳에 등록하여 사용할 수 있다!

롯데카드 한도를 다 채우면 신한카드 한도를 채우고 있습니다. 그래야 롯데카드에서 주유할인, 교통할인, 마트할인 받고, 신한카드에서 통신사할인을 받을 수 있어서요. 그러다보니 카드 번갈아가면서 쓰는데 이건 카드를 한 곳에 등록해놓고 결제할 때 카드를 지정해서 결제를 할 수 있어요.

아래와 같이 3개의 카드를 등록해놓고 쓰고 있어요.

카드등록은 카드정보를 전부 입력하는 방식이에요.

뒤에 뭐시기3자리는 입력안해도 되니 카드 안뒤집어도 됨 ㅇㅇ


4. 결제할 때 비밀번호만 입력하면 된다!

쇼핑몰에서 결제하기 누르고, 카카오페이 선택하면 카드선택화면이 뜨는데, 카드선택하고 비밀번호 누르면 그냥 끗! 광고처럼 잘 됩니다.


 그 외에 장점 리스트!

1. 액티브액스 없이 맥에서도 결제할 수 있음!

피씨에서도 결제를 지원합니다. 다만, 가맹점이...찾은 걸로는...알라딘서점 밖에 못봤...아래와 같이 전화번호와 생년월일을 입력받습니다. 그대로 요청하면 카톡으로 결제하기 메시지가 하나 오는데, 그걸 누르면 카카오페이를 실행해서 결제하는 구조입니다.

음...신한앱카드처럼 QR코드 찍는 게 나을 것 같기도...


2. 공인인증서 없이도 큰 금액 결제가능!

원래 30만원 이상인 결제에는 공인인증서가 필요했는데, 카카오페이는 그게 필요 없습니다. 좀 더 어려운(?) 비밀번호를 설정만 하면 큰 금액도 결제가능합니다.

3. 졸 귀여운 이모티콘 줌(~2/22까지인 듯!)

아 졸 귀여움-_-

카카오프렌즈 그린 사람 상줘야함. 겁나 잘그림 ㅇㅇ


카카오페이의 단점

1. *****가맹점이!!!!!!!!! 별로!!!!!!!!!!! 없어!!!!!!!!!!!*********

가장 큰 단점입니다. 이거하나로 그냥 모든 장점을 무마시키는...

저는 네이버에서 검색 후 가장 싼 것으로 찾아보고 사는데, 대부분 쇼핑몰이 11번가, 지마켓, 네이버체크아웃이였습니다. 그리고 소셜커머스도 매우 좋아해서 쿠팡, 티몬 등(위메프도 최근에 잘 썼는데, 해고사태를 보고 잘 안씀!)을 많이 사용하는데, 이 중 단 한 곳도 카카오페이를 지원하지 않습니다ㅠㅠ

결제를 붙이는 것이 그리 어려울 것 같지 않은데... 아무튼 언넝 저 대표적인 쇼핑몰을 지원했으면 좋겠네요. 저기 나열한 곳만 지원해도 아마 사람들이 엄청 쓸 듯.

2. 카드관리 닉네임 불변경

이건 뭐 사소한 단점인데...보안 때문에 일부러 이렇게 했을 수도 있을 것 같다는 생각도 드네요. 최초 카드등록 시 지정한 닉네임은 변경하지 못하더라구요. 변경하려면 삭제 후 다시 등록해야....사소하다.........

아.....단점이 별로 없는 것 같지만, 저기 가맹점이 없는 것만으로도 엄청난 단점이네요. 


아직은...

확실히 편한 결제서비스이긴 합니다. 언넝 대형 쇼핑몰들부터 지원했으면 좋겠네요. 일단 맥에서 결제가 되는 방식이라 좋네요(뭐 최근에는 모바일에서 전부 결제하면 다 되지만요^^). 많이 퍼졌으면 좋겠습니다. 오프라인 서비스도 준비중인 것 같던데, 아마 NFC겠죠?

 
Posted by 머드초보
,
 

최근 개인적으로 API서버를 만들 일이 있어서 뭘로 해볼까 하다가 이 놈으로 정했는데요. 일단 가볍게 써 본 결과로는 만족합니다. 기존 NodeJS에서 인기 있었던 WebFramework인 Express보다 더 맘에 드네요. 사실 요즘 MVC Framework는 다 잘 되어 있어서 어떤 걸 써도 다 만족하겠지만요.

Nodejs를 좋아하는 게 일단 웹개발을 많이 해봐서 Javascript가 좀 익숙하기도 하고, npm이라는 것이 있어서 손쉽게 설치할 수 있는 게 좋더라구요. 하지만, 콜백 지옥에 빠지면 답이 없긴함 ㄷㄷ 아직 언어를 익숙하게 잘 짜지 못하는 것이기도 하지만요ㅠ

그렇게 NodeJS용 Framework를 찾다보니 Sails라는 것을 찾게 되었네요.


http://sailsjs.org/#/


1. Sails 특징

모델과 컨트롤러 파일만 만들어도 자동으로 RestAPI를 만들어줍니다. BluePrint라는 것이 그렇게 하는 것 같은데, 처음엔 우와!!! 하는데, 사실 그대로 쓰이는 API는 거의 없죠. 나중에 분명 수정해야할 겁니다-_- 기본적인 CRUD를 코드 한 줄 없이 가능하게 해요.

ORM같은 것을 지원합니다(Waterline이라는 것!). 모델파일만 잘 작성하면 테이블도 직접 만들어줍니다. 모델 관계도 잘 지정하면 테이블끼리 외래키로 잘 연결해줍니다. 

다양한 DB를 제공하네요. MySQL, MongoDB, PostgreSQL, Redis, local disk 등을 제공하는데, 모델은 똑같이 사용이 가능한 것 같아요. 일단 저는 MySQL로 밖에 하지 않아서...

WebSocket을 쉽게 쓸 수 있어요. 그냥 프레임워크에 포함이 되어 있어요.

보안적인 면을 신경을 많이 썼더라구요. 웹은 개발하면서도 보안에 취약해지기에 마련인데, 최대한 놓치지 않으려고 많은 장치를 해놨어요. Cross-Origin Resource Sharing (CORS), Cross-site request forgery (CSRF) 등등 옵션들을 제공하고 있어요. 

커맨드라인 제너레이터도 제공을 해요. 간단히 테스트해볼 것은 console로 가능하고, 모델, 컨트롤러, API 생성기를 제공해요.

그 외에 레일즈처럼 asset compile도 하고, test도 쉽게 할 수 있으며, 웹프레임워크의 기본적인 것들인 국제화 처리, 라우터, 업로드, 뷰레이아웃 기능들을 제공하고 있습니다.


2. 또 다시 나온 소녀시대 스케줄 예제

설명하는 것보다 그냥 예제로... 간단하게 MySQL이랑 연동해서 DB데이터를 연결해서 뿌려주는 예제를 만들겠습니다. 모델도 소녀시대와 스케줄은 1:N으로 테이블 설계를 하겠습니다.

2-1. Sails설치

당근 Node.js와 npm이 설치가 되어 있다는 가정하에....(아래 링크에 참조를...)
http://sailsjs.org/#/getStarted

sails는 글로벌 옵션을 줘서 실행해서 언제 어디서든 프로젝트를 만들 수 있게 합니다.

npm install -g sails


2-2. Sails 프로젝트 생성

sails new 프로젝트명 쓰면 레일즈처럼 필요한 파일들을 미리 만들어줍니다.

sails new sosi-schedule-sails


2-3. 데이터 베이스 설정

npm으로 sails-mysql을 설치해야 합니다. package.json파일에 추가하는 게 차후에 배포할 때 좋습니다.

"dependencies": {
    .
    .
    "sails-mysql": "latest"
  }

그리고 

npm install

그러면 설치가 됩니다.

설정을 해야 하는데, config/connection.js파일을 보면 DB정보를 입력할 수 있습니다. someMysqlServer라고 되어 있는 부분이 있는데, 이걸 myMysqlServer로 바꾸죠. 내꺼니깐염. 그리고 디비정보를 입력하면 됩니다(아 내껀 MariaDB인데도 잘 되네요...).

config/connections.js

myMysqlServer: {
    adapter: 'sails-mysql',
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'sosi'
  },

그러면 기본 커넥션을 바꿔줘야하는데요. config/model.js를 열면, 기본적으로 커넥션을 어떤 것을 맺을 지 지정할 수 있습니다. 물론 모델별로 다른 커넥션을 맺을 수 있습니다. 모델별로 커넥션을 다르게 지정하면 됩니다. 일단 나는 디비가 하나니깐염.

config/models.js

module.exports.models = {
  connection: 'myMysqlServer',
  migrate: 'drop'
};

여기서 connection 이름은 우리가 지정한 내마이에스큐엘서버를 그대로 써주면 됩니다. 밑에 migrate는 뭐냐! 3가지 종류가 있는데염. 

drop: 서버를 죽였다가 다시 띄울 때마다 테이블을 다시 날려버리는 옵션입니다. 개발할 때 좋겠죠?
alter: 서버를 죽였다가 다시 띄울 때 모델에 칼럼의 변경사항을 체크해서 업데이트 해주는 옵션이고, 데이터를 살아있습니다. 이 옵션은 아직 실험적(experimental)인데요. 제가 데이터를 좀 많이 넣고 서버를 띄워보니 띄울 때마다 뭔가 알터를 하는지 서버 뜨는데 오래걸리는 현상이 발생합니다. 아직 문제가 많은 듯합니다.
safe: 서버를 죽였다가 다시 띄워도 아무것도 하지 않습니다.

적절히 골라쓰세요~


2-3. API 생성

sails는 자동으로 API를 생성해줍니다. API생성은 Model+Controller입니다. 물론 따로 생성할 수도 있습니다. API가 소녀시대 정보를 내려주는 SosiAPI와 스케줄 정보를 내려주는 ScheduleAPI를 생성합니다. 제너레이터를 이용하면 쉽게 생성할 수 있습니다. 근데 보면 사실 그냥 파일만 만들어주는거임-_-

sails generate api sosi
info: Created a new api!
sails generate api schedule
info: Created a new api! 

그러면 controllers/SosiController.js, models/Sosi.js, controllers/ScheduleController.js, models/Schedule.js가 생성이 되었습니다.

2-4. 모델 설정

모델에 attributes를 지정합니다. 여기서 One-to-Many방식으로 설정할 수 있습니다.

models/Sosi.js

module.exports = {

  attributes: {
    name: {
      type: 'string'
    },
    schedules: {
      collection: 'schedule',
      via: 'sosiId'
    }
  }
};

attributes는 말그대로 속성값(디비에서 칼럼값이지요). name이라는 속성이고 타입은 스트링임. 그리고 소녀시대는 스케줄이라는 배열을 가지게 되니 schedules로 지정하고, collection값은 스케줄, via는 sosiId(schedule의 속성값입니다)로 지정합니다. 

models/Schedule.js

module.exports = {

  attributes: {
    program: {
      type: 'string'
    },
    sosiId: {
      model: 'sosi'
    }
  }
};


2-5. 기본값 넣기 

drop방식이니까 기본적으로 서버 뜰 때 값을 넣고 시작할 수 있어요. bootstrap.js부분에 넣으면 서버가 시작할 때 실행이 되어요. 소녀시대 멤버들을 넣어볼게요.

config/bootstrap.js

Sosi.create({name: '태연'}).exec(console.log);
Sosi.create({name: '윤아'}).exec(console.log);
Sosi.create({name: '수영'}).exec(console.log);
Sosi.create({name: '효연'}).exec(console.log);
Sosi.create({name: '유리'}).exec(console.log);
Sosi.create({name: '티파니'}).exec(console.log);
Sosi.create({name: '써니'}).exec(console.log);
Sosi.create({name: '서현'}).exec(console.log);


2-6. 서버 실행

sails lift


2-7. API 잘 동작하는지 확인

기본적으로 BlueprintAPI를 제공하기 때문에 디비를 그대로 읽고 쓸 수 있는 url이 존재합니다. 

소녀시대 정보를 가져오려면 
http://localhost:1337/sosi/1 

스케줄 정보를 넣으려면 뭐 post도 되는데, get으로도 됩니다.
http://localhost:1337/schedule/create?program=무한도전&sosiId=1

다시 소녀시대 정보를 불러오면....

우오오 잘된다!

ps. 모바일앱 하나 만드려고 하는데....취약한 앱개발 공부는 안하고.....암튼, 뭐 맘에드는 프레임워크인데, 더 써봐야 알겠네요.

 
Posted by 머드초보
,