Error 10

RestDocs @AuthenticationPrinciapl 인증 실패 Error

개인 프로젝트 REST API Server 작업이 슬슬 마무리되는 단계여서 문서화의 필요성을 느꼈다. API 문서화는 TestCode를 중요하게 생각하기때문에 RESTDocs로 결정. Spring 공식 문서를 참조해가며 글 등록API를 문서화하려다 문제가 발생했다. mockMvc를 이용해 문서화를 진행하려했고 컨트롤러 클래스의 테스트경우 SpringBoot Container를 띄우면 테스트가 장기적으로 느려질 가능성이 매우 크기에 standAloneSetup을 이용해 RestDocs Test를 진행하려했지만, 위 방법으로 mockMvc를 설정해 request를 요청하니 컨트롤러 메서드에서 받기로한 UserPrincipal 인증객체를 가져오지 못하는 에러가 발생했다. RestDocs Test가 아닌 본 컨..

Error 2024.01.16

Test were not recieved

Verification에서 전체 테스트를 실행하다가 발생함. 보통 이 에러가 발생하면 인텔리제이 빌드 세팅을 그레이들에서 인텔리제이로 바꿔서 해결하는 블로그가 많이 뜬다. 나 역시도 그렇게 진행해봤지만 여전히 Test were not recieved 가 해결되지않았다. bulid.gradle 의 dependency에도 큰 문제가 없었고 테스트 모듈에 뭔가 문제가 있을거라 판단. 역시나 이전에 클래스명을 잘못생성해 프로덕션 모듈에는 존재하지않는 테스트 클래스가 남아있었다. 삭제해주니 정상적으로 전체 테스트 실행이 됬다. 다행!

Error 2024.01.09

JWT Token AccessDenied 403 Error

Jwt 토큰 인증이 테스트코드에서는 성공적으로 잘 돌아갔다. 최종적으로 POST MAN으로 외부에서 실제로 API요청시에도 정상 기능을 하는지 확인해보기로했는데.... Http 403 code와 함께 권한 인증 오류가 발생했다... 이유가 뭘까 분명히 JWT 코드에는 문제가 없었는데 우선 스프링 시큐리티 debug 를 활성화 시켜 어느 필터에서 문제가 발생했는지 체크해보기로 함. AuthorizationFilter 에서 AccessDenied 오류가 발생... AuthorizationFilter에서 권한부여가 실패해 인증실패가 됬다. 처음엔 MethodSecurity를 선언한 Config 문제인줄 알았지만 @Secured도 @PreAutrhorized에 문제도 아닌 상황 디버그 로그를 곰곰히 확인하다 원..

Error 2024.01.02

QueryDSL No Property Error

QueryDSL 로 게시판 페이징처리 구현중 에러가 발생했다. CustomRepositroy를 구현한 메서드를 찾을수 없어 DI 오류가 발생... 분명히 깔끔하게 구현했는데 왜 문제일까 No Property 관련해서 구글링.. 결론은 좀 허무했다... QueryDSL 에서 CustomRepository와 impl은 '{Entity명}RepositoryImpl' 이라는 규칙에 맞게 생성되야하는데 Entity 명이 Posts인데 PostRempositoryImpl 로 구현해 구현체의 메서드를 찾을 수 없게된것이다... 리네임하고 테스트를 돌려봤더니 정상적으로 페이징처리됬다

Error 2023.12.12

테스트 환경에서 Cookie를 다루거나 검증해야할때

