분류 전체보기
-
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을 요청할 때마다 커밋할 시간인지 아닌지 체..
-
[Security] 비밀번호 단방향 암호화카테고리 없음 2023. 3. 19. 21:53
단방향 암호화(One-Way Encryption) 단방향 암호화란 한쪽 방향으로만 암호화를 한다는 의미이다. 즉 암호화만 가능하고 복호화는 할 수 없다. 그렇기 때문에 비밀번호를 관리할 때 유용하게 사용된다. 비밀번호를 단방향 암호화 방식으로 저장하는 경우에는 패스워드 DB가 노출되어도 안전하다. 패스워드를 검증할 때에는 사용자로부터 입력받은 비밀번호를 똑같은 방식으로 암호화하여 암호화된 패스워드끼리 비교를 하면 된다. 유저가 비밀번호를 잊어버렸을 때는 찾기가 불가능하다. 대신 비밀번호 변경 메일, SMS 인증을 통해 새로운 비밀번호를 입력하도록 하면 된다. 대표적으로 많이 사용하고 있는 알고리즘은 SHA-256 암호화 알고리즘이다. 단방향 암호화 종류 해시(Hash) 알고리즘을 사용한다. MD5(Mes..
-
[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 원본 이미지 비율 그대로 보여주지만 크기에 안 맞으면 여..