직접 구축하기 vs 돈내고 쓰기

이성적으로는 돈 내고 쓰면서 빠르게 개발하는게 낫다는걸 알지만
하나하나 구축하려는 욕심이 든다
적정기준을 정해놓고 따르는게 좋을 것 같은데

서비스 구축을 하면서 사용해야 하는 서비스가 몇가지 있는데

  • 인프라
    • 그냥 서버.. linux, unix, windwos ..
    • k8s cluster
    • object storage
    • cdn
  • DevOps
    • 빌드
    • 배포
  • Logging & 모니터링
    • 로그수집
    • 모니터링
    • 알림

구축하는데 들어가는 비용이 이익을 상회하지 않는 경우
비용: 시간, 돈, 인력
이익: 만족감, 기술발전, 속도, 돈

비교

인프라

IDC에 서버 올려서 직접 구축하면 제일 싸긴하다… 효율적으로 사용할 수 없다.
초기비용이 크고 서버 관리하는 기술도 생각보다 어렵고
경험이 없으면 삽질을 엄청 많이 하게 된다
코드만 만지던 사람들이 생각도 못한 변수가…

그리고 서버를 코드화 할 수 없으면 곤란한 상황이 많이 발생한다.
메이저 클라우드 업체를 쓰면 서버를 완전 코드화할 수 있다.

  • AWS
  • GCP
  • Azure
  • Heroku

서버만 쓸 수도 있지만 클러스터까지 쓸 수도 있고

  • k8s
  • ecs

네이버 클라우드 등 국내 서비스는 안됨. XXX

CDN, ObjectStorage는 클라우드플레어 등 다른 회사를 써도 되고 메이저 클라우드를 써도 되는데 다 코드화가 가능하다.
코드화가 가능하면 인프라 구축이 매우 쉬워진다.
SI도 아닌데 한번 구축하면 끝이지 왜 환경을 재현해야 하냐고???? 하는 경우가 있는데

  • CloudFlare

인프라 코드화의 장점

  • 테스트 환경 구축: production 환경에
  • 서비스 확장이 간편: 인프라 규모를 확장할 때 오류 가능성이 낮다.
  • 테스트 자동화가

DevOps

위에 있는거에서 DevOps는 코드화 해서 쉽게 할 수 있고
githubaction같은 무료서비스도 많으니 그냥 써도 된다. 서버를 직접구축하면 조금 더 빠르긴한데 취향에 따라 마음대로 해도 되는 부분…
아직 돈내고 써서 엄청 좋아지는 서비스가 없다

  • kustomize
  • gitops
  • githubaction
  • gitlabaction?
  • drone
  • argocd
  • keel

로깅 & 모니터링

hadoop, elastic search, prometheus 거의 이 중 한쪽 생태계와 주변기술 아닐까

구축하는게 튜토리얼대로 하면 금방 할 수 있기도 한데…
서비스에 맞게 튜닝을 하려면 신경쓸게 많다.
생각보다 잘 안되는 편

어떻게 보면 진짜 비핵심적인 부분이기도 해서
진짜 필요한 부분에서는 직접 로그를 DB에 저장하던지 하고
전체적으로는 돈내고 써야하는 분야

sentry, datadog, … 등등 검색하면 많다

클라우드에서 기본 제공해주는 서비스는 대부분 ES, Hadoop 기반이고
커스터마이징이 불편해서 별도로 작업이 많이 필요하다.

Ktor web framework – kotlin

kotlin web framework인데…
간단하게 rest api 만들기 좋다.
간단한 rest api가 필요한가??
프로토타이핑 정도 하는거라면 모를까
그냥 스프링 쓰는게 나을 것 같다

뭔가 많이 부족하다

추가기능 – 만들거. 있음좋을거

  1. API route에서
    route 이름, 주소URI 가져오기
  2. 공통파라미터 상위에서 선언한거 하위에서 같이 쓰기
    route (/game)
      val user_id = Header
      get {
      user_id
    }
    post {
    user_id
    }

언어 구조 때문에 만들기 힘들 것 같다

CAS – 로컬실행/개발환경 만들기

뭔가 괜찮은 것 같으면서도 애매한 오픈소스 프로젝트…
복잡함 때문에 몇 번 사용하려다가 포기 했는데 이번에 인증서비스를 만들면서 다시 사용하려고 한다.

jasig CAS일 때 보고 apereo로 바뀐거 보고… 세번째 정도인 것 같다.
이전에는 기능을 축소해서 직접 개발했었는데

복합인증을 구현하려면 쓰는게 나을 것 같다

경쟁제품

유료 무료 다 포함해서 대강

무료

  • Keycloak
  • CAS
  • JOSSO
  • LemonLDAP
  • Shibbolet ldP
  • OpenAM
  • Gluu
  • https://freeradius.org/

유료

  • Auth0
  • AWS Cognito

