본문 바로가기

전체 글45

resilience4j - 서킷브레이커 1. 컨셉 살펴보기1.1 개념서킷브레이커는 회로 차단기라는 뜻으로 소프트웨어에서는 호출 대상이 비정상적인 상태일 때, 작업이 실행되지 않도록 하는 장치를 의미한다.여기서 호출 대상은 외부 시스템 api, 데이터베이스 등이 될 수 있다.서킷브레이커는 호출의 성공 여부를 슬라이딩 윈도우를 통해 기록하여, 기준으로 정한 임계값을 넘어서는 경우 회로를 차단하여, 작업이 빠르게 실패하게 한다.서킷브레이커는 크게 3가지 상태를 가지고 있다.CLOSED회로가 차단된 상태로 호출 대상을 정삭적으로 호출할 수 있다.OPEN회로가 열린 상태로, 실패율이 임계치를 넘겨서 더이상 호출 대상을 호출하지 못하는 상태이다.HALF_OPENOPEN 상태에서 일정 시간이 지난 후에 전이되는 상태로, CLOSED 와 마찬가지로 호출가능.. 2024. 10. 5.
책 'Tidy First?' 정리 이 책은 총 3부로 구성되어있다.1부: 정리를 하는 방법2부: 정리를 언제해야하는가?3부: 정리는 왜 해야하는가?책의 순서와 달리 역순으로 정리하고자한다.후기코드 정리라는 것이 무엇인지 어떻게 해야할지보다,우리가 직면하는 상황에서 내가 어떻게 행동하는 것이 좋을지에 대한 부분을 생각하게 만드는 책.경제 개념을 은유하여서, 소프트웨어의 가치를 만들어가는 메이커로서 어떻게 판단하면 좋을지 고민하게 만드는 것 같다.3부. 이론사실 왜 해야하는가? 라고 적었지만, 2부의 언제해야하는가에 대한 이유를 설명하는 장이다.22장. 요소들을 유익하게 관계 맺는 일22장에서는 소프트웨어 설계에 대한 정의를 내린다.좋은 설계란 무엇인가?조영호님의 영상, 오프라인 강연에서 조영호님이 이에 대해서 이렇게 말씀하셨다.변경하기 쉬.. 2024. 9. 18.
코루틴 - 코루틴 스레드 양보와 실행 스레드 스레드 양보란?코루틴이 스레드를 양보한다는 것은 어떤 뜻일까?코루틴에서 대표적으로 아래의 함수들이 스레드를 양보하는 중단함수이다.delayyieldjoinawait아래 코드를 통해 살펴보자.suspend fun main() = runBlocking { val start = System.currentTimeMillis() repeat(3) { launch { delay(1000) println("elapsed time: ${System.currentTimeMillis() - start}") } }}>> elapsed time: 1012>> elapsed time: 1021>> elapsed time: 1021위 코드는 코루틴 .. 2024. 9. 17.
코루틴 - 중단함수 중단함수중단함수란?중단 함수란 코루틴을 중단할 수 있는 중단점을 제공하는 함수를 말한다.suspend fun 을 통해서 구현할 수 있다.기본적으로 일반 함수와 크게 다르지 않으나, 내부에 중단지점을 가질 수 있다는 것이 일반함수와의 차이다.일반적인 함수나 메서드(루틴과 서브루틴)코루틴중단함수는 코루틴이 아니다.코루틴을 처음 접하는 경우 중단함수가 코루틴이라고 착각할 수 있다.중단함수는 코루틴이 아니고, 코루틴 내에서 실행될 수 있는 함수이다.중단함수의 사용중단함수는 코루틴을 중단할 수 있는 함수이다. 그렇기 때문에 일반함수처럼 사용할 수 없다.중단함수를 호출할 수 있는 곳은 아래와 같다.코루틴 스코프다른 중단함수fun main() { myMethod() // 호출 불가능}suspend fun myMeth.. 2024. 9. 17.
코루틴 - 구조화된 동시성 구조화된 동시성구조화된 동시성이란?코루틴은 기본적으로 특정 코루틴 스코프 내에서 여러 코루틴이 협력하여 동작한다.코루틴은 부모-자식 관계를 가지며, 이 부모 자식 관계가 구조화 된다. 이를 구조화된 동시성이라고 한다.여기서 부모 코루틴이라 함은, 코루틴을 생성한 코루틴이라고 할 수 있다.runBlocking 과 같은 코루틴은 스스로 코루틴 스코프를 만들어서 실행하므로, 본인이 루트 코루틴이 된다. 왜 코루틴은 이런 구조화된 동시성을 필요로 할까?그것은 바로 코루틴을 효과적으로 제어하기 위함이다.구조화된 동시성의 특징을 살펴보자.부모의 실행환경을 상속받는다.부모 코루틴의 취소는 자식에게 전파된다.부모 코루틴은 자식 코루틴이 끝날때까지 기다린다.아래에서 각 특징들에 대해 각각 살펴보도록 하자.부모의 실행환경.. 2024. 9. 17.
코루틴 - 코루틴 빌더와 Job 코루틴 상태와 JobJob모든 코루틴 빌더는 Job 객체를 생성하고 반환한다.Job 객체는 코루틴 실행을 추상화한 객체로, Job 을 통해 코루틴의 상태를 추적 및 실행을 제어할 수 있다.코루틴 상태코루틴의 상태에 대해 한번 알아보자.코루틴은 아래와 같은 상태를 가질 수 있다.New : 코루틴 빌더를 통해 코루틴을 생성하면 New 상태가 되며, 지연 실행 옵션을 주지 않으면, active 상태로 전이된다.active: 실행중 상태로, 실제 코루틴을 실행하거나 중단된 상태를 포함한다.completing: 자신의 코루틴이 모두 완료되었으나, 자식 코루틴이 완료되기를 기다리는 상태이다.completed: 자신과 자식 코루틴 모두가 완료된 상태이다.cancelling : 코루틴이 취소요청을 받으면 취소중 상태가.. 2024. 9. 17.
코루틴 - CoroutineDispatcher CoroutineDispatcher란?코루틴은 근본적으로 스레드에 의해서 실행된다.그렇다면, 코루틴이 어떤 스레드에 의해서 실행되는지 결정하는 것은 무엇일까?이것을 결정하는 것이 바로 CoroutineDispatcher 이다.CoroutineDispatcher 는 Coroutine 이라는 작업 단위가 어떻게 실행될지 제어하는 객체이다.물론 CoroutineDispatcher 마다 내부 구현은 캡슐화 되어있기에 구현체마다 사용하는 기술이 다를 수 있으나,아래의 메서드를 통해 생성되는 CoroutineDispatcher 는 내부적으로 Executor 프레임워크의 ThreadPoolExecutor 를 사용하고 있다.*newFixedThreadPoolContext*()*newSingleThreadContext*.. 2024. 9. 17.
DDD - Entity 인가 아닌가? 이것은 Entity 인가? 행위인가?일반적으로 유저, Customer, Product 와 같은 것들이 Entity 로 모델링하는 것은 쉬울 수 있다.하지만, 어떨때는 이것을 Entity로 모델링 해야하는 것인지 아닌지 헷갈리는 경우가 있다.아래 포스팅에서 Entity 에 대한 개념에 대해서 알아보았다.이번에는, 이 개념을 기반으로 예시를 들어 Entity 를 식별해보도록 해보자.https://pius712.tistory.com/40 도메인 주도 설계 - entity읽기에 앞서,,Entity 란 무엇인가? 라는 “정의 자체가 중요한 것이 아니다.”요구사항을 모델링할 때, 요구사항의 특정 부분을 개념화하고 분류하는 것이 목적이고, Entity 는 이 모델링을 하기 위pius712.tistory.com 식별할.. 2024. 9. 4.
DDD - Entity의 개념 읽기에 앞서,,Entity 란 무엇인가? 라는 “정의 자체가 중요한 것이 아니다.”요구사항을 모델링할 때, 요구사항의 특정 부분을 개념화하고 분류하는 것이 목적이고, Entity 는 이 모델링을 하기 위한 도구로서 존재한다.우리의 도메인을 개발할 때, 이를 어떻게 식별해내고 사용할 수 있는지 염두하면서 이해하자.정의 Entity 의 핵심은 식별가능성 과 변화가능성 이다.Entity 는 시스템 내에서 고유한 식별성을 가지며, 시간에 지남에 따라 자신의 상태가 변화한다.이는 하나의 서버내에서 국한되는 식별성이 아니라, 여러 서버와 여러 데이터 베이스에 걸쳐서도 식별이 가능해야한다.예를들어, 유저A 가 있다고 할 때 이 유저의 ID 는 메시징 큐를 통해 전달이 되든, api 를 통해 전달이 되든 시스템 내에서.. 2024. 8. 31.