Monthly Archives: October 2018

Error:

에러로그

mvn test 실행시 ..라기보단 메이븐 빌드 자체가 안되는데

원인

모름

영문을 모르겠네.. 의존성 문제 아닌 것 같은게 노트북에서는 잘되니까

둘다 ubuntu 18.04, openjdk1.8, sdkman 이용 환경설치

노트북은 i5 8th. ram 8G sdd512 ubuntu 18.04 lenovo ideapad 320s

문제의 테스크탑은 amd ryzen 2700x? ram 32g 128ssd ubuntu 18.04

하드웨어 사양을 왜 썼냐면… 멀티코어 때문에 생기는 문제가 아닌가 싶어서

해결

못함

MSA 에서 GW의 역할 아키텍처

Microservice-Architecture-API-Gateway-Consideration.pdf 에서 보고
https://www.globallogic.com/wp-content/uploads/2017/08/Microservice-Architecture-API-Gateway-Considerations.pdf

구조

PDF에서 그림참고
client가 oauth2로 auth server에서 accesstoken을 얻어서 gw에 접근.
gw에서는 auth server에 accesstoken 검증받고 jwt토큰발급
jwt토큰이용 내부 MS에 접근

내가 생각하고 있던 jwt의 용법과 조금 달라서… 잘못알고 있었다고 봐야될까
외부의 앱에서도 jwt토큰을 사용하려고 했는데.. 시간제한걸고 해서
생각 해보니 이렇게 하면 access token하고 다를게 없는 것 같다.
이 문서에 있는 방법이 더 좋아보인다. jwt는 신뢰할 수 있는 서버간 통신용
배포시점에서 api 버전별로 jwt 토큰 secret을 공유해줘야할 것 같다.

DDOS방어

  • 접근횟수 제어: 세번이상때리는놈 막아버린다던가
  • 커넥션 제한: 서비스 종류에따라 다르겠지만 api를 100개씩 호출하는거 금지
  • 느린커넥션 제한: 소켓 열어놓고 안닫고 도망가는 경우가 많은데 이런거 강제종류 30초
  • IPBlockList/WhiteList
  • 요청 거부: User-Agent 헤더 들고오는놈, referret 헤더 들고오는놈, header에 값 잔뜩 달고오는놈 

Secure Communication

내부 rest api도 https사용
private 서브넷 이용
안될경우 token인증??

서비스 등록과 서비스 찾기

Service Registry

MS instance가 실행될 때 자동등록. eureka

Service Discovery

api gateway에서 eureka에 접근해서 찾기
ribbon으로 부하조절

Orchestration

MS가 MS를 요청하는 경우를 말하는건가?
바로 요청할지 GW를 거칠지? 그림은 좀 다른데?

  1. Client – GW – MS – MS
    1. Client – GW- MS – GW – MS
  2. Client – GW -MS

1번은 내부에서 내부를 중복호출하는경우. 1-1도 같은구조로 봐야할 것 같다
2번은 1단계 호출만 존재

Monitoring

MSA는 모니터링이 없으면 오류가 어디서 났는지 알기 힘들다.
각 서비스별 로그수집, 헬스체크가 필수

Health Monitoring

서버 죽었나 살았나

Traffic and Data Monitoring

데이터 네트워크 사용량??

Load Balancing and Scaling

API GW로 L.B.를 달아준다. 끝?
롤링배포하라구?

High Availablility and Failover

stateless – nosession

Intellij Idea – http api 테스트

intellij idea에서 자체적으로 http client를 제공하는데
*.http 파일에 설정해놓고 사용 가능하다.
postman도 공유 export 등등 다 가능하지만 소스코드에 넣어놓고 프로젝트별로 공유할 때는 이게 좀 더 편하다.

특히 API 만들때

남의 API 쓸 때 : Postman

사용법

예제보기

Tools – HttpClient – Open HTTP Requests Collection

파일생성

오른쪽클릭 – New – Http Request

[도서] 해커와 화가 – 비아웹?? 창업자의 글 모음

비아웹.. 야후에 팔렸다는데 잘 모르겠다.
비싸게 팔렸겠지?

성공한 벤처기업인이라 그런지… 아니면 이런 사람이라 성공한 사업가가 될 수 있었던건지.. 
경제인의 시야를 가지고 있다. 공돌이가 아닌

