본문 바로가기

개발/Spring12

Paging CountQuery With Querydsl 기본적인 페이징 방식 countQuery를 날려 totalCount 체크 기존 fetchResults()가 Deprecated 되면서 아래 방식으로 해결 @Repository @RequiredArgsConstructor public class ItemRepository { private final JPAQueryFactory jpaQueryFactory; public Page getItems(Pageable pageable) { List items = jpaQueryFactory .selectFrom(item) .offset(pageable.getOffset()) .limit(pageable.getPageSize()); long totalCount = jpaQueryFactory .select(item... 2023. 10. 25.
Spring Security와 JWT를 통한 인증 및 인가 2024.05.18 글이 새로 업데이트 되었습니다.Spring Security와 JWT를 통한 인증 및 인가 구현하기저장소 Playground/spring-security-jwt at main · solchan98/Playground🛝 개발 공부 놀이터 🛝. Contribute to solchan98/Playground development by creating an account on GitHub.github.com 이 글을 읽기 전, 아래 내용을 생각해볼 필요가 있다.1. Spring Security의 기본 프로세스는 알고 있는가?2. Spring Security없이 JWT를 통한 인증 및 인가 구현을 할 수 있는데, 왜 Spring Security를 사용하는가? 1번에 대해서는 이 글에서 아주 .. 2022. 9. 28.
Redis를 통한 JWT Refresh Token 관리 Spring Security와 JWT 그리고 Redis를 통한 Access Token 재발급 2024.05.18 글이 새로 업데이트 되었습니다.  저장소 Playground/spring-security-jwt at main · solchan98/Playground🛝 개발 공부 놀이터 🛝. Contribute to solchan98/Playground development by creating an account on GitHub.github.com  본 포스팅은 이전 Spring Security와 JWT를 통한 인증 및 인가 과정에 이어서 진행된다.JWT는 한 번 발급되면 만료되기 전 까지 삭제할 수 없다.이 문제를 어떻게 해결할까?일반적으로 RefreshToken이라는 추가적인 토큰을 통해 이를 해.. 2022. 2. 11.
Refresh Token 발급과 Access Token 재발급 +2022-06-12 새로 작성되었습니다. 이전 포스팅 Redis를 통한 JWT RefreshToken 관리 포스팅과 하나로 정리되었습니다. 2022. 2. 11.
발급받은 JWT로 요청하기 https://sol-devlog.tistory.com/19 로 글을 통합하였습니다. 2022. 2. 11.
[Spring] SecurityContext에 사용자 정보 넣어 테스트하기 Security Context에 우리가 원하는 사용자의 정보를 넣어 테스트가 정상적으로 동작할 수 있도록 해보자. 테스트 케이스를 작성하다 보면 사용자 정보 변경, 로그인 된 사용자만 요청가능한 API를 테스트하는 경우가 있다. 그러기 위해서는 Secutiry Context에 사용자 정보가 들어있어야 한다. 기본적으로 Spring Secutity를 사용하여 로그인 서비스가 구성되어있다는 가정하에 진행한다. WithSecurityContextFactory WithSecurityContextFactory는 SecutiryContext를 생성하여 테스트 시 사용할 수 있도록 해주는 인터페이스이다. 우리는 이 인터페이스의 구현체를 작성하여 사용할 것 이다. createSecutiryContext 메서드의 파라미.. 2022. 2. 10.
[SpringBoot] FCM을 통해 Push알림 보내보기 (  + 진행 당시, 기능 구현에 집중하다보니 전체적인 설계나 코드가 클린하지 못할 수 있으니 이 부분은 리팩토링 하면서 적용하시면 좋을 것 같아요! :)  ) 현재 참여하고 있는 IT연합 동아리 YAPP에서 진행중인 프로젝트에서 Push 알림을 사용하기로 하였다.하지만 Push알림을 구현 해본적이 없기 때문에 이번에 시도를 해보았다.간단하게 타이틀과 메세지만 보내보자!👏FireBase 프로젝트클라이언트와 서버의 작업을 시작하기 전, Firebase 작업먼저 준비하여야 한다.프로젝트를 생성하고 클라이언트와 서버 각각의 설정파일을 준비해야 한다.프로젝트 생성다음의 주소로 들어가서 프로젝트를 생성한다.Firebase프로젝트 만들기프로젝트 생성은 매우 간단하여 이미지 자료는 첨부하지 않았다.진짜 간단..클라.. 2022. 2. 10.
[Spring] DispatcherServlet이란 무엇인가? DispathcerServlet Dispathcher의 dispatch는 보내다는 뜻을 가지고 있다. 즉, Servlet으로 보낸다는 뜻이다. servlet-container 내에서 작동된다. [FrameworkServlet.java > HttpServlet.java > Servlet.java] 를 상속받아 구현한 Servlet이다. 따라서 Servlet-Container와 Servlet의 개념을 먼저 알고 있어야 한다. Servlet 정의된 클라이언트의 요청에 대해 상응하는 응답 결과인 웹 페이지나 결과값을 동적으로 생성해 주기위한 자바 프로그램이다. 스레드 단위로 실행된다. Servlet은 독립적으로 실행될 수 없으며, Servlet-Container에 의해 관리된다. 다음은 java8에서 제공하는 .. 2022. 2. 10.
[SpringBoot] Redis를 SpringBoot 프로젝트에서 사용해보자 로그인 관리를 공부하면서, 세션과 리프레시 토큰을 효율적으로 관리하는 방법 중 메모리에 저장하여 빠른 접근성과 동시에 디스크에도 저장하여 영속성까지의 이점을 갖는 Redis를 알게 되었다. 로컬에 설치하고 SpringBoot에서 사용해보자. Redis는 메모리에 저장하여 빠른 접근과 디스크에 저장하여 영속성 또한 가지고 있다. 이런 영속성에 대해 snapshotting(RDB)과 AOF 두 방식이 존재한다. sanpshotting은 시간, 저장 횟수에 대해 주기를 두어 디스크에 바이너리 데이터로 dump.rdb파일에 저장하는 방식이다. AOF는 조회명령을 제외한, 입력/수정/삭제 명령이 실행될 때마다 버퍼에 기록한다. 이후 주기적으로 파일에 저장한다. 기본값으로 appendonly.aof파일에 저장된다... 2022. 2. 10.
[SpringBoot] Controller의 여러가지 요청과 응답 처리 스프링 어플리케이션에서 클래스를 정의하면서 @Controller 어노테이션을 추가하면 해당 클래스는 Controller로 등록된다. 클라이언트가 요청을 보내면 DispatcherServlet는 Controller로 등록된 객체 중 해당되는 객체의 메서드를 핸들러가 찾는다. @Controller // 2022. 2. 10.
[Spring] 스프링 컨테이너, Bean 등록 및 사용하기 이 게시글은 스프링 컨테이너와 Bean을 깊게 다루기 보다는 스프링 컨테이너와 Bean의 흐름을 이해하고 어떻게 사용하고 사용되는지를 알아보는 것이 목적이다. 스프링 컨테이너를 배우기에 앞서 알고있어야 하는 패턴이 있다. 바로 싱글톤 패턴이다. 스프링 컨테이너는 스프링에서 사용되는 객체(Bean)를 싱글톤으로 관리해주기 때문이다. 싱글톤 패턴이 무엇인지 간단하게 이해하고 스프링 컨테이너가 무엇인지 알아보자. 싱글톤 패턴이 뭔데? 싱글톤 패턴 어떠한 객체를 단 한 번만 생성하고, 생성된 객체를 어디서든지 참조할 수 있도록 하는 패턴이다. 다음 예제를 보고 이해해보자 프린터를 사용하는 프로그램을 생각해보자. 프린터 객체 1. static영역에 객체를 1개만 생성해둔다. 2. printer 인스턴스가 필요하면.. 2022. 2. 10.
[Spring Security] @AuthenticationPrincipal 로그인한 사용자 정보 받아오기 Spring Security에서는 Session에서 현재 사용자의 정보를 다음과 같이 Principal로 조회할 수 있다. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User user = (User)authentication.getPrincipal(); Principal 객체는 Java 표준 객체이고, 받을 수 있는 정보는 name뿐이다. 하지만 우리는 name뿐이 아닌 Account의 많은 정보를 얻고싶다. 그리고 Account의 정보를 Controller에서 맵핑 메서드의 파라미터로 받는 것을 효율적으로 받기 위해 @AuthenticationPrincipal과 어댑터 패턴을 적용하여 사용.. 2022. 2. 10.