서비스 규모에 따른 인프라 결정

개요

경험이 없는 팀은 서비스 초반에 인프라 결정장애를 겪는다

좋아보이는거 다 쓰면 정말 끝도 없다 이슈해결도 안되고

잘 하는 인프라가 있는 경우 상관없지만
아닌 경우에 따를 수 있는 규칙

쿠버네티스는 관련인프라 필요한게 너무 많다

인프라 결정 기준

  • 개발인원에 따라 1~5인, 10인, 100인…
  • 서비스 사용자 규모 100명, 1000명
  • 인프라 비용
  • 무정전 서비스가 필요

다양한 요건이 있는데 인프라 비용에 따라 결정하는게 속편하고 빠르다.

기준도 명확하고
기준을 넘어서는 경우 다음 단계로 올라가기 위한 작업을 하면 된다

결정이고 뭐고 필수사항

  • Container – 보통 Docker
  • IaC – 인프라 코드화
  • Git – github을 많이 쓰는데 gitlab.com은 무료에 빠르다
  • 로깅 – Sentry

인프라 월비용에 따른 결정

간단한 웹서비스의 경우

무료 ~ 30만원

헤로쿠 heroku.com

30만원 ~ 100만원

서서히 기술욕심이 생기는 단계
매니지드 k8s를 사용해볼만하다
헤로쿠는 국내서버 제공이 안되고 느리기도 하니까

GCP, AWS, AZURE, DigitalOcean 매니지드 k8s

금지항목

  • EB(ElasticBeanstalk)
  • ECS
  • GoogleAppEngine

위 항목은 속터지는 것에 비해 편리하지 않다

CloudFunctions, Lambda 등은 생각보다 설계 자체가 어렵고 디버깅도 어렵고 관리도 힘들다
연습용 으로 한두개 추가하기는 괜찮느데 초기 서비스에는 오히려 적합하지 않다

100만원 ~ 1000만원

서버 비용을 걱정하기 시작해야 할 단계

중소 클라우드 업체랑 계약 잘 하면
몇달정도 공짜로 쓰게 해준다
다 쓰고나서 눌러앉아도 되고 옮겨도 된다
어차피 k8s는 다 있으니까 상관없다

네이버 클라우드같은 경우는 IaC가 잘 안되는 문제가 있다.
많이 쓰는 TerraForm 지원이 거의 없다.

서버 API는 잘 돼 있긴한가 모르겠다

1000만원 ~

멀티클라우드

[도서] 도메인 주도 설계로 시작하는 마이크로서비스 개발, 핵심 개념과 패턴, 설계, 구현으로 배우는 DDD와 MSA

깊은 지식을 얻는다기보다는 그냥 관련기술을 훑어보기 좋다

DDD 이론서 보고 어떻게 할지 모르겠는 사람들을 위한 책이라고 봐야하려나

기존에 좀 하고 있던 사람들에게는 별로 얻을건 없고

다른 사람도 같은 고민을 하고 있었구나 하는걸 알 수 있다

주요내용

아키텍처

  • 레이어드 아키텍처
  • 헥사고날 아키텍처
  • 클린 아키텍처

https://engineering-skcc.github.io/microservice%20inner%20achitecture/inner-architecture-2/

이벤트 스토밍

도메인 이벤트Orange발생한 사건 pp로 표현
커맨드Blue도메인 이벤트 트리거
외부시스템Pink도메인 이벤트가 호출하거나 관계가 있는 레거시 또는 외부 시스템
액터Yellow개인 또는 조직의 역할
애그리거트Yellow도메인 이ㄴ트와 커맨드가 처리하는 데이터
상태가 변경되는 데이터
정책Lilac이벤트 조건에 따라 진행되는 결정
when, then
읽기모델Green도메인 이벤트 엑터에게 제공되는 데이터
사용자 인터페이스White스케치 형태의 화면 레이아웃
핫스팟Purple의문, 질문, 미결정 사항

jhipster

추천도서

아키텍처

  • 마이크로 서비스 패턴
  • 클린 아키텍처
  • 엔터프라이즈 애플리케이션 아키텍처 패턴

개발 프로세스

  • 소프트웨어 장인

설계

  • UML 패턴의 적용
  • 도메인 주도 설계, 위키북스 2011
  • 도메인 주도 설계 핵심 이론, 에이콘 2017
  • 도메인 주도 설계 철저 입문, 위키북스 2020
  • Introducing Event Storming, Leanpub 2019

