목록Spring/Spring Boot (15)
잘 정리해보자
에러 메시지 : org.springframework.dao.EmptyResultDataAccessException: Item 2 of 10 did not update any rows 발생 원인 : MyBatisBatchItemWriter 클래스로 구현 도중 read데이터 중, 10개 데이터 중에 2개는 업데이트 하지 않는 row여서 발생하는 에러. write.assertUpdates 설정은 기본으로 true 설정되어있다. assertUpdates는 chunksize 단위로 처리되는데, 데이터 중 1개의 row라도 DB에서 처리되지 않으면 Exception을 발생시킨다. 해결 : 1 row라도 write처리 안할 경우 writer.assertUpdates를 false로 설정하고 재실행. -> .assert..
에러 메시지 : PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException 발생 원인 : Spring Boot에서 @FeignClient로 https로 API 호출한 경우 발생. (인증서 등록 안함) java에서 https로 통신할 때, SSL인증서를 등록 안해서 발생했습니다. (로컬에서 발생해서 로컬JVM에 등록 예정) 해결 : 급한대로 http로 호출해서 테스트하다가, SSL인증서를 추출해 Java VM에 등록. 아래 링크를 참고해 인증서를 등록했습니다. https://www.lesstif.com/system-admin/java-validatorexception-keystore-ssl-tls-import-1..
에러 메시지 : org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 발생 원인 : 배치 실행 시, AbstractPagingItemReader 로 read구현을 했는데, read함수 안에 paging처리 하면서 다른 dao도 함께 호출해서 발생. -> paging처리 하는 reader트랜잭션이 동작중인데, 다른 mapper를 호출하면서 트랜잭션 충돌이 발생. 해결 : paging처리하는 트랜잭션안에서 동작하려면 session을 열어서 같이 처리시키던가, bean으로 따로 만들어 처리. 저는 bean으로 따로 만들어서 처리했습..
Nginx : 경량 웹 서버 (동시접속을 관리해주고, was서버 부하를 줄이게 로드밸런서 역할도 함) 504 Gateway Time-out Nginx 환경에서 Rest API 호출 시, 504 Gateway Time-out이 발생했다. (대용량 배치 실행 시, 발생했음) Nginx 설정파일에서 readtime을 확인해보니 180으로 설정되어있어서 300으로 변경 후 재시작. proxy_read_timeout : 300 (proxy_read_timeout은 기본 60초로 설정)

- Gradle 기준 Spring Boot에 Swagger 적용을 위해 build.gradle 파일에 spring-fox 3.0을 적용합니다. dependencies { ... implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' } gradle적용 후 swagger설정파일을 생성합니다. config 패키지파일 안에 설정 파일 생성. @Configuration @EnableWebMvc public class SwaggerConfig { @Bean public Docket swaggerAPI(){ //Docket : swagger Bean return new Docket(DocumentationType.O..
Zuul (API Gateway) : web에서 백엔드 서비스 호출 시 거치는 gateway 역할의 어플리케이션. MSA의 동적 라우팅, 모니터링, 보안 등 담당 - 동적 라우팅 : 호출하는 시점에 따라 백엔드의 핸들러를 호출 - 모니터링 : 어떤 서비스 호출되는지 모니터링 - 인증과 보안 : MSA에서 인증 구현으로, 모든 서비스에 보안 구성 Eureka : Cloud 환경에서 서비스의 로드밸런싱, 실패처리 등 유연한 처리를 위해 각 서비스들의 정보(IP, Port, InstanceID) 을 포함한 REST 기반 미들웨어 서버 MSA 기반 아키텍처로, Client-Server 방식 -> Eureka client 가 server로 instance 정보들을 Eureka 서버로 등록 후, Eureka 의 정..
- maven/gradle 세팅 (빠른 시작을 위한 스타터 옵션들) 1. spring-boot-starter-web : 스프링 RESTful 서비스 개발 2. spring-boot-starter-test : junit, Hamcrest 등 스프링 테스트 3. spring-boot-starter-actuator : 어플리케이션 모니터링 및 관리 (민감한 정보 포함 - 운영의 경우 보안 필요) 4. spring-boot-starter-log4j2 : Log4j2 를 사용한 로깅 - Annotation 1. @SpringBootApplication : @EnableAutoConfiguration + @ComponentScan + @Configuation 를 합친 기능 스프링부트를 기동하는 main 메소드 역할..