Spring/Spring Boot 63

[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

Spring JWT Refresh Token - 인증 인가의 흐름

같이 보면 좋을 연결된 포스팅들 👉 Spring Jwt Refresh Token - 인증 인가의 흐름 ✔️ [Spring] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기 ✔️ [Spring] Spring JWT 인코딩, 디코딩 하기 - Java Json 파싱 사내에서 Refresh Token 관련된 부분의 이슈가 생겨서, 리팩토링 하기전에 문제점에 대해 파악한 부분과 인증과 인가의 흐름을 명확하게 집고 넘어가야겠다는 필요성을 느껴 그에 대한 기록을 남깁니다. 📌 하고자 하는것 : jwt 액세스 토큰이 만료되면 jwt 리프레쉬 토큰으로 액세스 토큰 발급 📌 문제 : 액세스 토큰 만료 후, Controller 에서 principal 객체로 로그인 한 사람을 가져올려고하는데 null 이 들어오는..

Spring/Spring Boot 2022.08.17

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

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

Spring/Spring Boot 2022.08.12

[Spring] 스프링 순환 참조, 무한 재귀 해결하기 (DTO, JsonIgnore)

jpa 엔티티 일대다 : 다대일 관계 생성시 흔하게 일어나는 순환 참조문제, 이전 프로젝트에서는 뭣도 모르고 @jsonignore로 처리했었는데, 이게 왜 일어나는지 공부해보니, 좋지 않은 방법이였다는 걸 깨달았다,.. JPA에서 순환참조 문제는 이제 알고보니까는, 엔티티를 조회할 떄 발생하는 게 아니라 entity를 json으로 변환할 떄, 즉, Entity To Json serialize할 때 (보통 controller 단)에서 일어나는 문제였다. Entity를 Json으로 변환하면서, 연관된 객체를 다시 Json으로 변환하고, 이 변환 과정에서, 다시 연관된 객체의 연관된 객체를 참조... 참조 지옥,,, 무한 참조,,, 크기가 펑펑펑,, 스프링 무한 순환 참조 문제 해결 방법 @jsonignore..

Spring/Spring Boot 2022.04.20

[Spring] 스프링 엔티티 삭제 시점 히스토리 기록하기 (Soft Delete)

생성시간과, 삭제시간은 jpaAuditing으로 기록이 가능했는데, 삭제시점을 자동을 체크해주고 싶어서 찾아보니 jpaAuditing에는 없었다 흨,,ㅠ 그러다 하이버네이트에서, delete 시점을 체크할 수 있는 @SqlDelete 와 default 조건절을 붙히는 @where 를 발견했다..! Soft Delete ex) `UPDATE table SET delete = 1 WHERE id = 2` 형태로 ROW가 삭제 되지 않고 flag를 통한 제어 하는 방식 delete가 되더라도, 데이터를 지우는게 아닌, column 값을 변경하여, 데이터를 제어하는 방법이다, @SQLDelete Annotation @SQLDelete 어노테이션을 통해, 실제 삭제가 이루어질때 수행 할 쿼리를 적으면 된다. ex..

Spring/Spring Boot 2022.04.20

[JPA] Fetch join 과 Join 차이점

fetch join은 불러온 데이터까지 영속성 컨텍스트에 저장하지만 join은 불러온 데이터를 영속성 컨텍스트에 저장하지 않는다...! Fetch Join 조회 주체가 되는 엔티티와 연관 관계의 엔티티(JOIN) 까지 모두 조회하여 영속화한다. 즉, 2개의 엔티티 모두 영속성 컨텍스트로 관리되어진다. 일반 Join 조회 주체가 되는 엔티티만 조회하고 영속화한다. 만약 연관 관계의 엔티티 데이터를 사용해야 할 경우 별도의 조회 쿼리문을 실행 해야 함. FetchType.EAGER 일 경우, 연관 관계의 엔티티를 영속화하기 위해 N번의 쿼리를 발생시킴. FetchType.LAZY 일 경우, 최초 조회시 획득한 id 로 조회를 N번해야함. [참고] https://velog.io/@heoseungyeon/Fet..

Spring/Spring Boot 2022.04.20

[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/스프링] springboot gradle - XSS 스크립트 오류 해결하기 (with @RequestBody)

프로젝트 댓글에, 누군가 XSS 공격을 해놓았다.. 껄껄껄 이론으로만 알던걸 직접 당해보니 기분이 새롭고 상쾌하다 해결하자!! 1.XSS 란 2. Spring에서 Xss 해결하기 1. XSS 란 Crooss-site Scripting으로, 클라이언트가 입력값으로 악의적인 스크립트 문을 삽입하여, 개발자의 의도대로 동작하지 않게하는 공격을 말합니다. 바로 아래처럼,,..!! ㅠㅠ 2. Spring에서 Xss 해결하기 XSS 공격을 예방하는 방법으로는, 특정문자 치환하기 특정문자 입력시 검사 후, 입력받지 않게하기 모든 body태그에 C:out 입력하기.. 등등 하지만! 네이버에서 이 기능등을, lucy xss servlet filter라는 정의해둔 라이브러리가 존재한다, 이걸 프로젝트에 적용해서 사용해보자..

Spring/Spring Boot 2022.04.05

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