spring 43

[JUnit] JAVA 매개변수 Test - @ParameterizedTest

🚀 오늘은 다양한 매개변수 케이스를 하나의 테스트 메소드에서 주입시켜주는 @ParameterizedTest 어노테이션의 다양한 케이스들의 가이드를 기록해보고자 합니다...!! [목차] @Parameterized란 @Parameterized 가이드 @Parameterized 공급자 종류 @Parameterized란 @ParameterizedTest 어노테이션은 Junit 에서 다양한 매개변수들에 대한 경우를 테스트할 수 있도록 제공해주는 어노테이션입니다. @ParameterizedTest 주석이 달린 메소드는 매개변수화된 테스트 메소드임을 의미하고 Private, Static 이 아니어야 합니다. @Parameterized 시작 가이드 의존성 추가 먼저 JUnit Jupiter Params 의존성을 추가해..

[Spring Data Jpa] delete(Entity e) vs deleteById 차이

그저 궁금해서 알아보는 jpa delete 와 deletById 의 차이점 결론부터 말하면 똑같다. deleteById 는 findbyId + delete(entity e) 의 과정이 합쳐진 메소드라고 볼 수있습니다. 👏🏻 두 메소드의 차이점은 deleteById를 사용하면 내부적인 findById 조회 시 값이 없을 경우 EmptyResultDataAccessException 이 발생한다는 점 입니다. 따라서 엔티티조회시, 커스텀한 익셉션을 떨어트려 메세지를 담고싶다면 delete 를 사용하는게 마음이 더 편하다..? public Notice getNotice(final Integer idx) { return noticeRepository.findById(idx).orElseThrow( () -> ne..

Spring/Spring Boot 2022.09.26

[Spring] Spring JWT 인코딩, 디코딩 하기 - Java Json 파싱

같이 보면 좋을 연결된 포스팅들 ✔️ Spring Jwt Refresh Token - 인증 인가의 흐름 ✔️ [Spring] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기 👉 [Spring] Spring JWT 인코딩, 디코딩 하기 - Java Json 파싱 이번에 포스팅할 내용은 spring 에서 jwt 를 만들고, 외부에서 받아온 jwt 를 해석하는 방법과 jwt 해석한 byte 정보를 json 으로 파싱해서 jwt payload 에서 원하는 정보를 추출하는 방법 입니다. 📗 Spring JWT 만들기 Token 을 만드는 방법까지는 아니고, 간단하게 Test를 위해 Spring 에서 JWT 만드는 방법입니다. 저는 jjwt 라이브러리를 사용했고, jjwt는 JWT 토큰 생성 및 JWT..

Spring/Spring Boot 2022.08.23

[Spring] 무한스크롤 구현 및 성능 개선 하기 - No Offset 페이지네이션

안녕하세요 오늘은 페이지네이션의 성능을 개선 시키는 방법 중 하나인 no-offset 페이지네이션에 대해 기록을 남겨보고자 합니다! 예전에 스프링 페이지네이션에 대해 포시팅한적이 있는데 이번에 실무에서 무한스크롤을 적용해야해서 직접! 사용해볼 기회가 생겨 더 자세한 내용을 기록으로 남기고자 합니다!! 👏🏻 이전 포스팅해서는, 아래와 같은 방법을 커서 페이지네이션이라고 칭했는데, 여기서 말하는 No Offset 과 같은 의미의 단어로 말했습니다. jojoldu님의 글을 보고, MySql 에서 Cursor 라는 키워드를 다른 의미로 쓰고있다는걸 알게 되어, 커서페이징을 👉 No offset 이라 말했습니다. jojoldu님의 블로그글을 많이 참고하였으며, 아래의 순서대로 진행됩니다 😊 No offset 이란..

Spring/Spring Boot 2022.08.12

[IntelliJ] 인텔리제이 단축키 모음 - Mac, Window 조금..ㅎ

💥 내가 자주 사용하는 인텔리제이 단축키 !! 💥 계속 추가할 예정 [코드 단축키] soutv : 작성시, print 객체 나옴 Command + Option(alt) + V : 변수 추출 Command + Option(alt) + m : 메소드 추출 F6 : 클래스 추출 (클래스 이름 드래그 후 f6 ➡️ 상위 클래스 추출 혹은 클래스 패키지 이동) Command + Option(alt) + n : 인라인 = 중복된 코드 추합 Command + shift + u : 전부 대소문자 변환 - upper case / downer case Ctrl + Command + u : translation 번역 모듈 실행 Ctrl + Command + O (ctrl + shift + x) : 한글 문자에 맞는 변수명 ..

Spring/기타 2022.07.06

[Spring] 스프링 부트 JPA 페이징 성능 개선 - querydsl 페이지네이션(오프셋 페이징, 커서 페이징, querydsl 정렬)

JPA N+1 문제를 해결했으니, 이제 페이지네이션 성능개선을 해볼려고 한다. https://thalals.tistory.com/246 [Spring] 스프링 부트 페이지네이션 (Query, JPA, offset / cursor 페이지네이션) 페이지네이션을 구현해보자!! spring boot 의 JPA를 이용해서 구현을 할 예정이다 페이지네이션을 구하기 위해서는 요롷게 3가지를 생각해 주어야한다. view size : 한페이지에 보여줄 개수 total page : thalals.tistory.com 이전에, 페이지네이션에 대해 공부해 보았을 떄 offset 과 cursor 2가지 방식의 페이지네이션 구현 방법이 존재하고 JPA 페이징 API는 오프셋 기반 방식이라는 것을 확인한 적이 있다. 오늘은, JP..

Spring/Spring Boot 2022.04.10

[Spring] JPA N+1 문제 해결방법(지연로딩 N+1, OneToMany, ManyToOne 연관관계, fetch join, 페이지네이션)

이번 글에서는, JPA N+1 문제가 무엇인지,, 왜일어나고,,, 어떤 해결방법이 있는지 알아보고 내 프로젝트에 적용해 보고자 한다! 결과적으로, N+1 문제를 해결하면서 페이지네이션까지 하고자한다! JPA N+1 문제 JPA N+1문제란, JPA가 데이터를 조회할 때, 연관관계 매핑에있는 객체들을 함께 조회하여(N개 만큼) 추가 쿼리가 발생하는 문제를 N+1 문제라고 합니다. JPA는 JPQL을 생성하여 실행하게 되는데, 엔티티 객체와 필드이름을 이용하여 쿼리를 만든다. 이때 객체의 연관관계 매핑에 의해서 관계가 맺어진 다른 객체들이 함께 조회된다. 지연로딩시 N+1 문제가 발생하지 않나요? JPA의 FetchType으로는 즉시로딩과 지연로딩 이 있습니다. (이전 글 참고) 즉시로딩시, 연관된 모든 객..

Spring/Spring Boot 2022.03.30

[Spring] JPA FindAll<Entity> to convert DTO (ModelMapper)

Spring에서는 DTO를 이용해서 사용자에게 Request를 받고, Response를 보냄으로써, 데이터를 보호한다. Request를 DTO로 받는방법은 정말 많고, 자료도 많지만 Response를 DTO로 변환하는 방법은 잘 나오지 않아 정리해 보고자 한다. 1) 가장 쉬운 방법 가장 쉬운 방법은 역시 노가다다. Response로 보내기 위한 엔티티 정보를 불러오와서, Setter로 하나씩 DTO 클래스에 입력해주면된다. 하지만 이건 쿨하지 못하다. 2) ModelMapper 이 글의 주된 목표이다. ModelMapper를 사용하면, 비교적 쿨하게, 한방에, 센스있는 converting이 가능하다. ModelMapper란 ModelMapper의 목표는 특정 사용 사례를 처리하기 위한 간단하고 리팩토링..

