Sorcery VS Devise

Sorcery 소개

ca62lrg

얘는 소서리스에요..

Devise는 워낙 유명해서 별도의 설명이 필요 없겠지만 Sorcery의 경우 상대적으로 덜 유명해서 간략하게 소개를 먼저 해본다.

이스라엘 개발자 Noam Ben Ari(이후 NoamB)가 만든 Authentication Gem으로 2010년 10월에 첫 커밋이 나왔다.
필자는 이전까진 restful-authentication를 사용했는데 Rails 3가 출시했음에도 불구하고 대응이 늦었다.
그때 혜성처럼 나타난 게 몇 가지 있었는데 Sorcery, Devise도 그것들 중 하나였다. (지금까지 살아남은 녀석들도 아마 이 두 녀석뿐일 듯)
처음에는 Devise를 사용했었지만 RailsCasts에서 Sorcery를 소개해줬고, 이때부터 쭉 Sorcery를 사용해왔다.

NoamB 거의 혼자서 개발을 해오다시피 했고, 지금은 개인 Repository가 아닌 Sorcery의 Repository를 만들어서 관리하고 있고, NoamB는 현제 일선에서 물러나 Chase GilliamJosh Buker 이 두 사람이 Maintainers로 관리를 하고 있다.

Sorcery만 소개해주면 Devise한테 미안하니 간략히 소개하자면 SimpleForm을 만든 plataformatec이 만들고 관리하고 있다.

기능 비교

사실 처음에는 그냥 느낀 점만 간략하게 쓸려고 했는데.. 그럼 너무 성의 없어 보일까 봐 간략하게 정리해봤다.
기능 위주로 선택하려 한다면 아래 표가 도움이 되시리라

기능설명 Sorcery Devise
Authentication Core Database Authenticatable
OAuth External Omniauthable
회원가입시 메일 인증 프로세스 User Activation Confirmable
암호 리셋 프로세스(메일 전송) Reset Password Recoverable
회원가입 Core Registerable
자동 로그인 Remember Me Rememberable
로그인/아웃등 유저 행적 기록 Activity Logging Trackable
Session Timout 설정 Session Timeout Timeoutable
Validation email, password Validatable
로그인 실패 여러번시 계정 잠금 Brute Force Protection Lockable
HTTP Authentication Basic HTTP Authentication Database Authenticatable

Validation이 Sorcery에는 없지만 이건 Rails의 Validators를 이용하면 해결된다. (Rails를 아시는 분이라면 Devise가 Validation을 왜 따로 제공하는지 이해가 안가실 수도 있는데, 그건 아래에 설명하겠다)
보면 알겠지만 방법의 차이만 있을 뿐 제공하는 기능은 동일하다.
그러므로 기능의 수는 안타깝게도 무승부.

간단히 Authentication 위주로만 쓸 경우

문서 살펴보고 맘에 드시는 걸로 선택하면 된다.

57f8la

장난 아니고, 진짜에요..;;

여러 부가기능을 쓰지만 수정 안 하고 쓸 경우

Devise를 추천한다.
Devise는 Boilerplate가 아주 많이 제공되어서 여러 부가 기능을 사용할 때 편리하다.
하지만 많은 커스터마이징이 필요한 경우에는 적합하지 않다. (우리가 알고 있듯 Boilerplate는 양날의 검인데, 그 단점이 여기에도 해당된다고 보면 된다)
왜냐하면 Devise는 많은 부분들이 감추어져 있다 보니, 구현 단계에서의 수정이 쉽지 않다.
그래서 커스터마이징이 필요한 사람들을 위해 Registerable, Validatable 같은 부가기능을 통해 커스터마이징을 하도록 하고 있지만 안타깝게 이마저도 쉽지 않다.  더욱이 문서 또한 레퍼런스가 아닌 API만 제공하다 보니 실제 Usage를 알기가 어렵다.

여러 부가기능 및 커스터마이징이 필요한 경우

Sorcery를 추천한다.
Sorcery는 Boilerplate가 없다고 봐도 무방하다. 그렇기 때문에 많은 부분들을 처음부터 쌓아올려야 한다.
별도의 수정 없이 사용할 때는 이게 그렇게나 귀찮고 짜증 나지만, 반대로 커스터마이징을 많이 해야 하는 경우 이처럼 좋을 수도 없다.
기본적인 건 다 Sorcery가 제공하고 그것들을 어떻게 사용할지는 내 입맛에 맞춰서 만들 수 있으니!!

권한 관리가 필요한 경우

