전체 글 114

스프링 부트 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

Redis TTL 알아보기

@RedisHash(value = "userAlert", timeToLive = ExpireTime.REFRESH_TOKEN_EXPIRE_TIME_FOR_REDIS)public class UserAlert { @Id private String id; private String title; private String message; private String createdDate; @Indexed private Long userId;} 예전 프로젝트에서 유저 게시물에 댓글을 달면 알림이 가는 기능을 만들었다. Entity에 Redis TTL을 넣어서 사용한 적이 있는데 그 만료된 값을 어떤식으로 삭제할지 동작방식이 궁금해서 찾아봤다. 매번 찾는건지... 찾는다면 어떤식..

카테고리 없음 2024.05.30

Redis 활용 JWT 로그아웃 구현하기

작년에 진행한 미간지 프로젝트! 로그인은 JWT 로그인으로 구현 하였다.  나는 그 당시 Redis를 활용해보고 싶었고 JWT와 결합하여 사용하면 좋을것 같아서 팀원들을 설득해서 JWT로 구현하였다. https://evga7.tistory.com/140  JWT는 기본적으로 AccessToken , RefreshToken  두가지를 활용한다. 액세스토큰은 말그대로 접근을 위한 토큰 토큰을 가지고있다면 권한을 가지고있다고 판단한다. 하지만 보통 토큰은 stateless 특징을 가지므로 탈취된다면 서버는 똑같이 허용된 사용자로 판단하기때문에 30분정도의 유효기간을 두고 만료 되었을시 refreshToken을 통해 재발급을 받아 다시 사용할수 있도록한다. 물론 RefreshToken도 유효기간을 두고 발급하게..

앱개발 2024.05.28

JWT 토큰

기본 정보JSON Web Token (JWT) 은 웹표준 (RFC 7519) 으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해줍니다. 라고 설명이 나와있다. 여기서 중요한건self-contained  JWT는 이런식으로 구성되어 자체적으로 토큰에 정보를 담고있다. 그래서 전달이 쉽다.웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있다. 헤더{ "typ": "JWT", "alg": "HS256"} 이런식으로 타입은 JWTalg 는 알고리즘으로 보통 HMAC SHA256 혹은 RSA 가 사용된다. 내용JWT의 표준 스펙 1. iss (Issuer) : 토큰 발급자2. sub ..

혼자공부한거 2024.05.24

[스프링 부트] 비트 마스킹 사용해서 데이터 처리하기

내가 진행했던 테오의 스프린트 15기 (23.06.21 - 23.06.26) 우리는 멋진 길거리 사진을 소개하는 프로젝트를 만들었다.   게시글 내용은 이런식으로 보이고 태그기능을 사용하여 게시물을 검색할 수 있었다. 하지만 개발 기간은 스프린트 형식으로 진행되기 때문에 2일.. 짧은 기간동안 태그 기능을 간단히 구현하고 싶었다. 또한 백앤드는 한명..(본인) 그래서 비트마스킹으로 구현해보면 어떨까 라는 생각에 의견을 제시했고 결국 프론트분들을 설득시켜 성공하였다..  1234567891011121314export const tagList: Tag[] = [  { id: 0, name: "편안한" } as Tag,  { id: 1, name: "조용한" } as Tag,  { id: 2, name: "친..

스프링부트 2023.10.30