전체 글

싸피 비전공9기 비전공자바 서식하는 초보개발자 백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114
관리자가 유저들의 요청 기록을 조회하는 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 값을 붙여줘야 정상적으로 동작한다. 휴
· 오류해결
github webhook을 설정하는데 계속 502에러가 발생했다. response 내용도 없었고, 스택오버플로우에도 해당 내용이 없어서 3일 넘게 끙끙 앓았던 문제. ec2의 보안 설정에 있었다. jenkins를 9090포트를 사용하는데 해당 포트에는 나만 접근을 해야한다고 생각해서 내 IP만 허용하게 뒀는데 이게 문제였다. 어차피 9090포트를 들어와도 아이디, 비밀번호로 접근해야하기에 보안적으로 문제가 없다고 판단. 9090포트를 전부 열어줌으로써 webhook 문제를 해결할 수 있었다.
이전에도 한번 테스트코드를 작성했지만 부족한 개념을 정리하기 위해 내용을 정리해보려고 합니다. 우선 이번에 하려는 부분은 repository만 단독으로 단위테스트를 진행하는 것입니다. DB같은 경우 local에 있는 MySQL을 이용하려고 합니다. 대충 순서를 알아보면 필요한 가짜 객체 생성 가짜 객체 DB에 저장. 메서드 실행 결과 검증 이 순서대로 진행이 됩니다. 검증 이후 데이터는 롤백이 돼서 DB에서 삭제되는 방향으로 진행됩니다. 여기서 사용하려는 어노테이션의 정보입니다. @DataJpaTest jpa환경에서 repository를 테스트하기 위해 spring에서 제공하는 어노테이션. 최소한의 스프링 컨텍스트를 제공한다. jpa entity 테스트를 위해 EntityManager와 TestEntit..
· 오류해결
매일 00시에 선착순 쿠폰을 발행하는데 데이터를 로드하는 부분에서 문제가 발생했다. 해당 쿠폰은 4월 2일에 발행된 쿠폰이며, 4월 2일에는 해당 데이터가 조회가 되는 게 정상인데 로컬에서는 되지만 서버에 올리면 데이터를 못 찾아오는 문제가 발생했다. 이건 무조건 시간차로 발생한 문제라고 의심. 그래서 mysql의 시간을 먼저 확인했다. +--------------------+---------------------+--------------------+ | @@global.time_zone | @@session.time_zone | @@system_time_zone | +--------------------+---------------------+--------------------+ | SYSTEM |..
indeep
indeep한 개발자