근원적인 가치를 부로 정의하고 영어로는 wealth라고 썼을래나..
money,화폐,돈과 구분해서 생각할 줄 아는

나는 에너지와 혁신을 경제발전의 근원?으로 보고 있었는데 나만 그런건 아니었나 싶다.
미국에는 이런 생각을 가진 사람이 많은건가

리습

  1. 조건문conditional – if then else
  2. 함수의 타입function type – 함수도 변수처럼 타입
  3. 재귀 recursion
  4. 동적 타이핑 dynamic typing – 모든변수는 궁극적으로 포인터, 변수가 아니라 값, 변수 할당은포인터 자체를 복사
  5. 가비지 컬렉션 garbage collection
  6. 표현으로 이루어진 프로그램 
  7. 심볼 타입 symbol type – 문자열을 가리키는 포인터
  8. 심볼과 상수의 트리를 이용하는 코드를 위한 표기 방식 notation 
  9. 언어 전체를 계속 사용할 수 있음 – 읽는시간, 컴파일하는시간, 실행시간에 대한 구분이 없어서 동시에 실행 가능

매크로.. 뭔지 이해가..

리습존니짱. 개좋아.

lisp계열 clojure는 몇번이나 도전을 했는데… 중도포기의 연속..

요즘 시간을 내서 작은 모듈이라도 만들어보려고 하는데 잘 될까?

Chef 쓰지마! 절대로!

프로비저닝 툴

chef, puppet, ansible, saltstack …

을 쓰는 이유

편하기 위해서 – 환경을 코드로 관리하기 위해서

여기서 여러OS를 지원해야 하는 이슈가 있는지는 잘 모르겠다. 한 회사에서 사용하는 OS는 굉장히 제한적이라서 사실 여러OS 제공은 오픈소스 차원의 문제로 넘어가지 않을까?

여러개의 서버를 관리 해 주는 기능도 유효하지만.. 이게 매니징 서버를 꼭 거쳐야만 한다면 좀 불편함이 생긴다.

Chef는 왜 악한가

프로비저닝 툴은 보통 여러OS 여러버전에 대한 설정을 커뮤니티에 공유하고 사용하는게 장점인데… chef는 화력이 너무 분산된달까?

한명한명이 자기 설정을 자기만의 방법으로 supermarket.chef.io에 납품을 해놨다.

docker, vagrant 같은 경우는 official 이미지가 존재한다. 커뮤니티의 화력은 이쪽으로 집중되서 오류가 수정되고 개선된다. 자기만의 이미지를 만들기도 하지만 그래도 표준은 저쪽이다.. official에서 커스터마이징을 해서 쓴다.

Ruby 언어의 문제 

ruby 언어는 자유롭다.
설정도 하는사람에 따라 너무 다양하게 나온다.
버전 호환성
Gem, OS, Chef 뭔가 버전 충돌이 나는데…
chef의 복잡성은 bundle가지고 해결할 수준을 넘어선 것 같다.

~

이래저래 경쟁에서 밀린 기술이라 커뮤니티도 죽고
ansible이나 saltstack이 주류로 자리잡은 것 같다.

그나마도 클라우드랑 컨테이너 때문에 찬밥이지만… 조금은 나은 처지인 것 같다.

[도서] Chef Solo 입문 : 인프라스트럭처 자동화 프레임워크 – 뒤늦은 완독

기술서도 완독이라는 표현을 쓰나? 잘 안쓰는 것 같기도 하고..

클라우드가 나와서 일반 개발자가 직접 인프라를 운영해서 kubernetes, hadoop 등등 클러스터를 대규모로 운영할 일은 잘 없다보니.. 인기가 많이 식었지만

개발피씨, 개발서버, local vagrant 등을 설정할 때는 여전히 유용할 것 같다.

좀 사양기술이기도 하고 책도 옛날거라 예제도 다 오류나서 해서 안보려고 했는데, vagrant 개발환경 구성하다가 왠지 chef를 적용 해 보고 싶어서 다시 보기 시작했다.
보통은 docker를 쓰는데 이번엔 몇개 프로젝트 함께 돌리는거라 프로젝트별로 설정 해 놓은 docker를 쓰기는 좀 껄끄러운 상황…
아닌가? 그냥 vagrant를 쓰고 싶었다.

