Back-End/Spring

    [Spring] 멀티모듈 단일 프로젝트 구성하기 (gradle)

    [Spring] 멀티모듈 단일 프로젝트 구성하기 (gradle)

    마이크로서비스의 복잡성 모든 것이 분리된 마이크로서비스는 정말 복잡하다. 장점을 100% 사용하려고 하면 그만큼 프로젝트가 복잡해지고 많은 리소스 비용이 발생한다. 예를 들어 서비스를 도메인 별로 분리한다고 생각해보자. 이때 들어가는 비용으로는 다음과 같은 것들이 있을 수 있다. 1. 인스턴스 생성 또는 컨테이너 생성 비용 2. MS간 통신에 사용되는 네트워크 I/O 3. 데이터 동기화 4. CI/CD 운영의 복잡도 증가 5. 도메인에 대한 비즈니스 로직 fragmentation 기존 모놀리식 서비스에는 모든 코드가 서로 섞여있을 수 있다. 그러면 스파게티같은 의존성때문에 함부로 마이크로서비스로 나누기 힘들 수 있다. 이때 점진적으로 서비스를 나누기 위해서 Spring의 멀티모듈을 사용할 수 있다. 왜 ..

    [spring] SpringBoot mongodb 인덱싱 안되는 문제 (SpringBoot mongodb Unique index not created)

    [spring] SpringBoot mongodb 인덱싱 안되는 문제 (SpringBoot mongodb Unique index not created)

    embedded mongodb를 사용해 테스트를 진행했다. 인덱스가 중복되는 Entity를 저장하려 할 경우에 DuplicateKeyException 에러를 던질 줄 알았지만.. 아무일도 일어나지 않았다. @Document(collection = "products") @NoArgsConstructor @Getter @Setter public class ProductEntity { @Id private String id; @Version private Integer version; @Indexed(unique = true) private int productId; ... } 테스트에 사용중인 Entity의 일부이다. productId에 @Indexed 어노테이션을 unique = true 로 걸어주었다. ..

    [Spring] mongoDB Test Error (Error creating bean with name 'embeddedMongoServer' defined in class path resource)

    [Spring] mongoDB Test Error (Error creating bean with name 'embeddedMongoServer' defined in class path resource)

    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-05-10 23:00:10.030 ERROR 7765 --- [ Test worker] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'embeddedMongoServer' defined in class path resource [org/springframework/boot/aut..

    [Spring] Gradle dependencies 정리

    dependencies implementation & api 컴파일 타임과 런타임 모두에 걸쳐서 사용자에게 의존성을 부여하는 지시어이다. api 컴파일 타임과 런타임에 사용자에게 의존성을 노출시킨다. 의존 라이브러리가 수정되는 경우 해당 라이브러리를 의존하는 모든 모듈들을 재빌드한다. implementation 내부적으로만 사용되고 사용자에게는 의존성을 노출시키지 않게 선언한다. 의존 라이브러리를 수정해도 직접적으로 사용하는 모듈까지만 재빌드한다. 클래스 A, B, C가 있다. B는 A를 호출한다. (B는 A를 의존) C는 B를 호출한다. (C는 A, B를 의존) 즉, A > B > C 와 같은 의존성을 보인다. api를 사용해 A에 의존성을 부여했다고 하자. 만약 A가 수정된다면 A를 직접적으로 참조하..

    [Spring] 전역 REST 컨트롤러 예외 핸들러 만들기

    예외 처리를 REST 컨트롤러의 비즈니스 로직, 즉 API 구현부분과 분리하기 위해 @RestControllerAdvice 를 사용할 수 있다. @RestControllerAdvice @ControllerAdvice 와 @ResponseBody 가 합쳐진 어노테이션이다. @ResponseBody는 컨트롤러의 return 값으로 객체를 넘길 경우 Json으로 변환해주는 어노테이션이다. @ControllerAdvice는 아래 설명을 참고할 수 있다. @ControllerAdvice @ExceptionHandler, @ModelAttribute, @InitBinder 가 적용된 메서드들을 AOP를 적용해 컨트롤러에 적용하기 위해 만들어진 어노테이션이다. basePackageClasses, basePackage..