(작성 중인 글입니다.) 먼저 refresh token을 왜 적용하게 됐는가? 나는 현재 프로젝트에 JWT를 사용하고 있다. JWT는 말 그대로 토큰을 사용한 로그인 방식이다. 로그인을 했을 때 먼저 access token을 발급해준다. 사용자는 요청 시 이 token과 함께 요청을 해야한다. 다만 여기서 위험한 점이 하나 있는데 중간에 이 token이 탈취되면 누구든 그 사용자인 척 할 수 있다는 것이다. 그러면 개인정보 도용 등 다양한 문제 상황이 발생할 수 있다. 토큰은 한번 부여하면 삭제가 안되기 때문이다. 그래서 이에 대한 보완점으로 refresh token이라는 것도 같이 부여해주게 되었다. access token은 짧은 유효기간을 가져 탈취당하더라도 오래 사용하지 못하게 안정성을 챙기면서, ..
문제 상황 분명히 나는 아래와 같이 ExceptionHandler 작업을 해주었는데 이를 통과하지 않는 현상이 지속됐다. 다른 예외는 잘만 통과하는데 대체 왜 스프링 시큐리티 예외만 저 메소드를 거쳐가지 않을까? 이를 이해하려면 스프링 시큐리티의 작동 순서를 알아야 한다. 이 이유에 관한 작동 순서는 별도의 글로 간략히 작성해두었다. Spring Security 동작 원리 / 필터 순서 스프링 시큐리티에 대해 이해하기 위해서는 기본적으로 필터에 대한 이해가 필요하다. 스프링에서는 client로부터 HTTP 요청이 들어오면 Servlet에 도달하기 전 필터를 거친다. 이 필터는 하나일 수 layton0-0.tistory.com 해결 (구현) 과정 AuthenticationEntryPoint 구현 시큐리티의..
김영한님의 강의를 보면 항상 @Id값에 @GeneratedValue를 해 auto_increment를 할 경우 Long타입을 쓰시는 모습을 볼 수 있었다. int가 아니라 long을 쓰는 이유는 더 많은 값을 카운트할 수 있어 확장성 때문인 것은 알겠다. 하지만 왜 long이 아니라 Long을 사용하시는걸까? 궁금해서 구글링을 해보니 long은 primitive type이라 값이 없을 경우 0으로 초기화되지만 Long은 wrapper type이라 값이 없을 경우 null로 초기화되기 때문이라는 것을 알 수 있었다. 즉, long으로 둘 경우 기본 초기화값에도 어쨌든 0이라는 값이 존재하기 때문에 이 값이 초기화가 되지 않아 0인건지 아니면 업데이트된 값이 0인지 바로 알기 어렵다는 치명적인 단점이 생기는..
TripDream 프로젝트를 시작하고 DB구조를 짜는 것이 먼저라고 판단이 들었다. ERD를 설계해보려 한다. 기능 정의서는 다음과 같다. https://www.notion.so/8e62f0fe168245a28c20576c9bbd2894?pvs=4 기능 정의 갔던 나라 체크 ( GPS인증? 도장찍기~) www.notion.so 기능별 요구사항에 맞춰 ERD를 설계해볼 예정이다. 회원가입 먼저 회원정보 테이블이 필요하다. MEMBER 테이블을 생성. 안에 회원가입 시 받고싶은 정보를 필수/선택을 기준으로 NULL, NOTNULL로 정했다. 회원 테이블의 PK값은 유일무이하고 특별한 값으로 하고 싶어 uuid 자동생성으로 정했다. 또한 row의 생성시간, 수정시간은 모든 테이블에서 받을 예정이다. 추후 접속..