옛날버전이라 책으로는 개념만 익히고 웹튜토리얼이랑 도큐먼트쪽 명령어 찾아 보면서 공부할 수 밖에 없었는데 그러다 보니 시간이 많이 걸렸다.(이틀정도..)

chef 공부하기 힘든 이유가 몇 가지 있다

  • 개념이 뒤죽박죽… chef-solo chef-client –local-mode 비슷한게 섞여있고
  • 용어는 지맘대로.. 들어도 뭔지 모름 chef, kitchen, knife
  • 버전업하면서 legacy 다 바뀜

이런 난관을 넘고 vagrant 정도는 chef로 설정할 수 있게 되어 버렸다.ㅎ

이제 안쓸수가 없군.

추가로

Chef, 클라우드 서비스 설정관리 자동화 도구.

라는 책도 있는데 이건 되는게 더없고 개념이해도 더 힘들다.
두꺼운 책이 오류나니까 더 답도없다.
(책이 처음 쓰여질때는 오류가 아니었겠지 deprecated책이라)

절대 사서 보지 말기 바람.

시스템 트레이딩 – 시계열 데이터 TimeSeries Data 저장

데이터 분석 – 옛날

시계열 데이터 저장

예전에는 증권데이터를 저장할 마땅한 방법이 없었다.

처음에는 MS SQL에 저장을 했었는데… 젠장. 다음날까지 insert를 하고 있다.
트랜잭션, 벌크인서트 쿼리, 인덱스변경 여러가지 해 봤지만… 별 차이는 없었다.
이 때 처음 알게 됐다. 디비에 파일을 넣는게 바로바로 쏙쏙 들어가는게 아니군.

파일에 저장을 해 봤다.
2018/10/12/000060.dat 이렇게계층형으로 저장을 했는데 이게 관리가 힘들다. 검색도 힘들고… 순차적으로 로딩만 하면 되는데

시계열 데이터 분석

실시간 데이터를 분석할 방법은 많이 보였다.

당시 Marketcetera, Streambase, Esper 등의 CEP툴들.. RuleEngine.

근데 뭐.. 저장할 방법이 없으니 쓸모가 없었다. 이것들도 딱히 쓰기 좋게 잘 나와 있지도 않았고

그래서 뭔가를 만들었나?

아니. 그냥 몇년 기다렸다.

그랬더니 역시 뭔가 나왔다.

데이터 분석 – 최근

Hadoop, HDFS, Hbase 하둡이 나오고 막 발전하기 시작하더니

Spark, Storm, Cassandra, OpenTSDB, Prometheus 등 다양한 방법이 나오기 시작했다.

Minio, Ceph, …

다양한게 나왔는데.. 너무 난립 해 있어서 오히려 머리가 아플 지경이다.

한개가 압도적으로 좋으면고민도 안 할텐데

배치분석 : Map Reduce, Spark

실시간 분석 : Storm, Spark

컬럼디비 : Cassandra, HBase

시계열디비 : OpenTSDB, Prometheus, InfluxDB, vaultaire, Riak, Whisper(graphite)

파일저장소 : minio, HDFS, ceph

로그 수집 : Fluentd, Flume, Logstash, Scribe

MQ : RabbitMQ, Kafka

기타 : ZooKeeper

이 중에서 한개만 고르면 땡인 것도 아니다. 이것들끼리 의존관계가 얽혀서…

고민되는 부분

ceph를 쓰면 vaultaire와 hadoop, hbase의 backend로도 쓸 수 있다.
비공식 플러그인 지원이라서 좀 문제가 발생할 가능성도 있다.
로그저장. 파일저장도 할 수 있고.
설치가 쉽진 않다.
hdfs보다 좀 더 활발하게 사용되는 것 같기도 하고…

hdfs를 쓰면 hbase, opentsdb, map reduct … 이렇게 자연스럽게 연결. 
레퍼런스가 많다.

aws, gcp를 써도 되지만… 월비용 10만원을 넘을 때 까지는 집에서 운영하고싶은 생각에..

지금 중학생이면 얼마나 좋을까…

사용기술 선정

