STUDY/Trouble Shooting

    WebMvcTest 403 Forbidden 해결하기(feat. CSRF)

    WebMvcTest 403 Forbidden 해결하기(feat. CSRF)

    1. Issue DescriptionWebMvcTest로 MemberController의 로그인 메서드에 대한 테스트 코드를 작성하는 중 403 코드(Forbidden)가 발생하는 오류가 발생하였다.2. 원인 추론1️⃣ 첫 번째 의문forbidden? forbidden은 보통 권한이 없을 때 볼 수 있는 에러코드인데, 나는 로그인 메서드 엔드포인트를 SecurityConfig에서 permitAll() 설정을 해준 상태였다. 왜 forbidden 코드가 떴을까?WebMvcTest Spring Security 403으로 검색CSRF 토큰 문제 때문이라고 한다. 실제로 테스트 실패 로그를 보니 세션 쪽에 CSRF 토큰이 있었다.MockHttpServletRequest: HTTP Method = POS..

    CORS란? Spring Security에 따른 CORS 설정

    CORS란? Spring Security에 따른 CORS 설정

    Vite+React, Spring Boot로 어플리케이션을 구현하면서 CORS 관련 에러를 만나게 되었다. CORS에 대해서 약간은 알고 있었지만 이번 기회로 좀 더 자세하게 개념과 그 해결 방법에 대해서 정리해보았다.💁‍♀️버전Spring boot 3.3.3Spring Security 6.3.3 CORS란?Cross-Origin Resource Sharing, 교차  출처 리소스 공유기본적으로 웹 브라우저는 보안상의 이유로, 한 웹사이트에서 다른 웹사이트의 데이터를 바로 가져오지 못하게 막아두고 있다.쉽게 말하면, 한 웹사이트에서 다른 웹사이트에 있는 정보를 가져오려고 할 때 필요한 규칙 예시를 보며 CORS를 이해해보자Vite와 React로 만든 프론트엔드가 localhost:5173에서 실행되고 ..

    Docker PostgreSQL에서 정렬이 이상하게 되는 문제

    Docker PostgreSQL에서 정렬이 이상하게 되는 문제

    1. Issue Description카테고리별로 식재료를 조회하는 기능에서 과일 카테고리의 식재료를 가져오되, name 기준으로 오름차순 하는 요청을 했는데 다음과 같은 결과가 나왔다.{ "data": { "getIngredientsByCategory": [ { "name": "배", ... }, { "name": "딸기", ... }, { "name": "사과", ... }, { "name": "자몽", ... }, { "name": "포도", ... }, { "name": "복숭아", ... ..

    Timestamped ZonedDateTime 오류

    Timestamped ZonedDateTime 오류

    1. Issue Description발생한 예외org.springframework.dao.InvalidDataAccessApiUsageException:Cannot convert unsupported date type java.time.LocalDateTime to java.time.ZonedDateTime;Supported types are [java.time.LocalDateTime, java.time.LocalDate, java.time.LocalTime, java.time.Instant, java.util.Date, java.lang.Long, long] 2. 원인 추론ServiceImpl 다음에 터진 예외였고, ZonedDateTime이 언급되어 있으므로 Auditing에서 문제가 생겼을 거라고..

    Redis Docker Container와 Spring Boot 연결이 안 되는 오류

    Redis Docker Container와 Spring Boot 연결이 안 되는 오류

    1. Issue DescriptionRedis와 Spring Boot를 Docker에 띄워서 구현했던 Refresh Token 기능을 테스트해보려고 했는데, Connection이 거절되었다는 예외가 발생했다.Caused by: java.net.ConnectException: Connection refused 여러 문제가 있었다.1. Redis Container는 작동하는데 로컬에서 Redis Container로 DB 연결이 되지 않음bind 옵션을 풀어주어야 했다. 기본적으로 외부 접속이 안 되게끔 설정이 되어 있는 것 같았다.도커 Redis 설정 파일 redis.conf 파일을 만들어 bind 0.0.0.0 으로 설정해서 외부 접속을 허용하였다.2. RedisConfig.Java 파일에서 port를 따..

    만료된 토큰에서 토큰에 저장된 정보를 가져올 수 없는 오류

    만료된 토큰에서 토큰에 저장된 정보를 가져올 수 없는 오류

    1. Issue Description만료된 Access Token에서 추출한 회원 정보로 저장된 Refresh Token을 조회하여 같은지 확인하려는데 다음과 같은 예외가 발생했다.io.jsonwebtoken.ExpiredJwtException: JWT expired at 2024-05-20T10:23:30Z. Current time: 2024-05-20T12:01:17Z, a difference of 5867735 milliseconds. Allowed clock skew: 0 milliseconds. at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:427) ~[jjwt-impl-0.11.5.jar:0.11.5] at io.j..

    Slack Webhook을 이용한 메시지 미리보기가 안되는 오류

    Slack Webhook을 이용한 메시지 미리보기가 안되는 오류

    1. Issue DescriptionGithub Action과 슬랙 Webhook을 이용하여 PR 리뷰 Request, Submit 시 Slack에 메시지를 보내 알려주는 기능을 구현하였고, 메시지는 다음과 같이 성공적으로 온 것을 확인할 수 있었다. 초기에 테스트할 때는 슬랙 창을 열어두고 있어서 몰랐는데 나중에 다음과 같이 [no preview available] 메시지가 뜨면서 미리보기가 안 되는 것을 알게 되었다. 2. 원인 추론(1) 구글 검색검색어 : slack message no preview available나의 경우와 비슷했던 글찾았던 StackOverFlow 링크이 경우 윈도우 알림이 서식 있는 텍스트 요소에 대해 지원하지 않아서 그럴 수 있다는 의견이 있었다.슬랙으로 알림이 오는 다른..

    GraphQL - mutation 실행 시 필드 값이 null로 들어오는 오류

    GraphQL - mutation 실행 시 필드 값이 null로 들어오는 오류

    1. Issue Description프로젝트에서 정의했던 mutation 테스트 시 필드에 null이 들어오는 이슈 발생▶ mutation 정의type Mutation { signup(input: SignupRequestDto!): ApiResponseDto!}input SignupRequestDto { email: String! password: String! nickname: String!}type ApiResponseDto { message: String!} ▶ Altair에서 테스트 했던 mutationmutation { signup( input: { email: "string", password: "string", nickname..

    Docker에서 Spring Boot 프로젝트 build 시 GraphQL 요청을 보내지 못하는 오류

    Docker에서 Spring Boot 프로젝트 build 시 GraphQL 요청을 보내지 못하는 오류

    1. Issue Description ▶ 도커에서 compose 스크립트를 이용하여 프로젝트를 빌드하고 Altair에서 http://localhost:8080/graphql 로 쿼리 요청 시 ▶ 브라우저 상에서 http://localhost:8080/graphiql 입력 시 2. 원인 추론 1. 도커 컨테이너 IP로 접속 http://{도커_컨테이너_IP_주소}:{컨테이너_포트}/graphiql → 응답하는 데 시간이 너무 오래 걸려 실패 2. 디버깅 logging.level.root=DEBUG 로그 레벨을 설정하여 도커 컨테이너 터미널에서 디버깅 확인. → 포트 접속도 되고 /graphiql로 GET 요청이 들어오는 것까지 확인. 포트 문제인가 했는데 그건 아닌 것 같다. 그런데 response가 나가..