분류 전체보기

· 오류해결
오랜만에 QueryDSL을 통해 쿼리를 작성하려고 하는데 RefreshToken Entity에서 큐클래스가 임포트 불가능한 문제가 발생했다. 다른 Entity에서는 사진처럼 잘 import가 되고 있는데 RefreshToken만 import하면 빨간줄 떴다가 바로 삭제가 돼서 QClass가 없나 싶어서 확인해봤다. 분명 QClass는 다 만들어져 있는데?.. 여기서 아차 싶은 부분이 생겼다 대부분 보통 QClass는 build/generated 폴더에 만드는 걸로 알고 있는데 내 코드는 src/main에 생성하도록 지정이 되어 있던 것. 근데 여태까지 문제 없이 사용했는데? 이 방법이 진짜 문제가 없는 건지 궁금해지기 시작했다. 일단 김영한님도 그렇고 호돌맨님의 인프런 댓글도 확인해본 결과 전부 buil..
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { log.info("jwt 필터 동작"); System.out.println(request.getRequestURI()); // 헤더에서 액세스 토큰 추출 Cookie[] cookies = request.getCookies(); // 쿠키 자체가 없으면 401 에러 발생 if (cookies == null) { log.error("쿠키 없음."); sendErrorResponse(response, HttpStatus...
(스프링부트 3.2.4로 진행됩니다) 웹소켓이라는 기술을 평소에 사용해보고 싶기도 했어서 이번 프로젝트에 한번 적용해보려고 한다. 내가 원하는 느낌은 자소설닷컴의 느낌과 비슷하다. 요런 느낌으로 로그인하면 하나의 채팅방을 통해 모두가 자유롭게 대화할 수 있는 장소를 하나 마련해보려고 한다. (학습하면서 진행하는 부분이라 다음 내용이 언제 올라갈지 모르겠습니다.) 우선 웹소켓을 사용하냐 socket.io를 사용하냐의 문제가 있었다. 그전에 간단하게 네트워크에서 어떻게 실시간 통신을 해왔는지 살펴보자. 1. Polling 일정한 주기(시간)를 가지고 서버와 응답을 주고받는 방식 웹 자체가 영구 연결이 불가능하기에 매번 주고 받아야함.(서버 부하 문제 발생) 주기가 길면 실시간성이 매우 떨어진다. 2. Lon..
관리자가 유저들의 요청 기록을 조회하는 API를 날리는데 쿼리가 이상하다. 현재 유저는 4명이 있고, 요청기록은 100만 개의 데이터가 존재. Hibernate: select arh1_0.id, arh1_0.member_id, arh1_0.method_type, arh1_0.request_content, arh1_0.request_date, arh1_0.request_status, arh1_0.response_content from api_request_history arh1_0 order by arh1_0.request_date desc limit ?, ? Hibernate: select m1_0.id, m1_0.create_date, m1_0.email, m1_0.login_last_date, m1_..
백엔드에서 유효성 검사를 위해 @Valid를 사용해서 진행 중이었는데 api 요청을 보내니 아래와 같은 에러가 발생했다. Request processing failed: jakarta.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'jakarta.validation.constraints.NotBlank' validating type 'com.park.restapi.domain.api.entity.MethodType'. Check configuration for 'methodType' at org.springframework.web.servlet.FrameworkServlet.processReq..
api_request_history에 50만 개의 데이터를 넣어두고 SELECT * FROM api_request_history ORDER BY request_date DESC; 해당 쿼리를 날려보자. request_date에 인덱스가 걸려있는 상태다. 1.32초면 나쁘진 않군요! SELECT count(*) FROM api_request_history; 이번엔 count를 날려봅시다. 아? 무려 30초가 넘어서 연결이 끊겼네요 왜 count보다 전체 데이터 조회가 성능이 빠른 걸까? 물론 index가 걸려있다지만 이렇게 차이가 심한 정도인가? 일단 count를 통해 full scan을 때리기 때문에 속도가 느린 것이 문제다. 아 뭔가 QueryDSL 안 쓰고 해결해보려고 했는데, 대부분 count 성능..
관리자 페이지에서 사용자의 모든 기록을 볼 수 있는 탭을 하나 만들어두었다. 해당 탭에 들어가면 mounted가 되는 순간 서버로 모든 요청 기록을 조회하는 api를 호출하게 된다. 일단 50만 개의 더미 데이터를 넣어두고 전부 불러오도록 설정. jpa의 findAll을 써서 단순 리스트로 반환했지만, 50만 개의 데이터다 보니 8초라는 시간이 걸렸다. 물론 동일한 데이터를 계속 불러오기에 나중에 캐싱을 이용하면 좋겠지만, 현재는 화면에 표시를 하는 게 목적이므로 패스. 일단 느린 시간만큼 조금 로딩화면을 보여줘야한다는 생각이 들었다. isLoading: false, vue data에 로딩상태를 두고 요청 기록 불러오는중... 이렇게 둬서 로딩이 되는 순간 화면 색을 바뀌게 만들었다.(어떻게 보면 사용자..
· 오류해결
젠킨스를 이용해서 특정 라벨을 붙일 때만 배포시키도록 설정했는데 Did not find any jobs with GenericTrigger configured! 위와 같은 에러가 발생했다. 문제는 token을 주소에 넣어주지 않은 점이 문제였다. 젠킨스에서 api 토큰을 넣어주기로 했다면 Gibhub webhook URL을 generic-webhook-trigger/invoke?token=api 이렇게 뒤에 token 값을 붙여줘야 정상적으로 동작한다. 휴
indeep
'분류 전체보기' 카테고리의 글 목록 (6 Page)