분류 전체보기48 코루틴 - 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) - 동작원리와 어노테이션 친해지기 동작 원리TestContext 를 bootstrap 하는 원리테스트 컨텍스트란, 테스트시 application context 를 말하며 애플리케이션의 구성 정보를 구성하는 것을 말한다. 예를들어,애플리케이션의 Bean 을 로드하는 것도 이에 포함된다고 할 수 있다.그렇다면, 이 테스트 컨텍스트는 어떻게 로드 될까? 이를 알기 위해서 @SpringBootTest 어노테이션을 확인해보자.@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited// TestContextBootstrapper 구현체 : SpringBootTestContextBootstrapper@BootstrapWith(SpringBootTestContex.. 2024. 7. 23. AOP 활용 (feat. jpa 호출 로깅) AOP 에 대한 기본적인 개념을 이전 포스팅에서 알아보았다.https://pius712.tistory.com/33 스프링 AOP - 톺아보기aop 는 횡단 관심사를 분리하여 모듈화 한 것을 말한다.횡단 관심사란 비즈니스 로직이 아닌 그 외의 로깅, 트랜잭션과 같은 것들을 말한다.스프링을 사용하면 자주 만나게되는 @Transactional 이나 @pius712.tistory.com 이 AOP 를 활용하여, JPA repository 메서드 호출에 대한 로깅을 간단하게 구현하고자 한다.요구사항jpa repository 모든 메서드에 대해 로그를 남겨야함어떤 메서드가 호출했는지, 어떤 메서드가 호출되었는지 로그를 남겨야함jpa repository 의 time elapsed 로그를 남겨야함예외 발생시 messa.. 2024. 6. 6. 이전 1 2 3 4 5 6 다음