Author Archives: archmagece

IaC, Infra as Code – 인프라를 코드로 관리

클라우드로 넘어오면서 관심이 커진 분야

서버 프로비저닝 기술

  • Chef
  • Ansible
    클라이언트에 에이전트 설치 없이 원격으로 설치를 해 준다는 장점
  • Puppet
  • Saltstack
  • Packer
  • Groovy Infrastructure

요즘은 잘 안쓰는 설치 프로비저닝

SE를 안해봐서 모르겠지만.. 서버관리 하는 사람들은 이런거 USB 만들어서 들고다니지 않았을까
https://www.cyberciti.biz/tips/server-provisioning-software.html

  • Kickstart
  • FAI, Fully Automatic Installation
  • Cobbler
  • Spacewalk
  • OpenQRM
  • Foreman

클라우드 코드화(설정)

  • AWC Cloud Formation
    이건 그냥은 거의 못쓴다고 보면 된다
    AWS CDK를 활용
  • GCP – yaml
    따로 이름도 없는 것 같은데 구조가 잘 잡혀있어서 읽기 쉽고 재활용도 쉽다
  • Terraform
    클라우드 서버 인프라 뿐 아니라.. 여러가지 provider를 사용하면 github 설정도 코드화할 수 있다
  • 기타 ansible, chef 등에서 제공하는것들.. 플러그인 형태로 추가하면 되는 것 같은데 주류는 아닌 듯 싶다

클라우드 코드화(SDK)

  • AWS CDK
  • python boto
  • aws-sdk-rails

~

개인적으로 DSL형태의 설정을 좋아해서
Ruby계열 언어를 사용하는 프로그램이 많아지면 좋겠는데
대세는 yaml이나 파이썬 코드인 것 같다

윈도우 작업용 피씨

오픈쏘쓰

https://github.com/microsoft/windows-dev-box-setup-scripts

설치

윈도우 앱스토어

여긴 자동화가 되나 모르겠다 수동으로 클릭

OneNote
Slack
Arduino IDE
Ubuntu
Ubuntu 18.04 LTS
WIndowsTerminal (Preview)
Terminus – SSH client
DBeaver CE
NuGet Package Explorer
Microsoft Edge DevTools Preview
MQTTBox

Chocolatey ( https://chocolatey.org/ )

윈도우+x – a
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))

choco install -y `
googlechrome `
firefox `
ccleaner `
notion `
filezilla `
hostman `
bandizip `
notepadplusplus `
vscode `
atom `
gimp `
inkscape `
packer `
googledrive `
dolphin `
ninja `
openoffice `
mysql.workbench `
pgadmin3 `
gow `
cygwin `
cyg-get `
wsltty `
msys2

choco install microsoft-windows-terminal
# notepadplusplus.install \ # marketplace
# autohotkey.portable \ # scoop
# teamviewer \ # 안써서
# virtualbox \ # hyperv
# virtualbox-guest-additions-guest.install # hyperv
# docker \
# minikube \
# vscode \ # scoop
# nuget.commandline \ # scoop???
slack \ # marketplace

