parse.com이 없어지는건 아쉽지만, parse server는 참 좋군요.

올인원 만능짱짱 parse.com이 없어지느건 아쉽지만,
그 유산인 parse server와 JS/iOS/Android SDK 등은 참 좋네요.

특히 parse server를 로컬에서 띄워놓고 작업하는건 debug면에서 참 좋네요.
node-inspector를 이용해서 cloud code를 디버깅하는건 참 좋네요.

이걸 쓰다보니 내가 parse를 하고 있는건가 node를 하고 있는건가 살짝 해깔리긴 하지만요ㅎㅎ

parse.com에서 parse server로 옮기면서 몇가지 문제를 겪고 있는데, 하나씩 해결하고 있습니다.
크게 어렵진 않네요.

parse server는 API서버 치고는 셋팅하기 어렵지 않은 편이지만… 그래도 parse.com은 원클릭이었으니깐 아쉬움은 큽니다…
이건 nodechef를 쓰시면 해결되긴 합니다.

일을 십수년을 하면서 API서버를 여러가지를 만들고 만져봤습니다만… parse server 좋아요ㅎㅎㅎ
heroku에 얹으면 배포도 상당히 편해지구요.

db는 mlab에 얹어놓으면 메인터넌스는 신경 안써도 되구… 다만 parse.com대비 단점은 smart indexing이 안된다는 것 정도군요.

물론 heroku + mlab이 parse.com보다는 비쌉니다ㅠ_ㅠ

그래서 일단 내린 결론은 프로토타입 개발은 nodechef를 이용하고,
메인 서비스는 parse server + monggodb + Amazon S3를 쓰는게 좋네요.

이것저것 말씀드리고 싶은게 많이 쌓여가고 있습니다.
다음 meetup 때는 이걸 정리해서 공유해드리고 싶습니다.

1 Like

궁금한거 많습니다. 엄청 기대되요!

저도 얼마전에 Heroku + mLab에서 AWS(Elastic Beanstalk)로 옮겼어요. :slight_smile:

1 Like

저도 AWS EB 고려하다가… 일단 heroku로 시작해봤습니다.

mongoDB managed는 직접하세요? 저는 일단 mlab으로 하려고 하는데,
AWS에 올리고 https://www.mongodb.com/cloud/ 이걸 사용해볼까도 생각하고 있어요.

혹시 AWS에 설치하실때 문제는 없으셨는지요?
기본 설정에 있는거 쓸려니 parse-server-example 레포에 없다고 나와서 깃에서 다운받아서 설치해 봤는데…
계속 bad gateway만 뜨네요…쩝.
리젼은 어디껄 쓰셨는지요?

질문만 많네요…^^;;

네 mlab 샌드박스가 너무 느려서 직접하고 있어요. 매니징은 parse-dashboard로도 충분한데 가끔 필요할때만 커맨드라인으로 처리하고 있습니다.

처음 설정할 땐 뭔소린지 몰라서 좀 고생했는데, 좀 알고나니까 어렵진 않터라고요.
리젼은 도쿄로 설정해서 쓰고 있습니다. EB 설정하려면 S3 설정도 해야합니다. 파스서버 샘플은 사실 따로 필요하진 않아요. S3 설정하고 Nodejs 설정만 하면 됩니다.

Paser server를 이제 AWS에 세팅을 슬슬 해볼까 합니다.
관련된 글들이 많은데 혹시 많이 도움이 되었던 글이 있다면 URL 알려주시면 감사하겠습니다. ^^

타이데브에 wiki로 만들어 볼까요 ㅎㅎ

방법 자체는 github의 parse-server-example 만 보셔도 됩니다.

S3랑 push 설정이 좀 삽질이 있었어요…

1 Like

한가지 질문있어요.
parse-sever는 class를 만들고, column 만들고, relation 설정하고 것들을 js 코드로 짜서 관리 할 수는 없나요?

질문을 다시 하자면 …
제가 궁금한 것은 parse-server로 작업하는 workflow가 궁금합니다.
모델을 정의하고 관리하고 등등을 parse-server 작업을 어떤식으로 하고 계신가요?

클래스(모델) 생성은 parse dashboard에서 gui 이용해서 하구요.
스키마 정의는 역시 dashboard에서 할 수야 있는데 안하고 막써요.
(parse dashboard 역시 parse js sdk + react로 만들어진 웹어플리케이션 입니다.)
컬럼은 저장할 때 없으면 만들어지니까요. 타입도 알아서 배정 됩니다.

포인터 타입은 컬럼에 parse 객체를 set하고 저장하면 생성됩니다.

포인터 타입은 이렇게 생겼죠.

{"__type":"Pointer","className":"Children","objectId":"BMH1J5CTaE"}

하지만 백본으로 할때는 포인터를 풀어서 위 형식에 맞게 저장해줘야해서 귀찮아서 포인터관계는 클라우드 코드에서 트리거로 처리하는 편입니다.
a. 포인터를 설정할 id 값을 설정함. (ex: UserId)
b. cloud code의 before save 트리거에서 id를 읽어서 pointer타입 변수에 저장 (ex: User)

Parse.Cloud.beforeSave("QuestionAnswer", function(request, response) {
    ...
    var UserQ = new Parse.Query(Parse.User);
    UserQ.get(request.object.get("UserId"), { useMasterKey: true }).then(function(UserM) {
        request.object.set("User", UserM);
    }
    ...
});

pase 쓰면서 가장 강력하다고 생각하는 점은 이 세가지에요.

a. array pointer include
array타입의 컬럼에 온갖 parse object를 넣어서 저장할 수 있습니다.
심지어 다른 타입의 포인터도 한 컬럼에 섞어서 넣을 수 있습니다.
그리고 불러올때 include한방이면 배열 안의 포인터와 포인터안의 포인터까지 원하는 데까지 전개해서 부를 수 있습니다.

var query = new Parse.Query("Question");
query.include("Institutes,QuestionSelections,QuestionSelections.Institutes");

b. cloud code
Parse.Cloud.run으로 실행 시킬 수 있는 server side 로직을 구현할 수 있습니다.
parse js sdk를 기반으로 작성되는 코드라 앱에서 js sdk로 작성한 코드와 연결해서 작성할 수 있습니다. 쉽게 옮길 수도 있구요.

c. array contained in search
array contained in array, single-value containedIn array, array containedIn single-value 등 쿼리의 편의성이 뛰어납니다.
이게 사실 mongo db 쿼리로도 가능하긴 하지만 이걸 만들려면 대단히 힘든데, parse는 참 잘 정리되어 있죠.

1 Like

네 제가 궁금했던 내용들에 대해 자세히 설명해 주셔서 정말 감사해요!

하트 백만개 발사~!!
(:heart: :heart: :heart: :heart: :heart: :heart: :heart: :heart: :heart: :heart: )*10,00,000

1 Like

parse in titanium 자료를 좀 만들어 봐야 하는데 말이죵 ㅎㅎ

parse가 mongo db 베이스다 보니 스키마나 릴레이션 고민 없이 막 만들수 있어서 참 좋네요.

1 Like