본문 바로가기
반응형

Server/🌱 Spring Boot (java)29

[Spring Boot] 멀티-모듈 프로젝트 build시 common 모듈의 의존성 받지 못하는 문제 해결 Spring Boot 프로젝트에서 공통 모듈(common)을 사용하여 엔티티와 DTO를 관리하는 것은 코드 재사용성을 높이고 유지 보수를 용이하게 하는 좋은 방법입니다. 그러나 이 방식에서 발생할 수 있는 문제가 있습니다. 바로 common 모듈에 정의된 JPA 엔티티를 다른 모듈(예: producer나 consumer)에서 사용할 때 발생하는 오류입니다.IDE에서는 정상적으로 인식되지만, 빌드 후에는 엔티티를 찾을 수 없다는 오류가 발생할 수 있습니다. (그래서 당황해서 삽질을 많이 합니다.) 예시 파일 구조Roomie/├── common/ # 공통 모듈 (엔티티, DTO 등)│ ├── build.gradle│ ├── src/│ │ └── main/│ .. 2025. 1. 24.
[Gradle] common을 사용하는 멀티-모듈 프로젝트에서 순환참조 문제 해결 및 최적화 Spring Boot 프로젝트에서 여러 모듈을 관리할 때, 순환참조 문제는 자주 발생할 수 있는 이슈 중 하나입니다. 특히, 멀티 모듈 프로젝트에서는 공통 모듈(common)과 다른 모듈들(producer, consumer) 간의 의존성을 관리하는 데 주의가 필요합니다. 이번 글에서는 common 모듈에서 순환참조 문제를 해결한 방법을 다뤄보겠습니다.문제의 원인producer나 consumer에서 common 모듈을 사용하는 것은 자연스러운 일입니다. common 모듈은 여러 모듈에서 공통으로 사용하는 클래스나 설정을 포함하고 있기 때문에 다른 모듈들이 이를 의존하는 구조입니다. 하지만 문제는 common 모듈에서 producer나 consumer에 대한 의존성을 추가하려고 할 때 발생합니다.이렇게 의존.. 2025. 1. 24.
[Gradle] 멀티-모듈 프로젝트에서 Gradle 설정 Gradle을 활용한 멀티-서버 프로젝트에서는 여러 모듈 간 의존성 설정이 중요합니다. 이 글에서는 공통 모듈을 사용한 프로젝트 구조를 어떻게 설정하는지에 대해 다룹니다. 예시로, Roomie라는 프로젝트를 common, producer, consumer 모듈로 나누어 설명합니다. 1. 프로젝트 구조프로젝트의 루트 디렉토리는 Roomie로 설정하고, 그 아래 common, producer, consumer 폴더를 만들어 각각의 역할에 맞는 기능을 구현합니다. common 모듈은 다른 모듈들이 공통적으로 사용할 기능들을 포함하며, producer와 consumer 모듈은 각각 생산자와 소비자 서버의 역할을 합니다.Roomie/├── common/│ └── build.gradle├── producer/│.. 2025. 1. 24.
[Spring boot jpa] 찜하기/좋아요 api에서 나온 race condition 문제 해결 찜하기 기능을 구현하기 위해 하나의 PATCH API를 사용하였고, 이를 통해 찜하기와 해제 기능을 동시에 처리하도록 설계했습니다. 그러나 다량의 찜하기/해제 요청이 동시에 들어오면서, user_id와 house_id가 같은 pin 엔티티가 중복 생성되는 문제가 발생하였고, 이에 따라 서버 오류가 발생했습니다. 아래와 같이 다대다 관계로 찜/좋아요 기능을 위해 엔티티를 설계했습니다.@Entity@Table(name="pin")@Datapublic class Pin { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY, cascade = Casc.. 2025. 1. 24.
[Spring] 스프링 MVC 예외 처리 시 인터셉터 재호출 해결법 이전 포스트에서 서블릿 예외 처리를 구현했습니다. (저번 포스트에서 코드 그대로 활용합니다.) [Spring] 서블릿 예외 처리와 오류 페이지오류 페이지의 view는 Thymeleaf 템플릿 엔진으로 작성했습니다!Dependencies: Spring Web, Lombok , Thymeleaf, Validation build.gradleplugins { id 'org.springframework.boot' version '2.5.1' id 'io.spring.dependency-management' versionkonkukcodekat.tistory.com  저번 포스트에서 마지막에 동작 과정을 보면 아래와 같습니다.1. WebServerCustomizer 2. WAS (/error-page/500 다시 .. 2024. 8. 9.
[Spring] 서블릿 예외 처리 시 필터 재호출 해결법 이전 포스트에서 서블릿 예외 처리를 구현했습니다. (저번 포스트에서 코드 그대로 활용합니다.) [Spring] 서블릿 예외 처리와 오류 페이지오류 페이지의 view는 Thymeleaf 템플릿 엔진으로 작성했습니다!Dependencies: Spring Web, Lombok , Thymeleaf, Validation build.gradleplugins { id 'org.springframework.boot' version '2.5.1' id 'io.spring.dependency-management' versionkonkukcodekat.tistory.com 저번 포스트에서 마지막에 동작 과정을 보면 아래와 같습니다.1. WebServerCustomizer 2. WAS (/error-page/500 다시 요.. 2024. 7. 28.
[Spring] 서블릿 예외 처리와 오류 페이지 오류 페이지의 view는 Thymeleaf 템플릿 엔진으로 작성했습니다!Dependencies: Spring Web, Lombok , Thymeleaf, Validation build.gradleplugins { id 'org.springframework.boot' version '2.5.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java'}group = 'hello'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral(.. 2024. 7. 28.