프로세스와 스레드 프로세스란 무엇인가요? 프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스. 다시 말해, 실행 가능한 파일을 메모리에 로드하여 실행하는 동작을 말하는 것. 운영체제로부터 시스템 자원을 할당받아 독립적으로 실행되며, 프로세스는 코드, 데이터, 힙, 스택 등의 자원을 할당 받음. 또한, 하나의 프로세스는 최소한 하나의 스레드. 스레드는 무엇인가요? 스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름. 하나의 프로세스 내에서 여러 개의 스레드를 가질 수 있으며, 스레드는 해당 프로세스의 자원을 공유하면서 실행됨. 이는 효율적인 자원 관리와 병렬 처리를 가능하게 함. 하나의 프로세스는 여러 스레드를 가질 수 있음(멀티스레드). 그리고 스택영역을 따로 할당을 받고 다른 메모리는 프로세스 단위로 ..
1. local storage (1) local storage란? local storage는 웹 브라우저에서 제공하는 데이터 저장소다. (2) local storage의 특징 local storage는 사용자의 로컬 컴퓨터에 데이터를 저장하므로, 페이지를 새로고침하거나 브라우저를 닫아도 데이터는 유지된다. local storage는 키-값 쌍으로 데이터를 저장한다. 각각의 키-값 쌍은 문자열 형태로 저장되며, 자바스크립트를 사용하여 이러한 데이터에 접근하고 수정할 수 있다. 로컬 스토리지는 일반적으로 브라우저의 JavaScript API인 localStorage 객체를 통해 사용된다. local storage는 세션과 관련된 데이터, 사용자의 기본 설정, 임시 데이터 및 기타 웹 애플리케이션에서 필요한 ..
CQRS 단일 모델의 단점 식별자를 이용해서 애그리 거트를 참조한다면 jpa쿼리 최적화 사용할 수 없음 변경 조회때 단일 모델을 사용하면 고려할게 많아짐 상태 변경과 조회를 위함 모델을 분리 CQRS란? Command Query Responsivility Segregation의 약자임 복잡한 도메인에 적합함 장점 명령모델을 구현할때 도메인 자체에 집중할 수 있음 도메인 로직을 구현하는데 집중할 수 있음 조회 성능 향상 단점 구현해야 할 코드가 더 많음 더 많은 구현 기술이 필요함 결론 잘 고민하고 복잡도를 생각해서 적용할 것
이벤트 시스템간 강결합 문제 트렌젝션 처리 애매함 성능이 외부 서비스에 직접적인 영향 A와 B가 강하게 결합되에 있어 서로 영향을 받음. 해결법 이벤트 비동기 이벤트 개요 이벤트란? 이벤트 : 과거에 벌어진 어떤 것 구성요소 이벤트 생성 주체, 디스패처, 핸들러 핸들러는 이벤트에 반응해서 원하는 기능을 실행 용도 트리거 도메인의 상태가 바뀔때 후처리가 필요하면 실행하기 위한 트리거 데이터 동기화 외부 서비스의 정보를 동기화 이벤트,핸들러,디스패처 구현 이벤트 클래스 이름을 과거시제로 사용 최소한의 데이터를 포함 디스패처 (퍼블리셔) 스피링이 제공하는 ApplicationEventPublisher사용 이벤트 핸들러 @EventListener를 사용해서 구현 동기 이벤트 처리문제 강결합 문제는 해소 but ..
도메인 모델과 바운디드 컨텍스트 도메인 모델과 경계 한개의 모델로 도은 하위 도메인을 표현 하려는 시도는 X 하위 도메인 마다 모델을 만들어야함 도멜은 특적한 컨텍스트 하에서 완전한 의미 이렇게 구분되는 겨예를 갖는 컨텍스트를 DDD에서 바운디드 컨텍스트라고 부른다 바운디드 컨텍스트 바운디드 컨텍스트는 모델의 경계를 결정 용어를 기준으로 구분 하나의 바운디드 컨텍스트는 논리적으로 하나의 모델을 갖는다 여러 바운디드 컨텍스트에서 여러 하위 도메인을 개발할때 구분되는 패키지를 갖도록 구현 바운디드 컨텍스트 구현 바운디드 컨텍스트는 표현,서비스,도메인,인프라스트럭쳐,DB까지 모두 포함된다 꼭 도메인 주도로 개발할 칠요 없음 간단한 것은 CRUD로 구현해도 됨 두가지를 같이 쓰기도함
애그리거트 트랜젝션 관리 애그리거트와 트랜잭션 이런 상황이 있을때 트랜잭션의 일관성이 깨지게 된다. 이런 상황을 막기위함 추가적인 트랜잭션 처리 기법이 필요함 선점 잠금과 비선점 잠금의 두가지 방식이 있음 선점잠금 먼저 애그리거트를 구한 스레드의 사용이 끝날때 까지 다른 스레드가 수정하지 못하게 막는 방식이다 교착상태가 발생하지 않도록 주의해야한다 최대 대기 시간을 지정해서 문제를 해결할 수 있다. 비선점 잠금 변경한 데이터를 반영하는 시점에 변경 가능 여부를 확인하는거 버전으로 사용할 프로처티 값이 필요 그리고 버전값이 값을때만 데이터를 수정 @Version으로 JPA에서 이용가능함 오프라인 선점 잠금 다른 사용자가 사용중일때 수정페이지를 보여주지 않음 이것도 교착상태처럼 사용자가 중간에 나갈 수도 있..
도메인 서비스 여러 애그리거트가 필요한 기능 보통 한 애그리거트로 기능을 구현 할 수 없을 때가 많음 이때 도메인 기능을 별도 서비스로 구현하면 됨 도메인 서비스 도메인 영역에 위치한 도메인 로직을 표현할 때 사용한다 계산 로직(다른 애그리거트가 필요한, 너무 복잡한) 외부 시스템 연동이 필요한 로직 계산 로직과 도메인 서비스 도메인 서비스는 상태 없이 로직만 구현 상태는 다름 방법으로 전달 받음 애그리거트 객체에 도메인 서비스를 전달하는 것은 응용 서비스 책임임 외부 시스템 연동과 도메인 서비스 시스템간 연동은 api호출로 이루어 질 수 있지만 설문 조사 도메인에서는 권한 확인하는 도메인 로직으로 볼수 있음. 도메인 로직관점에서 인터페이스를 작성 구현체는 인프라 영역에 위치해서 구현하고 응용서비스가 사..
응용서비스와 표현영역 표현영역과 응용영역 사용자의 요청을 해석(Controller)역할 실질적 기능은 응용 영역의 서비스가 함 사용자와의 상호작용은 표현이 하기 때문에 응용 서비스는 의존하지 않음 응용서비스의 역할 사용자가 요청한 기능을 실행함 리포지터리에서 도메인 객체를 가져와 사용 주요 역할은 도메인 객체를 사용해서 요청을 처리 응용서비스에서 도메인 로직의 일부를 구현 -> 서비스가 복잡 고로 도메인 로직을 넣지 않아야함 트랜젝션 처리도 담당함 응용서버스의 구현 표현과 도메인 영역을 연결하는 매개체 역할 like Facade패턴 서비스를 한 클래스에 담을수도 여러 클래스에 나누어 담을 수도 있음 공통된 로직을 별도클래스에 나누고 구분되는 기능을 별도의 서비스 클래스로 구현 하는 것이 좋다 과연 인터페..