본문 바로가기

728x90
반응형

분류 전체보기

(222)
Spring boot multiple database 설정 (mybatis+hikari) application.properties spring.db1.datasource.hikari.driver-class-name=org.mariadb.jdbc.Driver spring.db1.datasource.hikari.jdbc-url=jdbc:mariadb://localhost:3306/db1?characterEncoding=UTF-8 spring.db1.datasource.hikari.username=admin spring.db1.datasource.hikari.password=P!ssw0rd spring.db1.datasource.hikari.connectionTimeout=5000 spring.db1.datasource.hikari.validationTimeout=1000 spring.db1.da..
도메인 주도 개발(DDD)시작하기 CQRS 목차 단일 모델의 단점 주문 내역 조회 기능 구현시 여러 애그리거트에서 데이터를 가져와야함 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하면 고민해야할 부분이 생김 조회화면 특성상 즉시로딩이나 지연로딩으로 처리해야함 CQRS Command Query Responsibility Segregation 복잡한 도메인에 적합 CQRS를 사용하면 각 모델에 맞는 구현 기술 선택 가능 ex) 명령 모델 > 도메인 모델(JPA), 조회모델 > DB테이블에서 SQL 쿼리(마이바티스) 조회모델은 응용서비스가 존재하지 않음 컨트롤러에서 바로 DAO를 실행해도 무방함 명령모델은 트랜잭션을 지원하는 RDBMS, 조회모델은 성능이 좋은 메모리기반 NoSQL사용도 가능 서로 다른 데이터 저장소 사용시 데이터 동기..
도메인 주도 개발(DDD) 시작하기 이벤트 목차 시스템간 강결합 문제 쇼핑몰에서 구매 취소시 환불처리가 필요함 환불기능을 실행하는 주체는 주문 도메인 엔티티가 될 수 있음 보통 결제 시스템은 외부에 존재하기 때문에 외부 서비스가 아닐 경우 트랜잭션 처리가 애매함 주문은 취소상태로 변경 후 환불만 나중에 시도하는 방시긍로 처리할 수 있음 외부 시스템 응답 시간이 길어지면 대기 시간이 길어지기 때문에 성능에 대한 이슈도 있음 위와같이 도메인 객체에 서비스를 전달하면 Order도메인인데 결제 도메인의 환불 로직이 섞이게 됨 환불 기능이 바뀌면 Order도 영향을 받을 수 있음 주문 취소후 환불과 함께 취소 통지를 해야한다면 외부 서비스가 두 개로 증가하고 트랜잭션 처리가 더 복잡해짐 ☝️ 강한 결합을 없앨 수 있는 방법은 이벤트를 사용하는 것이다. 비..
Spring @Resouce, @Autowired, @Inject 의존 관계 주입 차이점 @Resource, @Autowired, @Inject 모두 의존 관계를 자동으로 연결해주는 기능을 가진 어노테이션이다 @Resource JSR에 실려있는 자바 기존 어노테이션 Name -> Type -> Qualifier 기준으로 찾음 사용 위치 : 멤버변수, setter메서드 Name으로 DI가 가능하고 프레임워크 종속적이지 않기 때문에 추천 싱글턴 @Autowired Spring에서 지원하는 어노테이션 Type -> Name -> Qualifier 사용 위치 : 멤버 변수 , Setter메서드, 생성자, 일반 메서드 타입으로 연결하기 때문에 같은 타입 여러개의 필드는 오류가 남 강제 연결시 @Qualifier사용 @Inject JAVA에서 지원하는 어노테이션, 프레임워크 종속적이지 않음 Type -..
HttpSession 사용 방법 사용 이유 HttpSession은 둘 이상의 Page Request에서 사용자 식별 혹은 사용자 정보를 저장하기 위한 방법을 제공함. Spring Web MVC에서 HttpSession을 주입할 때 내부적으로 Servlet Container 에게 Session을 요청함. @GetMapping("/setSession") public String setSession(HttpServletRequest request) { HttpSession httpSession = request.getSession(true); httpSession.setAttribute("name", "hi"); httpSession.setAttribute("introduce", "myname is.."); return "setSession"; } @..
도메인 주도 개발(DDD) 도메인 모델과 바운디드 컨텍스트 목차 도메인 모델과 경계 처음부터 도메인을 완벽하게 표현하는 단일 모델을 만들기는 어렵다 도메인은 여러 하위도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 표현하기 어려움 시스템을 사용하는 사람을 회원 도메인에서는 회원, 주문 도메인에서는 주문자, 배송도메인에서는 보내는 사람이라고 부른다. 각 모델은 명시적으로 구분되는 경계를 이용해 섞이지 않도록 해야함 하위 도메인 모델이 섞이면 모델의 의미가 약해지고 각 도메인 별로 다른 요구사항을 반영하기 어려움 바운디드 컨텍스트 모델은 특정 컨텍스트하에서 완전한 의미를 갖는데, 같은 제품이라도 카탈로그 컨텍스트와 재고 컨텍스트에서 의미가 서로 다르다. 이렇게 구분되는 경계를 갖는 컨텍스트를 바운디드 컨텍스트라고 함 모델의 경계를 결정, 한 개의 바운..
@CookieValue 스프링 쿠키 사용법 쿠키란 ? 클라이언트 로컬에 저장되는 key, value가 들어있는 작은 데이터 파일 서버에서 HttpResponse Header에 Set-Cookie 속성을 이용해서 클라이언트에 쿠키를 제공 이름, 값, 만료날짜, 경로 정보 등이 들어있음 client에서 서버에 정보를 요청할 때 참조한다. HTTP 프로토콜의 특징이자 약점 보완을 위해 사용 비연결지향(Connectionless) HTTP는 클라이언트가 Request를 서버에 보내고 서버가 클라이언트로 Response하면 응답을 끊는 특성이 있음 상태없음(Stateless) 커넥션을 끊는 순간 클라이언트와 서버 통신이 끝나며 상태정보는 유지하지 않는 특성 쿠키 세팅 @GetMapping(value = "/setCookie") public String s..
도메인 주도 개발(DDD) 애그리거트 트랜잭션 관리 목차 애그리거트와 트랜잭션 한 주문 애그리거트에 대해 운영자는 배송상태로 변경하고 사용자는 배송지 주소를 변경하면? 트랜잭션마다 리포지터리는 새로운 애그리거트 객체를 생성하므로 운영자 스레드와 고객스레드는 같은 주문 애그리거트를 나타내는 다른 객체를 구하게됨 개념적으로 동일한 애그리거트지만 물리적으로 다른 애그리거트 객체를 사용 애그리거트의 일관성이 깨짐 운영자가 배송지 정보 조회 후 상태 변경하는 동안 고객이 수정하지 못하게 해야함 운영자가 정보조회 이후 고객이 변경하면 운영자가 다시 조회한 후 수정 위 두 가지 방법은 트랜잭션 처리 기법이 필요함 선점 잠금 먼저 애그리거트를 구한 스레드가 사용이 끝날때까지 다른 스레드가 해당 애그리거트 수정을 못하게 막음 스레드2는 스레드1이 잠금해제할 때까지 블로킹..

728x90
반응형