Monthly Archives: May 2017

워드프레스 데이터베이스스키마명 변경하고싶을때

스키마를 하나 새로 만들고
하나하나옮겨줘야한다.

mysqldump를 사용하는방법도 있고 이게 간편한것같다.
디렉토리명을 변경할수도 있을 것 같은데.. 메타데이터를 찾아서 바꿔주면… 위치를 정확히 몰라서 노가다로 처리했다.

플러그인 설치한게 더 있다면 테이블이 더 많을수도있고….
여기서도 이름이상한 몇개는 플러그인에서 생성한 테이블인것같다

RENAME TABLE {original_schema}.wp_commentmeta TO {new_schema}.wp_commentmeta;
RENAME TABLE {original_schema}.wp_comments TO {new_schema}.wp_comments;
RENAME TABLE {original_schema}.wp_cpd_counter TO {new_schema}.wp_cpd_counter;
RENAME TABLE {original_schema}.wp_icl_string_translations TO {new_schema}.wp_icl_string_translations;
RENAME TABLE {original_schema}.wp_icl_strings TO {new_schema}.wp_icl_strings;
RENAME TABLE {original_schema}.wp_links TO {new_schema}.wp_links;
RENAME TABLE {original_schema}.wp_multilingual_linked TO {new_schema}.wp_multilingual_linked;
RENAME TABLE {original_schema}.wp_options TO {new_schema}.wp_options;
RENAME TABLE {original_schema}.wp_postmeta TO {new_schema}.wp_postmeta;
RENAME TABLE {original_schema}.wp_posts TO {new_schema}.wp_posts;

RENAME TABLE {original_schema}.wp_term_relationships TO {new_schema}.wp_term_relationships;
RENAME TABLE {original_schema}.wp_term_taxonomy TO {new_schema}.wp_term_taxonomy;
RENAME TABLE {original_schema}.wp_termmeta TO {new_schema}.wp_termmeta;
RENAME TABLE {original_schema}.wp_terms TO {new_schema}.wp_terms;
RENAME TABLE {original_schema}.wp_usermeta TO {new_schema}.wp_usermeta;
RENAME TABLE {original_schema}.wp_users TO {new_schema}.wp_users;

FrontEnd개발 – Angular2 개발시작

node 기술혐오

node진영은 비슷한 기술이 너무 많아 선택장애가 생긴다.

angular, react, backbone, ember polymer

왓 시바 다섯개다.

https://gist.github.com/makmanalp/9b7f50aa16d21c2f9d37

당신이 ~~를 선택해야 하는 이유같은 글 많이 읽어봤는데 뭐 다 비슷했다.
결국, 구글과 TypeScript 때문에 Angular를 선택

(처음 나올때는 angularJS였는데 이제 TypeScript를 쓰고 앱을 만들때도 쓰기 때문일까…
영역을 확장하기 위해 Angular라고 이름이 바뀐 것 같다.)

Angular2 설치과정


npm -g install @angular/cli

이렇게 하면 설치가 된다고 하는데… 그리고 분명 되어야 하는데… 먼가 오류가 난다.
뭔가 이상했는데

node -v
0.xx

윈도우에서도 다시 설치하면서 찾아보니 2013년이었나..?
node 가 주력이 아닌 사람들은 다들 비슷한 상황일거다.

이거보고 삭제진행(Mac)
http://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x

아래 명령 둘중에서 하나 실행시키면 되는데.. 오타나면 컴퓨터가 맛이갈수도 있겠다.

$ sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

$ sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/dtrace/node.d ~/.npm ~/.node-gyp /opt/local/bin/node opt/local/include/node /opt/local/lib/node_modules

한다음에 공식사이트에서 재설치했다.
https://nodejs.org

튜토리얼 진행

https://angular.io/docs/ts/latest/cli-quickstart.html


npm install -g @angular/cli

ng new my-app

angur2 기본프로젝트를 생성하고 나니….

의존성 관리를 npm으로 하고 karma라는게 깔린다.
빌드는 ng-cli가 하는 것 같고…

그리고 모르는게 추가돼있다.

karma, e2e ???

karma는 자바스크립트 테스트 러너 라고 한다
https://blog.outsider.ne.kr/1020

e2e도 유닛테스트 관련 프레임워크인 것 같다.

Anguar개발에 익숙해지고 최적환경을 구성하려면 시간이 좀 더 걸릴 듯 하다.

서버단이 아닌 프론트엔드 라이브러리가 npm에서 싸잡아 관리되는게 못마땅하니
Bower를 적용해야겠고
빌드도 일관성을 위해 gulp를 적용하는게 나을지 npm을 써야할지

며칠지나서 다시보니
bower는 Deprecated된 것 같다.
gulp, grunt도 대세에서 밀려난 것 같은데…
빌더가 아닌 Bundler라는 개념으로 webpack이 사용되고
의존성관리는 yarn과 npm으로 하고 있다.
yarn과 npm은 기능이 중복되는것같은데 왜 따로 있는건지

Thymleaf 적용중 만난 오류들

템플릿 소스 가지고 쓰는데…

