Spring/Spring Boot 71

[Spring] JPA 영속성 컨텍스트의 시작 범위 (Lazy Loding proxy 객체 조회 시 에러가 나는 이유)

many to one 관계에 있는 엔티티를 jpa 즉시로딩에서 지연로딩으로 바꾸었더니 생각치 못했던 곳에서 생긴 문제의 기록입니다. 결론 더보기 jpa 지연로딩의 proxy 객체를 호출할 떄면, proxy 는 영속성 컨텍스트에서 데이터를 조회합니다. 즉 준영속 상태라면 proxy 객체와 실제객체를 매핑시킬 수 없습니다. 영속성 컨텍스트의 생명주기는 트랜잭션의 생명주기와 동일합니다. 📌 문제 상황 회사 코드에서 N+1 문제가 발생하는 부분이 있어 몇일 전 가벼운 마음으로 @ManyToOne 관계에 있는 엔티티를 Eager 로딩에서 Lazy 로딩으로 바꿔 주었다. 어치파 지연로딩으로 바꾼다고 하여도, 객체를 불러올 때 Proxy 객체에서 필요하면 엔티티를 조회하기 때문에 진정한 N+1 문제의 해결방안은 아니..

Spring/Spring Boot 2022.12.15

[spring] WebFlux란 + Reactor 객체란 (Mono<> 와 Flux<>)

아래의 글 순서대로 읽으시면 해당 글을 이해하시는데 족흠 도움이 됩니다 🙏 (어쩌면 안될지도...^^) ⚙️ Block, Non-Block, sync(동기), Async(비동기) 의 간단한 개념 [Spring] Webclient 란❓ (RestTemplate vs WebClient) [Spring] WebClient 사용방법 가이드 (now) [spring] WebFlux란 + Reactor 객체란 (Mono 와 Flux) 이번 글에서는, Spring webflux 와 reative programing & reactor library 에 대한 개념 이해와 reactor 객체인 mono 와 flux를 다루는 방법의 이해를 목표로합니다 [목차] Spring WebFlux 개념 Spring WebFlux 생긴..

Spring/Spring Boot 2022.12.07

[Spring] WebClient 사용방법 가이드

아래의 글 순서대로 읽으시면 해당 글을 이해하시는데 족흠 도움이 됩니다 🙏 ⚙️ Block, Non-Block, sync(동기), Async(비동기) 의 간단한 개념 [Spring] Webclient 란❓ (RestTemplate vs WebClient) [Spring] WebClient 사용방법 가이드 (now) [spring] WebFlux란 + Reactor 객체란 (Mono 와 Flux) 저번 포스팅에 이어서 WebClient 사용방법에 대해 공부해보겠습니다. 📌 Spring WebClient 사용하기 공식문서에 나온내용을 토대로 해석해놓은 블로그글이 굉장히 많기 때문에 공식문서를 하나씩 보기보다는, 간단한 사용방법과 제가 어려웠던 부분을 토대로 정리를 해보겠습니다. 1) WebClient 종속성..

Spring/Spring Boot 2022.11.23

🚀 Spring Request DTO 추상클래스로 받아오기 (까지의 트러블 슈팅..😂)

이번 포스팅은 스프링에서 Client 에서 받는 Json 데이터를, 조건에 따라 다른 유효성 검사를 하기위한 과정에서의 트러블 슈팅 기록입니다.. ➡️ 상황 사내에서, 쿠폰 정책에 따라 각각의 쿠폰을 등록할 떄, 필요한 조건이 달라졌기 때문에 기존의 단일 유효성 검사에서, 어떤 쿠폰이냐에 따라서 Custom 한 Validation 을 적용해야하는 상황이였습니다. [문제 직면부터 시도과정] @RequestBody 로 받아오는 DTO 클래스 생성자에 throw Exception ➡️ 내가 던진 Exception 이 아닌 예상치 못한 `Json Parse Error : HttpMessgeException` 이 던져지고, `ClassCastException`이 터짐.. 문제 해결 후, 확장성을 고려하여 DTO ..

