스프링부트 5

[스프링 부트] keycloak 사용 SSO(OIDC) 인증 서버 간단하게 구축해보기

아키텍처그림은 프로파게이션의 모델 그림이고 나는 서비스 1개만 구성되어있다. 흐름 설명1. 사용자 인증  사용자가 인증이 필요한 시스템에 접근했을경우 Spring Boot는 사용자를 Keycloak 로그인 페이지로 보냅니다.  사용자는 로그인 화면에서 아이디와 비밀번호를 입력하게 됩니다. 2. JWT 토큰 발급   사용자가 로그인에 성공하면 Keycloak은 사용자에게 JWT 토큰을 발급합니다.   이 토큰은 사용자 정보를 담고 있으며, 나중에 인증된 요청임을 증명하는 데 사용됩니다. 3. 서비스 요청   사용자는 로그인 후 받은 JWT 토큰을 가지고, Spring Boot 애플리케이션에 요청을 보냅니다. 이 토큰은 요청의          Authorization 헤더에 포함됩니다.    Spring B..

스프링부트 2024.11.25

스프링 부트 Redis 분산 락 활용 동시성 제어

나의 미간지 프로젝트 프로젝트를 또 개선하고 싶어서 프로젝트를 뜯어봤다. 문제점멀티스레드 상황에 게시물을 조회했을때 동시성 문제로 인해 조회수가 정상적으로 증가 안하는 문제  시간 순서 | 스레드 1 | 스레드 2-------------------------------------------------------------T1 | findById -> viewCount = 10 |T2 | | findById -> viewCount = 10T3 | viewCount++ -> 11 |T4 | ..

스프링부트 2024.07.04

이미지 업로드 비동기 처리

나의 미간지 프로젝트무엇을 더 업그레이드 할수 있을까를 생각하고 글쓰기 기능을 개선하기로 생각했다. 그 중 이미지 업로드 하는 부분이 오래걸려 리팩토링 하려고 생각이 들었다. 문제점글쓰기 API가 너무 오래걸린다. (이미지 resize 함수 영향) 결론함수 비동기 처리 하여 30s -> 1s 로 성능 개선 완료 개선 전 글쓰기 -> 함수의 모든 동작이 완료 되고 데이터 return ( resize 함수에 종료 시간을 기다려야 해서 시간이 오래걸림 ) 30.31S 개선 후1.372S글쓰기 -> 이미지 resize 함수를 비동기로 처리 , 이미지 resize함수는 비동기 처리 후 완료 데이터 return (만약 이미지 reszie 전 게시물을 본다면 이미지 업로드 중이라는 사진을 보게 됨) 이미지 resiz..

스프링부트 2024.06.19

[스프링] 프로젝트 N+1 해결하기 (fetch join

나의 팀 프로젝트 미간지! https://miganzi.vercel.app/ 미간지 나만 알고 있는 우리 동네의 미지의 공간을 특별한 큐레이팅을 통해 소개 miganzi.vercel.app 사이트는 이렇게 되어있고 메인에 들어가면 2개의 요청이 날아간다 reissue는 토큰이 종료되었을때 날아감 posts는 게시물 (무한스크롤) popular-post는 말그대로 인기 포스트이다 (페이지 맨위에 나오는 게시물) 하지만 posts 쿼리의 상태가?? 맛있게 N+1 나가는 모습!! 1 2 3 4 5 6 7 @Operation(summary = "전체 게시물 조회 API") @GetMapping("/posts") public Slice getBoardList( @PageableDefault (size = 6,so..

스프링부트 2023.09.01

[Spring boot] 스프링 부트 에러페이지 커스터마이징하기

참고 페이지 https://www.baeldung.com/spring-boot-custom-error-page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Controller public class MyErrorController implements ErrorController { @GetMapping("/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); if (status != null) { int statusCode = Integer.valueOf(st..

스프링부트 2022.04.06