java/spring

    [Spring] 엑셀 다운로드 API

    [Spring] 엑셀 다운로드 API

    서비스 운영 중 사용자들 편의를 위해 엑셀 파일 다운로드 기능을 제공할 일이 생겨 학습한 내용을 기록한다. 라이브러리 추가 둘 중 하나만 추가하면 된다. HSSFWorkbook은 .xls 확장자, XSSWorkbook은 .xlsx 확장자 전용이라고 한다. 나는 .xlsx인 두 번째 라이브러리만 추가했다. implementation 'org.apache.poi:poi:5.2.2' // HSSFWorkbook 사용 implementation 'org.apache.poi:poi-ooxml:5.2.2' // XSSFWorkbook 사용 컨트롤러 @Controller @RequiredArgsConstructor @RequestMapping("/excels") public class ExcelController {..

    [Spring] request multipart file size 조정

    스프링 서버에 @RequestPart로 form-data 형식의 파일을 넣어주고 있었는데, 특정 크기 이상의 파일을 요청하면 FileSizeLimitExceededException 에러가 발생했다. 따라서 스프링 설정을 통해 파일 사이즈 한계값을 조정해주었다. spring: servlet: multipart: max-file-size: 10GB max-request-size: 10GB server: tomcat: max-http-form-post-size: 10GB max-file-size: 요청 파일 하나의 사이즈 max-request-size: 요청 파일 총 사이즈 max-http-form-post-size: http form 요청 사이즈 구글에 검색해보면 multipart 설정과 tomcat 설정 ..

    [Spring] MariaDB connection 끊김

    가벼운 API는 상관이 없는데, 호출 한 번에 10분 넘게 소요되는 무거운 API의 경우 중간에 커넥션이 끊기는 현상이 발생했다. 검색을 해보니, DB의 wait_timeout(현재 3분)보다 커넥션이 지속되는 경우 발생하는 문제로 추정된다. 종료된 커넥션을 다시 사용하기 전에 해당 커넥션이 정상적인지 검사를 하는 작업이 필요했고, validation query 설정을 사용하기로 결정했다. 스프링 서버에 해당 설정을 추가한다. spring: datasource: tomcat: validation-query: "select 1" 설정 이후 장시간 소요되는 API에서도 커넥션 끊김 현상이 사라졌다. 참고자료 https://xzio.tistory.com/10 https://engineering-skcc.git..

    [Spring] Failed to validate connection

    서비스 운영 중 아래와 같은 경고 로그가 지속적으로 생겼다. hikariPool - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@7aa2f8a6 ((conn=463456) Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value. 서비스가 동작하는데 특별한 문제는 없었지만, 자꾸 경고 로그가 발생하는 것이 거슬려서 해결해보기로 한다. 경고 로그 마지막에 using a shorter maxLifetime value 라는 것이 보여서 해당 키워드로 열심히 검색해봤다. 알아본 결..

    [Spring] AWS S3 객체 전체 조회 or 해당 level만 조회

    기본 세팅 먼저 S3 버킷에 대한 퍼블릭 엑세스 설정이 필요하다. 해당 글을 참고하자. 2022.07.25 - [aws] - [AWS] S3 버킷 퍼블릭 엑세스 설정 [AWS] S3 버킷 퍼블릭 엑세스 설정 AWS S3 버킷을 퍼블릭하게 열어두고 사용할 때가 많다. 이번에는 S3 퍼블릭 엑세스에 대한 기본 세팅을 설명한다. 퍼블릭 엑세스 차단 기본적으로 아무 설정 없이 버킷을 생성하면 모든 퍼블릭 엑 gksdudrb922.tistory.com 또한, Spring Boot에서 S3 설정 및 접근에 대한 인증 키를 입력해야 한다. 해당 글을 참고하자. 2022.07.25 - [java/spring] - [Spring] AWS S3 접근 [Spring] AWS S3 접근 라이브러리 추가 implementati..

    [Spring] AWS S3 접근

    라이브러리 추가 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 인증 키 추가 본인 IAM 인증 키를 추가하면 된다. cloud: aws: credentials: instance-profile: false access-key: [access-key] secret-key: [secret-key] region: auto: false static: ap-northeast-2 stack: auto: false S3Config @Configuration public class S3Config { @Value("${cloud.aws.credentials.access-key}") public String accessKe..

    [Spring] S3 Pre-Signed URL 생성

    기본 세팅 먼저 S3 버킷에 대한 퍼블릭 엑세스 설정이 필요하다. 해당 글을 참고하자. 2022.07.25 - [aws] - [AWS] S3 버킷 퍼블릭 엑세스 설정 [AWS] S3 버킷 퍼블릭 엑세스 설정 AWS S3 버킷을 퍼블릭하게 열어두고 사용할 때가 많다. 이번에는 S3 퍼블릭 엑세스에 대한 기본 세팅을 설명한다. 퍼블릭 엑세스 차단 기본적으로 아무 설정 없이 버킷을 생성하면 모든 퍼블릭 엑 gksdudrb922.tistory.com 또한, Spring Boot에서 S3 설정 및 접근에 대한 인증 키를 입력해야 한다. 해당 글을 참고하자. 2022.07.25 - [java/spring] - [Spring] AWS S3 접근 [Spring] AWS S3 접근 라이브러리 추가 implementati..

    [Spring] @Value, static 변수에 사용하기

    spring이 제공하는 @Value은 application.yml 등과 결합하여 변수를 상수처럼 사용할 수 있는 유용한 애노테이션이다. 예를 들어, 다음과 같이 사용할 수 있다. # applicatio.yml example: name: Han age: 26 // Example.java @RestController @RequestMapping("/example") public class Example { @Value("${example.name}") String name; @Value("${example.age}") String age; @GetMapping public String example() { return "Name: " + name + ", Age: " + age; } } // localhos..