Java/Spring 13

[Spirng] 엔티티 생성, 수정시간 추가

@CreateData : 엔티티가 생성될 때 생성시간을 컬럼에 저장합니다.@LastModifiedDate : 엔티티가 수정될 때 마지막으로 수정된 시간을 컬럼에 저장합니다.@EntityListeners(AuditingEntityListener.class) : 엔티티의 생성 및 수정 시간을 자동으로 감시하고 기록 합니다.@EnableJpaAuditing : 자동으로 업데이트합니다,import jakarta.persistence.*;import lombok.Getter;import lombok.NoArgsConstructor;import org.springframework.data.annotation.CreatedDate;import org.springframework.data.annotation.LastM..

Java/Spring 2024.05.16

[Spirng] CORS 처리하는 법

CORS(Cross-Origin Resource Sharing)웹 페이지의 리소스를 다른 도메인에서 요청할 수 없게 제한하기 위한 웹 브라우저에 구현된 보안 기능입니다.악의적인 웹사이트가 허가 없이 다른 사이트와 상호 작용하는 것을 방지할도록 설게되어 사용자 데이터가 허가되지 않은 당사자에게 노출되는 것을 방지할 수 있습니다. 처리방법 1. 글로벌 CORS 구성모든 컨트롤러에 전역적으로 CORS 설정을 적용하려면 구성에서 ' WebMvcConfigurer' 빈을 정의하면 됩니다.import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.spring..

Java/Spring 2024.04.30

[Spring]@ManyToOne, @OneToMany 엔티티간 다대일, 일대다 관계 설정

@ManyToOneJPA(Java Persistence API)의 일부이며 두 엔티티 간의 다대일 관계를 설정하는데 사용됩니다.예를 들어, 많은 예약이 동일한 객실에 연결될 수 있습니다. 한 엔터티(예: 'BookedRoom')의 여러 인스턴스가 다른 엔터티(예: 'Room')의 한 인스턴스와 연결되어 있음을 나타냅니다.fetch = FetchType.LAZYFetchType.LAZY지연 로딩: 엔터티를 느리게 가져오는 경우, 이는 엔터티 데이터가 특별히 요청될 때까지 데이터베이스에서 로드되지 않음을 의미합니다. 이는 상위 엔터티가 검색될 때 관련 엔터티의 데이터가 즉시 로드되는 즉시 로드와 대조됩니다.지연 로딩의 이점:성능: 지연 로딩은 필요할 때까지 관련 엔터티의 로드를 지연함으로써 특히 관련 데이터..

Java/Spring 2024.04.29

[Java] DTO 쉽게 만드는 법 (record)

record자바에서 record는 자바 14부터 프리뷰 기능으로 도입되었고, 자바 16에서 정식 기능으로 확정되었습니다. 주요특징불변성: record의 모든 필드는 기본적으로 final입니다. 따라서 객체가 생성된 후에는 필드의 값을 변경할 수 없습니다.자동 생성된 메서드: record는 자동으로 equals(), hashCode(), toString() 메서드를 생성합니다. 이는 객체의 동등성을 검사하고, 객체를 문자열로 표현하는 등의 작업을 쉽게 처리할 수 있게 해 줍니다.간결한 구문: 필드 정의, 생성자, getter 메서드 등을 명시적으로 작성할 필요 없이, record 선언만으로 자동으로 처리됩니다.데이터 중심: 주로 데이터를 저장하고 접근하는 데 사용됩니다. 각 필드에 대한 자동 생성된 get..

Java/Spring 2024.04.27

[Spring]Jpa를 이용하여 검색기능 사용하기(pageable 사용)

