서론정말 너무 화나서 찾아보고자 블로그를 쓴다 이전에도 같은 문제를 겪은 기억이 있고 해결한 기억이 있었다.데이터베이스에 어떤 값을 넣을 때 timezone이 맞지 않아서 발생한 문제였고, application.yml에 db url을 지정할 때 timezone을 지정해줌으로써 해결했다. spring: r2dbc: url: r2dbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul이번에도 습관적으로 timezone을 지정해줬고, 혹시모를 오류를 대비해 인코딩도 지정해줬다. 하지만 또 발생해버렸다.. 로그를 보아하니 인코딩도 박살나있고, ..
Backend/Spring
서론 springboot로 프로젝트를 진행하면서 jwt를 사용하였고, 이 과정에서 refresh 토큰도 구현하였다. access token은 탈취 당해도 만료기간이 지나면 사용할 수 없지만, refresh 토큰은 access 토큰에 비해 만료기간이 길기 때문에 탈취당하면 위험하다. 그래서 이를 보완하기 위한 방법으로 refresh token 재발급 요청이 왔을 때 refresh 토큰 디비에 저장된 ip값과 요청 ip값을 비교하여 다른 경우에는 발급하지 않거나, 원래 사용자에게 알림을 보내는 방식이 사용될 수 있다고 한다. (refresh 토큰을 만들 때 참고한 블로그) 그 외에도 로그 찍기, ip whitelist등 사용자의 ip는 쓸 곳이 많다. HttpServletRequest Spring MVC 기..
서론 jwt로 로그인은 구현한 적이 많지만, 로그아웃을 구현해본 적이 없다는 걸 깨달았다! 로그아웃 시에는 프론트쪽에서 jwt토큰을 버리면 되는 게 아닌가 생각했지만, 프론트와 얘기를 하다보니 로그아웃을 통해 토큰을 무효화 시키는 것도 필요하다는 걸 알았다. 그래서 jwt 로그아웃을 구현하는 방법들을 적어보려고 한다. jwt토큰은 쿠키나 세션과 달리 강제로 만료시킬 수 없다. 디비 저장없이 토큰을 만료시키는 방법은 유효시간이 끝날 때까지 기다리는 것밖에 없다. 그러므로 서버에서 로그아웃을 구현하려면 다른 아이디어가 필요하다. 로그아웃을 구현하는 4가지 방법 1. 토큰의 유효시간을 아주 짧게 설정 사용자가 로그아웃을 누르기 전에 유효시간이 다 되게 만드는 방법ㅋㅋ 유효시간이 다 되면 자동으로 로그아웃 되는..
REST API를 개발하면서 버전이 올라가도 기존 버전의 API는 사용할 수 있도록 하고싶어 이 포스팅을 작성한다. 클라이언트는 API 버전이 변경될 때마다 애플리케이션을 업데이트하고 싶지 않을 수 있다. API버전을 관리한다면 새로운 버전을 만들되, 이전 버전을 계속 유지할 수 있을 것이다. 이전에 진행했던 프로젝트에서는 버전을 관리하려고 했지만 디렉토리 구조도 제대로 잡지 않았고, 결국 하나의 버전에 바로바로 수정사항을 추가하는 식으로 개발하였다. 이번 프로젝트에서는 디렉토리 구조도 잘 짜고 네이밍도 제대로 하여 API 버전을 관리하고싶어 공부해보려고 한다. 참고사항: 백엔드는 springboot로 api를 작성하고 프론트에서 이를 받는 식으로 개발 Version 관리할 때 중요한 점 URI가 지저분..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
시설 관련하여 수정하는 백엔드 api를 만듦 @Getter public class EditFacilityDTO { @NotNull private Long facility_id; private String name; private String address; private String tel; private String fm_name; } @PatchMapping("/facilities") public ResponseEntity modifyFacility(@RequestBody EditFacilityDTO dto) { ... } 시설을 수정해야하니까 facility_id는 필수! null로 받으면 안된다. dto에 @NotNull을 지정해줬는데 null이 들어오는 문제 발생! 분명 @NotNull을 지정해..
Failed to fetch, CORS, spring, https, http 문제상황 http로 잘 동작하던 api를 https로 배포하였더니 swagger에서 cors에러가 발생 https로 api요청을 보내면 잘 되는 것을 확인하였음 @RestController @RequiredArgsConstructor @CrossOrigin(origins = "*", allowedHeaders = "*") public class FacilityController { } @CrossOrigin 어노테이션도 잘 설정해둔 상태인데.. 왜? 문제원인 swagger는 기본적으로 http로 요청을 보내도록 설정되어있음 https로 배포했기 때문에 차이가 생겨 CORS에러가 발생 문제해결 @OpenAPIDefinition 어..