본문 바로가기

분류 전체보기157

Transaction 격리 수준 & JPA Lock 트랜잭션과 격리 수준 💡 동시에 여러 트랜잭션을 처리할 때, 트랜잭션이 얼마나 서로 고립되어 있는지를 의미한다. 즉, 해당 트랜잭션이 다른 트랜잭션에서 변경한 데이터를 볼 수 있는 기준을 결정하는 것이다. READ UNCOMMITED 💡 하나의 트랜잭션이 커밋되기 전에 다른 트랜잭션이 읽을 수 있다. DIRTY READ 발생 다른 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있게 되는 현상 READ COMMITTED 💡 커밋이 완료된 데이터만 트랜잭션에서 조회할 수 있다. 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다. NON-REPEATABLE READ 발생 하나의 트랜잭션 내에서 동일한 SELECT 쿼리를 실행했을 때 항상 같은 결과가 다른 현상 REPEATA.. 2023. 1. 29.
[Programmers] 합승 택시 요금 (최단거리) 플로이드-워셜(Floyd-Warshall) import java.util.*; class Solution { int[][] dist; public int solution(int n, int s, int a, int b, int[][] fares) { dist = new int[n+1][n+1]; // 초기 거리 초기화 for(int i = 1; i 2022. 9. 23.
RefreshToken 도입 1. RefreshToken의 필요성 AccessToken(JWT)를 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다. 유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편하다. AccessToken을 짧게 설정하고 RefreshToken을 사용함으로서 사용자가 자주 로그인하는 불편함을 해결할 수 있다. 2. RefreshToken의 이해 로그인을 완료했을 때 AccessToken과 동시에 발급되는 RefreshToken은 긴 유효기간을 가지면서, AccessToken 만료 시 새로 발급해준다. AccessToken 유효기간 : 1시간 RefreshToken 유효기간 : 2주 1. 사용자가 아이디, 비밀번호를 통해 로그인.. 2022. 8. 23.
AccessToken 로그인 로직 (feat. Spring Security) 1. Spring Security 인증 구조 이해 1. HTTP Request (인증 요청) 2. AuthenticationFilter를 거친다. (UsernamePasswordAuthenticationFilter) HttpServletRequest를 인터셉트하여 AuthenticationManager에 Authentication 객체를 만들어 UsernamePasswordAuthenticationToken)에 전달한다. 3. AuthenticationManager는 AuthenticationFilter로부터 인증 객체를 전달받는다. 인증 객체 (UsernamePasswordAuthenticationToken) 4. 해당 인증 객체를 통해 인증을 진행하는 AuthenticationProvider를 찾아 .. 2022. 8. 23.
토큰(JWT)기반 인증 도입 1. Token 기반 인증 토큰 기반 인증 시스템은 인증받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 유효성 검사를 한다. 이러한 시스템에서는 더 이상 사용자의 인증 정보를 서버나 세션에 유지하지 않고 클라이언트 측에서 들어오는 요청만으로 작업을 처리한다. 상태를 유지하지 않으므로 stateless 한 구조를 갖는다. 서버(세션) 기반 인증의 단점을 극복할 수 있다. 2. JWT (Json Web Token) 💡 JWT란 인증에 필요한 정보들을 Token에 담아 암호화시킨 토큰을 의미한다. JWT 구조 JWT는 .을 구분자로 나누어지는 세 가지 문자열의 조합이다. JWT는 3가지 구조로 나누어진다. Header alg : 암호화할 해싱 알고리즘, typ : 토.. 2022. 8. 23.
회원가입 이메일 인증 구현 기획단계 대부분의 사이트에서 회원가입 시 이메일 인증을 요구하고 있다. 인증 없이 회원가입이 가능하다면 존재하지 않는 이메일을 통해서도 회원가입이 가능하고 공격에 취약해지기 때문에 이메일 인증은 필수라고 생각된다. 이메일 인증을 구현하기 앞서 두 가지 방법을 고려하였다. 이메일로 인증번호를 보내서 다시 그 인증번호를 입력하는 방식 해당 이메일로 보낸 링크를 클릭하여 회원가입을 완료하는 방식 프론트와의 회의 끝에 이번 프로젝트에서는 1번째 방법 채택하여 구현하기로 하였다. Email 준비 Gmail SMTP 구글 SMTP 서버를 사용해서 이메일 발송하기로 결정하였다. 보안 수준이 낮은 앱의 액세스를 활성화한 계정에서는 사용자 이름과 비밀번호를 사용해서 Gmail SMTP와 같은 서드 파티 앱에 인증할 수 .. 2022. 8. 21.
반응형