Babun ( http://babun.github.io/ )

개발중단..

pact install tmux

Scoop ( https://scoop.sh )

Babun에서는 안쓰는게 좋을것같고 윈도우+x – i

scoop install -g `
7zip `
git `
gzip `
less `
nano `
sed `
curl `
grep
scoop bucket add java
scoop install jdk8
scoop bucket add extra
scoop install nvm
scoop install vagrant docker docker-compose
vagrant
nvm
scoop install `
adb `
android-sdk `
eksctl `
aws-iam-authenticator `
aws `
aws-vault `
erlang `
flyway `
go `
gcloud `
ghostwriter `
github `
gradle `
grails `
graphviz `
groovy `
haskell `
kotlin `
kubectl `
lua-for-windows `
maven `
minikube `
mono `
nvm `
perl `
putty `
r `
sbt `
scala `
vagrant

scoop install  
jetbrains-toolbox `
wireshark `
winscp `
hostsman `
postman `
foobar2000 `
rufus

# 그냥 수동설치
# android-sdk
# flutter

강화 PowerShell (oh-my-posh)

https://github.com/JanDeDobbeleer/oh-my-posh

scoop install conemu
scoop install conemu-color-themes
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
# Start the default settings
Set-Prompt
# Alternatively set the desired theme:
Set-Theme Agnoster
# https://github.com/gluons/powershell-git-aliases
Install-Module git-aliases -Scope CurrentUser -AllowClobber
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-6
# All Users, All Hosts
 $PSHOME\Profile.ps1
# All Users, Current Host
 $PSHOME\Microsoft.PowerShell_profile.ps1
# Current User, All Hosts
 $Home\[My ]Documents\PowerShell\Profile.ps1
# Current user, Current Host
 $Home\[My ]Documents\PowerShell\
Microsoft.PowerShell_profile.ps1

# 위에거 다 안되고 아래걸로. 원드라이브 Documents가 따로 잡혀있으면 거기로
# $Home\[My ]Documents\WindowsPowerShell\
Profile.ps1 
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox
Import-Module git-aliases -DisableNameChecking

미확인

noobs-term ( https://noobs-term.com/ )

가상환경

virtualbox는 같은 vagrant 소스로 리눅스 맥에서도 사용가능
그래도 윈도우에서는 hyperv쓰는게 편하긴한데
https://stefanscherer.github.io/how-to-install-docker-the-chocolatey-way/

VirtualBox

choco install -y `
virtualbox `
docker-toolbox

Hyper-V

https://docs.microsoft.com/ko-kr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
choco install -y docker-desktop docker-kitematic

추가설치

scoop install `
vagrant minikube kubectl`

https://github.com/hashicorp/vagrant/wiki/Available-Vagrant-Plugins

vagrant plugins install `
sahara `
vagrant-aws-dns `
rubber

카프카 기술서 두권 비교

아파치 카프카로 데이터 스트리밍 애플리케이션 제작 – 에이콘

카프카에 대해서 개괄적으로 나와 있기는 한데 정리가 깔끔하지는 않다

훑어보기는 괜찮다

그런데… 이 책이 더 좋은 것 같다

~~~

기술만 훑어보려고 하는거면 1~2단원만 보면 될 것 같고 자세히 보려면 좀 오래걸릴 것 같다.
코드랑 기술이 상세하게 설명 돼 있어서 더 그런것같은데..

메시지 전송 기술에서 카프카가 거의 표준으로 자리잡아서 다른걸 생각하기가 힘들 정도다
복잡한 라우팅을 하는 경우에 AMQP를 쓴다고는 하지만… AMQP에서 지원되는 케이스를 생각 해 봐도 카프카에서도 다 할 수가 있을 것 같다

예전에 금융사 SMS처리하는 프로젝트에서 사람들 mysql가지고 개삽푸는거 본 적이 있는데
내가 들어갔으면 메시지 서비스로 하지 않았을까 싶은데…
그 때는 rabbitmq를 선택하지 않았을까?? 카프카의 특성을 제대로 모르고 있어서..
당시에는 문서도 잘 안나와있어서 좀 골치아프기도 했다.
요새는 번역서도 나와있어서 사용하기 좋은 것 같다

끝으로 최근.. 아파치에서 카프카의 경쟁 시스템이 출현했다는 슬픈소식

Apache Pulsar

Apache Storm 사용기 -> 포기(Flink로 전환)

Clojure로 코어를 만들었다는데서관심을 가졌으나최신버전인 2.0.0에서는 Java로 컨버팅 되어 버렸다는 슬픈 소식

python, clojure, java, shell script 폴리글랏이라고 했으나python코드는 별로 쓸모없는 포인트만 먹고 있다. 빼버리면 좋겠는데
실행 파라미터체크하는 정도 코드만 있다. 스톰 토폴로지를 파이썬으로도 만들 수 있다고되어 있는 것 같은데… 별로 그럴 생각은 없어서..
이 부분을 제외하고 자바와 설정파일을 이용하는게 여러 환경에 배포하는데도 편리하고 좋을 것 같다

intellij로 열려고 하는데 잘 안열린다.uber-jar 돼지자르를 만들 때 사용하는 shade-deps로 인한 임포트오류가 발생

Storm에서 한개의 실행단위를 topology라고 하는데 이걸 로컬에서 실행테스트도 해보고 디버깅도 해보고 로그도 찍어보고 하고싶은데… 다 쉽지 않다.
유닛테스트, 로컬실행, 디버깅 환경부터 만들어야 뭘 제대로 쓸 수 있을 것 같다.

문서…
이것저것 써 있기는 한데
고인물파티같은 느낌
한국 커뮤니티도 없다.
Flink만 쓰는건가
인터페이스단위로 분석해놓은 문서조차 없다
튜토리얼이나 예제가 있긴한데 딱 맞는 분석사례만 있는게 아니니까.. 결국 분석해서 써야된다

코틀린도 그랬지만… 초기에는 불만이 많은 편이라
좀 더 써 봐야지 판단할 수 있겠다


프로젝트에 적용을 시도했으나

Flink로 전환하려고 한다

  • 유닛테스트 지원안됨
  • 연동테스트 지원안됨
  • 로컬 데몬이 자꾸 죽음
  • Flink보다 업데이트가 안되고 있음
  • Flink보다 커뮤니티가 약함
  • 1에서 2로 메이저 업데이트 되면서 도큐먼트 링크가 다 죽음(2버전이지만 invator나 마찬가지인 상태)
  • 실행스크립트에 파이썬이 혼용되는 등 불필요한 프로젝트 복잡도가 증가함.
  • ide에서 실행이 안됨(디버깅 불가. flink에서는 되는지는 모르겠다)
  • maven-shade와 fat-jar(uber-jar)사용으로 배포 불편.
    — 이게 java jar –classpath로 실행하면서 storm.jar와 {user-topology}.jar를 실행시켜서 shade도 필요하고 그런건데 굉장히 쨔증난다 .설계가 잘못됐다고 본다.
  • 마찬가지로 maven-shade와 fat-jar(uber-jar) 사용으로 ide에서 본 프로젝트가 열리지도 않음
    — 억지로 열려면 mvn package한 다음에 shade에서 생성된 jar를 ide에서 합치면 됨
    —- 이런 문제가 있으면 프로젝트를 분리해놓던가 해야될 것 같은데 개발진들 열의가 별로 없어보임. 메이븐 의존성도 다 옛날거라 kafka client 0.8.0이었나
  • 로깅이 잘 안되는걸 빼먹을 뻔 했군
    토폴로지 jar에 포함시켜놓을 수 있으면 좋겠는데 그런 부분이 잘 안되는 것 같다
  • 로컬테스트용과 리모트배포용 코드를 아예 따로 작성해야된다. 이건 진짜 문제있다. ifelse로 분기 할 수도 있지만… 좀 참기힘든 부분이자너

또 다른 선택지

  1. Apache Flink
  2. Apache Apex
  3. Apache Spark – Streaming
  4. Apache Heron
  5. Uber AthenaX
    https://github.com/uber/AthenaX

아파치에서만 몇개야…. Storm은 죽은 프로젝트다. Heron(Incubator)이 스톰 뒤를 이어서 개발중인 것으로 보인다.

관련기술

  1. Apache Druid
    https://druid.apache.org/
  2. Apache Calcite
    https://calcite.apache.org/

코딩 취업학원? 추천을 한다면

이름은 언급을 못하겠고 좆만한 학원들 패스
인터넷이나 지식인에 영업사원이 답변다는 학원은 자동패쓰

  • 비트컴퓨터
  • 쌍용정보 어쩌고
  • 삼성멀티캠퍼스

요 세개가 오래된 쓸만한 학원이고

요즘 소규모 부트캠프?라고 운영하는데가 있는 듯 한데.. .신뢰도는 잘 모르겠다.

  • 코드노바?
  • 코드스테이츠?

정부에서 지원되는 6개월짜리 돈주고 교육해주는 곳
월30만원 용돈도 줌
최악은 아닌듯 한데 강사수준이나 커리큘럼은 정보부족
구디쪽에 관련 기관이 좀 있다…

그리고 새로생긴 쓸만한 기관은

Groovy를 터미널 스크립트로 사용하기

개인적으로 Groovy의 문법이 맘에들어서 Java 프로젝트에서 유닛테스트를 할 때라던가 많이 사용하는데
(Kotlin 프로젝트에는 보통 코틀린을 사용…)

새로운 기능을 몇 가지 발견해서 연동테스트의 스크립트 언어로 사용하려고 찾아봤다.

groovy의 grapes(@Grap)을 사용하면 개별 파일에서 의존성 관리가 된다던가
스크립트 언어로 쓸 수 있는 기능을 많이 만들어놓은 것 같다.

그런데 몇가지 실망한 포인트가…

  • Groovy 파일간에 import가 되지 않는다던가
  • @Grapes를 파일에 선언 해 놨는데 이걸 자동으로 임포트를 하지 않는 문제…
  • 클래스패스 설정을 할 때 jar파일을 사용해야하는 문제

그럼 … 못쓰겠군.

연동테스트 스크립트는 파이선이나 노드로 해야겠다.

그루비의 용도는

딱.

JVM에서 다이내믹하게 로딩해서 쓸 수 있는 스크립트 언어. 태생이 그렇기도 하고…
DSL형태를 만들기 쉽고


node.ts로 애플리케이션 만들기

과학상자로 자동차를 만들면 안되는거시야

꽤나 잘 굴러가긴 하겠지만 말이야…

enum

아예 없으면 없나보다 할텐데 어설프게 있는게 더 극혐이다.

export enum ArticleEnum {
  ADOC, MD,
}

export class ArticleConstant {
  static readonly ADOC = 'ADOC'
  static readonly MD = 'MD'
}

export type ArticleType = 'ADOC' | 'MD'

export default ArticleType

괜찮은 구조인지는 모르겠지만 대략 이렇게 처리를 해 버렸다.
단순히 enum을 이용해서 ===비교를 하면
class 안의 article: ArticleEnum은 ADOC ArticleEnum.ADOC는 0이라는 값이 나온다
0나오는건 당연한거긴한데
비교하면 0이랑 비교하는것처럼 다 false가 나온다.

취소. 이상하다.. 비교가 잘 된다.
전에 이런종류의 에러를 본 것 같은데
error TS2365: Operator ‘===’ cannot be applied to types 

메모리 공유

브라우저단에서 클라이언트 프로그램을 만들 때는 큰 문제가 되지 않던 부분인 쓰레드 관련 부분도 …
노드를 빠르게 해 주는 장점이기도 하지만 단점이기도 한 이 부분…
메모리를 공유해야 할 일이 있을 때 IPC또는 클러스터링 수준의 아키텍처를 만들어내야한다.

노드의 빠른 속도의 근본 이유이기도 하다.
그래서 간단한 형태로 많은 리퀘스트를 받는 애플리케이션을 만들때는 유용할 것 같다.

익셉션 처리

좀만 잘못하면 자꾸 뒈져버리니…
언어의 문제라기보다는 적절한 프레임웤이 없는게 문제라고 해야할 것 같다.

표준형태 없는 코드의 문제

이건 타입스크립트의 문제이긴 하지만

import winston from 'winston'
import * as winston from 'winston'

이 두개가 뭐가 다를까…
namespace가 선언되어 있는 경우
class가 선언되어 있는 경우
default export가 선언되어 있는 경우에 따라 임포트 방식이 달라져야한다.

소스코드를 봐야된다. ide를 좋은거 써야겠지…도큐먼트는 제대로 안나온게 많으니까
표준없는 코드는 여기저기서 문제를 일으킨다. 프로젝트가 커질수록 문제도 커지겠고…

장난감으로는 장난감만 만들자

노드 백엔드는 토이프로젝트까지만 사용하는걸로

프로토타이핑으로는 괜찮은 것 같다.

처음 배우기가 쉽다고 하지만 스프링에서 쓰던만큼 셋팅을 하려고 하니까 이것도 시간이 만만찮게 걸리는건 별 수 없는 것 같다.

잘 갖춰진걸로 쉽게 만들려면 RoR이 좋겠고
노드는 진짜 개판으로 짜기만 좋다. 이것저것 갖추려면 시간은 어차피 그만큼 걸린다.

거래소 개발중 – 기술 검토 결과

어쩌다가 거래소 개발을 하게 됐는데
컴포넌트별 기술을 검토 해 봤다.

컴포넌트

  • API – REST
  • API – WS
  • MessageLogging
  • Orderbook
  • Matching
  • PNL
  • ….

기술검토 항목

  • Elixir
    데이빗 거래소에서 썼다고 해서… 얼랭계열로 안정성이 뛰어나지만 타 언어와 연계해서 사용할 경우 액터모델을 제대로 활용하지 못할 것 같아서 제외
  • Akka – Scala
    그냥제외
  • Spring – Kotlin
    ReactiveAPI
  • node.ts
    이게 정말 애매하다…
    데이터를 전달하는 용도로는 정말 뛰어난데
    직접 핸들링할 때는 자료구조 지원도 약하고
    싱글스레드가 오히려 발목을 잡는다
    atomic, synchronized가 필요한 경우도 있으니…
    api나 데이터 전달하는 용도로만 활용해야할까

마이크로 서비스와 메시지 브로커(kafka)를 사용하고 있어서 특정 언어나 플랫폼에 종속되지 않는 구조를 생각하고 개발중

역시 노드는 간단한거 만들기는 좋다.
복잡한 시스템을 만드는 것은 좀 곤란한걸로…
노드는 데이터 스트림을 처리하는데는 효율적이나
데이터를 조합해서 처리하는 상황이라면 안쓰는게 좋을 것 같다.
기본적으로 지원되는 자료구조가 약한것도 문제
커뮤니티 라이브러리가 많은 부분을 채워주지만 이거 믿어도 되나 싶은것들이 상당수