Spark – 배치분석, 머신러닝돌리기 좋고 호환이 잘된다. 레퍼런스도 많다.
Storm – 실시간 분석, 스파크는 완전실시간이 아닌 마이크로 배치. 조금 다르다. 일단 사용 후 필요한지 검증.
HDFS – 오브젝트저장소, 호환성이 좋다. 성능도 나쁘지 않다.
HBase – 컬럼DB, HDFS를 백엔드로 사용한다. ceph를 쓸 수도 있지만 기본옵션으로 쓰는게 속편하다.
OpenTDSB – 백엔드 저장소로 Cassandra, HBase, GoogleBigtable을 사용.
Fluentd – 로그수집, 가볍고 간단하다.
Kafka – MQ. RabbitMQ도 나쁘진 않지만.. 하둡 쓸 때는 Kafka 쓰는거다. 분산형으로 사용하기 더 좋다는 결과를 본 것 같다. 호환성은 RabbitMQ가 더 좋았던 것 같은데..
Minio – 파일저장소. 오브젝트는 제외. 파일 저장소로 사용.

ㅃㄲ(빅)데이터는 마케팅 용어다

씨잇팔 삑데이터 더럽게 좋아하네

빅데이터 국비교육 과정이고 빅데이터 젛문가고 삑떼이터 분석이고

여기저기 빅데이터 엄청 들먹인다.

토끼뉴스 빅데이터 분석이니 트위터 빅데이터 분석이니

뉴스 중간에도 어디선가 빅데이터 분석을 했다고 하고

빅데이터 전문가라는 사람이 나와서 뭔 설명을 해준다

빅데이터. 이건 그냥 마케팅 용어다.

삑떼이터 용어가 처음 유행한게 2012년경인가?
4차산업혁명이나 유비쿼터스 스마트시티 등등처럼 실체가 불분명한 마케팅 용어에 불과하다.

데이터 분석은 계속 있어왔고 계속 있을건데

빅데이터라는 개념때문에 시대가 갈라지진 않는다. 어차피 데이터 분석 잘 하던 사람은 빅데이터 분석도 잘 한다.

빅데이터 분석 플랫폼/솔루션이 따로 있기는 하지만 어차피 중요한 것은 시스템관리능력과 통계지식 등등이니까 변하는 것은 없다.

약간 다른점

하둡, 카산드라, 스파크 등 분산형 디비/분석툴 등등이 개발됐다. 그 전까지는 슈퍼컴퓨터로 하던 일들..

Object Storage 비교 – minio, ceph …

용도

예전에는 서버를 여러개 띄우면 /upload 경로에 nas를 마운트해서 사용했을거다.
요즘은 앱 배포시 서버리스나 컨테이너를 많이 사용하면서 서버에 직접 파일을 업로드 하는경우가 더 없어져서 스토리지를 별도로 사용해야 한다.

덤으로 대용량 로그파일도 저장하고 빅데이터 분석플랫폼에서 쉽게 가져와서 돌릴 수도 있다.

종류

  • 설치형
    • minio
      (https://www.minio.io)
    • ceph
      (https://ceph.com)
    • Red Hat OpenShift
      (https://www.redhat.com/ko/technologies/cloud-computing/openshift-container-storage)
    • HDFS
      하둡 파일시스템
    • infinit storage
      ??망했나
  • 클라우드 On demand
    • gcs(Google Cloud Storage)
    • aws(s3)

용도도 각각 다르고 성능도 다르고 해서 아무데나 막 쓸 수는 없다.
대강 써도 어느정도 성능은 나오긴 할텐데
아직 기술이 초기라서 그런지 딱히 좋은 자료가 안 보인다.

선택

minio, ceph 중에 하나를 쓸 것 같다.
성능이야 다 개선되고 있는 중이고 서로 다 좋다고 하니 써 봐야 알 것 같다.
일단 쓰기 편한건 두가지다.
용도는

  • 로그파일 저장
  • 이미지 업로드, 파일업로드 백엔드

minio는 설치가 편하다. docker 기반으로 실행도 가능.
ceph는 엔터프라이즈 서비스에서도 적용사례가 있는 것 같다. 설치는 조금 더 복잡할 것 같다.

어차피 개발중이니 minio를 먼저 써 보고 문제가 생기면 검토 해 보는걸로