📖 개발 공부
-
[자료구조] 자료구조란?📖 개발 공부/자료구조 2023. 4. 16. 14:27
자료구조의 정의 자료구조는 데이터를 효율적으로 저장하고 조작하기 위한 방법을 다루는 컴퓨터 과학의 분야이다. 컴퓨터 프로그램에서 데이터는 배열, 연결 리스트, 스택, 큐 등의 자료구조로 구성된다. 이러한 자료구조들은 특정 알고리즘의 작동에 필수적이며, 프로그램의 효율성과 성능에 큰 영향을 미친다. 자료구조의 특징 효율성: 상황에 맞는 자료구조를 사용하면 데이터 처리의 효율성이 높아진다. 데이터 접근, 삽입, 삭제, 검색 등의 연산이 빠르고 효율적으로 이루어져야 한다. 추상화: 추상화란 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추리는 것을 말한다. 자료구조는 데이터를 추상화하여 다양한 형태로 표현할 수 있다. 자료구조를 이용할 때 자료구조를 구현하는 자세한 작동원리보다는 사용 방..
-
[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..