Spring/Spring Boot 63

[Spring] Exception 예외 처리 - AOP와 @RestControllerAdvice를 이용한 ErrorHandling

이전의 작성된 글을 조금 수정하여, Spring 에서 throw 로 던져지는 예외들을 전역적으로 잡아 처리하는 방법에 대해 설명합니다. 예전 팀프로젝트를 할때 팀원분이 AOP를 이용한 예외처리를 한적이있는데, 후에 다른기업 코테 과제테스트를 하다가, try catch 문을 이용해서 예외처리를 하니 코드가 너무 길어지고 보기가싫어서 @ResControllerAdvice 어노테이션을 이용한 AOP 예외처리 에러핸들링 방법에대해 공부했던 적이 있습니다. 다시 사이드프로젝트를 진행하면서 예전 레거시 포스팅(?) 을 리펙토링한다는 생각으로 작성해봅니다! [목차] Spring 에서 Exception 을 전역적으로 처리하는 과정 @ControllerAdvice 와 @RestControllerAdvice @Except..

Spring/Spring Boot 2023.03.06

[Spring] querydsl orderby null - 동적 정렬 스킵하기

queryDsl 에서 OrderSpecifier 를 사용하여 동적으로 정렬할 컬럼을 지정할 수 있습니다. (참고) ✨이번 게시글에서는, 동적 정렬 시 특정조건에서는 정렬을 하지않는 방법에 대해서 정리해보겠습니다. 👏🏻 사건의 발단은 이렇습니다. where 절의 BooleanExpression 처럼, null 을 반환하면 조건에 무시될 것이라 생각해서 OrderSpecifier 에서 조건에 맞지않으면 null 을 반환하여 orderBy 를 무시하자라는 무식생각으로 접근을 해보았습니다. public List getSortFiledEntityList(String field) { return queryFactory .select(..) .from(qEntity) .orderBy(sortByField(field)..

Spring/Spring Boot 2023.02.03

[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
반응형