기타

  • https://gist.github.com/bmaupin/6878fae9abcb63ef43f8ac9b9de8fafd
  • https://www.gluu.org/blog/gluu-versus-keycloak/

조금씩 특성이 다르긴 하다.

CAS 특징

  • 프로젝트가 굉장히 잘게 나눠져 있다.
    모듈형으로 가져다가 사용하라는 것 같은데…
    의존성이 복잡해서 그렇게 쓸 수가 없다
    도큐먼트는 사용법에 관한 것만 있고
  • 설치형으로 사용하려고 보면…
    cas-overlay-template 라는게 있기는 한데
    기본으로 지원되는 부분을 제외하면 설치형으로 쓸 수 있는건 아니고 거의 소스레벨에서 수정해서 써야만 한다.
  • 스프링을 매우 잘 쓴다. 나도 스프링 꽤 써봤다고 생각했는데 처음보는게 조금씩 보인다
  • Springboot autoconfigure 사이의 엄청난 충돌이 발생
    실행형으로 만들게 아니라면 그냥 없애야 하지 않을까

어쨌든 소스레벨에서 분석해서 사용해야 하고
필요한 부분만 뽑아쓰긴 힘들어 보인다

설치방법

소스

docker 컨테이너를 제공 해 주면 좋겠는데…. 커스텀을 해서 쓰라는 철학을 가지고 있는 애들이라 그런지 통짜로 제공 해 주지는 않는다.
그래도 쓰기 편하게 템플릿이 제공된다.

https://github.com/apereo/cas-overlay-template

이런것도 제공 해 주고 많이 발전했다.

아래 순서대로 치다보면 뭐가 뭔지 알 수 있을거다. README.md와 비슷하지만 약간 다르다.

설정파일 수정

docker-compose 실행테스트를 해야되서 설정파일을 수정 해 준다

실행

화면수정

수정가능 항목의 목록을 얻는 명령어

템플릿을 소스코드로 가져오는 명령어

기능수정

이쪽 철학이 그런가보다. 디비를 직접 관리하거나 하지 않는다.
그럴거면 jpa 연동하기 쉽게 인터페이스를 달아주던가 하면 좋을텐데 그런건 또 안해놨다.

트리거 설정

각 기능이 실행될 때 마다 앞뒤로 트리거를 달 수 있다.
인터셉터
groovy

아직 안해봐서잘 모르겠지만 할 수 있다.

배포

리버스 프록시 사용

요즘 리버스 프록시 안쓰는 경우가 더 드물지 않을까

결론

overlay template 설치하려면 keycloak, gluu 등 다른 쉬운걸 쓰는게 나을것으로 보인다
인증방식은 어차피 다 표준프로토콜이 있어서 한두개 빼고는 다 비슷하게 제공된다

소스레벨에서 사용하려면 cas를 쓰는게 나을까… 그냥 만드는게 나을까
아직 시작단계라 정확하지는 않지만
이걸 쓰기보다는 필요한 부분 소스만 참고해서 따로 만들게 될 것 같다

REF

  • https://apereo.github.io/2019/01/07/cas61-gettingstarted-overlay/
  • https://apereo.github.io/cas/6.3.x/configuration/Configuration-Server-Management.html
  • https://apereo.github.io/2018/01/05/cas-deployment-with-proxy/

State Machine libray

상태관리

프로그램을 만들다 보면 상태가 중요한 요소일 경우가 많은데
회원의 상태, 프롯스의 상태
상태를 변경하기 위한 동작들
기존 상태 메모리에 로드, 디스크 저장 등등

별도로 관리하지 않고 디비에서 가져와서 한개씩 처리하면서 트랜잭션 거는거도 가능하지만
실수가 잦다

그래서 하나 만들어볼까 하다가 찾아보니 잔뜩 나와서 일단 정리

REF

  • https://statecharts.github.io/
  • https://kentcdodds.com/blog/implementing-a-simple-state-machine-library-in-javascript
  • https://github.com/davidkpiano/xstate
  • https://github.com/Ankzz/easyfsm/
  • https://github.com/hekailiang/squirrel

Ruby On Rails App – 시작하기

철지난 루비온 레일즈

별 생각이 없다.. 그냥 해봄

어플리케이션 생성

스타터킷이 있기는 한데 다 너무 오래됐다. 마지막 업데이트가 5년~7년…
그 때 부터 안쓰기 시작했나보다
그래도 아직 현역인데… 이렇게까지 인기가 없을까

  • https://github.com/prismicio/ruby-rails-starter
  • https://github.com/mattbrictson/rails-starter
  • https://github.com/RailsApps/rails-devise-pundit

필수 환경 설치

rbenv 2.6.5 bundle rails

