개발/Java

    Spring ResponseEntity Stream 처리 관련 오류

    admin 웹 페이지에서 사용하던 문서 다운로드 기능이 배포 후 갑자기 안되는 오류를 발견 오류servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.io.IOException: Stream closed 원인spring에서는 stream은 응답할때까지 close하면 안된다. spirng에서 응답 후 close 해주는데 이미 close가 되버려서 생긴 오류 디버깅controller->service->db->service->controller 내부에 있는 log는 모두 잘 찍혀 있었고 이후에 response filter에서 해당 오류가 찍혀있었다. 수정 코드를 확인하니 최근에 스패로우 관련 정책..

    레거시 스케줄러에 배치 처리 방식 적용하기

    기존 프로젝트에서 레거시 스케줄러 코드에 배치 형식을 적용한 코드를 공유한다. 레거시 스케줄러에서도 배치 형식을 적용되어 있었다(ex. 백만건 -> 1000건 단위 배치 작업)1000건을 threadPoolExecutor(thread-size : 10)를 사용하여 작업을 처리 하였는데 [AS-IS] for(File file : fileList){    threadPoolExecutor.submit(new BulkFile(file,....));} 이렇게 submit이 1000번 호출되고 10개는 스레드 풀이 작업을 나머지 990개는 queue에 쌓였다(스레드가 하나씩 가져와서 작업).스레드가 하나씩 가져와서 작업하는 방식은 context-switching이 자주 발생하고 불필요한 오버해드가 많이 발생해서 ..

    대용량 파일 관리 스케줄러 개발 정리

    프록시 서버(cpu : 4코어, 메모리 : 8GB)로 받은 API 데이터를 WAS로 전송하지 못했을때 데이터를 파일로 만들어서 주기적으로 재전송 하는 스케줄러 개발 요구사항.재시도 횟수 5회까지는 1분 마다 Call재시도 횟수 5회 이상 10회 까지는 30분마다 Call재시도 횟수 10회 이상일때는 Fail 폴더로 이동 파일명에 _숫자로 재시도 횟수를 표현 했고 1분, 30분 간격으로 돌아가는 스케줄러 두개를 만들었다. Files.walk로 스트림으로 파일들을 가져와서 WAS를 호출하고 실패하면 파일명에 재시도 횟수를 증가하게 했다. 몇만건 데이터를 처리하는데 문제가 없었으나 백만건 이상 파일을 만들어서 테스트를 하니 OOM이 발생했다. 1. 속도 저하스래드 5개로 파일을 돌렸는데 TPS가 150 정도만..

    자바 기초1

    get/set : 정보은닉 둘중 하나만 제공해서 필요한 것만 사용하게 하거나 멤버변수에서 값을 받을 때 원하는 형식을 받기 위해 사용 변수를 핸들링 하기 위해 사용 지역변수 : 사용하고 사라짐 맴버변수 : 인스턴스에서 사용되고 사라짐, int, char, double 초기화하지 않으면 맴버변수는 0,null로 초기화 됨 참조변수 : String, 객체 클래스변수 : 데이터 메모리에 올라가서 프로그램 종료시 사라짐 static : 로딩될때 데이터 메모리에 올라가서 프로그램 종료시 사라짐 공통적으로 사용하거나 고정된 값을 메모리놓고 쓸 때 사용 메모리 구조 : 데이터 메모리 - 스택 메모리 - 힙 메모리 데이터 메모리 : static 메모리, 프로그램 종료 시 사라짐 스택 메모리 : 함수 실행시 올라갔다가 ..