본문 바로가기

프로젝트/LinkBook6

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.
Batch Fetch Size를 통해 페이징 문제 해결 1. 문제 발생 Folder Entity @Entity @Getter @Builder(toBuilder = true) @Table(name = "folder") @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Folder extends BaseDateEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Size(max = 50, message = "폴더의 이름은 50자 이하로 입력해주세요") @Column(name = "title", nullable = false, columnDefinition = "varch.. 2022. 8. 20.
계층형 Category 구현 (Enum으로의 전환) 1. 문제 발생 (1) 서비스 이해 프로젝트에서 Tag를 2가지 형태로 나누어서 표현하였습니다. 게임 RootTag에는 FPS, RPG, TPS 등의 여러 Tag들이 존재합니다. 서비스에서 생성되는 폴더에 여러 Tag들을 붙일 수 있습니다. (2) 기존 구현 방식 데이터베이스 Table을 사용해서 Tag와 RootTag 들의 값들을 관리하였습니다. Tag RootTag (3) Tag 조회 성능 문제 프론트에게 태그 리스트를 보내 주기 위해 항상 테이블 조회 쿼리가 나가야만 했습니다. 서비스 로직 상 해당 Tag가 들어왔을 때 Tag가 어떤 RootTag에 속하는 지 찾기 위해서는 DB에 조회 쿼리를 날려야만 했습니다. 태그 이름으로 검색 Tag, RootTag 테이블의 조인이 필요하였습니다. @Query.. 2022. 8. 19.
반응형