Spring 97

[Spring Security] 존재하지 않는 API 호출 시 404 대신 401 or 403 을 반환할 때

개발환경은 Spring Boot 3.0.x + Spring Security 6.x 입니다 [목차] 문제 상황 Spring Security 에서 404를 반환하지 않는 이유 문제 해결 [결론 요약] error page 설정 FORWARD_REQUEST_URI - error 처리 경로 ("/error") spring seurity 에 등록 AuthenticationEntryPoint 혹은 AccessDeniedHandler 에서 핸들링 1. 🤣 문제상황 Spring Security 를 적용하니까 이게 6 버전이라 그런건지,, 설정을 놓친건지 클라이언트에서 존재하지 않는 리소스 endpoint 를 호출할 때 404 NOT FOND 를 반환하지 401 UnAuthorization 코드를 반환하는 문제가 있었습니..

Spring/Spring Boot 2023.07.15

Spring Security Exception Handling - Filter 단 예외 처리하기

오늘은 Spring Security 를 적용했지만 JWT 가 만료되거나, 잘못된 토큰일 경우 401 코드 뿐만아니라 에러 메세지까지 핸들링 해줄 수 있도록 설정해 주고자 합니다. 1. Spring Security 와 @ControllerAdvice 먼저 상황은 아래와 같습니다. (깔끔하져?) 사이드 프로젝트 진행중인데, 바빠서 이부분까지 신경을 못 써주고 당연히 메세지까지 전달해주겠지~ 했지만 아니였습니다. 일단 저는 Spring Boot 에서 에러 핸들링을 @ControllerAdvice 를 이용한 AOP 방식으로 처리해주었는데요 📌Spring Security 는 Spring Context 의 바깥 쪽, 즉 Filter 단에서 Servlet 에 전달되기 전에 처리됩니다. @ControllerAdvice..

Spring/Spring Boot 2023.07.06

[Spring Junit] @SpringBootTest + @Autowired 에러 "Could not autowire. No beans of "

때는 바야흐로.. ATDD 과정 수강 중 각각의 E2E 인수테스트의 데이터베이스를 서로 영향받지않게 격리 시켜주기 위해 test 패키지에 만든 별도의 클래스를 빈으로 올려 @Autowired 로 주입받고자 했습니다. 하지만 에러가 뜨는군요! DataBaseCleanUp 이라는 Class는 Test 패키지 아래에서만 존재하는 클래스입니다. @TestComponent public class DataBaseCleanUp { .. 생략 } @SpringBootConfiguration 의 scan 대상으로는 포함시키지 않기위해 @TestComponent 를 적용해 주었습니다. @TestComponent는 Test 를 위한 Component 이지만, javadoc 설명처럼 직접적으로 ComponentScan 을 사..

Spring/Spring err 2023.07.05

[Spring] oneToMany, 일 대 다 관계 조회 성능 테스트 (Jpa, QueryDsl, Java Stream, 단일 DB 조회 쿼리 성능 비교)

👏🏻 오랜만에 포스팅! 오늘은 Spring 에서 다대다, 일대다 관계를 가지는 RDB 테이블에서의 데이터를 가져올 수 있는 방법과, 어떤 방법이 제일 빨랐는지 기록해볼려 합니다. 보통 Spring 에서 JPA를 사용하면 oneToMany, manyToMany 의 관계에서 터지는 N+1 문제를 해결하기 위한 방법을 많이 고민하고는 합니다. 저 또한 취준생때 겪었던 문제 중 가장 고민을 많이 고생했던 문제로 포스팅을 남겼던 기억이 있습니다. 👉 [Spring] JPA N+1 문제 해결방법(지연로딩 N+1, 2개 이상 ToMany 관계, fetch join, 페이지네이션) [목차] ✔️ 이번 포스팅에서는 JPA 의 @OneToMany 기능의 사용을 전혀 고려하지 않고 아래의 방법들에 대해서만 비교를 해보았습니..

Spring/Spring Boot 2023.06.30

[Spring Security] @AuthenticationPrincipal 유닛 테스트 - Custom Mock User 삽입하기

✨ 이번 포스팅에서는, @AuthenticationPrincipal 유닛 테스트에 대해서 기록해보고자 합니다. 현재 프로젝트는 JWT + Spring Security를 사용하고 있고, Spring Security 에서 제공해주는 User 객체가 아닌 실제 디비에 저장되어있는 Custom 한 User 정보를 이용해 인증된 유저를 SecurityContextHolder에 저장하는 방식으로 구현해놓았습니다. 참고 👉 Spring Security 가이드 (with. Spring boot 3.0) - 스프링 시큐리티란, 동작 과정, 사용 방법, JWT 발급 그렇기 때문에 요청이 들어오는 Rest API 에 담긴 JWT가 정상적으로 인증이 가능한 토큰이라면 → 지속적으로 DB에 접근하지 않고도 로그인한 객체 정보를..