Devise의 막강한 기능 중 하나가 CanCan, Rolify 같은 녀석들 때문이다.
CanCan은 권한 관리 Gem으로 페이지, Row(DB의 row) 단위로도 권한 설정이 가능하다고 한다. (실 서비스에 써본 적은 없다. 사용하려고 했는데, 커스터마이징을 너무 많이 해야 해서 그냥 하나 만들어서 사용했다)
CanCan은 Object에 대한 권한 관리라면, Rolify는 역할 관리라고 보면 된다. 예를 들자면 ‘유저’, ‘관리자’, ‘스텝’ 등으로 역할별로 권한을 관리할 때 사용하는 Gem이다.
(역시 실 서비스에 써본 적은 없다. Rolify가 등장하기 전에 이런 기능이 필요해서 만들어서 쓰고 있..)

암튼 이러한 녀석들이 공식적으로 Devise에 잘 붙는다고 적혀있고, 많은 사람들이 Devise + CanCan + Rolify 이렇게 트리플 콤보세트로 사용한다.

근데 CanCan, Rolify를 써보니 어랏? 딱히 Devise와의 Dependency가 안 보인다. 즉 Sorcery에서도 사용할 수 있을 것 같긴 한데.. 나중에 시간 나면 한번 해봐야겠다.
혹 해보신 분 계시면 알려주세요~!

정리

Sorcery Devise
소상공인 기업
가난하다 부자다
Screen Shot 2018-04-04 at 11.19.22 PM Screen Shot 2018-04-04 at 11.19.09 PM
로고도 없다 부자는 다르다.
가난해서 Boiler못킨다. 돈 많아서 Boilerplate가 빵빵하다
가난해서 감출게 없다. 많은 부분들이 감추어져 있다.
그래서 커스터마이징이 쉽다. 그래서 커스터마이징이 어렵다.
github wiki가 아주 깔끔하게 정리가 되어있어서 다른 문서 볼 필요가 없다.
Boilerplate와 설명까지 다 빵빵하다.
github wiki 또한 보기 어렵게 되어있다.
공식 문서는 API만 제공되고, Usage는 찾기 힘들다.
Boilerplate가 있긴 하지만 설명도 없고, Boilerplate를 어떻게 사용해야 하는지 알려주는 문서 또한 없다.
github wiki 페이지 수가 25개로 아주 깔끔하게 되어 있다.
(내가 만들거나 기여한 페이지들도 몇 개 있..읍읍)
github wiki 페이지 수가 130개다. 역시 부자는 다르다.

Sorcery를 오랫동안 사용하기도 했고, 기여도 해서 그런지.. 나도 모르게 글 자체가 Sorcery에 조금 더 편향되게 쓰여진것긴 한데.. 사실 아주 오래전 Devise를 주제로 글을 썼었다. 그것도 2개나! (언제까지 restful-authentication을 쓸것인가! devise도 써보자!devise에서 sign_out시 서버가 기절할 경우. (Ruby Or Rails Bug인듯))
블로그 이사하면서 양식이 다 깨져서 지금은 내용을 알아보기 힘들지만, 어쨌든 썼었다!

아, 그게 중요한 게 아니고.. 흠흠
둘 다 모두 검증된 Authentication 툴이니 믿고 사용하시길

Advertisements

Contributor가 10개가 되었다.

2일전에 오픈소스에 PR을 날렸었다.
그리고 어제 저녁에 Merge가 되었다.

Screen Shot 2018-03-31 at 11.42.55 AM

며칠 전 Github 상단에 Pull Requests가 있는걸 첨 알았다.
맨날 회사 계정으로 접근하고, 회사 Repository만 접근하다보니 몰랐었다.

Screen Shot 2018-03-31 at 11.45.12 AM.png

 

Merge된 PR을 보고있다 문득 상단의 Pull Requests가 생각나서 눌러서 찬찬히 둘러보았다.
크고 유명한곳에 PR을 날린적도 있었고, 심지어 merge도 될번했던것도 2개나 있었는데 2개 모두 Owner가 남긴 코멘트를 늦게 보는 바람에 물건너가버렸다.

그렇게 하나하나 보다가.. 생각보다 Contributor로 된게 많은것 같아 세어보니..
이번에 머지된게 10번째였다!!

이때까지 오픈소스에 총 28개의 PR을 날렸었고, 3개가 오픈상태, 25개가 닫힘상태
25개의 닫힌 PR중 18개가 merged
생각보다 merged되는 확률은 높은것 같으나, 생각보다 PR수가 적어서 놀랐다.
아마 이슈를 남기는것까지 같이 생각해서 PR을 많이 날린줄 알았나보다.

