본문 바로가기
반응형

Spring Boot19

[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 JPA] 상속관계 엔티티 매핑 전략 (@Inheritance @DiscriminatorColumn) 이전 포스트들 보고 이어서 하기 스프링부트와 jpa 연동(설정)하기 테이블,엔티티 jpa로 생성하기 프로젝트(이전포스트) 상속관계 매핑 자바 객체는 상속 관계가 존재하지만, 관계형 데이터베이스는 상속관계가 대부분 없습니다. JPA를 이용해서 매핑하는 법에는 세가지가 있는데 아래와 같습니다. @Inheritance(strategy=InheritanceType.XXX)의 stategy를 설정해주면 됩니다. default 전략은 SINGLE_TABLE(단일 테이블 전략)이다. InheritanceType 종류 JOINED SINGLE_TABLE TABLE_PER_CLASS @DiscriminatorColumn(name="DTYPE") 부모 클래스에 선언합니다. 자식 클래스를 구분하는 용도의 컬럼이다. 관례는 .. 2023. 2. 1.
[Spring JPA] 엔티티(연관 테이블) 생성하고 일대일,일대다 연관관계(1:1 1:n) 설정하기 JPA 세팅에 대해선 이전 포스트를 보고 참고하세요! build.gradle (스프링 2.7.8 기준) getter,setter를 자동으로 생성해주는 lombok 디펜던시를 사용했습니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // implementation 'org.springframework.boot:spring-boot-devtools' com.. 2023. 1. 31.
[Spring 입문] AOP 개념과 간단한 예제 - 메서드 시간측정 AOP 란? AOP(Aspect Oriented Programming)는 관점지향적 프로그래밍의 약자로 스프링 기술의 핵심이 되는 개념입니다. 관점 지향은 어떤 로직(ex. 한 기능의 총 걸린 시간 측정하기)을 기준으로 각각 모듈화 하겠다는 것입니다. 만약 모든 기능의 시간(회원 가입시간, 조회 시간)을 측정해서 어디부분이 성능 저하를 일으키는지 구하고 싶으면 모든 메서드에 아래와 같은 로직을 적용 시켜줘야 합니다. public ? 측정하려는_메서드(?){ Long start = System.currentTimeMillis(); try { // 메서드의 본래 내용 } finally { Long end = System.currentTimeMillis(); Long timems = end - start; S.. 2023. 1. 24.
[Spring 입문] 스프링부트 JPA를 이용해서 MySQL 연결하기 (AWS이용) 연동 이전 포스트에 맞춰 실습하겠습니다! (VSCode on Gitpod.io WEB IDE) https://konkukcodekat.tistory.com/entry/Spring-%EC%9E%85%EB%AC%B8-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0%EC%99%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84%EC%A3%BC%EC%9E%85-Dependency-Injection-%EC%8B%A4%EC%8A%B5 [Spring 입문] 계층 구조와 클래스 의존관계/주입 (Dependency Injection) 실습 입문자의 비즈니스 실습 요구 사항 정리 데이터 : 회원 ID , 이름 기능 : 회원 등록, 조회 아.. 2023. 1. 21.
[Spring 입문] 스프링부트와 MySQL연결하기 - JDBC Template (AWS이용) 이전 포스트에 맞춰 실습하겠습니다! (VSCode on Gitpod.io WEB IDE) https://konkukcodekat.tistory.com/entry/Spring-%EC%9E%85%EB%AC%B8-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0%EC%99%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84%EC%A3%BC%EC%9E%85-Dependency-Injection-%EC%8B%A4%EC%8A%B5 [Spring 입문] 계층 구조와 클래스 의존관계/주입 (Dependency Injection) 실습 입문자의 비즈니스 실습 요구 사항 정리 데이터 : 회원 ID , 이름 기능 : 회원 등록, 조회 아.. 2023. 1. 21.