본문 바로가기
반응형

Spring13

logback-spring 에 관하여 어제 있었던 일이다. 로그 파일이 기하급수적으로 증가되고 있어 이상하다는 문제가 제기되었다. 프로젝트를 전달 받은대로 사용한 것이 문제였다. 앱 개발을 하던 내가 자바 스프링부트 프로젝트에 대해 전반적인 지식이 부족한 탓이기도 하다. logback에 대한 전반적인 정보를 제공한다기보다는, 앞으로 있을 프로젝트 셋팅에서 잊지 말고 체크해야 하는 포인트에 대해서 간략하게 정리를 하고자 한다. 1. application.yml파일에서 logging으로 설정 가능하다. 더 구체적인 사항들도 있지만, 아래 코드에서 중요한 것은 config: classpath:정의 부분이다. 해당 경로는 프로젝트의 resources/ 하위 디렉토리의 경로를 의미한다. logging: level: root: info org.hibe.. 2024. 2. 22.
querydsl Pageable(), offset, limit을 이용한 페이징 방법 오늘 QueryDSL을 이용한 페이징을 만드는 일을 했는데, 대충 대충 눈으로만 익혔던 지식의 한계를 느끼며 삽질을 좀 했지만 나름 재미는 있었다. 애초에 '회의록'를 조회하는 조건은 날짜, 검색어, 사용자 등으로 검색한 결과를 JPA Repository를 이용해 페이징을 했었다. '회의록'에 참석한 사용자의 경우에도 회의록을 조회할 경우 자기도 포함된 회의록이 나오도록 수정해달라는 요청을 받았다. 애초, 조인 없이 단일 테이블 조회로 만들어진 기능을 조인을 넣어 현재 로그인 한 사용자가 참석한 회의록이 있을 때도 나오도록 수정하면서 JPA Repository의 pageable을 통한 것이 아니라 QueryResults를 통해 offset과 limit를 이용해 페이징되도록 수정하였다. QueryDSL을 .. 2023. 7. 28.
[스프링부트] EnableScheduling , Scheduled로 주기적인 스케쥴링 설정 오늘은 인수인계 받은 소스를 들여다보다, 특정 테이블에 지속적으로 쌓이는 가비지 데이터를 삭제하기 위해 만들었던 것 같은데 주석 처리가 되어 있었다. 아마 매일, 새벽에 스케쥴러가 돌긴 했겠지만, 데이터는 삭제되지 않고 있었을 것 같다. 글을 쓰다보니, 문득, 이런게 여러 곳에 있으면 위험할 것 같다는 생각도 든다. 소스에서는 운영서버가 아닐 경우에만 삭제가 되도록 되어 있는데 왜 그랬을까? 데이터는 운영에서 적재될 것이고 적재된 데이터는 수십기가까지 증가할 수 있는 상황이고, 실제 그런 상황이 이러나, 가비지 데이터를 삭제하는 쿼리를 짜서 돌리고 있는 실정인데 말이다. 여튼 몇 개의 어노테이션을 검색한 결과, 비교적 간단하게 spring에서 스케쥴링을 할 수 있다는 것을 알게 되었다. @Componen.. 2023. 6. 8.
Java/Spring 클라이언트 IP 구하는 함수 아련하지만, 몇 년 전 스프링부트 프로젝트를 할 때 신입사원이 아이피를 구해 테이블에 저장한 것을 보고 이상하다며 이의를 제기했던 일이 생각났다. 오늘 프로젝트 검색 API를 외부에 열어주어야 하는데, 원격 호출하는 IP에 대해서 예외처리를 하고자 클라이언트 IP를 구하는 함수를 보면서 정리해두면 좋겠다는 생각이 들어 간단하게 요약, 정리를 한다. public static String getClientIP(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null) { ip = req.. 2023. 2. 9.
ClassPathResource를 이용한 file 생성 java spring boot project에서 properties에서 file의 path 또는 name을 지정하고 생성하는 방식으로 사용하고 있다가 특정 경로를 설정해서 사용하는 방법 대신 resource폴더 아래에 특정 디렉토리를 만들고 파일을 생성해서 사용하는 방식으로 변경을 하고자 한다면 다음과 같은 방식을 이용해볼것을 권장한다. 나의 경우 csv file을 만들고 쓰고 읽고 하는 기능을 만들고 있는 중이다. /** * csv 파일을 생성하는 메서드 * @param filePath 파일 경로 * @param title 파일 제목 * @param content 내용 * @return */ public static int createCsvFile(String filePath, String title,.. 2020. 2. 26.
Failed to complete request: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method 전문가가 아니다. 자주 경험하지 못했다. 하는 족족 발목을 잡는 문제들이 하나씩 풀릴 때마다 무지의 극치를 적나라게 느낄 수 있다. 마이바티스의 fetchSize를 통해 대용량 처리를 위해 쿼리 문을 작성하고 DTO로 매핑을 시키는 과정에서 발생한 문제. 한참을 검색하고 찾다보니 저런 오류 메시지가 딱히 유형이 정해진건 아닌 듯하다. 다양한 경우들이 존재하면서 해결책을 찾기 어려울 것 같다는 생각이 들었다. 몇번을 더 고민하고 생각을 했지만 뾰족한 수가 없다. 선배에게 메신저로 물어보니 선배도 낯선 오류 같다면서 실행 화면을 보자고 한다. 실행된 마이바티스의 쿼리를 보니 unlead된 컬럼이 다수 존재했다. 즉 쿼리가 실행되고 DTO로 매핑하려는 순간 데이터 타입의 변환이 제대로 안되 발생하는 오류였다... 2020. 2. 10.
반응형