Spring/Spring Boot 2021.12.03

@NoArgsConstructor 과 @RequiredArgsConstructor

@NoArgsConstructor @NoArgsConstructor 어노테이션은 lombok 의 기능 중 하나이다. Getter, Setter 와 함께 당연시(?)되게 쓰이는 코드를 줄이기위해 쓰이는 어노테이션으로 알고있다. 주요기능은, 기본 생성자의 생성이다. 파라미터가 없는 생성자를 만든다. 초기 값이 필요한 final 필드가 있을 경우, 컴파일 에러 @NoArgsConstructor(force=true) 를 하면, 컴파일 에러를 내지 않고 0 / false / null 로 초기화 @RequiredArgsConstructor @RequiredArgsConstructor 어노테이션은 의존성 주입을 위해 사용한다. 주요 기능은 @NonNull이나 final이 붙은 필드에 대한 생성자를 생성한다. 두 어노..

Spring/Spring Boot 2021.11.25

@RequestBody - ajax Json 요청을 객체 응답으로 자동 변환

컨트롤러에서 데이터를 전달해 인자에 할당하는 대표적인 방법으로는 @RequestBody 와 @RequestParam이 있다. @RequestParam @RequestParam 어노테이션은 단일 파라미터를 전달 받을때 사용하는 어노테이션 입니다. 넘어온 값의 키로 값을 불러오는 어노테이션 입니다. @GetMapping("/save") public Word createWord(@RequestParam String content){ Word new_word = new Word(content); return wordrepository.save(new_word); } RequestParam을 사용하면 단일 변수값을 받아오기 때문에 받아오는 데이터가 많아지기도 하고 return을 해줄 때도 다시 Json 객체로 변..

Spring/Spring Boot 2021.11.24
반응형