내가 적용한 기본 access-token 재발급 로직1. Filter에서 접근하는 모든 access token을 확인한다.2. 그 중 ExpiredJwtException이 발생하면 바로 에러코드와 함께 리턴을 한다.3. Frontend에서는 해당 에러가 발생하면 Backend로 access token 재발급 요청한다. 우선 SecurityConfig에 적용해놓은 Filter에서는 모든 접근에 대해 토큰을 확인한다. 나의 경우 아래 그림과 같이 미리 구현해놓은 validate메서드를 통해 access token의 유효성을 검사한다. access token의 유효기간이 지난 후에 spring으로 접근을 한 경우 Filter에서 바로 error를 throw 하게 하고자 하였는데ExceptionHandler에..
TDD는 기본적으로 유닛 테스팅 방식이다. 이를 생각하면서 아래 글을 읽어보자. 좋은 테스팅을 하기 위한 5가지 'FIRST' 규칙 1. Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다. 2. Independent : 각각의 테스트는 독립적이며 서로 의존해서는 안된다. 3. Repeatable : 어떤 환경에서도 반복 가능해야 한다. 4. Self-Validating : 테스트는 성공 또는 실패로 boolean 값으로 결과를 내어 자체적으로 검증되어야 한다. 즉, 실패, 성공이 애매한 상황이 없어야 하고 코드를 작성하는 사람이 출력이나 로그를 통해서 수동적으로 결과를 확인하는 것이 아니라 자체적으로 결과가 나와야 한다. 5. Timely : 유닛 테스트는 적절한 때에 작성되어야 한다. 즉..
TDD(Test-Driven Development)는 소프트웨어 개발 방법론 중 하나로 테스트 주도 개발이라고 한다. 개발 후 테스트 하던 기존 방식과 다르게 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식이다. 아래 그림과 같은 절차로 이루어진다. 테스트 코드를 왜 먼저 적어야 할까? 1. 깔끔한 코드를 작성할 수 있다. - TDD의 궁극적인 목표는 잘 작동하는 깔끔한 코드를 작성하는 것이다. 2. 장기적으로 개발 비용을 절감할 수 있다. - 처음 작성할 때에는 귀찮고 개발을 느리게 한다는 느낌을 받을 수 있지만, 장기적으로 보면 반드시 개발 비용을 아껴줄 것이다. 3. 개발이 끝나면 테스트 코드를 작성하는 것이 귀찮기 때문이다. - 테스트 코드는 성공과 실패 케이스..
소나 큐브에 bug로 딱 하나 있었는데 그게 이 내용이다. 메서드가 호출될 때마다 Random() 객채를 생성하는 것은 비효율적이고 상수처럼 한번만 new 해놓고 가져다 쓰는 게 좋을 것 같다. Creating a new Random object each time a random value is needed is inefficient and may produce numbers which are not random depending on the JDK. For better efficiency and randomness, create a single Random, then store, and reuse it. The Random() constructor tries to set the seed with a d..
Representational State Transfer API의 약자, 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 API 2000년도에 로이 필딩(Roy Fielding)의 박사학위 논문에서 최초 공개 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일 REST HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미 | REST 구성 요소 1. 자원 - ex) URI - 모든 자원에 교유한 ID가 존재하고, 이 자원은 Server에 존재 - 자원을 구별..
Spring Security를 사용하기 위해 먼저 Security 설정을 해주어야 한다. 이 때, 설정 정보들을 하나의 class에 적어주는데 이것이 바로 SecurityConfig.java이다. SecurityConfig.java : Spring Security 설정 정보들을 작성해놓은 Class 해당 클래스 안에 filterChain이라는 method에 설정을 지정해준다. @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .csrf()...