dev/스프링 (46) 썸네일형 리스트형 Spring Async CompletableFuture 앞에서 작성한 글에 이어서 비동기로 호출한 메소드들의 결과값을 처리하는 방법입니다. 비동기로 호출한 메소드들의 결과값을 처리하려면 Async와 CompletableFuture를 사용하면 됩니다. 페이징 처리를 예시로 들면 일반적으로 데이터 목록을 조회하는 메소드와 데이터 갯수를 조회하는 메소드 2개를 호출하는데 이렇게 하면 동기로 순차적으로 처리되기 때문에 비효율적입니다. 2개의 메소드가 서로에게 영향을 끼치지 않기 때문에 비동기로 호출하는 것이 효율적입니다. 위의 ElasticSearchRepositoryImp 자바 코드를 보게 되면 데이터 목록을 조회하는 메소드와 데이터 목록 개수를 조회하는 메소드들을 각각 비동기로 호출하고 결과값을 리턴하고 있습니다. @Async 어노테이션을 통해 메소드를 비동기.. Spring Async 비동기 처리 스프링에서 메소드 호출을 비동기로 처리해야 하는 경우 Async를 사용하면 됩니다. 예를 들면 첨부파일을 ElasticSearch와 DB에 저장해야 하는 경우 순차적으로 저장하는 것보다 비동기로 처리하면 성능을 개선할 수 있습니다. 비동기 처리를 설정하는 AsyncConfig 클래스입니다. @Configuration 어노테이션을 통해 이 클래스가 스프링 설정을 담당하고 있음을 나타냅니다.(10라인) @EnableAsync 어노테이션을 사용하여 스프링의 비동기 설정을 처리합니다.(11라인) 비동기 작업을 지원하는 ThreadPoolTaskExecutor 빈을 생성하는 taskExecutor 메소드입니다.(14 ~ 23라인) 이 메소드에서 생성하는 빈 이름은 "taskExecutor"입니다.(14라인) 기.. Spring ElasticSearch Snapshot Backup Restore 스프링에서 ElasticSearch 데이터를 스냅샷으로 백업하고 복원하는 방법입니다. 이전에 작성한 ElasticSearch 스냅샷 생성하는 방법은 직접 kibana에서 작업해야 했는데 이번에는 REST API를 통해 스프링에서 처리하는 방법입니다. https://tiqndjd12.tistory.com/278 ElasticSearch Snapshot Backup RestoreElasticSearch 데이터를 스냅샷으로 백업하고 복원하는 방법입니다. 스냅샷을 생성하기 전에 먼저 elasticsearch.yml 파일에 스냅샷이 저장될 레포지토리를 설정합니다. elasticsearch.yml 파일은 /usr/share/tiqndjd12.tistory.com 스냅샷 레포지토리 생성과 등록은 사전에 완료되었다고.. Spring ElasticSearch 첨부파일 조회 스프링에서 ElastiSearch 첨부파일 조회하는 방법입니다. 클라이언트로부터 검색할 키워드를 받아서 검색하는 selectFile 메소드입니다.(88 ~ 110라인) attachment.content 속성에 색인된 첨부파일 내용을 wildcard를 통해 첨부파일의 내용을 조회합니다.(92 ~ 93라인) wildcard는 RDBMS로 비유하면 LIKE 검색과 같은 것입니다. ElastiSearch 조회 결과의 실질적 데이터를 사용자에게 전달하기 위해 조회 결과를 파싱 하여 리턴합니다.(95 ~ 109라인) REST API의 GET 메소드 방식을 사용해서 첨부파일의 내용을 조회합니다. kibana 조회 화면과 postman으로 조회한 결과를 비교하면 동일한 데이터가 확인된 것을 확인할 수 있습니다... Spring ElasticSearch 첨부파일 색인 스프링에서 ElasticSearch에 첨부파일 색인하는 방법입니다. 위의 코드는 클라이언트로부터 받은 첨부파일을 색인하는 insertFile 메소드입니다.(112 ~ 128라인) 먼저 멀티파트 요청의 첨부파일을 saveFileToDisk 메소드를 통해 서버에 저장합니다.(130 ~ 147라인) saveFileToDisk 메소드는 저장한 첨부파일 리스트를 리턴합니다.(146라인) 첨부파일 리스트 개수가 2개 이상이면 bulkFileElastic 메소드를 호출하고 1개면 saveFileElastic 메소드를 호출합니다.(123 ~ 127라인) bulkFileElastic 메소드는 2개 이상의 첨부파일을 한 번에 색인하는 메소드입니다.(149 ~ 170라인) 이전에 제가 작성한 ElasticSearch b.. Spring ClassPathResource 스프링에서 ClassPathResource 클래스를 통해 resources 디렉토리에 있는 파일을 읽을 수 있습니다. ClassPathResource 클래스는 자바 어플리케이션에서 classpath에 있는 리소스를 읽고 로드하는 역할을 맡고 있습니다. 예제 테스트 코드는 resources 디렉토리에 있는 "test.txt" 파일을 1줄씩 읽어서 출력하고 있습니다. try-with-resources를 통해 메모리 반환을 자동으로 처리하고 있습니다. AutoClose 인터페이스를 구현한 객체는 try-with-resources에서 자동으로 메모리를 반환합니다. 예제 테스트 코드를 실행하면 정상적으로 파일 내용이 출력되는 것을 확인할 수 있습니다. application.yml 외에 다른 파일을 읽어서 로드해야.. Spring Controller ResponseEntity Spring에서 개발할 때 컨트롤러 return 타입으로 주로 String, Map, List 등을 사용합니다. 간단하게 사용할 수 있어서 편리한 장점이 있지만 복잡한 HTTP 응답이 필요한 경우 ResponseEntity를 사용하면 됩니다. 위의 코드를 보면 Map을 통해 응답하는 것을 확인할 수 있습니다. 이전 코드와 비교하면 HTTP 상태 코드가 추가된 것을 확인할 수 있습니다. setString 메소드는 201 코드를 리턴하고(37라인), getString 메소드는 200 코드를 리턴합니다(50라인). 각 메소드의 리턴 타입인 ResponseEntity의 제너릭 타입은 HTTP 본문 타입에 대한 것입니다. Void는 본문이 없는 것이고, String은 본문이 문자열 타입인 것을 가리킵니다. 기존에.. Spring RestControllerAdvice 스프링 컨트롤러에서 예외 처리를 try-catch가 아닌 다른 방법으로 처리하는 방법이 있습니다. @RestControllerAdvice를 사용하는 방법인데 try-catch를 일일이 사용하는 것이 아니라 한 군데에서 처리할 수 있습니다. 위의 @RestControllerAdvice 적용 전 컨트롤러 코드를 보게 되면 try-catch를 사용해 예외를 처리하고 있습니다. 이렇게 하면 중복되는 코드가 많아지고 가독성도 떨어져서 좋은 방법이 아닙니다. @RestControllerAdvice를 사용하면 예외를 전역적으로 처리할 수 있습니다. @ExceptionHandler는 특정 예외가 발생했을 때 해당 예외를 처리하는 어노테이션입니다. Exception 예외 처리는 17~28라인 handleExcep.. 이전 1 2 3 4 ··· 6 다음