전체 글
-
[데이터 중심 애플리케이션 설계] BASE와 ACID📚 개발 도서/데이터 중심 애플리케이션 설계 2023. 4. 12. 00:04
BASEBasically Available, Soft State, Eventually Consistent데이터 가용성과 데이터 처리 성능이 향상되도록 한다!Basically Available(가용성) : Master 서버에 장애가 발생해도, 여러 Slave 서버로 인해 무중단 서비스가 가능하다. (가용성을 제공한다.)Soft State(소프트 상태) : 각각의 데이터가 도달한 시점에 데이터가 갱신된다. (유연한 상태를 가진다.)Eventually Consistent(결과적 일관성)→ 시스템 부하 및 네트워크 속도에 따라 서버에 복제하는 시간이 다를 수 있으나, 최종적으로는 모든 서버에 데이터가 복제된다.복제 메커니즘에 의해 모든 서버에 데이터 복제가 동시에 실행될 수 없다.ACIDAtomicity, Co..
-
[Flutter] TabBar, TabBar 정렬📖 개발 공부/flutter 2023. 4. 11. 23:30
DefaultTabController, TabBar, TabBarView를 사용하여 탭을 넣어보자. TabBar DefaultTabController 선택된 탭과 컨텐츠를 동기화하고, 기본 컨텐츠를 유지하려면 TabController가 필요하다. const DefaultTabController({ super.key, required this.length, this.initialIndex = 0, required this.child, this.animationDuration, }) length: 탭의 개수 (필수 파라미터) TabBar Tab Widget 목록 탭을 문자, 아이콘 또는 하위 Widget을 명시할 수 있다. Align( alignment: Alignment.centerLeft, child: ..
-
배포 전략 (Rolling Update, Blue/Green, Canary)📖 개발 공부 2023. 4. 9. 23:37
Rolling Update 구 버전에서 신 버전으로 트래픽을 점진적으로 전환하는 배포이다. 배포되어있는 팟들을 동시에 업데이트하는 것이 아니라 1개, 2개 등 퍼센테이지를 정해 교체해 나가는 방식이다. 즉, 새 버전 인스턴스를 하나씩 늘려가고 기존 버전의 인스턴스를 하나씩 줄여나가는 방식이다. 서비스의 중단이 발생하진 않지만, 서비스가 받는 부하가 커지며 구버전과 신버전이 공존하는 시기가 존재할 수 있는 단점이 있다. 관리가 편하지만 배포 중 한쪽 인스턴스의 수가 감소되므로 서버 처리 용량을 미리 고려해야 한다. 롤링 업데이트를 하기 위해서는 RS(Replica Set)이 2개가 필요하고, replica의 수를 단계적으로 조절해줘야 한다. 배포가 잘못되었을 경우, 롤백을 하기 위해 순서를 거꾸로 실행해야..
-
[Kotlin] sortedBy와 sortedWith의 차이점📖 개발 공부/kotlin 2023. 4. 9. 23:23
sortedBy sortBy는 원본 리스트를 바꾸고, sortedBy는 원본 리스트를 바꾸지 않고 소팅된 리스트를 리턴한다. selector을 지정하면 소팅 기준을 정할 수 있다. strings.sortedBy { it } 페어를 사용할때도 하나의 기준을 두고 정렬하고 싶을 때 사용하면 된다. pair에 접근할 때는 it.first, it.second로 접근하면 된다. 내림차순으로 정렬할 땐 sortedByDescending()을 사용하면 된다. sortedWith 역시 원본 리스트를 바꾸지 않고 소팅된 리스트를 리턴한다. sortedBy()와 다른 점 은 comparator을 지정해서 다중 기준을 둘 수 있다는 점이다.
-
[Kotlin] 범위 지정 함수 apply, let, run, also, with📖 개발 공부/kotlin 2023. 4. 8. 22:26
범위 지정 함수 람다식이 제공된 객체에서 범위 지정 함수를 호출하면 임시 범위(block)가 형성되는데, 이 범위 내에서 객체에 대해 할 작업을 정의할 수 있다. 확장함수는 람다를 인자로 받아 동작하며, 확장함수를 실행하는 주체를 수신자 또는 수신자 객체라고 한다. 특정 객체에 대한 작업을 block 내에 표현하게 되면, 가독성이 증가하게 되고 코드가 더 깔끔해진다는 장점이 있다. 이 함수들은 2가지 구성 요소를 가진다. 수신 객체(receiver): 확장함수를 실행하는 주체 수신 객체 지정 람다(block; lambda with receiver): 범위 지정 함수 함수 간의 차이점 funtion object reference return value is extension function let it L..
-
Eventual Consistency📖 개발 공부 2023. 4. 1. 11:46
분산 시스템을 구성하려면 CAP 이론에 의해 일관성과 가용성 중 하나를 포기해야 하는 상황이 올 수 있다. 다음과 같은 상황을 뜻한다. 클라이언트의 요청을 받았을 때, A 서버 데이터가 변경되면 즉시 다른 서버에 반영되지 않는다. 다음 2가지 경우를 보자. 모든 서버가 같은 데이터를 갖도록(일관성) 동기화하는 동안 클라이언트의 접근을 막는다. → 가용성 문제 다른 클라이언트들이 변경된 데이터를 요청했을 때, 각자 다른 데이터를 받을 수가 있다. → 일관성 문제 2번의 경우, 언젠가 동기화가 되면, 모든 클라이언트가 동일한 데이터를 받아볼 수 있게 된다. 이를 Eventual Consistency 라고 한다. Eventual Consistency Eventual Consitency는 항목이 새롭게 업데이트..
-
[Kotlin] const와 val의 차이📖 개발 공부/kotlin 2023. 4. 1. 11:20
언제든 값을 바꿀 수 있는 var과 초기화하면 값을 바꿀 수 없는 val의 2가지 선언 방법이 존재한다. 또한 상수를 선언할 수 있는 const val 라는 선언이 존재한다. 그렇다면 값을 바꿀 수 없는 val 와 상수를 선언하는 const val 의 차이점은 무엇일까? 바로 "불변성"에 관련한 차이점이다. val 은 값이 런타임 시에 결정되는 상수인데, 이는 독립적인 동일한 프로그램 수행 중에 프로그램 수행에 따라 값이 바뀔 수 있음을 의미한다. 예를 들어 두 숫자를 더한 값을 반환하는 함수를 사용해서 val 값을 정한다고 했을 때, 이 값은 함수의 parameter로 들어가는 숫자에 따라 언제든지 달라질 수 있다. 때문에 val 값은 불완전한 불변성을 가지고 있는 것이다. const val 은 값이 ..
-
[Kafka] Spring Kafka JSON Batch📖 개발 공부/kafka 2023. 3. 26. 16:21
Spring Kafka에서 제공하는 JSON Batch 모드는 Kafka에서 메시지를 읽어올 때, 여러 메시지를 한 번에 읽어와서 처리하는 방식이다. 이를 통해 처리량을 향상시킬 수 있다. JSON Batch 모드를 사용할 경우, Spring Kafka는 지정한 배치 크기만큼 메시지를 읽어와서 리스트로 만들어 준다. 처리가 완료되면, 마지막으로 읽은 메시지의 오프셋을 커밋한다. @KafkaListener( id = "컨슈머 이름", topics = "컨슘할 토픽명 리스트", groupId = "컨슈머 그룹명", containerFactory = "사용할 containerFactory" ) fun consume(messages: List) { // 처리 로직 } JSON Batch 모드를 설정한 conta..