Spring Data mongoDB + mysql 사용하기 (with. queries)

===== 채팅서버 구현하기 시리즈 ===== ✔️ [Web-Network] - 채팅 서버 설계를 위한 배경지식 정리 (HTTP, WebSocket, WebRTC) ✔️ [Spring/Spring Boot] - Spring WebSocket 공식문서 가이드 살펴보기 ✔️ [Spring/Spring Boot] - Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling) 👉🏻 [Spring/Spring Boot] - Spring Data mongoDB + mysql 사용하기 (with. queries) 채팅서버를 구현하면서, 채팅 내역을 저장할 DB로 nosql 을 사용하기로 했고 그 중에 mongoDB를 사용하고자 했습니다. 기존의 API 서버에..

Spring/Spring Boot 2023.06.14

Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling)

===== 채팅서버 구현하기 시리즈 ===== ✔️ [Web-Network] - 채팅 서버 설계를 위한 배경지식 정리 (HTTP, WebSocket, WebRTC) ✔️ [Spring/Spring Boot] - Spring WebSocket 공식문서 가이드 살펴보기 👉🏻 [Spring/Spring Boot] - Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling) ✔️ [Spring/Spring Boot] - Spring Data mongoDB + mysql 사용하기 (with. queries) spring 으로 간단하게 채팅기능을 구현해 기록해보고자 합니다. 구현을 중점으로해서 가장 좋은 방법은 아닐겁니다(?) 만들고자 했던 서비스는, 카..

Spring/Spring Boot 2023.06.14

Spring WebSocket 공식문서 가이드 살펴보기

===== 채팅서버 구현하기 시리즈 ===== ✔️ [Web-Network] - 채팅 서버 설계를 위한 배경지식 정리 (HTTP, WebSocket, WebRTC) 👉🏻 [Spring/Spring Boot] - Spring WebSocket 공식문서 가이드 살펴보기 ✔️ [Spring/Spring Boot] - Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling) ✔️ [Spring/Spring Boot] - Spring Data mongoDB + mysql 사용하기 (with. queries) spring websocket 공식문서를 따라해보면서 spring 에서는 websocket을 어떻게 사용해야하는지 알아보고자 합니다. 코드는 깃허브..

Spring/Spring Boot 2023.06.01

Spring Security 가이드 (with. Spring boot 3.0) - 스프링 시큐리티란, 동작 과정, 사용 방법, JWT 발급

개발환경은 Spring Boot 3.0.x + Spring Security 6.x 입니다 토이 프로젝트에서 로그인-회원가입 기능을 개발해야하는데 "스프링 시큐리티"를 적용할까 말까 하다가, 이왕 할때 해보자라는 생각으로 "스프링 시큐리티를 적용"해보고자 합니다. 솔직히 프레임워크에 대해서 깊게 공부하고 싶지는 않으니까 "간단, 간단 겉핥기 식 - 기능 구현" 에 초점을 맞춰 정리해볼려구 합니다! 👏🏻 목표는 1. 로그인 성공시 JWT 토큰 반환 + 2. 생성한 User Entity 기반의 회원가입입니다. [목차] 스프링 시큐리티란 스프링 시큐리티 동작과정 스프링 시큐리티 사용 가이드 JWT 사용해서 인증-인가 해주기 (custom 한 jwt filter 생성) 1. Spring Security 란 Spr..

Spring/Spring Boot 2023.05.04

[Spring] restdocs + swagger ui 같이사용하기 (restdocs 문서 자동화)

✨ api 문서화 정리 글 Swagger Spring Rest Docs RestDocs + Swagger-UI 같이사용하기 오느른, 오늘은,, 오늘우리는,,, Spring Restdocs 를 사용해 test 코드로 Ascciidoc 문서조각을 모으고,, 모아서 만든 adoc 문서를 또 편집하고.. html 로 변환하고 이 일련의 귀찮은 과정을 거쳐야하는 Spring Rest Docs 의 단점을 커버하기 위해 Swagger 와 restdocs 를 결합해보겠습니다 ! 👏🏻👏🏻👏🏻 사실 시작은 이러했습니다. 현재 사내에서는 Swagger 만을 사용하고 있기 때문에 프로덕션코드에 API 문서를 위한 코드가 존재하는게 지저분해서 현재 하고있는 토이프로젝트에는 RestDocs 를 적용해 보았습니다. 하지만, 아래처..

Spring/Spring Boot 2023.04.14