개발영역

  • 자바 ORM 표준 JPA 프로그래밍, 에이콘 2015

Keycloak 인증 솔루션 선택 – 그리고 ext개발

관련기술 모음

Keycloak vs CAS 선택은

국내에서는 Springboot을 많이 쓰다보니 CAS를 많이 쓸 것 같지만
사용의 난해성 때문에 Keycloak이 더 많이 사용된다
Keycloak에서 커스터마이징 해서 추가기능은 구현할 수 있지만 약간의 문제가 있다
– 별도 인스턴스를 띄워야한다는 문제
– 기본지원되는 형태로 사용해야하는 문제
극한의 커스터마이징을 하려면… 그냥 따로 만드는게 낫다
서비스 초반에는 있는 그대로 쓰자….

CAS는 뭔가 실행하는 것도 매우 힘들고 라이브러리처럼 사용해야하는데 그것도 힘들다. 도큐먼트도 없고… 그냥 인증스펙 구현을 어떻게 했는지 참고하는 코드로 쓰기는 좋다
https://memo.polypia.net/archives/3783

간단하게 결론을 내면
뭘 쓰건 기본기능 그대로 쓸게 아니라면 사용이 쉽지는 않다.

초반에는 서비스를 오픈소스에 맞춰서 쓰자

Keycloak 사용후기

개인적인 경험으로 봤을 때 keycloak이 CAS보다 간단하다.
그냥 기본기능을 가지고 사용하기도 쉽고
추가기능 구현한달정도 보다보니 구조파악이 되고 좀 할만해졌다

JBoss기반으로 만들어져서 Spring생태계에 익숙한 개발자가 접근하기 쉽지는 않다
jas-rx 기반 resteasy, wildfly 서버, jboss의존성 관리 등등..
그냥 도큐먼트만 보고 하려면 rest api 호출하는것도 쉽지가 않다.(공식문서에 주소를 엉터리로 적어놔서 ㅋ)
keycloak 소스코드와 인터넷 질문답변을 잘 읽어봐야한다
그리고 샘플 확장코드들

  • https://github.com/keycloak
  • https://github.com/ScriptonBasestar-io/keycloak-providers
  • https://github.com/thomasdarimont/keycloak-user-storage-provider-demo
  • https://www.baeldung.com/java-keycloak-custom-user-providers
  • https://github.com/thomasdarimont/keycloak-extension-playground
  • https://github.com/zonaut/keycloak-extensions

Keycloak 문제점? 헷갈리는 포인트

Keycloak 설명

오픈소스
회원관리 oauth2-oidc, saml 서버기능 지원
외부 Oauth 소셜로그인 지원(구글,페북,인스타..등)

헷갈리는 점

이해를 못해서 헷갈리는 점 말고 설계가 잘못됐다고 생각하는 부분

import가 아니고 partial import

json으로 export하고 import 한다고 하면 서버 설정전체를 집어넣고 내보내는거라고 생각하기 쉬운데
지원되는 항목이 정해져 있다
추가기능으로 설치한것들은 지원이 안되는 것 같다

rabbitmq EventListener를 추가했더니 export는되는데 import가 안된다

기본 client

realm을 처음 생성할 때 clients가 생성된다

  • {realm_name}-realm 이건 렐ㅁ을 생성할 때 마다 master 렒에 추가된다
  • master-realm은 master 렒의 Clients에 추가된다
  • account 계정관리 권한 이걸 지우면 로그인도 안된다 https://keycloak.com/auth/realms/master/account/
  • account-console 콘솔로그인 권한
  • account-cli
  • broker 소셜로그인 권한인가
  • security-admin-console

기본 옵션을 클라이언트에 달아놓은게 맘에 안들어.. 수정/삭제 버튼도 달려있다.

role

기본 client의 문제가 이어진다

기본 client는 고유 권한을 가지고 있다.

keycloak에서는 previlege를 별도로 관리하지 않아서
고유 client가 role이라는 이름으로 previlege(role)을 들고있다
소스에 보니까 string으로 선언이 돼 있어서 이름만 같으면 되나 싶어서
같은 이름 생성 해 봤는데… 이름같아서 헷갈리기만 하도 안된다

전체에서 관리되는 role과 client에서만 관리되는 role 그리고 기본client의 role이 별도로 존재한다고 봐야할까

새로운 client에 previlege를 부여하려면 composite roles를 선택해서 기본 client의 previlege를 associate 해야한다

그냥 잘못 만든 점

Events – Evnets Config에서

EventListeners를 설정하고 evnet종류를 지정할 수 있는데