로그인시에 쿠키를 가져와 세션값을 검증해 사용자의 권한을 검증하는 테스트 케이스를 작성중 쿠키가 Null로 응답되는 문제가 발생했다. 분명히 PostMan에서는 쿠키가 정상적으로 유저에게 응답값으로 넘겨가졌는데 테스트만 돌리며 쿠키가 null이라고 에러가 떴다... 디버깅을해봐도 Cookie가 null로 나오는상황 andDo(print()); 를 이용해 로그인시에 request, response가 어떻게 내려오는지 확인해봤다. 응답값을 확인해보니 뭔가 다른점을 발견. 쿠키 객체의 이름이 그냥 Cookie가 아닌 MockCookie 임을 발견했다. 찾아보니 Junit 테스트 환경에서는 브라우저상에서 쿠키를 다루는것과 달라 따로 쿠키를 추출해 필요한 mockRequest에 심어줘야했다. 처음엔 andRetu..

Error 2023.12.08

스프링 이미지 출력 문제

1. 이미지 업로드를 static 폴더에 저장함. 2. 업로드한 이미지를 다시 출력하려니 저장된 이미지를 스프링 서버에서 찾을 수 없다고 404 에러가 발생함. 3. 문제는 static 폴더에 저장되는 이미지 파일들은 서버가 시작되고 refresh되지않아 서버가 시작되고 그 후에 업로드된 이미지들은 스프링에서 찾지 못함. 4.addResourceHandler를 이용해 외부 리소스 인식에 성공시킴.

Error 2023.10.06

독립적인 테스트 환경 구성하기

서비스계층의 상품의 등록 수정 삭제 API 테스트중 개별적인 메서드 테스트는 모두 통과했지만, 테스트 클래스 단위로 테스트를 실행하니 오류가 발생했다. 테스트 코드에서는 모두 PK를 1L으로 지정하고 단독적으로 수행할땐 문제없었지만 클래스단위로 순차적으로 테스트가 진행하니 Auto_Increment로 인해 PK값이 맞지않아 테스트가 반복적으로 실패했다. 이런 상황때문에 당연하게 TeadDown 메서드로 DeleteAllInBatch()를 적용했지만, 메서드 실행 후 테이블은 드랍되도 Auto_Increment로인해 올라가던 숫자는 그대로 이어졌다. 원하던건 항상 리파지토리가 텅비어지고 새로 생성되는 엔티티의 PK는 1이길원했지만 텅빈 리파지토리에 PK값이 2...3...값을 가지는 엔티티가 생성됬다....

Error 2023.09.13

fetch API 사용 과 DTO의 기본생성자 Issue

회원의 정보를 수정하는 기능을 웹 브라우저에서 직접 테스트하다 문제를 발견했다. 첫번째 문제로 - 버튼을 눌렀을때 memberUpdate api로 mapping 되지 않고 주소창에 정보를 변경한 데이터들이 쿼리스트링으로 입력되있었다 곰곰히 생각해보다 개발자도구로 확인해봤더니 HTTP 요청이 get 요청으로 가고있었다. 분명 javascript의 fetchAPI를 사용해 버튼을 눌렀을때 PUT 요청으로 가도록 설정을 해놔서 뭐가 문제인가 싶었는데 form 태그가 문제였다. 원래는 form태그를 사용하지않고 html 을 작성했는데 input 태그의 required 속성을 활성화 하기위해 오전에 form태그를 붙인게 문제였다, form 태그에는 기본적으로 action 값이 get요청으로 활성화되어있고 form..

Error 2023.08.31

JPA 양방향 참조관계 무한 루프 [Infinite recursion]

게시물 리스트 조회 API테스트중 말로만 듣던 양방향 참조 무한루프에 빠졌다.... 해결 방안으로 DTO 사용과 Jackson Annotaion 활용 두 가지가 있었는데 Jackson Annotaion 활용 방안으로 - @JsonManagedReference와 @JsonBackReference 가 존재한다. 어노테이션을 활용하는 방안보다 DTO로 응답하는것이 더 코드가 깔끔하고 최선의 방법이라 생각해 DTO를 활용하는것으로 고민을 했는데 ?? 난 이미 컨트롤러에서 DTO로 응답하고 있었는데.... @GetMapping("/api/todolist") public ResponseEntity getTodoList(){ List todoList = todoBoardService.getTodoList().stre..

Error 2023.08.12