본문 바로가기

분류 전체보기

(12)
BASE란? ACID와 대조적으로 가용성과 성능을 중시하는 특성을 가진 분산 시스템의 특성 Basically Available 가용성을 중시, Optimistic Locking 및 큐 사용 다수의 실패에도 가용성을 보장, 다수의 스토리지에 복사본 저장 기본적으로 Available 하다 Soft-state 사용자가 관리(refresh, modify) 하지 않으면 데이터가 expire 될 수도 있다. 노드의 상태는 외부에서 전송된 정보를 통해 결정됨 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신 Eventually consistency 지금 당장은 아니더라도 언젠가는 데이터가 일관성을 가진다. BASE라는 단어는 억지로 만들어낸 느낌이 있는데, 그것은 ACID가 산성을 나타내기 때문에 반대의 개념으로 염기..
Item 49. Consider using inline classes 함수 뿐만 아니라 하나의 값만 가지고 있는 객체는 inline으로 나타낼 수 있다. inline class Name(proivate val value: String) { // ... } 이러한 클래스는 가능한 경우에 언제든 변경될 수 있다. val name: Name = Name("Marcin") // During compilation replaced with code similar to: val name: String = "Marcin" inline class Name(private val value: String) { // ... fun greet() { print("Hello, I am $value") } } // Code val name: Name = Name("Marcin") name.greet..
Item 42: Respect the contract of equals Kotlin에서는 java의 object와 같이 모든 객체는 Any를 상속받는다. 이 Any에는 몇가지 잘 설계된 contract들이 있다. - equals - hashCode - toString Equality Kotlin에서는 2가지의 Equality가 있다. - Structural equality equals method나 == 연산자를 통해 체크가 된다. a == b는 a.equals(b)와 같다. (nullable이면 a?.equals(b) ?: (b === null) - Referential equality === 연산자를 통해 체크된다. 양 쪽이 같은 오브젝트를 가리킬 때만 true를 return한다. equals는 Any에 구현되어 있기 때문에 모든 객체에서 사용가능하지만 다른 타입의 객체..
Item 35: Consider defining a DSL for complex object creation Kotlin의 기능들은 Domain Specific Language (DSL)을 만드는 데에 도움을 준다. 이러한 DSL은 복잡한 object 혹은 계층적인 구조의 object를 만들 때 유용하다. 이것들은 정의하기는 쉽지 않지만, 한 번 정의해두면 보일러플레이트나 복잡도를 없애주고 개발자의 의도를 명확하게 드러내준다. DSL을 사용하는 다양한 예시가 있지만, 그 중 많이 사용하는 Gradle DSL을 Gradle configuration을 정의할 때 사용할 수 있다. 복잡하고 계층적인 데이터 구조를 만드는 것이 DSL로 더 쉬워졌다. DSL에서도 코틀린이 제공하는 모든 것들을 사용할 수 있고, Groovy와는 다르게 type-safe하다. 자기만의 DSL 정의하기 DSL을 만들기 전에 함수 타입의 개념..
Item 28: Specify API stability 매번 다른 인터페이스와 마주하게 된다면 어렵고 힘들 것이다. 이는 프로그래밍에도 똑같다. 그래서 안정적이고 표준적인 Application Programming Interface (API)가 필요하다. 1. API가 바뀌고 개발자들이 update를 받으면, 그들의 코드를 수동으로 수정해야한다. 이 API에 여러 의존적인 요소들이 많으면 문제가 될 가능성이 높다. 외부 라이브러리로 제공될 경우 어디서 어떻게 사용하는지 모르기 때문에 힘들다. 유저 입장에서도 라이브러리의 API가 조금 바뀌면 사용하는 코드의 많은 곳을 수정해야할 수도 있다. 유저가 이러한 변화를 꺼리면 예전 버전을 오랫동안 사용하게 된다. 오래된 버전을 사용하게 되면 나중에는 업데이트를 하는 것이 점점 더 어려워지는 악순환으로 이어진다. 2...
Item 21: Use property delegation to extract common property patterns 코드 재사용을 지원하도록 코틀린이 소개한 한 가지 새로운 기능은 Property delegation이다. 이를 사용한 두 가지 예시를 살펴보자. 첫 번째로 코틀린에서는 stdlib 내부에 lazy라는 함수가 있다. 이것은 lazy property pattern을 구현한 property delegate를 return 한다. val value by lazy { createValue() } 이렇게 사용하면 value라는 property가 사용되는 시점에 createValue가 호출된 뒤에 초기화 된다. 두 번째는 observer 패턴이다. 안에 있는 데이터가 바뀌면 그에 맞춰서 item들을 다시 그려야 하는 상황이 있거나 모든 변화에 대한 로그를 남겨야한다고 생각해보면 stdlib의 observable 패턴을..
PropTypes https://jistol.github.io/frontend/2018/12/03/react-proptypes/ (React) PropTypes 사용방법과 종류 · Jistol Github Page (React) PropTypes 사용방법과 종류 03 Dec 2018 | es6 react javascript React Component의 prop값을 검증하기 위해 PropTypes를 이용하여 값을 지정할 수 있습니다. React v15.5부터 다른 패키지로 변경되었는데 ‘prop-types’라이브러리를 사용하라고 권고하고 있습니다. 사용방법 import React, { Component } from 'react'; import PropTypes fr jistol.github.io https://medium..
Apache Kafka https://epicdevs.com/17 [Apache Kafka] 1. 소개및 아키텍처 정리 Apache Kafka(아파치 카프카)는 LinkedIn에서 개발된 분산 메시징 시스템으로써 2011년에 오픈소스로 공개되었다. 대용량의 실시간 로그처리에 특화된 아키텍처 설계를 통하여 기존 메시징 시스템보다 우수한 TPS.. epicdevs.com https://medium.com/@umanking/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%98%EA%B8%B0%EC%A0%84%EC%97%90-%EB%A8%BC%EC%A0%80-data%EC%97%90-%EB%8C%80%ED..