본문 바로가기

분류 전체보기97

CQRS 패턴 적용기 - 배민 우아콘 정리 MSA로 프로젝트를 진행하며 한 레포지에 조회와 생성 메서드가 다 들어가있으니 가독성도 떨어지고 DB를 직접 조회하는 것에 대하여 부담을 느꼈다. 서비스 구현이 많지 않은데도 불구하고 벌써부터 이런 문제가 생기면 안 되겠다 싶어 찾아보니 CQRS 패턴을 알게 되었고, 배민에 괜찮은 강의가 있어 보고 정리하였다. 확장성을 고려해 CQRS 패턴을 꼭 도입하고 싶은데, 다음엔 직접 적용한 경험을 기록하겠다! 1.B마트를 운영하며 마주한 문제 RDBMS 기반의 서비스들이 그렇듯 아주 많은 서비스가 데이터를 관리하는 차원에서 정규화한 데이터와 노출 도메인의 데이터 구조가 다르다. B마트도 MySQL을 이용하고 있으며 지점, 카탈로그, 상품에 대한 메타 정보를 입력, 수정, 노출하며 이를 위한 매핑 설정을 최종 단.. 2023. 12. 9.
[Query DSL] not initialized in the default constructor query dsl 은 추가적으로 설정을 해줘야 한다. 스프링 부트 버전에 따라 설정이 달라져 번거로운 부분이 있는데 이 글은 스프링부트 3 을 기준으로 진행했다. not initialized in the default constructor compile 중 생긴 에러이다. 객체의 기본 생성자에서 초기화 되지 않은 멤버 변수를 사용하려고 할 때 나오는 에러인데, 나같은 경우에는 서비스단에서 발생했다고 알림이 떴다. 쿼리 dsl 설정 전에는 잘 돌아가던 코드라 코드 문제가 아닌 설정 문제라고 생각했다. gradle 버전 5를 사용하는데 버전 4로 설정이 되어있어 의존성을 다시 심어주었다. 이왜진,, gradle도 버전이 올라가면서 프로젝트에 추가하는 방법이 달라졌다고 한다. 그래들 버전을 확인한 후 맞는 주.. 2023. 12. 7.
MSA로 전향한 11번가의 사례 📌Hystrix netfilx가 만든 fault tolerance library로 주로 장애 전파 방지와 resilience 기능을 한다. 🎨적용 방법 Hystrix annotation 사용 - hystrix javanic, spring cloud netfix에 포함되어 있음 @HystrixCommand public String anyMethod() { } Hystrix command 상속 pulbic class SampleCommand extends HystrixCommand { @Override protected String run() {} } hystrix command를 호출할 때 벌어지는 일 메소드를 intercept하여 대신 실행한다 - thread isolation 메소드 실행 결과 성공 혹.. 2023. 12. 6.
스프링부트3 페이징 처리 -jpa 이용 JPA Repository를 상속받으면 너~~~~~무 편리해서 빠져나오기 힘들다.. 즈파로도 페이징을 할 수 있지 않을까? 해서 찾아봤더니 아니나 다를까..! 레포지터리에서 jpa를 상속받고, pageable을 매개변수로 넣어준다. ++ List 였던 것을 페이징 처리를 위해 Page로 수정! public interface DealRepository extends JpaRepository { Page findAllByUuidAndIsDeletedFalse(String uuid, Pageable pageable); } dealPost list를 가져오는 서비스를 만들 것이다. uuid로 찾되, 삭제되지 않은 게시글만 가져온다! ++IsDeleted(Boolean isDeleted)로 했다가, 항상 fals.. 2023. 12. 6.