EventListener가 한개일 때는 괜찮은데 여러개일 때
리스너 종류에 따라 다른 이벤트 설정을 못 하게 돼 있다.

ex) jboss-logging이 기본인데 이건 전부 수신하고
email로는 회원가입만 보내고 싶다… 라면..?? 이거 안된다.

User – Role – Previlege

구분이 좀 됐으면

아쉬운 점

플러그인 참여가 오픈되어있지 않다

사용자가 꽤 많은 것 같은데 기본지원되는 소셜로그인 말곤 따로 만들어야된다
커뮤니티 좀 활성화 돼 있으면 사람들이 알아서 만들고 할텐데

과도한 커스터마이징 미지원

버전이 14까지 올라갔는데 지원이 안되고 있네
좀 시도해볼만하지 않나
oauth말고 그냥 서비스 특화된 방식

커스텀 필드

되긴되는데 좀 불편

주소 문제

https://auth.service.com
/ 주소는 무슨 홍보페이지같은거고
/auth가 실제 서비스 주소가 된다
/auth/realms/master 처럼 주소가 나온다

기본 서비스 clients랑 같은 문제인데… master realm, 서비스 어카운트 등은 일반사용자와 다른 테이블에 다른 차원으로 관리되는게 좋은데 개인적으로는

각 렒별로 주소를 별도로 할당하고싶기도 한데 그것도 안된다
누가봐도 keycloak를 쓰고 있다는걸 알 수 있는 상태로 오픈해야한다

reverse proxy로 처리하면 할 수는 있을 것 같은데 좀 봐야겠다

hmm

초기서비스용으로 좋고
학습용으로 좋ㅏ

[기술서] 파이썬 병렬 프로그래밍 – 내용없음

리뷰 내용 말고 책 내용없음
스레드나 그 메커니즘을 자세히 설명한 것도 아니고
튜토리얼이 잘 나온것도 아니다

GIL이라던가.. 하는 파이썬에서 논란이 많은 부분에 대한 설명이있었으면 했는데
그냥 키워드만 나온다
각 기술의 차이도 비교가 상세히 되어있지 않다.

그냥 파이썬에서 병렬프로그래밍을 할 수 있는 기술과 그 샘플코드 정도만 소개 돼 있다.

내부모듈 이용

  1. threading
  2. multiprocessing

라이브러리 이용(추상화계층을 얹어서 병렬프로그래밍 구현)

  1. Celery: 표준. https://docs.celeryproject.org/en/stable/
    multiprocessing, gevent, eventlet 등 활용
  2. PP: Parallel Python 안쓰이지 않나….

파이썬 분산형 서버를 만들때 사용하는 기술

이 책에서는 참고할게 없고 그냥 일반적으로는

  • RabbitMQ, Redis 사용시에는 Celery 사용
  • Kafka와 StreamData를 다룰 때는 FaustStreams 사용

threading이나 multiprocessing은 쓸 일이 있을까
한 서버에서 돌릴수 있는 정도의 프로그램을 만들때
웹프로그램에서는 사용하지 않음

OpenWRT 커스텀펌웨어 라우터 – Linksys WRT3200ACM

목적

홈네트워크 구축
이라고 하지만… 그냥 iptime에서 해도 된다.
openwrt설치된 장비가 갖고 싶어서

구매

OpenWRT에 추천디바이스로 나와있어서 직구
https://www.linksys.com/us/support-product?pid=01t340000046sOsAAI
세금은 따로 없다. 전파인증을 따로 받아야 하는거라 국내판매는 당분간 힘들지 않을까
IPTIME에서 쓸만한게 있으면 사려고 했는데 없는 것 같다

설치

펌웨어 다운받아서 설치하면 끝
여기서 https://openwrt.org/toh/linksys/linksys_wrt3200acm
이걸 받아서 http://downloads.openwrt.org/releases/19.07.7/targets/mvebu/cortexa9/openwrt-19.07.7-mvebu-cortexa9-linksys_wrt3200acm-squashfs-factory.img
192.168.1.1로 접속
펌웨어 선택하고 설치… 경고는 무시
이렇게 쉬워도 되나?

설치된 후 바로는 뭔가 돌아가고 있어서 그런지 bad request오류가 지속적으로 발생한다
브라우저 캐시 제거하고 10분쯤 있다가 접속하니 잘 된다
무엇 때문에 해결된걸까
– 브라우저 캐시제거
– 10분쯤 있다가 접속

설정

