컴퓨터 프로그래밍/Spring 46

[Spring] Swagger UI 적용

🌱 Swagger UISwagger UI는 RESTful API를 문서화하고 시각적으로 표현하기 위한 도구다. API의 엔드포인트, 요청 및 응답 형식 등을 사용자에게 쉽게 이해할 수 있는 형태로 보여준다.  🌱 Swagger UI 장점자동 문서화: Swagger UI는 API 코드에 주석을 추가하거나 Swagger Annotation을 사용하여 자동으로 API 문서를 생성한다. 이를 통해 개발자들은 코드 변경 시 문서도 함께 업데이트할 수 있다.인터랙티브: Swagger UI는 사용자가 API를 직접 테스트할 수 있는 인터페이스를 제공한다. 사용자는 요청을 보내고 응답을 확인할 수 있어 API의 동작을 쉽게 이해할 수 있다.시각적 표현: API의 엔드포인트, 요청 및 응답 모델을 시각적으로 표시하여..

[Spring] Soft Delete

📚 배경1. 탈퇴한 회원의 계정으로 중복 계정 생성을 막을 때2. 데이터 분석을 위해서 탈퇴한 회원에 대한 데이터가 필요할 때3. 서비스 정책 상 탈퇴한 유저의 정보를 정해진 기간동안 유지할 필요가 있을 때 등 위와 같은 이유로 soft Delete 가 사용된다.직접 User Entity 에 userStatus 라는 필드를 만들어서 삭제 유무를 파악했었는데, Spring Boot 에서 이를 지원해주기 때문에 활용하는 방법에 대해서 알아보았다.User@Getter@Entity@SQLDelete(sql = "UPDATE users SET deleted = true WHERE id = ?")@SQLRestriction("deleted = false")@NoArgsConstructor@Table(name = ..

[Spring] 페이지네이션 정리 코드

Controller// 식물사전 리스트 조회@GetMapping("/v1/dictionaries")public ResponseEntity>> getDictionaryList( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ResponseEntity.ok(ApiResponse.success(dictionaryService.getDictionaryList(page, size)));} 🎯 @RequestParam 으로 page, size 를 받고 defaultValue 를 설정함으로서 다른 입력이 없으면 기본 값을 설정해준다. 🎯 Page 로 반환하..

[Spring] Projection 및 예시코드 설명

entity 전체의 값을 가져오는 것이 아닌 조회 대상을 지정해 원하는 값만 조회할 수 있도록 지원하는 클래스DB조회 시 select * from table 간에 사용되는 * 가 모든 필드를 가져오므로, 불필요한 메모리 낭비가 될 수 있음. Projections 사용법 4가지bean: setter로 주입하며, 필드명이 일치해야함field: setter 없이 주입 가능하며, 필드명이 일치해야함constructor생성자 기반으로 삽입하여, 네이밍 상관 없이 생성자 필드순으로 바인딩생성자에 입력한 값 순서로 확인하기 때문에 컴파일 시점에 오류 확인이 불가하여, 런타임 간에 발견될 수 있음바인딩 DTO에 @QueryProjection가 있으면 컴파일 시점에 entity와 마찬가지로 Q클래스를 생성미리 생성된 Q..

[Spring] QueryDSL

타입 안전한 동적 쿼리를 직관적으로 작성할 수 있게 도와주는 Java 기반 쿼리 라이브러리환경세팅build.gradledependencies { // querydsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"}QueryDslConfig.java@Configurationclass Qu..

[Spring] Lazy Loading 과 Eager Loading 의 차이, N+1 Problem 과 해결 방법

1. Lazy Loading (지연 로딩)특징: 연관된 엔티티를 필요할 때 로드함. 처음에는 관련 데이터가 로드되지 않고, 실제로 데이터를 사용할 때 쿼리가 실행됨.장점: 불필요한 데이터를 미리 로드하지 않으므로 성능에 유리함. 데이터 접근이 적을 때 효과적이다.단점: 연관 데이터에 접근할 때마다 쿼리가 발생해 N+1 문제가 발생할 수 있다.2. Eager Loading (즉시 로딩)특징: 연관된 엔티티를 즉시 로드함. 엔티티가 조회될 때 모든 연관된 데이터도 한 번에 가져온다.장점: 한 번에 모든 데이터를 로드하여 추가 쿼리가 발생하지 않는다. 필요할 때 미리 로드된 데이터를 사용할 수 있다.단점: 불필요한 데이터를 미리 로드하기 때문에 성능이 저하될 수 있다. 데이터가 많을 때는 비효율적이다.N+1 ..

[Spring] Password Encoder 사용법

SignUpRequestDto@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[\\p{Punct}])[A-Za-z\\d\\p{Punct}]{8,20}$", message = "비밀번호는 최소 8자리 이상, 영문, 특수문자를 1자 이상 포함되어야 합니다.")@NotBlank(message = "비밀번호를 입력해주세요.")private String password; Dto 에서 위와 같이 입력해서 비밀번호 패턴을 제한할 수 있다.PasswordEncoder@Componentpublic class PasswordEncoder { public String encode(String rawPassword) { return BCrypt.withDef..