분류 전체보기 113

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

[스프링] 프로젝트 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

[알고리즘] 이분 매칭

이분 매칭 알고리즘 이분 매칭 알고리즘은 그래프 이론과 연관된 문제를 푸는 데 사용되는 알고리즘 중 하나로, 주로 "양쪽 그룹 사이의 최적의 매칭"을 찾는 데 활용됩니다. 예를 들어, 여러 학생과 각 학생마다 선호하는 동반자가 주어졌을 때, 이분 매칭 알고리즘은 모든 학생들이 서로 다른 동반자와 짝지어지며 최대한 많은 학생들이 선호하는 동반자와 짝지어지는 최적의 방법을 찾아냅니다. 동작 원리 1. 이분 그래프 생성: 먼저, 매칭을 하려는 두 그룹을 각각 왼쪽(L)과 오른쪽(R)으로 나누어 이분 그래프를 생성합니다. 이분 그래프는 왼쪽 그룹의 각 노드와 오른쪽 그룹의 각 노드 사이에 연결된 간선을 나타냅니다. 2. 초기 매칭 설정: 초기에는 모든 노드는 매칭되지 않은 상태입니다. 이후 알고리즘을 통해 매칭..

알고리즘 2023.08.30

[스프링부트] 개인 프로젝트 버그 고치기

링크 구글, 원스토어 나의 축구 지식테스트 앱이다... 일단 내 앱은 배포하고 돌아간 상태였고 DB를 확인해보니 똑같은 닉네임이 저장되고 있었다... 왜그럴까 확인해보았다... 내 앱은 이렇게 처음에 닉네임을 설정(체크) 하고 회원가입되는 순서로 진행된다. 동작순서는 프론트에서 닉네임을 입력후 설정하기 버튼을 누르면 API 순으로 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Operation(summary = "프론트유저 닉네임 조건설정 API") @PostMapping("/front-user/check") @ResponseBody public String CheckNickName(String nickName) { boolean matches = nickName.ma..

스프링부트 2023.08.27

스프링 오픈소스 컨트리뷰트 하기

팀프로젝트를 하던 도중 프론트 개발자분이 나에게 오픈소스 기여하는거 별거 아니라던데요? 라고 말해주셔서 아 그럼 한번 해볼까 하고 프로젝트를 찾아보았다. 무슨 프로젝트를 해야할지 몰라서 gpt 한테 한번 물어봤다.(검색해서 찾아보다가 GPT가 생각났음..) 처음엔 너무 큰 프로젝트를 알려줘서 다시 물어봤다.. 10개정도 알려줬는데 그냥 첫번째 있는 반려동물 관리 프로젝트로 들어갔다. 스타는 6.7K!! 귀요미 펫관리 프로젝트... 처음엔 프로젝트를 살펴보았다. 펫관리하는 owners를 추가할수있다.. 나는 습관적으로 이상한값들을 넣어보는 습관이 있기때문에 한번 체크해보았다.. 음.. null값은 체크하고있고.. 그렇다면 whitespace(공백) 를 한번 넣어볼까? 전화번호를 제외한 부분이 통과되고 있었..

그냥 코딩 2023.08.25

[프로그래머스] 110 옮기기 Python(파이썬) 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/77886 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 110 옮기기 문제 설명 0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를 들어, x = "11100" 일 때, 여기서 중앙에 있는 "110"을 뽑으면 x = "10" 이 됩니다. 뽑았던 "110"을 x의 맨 앞에 다시 삽입하면 x = "1101..

프로그래머스 2023.03.31

[프로그래머스] 광물 캐기 - Python(파이썬) 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 마인은 곡괭이로 광산에서 광석을 캐려고 합니다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 각각 0개에서 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도가 소모됩니다. 각 곡괭이로 광물을 캘 때의 피로도는 아래 표와 같습니다. 예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 ..

프로그래머스 2023.03.24

[프로그래머스] 리코쳇 로봇 - Python(파이썬) 풀이

[프로그래머스] 리코쳇 로봇 - Python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 리코쳇 로봇이라는 보드게임이 있습니다. 이 보드게임은 격자모양 게임판 위에서 말을 움직이는 게임으로, 시작 위치에서 목표 위치까지 최소 몇 번만에 도달할 수 있는지 말하는 게임입니다. 이 게임에서 말의 움직임은 상, 하, 좌, 우 4방향 중 하나를 선택해서 게임판 위의 장애물이나 맨 끝에 부딪힐 때까지 미끄러져 이동하는 것을 한 번의 ..

프로그래머스 2023.03.24