Spring/Spring Boot 2022.11.17

[Spring] Webclient 란❓ (RestTemplate vs WebClient)

아래의 글 순서대로 읽으시면 해당 글을 이해하시는데 족흠 도움이 됩니다 🙏 ⚙️ Block, Non-Block, sync(동기), Async(비동기) 의 간단한 개념 [Spring] Webclient 란❓ (RestTemplate vs WebClient) (now) [Spring] WebClient 사용방법 가이드 [spring] WebFlux란 + Reactor 객체란 (Mono 와 Flux) 📗 이번 포스팅에서는, Spring 에서 외부 API 와 통신하는 WebClient 에 대해서 공부해보고자 합니다...!!!! 옛날 글에서 간단하게 Spring RestTemplate 에 대해서 잠깐 공부한적이 있는데 Spring 5.0 부터는 WebClient를 권장하고 추후부터 RestTemplate 는 de..

Spring/Spring Boot 2022.11.08

[Spring] 로그 프레임워크와 로그백이란 - 로깅에 대해 알아보자

이번 포스팅은, CS 요청건 처리 시, 과거 이력을 확인해야할 때, 로그를 효율적으로 남기지 못해 명확한 결과를 전달하지 못한 아쉬운 경험을 토대로 Spring Boot 를 이용하여 로깅을 설정해보기위한 시도 글입니다..ㅠ 실스코드 Github 📌 하고싶은 것 spring 으로 서버를 띄울 시 로그에, 요청 들어온 "API Method, API 주소, 요청 응답값" 을 로그로 찍고싶었다. 📌 현재 현재는 default 로, sql 문과 hibernate 쿼리만 로그로 나오는 상황입니다. 📌 시도해 볼 것 및 키워드 logback-spring.xml 과 interceptor, 혹은 aop 를 이용해 요청을 가로체서 로그 남기기 🙏 내용이 길어져서 Spring로깅 인터페이스와, 구현체 및 로그백 설정에 대해..

Spring/Spring Boot 2022.10.24

[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

JPA DTO PROJECTION - 클래스 기반, 인터페이스 기반

jpa 로 데이터를 불러올때, dto 혹은 엔티티말고 다른 무엇인가로 데이터를 담는방법 = 프로젝션 하고싶은 것 queryDsl 을 사용하지 않고 간단하게 jpa 만을 사용해서 dto를 담고싶었습니다. interface 기반의 dto 프로젝션이 가능하다는 것을 알고 있지만 재사용성을위해 dto class 그대로 사용하고싶었습니다. 문제 하지만 컬럼명이 맞지않아서 오류가 났고 이를 해결...해야함 인터페이스 기반이 아닌 클래스 기반 프로젝션을 할 때 에러가 남 no converter found capable of converting from type [org.springframework.data.jpa.repository.query.abstractjpaquery$tupleconverter$tupleback..

Spring/Spring Boot 2022.09.15

[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] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기

같이 보면 좋을 연결된 포스팅들 ✔️ Spring Jwt Refresh Token - 인증 인가의 흐름 👉 [Spring] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기 ✔️ [Spring] Spring JWT 인코딩, 디코딩 하기 - Java Json 파싱 이전 포스팅에서 인증과 인가의 흐름, 인증하는 방법들에 대해 공부를 해보았고 이번에는 실질적으로 자주 사용하고 사용되는 JWT 토큰에 대해서 조금 더 자세하게 공부해 보고자 합니다. JWT란 👏🏻 JWT는 Json Web Token의 약자로, 단어 그대로 Json 기반의 Web Token입니다. 발급된 토큰값을 Json 객체로 변환시켜 client에게 전송해주는 것을 말합니다. JWT는 JWS(Json Web Signature) 와 J..

Spring/Spring Boot 2022.08.18