본문 바로가기
728x90

공부155

6장 - 코루틴 빌더 launch 빌더 launch 빌더는 새로운 코루틴을 시작하고, 결과를 반환하지 않습니다(Unit을 반환). 주로 병렬 작업을 수행할 때 사용하며, 작업이 완료될 때까지 기다리지 않습니다. launch로 시작된 코루틴은 부모 코루틴의 생명주기에 연결되어 부모가 취소되면 자식도 취소됩니다. runBlocking 빌더 runBlocking은 현재 스레드를 블록하고 코루틴이 완료될 때까지 기다립니다. 주로 테스트나 메인 함수에서 코루틴 코드를 실행하기 위해 사용됩니다. runBlocking 내부에서는 다른 코루틴을 시작할 수 있으며, 내부 코루틴이 모두 완료될 때까지 기다립니다. async 빌더 async 빌더는 코루틴을 시작하고 Deferred 타입의 결과를 반환합니다. 반환된 Deferred 객체를 통해 .. 2024. 1. 29.
4장 - 코루틴의 실제 구현 중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신과 비슷합니다. 상태머신: 코루틴의 실행 과정은 내부적으로 상태 머신으로 변환됩니다.코루틴은 여러 상태(예: 시작, 중단, 재개, 완료)를 가질 수 있으며, 이러한 상태는 코루틴의 생명주기를 관리 한다. 컨티뉴에이션 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있다. 함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장식합니다. 그 결과, 모든 컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다. 컨디뉴에이션 전달 방식 중단 함수가 구현될 수 있는 수많은 방법 중에서 코틀린 팀은 컨티뉴에이션 전달 방식을 택함. 컨티뉴에이션은 코루틴이 중단.. 2024. 1. 14.
3장 - 중단은 어떻게 작동할까? 중단 함수는 코틀린 코루틴의 핵심이다. 코루틴은 중단되었을 때 Continuation 객체를 반환한다. 중단했을 때 어떤 자원도 사용하지 않는다 실행이 중지 되어있을 때 스레드를 차지하지 않아 다른 작업에 스레드를 할당할 수 있다는 뜻. delay - 중단 코루틴의 실행을 지정된 시간 동안 일시적으로 중단하는 데 사용된다. delay(timeInMillis) 함수는 매개변수(ms) 단위로 현재 코루틴을 중단하며 시간이 지나면 자동으로 다시 시작된다. 비블로킹 특성을 가진다. 스레드를 차단하지 않는다. 코루틴은 일시 중단되지만, 그 로쿠틴이 실행되고 있던 스레드는 다른 작업을 계속 수행할 수 있다. 지정된 시간이 지난 후에는 중단되었던 지점에서 실행을 재개하는데, 이과정은 코루틴의 컨티뉴에이션 매커니즘을 .. 2024. 1. 13.
2장 - 시퀀스 빌더 코틀린 시퀀스는 데이터를 연속적으로 처리하는 데 사용되는 컬렉션 타입 중 하나 요구되는 연산을 최소한으로 수행 무한정이 될 수 있음 메모리 사용이 효율 시퀀스 좀 알고 갈까 리스트를 사용할 경우 val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val result = mutableListOf() for (number in numbers) { if (number % 2 == 0) { val squared = number * number result.add(squared) } } println(result) // [4, 16, 36, 64, 100] 위 코드는 리스트를 사용하여 짝수를 찾고 제곱한 값을 구합니다. 중간 결과를 담을 result 리스트를 생성하고, 반.. 2024. 1. 13.
1장 - 코틀린 코루틴을 배워야 하는 이유 스레드 사용의 비용: 스레드를 사용하는 데는 자원이 많이 소모된다. 스레드는 운영 체제 수준에서 관리되며, 스레드를 생성하고 관리하는 데 필요한 오버헤드가 존재한다. 자바에서 Thread.sleep의 비용: Thread.sleep() 을 사용하면 해당 스레드는 정해진 시간 동안 실행을 멈추고 다른 스레드가 실행될 수 있게 한다. 이 과정에서도 스레드는 계속 자원을 점유하고 있으며, 컨텍스트 스위칭에도 비용이 발생한다. 코루틴의 중단과 재개: 코루틴은 스레드와 다르게 작동한다. 필요에 따라 실행을 중단(suspend)하고, 재개(resume)할 수 있다. 이 과정에서 코루틴은 스데르를 잠들게 하지 않고, 실행 중인 스레드를 활용하여 다른 작업으로 전환할 수 있다. 이러한 특성으로 인하여 컨텍스트 비용을 줄.. 2024. 1. 13.
개발자를 위한 레디스 - 1 String 키:값 저장시 string 512MB 의 문자열 데이터를 저장할 . 수있으며, 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe 하게 처리되기 때문에 JPEG 이미지와 같은 바이트 값, HTTP 응답값 등의 다양한 데이터를 저장하는 것도 가능. binary-safe 문자열이란? 데이터 손실없이 null 바이트를 포함한 모든 바이트 시퀀스를 저장, 처리 조작할 수 있는 문자열 처리 방식이다. text, number, binary data 등을 인코딩 걱정 없이 저장할 수 있다는 것을 얘기 list list 에는 최대 42억여 개의 아이템을 저장할 수 있다. sorted Set 스코어에 따라 정렬되는 고유한 문자열의 집합 list 와 sorted set 모두 순서를 갖는 자료 구.. 2023. 11. 28.
개념 SUT System under test (테스트 하려는 대상) BDD Behaviour driven dvelopment(given - when - then) 테스트를 하려는 순간 어디에 어떻게 넣어야 하지 라는 질문을 마주하게 됩니다. 그때 BDD 가 말한다 "행동에 집중해야 한다" 유저가 시스템을 사용하는 user story 를 강조하고 시나리오를 강조한다. 이를 지키기 위한 뼈대로 다음과 같은 구조로 테스트코드를 추천한다. given - 어떤 상황이 주어졌을 떄 when - 이 행동을 한다면 then - 결과는 이렇다 3A 라고 불리기도 함. 상호 작용 테스트 (Interation test) 대상 함수의 구현을 호출하지 않으면서 그 함수가 어떻게 호출되는지를 검증하는 기법(메서드가 실제로 호출됐는지 .. 2023. 7. 4.
스프링배치 - Flow FlowJob 기본개념 Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다. Step 이 실패 하더라도 Job 은 실패로 끝나지 않도록 해야 하는 경우 Step 이 성공 했을 때 다음에 실행해야 할 Step 을 구분해서 실행 해야 하는 경우 특정 Step 은 전혀 실행되지 않게 구성 해야 하는 경우 Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다. 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다. 배치 상태 유형 BatchStatus JobExecution 과 StepExeccution 의 속성으로 Job 과 Step 의 종료 후 최.. 2023. 4. 13.
스프링 배치 - Step StepBuilderFactory StepBuilder 를 생성하는 팩토리 클래스로서 get(String name)메서드 제공 StepBuilderFactory,get("stepName"): "stepName" 으로 Step 을 생성 StepBuilder Step 을 구성하는 설정 조건에 따라 다섯 개의 하위 빌더 클래스를 생성하고 실제 Step 생성을 위임한다. TaskletStepBuilder TaskletStep 을 생성하는 기본 빌더 클래스 SimpleStepBuilder TaskletStep 을 생성하며 내부적으로 청크기반의 작업을 처리하는 CHunkOrientedTasklet 클래스를 생성 PartitionStepBuilder PartitionStep 을 생성하며 멀티 스레드 방식으로 Job .. 2023. 4. 13.
728x90