Pageable 인터페이스는 Spring Data JPA에서 페이징과 정렬 정보를 전달하는 표준 방식을 제공합니다. 이를 통해 클라이언트 요청에 기반한 동적 페이징과 정렬 처리가 가능하며, 리포지토리 메소드에 Pageable 객체를 파라미터로 넘겨주면, Spring Data JPA가 이 정보를 바탕으로 SQL 쿼리를 자동으로 생성해줍니다. Pageable 객체에 담긴 페이징과 정렬 조건에 맞게 결과를 Page 형태로 반환합니다. 여기서 Page는 검색된 게시글의 페이지 정보를 포함하고 있어, 개발자는 이를 활용하여 프론트엔드에 필요한 페이징 정보(예: 현재 페이지 번호, 총 페이지 수, 페이지 당 게시글 수 등)를 쉽게 제공할 수 있습니다. 1. 리포지토리 인터페이스 정의 public ..

Java/Spring 2024.04.08

[Spring]@PageableDefault (페이징 처리)

Spring Boot에서 @PageableDefault 애노테이션은 Spring Data의 페이징 처리 기능에서 기본 페이지 크기, 정렬 등을 설정할 때 사용됩니다. 이 애노테이션은 컨트롤러 메소드의 파라미터로 Pageable 객체를 받을 때, 이 Pageable 객체의 기본 값을 지정하는 데 사용됩니다. 예를 들어, 사용자가 페이지 번호나 크기를 명시하지 않았을 경우 기본적으로 사용될 값들을 설정할 수 있습니다. Spring Data의 Pageable 인터페이스를 사용할 때, 컨트롤러 메서드의 파라미터로 Pageable 객체를 직접 받음으로써, Spring MVC가 HTTP 요청의 쿼리 파라미터(page, size, sort 등)에서 페이지네이션과 관련된 정보를 자동으로 추출하고, 해당 정보를 바탕으로..

Java/Spring 2024.04.08

[Spring] @DeleteMapping 사용방법

@DeleteMapping HTML 폼은 기본적으로 'GET'과 'POST' 메소드만 직접 지원합니다. 그렇기 때문에, 'DELETE' 메소드를 사용하기 위해서는 몇 가지 우회 방법을 사용해야 합니다. Thymeleaf와 Spring을 사용할 때, _method 오버라이드를 사용하여 DELETE 요청을 시뮬레이션할 수 있습니다. 이 방법은 HTML 폼에서 POST 메소드를 사용하지만, 요청이 컨트롤러에 도달할 때 DELETE로 해석되도록 합니다. @Controller public class ItemController { @DeleteMapping("/item/{id}") public String deleteItem(@PathVariable("id") Long id) { itemService.delete(..

Java/Spring 2024.04.02

[Spring]Model 객체와 @ModelAttribute

Spring Model 객체 Spring MVC(Model-View-Controller) 아키텍처의 일부로, Controller에서 View로 데이터를 전달하는 데 사용됩니다. Controller에서 처리한 데이터나 비즈니스 로직의 결과를 Model 객체에 추가하면, Spring MVC는 이 Model 객체를 사용하여 View를 렌더링할 때 필요한 데이터를 제공합니다. 예시) html 작성 controller @PostMapping("/board/write") public String boardWrite(String title, String content, Model model) { model.addAttribute("title", title); model.addAttribute("content", co..

Java/Spring 2024.04.02

[Spring]AOP

Spring AOP(Aspect Oriented Programming)는 크로스 커팅 관심사를 분리하여 모듈성을 높이는 프로그래밍 패러다임입니다. 이는 코드를 수정하지 않고 기존 코드에 추가적인 동작을 추가함으로써 이루어집니다. 이는 특히 로깅, 트랜잭션 관리, 보안 등과 같은 기능에서 유용합니다. 크로스 커팅 관심사(Crosscutting Concerns) 분리 여러 클래스나 메소드에 걸쳐 반복적으로 나타나는 코드를 별도의 모듈로 분리하자는 개념을 의미합니다. 예를 들어, 로깅, 보안, 트랜잭션 관리 등의 기능은 여러 클래스와 메소드에서 공통적으로 필요로 하는 기능입니다. 이런 기능들을 각각의 클래스나 메소드에서 구현하게 되면, 코드의 중복이 발생하고 유지보수가 어려워집니다. 이런 문제를 해결하기 위해..

Java/Spring 2024.03.28