이 정도면 많은건지 적은건지 모르겠지만, 개인적으론 적다고 생각하고..
앞으로 기회가 있다면 더 많은 기여를 하고싶다.

어쨋든 10번째 Contributor가 되었다.

스펙 짤때마다 유혹 당한다

해결책을 제시하는 글이 아니라, 문득 단상이 들어 그냥 생각없이 막 쓴것입니다.

 

오픈소스에 코드를 수정해서 PR 날렸다.
창피하지만 코드를 수정해서 PR날린건 실로 오랜만이다.
맨날 문서만 수정해서 PR 날렸는데..
이번엔 스펙도 같이 작업해서 PR 날렸는데 왠지 부족한것 같아 찜찜한 생각이 들었지만 딱 이 정도가 합리적이라는 생각에 그만 두었다.

솔직히 사람들에게 얘기할 수 있을 만큼 TDD, BDD등을 다양하고 깊게 해보진 않았다.
(컨퍼런스나 밋업 가면 다들 완벽하게 스펙 설정하고 개발하는것 같던데.. 부럽고 나만 도태되는듯해 자괴감에 빠진다. 지구의 모든 개발자중에 나만 스펙 짤 시간이 없나보다.)

하지만 몇 번 안되는 경험에 비춰보면, 매번 스펙을 짤때마다 느끼는건데, 어디까지 짤것인가? 이건 항상 고민이된다.
사실 이러한 고민은 처음 TDD를 시작했던 10년도 전에 했던것이고 그때 나름의 결론을 도출해냈음에도 불구하고 멍청해서 그런지 매번 할때마다 고민을 하게 된다. 아니 유혹을 당한다.
‘좀 더 안전하게 짜야지, 에이~ 그럼 이 케이스는 어떻게 검증할꺼야?’ 등의 생각들이 나를 유혹한다.

스펙을 짠다는것 자체가 ‘안전’하게 개발하기 위함이라  ‘좀 더 안전하게, 촘촘하게’ 즉 수비적인 사고로 짜게된다.
그러다보니 어느덧 나도 모르게 끝 없이 스펙의 골짜기로 빠지기 십상이다.

결국은 가이드가 있거나, 많은 경험 말고는 해결책이 없는걸까?
하긴.. 인생사 전부 마찬가지구나.

UX디자이너 채용한다지만, 실제론 UX디자이너가 채용되지 않는 상황

이미지 출처: https://www.haikudeck.com/ux-designer-art-and-design-presentation-1VktYIu7sD#slide0

디자이너 채용 공고를 쓸려고 다른 회사들은 어떻게 하고 있나 하고 살펴보니, 대다수 타이틀이 “UX/UI 디자이너”

이걸보고 들었던 단상들

– UX 디자이너의 의미가 UX까지 가능한(즉 섭렵한) 디자이너일텐데
기업은 정말로 UX까지 가능한 디자이너를 뽑을려는 의미로 하는걸까?
아니면 그냥 “웹(모바일) 디자이너”의 의미일까?
(“UX까지 가능한 디자이너가 뽑히면 좋겠다”라는 의미로 썻다는건 알겠다. 하지만 그런 의미라면 제목이 아닌 우대사항에 적는게 적절한게 아닌가?)

– 수많은 회사가 UX디자이너를 채용하는데, 정말로 그 만큼 UX 디자이너가 있을까?
그렇다면 나 혼자 뻘 생각한거지만, UX 디자이너가 많아지는건 기뻐할일!

 

만약 그렇지 않다면..

– UX의 일부를 안다고 UX 디자이너라 칭할 수 있는걸까?
알파벳 외운다고 해서 영어 할 줄 안다고 말할 수 없듯이..
(끝이 없는 분야이기 때문에 ‘전부’를 알 수 없다. 하지만 일부를 아는것과 엄연학 격의 차이가 있다.)

– “UX”라는 분야가 그리 만만한것인가?

– 이제는 정말 마케팅 용어인건가?

– 아니면 이제는 GUI디자이너 뽑을때 UX를 옆에 붙이는게 당연한건가?(트랜드인가?)
트랜드라고 당연한건 아닌데.

– UX/UI 디자이너 잡타이틀이 트랜드라면,
진짜 UX 디자이너를 채용하려는 입장에선 UX디자이너와 UI디자이너를 구분하기가 힘들고,
이렇게 되면 최종적으로는 UX디자이너가 피해를 입게 된다.