`

Thymleaf 되게 엄격하군.

쓸데없을 정도로..

안써야겠다 역시.

CQRS와 EventSourcing 기술을 보고

CQRS와 EventSourcing제대로 이해를 했나 모르겠는데

비슷한 생각을 하고 그런 설계를 잡으려고 했었는데,
당시에는 Hibernate ORM Envers라는게 있는줄 몰라서…
그 때의 설계는
ORM을 이용한 도메인 설계를 그대로 화면에 보여줄 수 있도록 하고 히스토리는 별도로 저장하는 구조였다.

)를 들어 회원정보 엔티티에서
level 변동, password 변경 등에 대한 히스토리 저장이 필요하다.

RDBMS에서는 다음 엔티티의 현재상태만 저장

UserEntity {
username : string
password : string
passwordChangeDate : date
email : ref EmailEntity
level : type { bronze, silver, gold, platinum, diamond, challenger }
lastLoginDate : date
}

로그는 별도 디비 또는 파일로 관리.
user-password-change-history (password, passwordChangeDate)
user-level-change-history
user-lastLoginDate-history

이런방식으로 현재상태와 변경상태를 저장한다.
변경히스토리를 저장하는 부분을 하나하나코딩하면 안되고,
하이버네이트 인터셉터라던가 해서 데이터변경을 확인하고 로그를 남기도록 하는 추가기능이 필요하다.

이렇게 하는 경우 RDBMS의 데이터가 메인이기 때문에 변경기록이 남지 않게 되는 상황이 생길수도 있다. 중요한 데이터는 트랜잭션을 걸면 느려
계좌 밸런스를 저장하는걸 예로들걸 그랬나

지금 CQRS컨셉으로 제시하는 것을 보면 현재상태는 메모리디비같은데 저장하는 것 같은데 소규모시스템에서 생각 해 보면
RDBMS에 현재상태를 몽땅저장하는게 괜찮아보인다.

이정도로 중규모까지는 사용가능 해 보인다.

RDBMS의 업데이트를 과도하게 사용하는 부분이 문제가 되긴 할텐데…

어쨌든.. envers쓰면 쉽게 된다.
http://hibernate.org/orm/envers/
….
잘도 만들어 놨다. 이걸 왜 못찾았을까 좀만 더 찾아볼걸

MSA의 시대, 다시 주목받을 RPC

RPC : Remote Process Call 진영은

몇년째 딱 대표적인 기술이 떠오르지 않고 고만고만하게 유지되고 있다.

개인적으로 RPC가 더 편하다고 생각하는데, RestAPI가 너무 대세가 되서 인기를 잃어버려 아쉽다.

아니 먼 RestAPI 데이터를 브라우저로 봐서 뭐한다고?!?~!

지금당장 기억나는것은 이정도….

Thrift
Avro
gRPC
ProtocolBuffer
BSon

완전 RPC라고 하기는 좀 그런 시리얼라이징 기술도 넓게 보면 RPC아닐까…
아니 그냥 RPC인가? 그냥 다 포함시켰다.

아직까지는 연동 API 제공 한다고 하면 당연하다는 듯이 RestAPI를 제공한다.

API는 다양한 문제점을 가지고 있고 기술적으로 열등하기 때문에 점점 사용률이 낮아질거라고 본다.

표준기술로 사랑받아왔던 RestAPI의 문제점들

  • 무거운 http api만드는데 http를 돌리는데 코스트낭비가
  • 너무 자유로운 설계 json을 ?params=%XX%XX 형태로 받는 경우도 있고
  • http1 프로토콜에서 낭비되는 네트워크 리소스 http2로 사용하면 좀 더 낫긴하겠지만..

웹기반 기술에서는 계속 사용되겠지만 MicroService가 등장하며 내부 네트워크 부하가 더 심해지는판에.. 이걸 계속써야할까?

아니

여태까지는 아키텍처/UX까지 Request후 Response를 기다리는 형태로 설계가 되었으니 RestAPI를 써도 불편한줄을 몰랐다

async환경으로 변화는… 패러다임의 변화다. 설계까지 변경된다.

변화의 조짐은 보인다.

요즘 유행하는 기술 트렌드를 보면

MSA, Async, Functional Programming

이정도… 그리고 이런 트렌드가 지속/확대 된다고 봐도 될 것 같다.

왜냐? 작은조직의 효율적 개발, 클라우드환경, 늘어나는 네트워크 트래픽 등등의 상화을 봤을때 방향성이 그쪽을 향하고 있으니까…

새로운 트렌드는

MicroService사이의 통신을 위한 가벼운 프로토콜 + MQ(MessageQueue) 클러스터를 이용한 내부 통신채널 일원화 + Functional Programming을 통한 Async방식 개발

이 될 것이고

MQ를 이용한 Async프로그래밍을 도와주는 프레임워크이 등장하면서 RPC 사용이 활발해질 것이다.

이직후에 프레임워크 만들면서 쓸만해보이면 공개나 해볼까…

MS의 Cloud Design Pattern 24선. (CQRS, EventSourcing … etc)

원문 링크 : https://docs.microsoft.com/en-us/azure/architecture/patterns/

MS에서 발표한 Cloud 에서 적용하면 좋은 디자인 패턴

(for Azure, 다른 Cloud도 가능)

그중에서 요즘 관심을 끄는것은 CQRS와 EventSourcing
정확히 이해는 못했는데

DDD구현의 문제를 해결
CRUD가 분산환경에서 갖는 문제점(고가용성 서버한계)
때문에 나왔다.

아주 간단히 하면 이정도인듯 하다.
StreamData처리하는것과 비슷한건가 좀 더 봐야할 것 같고.

구글에서 CQRS로 검색하면 한글로 번역된 문서도 좀 있다.

[번역] 최신 기술 – CQRS 처음 도입하기

시간이 되면 원문을…

Command Query Responsibility Segregation
https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs

https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing

프레임워크도 나와있다

Axon : www.axonframework.org

Reveno : reveno.org

Eventuate : eventuate.io

Lagom : www.lagomframework.com

다들 쉽고 빠르고 분산가능하다고 써있는데 안써봤다.

기타 참고할만한 문서

Introduction to Domain Driven Design, CQRS and Event Sourcing