Back-End (18) 썸네일형 리스트형 [SpringBoot] 병렬, 비동기 처리 wiki * 이해한 만큼만 정리 parallelStream 비동기 처리는 아니고 병렬 처리 쓰레드 수가 임의로 지정되기 때문에 위험 짧게 끝날 수 있는 병렬 처리에 사용해야겠다고 결심 List storeList = storeListPage.getContent(); storeList.parallelStream() .forEach( store - > { ... }); ExecutorService 스레드 풀을 생성하고 관리할 수 있음 execute() : 반환 값 없을 때 submit() : 반환 값 있을 때 스레드 반환 shutdown() 필수 private void scrapExecuteAsync(List keywords) { ExecutorService executorService = Exec.. [SpringBoot] Executors.newFixedThreadPool() 코드의 이슈(자원 반환해주기) Executors.newFixedThreadPool() 사용목적 Executors.newFixedThreadPool() 메서드는 지정된 개수의 스레드가 있는 고정 크기의 스레드 풀을 생성할 수 있도록 하고, 이 스레드 풀은 비동기 작업을 처리하는 데 사용한다. 아래와 같이 CompletableFuture과 함께 사용했다. private void scrapExecuteAsync(List requestList) { ExecutorService executor = Executors.newFixedThreadPool(6); List futures = new ArrayList(); requestList.forEach(request -> { CompletableFuture future = CompletableFut.. [SpringBoot/Java17] Java 17 Record 활용(nested class, @Builder 사용, Class와 비교) 이번에 들어간 신규 프로젝트는 Java 17 버전을 사용하기로 했다. 사용하기 전에 java 17 새로운 기능들을 좀 찾아보니 그나마 record를 잘 활용할 수 있겠다고 생각했다. Java 17 새로운 기능 https://springframework.guru/what-is-new-in-java-17/ What is New in Java 17? - Spring Framework Guru A number of new features have been added to the Java programming language in the Java 17 release. In this post learn about what's new! springframework.guru https://e-una.tistory.co.. [SpringBoot] Exception Handler에 return 값을 ResponseEntity로 하지 않으면? ExceptionHandler 코드를 작성하는 도중 의문점이 들었다. 왜 꼭 "ResponseEntity"로 return 해야 하는지. 그냥 "ErrorResponse"로 해도 같은 형태로 응답이 오던데,,, 문제는 바로 HttpStatus였다. Error인데 200으로 응답되더라! ResponseEntity에 status 잘해서 넘겨주기. @ExceptionHandler(CommonException.class) public ResponseEntity customJwtException(CommonException e) { e.printStackTrace(); log.warn("CommonException : {}", e.getResponseCode().getDescription()); return Res.. [SpringBoot/Java17] java 17 SunJCE 오류 해결(vm option 추가) 문제 신규 프로젝트에 java 17 버전을 적용하면서 java 11 버전을 사용할 때 문제 없이 썼던 모듈에서 아래와 같은 오류가 났다. java.lang.IllegalAccessError:cannot access class com.sun.crypto.provider.SunJCE (in module java.base) because module java.base does not export com.sun.crypto.provider to unnamed module @0x4f209819 원인 모듈 공급사에 문의하니 java 11 이후부터 JCE가 기본적으로 load 되지 않아서 생긴 문제이며 아래 옵션을 추가해서 실행해보라는 답변을 받았다. --add-exports java.base/com.sun.cryp.. [SpringBoot] version upgrade version upgrade 이유 회사에는 운영된 지 3년 된 서비스가 있다. 그래서인지 20개가 넘는 환경변수를 직접 서버 운영하는 곳에서 입력해주는데 관리가 어려워서 운영 중인 config server를 이 서비스에도 적용하고자 했다. config server를 읽어오기 위해 spring-cloud-starter-config, spring-cloud-starter-bootstrap dependency도 추가했는데 bootstrap에 있는 profile 세개를 다 불러오면서 정상 작동되지 않았다. version upgrade id 'org.springframework.boot' version '2.3.0.RELEASE' -> id 'org.springframework.boot' version '2.4... [NCP/MySQL] NCP MySQL lower_case_table_names 설정하기 테이블의 대소문자 구분을 없애주기 위해 lower_case_table_names 옵션값을 바꿔줘야했다. 검색해도 안 나오길래 NCP에 바로 문의를 남겼다. NCP 문의 답변은 정말 구글링 하는 것보다 빠르다. NCP 답변 5.7은 DB 초기화 없이 config에서 변경이 가능하지만 8.0은 DB 초기화가 필요하다는 답변... export, import를 다시 해야된다니,,,~ 다음에는 생성하자마자 변경해줘야겠다. 변경 확인 방법 DB 서비스 상세보기 -> Variables 에서 확인이 가능하다. [MySQL] AWS RDS -> NCP MySQL로 DB 이관 높아진 환율로 회사의 AWS 운영 비용이 단위가 바뀌었다는 이야기를 들었다. NCP에서는 할인을 받을 수 있는 방법이 있다고 하여 급하게 RDS만 NCP로 이관하기로 하였다. Export 데이터 export는 workbench를 이용했다. NCP로 import 하기위해서 가장 중요한 것은 set-gtid-purged=OFF 옵션을 줘야 한다. workbench에서는 Advanced Options -> AUTO 값을 OFF로 변경해주면 된다. datagrip에서도 해봤는데 그냥 set-gtid-purged=OFF 옵션만 추가로 주면 됐었다. 이전 1 2 3 다음