라우터 스펙이 좀 좋다보니 할 수 있는게 많아서 할 게 많다

  • 라우터 비밀번호 설정
  • LAN 설정
  • USB 연결
  • Http Proxy
  • 내부 DNS
  • DDNS 연결
  • DHCP
  • VPN
  • Radius
  • Kerberos
  • 무선랜

라우터 비밀번호 설정

root / password

웹 인터페이스에서 비밀번호를 적당히 설정 해 준다.
비밀번호 설정을 안 해 주면 위에 경고가 계속 뜬다.

LAN 설정

Network – Interfaces – LAN – Edit

IPv4 address : 192.168.1.1이 기본인데 필요한 경우 192.168.0.1이라던가 바꾸고 싶은대로 변경.
Use custom DNS servers : kt는 168.126.63.1~2, 구글은 8.8.8.8, 4.4.4.4
로컬DNS가 있다면 주소를 잡아준다
OpenWRT에서 설정가능

USB 연결

내부 저장용량이 적어서 http캐시나 다른 일들을 시키려면 마운트를 해 줘야한다
https://openwrt.org/docs/guide-user/storage/usb-drives

Http Proxy

Software squid
usb에서 잡아준 mount 디렉토리로

내부 DNS

d

DDNS 연결

상용제품은 자기네가 지원 해 주는게 있는데 오픈소스다 보니 별도로 설정 해 줘야한다
돈안내고 쓰는 서비스 중에서 해킹위협이 없는 쪽으로

DHCP

d

VPN

OpenVPN, L2TP
https://openwrt.org/docs/guide-user/services/vpn/libreswan/openswanxl2tpvpn
d

Radius

dd

Kerberos

dd

무선랜

따로 잡아줘야 함

NAS,홈오피스 – OS,솔루션

NAS 솔루션

  • NextCloud
  • https://www.openmediavault.org
  • http://rockstor.com
  • https://www.amahi.org
  • https://lime-technology.com

NAS 인프라, NAS 서비스 섞여있음

OS

  • www.nas4free.org
  • FreeNAS https://www.freenas.org
  • http://rockstor.com/

홈오피스

  • www.zentyal.org
  • NethServer https://www.nethserver.org

Media

  • https://www.amahi.org/

인프라

  • https://www.pfsense.org/

데이터 아키텍처 전문가가 되는 방법 – 최수진

DA(데이터 아키텍처) 컨설턴트에 관한 얇은 책

2021년 이후에는 조금 맞지 않을
그리고 DA편향적인 생각이 많이 적혀있다.
개발자 다음단계를 준비한다던가…

DBA,DevOps,DA,Frontend,Backend…는 직군이 되서는 안되고 직책이 되야한다.
SoftwareEngineer는 보통 이 교집합을 수행한다.
DA만 하는 IT컨설턴트가 존재 하지 않는게 최선이다.

컨설턴트의 강점은 실력이 아니다.
권한이다.
검찰이 경찰보다 뛰어난건 지능이나 개개인의 능력이 아니라
지역의 이해관계에 얽히지 않은 벽을 뛰어넘는 권한이다.
컨설턴트도 마찬가지
대기업의 특정 부서나 직급에 상관없이
궁금한 것을 물어보고 잘못된 것을 지적할 수 있는 권한이다
제 3자이고 곧 떠날 사람이기 때문에 가능한 부분이다.

LG에서 휴대폰 사업이 잘못나가고 있는것을 누가 지적할 수 있었을까
구성원 하나하나다 다 개붕신이라 문제점을 인식하지 못하고 있었을리는 없다
좆지 직원들도 갤럭시,아이폰을 좋아하니까

  • DA
  • DBA
  • BA
  • AA
  • TA
  • ISP : Information Strategy Planning

고객의 업무에 맞는 데이터 모델
vs
개발하기 쉬운 데이터 모델

보통은 개발하기 어려운 데이터 모델은 잘못된 설계의 결과물이다
기존에 잘못된 업무를 그대로 따라서 모델링을 하면 이런 결과가 나온다
1 보통은 업무 자체가 변경되어야 하는 경우
2 상태값 설계가 제대로 안 된 경우

프로젝트 시작전에 처리되서 문서화되어야 할 것들

  • 일정
  • 설계
  • 용어정의

보통 이런것들은 무시되고 바로 프로젝트가 시작된다
프로젝트 진행과정에서 지속적으로 오버헤드를 발생시키는 문제들

개발자: SI-SM
DA: 모델링-튜닝

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
    }

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