728x90

spring 33

Gradle sync failed: Could not find org.springframework.boot:spring-boot:spring-boot-gradle-plugin 오류 해결

(build.gradle 파일) Gradle 4 버전에서 정상동작을 하였던 아래 코드가 오류가 났을 때 dependencies { compile('org.springframework.boot:spring-boot-starter-web') testCompile('org.springframework.boot:spring-boot-starter-test') } 아래와 같이 compile -> implementation, testCompile -> testImplementation 으로 바꾸면 오류가 해소된다. dependencies { implementation('org.springframework.boot:spring-boot-starter-web') testImplementation('org.springf..

Spring 2022.02.28

(스프링 시큐리티)UserDetailsService, UserDetail

UserDetailsService UserDetailService 인터페이스는 DB에서 회원 정보를 가져오는 역할을 담당 loadUserByUsername() 메소드가 존재하며, 회원 정보를 조회하여 사용자의 정보와 권한을 갖는 UserDetails 인터페이스를 반환한다. 스프링 시큐리티에서 UserDetailService를 구현하고 있는 클래스를 통해 로그인 기능을 구현한다고 생각하면 된다. UserDetail 스프링 시큐리티에서 회원의 정보를 담기 위해서 사용하는 인터페이스는 UserDetails 이다. 이 인터페이스를 직접 구현하거나 스프링 시큐리티에서 제공하는 User클래스를 사용합니다. User 클래스는 UserDetails 인터페이스를 구현하고 있는 클래스이다. @Service @Transac..

JPA 2022.02.17

스프링 시큐리티(Spring Security) 설정

스프링 시큐리티(Spring Security) 설정 추가1 security dependency 추가하기 pom.xml에 security와 관련된 의존성 추가 후 “Reload All Maven Projects”을 클릭하여 의존성을 받아온다. org.springframework.boot spring-boot-starter-security 스프링 시큐리티 설정 추가2 SecurityConfig 소스 작성 유저에게 선택적으로 권한요청이 가능 @Configuration @EnableWebSecurity // (1) public class SecurityConfig extends WebSecurityConfigurerAdapter { // (2) @Autowired MemberService memberServic..

Spring 2022.02.17

(Spring DI) Appconfig를 활용한 가격정책을 DI로 구현

DI(의존성 주입)를 활용한 할인정책 구현(Java) 할인 정책을 구현하기 위해 DiscountPolicy 인터페이스 밑에 정액할인 정책 구현체와 정률할인 정책 구현체를 두었다. - 할인 정책 인터페이스(DiscountPolicy.java) import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member, int price); } - 정액 할인 정책 구현체(FixDisCountPolicy.java) public class FixDiscountPolicy implements DiscountPolicy { private int discountFixAmount ..

Spring 2022.02.15

(스프링 데이터 JPA) 페이징과 정렬

스프링 데이터 JPA 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능합니다(내부적으로 limit + 1조회함). Page 사용 예제 코드 검색 조건: 나이가 20살 정렬 조건: 이름으로 오름차순 페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 3건 Page 사용 ..

JPA 2022.02.15

QueryDSL 소개

QueryDSL 소개 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크입니다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있습니다. IDE의 코드 자동 완성 기능 사용 가능 문법적으로 잘못된 쿼리를 허용하지 않음(오류 체크) 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음 등 의 특징을 가집니다. //member, order 테이블에서 OrderStatus의 상태와 MemberName의 이름에 따라 값을 조회 public List findAll(OrderSearch orderSearch) { QOrder order = QOrder.order; QMember member = ..

JPA 2022.02.15

페치 조인(fetch join) 의 활용

(JPA) 페치 조인(fetch join) 의 활용 JPQL에서 성능 최적화를 위해 제공하는기능입니다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능입니다. join fetch 명령어를 사용합니다. 페치 조인 예(v1(안쓴 버전), v2(쓴 버전) 비교) /** * V1. 엔티티를 조회해서 DTO로 변환(fetch join 사용X) * - 단점: 지연로딩으로 쿼리 N번 호출 */ @GetMapping("/api/v1/simple-orders") public List ordersV1() { List orders = orderRepository.findAll(); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(t..

JPA 2022.02.14
728x90