공부/Spring

    [Spring Boot] JPA Specification 이용하여 다중 검색 조건 사용하기(string, long, enum)

    [Spring Boot] JPA Specification 이용하여 다중 검색 조건 사용하기(string, long, enum)

    JPA Specification JPA 를 사용할 때 Repository 에서 id 를 검색할 경우 findById Id 와 name을 검색하고자 하는 경우 findByIdAndName 으로 쿼리 메서드를 만들 수 있다. 하지만 검색 조건이 많아질수록 쿼리 메소드가 길어지면서 가독성도 떨어지고 비효율적이다. 해서 JPA 에서 Specification 으르 제공한다. Specification 을 사용해 원하는 조건을 상황에 맞게 선택해서 추가할 수 있다. 사용법 MemberEntity 생성하기 @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity @SuperBuilder public class MemberEntity{ @Id @GeneratedVa..

    [Spring Security] Consider defining a bean of type 'org.springframework.security.core.userdetails.UserDetailsService' in your configuration.

    [Spring Security] Consider defining a bean of type 'org.springframework.security.core.userdetails.UserDetailsService' in your configuration.

    spring에서 bean 을 찾을 수 없다는 에러가 나오는데 인터페이스 구현을 하지 않아서 생기는 오류로 implements UserDetailsService 를 추가해준다.

    [Spring Swagger3.0] spring boot에 Swagger 3.0 실습 예제

    의존성 추가 implementation "io.springfox:springfox-boot-starter:3.0.0" implementation "io.springfox:springfox-swagger-ui:3.0.0" SwaggerConfig.java 파일 추가 @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } } Docket : swagger 설정에 핵심이 되는 Bean apis : api 스..

    [Spring Swagger3.0] Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

    spring boot 2.6 버전 이후에 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되면서 몇몇 라이브러리(swagger포함)에 오류가 발생한다고 한다. application.yaml 에 아래 내용을 추가해주면 된다. spring: mvc: pathmatch: matching-strategy: ant_path_matcher

    [Spring Security] The signing key's size is 40 bits which is not secure enough for the HS512 algorithm.

    spring security + jwt 에서 로그인 api 를 사용하던 중 다음과 같은 에러가 나왔다. io.jsonwebtoken.security.WeakKeyException: The signing key's size is 40 bits which is not secure enough for the HS512 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS512 MUST have a size >= 512 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonweb..

    [spring] swagger2로 API 명세서 만들기

    Swagger 란 REST API를 설계, 빌드, 문서화 및 사용하는 데 도움이되는 OpenAPI 사양을 중심으로 구축 된 오픈 소스 도구 세트이다. swagger를 사용하는 이유는 코드 몇줄로 API 명세서를 작성해 사용할 수 있으며 테스트할 수 있는 UI도 제공한다. 또한 파라메터를 넣어보고 테스트도 할 수 있다. API 문서를 작성하는 시간도 줄이고 실시간으로 유지할 수 있다는 장점도 있다. 사용방법 '3.0.0' 과 '2.9.2' 의 설정 방법이 다른데 나는 '2.9.2' 버전으로 진행했다. 의존성 추가 - gradle // swagger compile 'io.springfox:springfox-swagger2:2.9.2' compile 'io.springfox:springfox-swagger-u..

    [JPA] Collection 컬렉션 (Collection, List, Set, List+@OrderColumn)

    JPA는 자바에서 기본적으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. 하이버네이트가 컬렉션을 효율적으로 관리하기 위해 하이버네이트는 엔티티를 영속 상태로 만들 때 Collection으로 한번 감싸서 사용한다. Collection은 아래 두가지 상황에서 사용한다. @OneToMany , @ManyToMany 를 사용해서 일대다나 다대다 관계를 매핑할 때 @ElementCollection 을 사용해서 값 타입을 하나 이상 보관할 때 Collection, List Collection, List 는 중복을 허용하는 컬렉션이다. PersistentBag을 래퍼 컬렉션으로 사용한다. 하이버네이트의 특징 때문에 Collection을 사용할 때 즉시 초기화해서 사용하는 것을 권장한다..

    [JPA] Optional

    Optional Optional은 Java8 부터 도입된 클래스로 null이 아닌 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체이다. Spring Data JPA 사용 시 Repository에서 리턴 타입을 Optional로 받을 수 있도록 지원하고 Optional을 사용하면 반복적인 Null 체크 를 줄일 수 있기 때문에 잘 사용하면 편리하고 좋다. Mybatis를 쓰거나 Java8버전 이하로 개발하면 익숙하지 않을 수 있다. @Override @Transactional public Sample updateSample(Long sampleId) { Optional sample = sampleRepository.findById(sampleId); if(!sample.isPresent()) { th..

    [JPA] @Embedded, @Embeddable

    임베디드 타입(Embedded type) JPA에서 새로운 값 타입을 직접 정의해서 사용하는 것을 임베디드 타입이라고 한다. 임베디드 타입도 int, String 처럼 값 타입이다. 임베디드를 사용하지 않았을 때 @Entity public class User { @Id @GeneratedValue private Integer id; private String name; private String phone; // address private String city; private String country; private String zipcode; // standard getters, setters } User가 상세한 데이터(주소)를 그대로 가지고 있는 것은 객체지향적이지 않으면 응집력만 떨어진다. 임..

    [JPA] 최범균님 <JPA 기초> 내용 정리하기

    최범균님의 유튜브 강의를 들으면서 마지막에 나오는 정리 부분을 텍스트로 정리해 보았다. 강의 내용 참고나 키워드를 보면서 공부를 진행하면 좋을 것 같다. https://www.youtube.com/playlist?list=PLwouWTPuIjUi9Sih9mEci4Rqhz1VqiQXX 기본 구조 EntityManagerFactory 초기화 DB 작업이 필요할 때마다 EntityManager 생성 EntityManager로 DB조작 EntityTransaction으로 트랜잭션 관리 스프링과 연동할 때는 대부분 스프링이 대신 처리하므로 매핑 설정 중심으로 작엄 영속 컨택스트 엔티티를 메모리에 보관 변경을 추적해서 트랜잭션 커밋 시점에 DB에 반영 JPA CRUD EntityManager 를 사용해서 엔티티 단..