Spring

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

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

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

    [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..

    확장 가능한 json 형식

    익숙하게 사용했던 패턴이지만 표준인 줄 모르고 넘어갔던 내용을 스프링의 API 작성을 공부하던 중에 다시 보게되어 확실히 정리하기위해 포스팅함 Django의 Serailizer에 many=True 옵션을 주는 경우 + Spring에서 @RestController를 사용해 Entity를 그대로 반환하는 경우 API의 response를 보면 아래와 같이 []배열 형태로 Json이 반환된다. [ { "id": 1, "name": "newhello", "address": null, "orders": [] }, { "id": 2, "name": "member1", "address": { "city": "서울", "street": "test", "zipcode": "1234" }, "orders": [] }, { ..