2026/01/11 9

[런닝 코스 공유 서비스] - 16. AccessToken 블랙리스트

🏅오늘의 목표Access Token 블랙리스트 구현✅ 진행한 작업Access Token 블랙리스트 구현📃 개발내용AccessToken 블랙리스트블랙리스트란?로그아웃 이후에도 유효 기간이 남은 AccessToken 을 서버에서 차단하는 기능왜 필요할까?JWT 는 stateless 구조라 서버는 토큰을 기억하지 않음로그아웃을 해도 AccessToken 은 유효 기간이 끝날 때까지 계속 사용 가능해서 문제 발생예시로그인 → Access Token 탈취로그아웃 요청Refresh Token 만료 → 유효시간 남아있는 Access Token 악용 가능프론트에서 AccessToken 삭제가 불충분한 이유프론트에서 제거 → 내 브라우저에서는 안 씀 → 서버에선 여전히 쓸 수 있는 토큰서버에서 차단하지 않으면 보안적..

[런닝 코스 공유 서비스] - 15. Refresh Token

🏅오늘의 목표Refresh Token 도입로그아웃✅ 진행한 작업Refresh Token 도입로그아웃📃 개발내용Refresh Token 도입 이유현재 Access Token 만 있고 , Refresh Token 은 없음Refresh Token 이 없으면, 사용자는 자주 로그인 해야 함보안성과 사용자 경험을 둘 다 챙길 수 있음Access Token vs Refresh Token구분Access TokenRefresh Token목적API 요청 인증Access Token 재발급사용 위치매 API 요청 시Access Token 만료 시유효 기간짧음 (보통 5~30분)김 (보통 7일~30일)노출 위험상대적으로 높음상대적으로 낮아야 함저장 위치클라이언트 메모리 / 쿠키서버(DB/Redis) + HttpOnly 쿠..

[런닝 코스 공유 서비스] - 14. 회원가입 전, 이메일 인증

🏅오늘의 목표회원가입 전, 이메일 인증 구현✅ 진행한 작업이메일 인증 구현📃 개발내용이메일 인증 시 기대효과사용자 신원 확인사용자가 제공한 이메일 주소가 실제로 존재하며, 사용자가 그 주소에 접근할 수 있음을 확인실제 계정과 가짜 계정을 구분보안 강화이메일 인증 과정을 통해 비밀번호 재설정, 계정 변경 사항 알림 등 알릴 수 있음SMTP간이 우편 전송 프로토콜(Simple Mail Transfer Protocol)의 약자이메일 전송에 사용되는 네트워크 프로토콜Redis vs DB기능RedisDB자동 만료✅ TTL 지원❌ 크론잡 필요조회 속도✅ 매우 빠름 (메모리)△ 상대적으로 느림임시 데이터✅ 적합△ 부적합영구 저장❌ 휘발성✅ 영구 저장사용 목적인증 토큰 (10분)인증 완료 여부 (영구)- TTL(T..

[런닝 코스 공유 서비스] - 13. 회원 정보 조회 및 수정

🏅오늘의 목표회원 정보 조회회원 정보 수정✅ 진행한 작업회원 정보 조회 API회원 정보 수정 API📃 개발내용UserService - 회원 정보 조회public ProfileDto getMyProfile(UUID userUuid){ // 유저 찾기 User user = userRepository.findByUuid(userUuid) .orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND)); // 프로필 검증 if (user.getProfile() == null) { throw new BaseException(UserErrorCode.PROFILE_NOT_FOUND); } return profileMapper.toDto(..

[런닝 코스 공유 서비스] - 12. 회원 , 프로필 도메인 및 회원가입 API 구현

🏅오늘의 목표회원 (User) , 프로필 (Profile) 도메인 구현회원가입 API 구현✅ 진행한 작업회원 엔티티 생성프로필 엔티티 생성회원 서비스 생성회원가입 API 구현📃 개발내용회원(User) 엔티티 생성@Entity@Table(name="users")@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User extends BaseEntity { @Column(nullable = false, unique = true, length = 255) private String email; // 이메일(아이디) @Column(nullable = false, length = 60) private String password; //..

[JWT] - Access Token , Refresh Token 만료

Access Token / Refresh Token 만료는 어떻게 판단할까?JWT 기반 인증을 사용하다 보면 의문점이 생긴다“엑세스 토큰이나 리프레시 토큰이 만료됐는지 어떻게 알 수 있을까?이 글에서는 실제 서비스 흐름을 기준으로 토큰 만료를 어떻게 판단하고 처리하는지 정리한다.전체 인증 흐름JWT 인증의 기본 흐름은 다음과 같다.사용자 로그인서버가 Access Token + Refresh Token 발급클라이언트는 API 요청 시 Access Token 전송서버는 Access Token 검증만료 시 Refresh Token 으로 재발급 시도Refresh Token 도 만료되면 재로그인 요구Access Token 만료Access Token 은 보통 JWT 형식이며, 내부에 만료 시간(exp) 클레임이 포..

CS 2026.01.11

[백준] 15651 : N과 M (3) (Python/파이썬)

문제 링크https://www.acmicpc.net/problem/15651문제자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.1부터 N까지 자연수 중에서 M개를 고른 수열같은 수를 여러 번 골라도 된다.입력첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.예제입력4 2출력1 11 21 31 42 12 22 32 43 13 23 33 44 14 24 34 4정답 및 풀이import sysinput = sys.stdin.readlinen,..

백준 2026.01.11

[백준] 9184 : 신나는 함수 실행 (Python/파이썬)

문제 링크https://www.acmicpc.net/problem/9184문제재귀 호출만 생각하면 신이 난다! 아닌가요?다음과 같은 재귀함수 w(a, b, c)가 있다.if a 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20)if a 입력입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.출력입력으로 주어진 각각의 a, b, c에 대해서, w(a, b, c)를 출력한다.예제입력1 1 12 2 210 4 650 50 50-1 7 18-1 -1 -1출력w(1, 1, 1) = 2w(2, 2, 2) = 4w(10,..

백준 2026.01.11

[백준] 15650 : N 과 M (2) (Python/파이썬)

문제 링크https://www.acmicpc.net/problem/15650문제자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열고른 수열은 오름차순이어야 한다.입력첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.예제입력4 2출력1 21 31 42 32 43 4정답 및 풀이N, M = map(int, input().split())arr = []def dfs(start): if ..

백준 2026.01.11