– “UX나~ UI나~ 뭐 비슷한거, 그게 그거자나?” 라는 의식이 업계를 지배하면
각 분야를 열심히 판 디자이너 입장에선 어이가 없을뿐이다.
결국 UX, UI디자이너 모두 피해를 입게 된다.

– 그리고 채용공고의 타이틀에 UX를 걸었으면, 사측은 책임을 져야한다.
UX타이틀이 있으면 실무에서 당연히 UX를 해야지.

– 누가보면 UX 전문가인줄 알겠네.

더 깊게 들어가서 그 원인에 대해서 생각하는 바를 적으려했지만,
자칫하면 오해를 살 민감한 내용들이라.. 아래 결론 정도로 정리 및 마무리.

결론
사측에서 UX 디자이너를 채용한다고 공고하고,
구직자는 UX 디자이너로 지원하여 채용되었는데,
구직자는 실제론 UX 디자이너가 아니고,
다행스럽게도 업무에는 UX가 없고..

npm ‘kik’사건을 얘기하는 페북의 글과 코멘트를 보고..

블로터의 “11줄의 코드, 인터넷을 패닉에 빠뜨리다(http://www.bloter.net/archives/253447)”

Screen Shot 2016-04-04 at 2.45.50 PM

kik 홈페이지 캡쳐

흠.. 오늘의 뜨거운 감자는 요 녀석인거 같은데..
본문 글도 코드 라인을 강조하고 있고, 페북에서 공유된 글 및 글의 코멘트에도 코드 라인에 대해서 비아냥거리는 사람이 있던데..
이들 중에 실제로 한 줄짜리, 두 줄짜리 패키지 코드를 봤다고 말하는 사람은 없었다. 그리고 실제로 찾아서 본 사람도 없을 것이다.

모두의 예상처럼 거지 같은 패키지일 수 도 있다.
근데.. 단순히 코드 라인 수로 코드의 퀄리티를 얘기한 건.. 어거지 아닌가?
자 그럼 구구단 코드를 1,000줄로 짠 거랑, 1줄로 짠 거랑 비교하면..
1,000 줄인 코드가 훨씬 훌륭한 것인가?

코드 라인수는 중요하지 않다.
해당 코드가 나오기까지의 많은 고민과 경험이 중요한 것이다.

 


 

바퀴 만드냐 사용하냐 하며 싸우는 분들 보고..
실소가 나온다. 너무나 오래 묵혀서 묵은내만 나는 소재거리를 가지고 얘기하다니 ㅋㅋ
내 생각은 아래와 같다.
그냥 상황에 맞게 쓰면 된다.
오픈소스 중에 개발하려고 하는 것과 동일한 패키지가 있고 라이센스가 문제없으면 사용하고
수정할 부분이 있으면 수정해서 사용하고
맘에 안 들거나 기능상 문제가 있으면 다른 걸 찾거나 만들면 그만이다.
“있는 바퀴를 쓰거나”, “바퀴를 만들거나” 이렇게 두 가지의 선택지만 있는 게 아니란 거다.
중요한 것은 기획한 의도대로 기능이 동작하고, 개발하기 편하며, 유지 보수도 좋은 걸 선택하는 거다.
그게 있는 바퀴를 사용하는 걸 수 도 있고, 새로운 바퀴를 만드는 걸 수 도 있다는것이다.

zenhub.io를 2주간 써보고

Screen Shot 2016-02-25 at 6.20.54 PM

zenhub를 간략하게 소개하자면 브라우저 확장 기능을 이용해서 Github를 방법(?)하여 칸반보드(Kanban Board)와 번다운(Burn-down)챠트를 제공하는 유료서비스다.
하지만 트라이얼 기간 2주를 제공하기 때문에 zenhub의 기능은 충분히 맛볼 수 있다.

feature-boardburndown-chart

zenhub를 2주간 써보고 그간 느낀 점을 간략하게 장점과 단점으로 나누어 정리하려 한다.

장점

  • 별도의 이전(Migration) 작업 없이 기존의 이슈들이 그대로 칸반보드에 적용된다.
  • 검색 필터들이 복수 선택이 가능해진다.Screen Shot 2016-02-25 at 6.24.50 PM.png
  • 스코어링이 가능하며 기본값으로 피보나치수열이 들어가 있다.
  • 번다운차트가 제공된다.

크게 이 정도 것 같다.
물론 다른 장점도 더 있을 수 있겠지만 그건 zenhub라서 라기보다, 칸반보드의 장점인 경우가 대다수이다.

단점

  • 익스텐션의 한계로 초기 로딩이 좀 느리다.
  • 마찬가지로 종종 먹통이 되거나
  • 레이아웃이 깨질 때가 있다.
    Screen Shot 2016-02-15 at 6.25.20 PM
  • 칸반보드에서 이슈의 코멘트 개수를 확인할 수 없다.
  • 같은 맥락인데 이슈의 activity가 있는지를 알아낼 수 없다.
    Screen Shot 2016-03-02 at 11.22.41 AM
    코멘트가 몇 개나 달렸는지, 내가 놓친 Activity가 있는지를 확인할 길이 없다.
  • 이슈들을 통으로 다른 pipeline으로 옮기는 기능이 없다. (예를 들어 Backlog에 있는 모든 이슈를 Todo로 옮기려고 하면 이슈 하나하나 클릭해서 옮겨야 함. 전체 선택 이딴 거 없음)

결론

  • 디테일한 부분에서 완성도가 떨어진다.
  • github에서 칸반과 번다운만 제공할뿐이다.(번다운은 대체품도 몇몇 있다)
  • 돈 내고 쓰기엔 아직 부족하다.
  • 심지어 가격이 저렴한 편 도 아니다.
  • 더 저렴한 가격으로 이용할 수 있는 서비스도 더러 있다.
  • 칸반을 별도의 설치 및 추가 비용 없이 체험해본다는 차원이면 추천.

서버를 Rails5로 할것이냐, Meteor(nodejs)로 할것이냐

뒤늦게 Rails 5Action Cable Demo 동영상을 보았다.
동영상은 20분이 조금 넘는 런닝타임이지만 익숙해지면 3분 내외로 개발할 수 있을것 같다.
그런데 생각보다 많이 풀어져있는(풀이되어있는) 느낌으로 각 사이드별로 코드를 다 작성해야한다.
“웹소켓을 하기 위해서, 여기는 이렇게, 거기는 그렇게, 저기는 이렇게, 마지막으로 이렇게 해주면 끝. 짜잔~!! 참 쉽지?”

3591057515594fc8

공들고 뛰어가다 그냥 점프해서 골대에 공 넣으면돼

처음 시도하는 사람들에겐 개념이 명확해서 이해하기 쉬울수있겠지만..
아직까지는 복잡하다는게 내 생각이다.

그리고 사실 Rails는 쓸대없는 코드 작성을 최소화하여 빠르고 간결하게 개발하는것이 장점이자 철학이라고 생각하는데 Action Cable은 그렇지 못한 느낌이다.
뭐 아직 베타니깐 버전업이 되면 아마 조금씩 이 철학에 맞춰서 수정되지 않을까 싶다.

내가 만약 Meteor​를 해보지 않았다면 이런 생각을 안했을수도 있겠지만
Meteor는 “그냥 했을뿐인데 웹소켓통신이 되고있네?” 랄까..

restmb_idxmake

그냥했는데 펜타킬..

Meteor랑 비교하는것 자체가 어폐가 있을지모르겠지만, 그래도 이미 맛봐서 비교를 안할수가없다.

사실 Rails를 버리고 Meteor + React​ 조합으로 서비스를 꾸려나갈 생각이었는데..
Rails 5선택지가 생겨서 고민이된다.

1-kyrdrgja-esr1w8taqong

아직 당장은 웹소켓을 쓸일이 없다보니 이 옵션은 선택에 큰 영향을 끼치진 않을것같다.
다만 Rails 5의 API mode가 어떻냐에 따라 갈라지지 않을까싶다.

API mode가 내가 원하는(상상하는)모습이라면
Rails 5 API mode + React로 구성을 해도 괜찮지 않을까?

Rails, Meteor 둘중 무엇이 더 가벼운가? 무엇이 개발하기 빠른가? 등등의 이슈로 열거해놓고 선택할 수 있겠지만..
사실 Ruby할래? Javascript할래? 의 문제이지 않을까 싶다.
무엇이 더 재밌고 즐겁게 개발을 할 수 있을것인가?
선택하기 어렵다. Ruby도 Javascript도..

Ruby는 10년이 넘는 기간동안 오랜시간을 함께한 친구같고..
Javascript는 Ruby보다 훨씬 오래전부터 알았지만 서먹한 관계였다 최근 몇년동안 급 친해진 친구랄까..

1431853362247

어떤거쓰지?

 

참고링크:
http://rubyonrails.org
http://weblog.rubyonrails.org/2015/12/18/Rails-5-0-beta1/
https://github.com/rails/rails/tree/master/actioncable
https://www.meteor.com/
https://facebook.github.io/react/