전체 글50 코루틴 - 구조화된 동시성 구조화된 동시성구조화된 동시성이란?코루틴은 기본적으로 특정 코루틴 스코프 내에서 여러 코루틴이 협력하여 동작한다.코루틴은 부모-자식 관계를 가지며, 이 부모 자식 관계가 구조화 된다. 이를 구조화된 동시성이라고 한다.여기서 부모 코루틴이라 함은, 코루틴을 생성한 코루틴이라고 할 수 있다.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. 프로세스와 스레드(운영체제 기본) 1. 프로세스와 스레드프로세스프로세스란 프로그램의 데이터가 메모리에 올라와 CPU 에 할당되어 실행되는 상태를 말한다.프로세스는 운영체제로 부터 자원을 할당 받는 단위이고, 프로세스는 독립적으로 메모리를 할당받는다.프로세스의 메모리 구성stack: 지역변수, 매개변수 등이 저장되는 공간으로 동적할당된다.=== 아래 영역은 스레드에 의해 공유 ===heap: 객체를 저장하는 공간으로 동적할당된다.data: static 변수와 같은 전역적인 데이터를 저장하는 공간code: .class 파일과 같은 실행될 코드를 저장하는 공간컨텍스트 스위칭을 하려면 프로세스의 실행정보를 전환해야해서 비용이 크다.스레드스레드란 프로세스가 할당 받은 자원을 바탕으로 실행의 단위가 된다.운영체제의 스케줄러에 의해 CPU 를 할당받.. 2024. 7. 29. JPA 1차캐시의 동작 방식 만약 같은 테이블을 다른 entity 로 논리적으로 분리하게 되면 1차 캐시가 동작할까? 라는 질문으로부터 1차캐시가 어떻게 동작하는지 궁금해졌다.실제 1차 캐시가 동작하는 방식은 더 복잡하고, 연관관계가 있는 경우에는 또 다르게 동작한다. 그렇기에 해당 포스트에서는 연관관계가 없는 단일 테이블 조회에서 1차 캐시가 어떻게 동작하는지 살펴보고자 한다.1차 캐시란 무엇인가?우선 1차 캐시가 정확히 무엇인가? 라는 질문을 해야한다.JPA 에서 1차 캐시는 영속성 컨텍스트(Persistence Context) 를 의미한다.어플리케이션은 엔티티를 엔티티 매니저 를 통해 다루게 된다.즉, 엔티티 매니저를 통해 entity 의 상태 (managed, detached, removed 등) 을 관리하게 된다. 그리고 .. 2024. 7. 28. 스프링부트 테스트(3) - context caching context caching 이란?테스트 시 구성되는 ApplicationContext 는 아래의 구성정보를 바탕으로 캐시 키를 발급한다.해당 캐시 키를 바탕으로 application context 를 구성하거나 재사용하게 되어서, 테스트시 이러한 구성정보가 다르다면 새로운 컨텍스트가 생성된다.locations (from @ContextConfiguration)classes (from @ContextConfiguration)contextInitializerClasses (from @ContextConfiguration)contextCustomizers (from ContextCustomizerFactory) – this includes @DynamicPropertySource methods as well.. 2024. 7. 23. 스프링부트 테스트(2) - configuration 과 property 1. 무엇으로 configuration 을 구성할까?참고로 조금 더 자세한 추가적인 내용은 공식문서에 있습니다.1편에서 소개한 TestContextBootstrapper 구현체 SpringBootTestContextBootstrapper 는 기본적으로 별다른 조건이 없다면 @SpringBootConfiguration 어노테이션이 붙은 클래스를 찾아서 context 를 구성한다.즉 @SpringBootApplication 어노테이션 내에 @SpringBootConfiguration 어노테이션을 포함하기 때문에 별다른 조건이 없는 경우 전체 컨테이너 환경이 구성되는 것이다.// @SpringBootApplication 어노테이션@Target(ElementType.TYPE)@Retention(Retention.. 2024. 7. 23. 이전 1 2 3 4 5 6 다음