Spring/프로젝트

Spring/프로젝트

[Spring Security] Refresh Token 적용기

(작성 중인 글입니다.) 먼저 refresh token을 왜 적용하게 됐는가? 나는 현재 프로젝트에 JWT를 사용하고 있다. JWT는 말 그대로 토큰을 사용한 로그인 방식이다. 로그인을 했을 때 먼저 access token을 발급해준다. 사용자는 요청 시 이 token과 함께 요청을 해야한다. 다만 여기서 위험한 점이 하나 있는데 중간에 이 token이 탈취되면 누구든 그 사용자인 척 할 수 있다는 것이다. 그러면 개인정보 도용 등 다양한 문제 상황이 발생할 수 있다. 토큰은 한번 부여하면 삭제가 안되기 때문이다. 그래서 이에 대한 보완점으로 refresh token이라는 것도 같이 부여해주게 되었다. access token은 짧은 유효기간을 가져 탈취당하더라도 오래 사용하지 못하게 안정성을 챙기면서, ..

Spring/프로젝트

@RestContollerAdvice 로 Security 예외 처리하기

문제 상황 분명히 나는 아래와 같이 ExceptionHandler 작업을 해주었는데 이를 통과하지 않는 현상이 지속됐다. 다른 예외는 잘만 통과하는데 대체 왜 스프링 시큐리티 예외만 저 메소드를 거쳐가지 않을까? 이를 이해하려면 스프링 시큐리티의 작동 순서를 알아야 한다. 이 이유에 관한 작동 순서는 별도의 글로 간략히 작성해두었다. Spring Security 동작 원리 / 필터 순서 스프링 시큐리티에 대해 이해하기 위해서는 기본적으로 필터에 대한 이해가 필요하다. 스프링에서는 client로부터 HTTP 요청이 들어오면 Servlet에 도달하기 전 필터를 거친다. 이 필터는 하나일 수 layton0-0.tistory.com 해결 (구현) 과정 AuthenticationEntryPoint 구현 시큐리티의..

Spring/프로젝트

JPA @Id에 Long을 쓴 이유

김영한님의 강의를 보면 항상 @Id값에 @GeneratedValue를 해 auto_increment를 할 경우 Long타입을 쓰시는 모습을 볼 수 있었다. int가 아니라 long을 쓰는 이유는 더 많은 값을 카운트할 수 있어 확장성 때문인 것은 알겠다. 하지만 왜 long이 아니라 Long을 사용하시는걸까? 궁금해서 구글링을 해보니 long은 primitive type이라 값이 없을 경우 0으로 초기화되지만 Long은 wrapper type이라 값이 없을 경우 null로 초기화되기 때문이라는 것을 알 수 있었다. 즉, long으로 둘 경우 기본 초기화값에도 어쨌든 0이라는 값이 존재하기 때문에 이 값이 초기화가 되지 않아 0인건지 아니면 업데이트된 값이 0인지 바로 알기 어렵다는 치명적인 단점이 생기는..

Spring/프로젝트

ERD 설계 과정

TripDream 프로젝트를 시작하고 DB구조를 짜는 것이 먼저라고 판단이 들었다. ERD를 설계해보려 한다. 기능 정의서는 다음과 같다. https://www.notion.so/8e62f0fe168245a28c20576c9bbd2894?pvs=4 기능 정의 갔던 나라 체크 ( GPS인증? 도장찍기~) www.notion.so 기능별 요구사항에 맞춰 ERD를 설계해볼 예정이다. 회원가입 먼저 회원정보 테이블이 필요하다. MEMBER 테이블을 생성. 안에 회원가입 시 받고싶은 정보를 필수/선택을 기준으로 NULL, NOTNULL로 정했다. 회원 테이블의 PK값은 유일무이하고 특별한 값으로 하고 싶어 uuid 자동생성으로 정했다. 또한 row의 생성시간, 수정시간은 모든 테이블에서 받을 예정이다. 추후 접속..

레이튼
'Spring/프로젝트' 카테고리의 글 목록