QueryDsl 메서드 알아보기 JPA Querydsl은 JPA를 이용하여 동적 쿼리를 작성할 수 있게 해주는 라이브러리입니다. Querydsl은 JPA와 연동하여 사용할 때, 다양한 메소드를 제공합니다. 이 중에서 주요한 메소드를 정리하면 다음과 같습니다. 메서드명 메서드 설명 select() 검색 대상 엔티티의 속성을 선택합니다. from() 검색 대상 엔티티를 지정합니다. where() 조건을 지정합니다. orderBy() 정렬을 지정합니다. join() 조인을 수행합니다. on() 조인 조건을 지정합니다. fetch() 즉시 로딩(fetch join)을 수행합니다. leftJoin(), innerJoin(), rightJoin(), fullJoin() 각각의 조인 유형에 따라 조인을 수행합니다. ..
스프링 Jpa 중복 컬럼 상속으로 생성하는 방법 알아보기 예를 들어, User 엔티티와 Admin 엔티티가 있고, 이 두 엔티티는 모두 ID와 NAME 필드를 가진다고 가정해보겠습니다. 이때 중복된 ID와 NAME 컬럼을 상속 받는 BaseEntity를 생성하고, User와 Admin은 BaseEntity를 상속받도록 하면 중복 코드를 줄일 수 있습니다. @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected Long id; protected String name; // G..
스프링 Jpa Paging 처리방법 알아보기 Spring Boot와 JPA를 이용하여 데이터를 조회할 때, 많은 데이터가 있는 경우에는 Paging(페이징) 기능을 사용하여 데이터를 페이지 단위로 나누어서 조회하는 것이 효율적입니다. Paging은 특정 개수만큼의 데이터를 가져와서 화면에 출력하고, 다음 페이지의 데이터를 가져와서 출력하는 방식입니다. 이를 통해 한 번에 모든 데이터를 가져오는 것보다 데이터 전송과 조회 시간을 줄일 수 있습니다. 1. Controller에서 Pageable 객체 생성 Paging 기능을 사용하기 위해서는 Controller에서 Pageable 객체를 생성해야 합니다. Pageable 객체는 요청 파라미터로부터 pageNumber, pageSize, sort 정보를 추출하..
Spring modelmapper Java Entity Dto 매핑하는 방법 1. 의존성 추가 build.gradle 파일에 ModelMapper 의존성을 추가합니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.modelmapper:modelmapper:2.4.2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } 2. Entity와 DTO 클래스 작성 먼저, Entity 클래스와 DTO 클래스를 작성합니다. 여기에서는 Person Entity와 PersonDto DTO를 사용 @Entit..
싱글톤 패턴(Singleton Pattern)은 디자인 패턴 중 하나로, 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴입니다. 스프링 프레임워크에서는 빈(Bean)으로 등록된 객체들이 모두 싱글톤으로 관리됩니다. 즉, 스프링 컨테이너는 객체를 생성할 때, 최초 한 번만 생성하고, 이후에는 해당 객체를 계속 사용합니다. 싱글톤 패턴 사용 이유 1. 리소스 공유 어떤 클래스의 인스턴스를 여러 개 만들 경우, 그만큼 메모리를 많이 사용하게 됩니다. 하지만 싱글톤 패턴을 사용하면 하나의 인스턴스만 생성하여 필요한 모든 곳에서 공유하여 사용할 수 있습니다. 이렇게 하면 리소스를 효율적으로 사용할 수 있습니다. 2. 데이터 공유 여러 개의 인스턴스가..
[Spring] ResponseEntity 사용법 1. ResponseEntity란? Restful API에서 return Type으로 사용되고있다. ResponseEntity를 사용하여 반환되는 Response의 Header의 Http Status Code를 제어 할 수 있다. ResponseEntity를 사용하여 반환되는 Response의 body에 Json 형태로 Return해 줄 수 있다. 2. 200 OK 3. 400 BadRequestException 4. 500 InternalServerError
스프링부트에서는 @ControllerAdvice와 @ExceptionHandler 어노테이션을 사용하여 전역적인 예외 처리를 할 수 있습니다. 이를 통해 각각의 컨트롤러에서 예외 처리를 하지 않아도 되며, 예외 처리 로직의 중복을 제거할 수 있습니다. 1. @ControllerAdvice @ControllerAdvice 어노테이션을 사용하여 공통 예외 처리를 수행하는 클래스를 정의합니다. 이 클래스에는 @ExceptionHandler 어노테이션을 사용하여 예외 처리 메서드를 정의합니다. @ExceptionHandler 어노테이션을 사용하여 예외 처리 메서드에 처리할 예외 클래스를 지정할 수 있습니다. 2. @ExceptionHandler @ExceptionHandler 어노테이션을 사용하여 예외 처리 메..
스프링 프레임워크에서 의존성을 주입하는 방법 3가지 1. 생성자 주입 (Constructor Injection) 2. 필드 주입 (Field Injection) 3. 수정자 주입 (Setter Injection) 1. 생성자 주입(Constructor Injection) 1. 객체를 생성할 때 생성자를 통해 의존성을 주입하는 방식입니다. 2. 객체 생성 시점에 모든 의존성이 주입되므로, 의존성 누락이나 잘못된 순서로 주입되는 일을 방지할 수 있습니다. 3. 컴파일 타임에 의존성 주입이 일어나므로 런타임에 NullPointerException과 같은 예외가 발생할 가능성이 줄어듭니다. 4. 생성자 파라미터를 통해 어떤 의존성이 필요한지 명시적으로 표시되기 때문에 코드 가독성이 좋아집니다. 장점 1. 객체 ..
[SpringSecurity] JWT 구현 시 javax/xml/bind/DatatypeConverter Spring Security 프레임워크와 JsonWebToken 을 이용하여 웹인증을 구현하는 도중, 로그인을 시도해서 서버로부터 토큰을 얻으려고 할때, 웹서버 로그에 다음과 같은 에러가 발생했습니다. java.lang.NoClassDefFoundError: Could not initialize class javax.xml.bind.DatatypeConverterImpl 아래와 같이 dependency를 추가해준다. Maven javax.xml.bind jaxb-api 2.1 Gradle // https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api i..
[Spring] 서비스 기동 시키는 방법 3가지 1. VM OPtion -> -Dserver.port=[다른포트] 2. mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003' 3. mvn clean compile package java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar 2,3번은 cmd or git-bash를 통해 실행해야함