[Spring] Filter vs. Interceptor
2024. 11. 27. 11:48
Spring
개발을 하다 보면 공통적으로 처리해야 할 업무들이 많다.공통 업무에 관련된 코드를 페이지마다 작성한다면 비효율적일 것이다.이에 Spring은 공통적으로 여러 작업을 처리할 수 있는 다음과 같은 기능들을 지원하고 있다.1. Filter(필터)2. Interceptor(인터셉터)3. AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) 이제 필터(Filter)와 인터셉터(Interceptor)가 무엇인지 그리고 차이점에 대해서도 알아보자.또한, 간략하게 인터셉터(Interceptor)와 AOP에 대해서도 비교해보자. Filter 요청과 응답을 거른 후 정제- Dispatcher Servlet에 요청이 전달되기 전/ 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리..
[Spring] Spring에서의 요청처리 흐름(+Spring Security/MVC의 에러 처리 위치)
2024. 11. 26. 16:46
Spring
에러 커스텀 리팩토링 작업을 하다가Spring Security의 요청 처리 단계는 MVC 요청 처리 흐름보다 앞서 있다는 사실을 알았고,이런 처리를 명확하게 하기 위해서는요청 처리 흐름에 대해 조금 더 자세히 정리해 둬야 겠다는 생각이 들었다. 먼저 Spring Framework의 간략한 요청 흐름은 다음과 같다.🐣요청 흐름클라이언트 → Filter: 요청 가공, 인증 토큰 확인 등.→ DispatcherServlet: 요청 라우팅 중심.→ Interceptor (preHandle): 컨트롤러 실행 전 공통 작업.→ Handler (Controller): 요청 처리.→ Interceptor (postHandle): 컨트롤러 실행 후 응답 수정 가능.→ View: 응답 렌더링.→ Interceptor..
[Spring Security] 401, 403 에러처리(Spring 3.xx)
2024. 11. 26. 15:01
Spring
🐣문제상황 스프링 프로젝트에서에러를 커스텀하다가 401, 403에러는 커스텀한대로 나오지 않는 것을 발견했다. 난 요기에 넣어서 나오게 하고싶었고, 다른 에러는 요런식으로 잘 나오는데 그치만 401 에러는 이렇게만 나왔다 🐣원인Spring Security에서 발생하는 예외는 Spring MVC의 기본 예외 처리와 별도로 처리하기 때문!401 Unauthorized 응답은 기본적으로 Spring Security의 AuthenticationEntryPoint에서 처리된다.이 처리 방식은@RestControllerAdvice, @ExceptionHandler를 통해 설정해줬던 Spring MVC의 예외 처리 흐름과 다르다!! Spring Security의 요청 처리 단계는 MVC 요청 처리 ..
Spring 프로젝트에서 웹소켓 적용하기~!! 2탄
2024. 6. 12. 21:44
Spring
🔎하고싶은것유저중 한명이 POST,UPDATE,DELETE요청을 보내서 여행 일정을 변경하면같은 세션에 있는 다른 유저들에게도 페이지 새로고침되어 변경사항이 보였으면 좋겠다! 🔎구현 방법서버에서 클라이언트의 엔티티변경(POST,UPDATE,DELETE) 요청을 처리한 후 브로드캐스트하여 변경사항을 모든 클라이언트에게 알림=> 웹소켓에 연결된 클라이언트는 메시지를 받을 때 페이지를 새로고침함 브로드캐스트❔❓한 장치가 여러 장치에게 동시에 메세지를 전송하는 것을 의미하며여기서는 웹소켓을 통해 서버에서 클라이언트들에게 동시에 메세지를 전송하는 방식을 의미한다. 브로드캐스트: 한 번의 메시지 전송으로 네트워크에 연결된 모든 장치(또는 지정된 그룹)에게 메시지를 전달하는 방식멀티캐스트(Multicast):..
Spring 프로젝트에서 웹소켓 적용하기~!! 1탄
2024. 6. 10. 23:01
Spring
여행 일정 공유사이트를 만들며 여러명이서 실시간으로 편집상태를 공유하는 기능이 있으면 좋겠다고 생각했고, 이를 위해 웹소켓을 연동하게 되었다. 기본 HTTP는 stateless하기 때문에 서버에 변경사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경사항이 적용되지 않는 반면 WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경사항이 적용된다! 웹소켓의 이런 특징을 이용해 실시간 편집기능을 구현할 수 있다. 그리고 WebSocket 은 HTTP를 통해 최초 연결(핸드세이크)되며 이후 일정 시간이 지나면 HTTP연결은 자동으로 끊어지고 WebSocket Connection은 유지된다 다만 웹소켓은 stateful 프로토콜로서 connection을 항상 유지해야하기 때문에 트..
Google Oauth2
2024. 4. 2. 15:18
Spring
OAuth란? 타사 웹사이트나 웹이 리소스에 접근할 수 있게 허용해 주는 것이 주 목적이다 OAuth는 인증(Authentication)과 인가(Authorization)중 인가에 조금 더 초점을 맞추고 있따. 인증이란 ? 인증은 사용자가 자신의 신원을 사용하는 프로세스이다. 예를 들어 시스템에 로그인하려면 직원 ID, 또는 사용자 ID를 확인한다. 인가란? 인증된 사용자에 대해 특정 자원 또는 서비스에 대한 엑세스 권한을 부여 즉, 누가 어떤 자원에 접근할 수 있는지 결정 구글 로그인을 예로 들자면, 우리는 사용자의 정보, 즉 해당 사용자가 구글에 가입이 되어있는지는 구글 서버측에서 확인을 하고, 그 후 해당 정보와 인증된 사용자에게 권한을 제공해준다. 웹 서버 애플리케이션에서의 Google Oauth..
Pagination 조회 시의 Query tuning , 그리고 N+1
2023. 9. 13. 22:50
Spring
전체 조회시 속도 개선을 위한 쿼리 최적화를 하기 위해 이전 프로젝트에서 했던 것처럼 fetch join을 도입했다. 현재 프로젝트에는 Pagination이 구현되어 있었고, fetch join을 통해 1:N 연관관계인 테이블들을 조인하려는 시도를 했다. 그러나 이렇게 하면 문제가 발생할 수 있다고 한다. 어떤 문제인지, 그리고 해결법은 무엇일지 알아보았다. 📌쿼리 튜닝시 fetch Join을 쓰는 이유 우리는 보통 일대다 , 다대일 연결시 fetchType을 LAZY, 즉 지연로딩으로 설정한다. 이렇게 되면 한쪽 객체를 조회할 때 연관된 객체는 일단 Proxy 객체로 가져온 후 연관 객체가 실제로 필요할 때 select 쿼리를 따로 날려서 가져온다. 이렇게 하면 굳이 필요 없는 객체의 조회를 막을 수 ..
Hibernate spatial이란? / 간단한 쿼리 메서드
2023. 7. 12. 01:35
Spring
Hibernate Spatial은 지리 데이터 작업을 위한 표준 인터페이스를 제공한다 . 지리적 데이터에는 점, 선, 다각형 과 같은 엔터티의 표현이 포함됨 . Hibernate Spatial은 기하학 모델로 JTS(Java Topology Suite)를 사용 Geometry 는 JTS의 모든 공간 유형에 대한 기본 유형. ex) Point , Polygon 및 기타 유형과 같은 다른 유형이 Geometry 에서 확장됨을 의미합니다 . Java의 Geometry 유형은 MySql 의 GEOMETRY 유형에도 해당됨 유형의 String 표현을 구문 분석하여 Geometry 인스턴스를 얻는다. JTS에서 제공하는 유틸리티 클래스 WKTReader를 사용하여 텍스트를 Geometry 유형으로 변환할 수 있다 ..
[프로젝트]알림 기능 구현(SSE, Spring AOP)
2023. 7. 3. 16:48
Spring
💡알림기능 사용목적 yata project에서는 앱 사용의 편의성을 위해 카풀 신청 완료시, 또는 내가 쓴 게시글에 신청 요청이 왔을 때 알림 기능을 넣기로 결정하였고, 로그인 상태일 때 실시간으로 알림이 오도록 구현하도록 하였다. 알림 기능을 만들며, Spring AOP를 통해 기능분리를 하였고, 유지보수성, 확정성을 위해 Spring Annotation을 활용하여 적용하였다. 먼저 같이 Notify와 관련된 controller,dto,entity,repository,service 클래스를 정의해 줄 것이다. 그 후 Custom Annotation에 Advice를 붙여 NotifyAspect를 구현한다. AOP에 대한 것은 아래 포스팅에서 자세하게 다뤘다. Spring AOP란? [프로젝트]Custom..