필수 라이브러리

  • https://github.com/heartcombo/devise
  • https://github.com/rspec/rspec-rails
  • https://github.com/varvet/pundit
  • https://github.com/thoughtbot/factory_bot_rails

명령어 실행

그리고 코드생성

쉽게 프로젝트를 생성할 수 있는게 장점인데
노드가 더 쉬워서 자리를 뺏긴 느낌이다.

전문가용 터미널 셋팅

개발자는 터미널이 간진데
텍스트 편집할 때 emacs까지는아니라도 vim정도는 써 줘야된다.
근데 이게 기본형으로 쓰면 또 각이 안나와서 추가기능을 깔아주고
다른사람 자리에서 vi쓸 때 이게 왜 안돼? 같은 대사도 해 주고 해야된다

그러기 위한 몇가지 추가기능

Terminal

  • zsh
  • oh-my-zsh

리눅스나 맥이면 이정도는 이미 깔려 있어야되고
윈도우라고 빼먹으면 안된다.

  • oh-my-pysh

오히려 여기에다가 리눅스 터미널까지 설치 해 줘야된다

  • cygwin
  • ubuntu18.04 WSL

그리고 추가로 터미널 유틸

  • https://github.com/junegunn/fzf

VIM

에디터

  • nvim
  • vim

플러그인 관리

  • https://github.com/junegunn/vim-plug
  • https://github.com/VundleVim/Vundle.vim

에디트 툴

  • https://github.com/neilagabriel/vim-geeknote
  • https://github.com/jeffkowalski/geeknote

이정도 깔아두면 이제 어디가서 전문가 행세하기 충분하다.
내 노트북을 가지고 강연/강의/세미나를 할 때 부끄럽지 않을 최소한의 환경

MongoDB 4.0 to AWS DocumentDB 3.6 migration 기록

mysql, aurora정도로 호환되는 제품인 줄 알았는데

스펙을 보니 다른점이 상당히 많다.
https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/mongo-apis.html
아니요가 너무 많은거 아니요?

처음 접속할 때 부터 애를 먹었다. public access가 안된다고???

AWS의 불친절함이란.. .어디 잘 써 있지도 않고

루비온레일즈 개발자가 AWS를 설계했으면 이렇지 않았을텐데
(친절한 루비의 에러메시지)

공식 문서에서 시키는대로 한 것 같은데 접속이 안되서 인증서 사용을 중지시키고 접속했다
https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/connect-from-outside-a-vpc.html

쓰는 사람이 없는건지 검색도 잘 안되는군

AWS 직원새끼도 이거 안쓰는거 아닐까

파라미터 그룹에서 TLS를 끄고 겨우 접속은 했는데

admin으로 접속이 안되네?

test로 접속해봤더니 된다

그 다음에 test2로 접속했더니 된다

근데 test2로 접속하면 test1이 아show dbs부터 안먹힌다??

아니군 데이터가 있는 디비만 목록에 뜬다

이래저래 하다가 너무 이상한 것 같아서 포기..

결국은 몽고디비를 설치해서 사용

그래도 직접 구성은 안 하고 aws에서 지원 해 주는 cloud formation을 활용했다
https://docs.aws.amazon.com/ko_kr/quickstart/latest/mongodb/step2.html

그냥 실행했더니 실패???왜??

바로 클릭해서 접속했떠니 북부 버지니아로 접속되는군.. 어째 이상하더라고
aws 콘솔에서 안 쓰는 리전 꺼놓는 기능은 언제 나올건가

그러고보면 aws에서 대부분의 관리 기능들이 cloud formation을 확장한 정도 기능 아닐까 싶을 정도로.. 비슷한 프로세스로 돌아가는 것 같다.

ui를 따로 만들어주면 관리형 서비스가 돼 버리는거겠지

docuemntDB를 갖다버리고 mongoDB를 관리형으로 넣어주는건 어떨까

하려다가 다시 DocumentDB를 사용하기로

설치가 어려운건 아니지만 나중에 관리비용도 상당히 있으니까

그리고 기존 어플리케이션(node-mongoose)을 돌려보니까 별 문제없이 돌아간다. 4.0에 특화된 기능을 쓰는게 없어서 그런가?

백업 덤프에서 버전을 안 맞췄더니 아예 안된다. 에러메시지가 버전이 안맞다가 아니라 이상한게 안된다고 해서 한참을 검색을 했는데… 버전문제였다.
mongodump(4.x) – mongorestore(3.6)

docker 덕분에 간단히 해결됐다.
docker run –rm -it -v $(pwd):/mongobak mongo:3 mongodump –out /mongobak –host x.x.x.x -uUser -pPass –db dbname

버전이 안맞아서 인덱스나 뭐가 날라갈 수 도 있다고 하는데 나중에 생성 해 주면 되지 않을까

몽고디비 툴 사용

몽고해커 http://tylerbrock.github.io/mongo-hacker/
http://mongodb-tools.com/