📖 개발 공부
-
[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..
-
[Kafka] Commit📖 개발 공부/kafka 2023. 3. 26. 15:11
컨슈머가 poll() 을 호출할 때마다 컨슈머 그룹은 저장되어 있는 아직 읽지 않은 메시지를 가져온다. 컨슈머 그룹이 메시지를 어디까지 가져갔는지 알 수 있기 때문이다.오프셋 : 컨슈머들이 각각의 파티션에 자신이 가져간 메시지의 위치 정보커밋 : 각 파티션에 대해 현재 위치를 업데이트하는 동작카프카 내에 별도로 내부에서 사용하는 토픽(__comsumer_offsets)을 만들고, 그 토픽에 오프셋 정보를 저장하고 있다. (이전 카프카에서는 이 오프셋 정보를 주키퍼에 저장했다.)자동 커밋 (enable.auto.commit=true)auto.commit: 시간단위 5초(기본값)마다 컨슈머는 poll()을 호출할 때 가장 마지막 오프셋을 커밋한다. 컨슈머는 poll을 요청할 때마다 커밋할 시간인지 아닌지 체..
-
[Resilience4j] Circuit Breaker Config 정리📖 개발 공부 2023. 3. 19. 19:07
Circuit Breaker 설명 참고 property default value description failureRateThreshold 50 실패한 호출에 대한 임계값으로 이 값을 초과하면 서킷이 열린다. slowCallDurationThreshold 60000 [ms] 호출 시간이 설정한 값보다 길면 slow call로 판단한다. slowCallRateThreshold 100 slow call 비율이 설정한 값보다 크거나 같으면 OPEN 상태로 바뀌고 호출을 차단한다. minimumNumberOfCalls 100 failure/slow rate을 계산하기 위한 최소 호출 수 waitDurationInOpenState 60000 [ms] OPEN → HALF_OPEN 으로 변경 되기까지 대기 시간 r..
-
[Memcached] slab allocator📖 개발 공부 2023. 3. 19. 16:48
Memcached DB 호출, API 호출 또는 페이지 렌더링 등의 결과를 임의의 데이터(문자열 또는 객체)화하여 작은 덩어리 형태로 저장하는 in-memory key-value 저장소이다. memcached는 기본적으로 객체를 저장하는데 사용되지만, string과 같은 직렬화될 수 있는 어떤 변수라도 저장할 수 있다. memcached에 데이터를 저장할 때 4개의 인자를 사용한다. key: string 타입 value: 직렬화되어 저장되고 비직렬화되어 검색 될 수 있다면 어떤 타입이든 가능 cache expire time(expiry)[s]: 캐시 만료 시간 (0으로 지정된 경우 캐시에서 지워지지 않는다. 대신, 메모리가 부족해진 경우 LRU 알고리즘에 따라 캐시에서 제거될 수 있다.) compacti..
-
[Flutter] 이미지 정방형으로 자르기 및 radius 설정📖 개발 공부/flutter 2023. 3. 12. 19:36
이미지 정방형으로 자르기 SizedBox의 width, height 속성을 이용해 같은 길이로 설정한다. 그리고 Image widget의 fit.cover 옵션을 추가한다. SizedBox( width: 100, height: 100, child: Image.network( "https://img-cf.kurly.com/shop/data/goodsview/20211223/gv10000260857_1.jpg", fit: BoxFit.cover, ), ) fit 옵션 설명 BoxFit.cover 비율대로 조정한 다음 적당히 잘라 버리고 늘리는 현상이 없다. BoxFit.fill 원본 이미지 비율 무시하고 늘리는 현상이 있다. BoxFit.contain 원본 이미지 비율 그대로 보여주지만 크기에 안 맞으면 여..