분류 전체보기
-
[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 원본 이미지 비율 그대로 보여주지만 크기에 안 맞으면 여..
-
[Kafka] reset offset📖 개발 공부/kafka 2023. 2. 25. 20:15
reset offset 테스트를 하면서 consumer group의 offset을 reset 해야 하는 경우도 있고, 데이터 마이그레이션으로 데이터 누락 가능성을 방지하기 위해 offset을 reset 해야 하는 경우 등이 있다. consumer group의 offset을 reset 하기 위해서는 해당 consumer group이 inactive 상태여야 가능하다. 즉, consumer group의 모든 consumer application을 종료해야 한다. (신규로 생성될 consumer group인 경우는 상관 없다.) command kafka-consumer-groups.sh --bootstrap-server \\ {kafka broker endpoint} --group {consumer group..
-
Circuit Breaker (서킷 브레이커)📖 개발 공부 2023. 2. 17. 00:58
기존 MSA 패턴 마이크로서비스 아키텍처 패턴은 시스템을 여러 개의 서비스 컴포넌트로 나눠서 서비스 컴포넌트 간에 호출하는 개념을 가지고 있다. 이 패턴에는 서버가 서로 종속적이라는 한계가 있다. Server 1이 Server 2를 호출하는 상황에서 이슈가 생겨 Server 2가 응답을 못하거나 응답 속도가 느린 경우, Server 1에서 Server 2를 호출한 스레드는 응답을 받지 못해, 계속 응답을 기다리는 상태로 잡혀있게 된다. 지속해서 호출을 하게 되면 같은 원리로 각 스레드들이 응답을 기다리는 상태로 변화게 되고, 결과적으로는 남은 스레드가 없어서 다른 요청을 처리할 수 없는 상태가 된다. 동작하지 않는 서비스 접속 시 타임아웃될 때까지 차단되어, 의존성이 있는 서비스까지 연쇄적으로 멈출 가능..
-
Consistent Hashing (안정 해시)📚 개발 도서/대규모 시스템 설계 기초 2023. 2. 12. 01:02
해시 키 재배치(rehash) 문제 N개의 캐시 서버가 존재할 때 이 서버들에 부하를 균등하게 나누는 보편적인 방법 serverIndex = hash(key) % N (N: 서버의 개수) 이는 서버가 추가되거나 기존 서버가 삭제되면 문제가 된다. serverIndex = hash(key) % (N-1) (-1: 삭제된 서버) 장애가 발생한 서버에 보관되어 있는 키뿐만 아니라 대부분의 키가 재분배되게 된다. 대부분 캐시 클라이언트가 데이터가 없는 엉뚱한 서버에 접속하게 되는 것이다. 즉 노드 삭제 및 추가가 있는 경우 hash(key) % N 결과에 미치는 영향이 너무 커서 많은 수의 요청이 실패하여 캐시된 데이터가 다시 로드된다는 것이다. → 대규모 캐시 발생 안정 해시(consistent hash) 해..
-
[Kafka] Rebalancing (리밸런싱)📖 개발 공부/kafka 2023. 1. 31. 00:16
리밸런싱 (Rebalancing) 컨슈머 그룹 내의 컨슈머들은 자신들이 읽는 파티션의 소유권을 공유한다. 컨슈머 A가 담당하던 파티션 읽기 작업을 컨슈머 B가 이관받아 작업할 수 있음. 이를 리밸런싱이라고 한다. 컨슈머 그룹 내의 컨슈머 인스턴스끼리 파티션을 적절히 분배하는 프로세스 파티션 소유권 조정이 가능하기 때문에 컨슈머 그룹의 확장성과 가용성을 높여준다. 리밸런싱이 발생하는 경우: 특정 토픽의 파티션 수 변화 || 컨슈머 그룹의 멤버십 변화 예시 상황: 1개의 컨슈머 그룹(3개의 컨슈머 인스턴스), 토픽에 생성된 3개의 파티션 ㄴ 컨슈머-1이 셧다운 되었을 때, 컨슈머-1에 할당되어 있던 파티션은 재할당 필요 컨슈머 그룹 구성 정리하고, 파티션 재할당 작업을 진행 ⇒ 리밸런싱 리밸런싱이 발생하면 ..
-
[JVM] 클래스 로더📖 개발 공부/jvm 2023. 1. 30. 00:46
클래스 로더 클래스 로더가 JVM 메모리에 바이트 코드를 업로드 시키고, 실행 엔진이 여기에 있는 바이트 코드들을 실행하게 된다. 클래스들을 한번에 메모리 올리지 않음 (낭비 될 수 있어서) 그때그때 필요한 것들만 클래스 로더가 가져와서 메모리에 올림. 실행엔진이 실행하다가 클래스가 없다 → 클래스 로더에게 요청, 클래스 로더는 클래스를 로드하게 된다. 클래스를 로드하는 과정 클래스 로드의 3가지 단계 Loading: 클래스 파일로부터 읽어와서 JVM 메모리에 로딩하는 과정 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 Method 영역에 저장한다. Method 영역에 저장되는 데이터 (클래스 파일의 바이트 코드가 로드되는 곳) 타입 정보 (클래스, 인터페이스, ..
-
[Kafka] Partition 딥다이브📖 개발 공부/kafka 2023. 1. 18. 01:10
카프카의 토픽들은 여러 파티션으로 나뉘어진다. 토픽이 카프카에서 일종의 논리적인 개념이라면, 파티션은 토픽에 속한 레코드를 실제 저장소에 저장하는 가장 작은 단위다. 각각의 파티션은 Append-Only 방식으로 기록되는 하나의 로그 파일(물리적 파일)이다. 파티션의 특징은 병렬로 처리 가능하다는 것이다. 많은 양의 메시지 처리를 위해 파티션 수를 더 늘릴 수 있다.파티션의 레코드는 각각 offset 정보를 가진다. 이는 파티션 내에서 고유한 레코드의 순서를 의미하는 식별자다. 하나의 파티션 내에서는 메시지 순서가 보장된다. (메시지 순서 보장의 단위라 할 수 있다.) 하지만 하나의 토픽이 여러 파티션으로 구성되는 경우, 토픽 단위의 메시지 순서는 보장할 수 없다. 이는 파티션 내부에서의 순서는 보장되지..
-
[Kafka] Kafka Architecture📖 개발 공부/kafka 2023. 1. 14. 01:46
카프카란? 스트리밍 데이터를 다루기 위한 미들웨어와 그 주변 생태계 분산형 스트리밍 플랫폼(A distributed streaming platform)으로써 분산환경에 특화되어 있는 특징이 있다. 메시지를 특정 수신자에게 직접적으로 보내는 것이 아닌, 메시지를 받기 원하는 곳에서 해당 토픽을 구독함으로써 메시지를 읽는다. 카프카의 구성 Broker(브로커) Kafka에서 데이터를 수신, 전달하는 서비스이자 실행되는 Kafka Application Server 카프카 애플리케이션이 설치되어 있는 서버 또는 노드다. 하나의 Server 당 하나의 데몬 프로세스로 동작한다. 보통 가용성을 위해 3 Node Broker로 구성한다. Zookeeper(주키퍼) 자세히 보기 분산 코디네이션 시스템, Broker와 ..