Spring 6

[Spring Data] JPA를 활용해 pagination 구현하기

들어가며웹 애플리케이션에서 무한 스크롤이나 페이징을 통해 데이터를 나눠 불러오는 방식은 서버 성능과 사용자 경험을 모두 고려한 방식입니다. 한 번에 모든 데이터를 불러오면 페이지 로드 속도가 느려지고, 특히 데이터가 1000개 가까이 되는 경우 사용자 경험과 성능에 부정적인 영향을 줄 수 있습니다. 이번 쇼핑몰 프로젝트에서도 메인 페이지에 약 1000개의 상품 데이터를 한 번에 불러오는 것은 비효율적이라 판단하여 페이징 처리를 도입하기로 했습니다. 이번 글에서는 Spring Data의 페이지네이션 기능을 위해 사용하는 클래스&인터페이스에 대해 설명하고, 이를 어떻게 활용하는 지 설명하겠습니다.  클래스 & 인터페이스먼저 페이지네이션을 위해 사용한 Spring Data의 인터페이스와 클래스입니다.인터페이스..

Spring/Spring Data 2024.11.15

[Spring Security] Spring Security 필터 체인과 미들웨어로 JWT 인증 시스템 설계

들어가며이번 쇼핑몰 프로젝트에서 백엔드의 보안 관련 로직을 담당하게 되었습니다. Google OAuth 2.0으로 제삼자에게 사용자 인증 역할을 위임하고 인증된 사용자에 대해 애플리케이션 자체의 Access Token과 Refresh Token을 JWT 형식으로 발급해 회원을 관리했습니다. 애플리케이션의 로그인 흐름은 아래 글에 자세히 나와있습니다. [Spring Boot] Google OAuth 2.0과 JWT를 통한 회원 관리 방식 이해하기들어가며반려동물 쇼핑몰 프로젝트에서 Google OAuth 2.0과 JWT를 회원 관리 방식으로 채택했습니다. 이미 다른 블로그에 코드에 대한 Reference는 많이 존재하고 있지만 사용자 인증부터 JWT 발급 및 갱jundyu.tistory.com 액세스 토큰의..

[Spring Boot] Enum을 활용해 전역에서 Runtime Exception Handling

들어가며예전에 커뮤니티 사이트를 제작하는 프로젝트를 할 때 굉장히 초보였던터라 예외에 대한 처리가 하나도 없었습니다. 그저 기능들 구현하는데 쩔쩔 매느라 당장 눈에 보이는 예외만 처리하고 넘어갔습니다. 그래서 이번 쇼핑몰 프로젝트에선 비즈니스 로직에서 발생할 수 있는 예외들 위주로 전역에서 관리해봤습니다.  Runtime Exception(=Unchecked Exception)우선 Runtime Exception에 대해 간단한 설명이 필요할 것 같습니다. Runtime Exception은 말 그대로 프로그램 실행 후 발생할 수 있는 예외로 개발자가 예측할 수 없는 오류를 일컫는 말입니다. Exception의 하위 클래스인 Runtime Exception은 컴파일러가 예측할 수 없기 때문에 Unchecke..

Spring/Spring Boot 2024.11.04

[Spring Data] JPA의 EnableJpaAuditing으로 Entity 필드 관리

들어가며반려동물 쇼핑몰 프로젝트에서 JPA를 이용한 Entity 클래스 생성을 도맡았습니다. 프로젝트의 규모가 생각보다 커져서 테이블이 10개 넘게 나와서 Entity의 필드 정의하는데 시간이 꽤 걸렸고, 끝나고 나니 중복되는 필드들이 많았습니다. 중복되는 필드에 대해 하나의 글로벌 클래스에서 처리할 수 있는 방법이 없을까 고민하다가 추상 클래스를 만들고 상속 받도록 했습니다. 그 중에 생성 일시 필드는 객체가 생성될 때 자동으로 값이 할당되면 좋을 것 같아서 이리저리 방법을 찾아봤습니다. 결국, Github에서 다른 사람들의 Repository 중 JPA의 EnableJpaAuditing Annotation으로 Auditing 기능을 활성화해서 Entity의 생명 주기를 자동으로 관리하도록 만든 것을 ..

Spring/Spring Data 2024.11.03

[Spring Boot] Google OAuth 2.0과 JWT를 통한 회원 관리 방식 이해하기

들어가며반려동물 쇼핑몰 프로젝트에서 Google OAuth 2.0과 JWT를 회원 관리 방식으로 채택했습니다. 이미 다른 블로그에 코드에 대한 Reference는 많이 존재하고 있지만 사용자 인증부터 JWT 발급 및 갱신까지의 흐름을 자세하게 설명하는 곳이 없어서 자료조사하고 이해하는 데 시간이 많이 걸렸습니다. 그래서 이번 프로젝트에서 회원 관리 기능을 구현하며 사용한 사용자 인증 방식의 흐름을 자세하게 설명하는 글을 쓰려고 합니다. 사용자 인증 방식은 개발자 마음 가는대로 얼마든지 다양하게 구현할 수 있기 때문에 그 중 하나의 흐름을 설명하려고 합니다. 우선 웹 애플리케이션이고 Google OAuth 2.0으로 제 3자인 구글에게 인증을 위임하고 인증에 성공한 사용자에 대해서 JWT 형식의 Acces..

Spring/Spring Boot 2024.10.29

[Spring Boot] Google OAuth 2.0 API 요청 시 invalid grant와 malformed token 응답 해결하기

들어가며반려동물의 쇼핑몰 제작 프로젝트에서 구글 소셜 로그인을 맡았습니다. Google OAuth 2.0로 로그인해서 인가 코드를 받아 사용자 인증을 하고, JWT를 생성해서 회원을 관리하려 했습니다. Spring Boot에서 api 구현을 끝내고 포스트맨으로 테스트를 하려니까 자꾸만 인가 코드가 유효하지 않다고 나오는 invalid grant와 malformed token 에러 메세지.. 인가 코드로 Google OAuth 2.0 API로 액세스 토큰을 요청해야 하는데 이 에러 해결하느라 하루를 다 써버렸습니다. 이번 글은 invalid grant와 malformed token에 대한 트러블 슈팅입니다. 저처럼 인가 코드가 유효하지 않다는 응답을 받는 분들에게 이 글이 많은 도움이 되었으면 좋겠습니다...

Spring/Spring Boot 2024.10.26