일시: 2017.02.21 19:00
장소: 삼성역 3번출구 Google Campus Seoul
18:50 ~ 19:10 Intro
19:10 ~ 19:30 Welcome Speech
19:30 ~ 20:15 Tech Session 1
20:15 ~ 21:00 Tech Session 2
21:00 ~ 22:10 Dinner With Beer
세션 외 내용
쿠팡 개발팀 일부에서는 데이터 일관성 및 마이그레이션을 위해 Flyway 를 사용한다고 합니다. (당사자 Flyway 관련 포스팅)
리뷰는 GitLab 에서 하는데 속도 빼고는 나쁘지 않다고 하네요(Upsource 영업하고 왔습니다!)
MSA(MicroService Architecture) 도입 중이라고 합니다
Tech Session 1
Event Sourcing & CQRS
Event Sourcing 은 시스템에 관련된 모든 이력을 보관하고 과거의 상태를 손쉽게 복구할 수 있는 패턴입니다.
애플리케이션 내에서 가능한 모든 액티비티들을 이벤트로 전환해서 별도의 이벤트 스트림디비에 저장하는 방식입니다.
모든 상태 변경을 도메인 이벤트로 표현해야 하며, 이 이벤트가 발생할 때마다 이벤트를 별도의 저장소에 저장합니다.
이 과정이 제대로 이루어진다고 가정할 때
서버의 상태를 재 구축, 과거의 상태를 조회, 오류가 발생했을 때 오류가 발생한 시점의 이벤트를 역주행하여 자동으로 복구시키는 등의 작업을 수행 할 수 있습니다.
애플리케이션에서 컨트롤하는 각각의 저장소는
Event Store, (CQRS)View Model 입니다.
Event Store 는 Queue 의 특징을 가지고 있습니다. Event Replay 를 수행하게 되면 과거의 이벤트부터 현재 상태까지 이벤트를 리플레이해주는 FIFO 구조이기 때문입니다.
이 모델에서 특정 데이터의 현재 상태를 구하려면 과거의 이벤트부터 마지막 이벤트까지 모두수행해야 하는 불상사가 발생하는데, 이를 보완하기 위해서 일정 이벤트 개수 혹은 구간마다 스냅샷을 찍어 놓습니다.
데이터를 조회할때 스냅샷 데이터로부터 마지막 이벤트까지 수행하면 현재의 데이터가 되는거지요.
하지만 이것만으로도 성능 자체는 기존의 방법과 너무 차이가 나기 때문에 반강제로 도입된게 오직 조회만을 위해 존재하는 저장소, CQRS 입니다.
CQRS 는 Event Sourcing 에 국한된 것이 아닌 Command Query Responsibility Segregation 이라는 패턴일 뿐입니다.
명령과 쿼리를 분리하자는 의견에서 시작된 패턴이며 Event Sourcing 에 적용하게 되면 Event Store(명령) 와 Query Store(쿼리) 로 분리할 수 있습니다.
이제 CQRS 를 적용하였으므로 가지고 있던 문제가 어느정도 해결되었습니다.
Event Sourcing 의 단점은 명확합니다.
단순 작업에도 도메인 이벤트가 적용되어 이벤트 스토어를 거치고 쿼리 모델에 입력되는 등 작은 작업에도 많은 과정을 거쳐야 하기에 단순 모델에 적합하지 않습니다. 또한 패턴이 제안된지 얼마 되지 않았기 때문에 도구도 부족하고 기술 자체가 성숙되지 못하였습니다.
그래서 그런지 지금의 시점에서 실 사용하는 제품은 찾기 힘들고 예시라고 해봤자 몇몇 개발자들의 toy 프로젝트밖에 없다고 합니다.
하지만 그에비해 장점도 확실하기 때문에 도입이 아니더라도 개념만 어느정도 가져다 쓰는건 고려해볼 만한 패턴인 것 같습니다.
Tech Session 2
Spock Framework
Spock 은 공식 홈페이지에 레퍼런스가 굉장히 잘 되어있습니다.
공식 홈페이지: http://spockframework.org/spock/docs/1.1-rc-3/index.html
웹 콘솔: http://meetspock.appspot.com/
이 프레임워크는 JUnit 의 확장이라고 합니다.
Java 문법을 기반으로 한 Groovy 로 작성되었으며
때문에 Java 문법으로 작성해도 별 상관이 없다고 합니다.
하지만 그러면 Spock 을 쓰는 의미가 없는것,
Spock 사용을 위해서는 *.groovy 문서를 만들어주고,
Specification 클래스를 extend 해주고 테스트케이스를 작성해주면 됩니다.
테스트 케이스 작성 문법이 극도로 직관적이고 간단합니다.
assert 문을 사용하지 않아도 then: 이하 절에 대해 Spock Framework 가 boolean 으로 컴파일하여 사용합니다.
예제 및 설명은 공식 홈페이지에 많이 나와있지만 그 중에서 많이 인상적이였던 예제들을 소개합니다.
데이터 드리븐 테스트 |
def "maximum of two numbers"(int a, int b, int c) { where:
|
---|
인터렉션 베이스 테스트 |
|
---|
위에서도 언급했지만 레퍼런스가 굉장히 잘되있기 때문에 자세한 내용은 홈페이지에서. PHP 에 이렇게 편한게 없다는게 한입니다..
'it > information' 카테고리의 다른 글
NDC 2018 리뷰 (0) | 2018.10.30 |
---|---|
실전 UX 능력 강화로 성공하는 서비스 만들기 - 강의자 토크 - 세상은 어떻게 진화해 가고 있는가? (0) | 2018.10.30 |
교육 - 실전 UX 능력 강화로 성공하는 서비스 만들기 (0) | 2018.10.30 |